diff options
author | Russell Belfer <rb@github.com> | 2012-08-22 13:57:57 -0700 |
---|---|---|
committer | Russell Belfer <rb@github.com> | 2012-08-22 13:57:57 -0700 |
commit | 5fdc41e76591aebdbae3b49440bc2c8b2430718c (patch) | |
tree | a879ae6630a4cde62aa3b06dea4d74c673a16a2c | |
parent | cfda29e38260f19e77f1746c4f6f1c2cab453934 (diff) | |
download | libgit2-5fdc41e76591aebdbae3b49440bc2c8b2430718c.tar.gz |
Minor bug fixes in diff code
In looking at PR #878, I found a few small bugs in the diff code,
mostly related to work that can be avoided when processing tree-
to-tree diffs that was always being carried out. This commit has
some small fixes in it.
-rw-r--r-- | src/diff.c | 3 | ||||
-rw-r--r-- | src/diff_output.c | 3 | ||||
-rw-r--r-- | tests-clar/diff/diff_helpers.c | 3 |
3 files changed, 6 insertions, 3 deletions
diff --git a/src/diff.c b/src/diff.c index a5bf07a65..9abf8b9f5 100644 --- a/src/diff.c +++ b/src/diff.c @@ -470,7 +470,8 @@ static int maybe_modified( /* on platforms with no symlinks, preserve mode of existing symlinks */ if (S_ISLNK(omode) && S_ISREG(nmode) && - !(diff->diffcaps & GIT_DIFFCAPS_HAS_SYMLINKS)) + !(diff->diffcaps & GIT_DIFFCAPS_HAS_SYMLINKS) && + new_iter->type == GIT_ITERATOR_WORKDIR) nmode = omode; /* on platforms with no execmode, just preserve old mode */ diff --git a/src/diff_output.c b/src/diff_output.c index bd8e8edda..d269a4cee 100644 --- a/src/diff_output.c +++ b/src/diff_output.c @@ -162,7 +162,7 @@ static int file_is_binary_by_attr( mirror_new = (delta->new_file.path == delta->old_file.path || strcmp(delta->new_file.path, delta->old_file.path) == 0); if (mirror_new) - delta->new_file.flags &= (delta->old_file.flags & BINARY_DIFF_FLAGS); + delta->new_file.flags |= (delta->old_file.flags & BINARY_DIFF_FLAGS); else error = update_file_is_binary_by_attr(diff->repo, &delta->new_file); @@ -397,6 +397,7 @@ int git_diff_foreach( if (error < 0) goto cleanup; + delta->new_file.flags |= GIT_DIFF_FILE_VALID_OID; /* since we did not have the definitive oid, we may have * incorrect status and need to skip this item. diff --git a/tests-clar/diff/diff_helpers.c b/tests-clar/diff/diff_helpers.c index 18daa080b..7b391262d 100644 --- a/tests-clar/diff/diff_helpers.c +++ b/tests-clar/diff/diff_helpers.c @@ -30,7 +30,8 @@ int diff_file_fn( GIT_UNUSED(progress); - e-> at_least_one_of_them_is_binary = delta->binary; + if (delta->binary) + e->at_least_one_of_them_is_binary = true; e->files++; switch (delta->status) { |