@@ -544,6 +544,81 @@ func TestMainFnIncPatchRefusesDirtyTree(t *testing.T) {
544544 }
545545}
546546
547+ func TestMainFnIncPatchRefusesUntrackedFile (t * testing.T ) {
548+ flag .Parse ()
549+ oldWD , err := os .Getwd ()
550+ if err != nil {
551+ t .Fatal (err )
552+ }
553+ defer func () { _ = os .Chdir (oldWD ) }()
554+
555+ origGit , origOut , origName := * flagGit , * flagOut , * flagName
556+ origDebug , origGoPackage := * flagDebug , * flagGoPackage
557+ origNoFetch , origNoNewline := * flagNoFetch , * flagNoNewline
558+ origIncPatch , origBranch := * flagIncPatch , * flagBranch
559+ origTestMode := testMode
560+ defer func () {
561+ * flagGit , * flagOut , * flagName = origGit , origOut , origName
562+ * flagDebug , * flagGoPackage = origDebug , origGoPackage
563+ * flagNoFetch , * flagNoNewline = origNoFetch , origNoNewline
564+ * flagIncPatch , * flagBranch = origIncPatch , origBranch
565+ testMode = origTestMode
566+ }()
567+
568+ base := t .TempDir ()
569+ origin := filepath .Join (base , "origin.git" )
570+ work := filepath .Join (base , "work" )
571+
572+ runGit (t , "" , "init" , "--bare" , "-q" , origin )
573+ runGit (t , "" , "clone" , "-q" , origin , work )
574+ runGit (t , work , "config" , "user.email" , "test@example.com" )
575+ runGit (t , work , "config" , "user.name" , "Test" )
576+ if err := os .WriteFile (filepath .Join (work , "a.txt" ), []byte ("a\n " ), 0o644 ); err != nil {
577+ t .Fatal (err )
578+ }
579+ runGit (t , work , "add" , "a.txt" )
580+ runGit (t , work , "commit" , "-q" , "-m" , "c1" )
581+ runGit (t , work , "tag" , "v1.0.0" )
582+ runGit (t , work , "push" , "-q" , "origin" , "HEAD" , "--tags" )
583+
584+ if err := os .WriteFile (filepath .Join (work , "untracked.txt" ), []byte ("new\n " ), 0o644 ); err != nil {
585+ t .Fatal (err )
586+ }
587+
588+ if err := os .Chdir (work ); err != nil {
589+ t .Fatal (err )
590+ }
591+
592+ * flagGit = "git"
593+ * flagOut = "out.txt"
594+ * flagName = ""
595+ * flagDebug = false
596+ * flagGoPackage = false
597+ * flagNoFetch = true
598+ * flagNoNewline = false
599+ * flagIncPatch = true
600+ * flagBranch = false
601+ testMode = false
602+
603+ if code := mainfn (); code == 0 {
604+ t .Fatal ("mainfn unexpectedly succeeded with untracked file" )
605+ }
606+
607+ if _ , err := os .Stat (filepath .Join (work , "out.txt" )); err == nil {
608+ t .Fatal ("unexpected output file out.txt" )
609+ } else if ! os .IsNotExist (err ) {
610+ t .Fatal (err )
611+ }
612+ localTags := runGit (t , work , "tag" , "--list" )
613+ if strings .Contains (localTags , "v1.0.1" ) {
614+ t .Fatalf ("unexpected local tag v1.0.1: %q" , localTags )
615+ }
616+ remoteTags := runGit (t , work , "ls-remote" , "--tags" , "origin" )
617+ if strings .Contains (remoteTags , "refs/tags/v1.0.1" ) {
618+ t .Fatalf ("unexpected remote tag v1.0.1: %q" , remoteTags )
619+ }
620+ }
621+
547622func TestMainFnIncPatchOverwritesExistingOutputFile (t * testing.T ) {
548623 flag .Parse ()
549624 oldWD , err := os .Getwd ()
@@ -584,6 +659,8 @@ func TestMainFnIncPatchOverwritesExistingOutputFile(t *testing.T) {
584659 if err := os .WriteFile (filepath .Join (work , "out.txt" ), []byte ("old\n " ), 0o644 ); err != nil {
585660 t .Fatal (err )
586661 }
662+ runGit (t , work , "add" , "out.txt" )
663+ runGit (t , work , "commit" , "-q" , "-m" , "add out" )
587664
588665 if err := os .Chdir (work ); err != nil {
589666 t .Fatal (err )
0 commit comments