summaryrefslogtreecommitdiff
path: root/branches.go
diff options
context:
space:
mode:
Diffstat (limited to 'branches.go')
-rw-r--r--branches.go73
1 files changed, 73 insertions, 0 deletions
diff --git a/branches.go b/branches.go
index a2635d7..ec86c20 100644
--- a/branches.go
+++ b/branches.go
@@ -1,7 +1,12 @@
package gitpb
import (
+ "errors"
+ "os"
"path/filepath"
+ "strings"
+
+ "go.wit.com/log"
)
// returns true if 'git pull' will work
@@ -50,3 +55,71 @@ func (repo *Repo) ExistsDevelBranch() bool {
}
return false
}
+
+func (repo *Repo) GetBranchHash(branchname string) string {
+ if branchname == "" {
+ return ""
+ }
+ if repo.Exists(filepath.Join(".git/refs/remotes", branchname)) {
+ return readRefHash(filepath.Join(repo.FullPath, ".git/refs/remotes", branchname))
+ }
+ if repo.Exists(filepath.Join(".git/refs/heads", branchname)) {
+ return readRefHash(filepath.Join(repo.FullPath, ".git/refs/heads", branchname))
+ }
+ return ""
+}
+
+func (repo *Repo) GetBranchVersion(branchname string) string {
+ if branchname == repo.GetUserBranchName() {
+ return "user"
+ }
+ if branchname == repo.GetDevelBranchName() {
+ return "devel"
+ }
+ if branchname == repo.GetMasterBranchName() {
+ return "master"
+ }
+ base, branchname := filepath.Split(branchname)
+ if base != "" {
+ if branchname == repo.GetUserBranchName() {
+ return "remote user"
+ }
+ if branchname == repo.GetDevelBranchName() {
+ return "remote devel"
+ }
+ if branchname == repo.GetMasterBranchName() {
+ return "remote master"
+ }
+ }
+ return ""
+}
+
+func readRefHash(filename string) string {
+ data, _ := os.ReadFile(filename)
+ return string(data)
+}
+
+func (repo *Repo) GetLocalBranches() []string {
+ return ListFiles(filepath.Join(repo.GetFullPath(), "/.git/refs/heads"))
+}
+
+func (repo *Repo) GetRemoteBranches() []string {
+ remotes := ListFiles(filepath.Join(repo.GetFullPath(), "/.git/refs/remotes"))
+ return remotes
+}
+
+// git describe --tags e548b0fb6d0d14cdfb693850d592419f247dc2b1
+// v0.22.61-15-gbab84d7
+func (repo *Repo) GetHashName(h string) (string, error) {
+ h = strings.TrimSpace(h)
+ log.Info("GetHashName() is looking for", repo.GetGoPath(), h)
+ cmd := []string{"git", "describe", "--tags", h}
+ r, err := repo.RunStrictNew(cmd)
+ if err != nil {
+ return "", err
+ }
+ if len(r.Stdout) == 0 {
+ return "", errors.New("git describe was empty")
+ }
+ return r.Stdout[0], nil
+}