@@ -18,6 +18,7 @@ package vcs
1818
1919import (
2020 "github.com/go-git/go-git/v5"
21+ "github.com/go-git/go-git/v5/config"
2122 "github.com/go-git/go-git/v5/plumbing"
2223 "github.com/go-git/go-git/v5/plumbing/object"
2324 "github.com/snyk/snyk-ls/internal/testutil"
@@ -40,6 +41,31 @@ func TestClone_ShouldClone(t *testing.T) {
4041 assert .NoError (t , err )
4142}
4243
44+ func TestClone_ShouldClone_SameOriginRemoteUrl (t * testing.T ) {
45+ c := testutil .UnitTest (t )
46+ repoPath := t .TempDir ()
47+ srcRepo , _ := initGitRepo (t , repoPath , false )
48+
49+ tmpFolderPath := t .TempDir ()
50+ cloneTargetBranchName := "master"
51+ clonedRepo , err := Clone (c .Logger (), repoPath , tmpFolderPath , cloneTargetBranchName )
52+
53+ assert .NotNil (t , clonedRepo )
54+ assert .NoError (t , err )
55+
56+ srcConfig , err := srcRepo .Config ()
57+ assert .NoError (t , err )
58+ remoteSrcConfig := srcConfig .Remotes ["origin" ]
59+ assert .NotNil (t , remoteSrcConfig )
60+
61+ clonedRepoConfig , err := clonedRepo .Config ()
62+ assert .NoError (t , err )
63+ remoteDstConfig := clonedRepoConfig .Remotes ["origin" ]
64+ assert .NotNil (t , remoteDstConfig )
65+
66+ assert .Equal (t , remoteSrcConfig .URLs [0 ], remoteDstConfig .URLs [0 ])
67+ }
68+
4369func TestClone_InvalidBranchName (t * testing.T ) {
4470 c := testutil .UnitTest (t )
4571 repoPath := t .TempDir ()
@@ -75,6 +101,40 @@ func TestClone_DetachedHead_TargetBranchExists(t *testing.T) {
75101 assert .NotNil (t , cloneRepo )
76102}
77103
104+ func TestClone_DetachedHead_TargetBranchExists_SameOriginRemoteUrl (t * testing.T ) {
105+ c := testutil .UnitTest (t )
106+ repoPath := t .TempDir ()
107+ destinationPath := t .TempDir ()
108+ srcRepo , currentHead := initGitRepo (t , repoPath , true )
109+ worktree , err := srcRepo .Worktree ()
110+ assert .NoError (t , err )
111+ _ , err = worktree .Commit ("testCommit" , & git.CommitOptions {
112+ Author : & object.Signature {Name : t .Name ()},
113+ })
114+ assert .NoError (t , err )
115+
116+ // Now checkout the old head hash
117+ err = worktree .Checkout (& git.CheckoutOptions {Hash : currentHead .Hash ()})
118+ assert .NoError (t , err )
119+ cloneTargetBranchName := "master"
120+ clonedRepo , err := Clone (c .Logger (), repoPath , destinationPath , cloneTargetBranchName )
121+
122+ assert .NoError (t , err )
123+ assert .NotNil (t , clonedRepo )
124+
125+ srcConfig , err := srcRepo .Config ()
126+ assert .NoError (t , err )
127+ remoteSrcConfig := srcConfig .Remotes ["origin" ]
128+ assert .NotNil (t , remoteSrcConfig )
129+
130+ clonedRepoConfig , err := clonedRepo .Config ()
131+ assert .NoError (t , err )
132+ remoteDstConfig := clonedRepoConfig .Remotes ["origin" ]
133+ assert .NotNil (t , remoteDstConfig )
134+
135+ assert .Equal (t , remoteSrcConfig .URLs [0 ], remoteDstConfig .URLs [0 ])
136+ }
137+
78138func TestClone_DetachedHead_TargetBranchDoesNotExists (t * testing.T ) {
79139 c := testutil .UnitTest (t )
80140 repoPath := t .TempDir ()
@@ -221,8 +281,18 @@ func initGitRepo(t *testing.T, repoPath string, isModified bool) (*git.Repositor
221281 })
222282 assert .NoError (t , err )
223283 }
284+
224285 head , err := repo .Head ()
225286 assert .NoError (t , err )
226287
288+ repoConfig , err := repo .Config ()
289+ assert .NoError (t , err )
290+
291+ repoConfig .Remotes ["origin" ] = & config.RemoteConfig {
292+ Name : "origin" ,
293+ URLs : []
string {
"[email protected] :snyk/snyk-goof.git" },
294+ }
295+ err = repo .Storer .SetConfig (repoConfig )
296+ assert .NoError (t , err )
227297 return repo , head
228298}
0 commit comments