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