diff options
Diffstat (limited to 'worktree_test.go')
-rw-r--r-- | worktree_test.go | 143 |
1 files changed, 142 insertions, 1 deletions
diff --git a/worktree_test.go b/worktree_test.go index 24a65eb..59c80af 100644 --- a/worktree_test.go +++ b/worktree_test.go @@ -265,6 +265,26 @@ func (s *RepositorySuite) TestPullAdd(c *C) { c.Assert(branch.Hash().String(), Not(Equals), "6ecf0ef2c2dffb796033e5a02219af86ec6584e5") } +func (s *WorktreeSuite) TestPullAlreadyUptodate(c *C) { + path := fixtures.Basic().ByTag("worktree").One().Worktree().Root() + + r, err := Clone(memory.NewStorage(), memfs.New(), &CloneOptions{ + URL: filepath.Join(path, ".git"), + }) + + c.Assert(err, IsNil) + + w, err := r.Worktree() + c.Assert(err, IsNil) + err = ioutil.WriteFile(filepath.Join(path, "bar"), []byte("bar"), 0755) + c.Assert(err, IsNil) + _, err = w.Commit("bar", &CommitOptions{Author: defaultSignature()}) + c.Assert(err, IsNil) + + err = w.Pull(&PullOptions{}) + c.Assert(err, Equals, NoErrAlreadyUpToDate) +} + func (s *WorktreeSuite) TestCheckout(c *C) { fs := memfs.New() w := &Worktree{ @@ -1370,6 +1390,52 @@ func (s *WorktreeSuite) TestAddDirectoryErrorNotFound(c *C) { c.Assert(h.IsZero(), Equals, true) } +func (s *WorktreeSuite) TestAddAll(c *C) { + fs := memfs.New() + w := &Worktree{ + r: s.Repository, + Filesystem: fs, + } + + err := w.Checkout(&CheckoutOptions{Force: true}) + c.Assert(err, IsNil) + + idx, err := w.r.Storer.Index() + c.Assert(err, IsNil) + c.Assert(idx.Entries, HasLen, 9) + + err = util.WriteFile(w.Filesystem, "file1", []byte("file1"), 0644) + c.Assert(err, IsNil) + + err = util.WriteFile(w.Filesystem, "file2", []byte("file2"), 0644) + c.Assert(err, IsNil) + + err = util.WriteFile(w.Filesystem, "file3", []byte("ignore me"), 0644) + c.Assert(err, IsNil) + + w.Excludes = make([]gitignore.Pattern, 0) + w.Excludes = append(w.Excludes, gitignore.ParsePattern("file3", nil)) + + err = w.AddWithOptions(&AddOptions{All: true}) + c.Assert(err, IsNil) + + idx, err = w.r.Storer.Index() + c.Assert(err, IsNil) + c.Assert(idx.Entries, HasLen, 11) + + status, err := w.Status() + c.Assert(err, IsNil) + c.Assert(status, HasLen, 2) + + file1 := status.File("file1") + c.Assert(file1.Staging, Equals, Added) + file2 := status.File("file2") + c.Assert(file2.Staging, Equals, Added) + file3 := status.File("file3") + c.Assert(file3.Staging, Equals, Untracked) + c.Assert(file3.Worktree, Equals, Untracked) +} + func (s *WorktreeSuite) TestAddGlob(c *C) { fs := memfs.New() w := &Worktree{ @@ -1391,7 +1457,7 @@ func (s *WorktreeSuite) TestAddGlob(c *C) { err = util.WriteFile(w.Filesystem, "qux/bar/baz", []byte("BAZ"), 0755) c.Assert(err, IsNil) - err = w.AddGlob(w.Filesystem.Join("qux", "b*")) + err = w.AddWithOptions(&AddOptions{Glob: w.Filesystem.Join("qux", "b*")}) c.Assert(err, IsNil) idx, err = w.r.Storer.Index() @@ -2006,3 +2072,78 @@ func (s *WorktreeSuite) TestAddAndCommit(c *C) { }) c.Assert(err, IsNil) } + +func (s *WorktreeSuite) TestLinkedWorktree(c *C) { + fs := fixtures.ByTag("linked-worktree").One().Worktree() + + // Open main repo. + { + fs, err := fs.Chroot("main") + c.Assert(err, IsNil) + repo, err := PlainOpenWithOptions(fs.Root(), &PlainOpenOptions{EnableDotGitCommonDir: true}) + c.Assert(err, IsNil) + + wt, err := repo.Worktree() + c.Assert(err, IsNil) + + status, err := wt.Status() + c.Assert(err, IsNil) + c.Assert(len(status), Equals, 2) // 2 files + + head, err := repo.Head() + c.Assert(err, IsNil) + c.Assert(string(head.Name()), Equals, "refs/heads/master") + } + + // Open linked-worktree #1. + { + fs, err := fs.Chroot("linked-worktree-1") + c.Assert(err, IsNil) + repo, err := PlainOpenWithOptions(fs.Root(), &PlainOpenOptions{EnableDotGitCommonDir: true}) + c.Assert(err, IsNil) + + wt, err := repo.Worktree() + c.Assert(err, IsNil) + + status, err := wt.Status() + c.Assert(err, IsNil) + c.Assert(len(status), Equals, 3) // 3 files + + _, ok := status["linked-worktree-1-unique-file.txt"] + c.Assert(ok, Equals, true) + + head, err := repo.Head() + c.Assert(err, IsNil) + c.Assert(string(head.Name()), Equals, "refs/heads/linked-worktree-1") + } + + // Open linked-worktree #2. + { + fs, err := fs.Chroot("linked-worktree-2") + c.Assert(err, IsNil) + repo, err := PlainOpenWithOptions(fs.Root(), &PlainOpenOptions{EnableDotGitCommonDir: true}) + c.Assert(err, IsNil) + + wt, err := repo.Worktree() + c.Assert(err, IsNil) + + status, err := wt.Status() + c.Assert(err, IsNil) + c.Assert(len(status), Equals, 3) // 3 files + + _, ok := status["linked-worktree-2-unique-file.txt"] + c.Assert(ok, Equals, true) + + head, err := repo.Head() + c.Assert(err, IsNil) + c.Assert(string(head.Name()), Equals, "refs/heads/branch-with-different-name") + } + + // Open linked-worktree #2. + { + fs, err := fs.Chroot("linked-worktree-invalid-commondir") + c.Assert(err, IsNil) + _, err = PlainOpenWithOptions(fs.Root(), &PlainOpenOptions{EnableDotGitCommonDir: true}) + c.Assert(err, Equals, ErrRepositoryIncomplete) + } +} |