diff options
| author | Edward Thomson <ethomson@edwardthomson.com> | 2018-11-04 11:47:46 +0000 |
|---|---|---|
| committer | Edward Thomson <ethomson@edwardthomson.com> | 2018-11-05 15:53:59 +0000 |
| commit | 6fecf4d127bb6dd4257885ff6c71c12f92e66b94 (patch) | |
| tree | 1f98a19b5e2a57a6cc27e5511bfcf385a433c362 /tests/apply | |
| parent | 12f9ac17a63986f64799098bfd3b18c91b9c08a1 (diff) | |
| download | libgit2-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.h | 6 | ||||
| -rw-r--r-- | tests/apply/both.c | 25 |
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; |
