diff options
| author | Edward Thomson <ethomson@edwardthomson.com> | 2020-08-03 09:55:22 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-03 09:55:22 +0100 |
| commit | c5d41d46c96590e83a0c335f0996fb96e88f3090 (patch) | |
| tree | ca114ab81acd7b62be91ca6af279191bccbc5830 /tests | |
| parent | 52ccbc5d36b5650c4e4e16ac7c5ac7966347a6c1 (diff) | |
| parent | ce4cb0738218ae6f5f52e1dce2a810feb34cfc4e (diff) | |
| download | libgit2-c5d41d46c96590e83a0c335f0996fb96e88f3090.tar.gz | |
Merge pull request #5563 from pks-t/pks/worktree-heads
Access HEAD via the refdb backends
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/worktree/refs.c | 5 | ||||
| -rw-r--r-- | tests/worktree/repository.c | 5 | ||||
| -rw-r--r-- | tests/worktree/worktree.c | 57 |
3 files changed, 30 insertions, 37 deletions
diff --git a/tests/worktree/refs.c b/tests/worktree/refs.c index 501255274..27dc667ea 100644 --- a/tests/worktree/refs.c +++ b/tests/worktree/refs.c @@ -163,7 +163,10 @@ void test_worktree_refs__renaming_reference_updates_worktree_heads(void) cl_git_pass(git_branch_lookup(&branch, fixture.repo, "testrepo-worktree", GIT_BRANCH_LOCAL)); cl_git_pass(git_reference_rename(&renamed, branch, "refs/heads/renamed", 0, NULL)); - cl_git_pass(git_repository_head(&head, fixture.worktree)); + + cl_git_pass(git_reference_lookup(&head, fixture.worktree, GIT_HEAD_FILE)); + cl_assert_equal_i(git_reference_type(head), GIT_REFERENCE_SYMBOLIC); + cl_assert_equal_s(git_reference_symbolic_target(head), "refs/heads/renamed"); git_reference_free(head); git_reference_free(branch); diff --git a/tests/worktree/repository.c b/tests/worktree/repository.c index ca56413b7..c4eeadd35 100644 --- a/tests/worktree/repository.c +++ b/tests/worktree/repository.c @@ -50,9 +50,12 @@ void test_worktree_repository__head_detached(void) cl_assert(git_repository_head_detached(fixture.worktree)); cl_assert(git_repository_head_detached_for_worktree(fixture.repo, "testrepo-worktree")); - cl_git_fail(git_repository_head_for_worktree(&head, fixture.repo, "testrepo-worktree")); + cl_git_pass(git_repository_head_for_worktree(&head, fixture.repo, "testrepo-worktree")); + + cl_assert_equal_oid(&ref->target.oid, &head->target.oid); git_reference_free(ref); + git_reference_free(head); } void test_worktree_repository__head_detached_fails_for_invalid_worktree(void) diff --git a/tests/worktree/worktree.c b/tests/worktree/worktree.c index 716d0aa0a..cd20bed82 100644 --- a/tests/worktree/worktree.c +++ b/tests/worktree/worktree.c @@ -581,45 +581,32 @@ void test_worktree_worktree__prune_worktree(void) git_worktree_free(wt); } -static int read_head_ref(git_repository *repo, const char *path, void *payload) -{ - git_vector *refs = (git_vector *) payload; - git_reference *head; - - GIT_UNUSED(repo); - - cl_git_pass(git_reference__read_head(&head, repo, path)); +static int foreach_worktree_cb(git_repository *worktree, void *payload) +{ + int *counter = (int *)payload; + + switch (*counter) { + case 0: + cl_assert_equal_s(git_repository_path(fixture.repo), + git_repository_path(worktree)); + cl_assert(!git_repository_is_worktree(worktree)); + break; + case 1: + cl_assert_equal_s(git_repository_path(fixture.worktree), + git_repository_path(worktree)); + cl_assert(git_repository_is_worktree(worktree)); + break; + default: + cl_fail("more worktrees found than expected"); + } - git_vector_insert(refs, head); + (*counter)++; return 0; } -void test_worktree_worktree__foreach_head_gives_same_results_in_wt_and_repo(void) +void test_worktree_worktree__foreach_worktree_lists_all_worktrees(void) { - git_vector repo_refs = GIT_VECTOR_INIT, worktree_refs = GIT_VECTOR_INIT; - git_reference *heads[2]; - size_t i; - - cl_git_pass(git_reference_lookup(&heads[0], fixture.repo, GIT_HEAD_FILE)); - cl_git_pass(git_reference_lookup(&heads[1], fixture.worktree, GIT_HEAD_FILE)); - - cl_git_pass(git_repository_foreach_head(fixture.repo, read_head_ref, 0, &repo_refs)); - cl_git_pass(git_repository_foreach_head(fixture.worktree, read_head_ref, 0, &worktree_refs)); - - cl_assert_equal_i(repo_refs.length, ARRAY_SIZE(heads)); - cl_assert_equal_i(worktree_refs.length, ARRAY_SIZE(heads)); - - for (i = 0; i < ARRAY_SIZE(heads); i++) { - cl_assert_equal_s(heads[i]->name, ((git_reference *) repo_refs.contents[i])->name); - cl_assert_equal_s(heads[i]->name, ((git_reference *) repo_refs.contents[i])->name); - cl_assert_equal_s(heads[i]->name, ((git_reference *) worktree_refs.contents[i])->name); - - git_reference_free(heads[i]); - git_reference_free(repo_refs.contents[i]); - git_reference_free(worktree_refs.contents[i]); - } - - git_vector_free(&repo_refs); - git_vector_free(&worktree_refs); + int counter = 0; + cl_git_pass(git_repository_foreach_worktree(fixture.repo, foreach_worktree_cb, &counter)); } |
