forked from kothar/go-backblaze
/
delete.go
85 lines (72 loc) · 1.67 KB
/
delete.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package main
import (
"errors"
"fmt"
"strings"
"time"
)
// Delete is a command
type Delete struct {
Hide bool `long:"hide" description:"Hide the file, leaving previous versions in place"`
All bool `short:"a" long:"all" description:"Remove all versions of a file"`
}
func init() {
parser.AddCommand("delete", "Delete a file",
"Specify just a filename to hide the file from listings. Specifiy a version id as fileName:versionId to permanently delete a file version.",
&Delete{})
}
// Execute the delete command
func (o *Delete) Execute(args []string) error {
client, err := Client()
if err != nil {
return err
}
bucket, err := client.Bucket(opts.Bucket)
if err != nil {
return err
}
if bucket == nil {
return errors.New("Bucket not found: " + opts.Bucket)
}
for _, file := range args {
// TODO handle wildcards
if opts.Verbose {
fmt.Println(file)
}
parts := strings.SplitN(file, ":", 2)
if len(parts) > 1 {
bucket.DeleteFileVersion(parts[0], parts[1])
} else {
if o.Hide {
bucket.HideFile(file)
} else {
// Get most recent versions
count := 1
if o.All {
count = 1000
}
versions, err := bucket.ListFileVersions(file, "", count)
if err != nil {
return err
}
count = 0
for _, f := range versions.Files {
if f.Name != file {
break
}
if opts.Verbose && o.All {
fmt.Printf(" %s %v\n", f.ID, time.Unix(f.UploadTimestamp/1000, f.UploadTimestamp%1000))
}
if _, err := bucket.DeleteFileVersion(file, f.ID); err != nil {
return err
}
count++
}
if count == 0 {
return errors.New("File not found: " + file)
}
}
}
}
return nil
}