summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/diff_patch.c6
-rw-r--r--tests-clar/diff/submodules.c4
2 files changed, 8 insertions, 2 deletions
diff --git a/src/diff_patch.c b/src/diff_patch.c
index 9060d0a24..1b4adac03 100644
--- a/src/diff_patch.c
+++ b/src/diff_patch.c
@@ -10,6 +10,7 @@
#include "diff_driver.h"
#include "diff_patch.h"
#include "diff_xdiff.h"
+#include "fileops.h"
/* cached information about a single span in a diff */
typedef struct diff_patch_line diff_patch_line;
@@ -175,9 +176,12 @@ static int diff_patch_load(git_diff_patch *patch, git_diff_output *output)
goto cleanup;
}
- /* if we were previously missing an oid, update MODIFIED->UNMODIFIED */
+ /* if previously missing an oid, and now that we have it the two sides
+ * are the same (and not submodules), update MODIFIED -> UNMODIFIED
+ */
if (incomplete_data &&
patch->ofile.file->mode == patch->nfile.file->mode &&
+ patch->ofile.file->mode != GIT_FILEMODE_COMMIT &&
git_oid_equal(&patch->ofile.file->oid, &patch->nfile.file->oid) &&
patch->delta->status == GIT_DELTA_MODIFIED) /* not RENAMED/COPIED! */
patch->delta->status = GIT_DELTA_UNMODIFIED;
diff --git a/tests-clar/diff/submodules.c b/tests-clar/diff/submodules.c
index 46fe6c21c..5de46732b 100644
--- a/tests-clar/diff/submodules.c
+++ b/tests-clar/diff/submodules.c
@@ -47,8 +47,10 @@ static void check_diff_patches(git_diff_list *diff, const char **expected)
for (d = 0; d < num_d; ++d, git_diff_patch_free(patch)) {
cl_git_pass(git_diff_get_patch(&patch, &delta, diff, d));
- if (delta->status == GIT_DELTA_UNMODIFIED && expected[d] == NULL)
+ if (delta->status == GIT_DELTA_UNMODIFIED) {
+ cl_assert(expected[d] == NULL);
continue;
+ }
if (expected[d] && !strcmp(expected[d], "<SKIP>"))
continue;