aboutsummaryrefslogtreecommitdiffstats
path: root/commands/root.go
diff options
context:
space:
mode:
authorvasser <serhiy.vas@gmail.com>2023-01-15 23:16:05 +0200
committervasser <serhiy.vas@gmail.com>2023-01-15 23:16:05 +0200
commit83ffed8c3e33d487571106ce29c0d2ce7a1ea0ed (patch)
tree9b88e429dfdf1177c0381c4b06a416f2467ecfbd /commands/root.go
parentfd4032087bdde93dfb7494bb12bf52bdc4d5ba74 (diff)
downloadgit-bug-83ffed8c3e33d487571106ce29c0d2ce7a1ea0ed.tar.gz
New approach to define the version
Diffstat (limited to 'commands/root.go')
-rw-r--r--commands/root.go58
1 files changed, 29 insertions, 29 deletions
diff --git a/commands/root.go b/commands/root.go
index 09f1bac4..0767c701 100644
--- a/commands/root.go
+++ b/commands/root.go
@@ -4,16 +4,14 @@ package commands
import (
"fmt"
"os"
- "os/exec"
"runtime/debug"
- "strings"
"github.com/spf13/cobra"
- "github.com/MichaelMure/git-bug/commands/bridge"
- "github.com/MichaelMure/git-bug/commands/bug"
+ bridgecmd "github.com/MichaelMure/git-bug/commands/bridge"
+ bugcmd "github.com/MichaelMure/git-bug/commands/bug"
"github.com/MichaelMure/git-bug/commands/execenv"
- "github.com/MichaelMure/git-bug/commands/user"
+ usercmd "github.com/MichaelMure/git-bug/commands/user"
)
// These variables are initialized externally during the build. See the Makefile.
@@ -34,16 +32,30 @@ the same git remote you are already using to collaborate with other people.
`,
PersistentPreRun: func(cmd *cobra.Command, args []string) {
- GitLastTag, GitExactTag, GitCommit = getTagsAndCommit()
-
root := cmd.Root()
if GitExactTag == "undefined" {
GitExactTag = ""
}
+
+ // release version
root.Version = GitLastTag
+
+ // dev version
if GitExactTag == "" {
- root.Version = fmt.Sprintf("%s-dev-%.10s", root.Version, GitCommit)
+ if root.Version != "" {
+ // if we have a tag, append the commit hash
+ root.Version = fmt.Sprintf("%s-dev-%.10s", root.Version, GitCommit)
+ } else {
+ // if we don't have a tag, try to read
+ // commit and dirty state from the build info
+ commit, dirty := getCommitAndDirty()
+ root.Version = fmt.Sprintf("dev-%.10s", commit)
+
+ if dirty != "" {
+ root.Version = fmt.Sprintf("%s-dirty", root.Version)
+ }
+ }
}
},
@@ -96,8 +108,8 @@ func Execute() {
}
}
-func getTagsAndCommit() (tag, exacttag, commit string) {
- var t, e, c string
+func getCommitAndDirty() (commit, dirty string) {
+ var d, c string
info, ok := debug.ReadBuildInfo()
@@ -105,30 +117,18 @@ func getTagsAndCommit() (tag, exacttag, commit string) {
fmt.Println("could not get commit")
}
+ // get the commit and
+ // modified status (that is the flag for repository dirty or not)
for _, kv := range info.Settings {
switch kv.Key {
case "vcs.revision":
c = kv.Value
+ case "vcs.modified":
+ if kv.Value == "true" {
+ d = "dirty"
+ }
}
}
- cmd := exec.Command("git", "describe", "--tags", "--abbrev=0")
- stdout, err := cmd.Output()
-
- if err != nil {
- fmt.Printf("could not get last tag: %v\n", err.Error())
- }
-
- t = strings.TrimSuffix(string(stdout), "\n")
-
- cmd = exec.Command("git", "name-rev", "--name-only", "--tags", "HEAD")
- stdout, err = cmd.Output()
-
- if err != nil {
- fmt.Printf("could not get exact tag: %v\n", err.Error())
- }
-
- e = strings.TrimSuffix(string(stdout), "\n")
-
- return t, e, c
+ return c, d
}