mirror of
https://github.com/libgit2/libgit2.git
synced 2026-01-25 02:56:17 +00:00
tests: graft commits
This commit is contained in:
committed by
Patrick Steinhardt
parent
a35cc402fa
commit
d54c00814b
122
tests/grafts/basic.c
Normal file
122
tests/grafts/basic.c
Normal file
@@ -0,0 +1,122 @@
|
||||
#include "clar_libgit2.h"
|
||||
|
||||
#include "futils.h"
|
||||
#include "graft.h"
|
||||
|
||||
static git_repository *g_repo;
|
||||
|
||||
void test_grafts_basic__initialize(void)
|
||||
{
|
||||
g_repo = cl_git_sandbox_init("grafted.git");
|
||||
}
|
||||
|
||||
void test_grafts_basic__cleanup(void)
|
||||
{
|
||||
cl_git_sandbox_cleanup();
|
||||
}
|
||||
|
||||
void test_grafts_basic__graft_add(void)
|
||||
{
|
||||
git_oid oid_src, *oid1;
|
||||
git_commit_graft *graft;
|
||||
git_graftmap *grafts;
|
||||
git_array_oid_t parents = GIT_ARRAY_INIT;
|
||||
|
||||
cl_git_pass(git_oidmap_new(&grafts));
|
||||
|
||||
cl_assert(oid1 = git_array_alloc(parents));
|
||||
cl_git_pass(git_oid_fromstr(&oid_src, "2f3053cbff8a4ca2f0666de364ddb734a28a31a9"));
|
||||
git_oid_cpy(oid1, &oid_src);
|
||||
|
||||
git_oid_fromstr(&oid_src, "f503807ffa920e407a600cfaee96b7152259acc7");
|
||||
cl_git_pass(git__graft_register(grafts, &oid_src, parents));
|
||||
git_array_clear(parents);
|
||||
|
||||
cl_assert_equal_i(1, git_oidmap_size(grafts));
|
||||
cl_git_pass(git__graft_for_oid(&graft, grafts, &oid_src));
|
||||
cl_assert_equal_s("f503807ffa920e407a600cfaee96b7152259acc7", git_oid_tostr_s(&graft->oid));
|
||||
cl_assert_equal_i(1, git_array_size(graft->parents));
|
||||
cl_assert_equal_s("2f3053cbff8a4ca2f0666de364ddb734a28a31a9", git_oid_tostr_s(git_array_get(graft->parents, 0)));
|
||||
|
||||
git__graft_clear(grafts);
|
||||
git_oidmap_free(grafts);
|
||||
}
|
||||
|
||||
void test_grafts_basic__grafted_revwalk(void)
|
||||
{
|
||||
git_revwalk *w;
|
||||
git_oid oids[10];
|
||||
size_t i = 0;
|
||||
git_commit *commit;
|
||||
|
||||
cl_git_pass(git_revwalk_new(&w, g_repo));
|
||||
cl_git_pass(git_revwalk_push_ref(w, "refs/heads/branch"));
|
||||
|
||||
cl_git_pass(git_revwalk_next(&oids[i++], w));
|
||||
cl_assert_equal_s(git_oid_tostr_s(&oids[0]), "8a00e91619098618be97c0d2ceabb05a2c58edd9");
|
||||
cl_git_pass(git_revwalk_next(&oids[i++], w));
|
||||
cl_assert_equal_s(git_oid_tostr_s(&oids[1]), "f503807ffa920e407a600cfaee96b7152259acc7");
|
||||
cl_git_pass(git_revwalk_next(&oids[i++], w));
|
||||
cl_assert_equal_s(git_oid_tostr_s(&oids[2]), "2f3053cbff8a4ca2f0666de364ddb734a28a31a9");
|
||||
|
||||
cl_git_fail_with(GIT_ITEROVER, git_revwalk_next(&oids[i++], w));
|
||||
|
||||
cl_git_pass(git_commit_lookup(&commit, g_repo, &oids[0]));
|
||||
|
||||
cl_assert_equal_i(1, git_commit_parentcount(commit));
|
||||
|
||||
git_commit_free(commit);
|
||||
git_revwalk_free(w);
|
||||
}
|
||||
|
||||
void test_grafts_basic__grafted_objects(void)
|
||||
{
|
||||
git_oid oid;
|
||||
git_commit *commit;
|
||||
|
||||
cl_git_pass(git_oid_fromstr(&oid, "f503807ffa920e407a600cfaee96b7152259acc7"));
|
||||
cl_git_pass(git_commit_lookup(&commit, g_repo, &oid));
|
||||
cl_assert_equal_i(1, git_commit_parentcount(commit));
|
||||
git_commit_free(commit);
|
||||
|
||||
cl_git_pass(git_oid_fromstr(&oid, "0512adebd3782157f0d5c9b22b043f87b4aaff9e"));
|
||||
cl_git_pass(git_commit_lookup(&commit, g_repo, &oid));
|
||||
cl_assert_equal_i(1, git_commit_parentcount(commit));
|
||||
git_commit_free(commit);
|
||||
|
||||
cl_git_pass(git_oid_fromstr(&oid, "66cc22a015f6ca75b34c82d28f78ba663876bade"));
|
||||
cl_git_pass(git_commit_lookup(&commit, g_repo, &oid));
|
||||
cl_assert_equal_i(4, git_commit_parentcount(commit));
|
||||
git_commit_free(commit);
|
||||
}
|
||||
|
||||
void test_grafts_basic__grafted_merge_revwalk(void)
|
||||
{
|
||||
git_revwalk *w;
|
||||
git_oid oids[10];
|
||||
size_t i = 0;
|
||||
|
||||
cl_git_pass(git_revwalk_new(&w, g_repo));
|
||||
cl_git_pass(git_revwalk_push_ref(w, "refs/heads/bottom"));
|
||||
|
||||
cl_git_pass(git_revwalk_next(&oids[i++], w));
|
||||
cl_assert_equal_s(git_oid_tostr_s(&oids[i - 1]), "66cc22a015f6ca75b34c82d28f78ba663876bade");
|
||||
cl_git_pass(git_revwalk_next(&oids[i++], w));
|
||||
cl_assert_equal_s(git_oid_tostr_s(&oids[i - 1]), "e414f42f4e6bc6934563a2349a8600f0ab68618e");
|
||||
cl_git_pass(git_revwalk_next(&oids[i++], w));
|
||||
cl_assert_equal_s(git_oid_tostr_s(&oids[i - 1]), "8a00e91619098618be97c0d2ceabb05a2c58edd9");
|
||||
cl_git_pass(git_revwalk_next(&oids[i++], w));
|
||||
cl_assert_equal_s(git_oid_tostr_s(&oids[i - 1]), "1c18e80a276611bb9b146590616bbc5aebdf2945");
|
||||
cl_git_pass(git_revwalk_next(&oids[i++], w));
|
||||
cl_assert_equal_s(git_oid_tostr_s(&oids[i - 1]), "d7224d49d6d5aff6ade596ed74f4bcd4f77b29e2");
|
||||
cl_git_pass(git_revwalk_next(&oids[i++], w));
|
||||
cl_assert_equal_s(git_oid_tostr_s(&oids[i - 1]), "0512adebd3782157f0d5c9b22b043f87b4aaff9e");
|
||||
cl_git_pass(git_revwalk_next(&oids[i++], w));
|
||||
cl_assert_equal_s(git_oid_tostr_s(&oids[i - 1]), "f503807ffa920e407a600cfaee96b7152259acc7");
|
||||
cl_git_pass(git_revwalk_next(&oids[i++], w));
|
||||
cl_assert_equal_s(git_oid_tostr_s(&oids[i - 1]), "2f3053cbff8a4ca2f0666de364ddb734a28a31a9");
|
||||
|
||||
cl_git_fail_with(GIT_ITEROVER, git_revwalk_next(&oids[i++], w));
|
||||
|
||||
git_revwalk_free(w);
|
||||
}
|
||||
130
tests/grafts/shallow.c
Normal file
130
tests/grafts/shallow.c
Normal file
@@ -0,0 +1,130 @@
|
||||
#include "clar_libgit2.h"
|
||||
#include "futils.h"
|
||||
|
||||
static git_repository *g_repo;
|
||||
static git_oid g_shallow_oid;
|
||||
|
||||
void test_grafts_shallow__initialize(void)
|
||||
{
|
||||
cl_git_pass(git_oid_fromstr(&g_shallow_oid, "be3563ae3f795b2b4353bcce3a527ad0a4f7f644"));
|
||||
}
|
||||
|
||||
void test_grafts_shallow__cleanup(void)
|
||||
{
|
||||
cl_git_sandbox_cleanup();
|
||||
}
|
||||
|
||||
void test_grafts_shallow__no_shallow_file(void)
|
||||
{
|
||||
g_repo = cl_git_sandbox_init("testrepo.git");
|
||||
cl_assert_equal_i(0, git_repository_is_shallow(g_repo));
|
||||
}
|
||||
|
||||
void test_grafts_shallow__empty_shallow_file(void)
|
||||
{
|
||||
g_repo = cl_git_sandbox_init("testrepo.git");
|
||||
cl_git_mkfile("testrepo.git/shallow", "");
|
||||
cl_assert_equal_i(0, git_repository_is_shallow(g_repo));
|
||||
}
|
||||
|
||||
void test_grafts_shallow__shallow_repo(void)
|
||||
{
|
||||
g_repo = cl_git_sandbox_init("shallow.git");
|
||||
cl_assert_equal_i(1, git_repository_is_shallow(g_repo));
|
||||
}
|
||||
|
||||
void test_grafts_shallow__clears_errors(void)
|
||||
{
|
||||
g_repo = cl_git_sandbox_init("testrepo.git");
|
||||
cl_assert_equal_i(0, git_repository_is_shallow(g_repo));
|
||||
cl_assert_equal_p(NULL, git_error_last());
|
||||
}
|
||||
|
||||
void test_grafts_shallow__shallow_oids(void)
|
||||
{
|
||||
git_oidarray oids, oids2;
|
||||
g_repo = cl_git_sandbox_init("shallow.git");
|
||||
|
||||
cl_git_pass(git_repository_shallow_roots(&oids, g_repo));
|
||||
cl_assert_equal_i(1, oids.count);
|
||||
cl_assert_equal_oid(&g_shallow_oid, &oids.ids[0]);
|
||||
|
||||
cl_git_pass(git_repository_shallow_roots(&oids2, g_repo));
|
||||
cl_assert_equal_p(oids.ids, oids2.ids);
|
||||
}
|
||||
|
||||
void test_grafts_shallow__cache_clearing(void)
|
||||
{
|
||||
git_oidarray oids, oids2;
|
||||
git_oid tmp_oid;
|
||||
|
||||
git_oid_fromstr(&tmp_oid, "0000000000000000000000000000000000000000");
|
||||
g_repo = cl_git_sandbox_init("shallow.git");
|
||||
|
||||
cl_git_pass(git_repository_shallow_roots(&oids, g_repo));
|
||||
cl_assert_equal_i(1, oids.count);
|
||||
cl_assert_equal_oid(&g_shallow_oid, &oids.ids[0]);
|
||||
|
||||
cl_git_mkfile("shallow.git/shallow",
|
||||
"be3563ae3f795b2b4353bcce3a527ad0a4f7f644\n"
|
||||
"0000000000000000000000000000000000000000\n"
|
||||
);
|
||||
|
||||
cl_git_pass(git_repository_shallow_roots(&oids2, g_repo));
|
||||
cl_assert_equal_i(2, oids2.count);
|
||||
cl_assert_equal_oid(&g_shallow_oid, &oids2.ids[0]);
|
||||
cl_assert_equal_oid(&tmp_oid, &oids2.ids[1]);
|
||||
|
||||
cl_git_pass(p_unlink("shallow.git/shallow"));
|
||||
cl_git_pass(git_repository_shallow_roots(&oids, g_repo));
|
||||
cl_assert_equal_i(0, oids.count);
|
||||
git_oidarray_free(&oids);
|
||||
}
|
||||
|
||||
void test_grafts_shallow__errors_on_borked(void)
|
||||
{
|
||||
git_oidarray oids;
|
||||
|
||||
g_repo = cl_git_sandbox_init("shallow.git");
|
||||
|
||||
cl_git_mkfile("shallow.git/shallow", "lolno");
|
||||
|
||||
cl_git_fail_with(-1, git_repository_shallow_roots(&oids, g_repo));
|
||||
|
||||
cl_git_mkfile("shallow.git/shallow", "lolno\n");
|
||||
|
||||
cl_git_fail_with(-1, git_repository_shallow_roots(&oids, g_repo));
|
||||
}
|
||||
|
||||
void test_grafts_shallow__revwalk_behavior(void)
|
||||
{
|
||||
git_revwalk *w;
|
||||
git_oid oid_1, oid_2, oid_3;
|
||||
|
||||
g_repo = cl_git_sandbox_init("shallow.git");
|
||||
|
||||
cl_git_pass(git_revwalk_new(&w, g_repo));
|
||||
cl_git_pass(git_revwalk_push_head(w));
|
||||
|
||||
cl_git_pass(git_revwalk_next(&oid_1, w)); // a65fedf39aefe402d3bb6e24df4d4f5fe4547750
|
||||
cl_git_pass(git_revwalk_next(&oid_2, w)); // be3563ae3f795b2b4353bcce3a527ad0a4f7f644
|
||||
cl_git_fail_with(GIT_ITEROVER, git_revwalk_next(&oid_3, w));
|
||||
|
||||
cl_assert_equal_s(git_oid_tostr_s(&oid_1), "a65fedf39aefe402d3bb6e24df4d4f5fe4547750");
|
||||
cl_assert_equal_s(git_oid_tostr_s(&oid_2), "be3563ae3f795b2b4353bcce3a527ad0a4f7f644");
|
||||
|
||||
git_revwalk_free(w);
|
||||
}
|
||||
|
||||
void test_grafts_shallow__grafted_object(void)
|
||||
{
|
||||
git_commit *commit;
|
||||
|
||||
g_repo = cl_git_sandbox_init("shallow.git");
|
||||
|
||||
cl_git_pass(git_commit_lookup(&commit, g_repo, &g_shallow_oid));
|
||||
|
||||
cl_assert_equal_i(0, git_commit_parentcount(commit));
|
||||
|
||||
git_commit_free(commit);
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
#include "clar_libgit2.h"
|
||||
#include "futils.h"
|
||||
|
||||
static git_repository *g_repo;
|
||||
|
||||
void test_repo_shallow__initialize(void)
|
||||
{
|
||||
}
|
||||
|
||||
void test_repo_shallow__cleanup(void)
|
||||
{
|
||||
cl_git_sandbox_cleanup();
|
||||
}
|
||||
|
||||
void test_repo_shallow__no_shallow_file(void)
|
||||
{
|
||||
g_repo = cl_git_sandbox_init("testrepo.git");
|
||||
cl_assert_equal_i(0, git_repository_is_shallow(g_repo));
|
||||
}
|
||||
|
||||
void test_repo_shallow__empty_shallow_file(void)
|
||||
{
|
||||
g_repo = cl_git_sandbox_init("testrepo.git");
|
||||
cl_git_mkfile("testrepo.git/shallow", "");
|
||||
cl_assert_equal_i(0, git_repository_is_shallow(g_repo));
|
||||
}
|
||||
|
||||
void test_repo_shallow__shallow_repo(void)
|
||||
{
|
||||
g_repo = cl_git_sandbox_init("shallow.git");
|
||||
cl_assert_equal_i(1, git_repository_is_shallow(g_repo));
|
||||
}
|
||||
|
||||
void test_repo_shallow__clears_errors(void)
|
||||
{
|
||||
g_repo = cl_git_sandbox_init("testrepo.git");
|
||||
cl_assert_equal_i(0, git_repository_is_shallow(g_repo));
|
||||
cl_assert_equal_p(NULL, git_error_last());
|
||||
}
|
||||
1
tests/resources/grafted.git/HEAD
Normal file
1
tests/resources/grafted.git/HEAD
Normal file
@@ -0,0 +1 @@
|
||||
ref: refs/heads/master
|
||||
6
tests/resources/grafted.git/config
Normal file
6
tests/resources/grafted.git/config
Normal file
@@ -0,0 +1,6 @@
|
||||
[core]
|
||||
repositoryformatversion = 0
|
||||
filemode = true
|
||||
bare = true
|
||||
ignorecase = true
|
||||
precomposeunicode = true
|
||||
3
tests/resources/grafted.git/info/grafts
Normal file
3
tests/resources/grafted.git/info/grafts
Normal file
@@ -0,0 +1,3 @@
|
||||
f503807ffa920e407a600cfaee96b7152259acc7 2f3053cbff8a4ca2f0666de364ddb734a28a31a9
|
||||
0512adebd3782157f0d5c9b22b043f87b4aaff9e 2f3053cbff8a4ca2f0666de364ddb734a28a31a9
|
||||
66cc22a015f6ca75b34c82d28f78ba663876bade e414f42f4e6bc6934563a2349a8600f0ab68618e 8a00e91619098618be97c0d2ceabb05a2c58edd9 1c18e80a276611bb9b146590616bbc5aebdf2945 2f3053cbff8a4ca2f0666de364ddb734a28a31a9
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
xœ¥ŽM
|
||||
Â0F]ç³Ê$™üDÜx=Á4N´Ð4ÒFϯÔ#¸úàñx|©–260dvmñap1°Ñaò}ö¹·N‹hL!E&}ã”BTO^dn ¤)“É$~øê–œ·l,õ=bF|ô:ŠâW{ÔÎm”y¸rYë‡uÛN~øt/<N]ªåÚ¡EHkØ£ATi»Ú䯈ºH©o<C2A9><N¢>Ñ«M,
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
x<EFBFBD>¥<EFBFBD>A
|
||||
Β0E]η³Κt’4Dtα <Α$™Τ@“Jο―Τ#Έϊπού°”’<1B>Ρ‡¶<E280A1>@B§5ϊ@b$Ρ'<27>Ψ[΄iƒχ±g&V/^¥6Hυ ]J<<12>AΗbH,2ήυ–Θ<E28093>‚SόnΟe…{ΛR«ΐƒΛ¶T8oϋvςΓΧ©p<C2A9>»°”|›Σdΰ<64>„¨Β~µΙ_u‹1Χ R<>Ε¨ί<>NC
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
x<EFBFBD>¥<EFBFBD>A
|
||||
Β0E]η³Κd<CE9A><64>Dάx=Α$™h΅I¤<49><C2A4>_Gpυΰ/<1E>…<EFBFBD>σΤ€,νΪ"δ%p<>&ι/Ρ1Ϊή<CEAA>Τ“–<E2809C>Ζ€ΆƒqΦ“zπ"¥ZMΕGγ<06>Φ%<25>6<EFBFBD><36>Θco<63>ΰ|Ο<><CE9F>(<28><>ν^8·IJΈr^k<>ΓΊ±“ί|Ίe<CE8A>ζ.Τ|mΡ u„φH<CF86>*lW›ό%QΙυ%<25>¦Y„ZΪ§bUoaRj
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
xśĄŤA
|
||||
Â0E]çłJ&<26>6)şđž ™™Ô@“@ďŻÔ#¸úŹ·xźZ)ąz{ę›D/É‹Mb9PŚ&yyBF&7Ňí—™Q…wµ
=KĎPöVáş;ČOß–ň:P+3 ŐĆŹŤ<>ł6Z+:®»üQwć\HyŁ>zA<7A>
|
||||
1
tests/resources/grafted.git/refs/heads/bottom
Normal file
1
tests/resources/grafted.git/refs/heads/bottom
Normal file
@@ -0,0 +1 @@
|
||||
66cc22a015f6ca75b34c82d28f78ba663876bade
|
||||
1
tests/resources/grafted.git/refs/heads/branch
Normal file
1
tests/resources/grafted.git/refs/heads/branch
Normal file
@@ -0,0 +1 @@
|
||||
8a00e91619098618be97c0d2ceabb05a2c58edd9
|
||||
1
tests/resources/grafted.git/refs/heads/master
Normal file
1
tests/resources/grafted.git/refs/heads/master
Normal file
@@ -0,0 +1 @@
|
||||
2f3053cbff8a4ca2f0666de364ddb734a28a31a9
|
||||
1
tests/resources/grafted.git/refs/heads/top
Normal file
1
tests/resources/grafted.git/refs/heads/top
Normal file
@@ -0,0 +1 @@
|
||||
1c18e80a276611bb9b146590616bbc5aebdf2945
|
||||
Reference in New Issue
Block a user