From fce837ca04f4ec6ab784fd8b1c908ab06a6da3c0 Mon Sep 17 00:00:00 2001 From: Max Resnick Date: Sat, 15 Jul 2023 23:17:05 -0700 Subject: chore: tests, refactor --- main.go | 90 ++++++++++++++++++++--------------------------------------------- 1 file changed, 27 insertions(+), 63 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 324bbd0..45992f9 100644 --- a/main.go +++ b/main.go @@ -1,15 +1,14 @@ package main import ( + "errors" "fmt" "log" "os" "sort" - "github.com/go-git/go-billy/v5/memfs" "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing" - "github.com/go-git/go-git/v5/storage/memory" "github.com/spf13/cobra" flags "github.com/spf13/pflag" @@ -18,10 +17,12 @@ import ( ) var ( - clonedRepo = &git.Repository{} - localRepo = &git.Repository{} - repoDir string - rootCmd = &cobra.Command{ + errNoRemoteFound = errors.New("No remotes found") + clonedRepo = &git.Repository{} + localRepo = &git.Repository{} + repoDir string + remoteName string + rootCmd = &cobra.Command{ Use: "semverbump part [major|minor|patch]", Short: "A tool for bumping semver git tags.", ValidArgs: []string{"major", "minor", "patch"}, @@ -33,74 +34,47 @@ var ( if err != nil { return err } - - remoteURL := getRemoteURL(localRepo) - fs := memfs.New() - storer := memory.NewStorage() - remoteRepo, err := git.Clone(storer, fs, &git.CloneOptions{ - URL: remoteURL, - }) + // finding tags and last version + tags, err := findTags(localRepo) if err != nil { - log.Fatal(err) + return err } - - tags := findTags(remoteRepo) - latestVersion := latestTag(tags) - if latestVersion == nil { - fmt.Println("No tags found. Not doing anything") - return nil + lastVersion := latestTag(tags) + if (lastVersion == &semver.Version{}) { + return errors.New("No tags found. Not doing anything") } + + // actual bump nextVersion := semver.Version{} switch part { case "major": - nextVersion = latestVersion.IncMajor() + nextVersion = lastVersion.IncMajor() case "minor": - nextVersion = latestVersion.IncMinor() + nextVersion = lastVersion.IncMinor() case "patch": - nextVersion = latestVersion.IncPatch() + nextVersion = lastVersion.IncPatch() } - fmt.Println(nextVersion) + fmt.Fprint(cmd.OutOrStdout(), nextVersion) return err }, } ) -// TODO this only works for a single remote -func getRemoteURL(repo *git.Repository) string { - _, err := repo.Config() - if err != nil { - log.Fatal(err) - } - remotes, err := repo.Remotes() - if err != nil { - log.Fatalf("error getting remotes %s", err) - } - if len(remotes) == 0 { - return "" - - } - primaryConfig := remotes[0].Config() - return primaryConfig.URLs[0] -} - func latestTag(tags []*semver.Version) *semver.Version { numTags := len(tags) if numTags == 0 { - return nil + return &semver.Version{} } return tags[numTags-1] } -func findTags(repo *git.Repository) []*semver.Version { +func findTags(repo *git.Repository) ([]*semver.Version, error) { repoTagsIter, err := repo.Tags() if err != nil { - log.Fatal(err) + return []*semver.Version{}, err } repoTags := []*semver.Version{} if err := repoTagsIter.ForEach(func(ref *plumbing.Reference) error { - if err != nil { - log.Fatal(err) - } rn := plumbing.ReferenceName(ref.Name()) version, err := semver.NewVersion(rn.Short()) if err != nil { @@ -110,23 +84,13 @@ func findTags(repo *git.Repository) []*semver.Version { repoTags = append(repoTags, version) return nil }); err != nil { - // log.error - fmt.Printf("Iteration Error %s", err) + return []*semver.Version{}, err } sort.Sort(semver.Collection(repoTags)) - return repoTags + return repoTags, nil } func main() { - // Clone the given repository to the given directory - - //repo, err := git.PlainClone("/tmp/foo", false, &git.CloneOptions{ - // URL: "https://github.com/grumps/selector", - // Progress: os.Stdout, - //}) - //if err != nil { - // log.Fatal(err) - //} if err := rootCmd.Execute(); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) @@ -137,8 +101,8 @@ func init() { // global flags cwd, err := os.Getwd() if err != nil { - log.Fatalf("couldn't get cwd %s", err) + log.Fatal(err) } - repoDir = *flags.String("repoDir", cwd, "repo to examine") - //pflag + repoDir = *flags.String("repo-dir", cwd, "repo to examine") + remoteName = *flags.String("remote-name", "origin", "remote to search and push to") } -- cgit v1.2.3