Skip to content

Commit

Permalink
fix error output
Browse files Browse the repository at this point in the history
  • Loading branch information
choffmeister committed Nov 16, 2021
1 parent 4a63fcb commit 059398e
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 46 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
.PHONY: *

MAIN := .
TEST := . ./internal
TEST := ./cmd ./internal

run:
go run $(MAIN)
Expand Down
77 changes: 77 additions & 0 deletions cmd/root.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package cmd

import (
"flag"
"fmt"
"os"
"runtime/debug"

"github.com/choffmeister/git-describe-semver/internal"
"github.com/go-git/go-git/v5"
)

func run(dir string, opts internal.GenerateVersionOptions) (*string, error) {
repo, err := git.PlainOpen(dir)
if err != nil {
return nil, fmt.Errorf("unable to open git repository: %v", err)
}
tagName, counter, headHash, err := internal.GitDescribe(*repo)
if err != nil {
return nil, fmt.Errorf("unable to describe commit: %v", err)
}
result, err := internal.GenerateVersion(*tagName, *counter, *headHash, opts)
if err != nil {
return nil, fmt.Errorf("unable to generate version: %v", err)
}
return result, nil
}

func Execute(version FullVersion) error {
fallbackFlag := flag.String("fallback", "", "The first version to fallback to should there be no tag")
dropPrefixFlag := flag.Bool("drop-prefix", false, "Drop prefix from output")
prereleaseSuffixFlag := flag.String("prerelease-suffix", "", "Suffix to add to prereleases")
formatFlag := flag.String("format", "", "Format of output")
flag.Parse()

dir, err := os.Getwd()
if err != nil {
return err
}
opts := internal.GenerateVersionOptions{
FallbackTagName: *fallbackFlag,
DropTagNamePrefix: *dropPrefixFlag,
PrereleaseSuffix: *prereleaseSuffixFlag,
Format: *formatFlag,
}
result, err := run(dir, opts)
if err != nil {
return err
}
fmt.Println(*result)

return nil
}

type FullVersion struct {
Version string
Commit string
Date string
BuiltBy string
}

func (v FullVersion) ToString() string {
result := v.Version
if v.Commit != "" {
result = fmt.Sprintf("%s\ncommit: %s", result, v.Commit)
}
if v.Date != "" {
result = fmt.Sprintf("%s\nbuilt at: %s", result, v.Date)
}
if v.BuiltBy != "" {
result = fmt.Sprintf("%s\nbuilt by: %s", result, v.BuiltBy)
}
if info, ok := debug.ReadBuildInfo(); ok && info.Main.Sum != "" {
result = fmt.Sprintf("%s\nmodule version: %s, checksum: %s", result, info.Main.Version, info.Main.Sum)
}
return result
}
10 changes: 5 additions & 5 deletions main_test.go → cmd/root_test.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package main
package cmd

import (
"io/ioutil"
Expand All @@ -14,24 +14,24 @@ func TestRun(t *testing.T) {
assert := assert.New(t)
dir, _ := ioutil.TempDir("", "example")
author := object.Signature{Name: "Test", Email: "[email protected]"}
_, err := Run(dir, internal.GenerateVersionOptions{})
_, err := run(dir, internal.GenerateVersionOptions{})
assert.Error(err)

repo, _ := git.PlainInit(dir, false)
worktree, _ := repo.Worktree()
_, err = Run(dir, internal.GenerateVersionOptions{})
_, err = run(dir, internal.GenerateVersionOptions{})
assert.Error(err)

commit1, _ := worktree.Commit("first", &git.CommitOptions{Author: &author})
repo.CreateTag("invalid", commit1, nil)
_, err = Run(dir, internal.GenerateVersionOptions{})
_, err = run(dir, internal.GenerateVersionOptions{})
assert.Error(err)

commit2, _ := worktree.Commit("first", &git.CommitOptions{Author: &author})
repo.CreateTag("v1.0.0", commit2, nil)

commit3, _ := worktree.Commit("second", &git.CommitOptions{Author: &author})
result, err := Run(dir, internal.GenerateVersionOptions{})
result, err := run(dir, internal.GenerateVersionOptions{})
assert.NoError(err)
assert.Equal("v1.0.1-dev.1.g"+commit3.String()[0:7], *result)
}
51 changes: 11 additions & 40 deletions main.go
Original file line number Diff line number Diff line change
@@ -1,52 +1,23 @@
package main

import (
"flag"
"fmt"
"log"
"os"

"github.com/choffmeister/git-describe-semver/internal"
"github.com/go-git/go-git/v5"
"github.com/choffmeister/git-describe-semver/cmd"
)

// Run ...
func Run(dir string, opts internal.GenerateVersionOptions) (*string, error) {
repo, err := git.PlainOpen(dir)
if err != nil {
return nil, fmt.Errorf("unable to open git repository: %v", err)
}
tagName, counter, headHash, err := internal.GitDescribe(*repo)
if err != nil {
return nil, fmt.Errorf("unable to describe commit: %v", err)
}
result, err := internal.GenerateVersion(*tagName, *counter, *headHash, opts)
if err != nil {
return nil, fmt.Errorf("unable to generate version: %v", err)
}
return result, nil
}
// nolint: gochecknoglobals
var (
version = "dev"
commit = ""
date = ""
builtBy = ""
)

func main() {
fallbackFlag := flag.String("fallback", "", "The first version to fallback to should there be no tag")
dropPrefixFlag := flag.Bool("drop-prefix", false, "Drop prefix from output")
prereleaseSuffixFlag := flag.String("prerelease-suffix", "", "Suffix to add to prereleases")
formatFlag := flag.String("format", "", "Format of output")
flag.Parse()

dir, err := os.Getwd()
if err != nil {
log.Fatalf("unable to determine current directory: %v\n", err)
}
opts := internal.GenerateVersionOptions{
FallbackTagName: *fallbackFlag,
DropTagNamePrefix: *dropPrefixFlag,
PrereleaseSuffix: *prereleaseSuffixFlag,
Format: *formatFlag,
}
result, err := Run(dir, opts)
if err != nil {
log.Fatalf("unable to generate version: %v\n", err)
if err := cmd.Execute(cmd.FullVersion{Version: version, Commit: commit, Date: date, BuiltBy: builtBy}); err != nil {
fmt.Printf("%v\n", err)
os.Exit(1)
}
fmt.Println(*result)
}

0 comments on commit 059398e

Please sign in to comment.