summaryrefslogtreecommitdiff
path: root/src/diff_output.c
diff options
context:
space:
mode:
authorRussell Belfer <rb@github.com>2013-04-09 14:52:32 -0700
committerRussell Belfer <rb@github.com>2013-04-09 14:52:32 -0700
commitad26434b3b8a5eafab8ec52b83aa99beaf48fb03 (patch)
treead5caff8bd3574a31040beaf1739f3ba3b6c8d9e /src/diff_output.c
parent9da187e83d1b8ab513a43fd54a9fe2be11b1703f (diff)
downloadlibgit2-ad26434b3b8a5eafab8ec52b83aa99beaf48fb03.tar.gz
Tests and more fixes for submodule diffs
This adds tests for diffs with submodules in them and (perhaps unsurprisingly) requires further fixes to be made. Specifically, this fixes: - when considering if a submodule is dirty in the workdir, it was being treated as dirty even if only the index was dirty. - git_diff_patch_to_str (and git_diff_patch_print) were "printing" the headers for files (and submodules) that were unmodified or had no meaningful content. - added comment to previous fix and removed unneeded parens.
Diffstat (limited to 'src/diff_output.c')
-rw-r--r--src/diff_output.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/diff_output.c b/src/diff_output.c
index d462142f9..34a3e506c 100644
--- a/src/diff_output.c
+++ b/src/diff_output.c
@@ -675,11 +675,14 @@ cleanup:
if (!error) {
patch->flags |= GIT_DIFF_PATCH_LOADED;
+ /* patch is diffable only for non-binary, modified files where at
+ * least one side has data and there is actual change in the data
+ */
if ((delta->flags & GIT_DIFF_FLAG_BINARY) == 0 &&
delta->status != GIT_DELTA_UNMODIFIED &&
(patch->old_data.len || patch->new_data.len) &&
- ((patch->old_data.len != patch->new_data.len) ||
- !git_oid_equal(&delta->old_file.oid, &delta->new_file.oid)))
+ (patch->old_data.len != patch->new_data.len ||
+ !git_oid_equal(&delta->old_file.oid, &delta->new_file.oid)))
patch->flags |= GIT_DIFF_PATCH_DIFFABLE;
}
@@ -1150,7 +1153,11 @@ static int print_patch_file(
GIT_UNUSED(progress);
- if (S_ISDIR(delta->new_file.mode))
+ if (S_ISDIR(delta->new_file.mode) ||
+ delta->status == GIT_DELTA_UNMODIFIED ||
+ delta->status == GIT_DELTA_IGNORED ||
+ (delta->status == GIT_DELTA_UNTRACKED &&
+ (pi->diff->opts.flags & GIT_DIFF_INCLUDE_UNTRACKED_CONTENT) == 0))
return 0;
if (!oldpfx)