MCPcopy
hub / github.com/go-git/go-git / TestCheckoutSymlinkArbitraryTarget

Function TestCheckoutSymlinkArbitraryTarget

worktree_test.go:479–531  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

477}
478
479func TestCheckoutSymlinkArbitraryTarget(t *testing.T) {
480 if runtime.GOOS == "windows" {
481 t.Skip("git doesn't support symlinks by default in windows")
482 }
483 t.Parallel()
484
485 tests := []struct {
486 name string
487 target string
488 }{
489 {name: "rel", target: "target"},
490 {name: "absolute", target: "/etc/passwd"},
491 {name: "dot-dot relative", target: "../../outside"},
492 }
493
494 for _, tc := range tests {
495 t.Run(tc.name, func(t *testing.T) {
496 t.Parallel()
497
498 dir := t.TempDir()
499 wtFS := osfs.New(dir, osfs.WithBoundOS())
500
501 dotFS, err := wtFS.Chroot(".git")
502 require.NoError(t, err)
503 storage := filesystem.NewStorage(dotFS, cache.NewObjectLRUDefault())
504
505 r, err := Init(storage, wtFS)
506 require.NoError(t, err)
507
508 w, err := r.Worktree()
509 require.NoError(t, err)
510
511 require.NoError(t, w.Filesystem.Symlink(tc.target, "link"))
512 _, err = w.Add("link")
513 require.NoError(t, err)
514 _, err = w.Commit("add symlink", &CommitOptions{Author: defaultSignature()})
515 require.NoError(t, err)
516
517 require.NoError(t, r.Storer.SetIndex(&index.Index{Version: 2}))
518 w.Filesystem = newWorktreeFilesystem(
519 osfs.New(filepath.Join(dir, "worktree-empty")), true, true)
520
521 require.NoError(t, w.Checkout(&CheckoutOptions{}))
522
523 _, err = w.Status()
524 require.NoError(t, err)
525
526 got, err := w.Filesystem.Readlink("link")
527 require.NoError(t, err)
528 assert.Equal(t, tc.target, got)
529 })
530 }
531}
532
533func (s *WorktreeSuite) TestCheckoutSparse(c *C) {
534 fs := memfs.New()

Callers

nothing calls this directly

Calls 15

NewStorageFunction · 0.92
NewObjectLRUDefaultFunction · 0.92
InitFunction · 0.85
defaultSignatureFunction · 0.85
newWorktreeFilesystemFunction · 0.85
WorktreeMethod · 0.80
JoinMethod · 0.80
CheckoutMethod · 0.80
SkipMethod · 0.65
CommitMethod · 0.65
SetIndexMethod · 0.65
ChrootMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…