diff --git a/branches.go b/branches.go index 9159e92..3b642c1 100644 --- a/branches.go +++ b/branches.go @@ -82,3 +82,29 @@ func (repo *Repo) DeleteLocalDevelBranch() error { return fmt.Errorf("local branch has patches not in remote") } } + +// makes a local branch based off of the master branch +// (unless a remote devel branch exists. then it uses that) +func (repo *Repo) MakeLocalDevelBranch() error { + branch := repo.GetDevelBranchName() + if branch == "" { + // hard coded default + branch = "devel" + } + if repo.Exists(filepath.Join(".git/refs/heads", branch)) { + // local devel branch already exists + return nil + } + if repo.Exists(filepath.Join(".git/refs/remotes/origin", branch)) { + // remote devel branch exists, but local does not + cmd := []string{"git", "checkout", branch} + repo.RunVerbose(cmd) + return nil + } + master := repo.GetMasterBranchName() + cmd := []string{"git", "branch", branch, master} + repo.RunVerbose(cmd) + cmd = []string{"git", "checkout", branch} + repo.RunVerbose(cmd) + return nil +} diff --git a/checkout.go b/checkout.go index ce8c88b..f2df501 100644 --- a/checkout.go +++ b/checkout.go @@ -1,6 +1,7 @@ package gitpb import ( + "fmt" "os" "path/filepath" @@ -84,12 +85,11 @@ func (repo *Repo) checkoutBranch(bName string) bool { func (repo *Repo) createUserBranchNew(branch string) error { if branch == "" || branch == "uerr" { - log.Info("forge.gitpb logic err. branch name was:", branch) - return nil + return fmt.Errorf("forge.gitpb logic err. branch name was: %s", branch) } if repo.IsDirty() { // never change repos on dirty branches - return nil + return fmt.Errorf("repo is dirty") } // log.Info("forge.gitpb look for branch name was:", branch, repo.GetGoPath())