package gitpb import ( "fmt" "github.com/go-cmd/cmd" "go.wit.com/log" ) func (r *Repo) MergeToDevel() (*cmd.Status, error) { r.Reload() if r.GetCurrentBranchName() != r.GetDevelBranchName() { return nil, fmt.Errorf("repo not on devel branch") } if r.CheckDirty() { return nil, fmt.Errorf("repo is dirty") } devel := r.GetDevelBranchName() user := r.GetUserBranchName() log.Info("MergeToDevel() merging from", user, "into", devel) cmd := []string{"git", "merge", user} result, err := r.RunQuiet(cmd) if err != nil { log.Log(WARN, "MergeToDevel() failed", r.GetFullPath()) return result, err } if !r.IsBranchRemote(devel) { // devel branch is not remote. do not try 'git push' return result, nil } // it seems like we have write access. lets find out! cmd = []string{"git", "push"} result, err = r.RunQuiet(cmd) if err != nil { log.Log(WARN, "MergeToDevel() failed", r.GetFullPath()) return result, err } return result, nil } func (rs *Repo) MergeDevelToMaster() (*cmd.Status, error) { startbranch := rs.GetCurrentBranchName() devel := rs.GetDevelBranchName() main := rs.GetMasterBranchName() log.Info("MergeDevelToMaster() checking out", main, "started on", startbranch, "merge", devel) var all [][]string all = append(all, []string{"git", "checkout", main}) all = append(all, []string{"git", "merge", devel}) all = append(all, []string{"git", "push"}) if result, err := rs.RunStrictAll(all); err != nil { log.Log(WARN, "MergeDevelToMaster() failed", rs.GetFullPath()) return result, err } return nil, nil }