Skip to content

Commit 5c5db73

Browse files
committed
tests/libgit2: don't access refs via filesystem
There are a bunch of tests where we read or write references via the filesystem directly. This only works with the "files" backend, but naturally breaks if we supported any other reference format. Refactor these tests to instead use the refdb to access those.
1 parent 5e058b5 commit 5c5db73

6 files changed

Lines changed: 46 additions & 62 deletions

File tree

tests/libgit2/cherrypick/workdir.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ void test_cherrypick_workdir__automerge(void)
6363
git_commit *head = NULL, *commit = NULL;
6464
git_oid cherry_oid, cherrypicked_oid, cherrypicked_tree_oid;
6565
git_tree *cherrypicked_tree = NULL;
66+
git_reference *ref;
6667

6768
cl_git_pass(git_commit_lookup(&head, repo, &head_oid));
6869
cl_git_pass(git_reset(repo, (git_object *)head, GIT_RESET_HARD, NULL));
@@ -71,7 +72,7 @@ void test_cherrypick_workdir__automerge(void)
7172
cl_git_pass(git_commit_lookup(&commit, repo, &cherry_oid));
7273
cl_git_pass(git_cherrypick(repo, commit, NULL));
7374

74-
cl_assert(git_fs_path_exists(TEST_REPO_PATH "/.git/CHERRY_PICK_HEAD"));
75+
cl_git_pass(git_reference_lookup(&ref, repo, "CHERRY_PICK_HEAD"));
7576
cl_assert(git_fs_path_exists(TEST_REPO_PATH "/.git/MERGE_MSG"));
7677

7778
cl_git_pass(git_index_write_tree(&cherrypicked_tree_oid, repo_index));
@@ -84,6 +85,7 @@ void test_cherrypick_workdir__automerge(void)
8485
git_oid_cpy(&head_oid, &cherrypicked_oid);
8586

8687
git_tree_free(cherrypicked_tree);
88+
git_reference_free(ref);
8789
git_commit_free(head);
8890
git_commit_free(commit);
8991
}
@@ -140,6 +142,7 @@ void test_cherrypick_workdir__conflicts(void)
140142
git_commit *head = NULL, *commit = NULL;
141143
git_oid head_oid, cherry_oid;
142144
git_str conflicting_buf = GIT_STR_INIT, mergemsg_buf = GIT_STR_INIT;
145+
git_reference *ref;
143146

144147
struct merge_index_entry merge_index_entries[] = {
145148
{ 0100644, "242e7977ba73637822ffb265b46004b9b0e5153b", 0, "file1.txt" },
@@ -160,7 +163,7 @@ void test_cherrypick_workdir__conflicts(void)
160163
cl_git_pass(git_commit_lookup(&commit, repo, &cherry_oid));
161164
cl_git_pass(git_cherrypick(repo, commit, NULL));
162165

163-
cl_assert(git_fs_path_exists(TEST_REPO_PATH "/.git/CHERRY_PICK_HEAD"));
166+
cl_git_pass(git_reference_lookup(&ref, repo, "CHERRY_PICK_HEAD"));
164167
cl_assert(git_fs_path_exists(TEST_REPO_PATH "/.git/MERGE_MSG"));
165168

166169
cl_assert(merge_test_index(repo_index, merge_index_entries, 7));
@@ -225,6 +228,7 @@ void test_cherrypick_workdir__conflicts(void)
225228
"File 3!\n" \
226229
">>>>>>> e9b63f3... Change all files\n") == 0);
227230

231+
git_reference_free(ref);
228232
git_commit_free(commit);
229233
git_commit_free(head);
230234
git_str_dispose(&mergemsg_buf);

tests/libgit2/merge/analysis.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,15 +120,11 @@ void test_merge_analysis__unborn(void)
120120
{
121121
git_merge_analysis_t merge_analysis;
122122
git_merge_preference_t merge_pref;
123-
git_str master = GIT_STR_INIT;
124123

125-
cl_git_pass(git_str_joinpath(&master, git_repository_path(repo), "refs/heads/master"));
126-
cl_must_pass(p_unlink(git_str_cstr(&master)));
124+
cl_git_pass(git_reference_remove(repo, "refs/heads/master"));
127125

128126
analysis_from_branch(&merge_analysis, &merge_pref, NULL, NOFASTFORWARD_BRANCH);
129127
cl_assert_equal_i(GIT_MERGE_ANALYSIS_FASTFORWARD|GIT_MERGE_ANALYSIS_UNBORN, merge_analysis);
130-
131-
git_str_dispose(&master);
132128
}
133129

134130
void test_merge_analysis__fastforward_with_config_noff(void)

tests/libgit2/merge/workdir/setup.c

Lines changed: 7 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -471,45 +471,15 @@ void test_merge_workdir_setup__three_same_oids(void)
471471

472472
static int create_remote_tracking_branch(const char *branch_name, const char *oid_str)
473473
{
474-
int error = 0;
474+
git_str refname = GIT_STR_INIT;
475+
git_oid oid;
475476

476-
git_str remotes_path = GIT_STR_INIT,
477-
origin_path = GIT_STR_INIT,
478-
filename = GIT_STR_INIT,
479-
data = GIT_STR_INIT;
477+
cl_git_pass(git_oid_from_string(&oid, oid_str, GIT_OID_SHA1));
478+
cl_git_pass(git_str_printf(&refname, GIT_REFS_REMOTES_DIR "origin/%s", branch_name));
479+
cl_git_pass(git_reference_create(NULL, repo, refname.ptr, &oid, 0, NULL));
480480

481-
if ((error = git_str_puts(&remotes_path, git_repository_path(repo))) < 0 ||
482-
(error = git_str_puts(&remotes_path, GIT_REFS_REMOTES_DIR)) < 0)
483-
goto done;
484-
485-
if (!git_fs_path_exists(git_str_cstr(&remotes_path)) &&
486-
(error = p_mkdir(git_str_cstr(&remotes_path), 0777)) < 0)
487-
goto done;
488-
489-
if ((error = git_str_puts(&origin_path, git_str_cstr(&remotes_path))) < 0 ||
490-
(error = git_str_puts(&origin_path, "origin")) < 0)
491-
goto done;
492-
493-
if (!git_fs_path_exists(git_str_cstr(&origin_path)) &&
494-
(error = p_mkdir(git_str_cstr(&origin_path), 0777)) < 0)
495-
goto done;
496-
497-
if ((error = git_str_puts(&filename, git_str_cstr(&origin_path))) < 0 ||
498-
(error = git_str_puts(&filename, "/")) < 0 ||
499-
(error = git_str_puts(&filename, branch_name)) < 0 ||
500-
(error = git_str_puts(&data, oid_str)) < 0 ||
501-
(error = git_str_puts(&data, "\n")) < 0)
502-
goto done;
503-
504-
cl_git_rewritefile(git_str_cstr(&filename), git_str_cstr(&data));
505-
506-
done:
507-
git_str_dispose(&remotes_path);
508-
git_str_dispose(&origin_path);
509-
git_str_dispose(&filename);
510-
git_str_dispose(&data);
511-
512-
return error;
481+
git_str_dispose(&refname);
482+
return 0;
513483
}
514484

515485
/* git merge refs/remotes/origin/octo1 */

tests/libgit2/rebase/setup.c

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,18 @@ void test_rebase_setup__cleanup(void)
2323
cl_git_sandbox_cleanup();
2424
}
2525

26+
static void cl_assert_equal_ref(const char *oid_str, const char *refname)
27+
{
28+
git_reference *ref;
29+
git_oid oid;
30+
31+
cl_git_pass(git_oid_from_string(&oid, oid_str, GIT_OID_SHA1));
32+
cl_git_pass(git_reference_lookup(&ref, repo, refname));
33+
cl_assert_equal_oid(&oid, git_reference_target(ref));
34+
35+
git_reference_free(ref);
36+
}
37+
2638
/* git checkout beef ; git rebase --merge master
2739
* git checkout beef ; git rebase --merge master */
2840
void test_rebase_setup__blocked_when_in_progress(void)
@@ -79,7 +91,7 @@ void test_rebase_setup__merge(void)
7991
cl_git_pass(git_reference_peel((git_object **)&head_commit, head, GIT_OBJECT_COMMIT));
8092
cl_assert_equal_oid(&head_id, git_commit_id(head_commit));
8193

82-
cl_assert_equal_file("b146bd7608eac53d9bf9e1a6963543588b555c64\n", 41, "rebase/.git/ORIG_HEAD");
94+
cl_assert_equal_ref("b146bd7608eac53d9bf9e1a6963543588b555c64", "ORIG_HEAD");
8395

8496
cl_assert_equal_file("da9c51a23d02d931a486f45ad18cda05cf5d2b94\n", 41, "rebase/.git/rebase-merge/cmt.1");
8597
cl_assert_equal_file("8d1f13f93c4995760ac07d129246ac1ff64c0be9\n", 41, "rebase/.git/rebase-merge/cmt.2");
@@ -125,7 +137,7 @@ void test_rebase_setup__merge_root(void)
125137
cl_git_pass(git_reference_peel((git_object **)&head_commit, head, GIT_OBJECT_COMMIT));
126138
cl_assert_equal_oid(&head_id, git_commit_id(head_commit));
127139

128-
cl_assert_equal_file("b146bd7608eac53d9bf9e1a6963543588b555c64\n", 41, "rebase/.git/ORIG_HEAD");
140+
cl_assert_equal_ref("b146bd7608eac53d9bf9e1a6963543588b555c64", "ORIG_HEAD");
129141

130142
cl_assert_equal_i(GIT_REPOSITORY_STATE_REBASE_MERGE, git_repository_state(repo));
131143

@@ -175,7 +187,7 @@ void test_rebase_setup__merge_onto_and_upstream(void)
175187
cl_git_pass(git_reference_peel((git_object **)&head_commit, head, GIT_OBJECT_COMMIT));
176188
cl_assert_equal_oid(&head_id, git_commit_id(head_commit));
177189

178-
cl_assert_equal_file("d616d97082eb7bb2dc6f180a7cca940993b7a56f\n", 41, "rebase/.git/ORIG_HEAD");
190+
cl_assert_equal_ref("d616d97082eb7bb2dc6f180a7cca940993b7a56f", "ORIG_HEAD");
179191

180192
cl_assert_equal_i(GIT_REPOSITORY_STATE_REBASE_MERGE, git_repository_state(repo));
181193

@@ -229,7 +241,7 @@ void test_rebase_setup__merge_onto_upstream_and_branch(void)
229241
cl_git_pass(git_reference_peel((git_object **)&head_commit, head, GIT_OBJECT_COMMIT));
230242
cl_assert_equal_oid(&head_id, git_commit_id(head_commit));
231243

232-
cl_assert_equal_file("f87d14a4a236582a0278a916340a793714256864\n", 41, "rebase/.git/ORIG_HEAD");
244+
cl_assert_equal_ref("f87d14a4a236582a0278a916340a793714256864", "ORIG_HEAD");
233245

234246
cl_assert_equal_i(GIT_REPOSITORY_STATE_REBASE_MERGE, git_repository_state(repo));
235247

@@ -287,7 +299,7 @@ void test_rebase_setup__merge_onto_upstream_and_branch_by_id(void)
287299
cl_git_pass(git_reference_peel((git_object **)&head_commit, head, GIT_OBJECT_COMMIT));
288300
cl_assert_equal_oid(&head_id, git_commit_id(head_commit));
289301

290-
cl_assert_equal_file("d616d97082eb7bb2dc6f180a7cca940993b7a56f\n", 41, "rebase/.git/ORIG_HEAD");
302+
cl_assert_equal_ref("d616d97082eb7bb2dc6f180a7cca940993b7a56f", "ORIG_HEAD");
291303

292304
cl_assert_equal_i(GIT_REPOSITORY_STATE_REBASE_MERGE, git_repository_state(repo));
293305

@@ -333,7 +345,7 @@ void test_rebase_setup__branch_with_merges(void)
333345
cl_git_pass(git_reference_peel((git_object **)&head_commit, head, GIT_OBJECT_COMMIT));
334346
cl_assert_equal_oid(&head_id, git_commit_id(head_commit));
335347

336-
cl_assert_equal_file("f87d14a4a236582a0278a916340a793714256864\n", 41, "rebase/.git/ORIG_HEAD");
348+
cl_assert_equal_ref("f87d14a4a236582a0278a916340a793714256864", "ORIG_HEAD");
337349

338350
cl_assert_equal_file("4bed71df7017283cac61bbf726197ad6a5a18b84\n", 41, "rebase/.git/rebase-merge/cmt.1");
339351
cl_assert_equal_file("2aa3ce842094e08ebac152b3d6d5b0fff39f9c6e\n", 41, "rebase/.git/rebase-merge/cmt.2");
@@ -381,7 +393,7 @@ void test_rebase_setup__orphan_branch(void)
381393
cl_git_pass(git_reference_peel((git_object **)&head_commit, head, GIT_OBJECT_COMMIT));
382394
cl_assert_equal_oid(&head_id, git_commit_id(head_commit));
383395

384-
cl_assert_equal_file("12c084412b952396962eb420716df01022b847cc\n", 41, "rebase/.git/ORIG_HEAD");
396+
cl_assert_equal_ref("12c084412b952396962eb420716df01022b847cc", "ORIG_HEAD");
385397

386398
cl_assert_equal_file("aa4c42aecdfc7cd989bbc3209934ea7cda3f4d88\n", 41, "rebase/.git/rebase-merge/cmt.1");
387399
cl_assert_equal_file("e4f809f826c1a9fc929874bc0e4644dd2f2a1af4\n", 41, "rebase/.git/rebase-merge/cmt.2");
@@ -432,7 +444,7 @@ void test_rebase_setup__merge_null_branch_uses_HEAD(void)
432444
cl_git_pass(git_reference_peel((git_object **)&head_commit, head, GIT_OBJECT_COMMIT));
433445
cl_assert_equal_oid(&head_id, git_commit_id(head_commit));
434446

435-
cl_assert_equal_file("b146bd7608eac53d9bf9e1a6963543588b555c64\n", 41, "rebase/.git/ORIG_HEAD");
447+
cl_assert_equal_ref("b146bd7608eac53d9bf9e1a6963543588b555c64", "ORIG_HEAD");
436448

437449
cl_assert_equal_file("da9c51a23d02d931a486f45ad18cda05cf5d2b94\n", 41, "rebase/.git/rebase-merge/cmt.1");
438450
cl_assert_equal_file("8d1f13f93c4995760ac07d129246ac1ff64c0be9\n", 41, "rebase/.git/rebase-merge/cmt.2");
@@ -479,7 +491,7 @@ void test_rebase_setup__merge_from_detached(void)
479491
cl_git_pass(git_reference_peel((git_object **)&head_commit, head, GIT_OBJECT_COMMIT));
480492
cl_assert_equal_oid(&head_id, git_commit_id(head_commit));
481493

482-
cl_assert_equal_file("b146bd7608eac53d9bf9e1a6963543588b555c64\n", 41, "rebase/.git/ORIG_HEAD");
494+
cl_assert_equal_ref("b146bd7608eac53d9bf9e1a6963543588b555c64", "ORIG_HEAD");
483495

484496
cl_assert_equal_file("da9c51a23d02d931a486f45ad18cda05cf5d2b94\n", 41, "rebase/.git/rebase-merge/cmt.1");
485497
cl_assert_equal_file("8d1f13f93c4995760ac07d129246ac1ff64c0be9\n", 41, "rebase/.git/rebase-merge/cmt.2");
@@ -527,7 +539,7 @@ void test_rebase_setup__merge_branch_by_id(void)
527539
cl_git_pass(git_reference_peel((git_object **)&head_commit, head, GIT_OBJECT_COMMIT));
528540
cl_assert_equal_oid(&head_id, git_commit_id(head_commit));
529541

530-
cl_assert_equal_file("b146bd7608eac53d9bf9e1a6963543588b555c64\n", 41, "rebase/.git/ORIG_HEAD");
542+
cl_assert_equal_ref("b146bd7608eac53d9bf9e1a6963543588b555c64", "ORIG_HEAD");
531543

532544
cl_assert_equal_file("da9c51a23d02d931a486f45ad18cda05cf5d2b94\n", 41, "rebase/.git/rebase-merge/cmt.1");
533545
cl_assert_equal_file("8d1f13f93c4995760ac07d129246ac1ff64c0be9\n", 41, "rebase/.git/rebase-merge/cmt.2");

tests/libgit2/repo/repo_helpers.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#include "clar_libgit2.h"
22
#include "refs.h"
33
#include "repo_helpers.h"
4+
#include "repository.h"
5+
#include "refdb.h"
46
#include "posix.h"
57

68
void make_head_unborn(git_repository* repo, const char *target)
@@ -13,12 +15,9 @@ void make_head_unborn(git_repository* repo, const char *target)
1315

1416
void delete_head(git_repository* repo)
1517
{
16-
git_str head_path = GIT_STR_INIT;
17-
18-
cl_git_pass(git_str_joinpath(&head_path, git_repository_path(repo), GIT_HEAD_REF));
19-
cl_git_pass(p_unlink(git_str_cstr(&head_path)));
20-
21-
git_str_dispose(&head_path);
18+
git_refdb *refdb;
19+
cl_git_pass(git_repository_refdb__weakptr(&refdb, repo));
20+
cl_git_pass(git_refdb_delete(refdb, GIT_HEAD_REF, NULL, NULL));
2221
}
2322

2423
void create_tmp_global_config(const char *dirname, const char *key, const char *val)

tests/libgit2/revwalk/basic.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,19 +182,22 @@ void test_revwalk_basic__glob_heads_with_invalid(void)
182182

183183
void test_revwalk_basic__glob_invalid_symbolic_ref(void)
184184
{
185+
git_reference *ref;
185186
int i;
186187
git_oid oid;
187188

188189
revwalk_basic_setup_walk("testrepo");
189-
190-
cl_git_mkfile("testrepo/.git/refs/heads/broken-sym-ref", "ref: refs/heads/does-not-exist");
190+
cl_git_pass(git_reference_symbolic_create(&ref, _repo, "refs/heads/broken-sym-ref",
191+
"refs/heads/does-not-exist", 1, NULL));
191192
cl_git_pass(git_revwalk_push_glob(_walk, "heads"));
192193

193194
for (i = 0; !git_revwalk_next(&oid, _walk); ++i)
194195
/* walking */;
195196

196197
/* git log --branches --oneline | wc -l => 16 */
197198
cl_assert_equal_i(20, i);
199+
200+
git_reference_free(ref);
198201
}
199202

200203
void test_revwalk_basic__push_head(void)

0 commit comments

Comments
 (0)