summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--repo.merge.go42
1 files changed, 30 insertions, 12 deletions
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"})
+ cmd := []string{"git", "merge", user}
+ result, err := r.RunQuiet(cmd)
+ if err != nil {
+ log.Log(WARN, "MergeToDevel() failed", r.GetFullPath())
+ return result, err
+ }
- if result, err := rs.RunStrictAll(all); err != nil {
- log.Log(WARN, "MergeUserToDevel() failed", rs.GetFullPath())
+ 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 nil, nil
+ return result, nil
}
func (rs *Repo) MergeDevelToMaster() (*cmd.Status, error) {