}
}
- git_buf_free(&path);
+ git_buf_dispose(&path);
}
void test_worktree_worktree__list_in_worktree_repo(void)
git_strarray_free(&wts);
}
-void test_worktree_worktree__list_bare(void)
-{
- git_repository *repo;
- git_strarray wts;
-
- repo = cl_git_sandbox_init("testrepo.git");
- cl_git_pass(git_worktree_list(&wts, repo));
- cl_assert_equal_i(wts.count, 0);
-
- git_repository_free(repo);
-}
-
void test_worktree_worktree__list_without_worktrees(void)
{
git_repository *repo;
cl_assert_equal_s(wt->commondir_path, fixture.repo->gitdir);
cl_assert_equal_s(wt->commondir_path, fixture.repo->commondir);
- git_buf_free(&gitdir_path);
+ git_buf_dispose(&gitdir_path);
git_worktree_free(wt);
}
cl_git_pass(git_worktree_lookup(&wt, fixture.repo, "testrepo-worktree"));
cl_git_fail(git_repository_open_from_worktree(&repo, wt));
- git_buf_free(&buf);
- git_buf_free(&path);
+ git_buf_dispose(&buf);
+ git_buf_dispose(&path);
git_worktree_free(wt);
}
cl_git_pass(git_worktree_lookup(&wt, fixture.repo, "testrepo-worktree"));
cl_git_fail(git_repository_open_from_worktree(&repo, wt));
- git_buf_free(&buf);
- git_buf_free(&path);
+ git_buf_dispose(&buf);
+ git_buf_dispose(&path);
git_worktree_free(wt);
}
cl_git_pass(git_worktree_lookup(&wt, fixture.repo, "testrepo-worktree"));
cl_git_fail(git_repository_open_from_worktree(&repo, wt));
- git_buf_free(&buf);
+ git_buf_dispose(&buf);
git_worktree_free(wt);
}
cl_assert(git__suffixcmp(git_repository_workdir(repo), "worktree-new/") == 0);
cl_git_pass(git_branch_lookup(&branch, repo, "worktree-new", GIT_BRANCH_LOCAL));
- git_buf_free(&path);
+ git_buf_dispose(&path);
git_worktree_free(wt);
git_reference_free(branch);
git_repository_free(repo);
}
-void test_worktree_worktree__add_from_bare(void)
-{
- git_worktree *wt;
- git_repository *repo, *wtrepo;
-
- repo = cl_git_sandbox_init("short_tag.git");
-
- cl_assert_equal_i(1, git_repository_is_bare(repo));
- cl_assert_equal_i(0, git_repository_is_worktree(repo));
-
- cl_git_pass(git_worktree_add(&wt, repo, "worktree-frombare", "worktree-frombare", NULL));
- cl_git_pass(git_repository_open(&wtrepo, "worktree-frombare"));
- cl_assert_equal_i(0, git_repository_is_bare(wtrepo));
- cl_assert_equal_i(1, git_repository_is_worktree(wtrepo));
-
- git_worktree_free(wt);
- git_repository_free(repo);
- git_repository_free(wtrepo);
-}
-
void test_worktree_worktree__add_locked(void)
{
git_worktree *wt;
cl_assert(git__suffixcmp(git_repository_workdir(repo), "worktree-locked/") == 0);
cl_git_pass(git_branch_lookup(&branch, repo, "worktree-locked", GIT_BRANCH_LOCAL));
- git_buf_free(&path);
+ git_buf_dispose(&path);
git_worktree_free(wt);
git_reference_free(branch);
git_repository_free(repo);
cl_git_pass(git_buf_joinpath(&path, fixture.repo->workdir, "../worktree-new"));
cl_git_fail(git_worktree_add(&wt, fixture.repo, "worktree-new", path.ptr, NULL));
- git_buf_free(&path);
+ git_buf_dispose(&path);
git_commit_free(commit);
git_reference_free(head);
git_reference_free(branch);
}
+void test_worktree_worktree__add_with_explicit_branch(void)
+{
+ git_reference *head, *branch, *wthead;
+ git_commit *commit;
+ git_worktree *wt;
+ git_repository *wtrepo;
+ git_buf path = GIT_BUF_INIT;
+ git_worktree_add_options opts = GIT_WORKTREE_ADD_OPTIONS_INIT;
+
+ cl_git_pass(git_repository_head(&head, fixture.repo));
+ cl_git_pass(git_commit_lookup(&commit, fixture.repo, &head->target.oid));
+ cl_git_pass(git_branch_create(&branch, fixture.repo, "worktree-with-ref", commit, false));
+
+ opts.ref = branch;
+
+ cl_git_pass(git_buf_joinpath(&path, fixture.repo->workdir, "../worktree-with-different-name"));
+ cl_git_pass(git_worktree_add(&wt, fixture.repo, "worktree-with-different-name", path.ptr, &opts));
+ cl_git_pass(git_repository_open_from_worktree(&wtrepo, wt));
+ cl_git_pass(git_repository_head(&wthead, wtrepo));
+ cl_assert_equal_s(git_reference_name(wthead), "refs/heads/worktree-with-ref");
+
+ git_buf_dispose(&path);
+ git_commit_free(commit);
+ git_reference_free(head);
+ git_reference_free(branch);
+ git_reference_free(wthead);
+ git_repository_free(wtrepo);
+ git_worktree_free(wt);
+}
+
+
void test_worktree_worktree__init_existing_worktree(void)
{
git_worktree *wt;
cl_git_pass(git_worktree_lookup(&wt, fixture.repo, "testrepo-worktree"));
cl_assert_equal_s(wt->gitlink_path, fixture.worktree->gitlink);
- git_buf_free(&path);
+ git_buf_dispose(&path);
git_worktree_free(wt);
}
cl_assert(!git_path_exists(path.ptr));
}
- git_buf_free(&path);
+ git_buf_dispose(&path);
}
void test_worktree_worktree__init_submodule(void)
cl_git_pass(git_buf_joinpath(&path, sm->gitdir, "worktrees/repo-worktree/"));
cl_assert_equal_s(path.ptr, wt->gitdir);
- git_buf_free(&path);
+ git_buf_dispose(&path);
git_worktree_free(worktree);
git_repository_free(sm);
git_repository_free(wt);
git_worktree_free(wt);
}
+void test_worktree_worktree__name(void)
+{
+ git_worktree *wt;
+
+ cl_git_pass(git_worktree_lookup(&wt, fixture.repo, "testrepo-worktree"));
+ cl_assert_equal_s(git_worktree_name(wt), "testrepo-worktree");
+
+ git_worktree_free(wt);
+}
+
+void test_worktree_worktree__path(void)
+{
+ git_worktree *wt;
+ git_buf expected_path = GIT_BUF_INIT;
+
+ cl_git_pass(git_buf_joinpath(&expected_path, clar_sandbox_path(), "testrepo-worktree"));
+ cl_git_pass(git_worktree_lookup(&wt, fixture.repo, "testrepo-worktree"));
+ cl_assert_equal_s(git_worktree_path(wt), expected_path.ptr);
+
+ git_buf_dispose(&expected_path);
+ git_worktree_free(wt);
+}
+
void test_worktree_worktree__validate_invalid_commondir(void)
{
git_worktree *wt;
cl_assert_equal_s(reason.ptr, "because");
cl_assert(wt->locked);
- git_buf_free(&reason);
+ git_buf_dispose(&reason);
git_worktree_free(wt);
}
cl_assert_equal_i(reason.size, 0);
cl_assert(wt->locked);
- git_buf_free(&reason);
+ git_buf_dispose(&reason);
git_worktree_free(wt);
}