diff --git a/repo.merge.go b/repo.merge.go index 6dbb35e..ae74380 100644 --- a/repo.merge.go +++ b/repo.merge.go @@ -1,27 +1,45 @@ package gitpb import ( + "fmt" + "github.com/go-cmd/cmd" "go.wit.com/log" ) -func (rs *Repo) MergeUserToDevel() (*cmd.Status, error) { - startbranch := rs.GetCurrentBranchName() - devel := rs.GetDevelBranchName() - user := rs.GetUserBranchName() +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("MergeUserToDevel() checking out", devel, "started on", startbranch, "merge", user) + log.Info("MergeToDevel() merging from", user, "into", devel) - var all [][]string - all = append(all, []string{"git", "checkout", devel}) - all = append(all, []string{"git", "merge", user}) - all = append(all, []string{"git", "push"}) - - if result, err := rs.RunStrictAll(all); err != nil { - log.Log(WARN, "MergeUserToDevel() failed", rs.GetFullPath()) + cmd := []string{"git", "merge", user} + result, err := r.RunQuiet(cmd) + if err != nil { + log.Log(WARN, "MergeToDevel() failed", r.GetFullPath()) return result, err } - return nil, nil + + 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) {