89 lines
2.1 KiB
Go
89 lines
2.1 KiB
Go
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.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
|
|
}
|