@@ -579,6 +579,40 @@ func Test_DefaultGitter_GetHead(t *testing.T) {
579579 }
580580}
581581
582+ func Test_DefaultGitter_ResetHard (t * testing.T ) {
583+ repo := t .TempDir ()
584+ runGit (t , repo , nil , "init" , "-q" )
585+ runGit (t , repo , nil , "config" , "user.email" , "test@example.com" )
586+ runGit (t , repo , nil , "config" , "user.name" , "Test" )
587+ commitAt (t , repo , "a.txt" , "a\n " , "c1" , "2020-01-01T00:00:00Z" )
588+ commitAt (t , repo , "a.txt" , "a2\n " , "c2" , "2020-01-02T00:00:00Z" )
589+
590+ previous := runGit (t , repo , nil , "rev-parse" , "HEAD~1" )
591+
592+ dg , err := gitsemver .NewDefaultGitter ("git" , nil )
593+ if err != nil {
594+ t .Fatal (err )
595+ }
596+ if err := dg .ResetHard (repo , previous ); err != nil {
597+ t .Fatal (err )
598+ }
599+
600+ head := runGit (t , repo , nil , "rev-parse" , "HEAD" )
601+ if head != previous {
602+ t .Fatalf ("expected HEAD %q after reset, got %q" , previous , head )
603+ }
604+ content , err := os .ReadFile (filepath .Join (repo , "a.txt" ))
605+ if err != nil {
606+ t .Fatal (err )
607+ }
608+ if string (content ) != "a\n " {
609+ t .Fatalf ("unexpected file content after reset: %q" , string (content ))
610+ }
611+ if status := runGit (t , repo , nil , "status" , "--short" ); status != "" {
612+ t .Fatalf ("expected clean status after reset, got %q" , status )
613+ }
614+ }
615+
582616func Test_maybeSync (t * testing.T ) {
583617 if f , err := os .CreateTemp ("" , "" ); err == nil {
584618 defer os .Remove (f .Name ())
0 commit comments