From 104ee66f5930f4a37ac84538c29a291bf1d08f4f Mon Sep 17 00:00:00 2001 From: Guangxiong Lin Date: Tue, 24 Jan 2023 20:27:22 +0800 Subject: Use cobra as command selector --- cmd/mv.go | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 cmd/mv.go (limited to 'cmd/mv.go') diff --git a/cmd/mv.go b/cmd/mv.go new file mode 100644 index 0000000..c3f4b5b --- /dev/null +++ b/cmd/mv.go @@ -0,0 +1,59 @@ +package cmd + +import ( + "errors" + "os" + "path/filepath" + + "github.com/spf13/cobra" + + "gxlin.org/zk/pkg" +) + +func init() { + rootCmd.AddCommand(mvCmd) +} + +var mvCmd = &cobra.Command{ + Use: "mv [source] [target]", + Args: mvCmdArgs, + Run: mvCmdRun, +} + +func mvCmdArgs(cmd *cobra.Command, args []string) error { + if len(args) != 2 { + return errors.New("requires 2 args") + } + + return nil +} + +func mvCmdRun(cmd *cobra.Command, args []string) { + rename(args[0], args[1]) +} + +func rename(source, target string) { + source, err := filepath.Abs(source) + if err != nil { + panic("Unable to get abspath of " + source) + } + + target, err = filepath.Abs(target) + if err != nil { + panic("Unable to get abspath of " + target) + } + + if !pkg.DocCollection.Contain(source) { + panic("Database doesn't contain " + source) + } + + if err := os.Rename(source, target); err != nil { + panic(err) + } + + doc := pkg.DocCollection[source] + for backlink := range doc.Backlinks { + pkg.DocCollection[backlink].UpdateLinks(source, target) + } + +} -- cgit v1.2.3