(t *testing.T)
| 477 | } |
| 478 | |
| 479 | func 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 | |
| 533 | func (s *WorktreeSuite) TestCheckoutSparse(c *C) { |
| 534 | fs := memfs.New() |
nothing calls this directly
no test coverage detected
searching dependent graphs…