summaryrefslogtreecommitdiff
path: root/gitTag.query.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-11-29 18:15:25 -0600
committerJeff Carr <[email protected]>2024-11-29 18:15:25 -0600
commit4a79cccffd6cd20e42271eada567c4b8c0edc2f4 (patch)
tree4f1bf43db50e09956abe22d9fb3cb9d9b8ca4717 /gitTag.query.go
parent7615317ca72347429f665dc7db9a0fe49d86cc55 (diff)
attempt to use go.wit.com/apps/autogenpb for sort
Diffstat (limited to 'gitTag.query.go')
-rw-r--r--gitTag.query.go134
1 files changed, 134 insertions, 0 deletions
diff --git a/gitTag.query.go b/gitTag.query.go
new file mode 100644
index 0000000..8c288e4
--- /dev/null
+++ b/gitTag.query.go
@@ -0,0 +1,134 @@
+package gitpb
+
+// runs git, parses output
+// types faster than you can
+
+import (
+ "errors"
+ "path/filepath"
+ "strings"
+
+ "go.wit.com/log"
+)
+
+func (repo *Repo) GetLastTag() string {
+ cmd := []string{"git", "rev-list", "--tags", "--max-count=1"}
+ result := repo.RunQuiet(cmd)
+ log.Info("getLastTagVersion()", result.Stdout)
+
+ if len(result.Stdout) != 1 {
+ log.Log(GITPBWARN, "git LastTag() error:", result.Stdout)
+ return ""
+ }
+
+ hash := result.Stdout[0]
+
+ cmd = []string{"git", "describe", "--tags", "--always", hash}
+ result = repo.RunQuiet(cmd)
+
+ if len(result.Stdout) != 1 {
+ log.Log(GITPBWARN, "git LastTag() error:", result.Stdout)
+ return ""
+ }
+
+ return result.Stdout[0]
+}
+
+func (repo *Repo) GitMasterVersion() string {
+ v, err := repo.gitVersionByName("master")
+ /*
+ count := repo.LenGitTags()
+ log.Info(repo.GoPath, "tag count", count)
+ repo.UpdateGitTags()
+ count = repo.LenGitTags()
+ log.Info(repo.GoPath, "tag count", count)
+ */
+
+ if err == nil {
+ return v
+ } else {
+ log.Log(GITPBWARN, "gitpb.GitMasterVersion() error:", err)
+ return ""
+ }
+}
+
+func (repo *Repo) GitDevelVersion() string {
+ v, err := repo.gitVersionByName("devel")
+ if err == nil {
+ return v
+ } else {
+ log.Log(GITPBWARN, "gitpb.GitDevelVersion() error:", err)
+ return ""
+ }
+}
+
+func (repo *Repo) GitUserVersion() string {
+ v, err := repo.gitVersionByName("jcarr")
+ if err == nil {
+ return v
+ } else {
+ log.Log(GITPBWARN, "gitpb.GitUserVersion() error:", err)
+ return ""
+ }
+}
+
+func (repo *Repo) gitVersionByName(name string) (string, error) {
+ name = strings.TrimSpace(name)
+
+ if name == "" {
+ // git will return the current tag
+ r := repo.RunQuiet([]string{"git", "describe", "--tags", "--always"})
+ output := strings.Join(r.Stdout, "\n")
+ if r.Error != nil {
+ log.Log(GITPBWARN, "gitDescribeByName() output might have worked anyway:", output)
+ log.Log(GITPBWARN, "gitDescribeByName() not in a git repo?", r.Error, repo.GoPath)
+ return "", r.Error
+ }
+ return strings.TrimSpace(output), nil
+ }
+ if ! repo.IsBranch(name) {
+ // tag does not exist
+ log.Log(GITPBWARN, "LocalTagExists()", name, "did not exist")
+ return "", errors.New("gitDescribeByName() git fatal: Not a valid object name: " + name)
+ }
+ cmd := []string{"git", "describe", "--tags", "--always", name}
+ result := repo.RunQuiet(cmd)
+ output := strings.Join(result.Stdout, "\n")
+ if result.Error != nil {
+ log.Log(GITPBWARN, "cmd =", cmd)
+ log.Log(GITPBWARN, "err =", result.Error)
+ log.Log(GITPBWARN, "output (might have worked with error?) =", output)
+ log.Log(GITPBWARN, "not in a git repo or bad tag?", repo.GoPath)
+ return "", result.Error
+ }
+
+ return strings.TrimSpace(output), nil
+}
+
+// find a branch name
+// will find "master" or "devel"
+// will also find "v0.1.1"
+// or will find "patches-from-foo"
+// will return *any* match on any git branch because it doesn't
+// matter much here yet
+// eventually this will be worked out by forge in some future code that hasn't been made yet
+func (repo *Repo) IsBranch(findname string) bool {
+ loop := repo.Tags.All()
+ for loop.Scan() {
+ t := loop.Next()
+ // log.Info("LocalTagExists() tag:", t.Refname)
+
+ tagname := t.Refname
+ if strings.HasPrefix(tagname, "refs/remotes") {
+ continue
+ }
+ path, filename := filepath.Split(tagname)
+ log.Log(GITPB, "gitpb.IsBranch() tag:", path, filename, "from", repo.GoPath)
+ if filename == findname {
+ log.Log(GITPB, "gitpb.IsBranch() found tag:", path, filename, "from", repo.GoPath)
+ return true
+ }
+ }
+ log.Log(GITPBWARN, "did not find tag:", findname, "in", repo.GoPath)
+ return false
+}