From 2a6b68360d0e3fe5fefef4036aa0875f44258c96 Mon Sep 17 00:00:00 2001 From: chriswalz Date: Mon, 1 Mar 2021 17:06:58 -0500 Subject: [PATCH] make bit release bump gracefully handle invalid tags and no prior tags. closes #101 --- cmd/cmd_test.go | 15 +++++++++++++++ cmd/release.go | 19 +++++++++++++++---- cmd/util.go | 18 +++++++++++------- 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/cmd/cmd_test.go b/cmd/cmd_test.go index 8d2e49c..a5d551b 100644 --- a/cmd/cmd_test.go +++ b/cmd/cmd_test.go @@ -102,6 +102,21 @@ func TestAllBitAndGitSubCommands(t *testing.T) { } } +func TestGenBumpedSemVersion(t *testing.T) { + reality, err := GenBumpedSemVersion(`v1.0.1`) + assert.Equal(t, "v1.0.2", reality, "expected minor version to increment by 1") + + reality, err = GenBumpedSemVersion(`1.0.1`) + assert.Equal(t, "1.0.2", reality, "expected minor version to increment by 1") + + reality, err = GenBumpedSemVersion(`nonincrementaltag`) + assert.Error(t, err, "expected an error since the raw tag is invalid") + + _, err = GenBumpedSemVersion("\n") + assert.Error(t, err, "expected an error since there was no tag") + +} + func TestParseManPage(t *testing.T) { reality := parseManPage("rebase") assert.NotContains(t, reality, "GIT-REBASE(1)") diff --git a/cmd/release.go b/cmd/release.go index fed3e6c..6dc62a9 100644 --- a/cmd/release.go +++ b/cmd/release.go @@ -1,8 +1,10 @@ package cmd import ( - "log" + "fmt" + "os/exec" + "github.com/rs/zerolog/log" "github.com/spf13/cobra" ) @@ -12,14 +14,23 @@ var releaseCmd = &cobra.Command{ Short: "Commit unstaged changes, bump minor tag, push", Long: ``, Run: func(cmd *cobra.Command, args []string) { + var err error version := args[0] if version == "bump" { - version = GenBumpedSemVersion() + rawGitTagOutput, err := exec.Command("/bin/sh", "-c", `git for-each-ref --format="%(refname:short)" --sort=-authordate --count=1 refs/tags`).CombinedOutput() + if err != nil { + log.Debug().Err(err).Send() + } + version, err = GenBumpedSemVersion(string(rawGitTagOutput)) + if err != nil { + fmt.Println(err) + return + } } save("") - err := tagCurrentBranch(version) + err = tagCurrentBranch(version) if err != nil { - log.Println(err) + fmt.Println(err) return } RunInTerminalWithColor("git", []string{"push", "--force-with-lease"}) diff --git a/cmd/util.go b/cmd/util.go index 1840d2b..f485bb7 100644 --- a/cmd/util.go +++ b/cmd/util.go @@ -1,6 +1,7 @@ package cmd import ( + "errors" "fmt" "github.com/chriswalz/complete/v3" "os" @@ -109,18 +110,21 @@ func toStructuredBranchList(rawBranchData string) []*Branch { }).([]*Branch) } -func GenBumpedSemVersion() string { - msg, err := exec.Command("/bin/sh", "-c", `git for-each-ref --format="%(refname:short)" --sort=-authordate --count=1 refs/tags`).CombinedOutput() - if err != nil { - log.Debug().Err(err).Send() - } - out := string(msg) +func GenBumpedSemVersion(out string) (string, error) { out = strings.TrimSpace(out) + + // 0.0.1 + if len(out) <= 0 { + return "", errors.New("no tags exists. Consider running `bit release 0.0.1`") + } i := strings.LastIndex(out, ".") minor, err := strconv.Atoi(out[i+1:]) + if err != nil { + return "", err + } minor++ out = out[:i] + "." + strconv.Itoa(minor) - return out + return out, nil } func AddCommandToShellHistory(cmd string, args []string) {