From 26cab127a75d9f36b118a5646eea0e314188ad51 Mon Sep 17 00:00:00 2001 From: ia Date: Fri, 8 Jun 2018 21:21:56 +0200 Subject: [PATCH 1/2] problem: janus does weird things when it gets non-pure semver tags solution: use a regex, for one, add some test cases --- gitvv/gitvv.go | 6 +++++- gitvv/gitvv_test.go | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/gitvv/gitvv.go b/gitvv/gitvv.go index 67fa32e..ddaaa5e 100644 --- a/gitvv/gitvv.go +++ b/gitvv/gitvv.go @@ -116,8 +116,12 @@ func getLastTag(dir string) (string, bool) { // Assumes using semver format for tags, eg v3.5.0 or 3.4.0 func parseSemverFromTag(s string) []string { - tag := strings.TrimPrefix(s, "v") + re := regexp.MustCompile(`\d*\.\d*\.\d*`) + tag := re.FindStringSubmatch(s)[0] vers := strings.Split(tag, ".") + if len(vers) != 3 { + return nil + } return vers } diff --git a/gitvv/gitvv_test.go b/gitvv/gitvv_test.go index 1da01f7..28f9e48 100644 --- a/gitvv/gitvv_test.go +++ b/gitvv/gitvv_test.go @@ -331,6 +331,10 @@ func Test_parseSemverFromTag(t *testing.T) { }{ {"v0.1.7", []string{"0", "1", "7"}}, {"0.1.7", []string{"0", "1", "7"}}, + {"v0.1.7-stable", []string{"0", "1", "7"}}, + {"vv0.1.7.very-unstable", []string{"0", "1", "7"}}, + {"V0.1.7.very...unstable", []string{"0", "1", "7"}}, + {"1.0.is-this-a-feature-or-bug?", []string{"1","0"}}, // PTAL IDK. } for _, tt := range table { From c59dc12c24a5829aab2168e1a23d6918060dffa4 Mon Sep 17 00:00:00 2001 From: ia Date: Fri, 8 Jun 2018 21:33:48 +0200 Subject: [PATCH 2/2] problem: can't actually just interpolate the whole plain tag solution: add %T --- README.md | 1 + gitvv/gitvv.go | 2 ++ gitvv/gitvv_test.go | 4 ++++ 3 files changed, 7 insertions(+) diff --git a/README.md b/README.md index b9eb38e..0d8741c 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,7 @@ $ janus version -format='v%M.%m.%P+%C-%S' %B, _B - hybrid patch version: `(%P * 100) + %C` %C, _C - commit count since last tag %S, _S - HEAD sha1 (first 7 characters) +%T, _T - full tag string ``` _Note_: you may use either `%M` or `_M` syntax to interpolate version variables, since escaping `%` in batch scripts is rather tricky. diff --git a/gitvv/gitvv.go b/gitvv/gitvv.go index ddaaa5e..47254fe 100644 --- a/gitvv/gitvv.go +++ b/gitvv/gitvv.go @@ -288,6 +288,8 @@ func GetVersion(format, dir string) string { out = strings.Replace(out, "%B", "?", -1) out = strings.Replace(out, "_B", "?", -1) } + out = strings.Replace(out, "_T", lastTag, -1) + out = strings.Replace(out, "%T", lastTag, -1) return out } diff --git a/gitvv/gitvv_test.go b/gitvv/gitvv_test.go index 28f9e48..10125b9 100644 --- a/gitvv/gitvv_test.go +++ b/gitvv/gitvv_test.go @@ -249,6 +249,10 @@ func TestGetVersion(t *testing.T) { {onTagDir, "v%M.%m.%P", "v0.0.1"}, {aboveTagDir, "v%M.%m.%P", "v0.0.1"}, + {noTagsDir, "%T", ""}, + {onTagDir, "%T-stable", "v0.0.1-stable"}, + {aboveTagDir, "%T-unstable", "v0.0.1-unstable"}, + {noTagsDir, "%C", "1"}, {onTagDir, "%C", "0"}, {aboveTagDir, "%C", "1"},