github.com/hwaf/hwaf@v0.0.0-20140814122253-5465f73b20f1/cmd_git_rm_submodule.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 "os/exec" 7 "path/filepath" 8 9 "github.com/gonuts/commander" 10 "github.com/gonuts/flag" 11 ) 12 13 func hwaf_make_cmd_git_rm_submodule() *commander.Command { 14 cmd := &commander.Command{ 15 Run: hwaf_run_cmd_git_rm_submodule, 16 UsageLine: "rm-submodule [options] <directory>", 17 Short: "remove a submodule", 18 Long: ` 19 rm-submodule removes a submodule from a GIT repository. 20 21 ex: 22 $ hwaf git rm-submodule Control/AthenaCommon 23 $ hwaf git rm-submodule src/Control/AthenaCommon 24 $ hwaf git rm-submodule -no-commit src/Control/AthenaCommon 25 `, 26 Flag: *flag.NewFlagSet("hwaf-git-rm-submodule", flag.ExitOnError), 27 } 28 cmd.Flag.Bool("no-commit", true, "do not commit the result") 29 return cmd 30 } 31 32 func hwaf_run_cmd_git_rm_submodule(cmd *commander.Command, args []string) error { 33 var err error 34 n := "hwaf-" + cmd.Name() 35 36 pkgdir := "" 37 pkgname := "" 38 switch len(args) { 39 case 1: 40 pkgdir = args[0] 41 pkgname = args[0] 42 default: 43 return fmt.Errorf("%s: needs a submodule name to remove", n) 44 } 45 46 nocommit := cmd.Flag.Lookup("no-commit").Value.Get().(bool) 47 48 cmtpkgdir := "src" 49 50 if !path_exists(pkgdir) { 51 cfg, err := g_ctx.LocalCfg() 52 if err != nil { 53 return err 54 } 55 if cfg.HasOption("hwaf-cfg", "cmtpkgs") { 56 cmtpkgdir, err = cfg.String("hwaf-cfg", "cmtpkgs") 57 if err != nil { 58 return err 59 } 60 } 61 if path_exists(filepath.Join(cmtpkgdir, pkgdir)) { 62 pkgdir = filepath.Join(cmtpkgdir, pkgdir) 63 } 64 } 65 66 pkgdir = os.ExpandEnv(pkgdir) 67 pkgdir = filepath.Clean(pkgdir) 68 69 if !path_exists(pkgdir) { 70 err = fmt.Errorf("no such directory [%s]", pkgdir) 71 if err != nil { 72 return err 73 } 74 } 75 76 if !nocommit { 77 git := exec.Command("git", "add", ".gitmodules") 78 err = git.Run() 79 if err != nil { 80 return err 81 } 82 83 git = exec.Command( 84 "git", "commit", "-m", 85 fmt.Sprintf("removed submodule [%s]", pkgname), 86 ) 87 err = git.Run() 88 if err != nil { 89 return err 90 } 91 } 92 93 return err 94 } 95 96 // EOF