summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authoryuangli <yuangli@mathworks.com>2022-08-09 19:24:57 +0100
committeryuangli <yuangli@mathworks.com>2022-08-09 19:24:57 +0100
commitdf5eb3239b1419b3f4382d7bcca9a5d85611d7d3 (patch)
treea5d97cf1c8f6b269bae26f48a6176236e749c005 /tests
parent09b3d33d6dba7f4804b478a72dec3258405856c2 (diff)
downloadlibgit2-df5eb3239b1419b3f4382d7bcca9a5d85611d7d3.tar.gz
support fetch unshallow option on shallow repos
Diffstat (limited to 'tests')
-rw-r--r--tests/libgit2/clone/shallow.c41
-rw-r--r--tests/libgit2/transports/smart/shallowarray.c52
2 files changed, 93 insertions, 0 deletions
diff --git a/tests/libgit2/clone/shallow.c b/tests/libgit2/clone/shallow.c
index 7fb056f91..2a88d5d05 100644
--- a/tests/libgit2/clone/shallow.c
+++ b/tests/libgit2/clone/shallow.c
@@ -131,3 +131,44 @@ void test_clone_shallow__clone_depth_five(void)
git_revwalk_free(walk);
git_repository_free(repo);
}
+
+void test_clone_shallow__unshallow(void)
+{
+ git_str path = GIT_STR_INIT;
+ git_repository *repo;
+ git_revwalk *walk;
+ git_clone_options clone_opts = GIT_CLONE_OPTIONS_INIT;
+ git_fetch_options fetch_opts = GIT_FETCH_OPTIONS_INIT;
+ git_remote *origin = NULL;
+ git_oid oid;
+ size_t num_commits = 0;
+ int error = 0;
+
+ clone_opts.fetch_opts.depth = 5;
+ clone_opts.remote_cb = remote_single_branch;
+
+ git_str_joinpath(&path, clar_sandbox_path(), "unshallow");
+ cl_git_pass(git_clone(&repo, "https://github.com/libgit2/TestGitRepository", git_str_cstr(&path), &clone_opts));
+ cl_assert_equal_b(true, git_repository_is_shallow(repo));
+
+ fetch_opts.unshallow = 1;
+ cl_git_pass(git_remote_lookup(&origin, repo, "origin"));
+
+ cl_git_pass(git_remote_fetch(origin, NULL, &fetch_opts, NULL));
+ cl_assert_equal_b(false, git_repository_is_shallow(repo));
+
+ git_revwalk_new(&walk, repo);
+ git_revwalk_push_head(walk);
+
+ while ((error = git_revwalk_next(&oid, walk)) == GIT_OK) {
+ num_commits++;
+ }
+
+ cl_assert_equal_i(num_commits, 21);
+ cl_assert_equal_i(error, GIT_ITEROVER);
+
+ git_remote_free(origin);
+ git_str_dispose(&path);
+ git_revwalk_free(walk);
+ git_repository_free(repo);
+}
diff --git a/tests/libgit2/transports/smart/shallowarray.c b/tests/libgit2/transports/smart/shallowarray.c
new file mode 100644
index 000000000..c51e62713
--- /dev/null
+++ b/tests/libgit2/transports/smart/shallowarray.c
@@ -0,0 +1,52 @@
+#include "clar_libgit2.h"
+
+#include "git2/oid.h"
+#include "git2/transport.h"
+
+#include "common.h"
+#include "transports/smart.h"
+#include "oid.h"
+
+#include <assert.h>
+
+#define oid_0 "c070ad8c08840c8116da865b2d65593a6bb9cd2a"
+#define oid_1 "0966a434eb1a025db6b71485ab63a3bfbea520b6"
+#define oid_2 "83834a7afdaa1a1260568567f6ad90020389f664"
+
+void test_transports_smart_shallowarray__add_and_remove_oid_from_shallowarray(void)
+{
+ git_oid oid_0_obj, oid_1_obj, oid_2_obj;
+ git_shallowarray *shallow_roots = git__malloc(sizeof(git_shallowarray));
+ git_array_init(shallow_roots->array);
+
+ git_oid_fromstr(&oid_0_obj, oid_0);
+ git_oid_fromstr(&oid_1_obj, oid_1);
+ git_oid_fromstr(&oid_2_obj, oid_2);
+
+ git_shallowarray_add(shallow_roots, &oid_0_obj);
+ git_shallowarray_add(shallow_roots, &oid_1_obj);
+ git_shallowarray_add(shallow_roots, &oid_2_obj);
+
+ cl_assert_equal_i(3, shallow_roots->array.size);
+ cl_assert_equal_s("c070ad8c08840c8116da865b2d65593a6bb9cd2a", git_oid_tostr_s(&shallow_roots->array.ptr[0]));
+ cl_assert_equal_s("0966a434eb1a025db6b71485ab63a3bfbea520b6", git_oid_tostr_s(&shallow_roots->array.ptr[1]));
+ cl_assert_equal_s("83834a7afdaa1a1260568567f6ad90020389f664", git_oid_tostr_s(&shallow_roots->array.ptr[2]));
+
+ git_shallowarray_remove(shallow_roots, &oid_2_obj);
+
+ cl_assert_equal_i(2, shallow_roots->array.size);
+ cl_assert_equal_s("c070ad8c08840c8116da865b2d65593a6bb9cd2a", git_oid_tostr_s(&shallow_roots->array.ptr[0]));
+ cl_assert_equal_s("0966a434eb1a025db6b71485ab63a3bfbea520b6", git_oid_tostr_s(&shallow_roots->array.ptr[1]));
+
+ git_shallowarray_remove(shallow_roots, &oid_1_obj);
+
+ cl_assert_equal_i(1, shallow_roots->array.size);
+ cl_assert_equal_s("c070ad8c08840c8116da865b2d65593a6bb9cd2a", git_oid_tostr_s(&shallow_roots->array.ptr[0]));
+
+ git_shallowarray_remove(shallow_roots, &oid_0_obj);
+
+ cl_assert_equal_i(0, shallow_roots->array.size);
+
+ git_array_clear(shallow_roots->array);
+ git__free(shallow_roots);
+}