summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--branches.go26
-rw-r--r--checkout.go6
2 files changed, 29 insertions, 3 deletions
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())