@@ -30,7 +30,9 @@ func TestMainFn(t *testing.T) {
3030 flag .Parse ()
3131 * flagGoPackage = true
3232 * flagOut = "test.out"
33- mainfn ()
33+ if code := mainfn (); code != 0 {
34+ t .Fatalf ("mainfn failed with code %d" , code )
35+ }
3436 b , err := os .ReadFile ("test.out" )
3537 if err == nil {
3638 defer os .Remove ("test.out" )
@@ -48,7 +50,9 @@ func TestMainFnBranch(t *testing.T) {
4850 * flagBranch = true
4951 * flagOut = "test.out"
5052 * flagIncPatch = true
51- mainfn ()
53+ if code := mainfn (); code != 0 {
54+ t .Fatalf ("mainfn failed with code %d" , code )
55+ }
5256 b , err := os .ReadFile ("test.out" )
5357 if err == nil {
5458 defer os .Remove ("test.out" )
@@ -141,3 +145,141 @@ func TestMainFnIncPatchDoesNotPushOnWriteError(t *testing.T) {
141145 t .Fatalf ("unexpected remote tag v1.0.1: %q" , remoteTags )
142146 }
143147}
148+
149+ func TestMainFnIncPatchDoesNotWriteOutputOnPushError (t * testing.T ) {
150+ flag .Parse ()
151+ oldWD , err := os .Getwd ()
152+ if err != nil {
153+ t .Fatal (err )
154+ }
155+ defer func () { _ = os .Chdir (oldWD ) }()
156+
157+ origGit , origOut , origName := * flagGit , * flagOut , * flagName
158+ origDebug , origGoPackage := * flagDebug , * flagGoPackage
159+ origNoFetch , origNoNewline := * flagNoFetch , * flagNoNewline
160+ origIncPatch , origBranch := * flagIncPatch , * flagBranch
161+ origTestMode := testMode
162+ defer func () {
163+ * flagGit , * flagOut , * flagName = origGit , origOut , origName
164+ * flagDebug , * flagGoPackage = origDebug , origGoPackage
165+ * flagNoFetch , * flagNoNewline = origNoFetch , origNoNewline
166+ * flagIncPatch , * flagBranch = origIncPatch , origBranch
167+ testMode = origTestMode
168+ }()
169+
170+ work := t .TempDir ()
171+ runGit (t , work , "init" , "-q" )
172+ runGit (t , work , "config" , "user.email" , "test@example.com" )
173+ runGit (t , work , "config" , "user.name" , "Test" )
174+ if err := os .WriteFile (filepath .Join (work , "a.txt" ), []byte ("a\n " ), 0o644 ); err != nil {
175+ t .Fatal (err )
176+ }
177+ runGit (t , work , "add" , "a.txt" )
178+ runGit (t , work , "commit" , "-q" , "-m" , "c1" )
179+ runGit (t , work , "tag" , "v1.0.0" )
180+
181+ if err := os .Chdir (work ); err != nil {
182+ t .Fatal (err )
183+ }
184+
185+ * flagGit = "git"
186+ * flagOut = "out.txt"
187+ * flagName = ""
188+ * flagDebug = false
189+ * flagGoPackage = false
190+ * flagNoFetch = true
191+ * flagNoNewline = false
192+ * flagIncPatch = true
193+ * flagBranch = false
194+ testMode = false
195+
196+ if code := mainfn (); code == 0 {
197+ t .Fatal ("mainfn unexpectedly succeeded" )
198+ }
199+
200+ if _ , err := os .Stat (filepath .Join (work , "out.txt" )); err == nil {
201+ t .Fatal ("unexpected output file out.txt" )
202+ } else if ! os .IsNotExist (err ) {
203+ t .Fatal (err )
204+ }
205+ localTags := runGit (t , work , "tag" , "--list" )
206+ if strings .Contains (localTags , "v1.0.1" ) {
207+ t .Fatalf ("unexpected local tag v1.0.1: %q" , localTags )
208+ }
209+ }
210+
211+ func TestMainFnIncPatchOverwritesExistingOutputFile (t * testing.T ) {
212+ flag .Parse ()
213+ oldWD , err := os .Getwd ()
214+ if err != nil {
215+ t .Fatal (err )
216+ }
217+ defer func () { _ = os .Chdir (oldWD ) }()
218+
219+ origGit , origOut , origName := * flagGit , * flagOut , * flagName
220+ origDebug , origGoPackage := * flagDebug , * flagGoPackage
221+ origNoFetch , origNoNewline := * flagNoFetch , * flagNoNewline
222+ origIncPatch , origBranch := * flagIncPatch , * flagBranch
223+ origTestMode := testMode
224+ defer func () {
225+ * flagGit , * flagOut , * flagName = origGit , origOut , origName
226+ * flagDebug , * flagGoPackage = origDebug , origGoPackage
227+ * flagNoFetch , * flagNoNewline = origNoFetch , origNoNewline
228+ * flagIncPatch , * flagBranch = origIncPatch , origBranch
229+ testMode = origTestMode
230+ }()
231+
232+ base := t .TempDir ()
233+ origin := filepath .Join (base , "origin.git" )
234+ work := filepath .Join (base , "work" )
235+
236+ runGit (t , "" , "init" , "--bare" , "-q" , origin )
237+ runGit (t , "" , "clone" , "-q" , origin , work )
238+ runGit (t , work , "config" , "user.email" , "test@example.com" )
239+ runGit (t , work , "config" , "user.name" , "Test" )
240+ if err := os .WriteFile (filepath .Join (work , "a.txt" ), []byte ("a\n " ), 0o644 ); err != nil {
241+ t .Fatal (err )
242+ }
243+ runGit (t , work , "add" , "a.txt" )
244+ runGit (t , work , "commit" , "-q" , "-m" , "c1" )
245+ runGit (t , work , "tag" , "v1.0.0" )
246+ runGit (t , work , "push" , "-q" , "origin" , "HEAD" , "--tags" )
247+
248+ if err := os .WriteFile (filepath .Join (work , "out.txt" ), []byte ("old\n " ), 0o644 ); err != nil {
249+ t .Fatal (err )
250+ }
251+
252+ if err := os .Chdir (work ); err != nil {
253+ t .Fatal (err )
254+ }
255+
256+ * flagGit = "git"
257+ * flagOut = "out.txt"
258+ * flagName = ""
259+ * flagDebug = false
260+ * flagGoPackage = false
261+ * flagNoFetch = true
262+ * flagNoNewline = false
263+ * flagIncPatch = true
264+ * flagBranch = false
265+ testMode = false
266+
267+ if code := mainfn (); code != 0 {
268+ t .Fatalf ("mainfn failed with code %d" , code )
269+ }
270+
271+ out , err := os .ReadFile (filepath .Join (work , "out.txt" ))
272+ if err != nil {
273+ t .Fatal (err )
274+ }
275+ if strings .Contains (string (out ), "old" ) {
276+ t .Fatalf ("expected out.txt to be replaced, got %q" , string (out ))
277+ }
278+ if ! strings .Contains (string (out ), "v1.0.1" ) {
279+ t .Fatalf ("expected out.txt to contain new version, got %q" , string (out ))
280+ }
281+ remoteTags := runGit (t , work , "ls-remote" , "--tags" , "origin" )
282+ if ! strings .Contains (remoteTags , "refs/tags/v1.0.1" ) {
283+ t .Fatalf ("expected remote tag v1.0.1, got %q" , remoteTags )
284+ }
285+ }
0 commit comments