package gitpb import ( "fmt" "github.com/go-cmd/cmd" "go.wit.com/log" ) func (r *Repo) MergeToDevel() (*cmd.Status, error) { r.ReloadCheck() if r.CheckDirty() { return nil, fmt.Errorf("repo is dirty") } // not needed/wanted anymore? // if r.GetCurrentBranchName() != r.GetUserBranchName() { // return nil, fmt.Errorf("repo is not on user branch") // } if err := r.CheckoutDevelError(); err != nil { log.Info("CheckoutDevelError()", err) return nil, err } devel := r.GetDevelBranchName() user := r.GetUserBranchName() log.Info(r.FullPath, "MergeToDevel() merging from", user, "into", devel) cmd := []string{"git", "merge", user} result := r.RunRealtimeVerbose(cmd) if result.Error != nil { log.Log(WARN, "MergeToDevel() failed", r.GetFullPath()) return nil, result.Error } if !r.IsBranchRemote(devel) { r.ReloadCheck() // rescan the repo // devel branch is not remote. do not try 'git push' return nil, nil } // it seems like we have write access. lets find out! cmd = []string{"git", "push"} result = r.RunRealtimeVerbose(cmd) if result.Error != nil { log.Log(WARN, "GitPushToDevel() failed", r.GetFullPath()) return nil, result.Error } r.ReloadCheck() // rescan the repo return nil, nil } func (r *Repo) MergeToMaster() (*cmd.Status, error) { r.ReloadCheck() // was this really needed? // if r.GetCurrentBranchName() != r.GetDevelBranchName() { // return nil, fmt.Errorf("repo is not on devel branch") // } if r.CheckDirty() { return nil, fmt.Errorf("repo is dirty") } if err := r.CheckoutMasterError(); err != nil { log.Info("CheckoutMasterError()", err) return nil, err } master := r.GetMasterBranchName() devel := r.GetDevelBranchName() log.Info("MergeToMaster() merging from", devel, "into", master) cmd := []string{"git", "merge", devel} result := r.RunRealtimeVerbose(cmd) if result.Error != nil { log.Log(WARN, "MergeToMaster() failed", r.GetFullPath()) return nil, result.Error } // it seems like we have write access. lets find out! cmd = []string{"git", "push"} result = r.RunRealtimeVerbose(cmd) if result.Error != nil { log.Log(WARN, "GitPushToMaster() failed", r.GetFullPath()) return nil, result.Error } r.ReloadCheck() // rescan the repo return nil, nil }