summaryrefslogtreecommitdiff
path: root/tests/apply
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2018-11-04 11:47:46 +0000
committerEdward Thomson <ethomson@edwardthomson.com>2018-11-05 15:53:59 +0000
commit6fecf4d127bb6dd4257885ff6c71c12f92e66b94 (patch)
tree1f98a19b5e2a57a6cc27e5511bfcf385a433c362 /tests/apply
parent12f9ac17a63986f64799098bfd3b18c91b9c08a1 (diff)
downloadlibgit2-6fecf4d127bb6dd4257885ff6c71c12f92e66b94.tar.gz
apply: handle exact renames
Deltas containing exact renames are special; they simple indicate that a file was renamed without providing additional metadata (like the filemode). Teach the reader to provide the file mode and use the preimage's filemode in the case that the delta does not provide one.)
Diffstat (limited to 'tests/apply')
-rw-r--r--tests/apply/apply_helpers.h6
-rw-r--r--tests/apply/both.c25
2 files changed, 31 insertions, 0 deletions
diff --git a/tests/apply/apply_helpers.h b/tests/apply/apply_helpers.h
index 1b40cd393..a3f7f1812 100644
--- a/tests/apply/apply_helpers.h
+++ b/tests/apply/apply_helpers.h
@@ -112,6 +112,12 @@
"+but the shin OR knuckle is the nicest.\n" \
"+Another new line.\n" \
+#define DIFF_RENAME_FILE \
+ "diff --git a/beef.txt b/notbeef.txt\n" \
+ "similarity index 100%\n" \
+ "rename from beef.txt\n" \
+ "rename to notbeef.txt\n"
+
#define DIFF_RENAME_AND_MODIFY_FILE \
"diff --git a/beef.txt b/notbeef.txt\n" \
"similarity index 97%\n" \
diff --git a/tests/apply/both.c b/tests/apply/both.c
index abbabbdcb..15b201698 100644
--- a/tests/apply/both.c
+++ b/tests/apply/both.c
@@ -400,6 +400,31 @@ void test_apply_both__honors_crlf_attributes(void)
git_diff_free(diff);
}
+void test_apply_both__rename(void)
+{
+ git_diff *diff;
+
+ struct merge_index_entry both_expected[] = {
+ { 0100644, "f51658077d85f2264fa179b4d0848268cb3475c3", 0, "asparagus.txt" },
+ { 0100644, "4b7c5650008b2e747fe1809eeb5a1dde0e80850a", 0, "bouilli.txt" },
+ { 0100644, "c4e6cca3ec6ae0148ed231f97257df8c311e015f", 0, "gravy.txt" },
+ { 0100644, "68f6182f4c85d39e1309d97c7e456156dc9c0096", 0, "notbeef.txt" },
+ { 0100644, "68af1fc7407fd9addf1701a87eb1c95c7494c598", 0, "oyster.txt" },
+ { 0100644, "94d2c01087f48213bd157222d54edfefd77c9bba", 0, "veal.txt" },
+ };
+ size_t both_expected_cnt = sizeof(both_expected) /
+ sizeof(struct merge_index_entry);
+
+ cl_git_pass(git_diff_from_buffer(&diff, DIFF_RENAME_FILE,
+ strlen(DIFF_RENAME_FILE)));
+ cl_git_pass(git_apply(repo, diff, GIT_APPLY_LOCATION_BOTH, NULL));
+
+ validate_apply_index(repo, both_expected, both_expected_cnt);
+ validate_apply_workdir(repo, both_expected, both_expected_cnt);
+
+ git_diff_free(diff);
+}
+
void test_apply_both__rename_and_modify(void)
{
git_diff *diff;