Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Skip archiver.Scan before backup when --quiet is set #1676

Merged
merged 1 commit into from Mar 21, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions changelog/unreleased/issue-1160
@@ -0,0 +1,5 @@
Enhancement: Improve backup speed by skipping the initial scan when the quiet flag is set

We've improved the backup speed when the quiet flag -q or --quiet is set by skipping the initial scan which gathers information for displaying the progress bar and the ETA estimation.

https://github.com/restic/restic/issues/1160
9 changes: 6 additions & 3 deletions cmd/restic/cmd_backup.go
Expand Up @@ -451,9 +451,12 @@ func runBackup(opts BackupOptions, gopts GlobalOptions, args []string) error {
return true
}

stat, err := archiver.Scan(target, selectFilter, newScanProgress(gopts))
if err != nil {
return err
var stat restic.Stat
if !gopts.Quiet {
stat, err = archiver.Scan(target, selectFilter, newScanProgress(gopts))
if err != nil {
return err
}
}

arch := archiver.New(repo)
Expand Down
35 changes: 35 additions & 0 deletions cmd/restic/integration_test.go
Expand Up @@ -1312,3 +1312,38 @@ func linkEqual(source, dest []string) bool {

return true
}

func TestQuietBackup(t *testing.T) {
env, cleanup := withTestEnvironment(t)
defer cleanup()

datafile := filepath.Join("testdata", "backup-data.tar.gz")
fd, err := os.Open(datafile)
if os.IsNotExist(errors.Cause(err)) {
t.Skipf("unable to find data file %q, skipping", datafile)
return
}
rtest.OK(t, err)
rtest.OK(t, fd.Close())

testRunInit(t, env.gopts)

rtest.SetupTarTestFixture(t, env.testdata, datafile)
opts := BackupOptions{}

env.gopts.Quiet = false
testRunBackup(t, []string{env.testdata}, opts, env.gopts)
snapshotIDs := testRunList(t, "snapshots", env.gopts)
rtest.Assert(t, len(snapshotIDs) == 1,
"expected one snapshot, got %v", snapshotIDs)

testRunCheck(t, env.gopts)

env.gopts.Quiet = true
testRunBackup(t, []string{env.testdata}, opts, env.gopts)
snapshotIDs = testRunList(t, "snapshots", env.gopts)
rtest.Assert(t, len(snapshotIDs) == 2,
"expected two snapshots, got %v", snapshotIDs)

testRunCheck(t, env.gopts)
}
4 changes: 3 additions & 1 deletion doc/manual_rest.rst
Expand Up @@ -107,7 +107,9 @@ Subcommand that support showing progress information such as ``backup``,
``check`` and ``prune`` will do so unless the quiet flag ``-q`` or
``--quiet`` is set. When running from a non-interactive console progress
reporting will be limited to once every 10 seconds to not fill your
logs.
logs. Use ``backup`` with the quiet flag ``-q`` or ``--quiet`` can skip
the initial scan of the source directory, this may shorten the backup
time needed for large directories.

Additionally on Unix systems if ``restic`` receives a SIGUSR1 signal the
current progress will written to the standard output so you can check up
Expand Down