@@ -485,19 +485,28 @@ func (pipeline *Pipeline) Commits(firstParent bool) ([]*object.Commit, error) {
485
485
func (pipeline * Pipeline ) HeadCommit () ([]* object.Commit , error ) {
486
486
repository := pipeline .repository
487
487
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
493
502
}
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 ]
501
510
}
502
511
}
503
512
if head == nil {
0 commit comments