-
Notifications
You must be signed in to change notification settings - Fork 19
/
rename.go
96 lines (88 loc) · 2.81 KB
/
rename.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
86
87
88
89
90
91
92
93
94
95
96
package cmd
import (
"fmt"
"os"
"sync"
"github.com/0chain/gosdk/zboxcore/sdk"
"github.com/spf13/cobra"
)
// renameCmd represents rename command
var renameCmd = &cobra.Command{
Use: "rename",
Short: "rename an object(file/folder) on blobbers",
Long: `rename an object on blobbers`,
Args: cobra.MinimumNArgs(0),
Run: func(cmd *cobra.Command, args []string) {
fflags := cmd.Flags() // fflags is a *flag.FlagSet
if fflags.Changed("allocation") == false { // check if the flag "path" is set
PrintError("Error: allocation flag is missing") // If not, we'll let the user know
os.Exit(1) // and os.Exit(1)
}
if fflags.Changed("remotepath") == false {
PrintError("Error: remotepath flag is missing")
os.Exit(1)
}
if fflags.Changed("destname") == false {
PrintError("Error: destname flag is missing")
os.Exit(1)
}
allocationID := cmd.Flag("allocation").Value.String()
allocationObj, err := sdk.GetAllocation(allocationID)
if err != nil {
PrintError("Error fetching the allocation", err)
os.Exit(1)
}
remotepath := cmd.Flag("remotepath").Value.String()
destname := cmd.Flag("destname").Value.String()
commit, _ := cmd.Flags().GetBool("commit")
statsMap, err := allocationObj.GetFileStats(remotepath)
if err != nil {
PrintError("Error in getting information about the object." + err.Error())
os.Exit(1)
}
isFile := false
for _, v := range statsMap {
if v != nil {
isFile = true
break
}
}
var fileMeta *sdk.ConsolidatedFileMeta
if isFile && commit {
fileMeta, err = allocationObj.GetFileMeta(remotepath)
if err != nil {
PrintError("Failed to fetch metadata for the given file", err.Error())
os.Exit(1)
}
}
err = allocationObj.RenameObject(remotepath, destname)
if err != nil {
PrintError(err.Error())
os.Exit(1)
}
fmt.Println(remotepath + " renamed")
if commit {
fmt.Println("Commiting changes to blockchain ...")
if isFile {
wg := &sync.WaitGroup{}
statusBar := &StatusBar{wg: wg}
wg.Add(1)
commitMetaTxn(remotepath, "Rename", "", "", allocationObj, fileMeta, statusBar)
wg.Wait()
} else {
commitFolderTxn("Rename", remotepath, destname, allocationObj)
}
}
return
},
}
func init() {
rootCmd.AddCommand(renameCmd)
renameCmd.PersistentFlags().String("allocation", "", "Allocation ID")
renameCmd.PersistentFlags().String("remotepath", "", "Remote path of object to rename")
renameCmd.PersistentFlags().String("destname", "", "New Name for the object (Only the name and not the path). Include the file extension if applicable")
renameCmd.Flags().Bool("commit", false, "pass this option to commit the metadata transaction")
renameCmd.MarkFlagRequired("allocation")
renameCmd.MarkFlagRequired("remotepath")
renameCmd.MarkFlagRequired("destname")
}