forked from TrueCloudLab/rclone
b2: cleanup old file versions - fixes #462
This commit is contained in:
parent
0a43ff9c13
commit
018fe80bcb
2 changed files with 38 additions and 11 deletions
29
b2/b2.go
29
b2/b2.go
|
@ -749,10 +749,12 @@ func (f *Fs) deleteByID(ID, Name string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Purge deletes all the files and directories
|
// purge deletes all the files and directories
|
||||||
|
//
|
||||||
|
// if oldOnly is true then it deletes only non current files.
|
||||||
//
|
//
|
||||||
// Implemented here so we can make sure we delete old versions.
|
// Implemented here so we can make sure we delete old versions.
|
||||||
func (f *Fs) Purge() error {
|
func (f *Fs) purge(oldOnly bool) error {
|
||||||
var errReturn error
|
var errReturn error
|
||||||
var checkErrMutex sync.Mutex
|
var checkErrMutex sync.Mutex
|
||||||
var checkErr = func(err error) {
|
var checkErr = func(err error) {
|
||||||
|
@ -774,24 +776,46 @@ func (f *Fs) Purge() error {
|
||||||
go func() {
|
go func() {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
for object := range toBeDeleted {
|
for object := range toBeDeleted {
|
||||||
|
fs.Stats.Transferring(object.Name)
|
||||||
checkErr(f.deleteByID(object.ID, object.Name))
|
checkErr(f.deleteByID(object.ID, object.Name))
|
||||||
|
fs.Stats.DoneTransferring(object.Name)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
last := ""
|
||||||
checkErr(f.list("", fs.MaxLevel, "", 0, true, func(remote string, object *api.File, isDirectory bool) error {
|
checkErr(f.list("", fs.MaxLevel, "", 0, true, func(remote string, object *api.File, isDirectory bool) error {
|
||||||
if !isDirectory {
|
if !isDirectory {
|
||||||
|
fs.Stats.Checking(remote)
|
||||||
|
if oldOnly && last != remote {
|
||||||
|
fs.Debug(remote, "Not deleting current version (id %q) %q", object.ID, object.Action)
|
||||||
|
} else {
|
||||||
fs.Debug(remote, "Deleting (id %q)", object.ID)
|
fs.Debug(remote, "Deleting (id %q)", object.ID)
|
||||||
toBeDeleted <- object
|
toBeDeleted <- object
|
||||||
}
|
}
|
||||||
|
last = remote
|
||||||
|
fs.Stats.DoneChecking(remote)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}))
|
}))
|
||||||
close(toBeDeleted)
|
close(toBeDeleted)
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
|
|
||||||
|
if !oldOnly {
|
||||||
checkErr(f.Rmdir())
|
checkErr(f.Rmdir())
|
||||||
|
}
|
||||||
return errReturn
|
return errReturn
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Purge deletes all the files and directories including the old versions.
|
||||||
|
func (f *Fs) Purge() error {
|
||||||
|
return f.purge(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CleanUp deletes all the hidden files.
|
||||||
|
func (f *Fs) CleanUp() error {
|
||||||
|
return f.purge(true)
|
||||||
|
}
|
||||||
|
|
||||||
// Hashes returns the supported hash sets.
|
// Hashes returns the supported hash sets.
|
||||||
func (f *Fs) Hashes() fs.HashSet {
|
func (f *Fs) Hashes() fs.HashSet {
|
||||||
return fs.HashSet(fs.HashSHA1)
|
return fs.HashSet(fs.HashSHA1)
|
||||||
|
@ -1259,5 +1283,6 @@ func (o *Object) Remove() error {
|
||||||
var (
|
var (
|
||||||
_ fs.Fs = &Fs{}
|
_ fs.Fs = &Fs{}
|
||||||
_ fs.Purger = &Fs{}
|
_ fs.Purger = &Fs{}
|
||||||
|
_ fs.CleanUpper = &Fs{}
|
||||||
_ fs.Object = &Object{}
|
_ fs.Object = &Object{}
|
||||||
)
|
)
|
||||||
|
|
|
@ -119,9 +119,11 @@ available.
|
||||||
The old versions of files are visible in the B2 web interface, but not
|
The old versions of files are visible in the B2 web interface, but not
|
||||||
via rclone yet.
|
via rclone yet.
|
||||||
|
|
||||||
Rclone doesn't provide any way of managing old versions (downloading
|
If you wish to remove all the old versions then you can use the
|
||||||
them or deleting them) at the moment. When you `purge` a bucket, all
|
`rclone cleanup remote:bucket` command which will delete all the old
|
||||||
the old versions will be deleted.
|
versions of files, leaving the current ones intact.
|
||||||
|
|
||||||
|
When you `purge` a bucket, all the old versions will be deleted also.
|
||||||
|
|
||||||
### Transfers ###
|
### Transfers ###
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue