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) { r.Reload() // rescan the repo // devel branch is not remote. do not try 'git push' return result, nil } if r.GetReadOnly() { r.Reload() // rescan the repo // devel branch is read only. you can not 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, "GitPushToDevel() failed", r.GetFullPath()) return result, err } r.Reload() // rescan the repo return result, nil } func (r *Repo) MergeToMaster() (*cmd.Status, error) { r.Reload() if r.GetCurrentBranchName() != r.GetMasterBranchName() { return nil, fmt.Errorf("repo not on master branch") } if r.GetReadOnly() { r.Reload() // rescan the repo // master branch is read only. you can not git push return nil, fmt.Errorf("can't merge to master on read only() repos") } if r.CheckDirty() { return nil, fmt.Errorf("repo is dirty") } master := r.GetMasterBranchName() devel := r.GetDevelBranchName() log.Info("MergeToMaster() merging from", devel, "into", master) cmd := []string{"git", "merge", devel} result, err := r.RunQuiet(cmd) if err != nil { log.Log(WARN, "MergeToMaster() failed", r.GetFullPath()) return result, err } if r.GetReadOnly() { r.Reload() // rescan the repo // master branch is read only. you can not 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, "GitPushToMaster() failed", r.GetFullPath()) return result, err } r.Reload() // rescan the repo return result, nil }