fs: Accumulate stats when using --dry-run

Fixes #4624
This commit is contained in:
Ingo Weiss 2020-11-05 07:15:42 +00:00 committed by Nick Craig-Wood
parent ba51409c3c
commit 1d40bc1901
2 changed files with 16 additions and 0 deletions

View File

@ -280,6 +280,12 @@ func (acc *Account) ServerSideCopyEnd(n int64) {
acc.stats.Bytes(n) acc.stats.Bytes(n)
} }
// DryRun accounts for statistics without running the operation
func (acc *Account) DryRun(n int64) {
acc.ServerSideCopyStart()
acc.ServerSideCopyEnd(n)
}
// Account for n bytes from the current file bandwidth limit (if any) // Account for n bytes from the current file bandwidth limit (if any)
func (acc *Account) limitPerFileBandwidth(n int) { func (acc *Account) limitPerFileBandwidth(n int) {
acc.values.mu.Lock() acc.values.mu.Lock()

View File

@ -368,6 +368,8 @@ func Copy(ctx context.Context, f fs.Fs, dst fs.Object, remote string, src fs.Obj
}() }()
newDst = dst newDst = dst
if SkipDestructive(ctx, src, "copy") { if SkipDestructive(ctx, src, "copy") {
in := tr.Account(ctx, nil)
in.DryRun(src.Size())
return newDst, nil return newDst, nil
} }
maxTries := ci.LowLevelRetries maxTries := ci.LowLevelRetries
@ -559,6 +561,8 @@ func Move(ctx context.Context, fdst fs.Fs, dst fs.Object, remote string, src fs.
}() }()
newDst = dst newDst = dst
if SkipDestructive(ctx, src, "move") { if SkipDestructive(ctx, src, "move") {
in := tr.Account(ctx, nil)
in.DryRun(src.Size())
return newDst, nil return newDst, nil
} }
// See if we have Move available // See if we have Move available
@ -1929,6 +1933,12 @@ func (l *ListFormat) Format(entry *ListJSONItem) (result string) {
// if available) and doing renames in parallel. // if available) and doing renames in parallel.
func DirMove(ctx context.Context, f fs.Fs, srcRemote, dstRemote string) (err error) { func DirMove(ctx context.Context, f fs.Fs, srcRemote, dstRemote string) (err error) {
ci := fs.GetConfig(ctx) ci := fs.GetConfig(ctx)
if SkipDestructive(ctx, srcRemote, "dirMove") {
accounting.Stats(ctx).Renames(1)
return nil
}
// Use DirMove if possible // Use DirMove if possible
if doDirMove := f.Features().DirMove; doDirMove != nil { if doDirMove := f.Features().DirMove; doDirMove != nil {
err = doDirMove(ctx, f, srcRemote, dstRemote) err = doDirMove(ctx, f, srcRemote, dstRemote)