@@ -480,12 +480,11 @@ func TestImageAutomationReconciler_e2e(t *testing.T) {
480480
481481 t .Run ("PushSpec" , func (t * testing.T ) {
482482 // Clone the repo locally.
483- localRepo , err := clone (cloneLocalRepoURL , branch )
483+ cloneCtx , cancel := context .WithTimeout (ctx , time .Second * 10 )
484+ defer cancel ()
485+ localRepo , err := clone (cloneCtx , cloneLocalRepoURL , branch )
484486 g .Expect (err ).ToNot (HaveOccurred (), "failed to clone git repo" )
485487 defer localRepo .Free ()
486- origin , err := localRepo .Remotes .Lookup ("origin" )
487- g .Expect (err ).ToNot (HaveOccurred (), "failed to clone git repo" )
488- defer origin .Free ()
489488
490489 // NB not testing the image reflector controller; this
491490 // will make a "fully formed" ImagePolicy object.
@@ -617,7 +616,9 @@ func TestImageAutomationReconciler_e2e(t *testing.T) {
617616 // test helper. When switching branches, the localRepo seems to get
618617 // stuck in one particular branch. As a workaround, create a
619618 // separate localRepo.
620- localRepo , err := clone (cloneLocalRepoURL , branch )
619+ cloneCtx , cancel := context .WithTimeout (ctx , time .Second * 10 )
620+ defer cancel ()
621+ localRepo , err := clone (cloneCtx , cloneLocalRepoURL , branch )
621622 g .Expect (err ).ToNot (HaveOccurred (), "failed to clone git repo" )
622623 defer localRepo .Free ()
623624
@@ -862,8 +863,9 @@ func compareRepoWithExpected(g *WithT, repoURL, branch, fixture string, changeFi
862863
863864 copy .Copy (fixture , expected )
864865 changeFixture (expected )
865-
866- repo , err := clone (repoURL , branch )
866+ cloneCtx , cancel := context .WithTimeout (ctx , time .Second * 10 )
867+ defer cancel ()
868+ repo , err := clone (cloneCtx , repoURL , branch )
867869 g .Expect (err ).ToNot (HaveOccurred ())
868870 defer repo .Free ()
869871 // NOTE: The workdir contains a trailing /. Clean it to not confuse the
@@ -875,26 +877,28 @@ func compareRepoWithExpected(g *WithT, repoURL, branch, fixture string, changeFi
875877 test .ExpectMatchingDirectories (g , actual , expected )
876878}
877879
878- // configureManagedTransportOptions registers the transport options for this repository
880+ // configureTransportOptsForRepo registers the transport options for this repository
879881// and sets the remote url of origin to the transport options url. If repoURL is empty
880882// it tries to figure it out by looking at the remote url of origin. It returns a function
881883// which removes the transport options for this repo and sets the remote url of the origin
882884// back to the actual url. Callers are expected to call this function in a deferred manner.
883- func configureManagedTransportOptions (repo * libgit2.Repository , repoURL string ) (func (), error ) {
884- if repoURL == "" {
885- origin , err := repo .Remotes .Lookup (originRemote )
886- if err != nil {
887- return nil , err
888- }
889- defer origin .Free ()
890- repoURL = origin .Url ()
885+ func configureTransportOptsForRepo (repo * libgit2.Repository ) (func (), error ) {
886+ origin , err := repo .Remotes .Lookup (originRemote )
887+ if err != nil {
888+ return nil , err
891889 }
892- transportOptsURL := "http://" + randStringRunes (5 )
890+ defer origin .Free ()
891+ repoURL := origin .Url ()
892+ u , err := url .Parse (repoURL )
893+ if err != nil {
894+ return nil , err
895+ }
896+ transportOptsURL := u .Scheme + "://" + randStringRunes (5 )
893897 managed .AddTransportOptions (transportOptsURL , managed.TransportOptions {
894898 TargetURL : repoURL ,
895899 })
896900
897- err : = repo .Remotes .SetUrl (originRemote , transportOptsURL )
901+ err = repo .Remotes .SetUrl (originRemote , transportOptsURL )
898902 if err != nil {
899903 return nil , fmt .Errorf ("could not set remote origin url: %v" , err )
900904 }
@@ -905,7 +909,9 @@ func configureManagedTransportOptions(repo *libgit2.Repository, repoURL string)
905909}
906910
907911func commitInRepo (g * WithT , repoURL , branch , msg string , changeFiles func (path string )) * libgit2.Oid {
908- repo , err := clone (repoURL , branch )
912+ cloneCtx , cancel := context .WithTimeout (ctx , time .Second * 10 )
913+ defer cancel ()
914+ repo , err := clone (cloneCtx , repoURL , branch )
909915 g .Expect (err ).ToNot (HaveOccurred ())
910916 defer repo .Free ()
911917
@@ -919,7 +925,7 @@ func commitInRepo(g *WithT, repoURL, branch, msg string, changeFiles func(path s
919925 id , err := commitWorkDir (repo , branch , msg , sig )
920926 g .Expect (err ).ToNot (HaveOccurred ())
921927
922- cleanup , err := configureManagedTransportOptions (repo , repoURL )
928+ cleanup , err := configureTransportOptsForRepo (repo )
923929 g .Expect (err ).ToNot (HaveOccurred ())
924930 defer cleanup ()
925931 origin , err := repo .Remotes .Lookup (originRemote )
@@ -951,8 +957,7 @@ func initGitRepo(gitServer *gittestserver.GitServer, fixture, branch, repository
951957 if err != nil {
952958 return err
953959 }
954-
955- return repo .Remotes .AddPush ("origin" , branchRefName (branch ))
960+ return repo .Remotes .AddPush (originRemote , branchRefName (branch ))
956961}
957962
958963func initGitRepoPlain (fixture , repositoryPath string ) (* git2go.Repository , error ) {
@@ -1157,14 +1162,15 @@ func mockSignature(time time.Time) *git2go.Signature {
11571162 }
11581163}
11591164
1160- func clone (repoURL , branchName string ) (* git2go.Repository , error ) {
1165+ func clone (ctx context. Context , repoURL , branchName string ) (* git2go.Repository , error ) {
11611166 dir , err := os .MkdirTemp ("" , "iac-clone-*" )
11621167 if err != nil {
11631168 return nil , err
11641169 }
11651170 transportOptsURL := "http://" + randStringRunes (5 )
11661171 managed .AddTransportOptions (transportOptsURL , managed.TransportOptions {
11671172 TargetURL : repoURL ,
1173+ Context : ctx ,
11681174 })
11691175 defer managed .RemoveTransportOptions (transportOptsURL )
11701176
@@ -1176,11 +1182,14 @@ func clone(repoURL, branchName string) (*git2go.Repository, error) {
11761182 },
11771183 }
11781184 repo , err := git2go .Clone (transportOptsURL , dir , opts )
1185+ if err != nil {
1186+ return nil , err
1187+ }
11791188
11801189 // set the origin remote url to the actual repo url, since
11811190 // the origin remote will have transportOptsURl as the it's url
11821191 // because that's the url used to clone the repo.
1183- err = repo .Remotes .SetUrl ("origin" , repoURL )
1192+ err = repo .Remotes .SetUrl (originRemote , repoURL )
11841193 if err != nil {
11851194 return nil , err
11861195 }
@@ -1190,16 +1199,12 @@ func clone(repoURL, branchName string) (*git2go.Repository, error) {
11901199func waitForNewHead (g * WithT , repo * git2go.Repository , branch , preChangeHash string ) {
11911200 var commitToResetTo * git2go.Commit
11921201
1193- cleanup , err := configureManagedTransportOptions (repo , "" )
1194- if err != nil {
1195- panic (err )
1196- }
1202+ cleanup , err := configureTransportOptsForRepo (repo )
1203+ g .Expect (err ).ToNot (HaveOccurred ())
11971204 defer cleanup ()
11981205
1199- origin , err := repo .Remotes .Lookup ("origin" )
1200- if err != nil {
1201- panic ("origin not set" )
1202- }
1206+ origin , err := repo .Remotes .Lookup (originRemote )
1207+ g .Expect (err ).ToNot (HaveOccurred ())
12031208 defer origin .Free ()
12041209
12051210 // Now try to fetch new commits from that remote branch
@@ -1252,13 +1257,13 @@ func commitIdFromBranch(repo *git2go.Repository, branchName string) string {
12521257}
12531258
12541259func getRemoteHead (repo * git2go.Repository , branchName string ) (* git2go.Oid , error ) {
1255- cleanup , err := configureManagedTransportOptions (repo , "" )
1260+ cleanup , err := configureTransportOptsForRepo (repo )
12561261 if err != nil {
12571262 return nil , err
12581263 }
12591264 defer cleanup ()
12601265
1261- remote , err := repo .Remotes .Lookup ("origin" )
1266+ remote , err := repo .Remotes .Lookup (originRemote )
12621267 if err != nil {
12631268 return nil , err
12641269 }
@@ -1438,14 +1443,16 @@ func testWithCustomRepoAndImagePolicy(
14381443
14391444 // Clone the repo.
14401445 repoURL := gitServer .HTTPAddressWithCredentials () + repositoryPath
1441- localRepo , err := clone (repoURL , args .branch )
1446+ cloneCtx , cancel := context .WithTimeout (ctx , time .Second * 10 )
1447+ defer cancel ()
1448+ localRepo , err := clone (cloneCtx , repoURL , args .branch )
14421449 g .Expect (err ).ToNot (HaveOccurred (), "failed to clone git repo" )
14431450 defer localRepo .Free ()
14441451
1445- origin , err := localRepo .Remotes .Lookup ("origin" )
1452+ origin , err := localRepo .Remotes .Lookup (originRemote )
14461453 g .Expect (err ).ToNot (HaveOccurred (), "failed to look up remote origin" )
14471454 defer origin .Free ()
1448- localRepo .Remotes .SetUrl ("origin" , repoURL )
1455+ localRepo .Remotes .SetUrl (originRemote , repoURL )
14491456
14501457 // Create GitRepository resource for the above repo.
14511458 err = createGitRepository (kClient , args .gitRepoName , args .gitRepoNamespace , repoURL , "" )
0 commit comments