Commit c8a39f9e by Russell Belfer

Merge pull request #1684 from libgit2/fix-dirty-submodule-diff

Dirty submodules do not correctly appear in diffs
parents b0401c68 c67ff958
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "diff_driver.h" #include "diff_driver.h"
#include "diff_patch.h" #include "diff_patch.h"
#include "diff_xdiff.h" #include "diff_xdiff.h"
#include "fileops.h"
/* cached information about a single span in a diff */ /* cached information about a single span in a diff */
typedef struct diff_patch_line diff_patch_line; 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) ...@@ -175,9 +176,12 @@ static int diff_patch_load(git_diff_patch *patch, git_diff_output *output)
goto cleanup; 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 && if (incomplete_data &&
patch->ofile.file->mode == patch->nfile.file->mode && 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) && 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_MODIFIED) /* not RENAMED/COPIED! */
patch->delta->status = GIT_DELTA_UNMODIFIED; patch->delta->status = GIT_DELTA_UNMODIFIED;
......
...@@ -47,8 +47,10 @@ static void check_diff_patches(git_diff_list *diff, const char **expected) ...@@ -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)) { for (d = 0; d < num_d; ++d, git_diff_patch_free(patch)) {
cl_git_pass(git_diff_get_patch(&patch, &delta, diff, d)); cl_git_pass(git_diff_get_patch(&patch, &delta, diff, d));
if (delta->status == GIT_DELTA_UNMODIFIED) if (delta->status == GIT_DELTA_UNMODIFIED) {
cl_assert(expected[d] == NULL);
continue; continue;
}
if (expected[d] && !strcmp(expected[d], "<SKIP>")) if (expected[d] && !strcmp(expected[d], "<SKIP>"))
continue; continue;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment