summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@microsoft.com>2015-11-04 16:16:51 -0500
committerEdward Thomson <ethomson@edwardthomson.com>2015-11-04 16:53:41 -0500
commit790012ce782e2b97e90e52ae9fdaff098b56b999 (patch)
tree1210a2cf045a0f74fc31b63b4e0590a395110c28
parent610e553f5b43b4741b5c74d77cc1e07c88749bfc (diff)
downloadlibgit2-790012ce782e2b97e90e52ae9fdaff098b56b999.tar.gz
submodule: test updating a submodule w/ a path
Test that `git_submodule_update` can handle a submodule that is freshly cloned and has a path differing from its name.
-rw-r--r--tests/resources/submodule_with_path/.gitmodules3
-rw-r--r--tests/resources/submodule_with_path/.gitted/HEAD1
-rw-r--r--tests/resources/submodule_with_path/.gitted/config8
-rw-r--r--tests/resources/submodule_with_path/.gitted/indexbin0 -> 253 bytes
-rw-r--r--tests/resources/submodule_with_path/.gitted/objects/18/372280a56a54340fa600aa91315065c6c4c693bin0 -> 85 bytes
-rw-r--r--tests/resources/submodule_with_path/.gitted/objects/36/683131578275f6a8fd1c539e0d5da0d8adff26bin0 -> 63 bytes
-rw-r--r--tests/resources/submodule_with_path/.gitted/objects/89/ca686bb21bfb75dda99a02313831a0c418f921bin0 -> 161 bytes
-rw-r--r--tests/resources/submodule_with_path/.gitted/objects/b1/620ef2628d10416a84d19c783e33dc4556c9c3bin0 -> 86 bytes
-rw-r--r--tests/resources/submodule_with_path/.gitted/objects/ba/34c47dc9d3d0b1bb335b45c9d26ba1f0fc90c7bin0 -> 68 bytes
-rw-r--r--tests/resources/submodule_with_path/.gitted/objects/c8/4bf57ba2254dba216ab5c6eb1a19fe8bd0e0d6bin0 -> 127 bytes
-rw-r--r--tests/resources/submodule_with_path/.gitted/objects/d5/45fc6b40ec9e67332b6a1d2dedcbdb1bffeb6bbin0 -> 51 bytes
-rw-r--r--tests/resources/submodule_with_path/.gitted/refs/heads/master1
-rw-r--r--tests/submodule/submodule_helpers.c15
-rw-r--r--tests/submodule/submodule_helpers.h1
-rw-r--r--tests/submodule/update.c48
15 files changed, 77 insertions, 0 deletions
diff --git a/tests/resources/submodule_with_path/.gitmodules b/tests/resources/submodule_with_path/.gitmodules
new file mode 100644
index 000000000..ba34c47dc
--- /dev/null
+++ b/tests/resources/submodule_with_path/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "testrepo"]
+ path = lib/testrepo
+ url = ../testrepo.git
diff --git a/tests/resources/submodule_with_path/.gitted/HEAD b/tests/resources/submodule_with_path/.gitted/HEAD
new file mode 100644
index 000000000..cb089cd89
--- /dev/null
+++ b/tests/resources/submodule_with_path/.gitted/HEAD
@@ -0,0 +1 @@
+ref: refs/heads/master
diff --git a/tests/resources/submodule_with_path/.gitted/config b/tests/resources/submodule_with_path/.gitted/config
new file mode 100644
index 000000000..78387c50b
--- /dev/null
+++ b/tests/resources/submodule_with_path/.gitted/config
@@ -0,0 +1,8 @@
+[core]
+ repositoryformatversion = 0
+ filemode = false
+ bare = false
+ logallrefupdates = true
+ symlinks = false
+ ignorecase = true
+ hideDotFiles = dotGitOnly
diff --git a/tests/resources/submodule_with_path/.gitted/index b/tests/resources/submodule_with_path/.gitted/index
new file mode 100644
index 000000000..a740b4b91
--- /dev/null
+++ b/tests/resources/submodule_with_path/.gitted/index
Binary files differ
diff --git a/tests/resources/submodule_with_path/.gitted/objects/18/372280a56a54340fa600aa91315065c6c4c693 b/tests/resources/submodule_with_path/.gitted/objects/18/372280a56a54340fa600aa91315065c6c4c693
new file mode 100644
index 000000000..d9b4313e1
--- /dev/null
+++ b/tests/resources/submodule_with_path/.gitted/objects/18/372280a56a54340fa600aa91315065c6c4c693
Binary files differ
diff --git a/tests/resources/submodule_with_path/.gitted/objects/36/683131578275f6a8fd1c539e0d5da0d8adff26 b/tests/resources/submodule_with_path/.gitted/objects/36/683131578275f6a8fd1c539e0d5da0d8adff26
new file mode 100644
index 000000000..366c161c1
--- /dev/null
+++ b/tests/resources/submodule_with_path/.gitted/objects/36/683131578275f6a8fd1c539e0d5da0d8adff26
Binary files differ
diff --git a/tests/resources/submodule_with_path/.gitted/objects/89/ca686bb21bfb75dda99a02313831a0c418f921 b/tests/resources/submodule_with_path/.gitted/objects/89/ca686bb21bfb75dda99a02313831a0c418f921
new file mode 100644
index 000000000..7c1af6645
--- /dev/null
+++ b/tests/resources/submodule_with_path/.gitted/objects/89/ca686bb21bfb75dda99a02313831a0c418f921
Binary files differ
diff --git a/tests/resources/submodule_with_path/.gitted/objects/b1/620ef2628d10416a84d19c783e33dc4556c9c3 b/tests/resources/submodule_with_path/.gitted/objects/b1/620ef2628d10416a84d19c783e33dc4556c9c3
new file mode 100644
index 000000000..447558259
--- /dev/null
+++ b/tests/resources/submodule_with_path/.gitted/objects/b1/620ef2628d10416a84d19c783e33dc4556c9c3
Binary files differ
diff --git a/tests/resources/submodule_with_path/.gitted/objects/ba/34c47dc9d3d0b1bb335b45c9d26ba1f0fc90c7 b/tests/resources/submodule_with_path/.gitted/objects/ba/34c47dc9d3d0b1bb335b45c9d26ba1f0fc90c7
new file mode 100644
index 000000000..3069f151f
--- /dev/null
+++ b/tests/resources/submodule_with_path/.gitted/objects/ba/34c47dc9d3d0b1bb335b45c9d26ba1f0fc90c7
Binary files differ
diff --git a/tests/resources/submodule_with_path/.gitted/objects/c8/4bf57ba2254dba216ab5c6eb1a19fe8bd0e0d6 b/tests/resources/submodule_with_path/.gitted/objects/c8/4bf57ba2254dba216ab5c6eb1a19fe8bd0e0d6
new file mode 100644
index 000000000..9f664569c
--- /dev/null
+++ b/tests/resources/submodule_with_path/.gitted/objects/c8/4bf57ba2254dba216ab5c6eb1a19fe8bd0e0d6
Binary files differ
diff --git a/tests/resources/submodule_with_path/.gitted/objects/d5/45fc6b40ec9e67332b6a1d2dedcbdb1bffeb6b b/tests/resources/submodule_with_path/.gitted/objects/d5/45fc6b40ec9e67332b6a1d2dedcbdb1bffeb6b
new file mode 100644
index 000000000..56a844953
--- /dev/null
+++ b/tests/resources/submodule_with_path/.gitted/objects/d5/45fc6b40ec9e67332b6a1d2dedcbdb1bffeb6b
Binary files differ
diff --git a/tests/resources/submodule_with_path/.gitted/refs/heads/master b/tests/resources/submodule_with_path/.gitted/refs/heads/master
new file mode 100644
index 000000000..4b5a5a21d
--- /dev/null
+++ b/tests/resources/submodule_with_path/.gitted/refs/heads/master
@@ -0,0 +1 @@
+89ca686bb21bfb75dda99a02313831a0c418f921
diff --git a/tests/submodule/submodule_helpers.c b/tests/submodule/submodule_helpers.c
index cde69d92d..4ff4b4da7 100644
--- a/tests/submodule/submodule_helpers.c
+++ b/tests/submodule/submodule_helpers.c
@@ -156,6 +156,21 @@ git_repository *setup_fixture_submodule_simple(void)
return repo;
}
+git_repository *setup_fixture_submodule_with_path(void)
+{
+ git_repository *repo = cl_git_sandbox_init("submodule_with_path");
+
+ cl_fixture_sandbox("testrepo.git");
+ p_mkdir("submodule_with_path/lib", 0777);
+ p_mkdir("submodule_with_path/lib/testrepo", 0777);
+
+ cl_set_cleanup(cleanup_fixture_submodules, "testrepo.git");
+
+ cl_git_pass(git_repository_reinit_filesystem(repo, 1));
+
+ return repo;
+}
+
void assert__submodule_exists(
git_repository *repo, const char *name,
const char *msg, const char *file, int line)
diff --git a/tests/submodule/submodule_helpers.h b/tests/submodule/submodule_helpers.h
index 1191ab35b..42b14a7bc 100644
--- a/tests/submodule/submodule_helpers.h
+++ b/tests/submodule/submodule_helpers.h
@@ -5,6 +5,7 @@ extern git_repository *setup_fixture_submodules(void);
extern git_repository *setup_fixture_submod2(void);
extern git_repository *setup_fixture_submodule_simple(void);
extern git_repository *setup_fixture_super(void);
+extern git_repository *setup_fixture_submodule_with_path(void);
extern unsigned int get_submodule_status(git_repository *, const char *);
diff --git a/tests/submodule/update.c b/tests/submodule/update.c
index 40d24d0a7..cbd519d81 100644
--- a/tests/submodule/update.c
+++ b/tests/submodule/update.c
@@ -131,6 +131,53 @@ void test_submodule_update__update_submodule(void)
git_submodule_free(sm);
}
+void test_submodule_update__update_submodule_with_path(void)
+{
+ git_submodule *sm;
+ git_submodule_update_options update_options = GIT_SUBMODULE_UPDATE_OPTIONS_INIT;
+ unsigned int submodule_status = 0;
+ struct update_submodule_cb_payload update_payload = { 0 };
+
+ g_repo = setup_fixture_submodule_with_path();
+
+ update_options.checkout_opts.progress_cb = checkout_progress_cb;
+ update_options.checkout_opts.progress_payload = &update_payload;
+
+ update_options.fetch_opts.callbacks.update_tips = update_tips;
+ update_options.fetch_opts.callbacks.payload = &update_payload;
+
+ /* get the submodule */
+ cl_git_pass(git_submodule_lookup(&sm, g_repo, "testrepo"));
+
+ /* verify the initial state of the submodule */
+ cl_git_pass(git_submodule_status(&submodule_status, g_repo, "testrepo", GIT_SUBMODULE_IGNORE_UNSPECIFIED));
+ cl_assert_equal_i(submodule_status, GIT_SUBMODULE_STATUS_IN_HEAD |
+ GIT_SUBMODULE_STATUS_IN_INDEX |
+ GIT_SUBMODULE_STATUS_IN_CONFIG |
+ GIT_SUBMODULE_STATUS_WD_UNINITIALIZED);
+
+ /* initialize and update the submodule */
+ cl_git_pass(git_submodule_init(sm, 0));
+ cl_git_pass(git_submodule_update(sm, 0, &update_options));
+
+ /* verify state */
+ cl_git_pass(git_submodule_status(&submodule_status, g_repo, "testrepo", GIT_SUBMODULE_IGNORE_UNSPECIFIED));
+ cl_assert_equal_i(submodule_status, GIT_SUBMODULE_STATUS_IN_HEAD |
+ GIT_SUBMODULE_STATUS_IN_INDEX |
+ GIT_SUBMODULE_STATUS_IN_CONFIG |
+ GIT_SUBMODULE_STATUS_IN_WD);
+
+ cl_assert(git_oid_streq(git_submodule_head_id(sm), "a65fedf39aefe402d3bb6e24df4d4f5fe4547750") == 0);
+ cl_assert(git_oid_streq(git_submodule_wd_id(sm), "a65fedf39aefe402d3bb6e24df4d4f5fe4547750") == 0);
+ cl_assert(git_oid_streq(git_submodule_index_id(sm), "a65fedf39aefe402d3bb6e24df4d4f5fe4547750") == 0);
+
+ /* verify that the expected callbacks have been called. */
+ cl_assert_equal_i(1, update_payload.checkout_progress_called);
+ cl_assert_equal_i(1, update_payload.update_tips_called);
+
+ git_submodule_free(sm);
+}
+
void test_submodule_update__update_and_init_submodule(void)
{
git_submodule *sm;
@@ -390,3 +437,4 @@ void test_submodule_update__can_force_update(void)
git_object_free(branch_commit);
git_reference_free(branch_reference);
}
+