summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authoryuangli <yuangli@mathworks.com>2022-07-29 13:19:33 +0100
committeryuangli <yuangli@mathworks.com>2022-07-29 13:19:33 +0100
commit68bbcefd35a8b3a864e9ed7598b19fefc5f74055 (patch)
treeeff903d5071fb79348e70fa62a9fcdb745b47938 /tests
parenta491917f8e37108b6180590736d833095626b1ec (diff)
parentf19ffc8a6d88432146a87cd3fb2ca21528478be4 (diff)
downloadlibgit2-68bbcefd35a8b3a864e9ed7598b19fefc5f74055.tar.gz
Merge branch 'transportPR' into shallow-clone-network
Diffstat (limited to 'tests')
-rw-r--r--tests/clone/shallow.c105
1 files changed, 105 insertions, 0 deletions
diff --git a/tests/clone/shallow.c b/tests/clone/shallow.c
new file mode 100644
index 000000000..01852dfed
--- /dev/null
+++ b/tests/clone/shallow.c
@@ -0,0 +1,105 @@
+#include "clar_libgit2.h"
+#include "futils.h"
+#include "repository.h"
+
+void test_clone_shallow__initialize(void)
+{
+ cl_git_pass(git_libgit2_opts(GIT_OPT_ENABLE_SHALLOW, 1));
+}
+
+void test_clone_shallow__cleanup(void)
+{
+ git_libgit2_opts(GIT_OPT_ENABLE_SHALLOW, 0);
+ cl_git_sandbox_cleanup();
+}
+
+static int remote_single_branch(git_remote **out, git_repository *repo, const char *name, const char *url, void *payload)
+{
+ GIT_UNUSED(payload);
+
+ cl_git_pass(git_remote_create_with_fetchspec(out, repo, name, url, "+refs/heads/master:refs/remotes/origin/master"));
+
+ return 0;
+}
+
+void test_clone_shallow__clone_depth_one(void)
+{
+ git_buf path = GIT_BUF_INIT;
+ git_repository *repo;
+ git_revwalk *walk;
+ git_clone_options clone_opts = GIT_CLONE_OPTIONS_INIT;
+ git_oid oid;
+ git_oidarray roots;
+ size_t num_commits = 0;
+ int error = 0;
+
+ clone_opts.fetch_opts.depth = 1;
+ clone_opts.remote_cb = remote_single_branch;
+
+ git_buf_joinpath(&path, clar_sandbox_path(), "shallowclone_1");
+
+ cl_git_pass(git_clone(&repo, "https://github.com/libgit2/TestGitRepository", git_buf_cstr(&path), &clone_opts));
+
+ cl_assert_equal_b(true, git_repository_is_shallow(repo));
+
+ cl_git_pass(git_repository_shallow_roots(&roots, repo));
+ cl_assert_equal_i(1, roots.count);
+ cl_assert_equal_s("49322bb17d3acc9146f98c97d078513228bbf3c0", git_oid_tostr_s(&roots.ids[0]));
+
+ 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, 1);
+ cl_assert_equal_i(error, GIT_ITEROVER);
+
+ git_buf_dispose(&path);
+ git_revwalk_free(walk);
+ git_repository_free(repo);
+}
+
+void test_clone_shallow__clone_depth_five(void)
+{
+ git_buf path = GIT_BUF_INIT;
+ git_repository *repo;
+ git_revwalk *walk;
+ git_clone_options clone_opts = GIT_CLONE_OPTIONS_INIT;
+ git_oid oid;
+ git_oidarray roots;
+ size_t num_commits = 0;
+ int error = 0;
+
+ clone_opts.fetch_opts.depth = 5;
+ clone_opts.remote_cb = remote_single_branch;
+
+ git_buf_joinpath(&path, clar_sandbox_path(), "shallowclone_5");
+
+ cl_git_pass(git_clone(&repo, "https://github.com/libgit2/TestGitRepository", git_buf_cstr(&path), &clone_opts));
+
+ cl_assert_equal_b(true, git_repository_is_shallow(repo));
+
+ cl_git_pass(git_repository_shallow_roots(&roots, repo));
+ cl_assert_equal_i(3, roots.count);
+ cl_assert_equal_s("c070ad8c08840c8116da865b2d65593a6bb9cd2a", git_oid_tostr_s(&roots.ids[0]));
+ cl_assert_equal_s("0966a434eb1a025db6b71485ab63a3bfbea520b6", git_oid_tostr_s(&roots.ids[1]));
+ cl_assert_equal_s("83834a7afdaa1a1260568567f6ad90020389f664", git_oid_tostr_s(&roots.ids[2]));
+
+ 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, 13);
+ cl_assert_equal_i(error, GIT_ITEROVER);
+
+ git_buf_dispose(&path);
+ git_revwalk_free(walk);
+ git_repository_free(repo);
+}