@@ -485,19 +485,28 @@ func (pipeline *Pipeline) Commits(firstParent bool) ([]*object.Commit, error) {
485485func (pipeline * Pipeline ) HeadCommit () ([]* object.Commit , error ) {
486486 repository := pipeline .repository
487487 head , err := repository .Head ()
488- if err != nil {
489- if err == plumbing .ErrReferenceNotFound {
490- refs , errr := repository .References ()
491- if errr != nil {
492- return nil , errors .Wrap (errr , "unable to list the references" )
488+ if err == plumbing .ErrReferenceNotFound {
489+ refs , errr := repository .References ()
490+ if errr != nil {
491+ return nil , errors .Wrap (errr , "unable to list the references" )
492+ }
493+ var refnames []string
494+ refByName := map [string ]* plumbing.Reference {}
495+ err = refs .ForEach (func (ref * plumbing.Reference ) error {
496+ refname := ref .Name ().String ()
497+ refnames = append (refnames , refname )
498+ refByName [refname ] = ref
499+ if strings .HasPrefix (refname , "refs/heads/HEAD/" ) {
500+ head = ref
501+ return storer .ErrStop
493502 }
494- err = refs . ForEach ( func ( ref * plumbing. Reference ) error {
495- if strings . HasPrefix ( ref . Name (). String (), "refs/heads/HEAD/" ) {
496- head = ref
497- return storer . ErrStop
498- }
499- return nil
500- })
503+ return nil
504+ })
505+ if head == nil {
506+ sort . Strings ( refnames )
507+ headName := refnames [ len ( refnames ) - 1 ]
508+ pipeline . l . Warnf ( "could not determine the HEAD, falling back to %s" , headName )
509+ head = refByName [ headName ]
501510 }
502511 }
503512 if head == nil {
0 commit comments