Skip to content
This repository was archived by the owner on May 8, 2024. It is now read-only.

Commit 69c1fad

Browse files
authored
Clone submodules tweaks (#119)
* Only update submodules after potential hard reset is done * Print submodule names when updating Makes it easier to debug which one of the submodules caused the error.
1 parent 05d21d7 commit 69c1fad

File tree

1 file changed

+29
-22
lines changed

1 file changed

+29
-22
lines changed

internal/executor/executor.go

+29-22
Original file line numberDiff line numberDiff line change
@@ -499,53 +499,60 @@ func (executor *Executor) CloneRepository(env map[string]string) bool {
499499
return false
500500
}
501501

502-
if is_clone_modules {
503-
logUploader.Write([]byte("\nUpdating submodules..."))
502+
if ref.Hash() != plumbing.NewHash(change) {
503+
logUploader.Write([]byte(fmt.Sprintf("\nHEAD is at %s.", ref.Hash())))
504+
logUploader.Write([]byte(fmt.Sprintf("\nHard resetting to %s...", change)))
504505

505506
workTree, err := repo.Worktree()
506507
if err != nil {
507508
logUploader.Write([]byte(fmt.Sprintf("\nFailed to get work tree: %s!", err)))
508509
return false
509510
}
510511

511-
submodules, err := workTree.Submodules()
512+
err = workTree.Reset(&git.ResetOptions{
513+
Commit: plumbing.NewHash(change),
514+
Mode: git.HardReset,
515+
})
512516
if err != nil {
513-
logUploader.Write([]byte(fmt.Sprintf("\nFailed to get submodules: %s!", err)))
514-
return false
515-
}
516-
517-
if err := submodules.Update(&git.SubmoduleUpdateOptions{
518-
Init: true,
519-
RecurseSubmodules: git.DefaultSubmoduleRecursionDepth,
520-
}); err != nil {
521-
logUploader.Write([]byte(fmt.Sprintf("\nFailed to update submodules: %s!", err)))
517+
logUploader.Write([]byte(fmt.Sprintf("\nFailed to force reset to %s: %s!", change, err)))
522518
return false
523519
}
524-
525-
logUploader.Write([]byte("\nSucessfully updated submodules!"))
526520
}
527521

528-
if ref.Hash() != plumbing.NewHash(change) {
529-
logUploader.Write([]byte(fmt.Sprintf("\nHEAD is at %s.", ref.Hash())))
530-
logUploader.Write([]byte(fmt.Sprintf("\nHard resetting to %s...", change)))
522+
if is_clone_modules {
523+
logUploader.Write([]byte("\nUpdating submodules..."))
531524

532525
workTree, err := repo.Worktree()
533526
if err != nil {
534527
logUploader.Write([]byte(fmt.Sprintf("\nFailed to get work tree: %s!", err)))
535528
return false
536529
}
537530

538-
err = workTree.Reset(&git.ResetOptions{
539-
Commit: plumbing.NewHash(change),
540-
Mode: git.HardReset,
541-
})
531+
submodules, err := workTree.Submodules()
542532
if err != nil {
543-
logUploader.Write([]byte(fmt.Sprintf("\nFailed to force reset to %s: %s!", change, err)))
533+
logUploader.Write([]byte(fmt.Sprintf("\nFailed to get submodules: %s!", err)))
544534
return false
545535
}
536+
537+
opts := &git.SubmoduleUpdateOptions{
538+
Init: true,
539+
RecurseSubmodules: git.DefaultSubmoduleRecursionDepth,
540+
}
541+
542+
for _, sub := range submodules {
543+
if err := sub.Update(opts); err != nil {
544+
logUploader.Write([]byte(fmt.Sprintf("\nFailed to update submodule %q: %s!",
545+
sub.Config().Name, err)))
546+
return false
547+
}
548+
}
549+
550+
logUploader.Write([]byte("\nSucessfully updated submodules!"))
546551
}
552+
547553
logUploader.Write([]byte(fmt.Sprintf("\nChecked out %s on %s branch.", change, branch)))
548554
logUploader.Write([]byte("\nSuccessfully cloned!"))
555+
549556
return true
550557
}
551558

0 commit comments

Comments
 (0)