Skip to content

Commit ec3fc5b

Browse files
committed
git: add failing test for FetchAfterClone
1 parent 5a2d6f5 commit ec3fc5b

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

git/git_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ import (
1010
"os"
1111
"path/filepath"
1212
"regexp"
13+
"strings"
1314
"testing"
15+
"time"
1416

1517
"github.com/coder/envbuilder/git"
1618
"github.com/coder/envbuilder/options"
@@ -234,6 +236,59 @@ func TestShallowCloneRepo(t *testing.T) {
234236
})
235237
}
236238

239+
func TestFetchAfterClone(t *testing.T) {
240+
t.Parallel()
241+
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
242+
defer cancel()
243+
// setup a git repo
244+
srvDir := t.TempDir()
245+
srvFS := osfs.New(srvDir, osfs.WithChrootOS())
246+
repo := gittest.NewRepo(t, srvFS)
247+
repo.Commit(gittest.Commit(t, "README.md", "Hello, worldd!", "initial commit"))
248+
headBefore, err := repo.Repo.Head()
249+
require.NoError(t, err)
250+
srv := httptest.NewServer(gittest.NewServer(srvFS))
251+
252+
// clone to a tempdir
253+
clientDir := t.TempDir()
254+
clientFS := osfs.New(clientDir, osfs.WithChrootOS())
255+
cloned, err := git.CloneRepo(ctx, git.CloneRepoOptions{
256+
Path: "/repo",
257+
RepoURL: srv.URL,
258+
Storage: clientFS,
259+
})
260+
261+
require.NoError(t, err)
262+
require.True(t, cloned)
263+
264+
// add some commits on the server
265+
repo.Commit(gittest.Commit(t, "README.md", "Hello, world!", "fix typo"))
266+
// ensure state
267+
bs, err := os.ReadFile(filepath.Join(srvDir, "README.md"))
268+
require.NoError(t, err)
269+
require.Equal(t, "Hello, world!", strings.TrimSpace(string(bs)))
270+
headAfter, err := repo.Repo.Head()
271+
require.NoError(t, err)
272+
require.NotEqual(t, headBefore.Hash(), headAfter.Hash())
273+
274+
// run CloneRepo again
275+
clonedAgain, err := git.CloneRepo(ctx, git.CloneRepoOptions{
276+
Path: "/repo",
277+
RepoURL: srv.URL,
278+
Storage: clientFS,
279+
})
280+
require.NoError(t, err)
281+
require.True(t, clonedAgain)
282+
283+
// Inspect the cloned repo and check last commit
284+
headFile, err := clientFS.Open(filepath.Join(".git/refs/heads/main"))
285+
require.NoError(t, err)
286+
var sb strings.Builder
287+
_, err = io.Copy(&sb, headFile)
288+
require.NoError(t, err)
289+
require.Equal(t, headAfter, sb.String())
290+
}
291+
237292
func TestCloneRepoSSH(t *testing.T) {
238293
t.Parallel()
239294

0 commit comments

Comments
 (0)