diff options
| author | Edward Thomson <ethomson@edwardthomson.com> | 2018-11-04 11:26:42 +0000 |
|---|---|---|
| committer | Edward Thomson <ethomson@edwardthomson.com> | 2018-11-05 15:53:59 +0000 |
| commit | 12f9ac17a63986f64799098bfd3b18c91b9c08a1 (patch) | |
| tree | 9e07f6e28cc2e1c3717d8ad66a543781c258839c /tests/apply | |
| parent | b73a42f6aabe3f00ac01d9843c053c2393573d2b (diff) | |
| download | libgit2-12f9ac17a63986f64799098bfd3b18c91b9c08a1.tar.gz | |
apply: validate unchanged mode when applying both
When applying to both the index and the working directory, ensure that
the working directory's mode matches the index's mode. It's not
sufficient to look only at the hashed object id to determine that the
file is unchanged, git also takes the mode into account.
Diffstat (limited to 'tests/apply')
| -rw-r--r-- | tests/apply/both.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/tests/apply/both.c b/tests/apply/both.c index e8d13c763..abbabbdcb 100644 --- a/tests/apply/both.c +++ b/tests/apply/both.c @@ -204,6 +204,23 @@ void test_apply_both__index_must_match_workdir(void) git_diff_free(diff); } +void test_apply_both__index_mode_must_match_workdir(void) +{ + git_diff *diff; + + if (!cl_is_chmod_supported()) + clar__skip(); + + /* Set a file in the working directory executable. */ + cl_must_pass(p_chmod("merge-recursive/asparagus.txt", 0755)); + + cl_git_pass(git_diff_from_buffer(&diff, DIFF_MODIFY_TWO_FILES, + strlen(DIFF_MODIFY_TWO_FILES))); + cl_git_fail_with(GIT_EAPPLYFAIL, git_apply(repo, diff, GIT_APPLY_LOCATION_BOTH, NULL)); + + git_diff_free(diff); +} + void test_apply_both__application_failure_leaves_workdir_unmodified(void) { git_diff *diff; |
