@@ -3,6 +3,7 @@ package commands
33import (
44 "fmt"
55 "os"
6+ "path"
67
78 "github.com/barelyhuman/commitlog/pkg"
89 "github.com/go-git/go-git/v5"
@@ -13,14 +14,29 @@ import (
1314
1415func Release (c * cli.Context ) (err error ) {
1516
16- _ , err = os .ReadFile (".commitlog.release" )
17+ fileDir := c .String ("path" )
18+ filePath := path .Join (fileDir , ".commitlog.release" )
19+
20+ if c .Bool ("init" ) {
21+ _ , err = os .Stat (filePath )
22+ if os .IsNotExist (err ) {
23+ err = nil
24+ os .WriteFile (filePath , []byte ("v0.0.0" ), os .ModePerm )
25+ fmt .Println ("[commitlog] Initialized commitlog release" )
26+ } else {
27+ err = fmt .Errorf (".commitlog.release already exists, cannot override" )
28+ }
29+ return
30+ }
31+
32+ _ , err = os .Stat (filePath )
1733
1834 if os .IsNotExist (err ) {
1935 err = fmt .Errorf ("couldn't find the release file, please run the `--init` flag first" )
2036 return
2137 }
2238
23- fileData , err := os .ReadFile (".commitlog.release" )
39+ fileData , err := os .ReadFile (filePath )
2440
2541 if err != nil {
2642 err = fmt .Errorf ("error reading the version file: %v" , err )
@@ -29,7 +45,12 @@ func Release(c *cli.Context) (err error) {
2945
3046 versionString := string (fileData )
3147
32- releaserOpts := []pkg.ReleaserMod {}
48+ releaserOpts := []pkg.ReleaserMod {
49+ // add in the pre-tag,
50+ // will be used only if the pre flag
51+ // is true
52+ pkg .WithPreTag (c .String ("pre-tag" )),
53+ }
3354
3455 if c .Bool ("major" ) {
3556 releaserOpts = append (releaserOpts , pkg .WithMajorIncrement (), pkg .WithMinorReset (), pkg .WithPatchReset ())
@@ -53,43 +74,49 @@ func Release(c *cli.Context) (err error) {
5374 return err
5475 }
5576
56- err = os .WriteFile (".commitlog.release" , []byte (releaser .String ()), os .ModePerm )
77+ err = os .WriteFile (filePath , []byte (releaser .String ()), os .ModePerm )
5778 if err != nil {
5879 return
5980 }
6081
61- openRepo , err := git .PlainOpen (c .String ("path" ))
62- if err != nil {
63- return err
64- }
82+ var gitRepo * git.Repository
83+ var toTagHash plumbing.Hash
84+ var repoWt * git.Worktree
6585
66- var commitHash plumbing.Hash
67- wt , err := openRepo .Worktree ()
68- if err != nil {
69- return err
86+ if c .Bool ("commit" ) || c .Bool ("push" ) {
87+ gitRepo , err = git .PlainOpen (c .String ("path" ))
88+ if err != nil {
89+ return err
90+ }
91+
92+ repoWt , err = gitRepo .Worktree ()
93+
94+ if err != nil {
95+ return err
96+ }
7097 }
7198
7299 if c .Bool ("commit" ) {
73- wt .Add (".commitlog.release" )
74- commitHash , err = wt .Commit ("chore: version" + releaser .String (), & git.CommitOptions {})
100+ repoWt .Add (filePath )
101+ toTagHash , err = repoWt .Commit ("chore: version" + releaser .String (), & git.CommitOptions {})
75102 if err != nil {
76103 return err
77104 }
78105
79- _ , err = openRepo .CreateTag (releaser .String (), commitHash , & git.CreateTagOptions {})
106+ _ , err = gitRepo .CreateTag (releaser .String (), toTagHash , & git.CreateTagOptions {})
80107 if err != nil {
81108 err = fmt .Errorf ("looks like there was error while creating a tag for the version commit, please try again or create a tag manually: %v" , err )
82109 return err
83110 }
84111 }
85112
86113 if c .Bool ("push" ) {
87- _ , err := wt .Status ()
114+ _ , err := repoWt .Status ()
88115 if err != nil {
89116 return err
90117 }
91118
92- openRepo .Push (& git.PushOptions {
119+ gitRepo .Push (& git.PushOptions {
93120 RemoteName : "origin" ,
94121 Progress : os .Stdout ,
95122 RefSpecs : []config.RefSpec {config .RefSpec ("refs/tags/*:refs/tags/*" )},
0 commit comments