aboutsummaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorMax Resnick <max@ofmax.li>2023-07-15 23:17:05 -0700
committerMax Resnick <max@ofmax.li>2023-07-15 23:17:05 -0700
commitfce837ca04f4ec6ab784fd8b1c908ab06a6da3c0 (patch)
treef83e2bd719c1d77b81dbe1fe82196ce6504424f4 /main.go
parentf2522a2e0dde56d6a33bfdf163e81a5bebe3da68 (diff)
downloadgo-bumpver-fce837ca04f4ec6ab784fd8b1c908ab06a6da3c0.tar.gz
chore: tests, refactor
Diffstat (limited to 'main.go')
-rw-r--r--main.go90
1 files changed, 27 insertions, 63 deletions
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")
}