Commit a5bf599c9d2bd934823fbd99e73d6378289e5dfb

Edward Thomson 2015-04-17T12:32:39

Merge pull request #3047 from git-up/diff_fixes Diff fixes

diff --git a/src/diff.c b/src/diff.c
index f1bc28f..08e218c 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -621,7 +621,7 @@ int git_diff__oid_for_entry(
 		git_index *idx;
 
 		if (!(error = git_repository_index__weakptr(&idx, diff->repo))) {
-			memcpy(&entry.id, out, sizeof(entry.id));
+			git_oid_cpy(&entry.id, out);
 			error = git_index_add(idx, &entry);
 		}
  	}
@@ -806,15 +806,12 @@ static int maybe_modified(
 	 * haven't calculated the OID of the new item, then calculate it now
 	 */
 	if (modified_uncertain && git_oid_iszero(&nitem->id)) {
-		if (git_oid_iszero(&noid)) {
-			const git_oid *update_check =
-				DIFF_FLAG_IS_SET(diff, GIT_DIFF_UPDATE_INDEX) ?
-				&oitem->id : NULL;
-
-			if ((error = git_diff__oid_for_entry(
-					&noid, diff, nitem, update_check)) < 0)
-				return error;
-		}
+		const git_oid *update_check =
+			DIFF_FLAG_IS_SET(diff, GIT_DIFF_UPDATE_INDEX) && omode == nmode ?
+			&oitem->id : NULL;
+		if ((error = git_diff__oid_for_entry(
+				&noid, diff, nitem, update_check)) < 0)
+			return error;
 
 		/* if oid matches, then mark unmodified (except submodules, where
 		 * the filesystem content may be modified even if the oid still