Commit e8cc3032c1ef50cebd138705025bf292dd41a717

Alan Rogers 2014-05-22T19:43:58

Return GIT_DELTA_UNREADABLE for a file with a mode change

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
diff --git a/src/diff.c b/src/diff.c
index 6da983e..db22e5e 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -747,6 +747,11 @@ static int maybe_modified(
 	else if (GIT_MODE_TYPE(omode) != GIT_MODE_TYPE(nmode)) {
 		if (DIFF_FLAG_IS_SET(diff, GIT_DIFF_INCLUDE_TYPECHANGE))
 			status = GIT_DELTA_TYPECHANGE;
+		else if (nmode == GIT_FILEMODE_UNREADABLE) {
+			if (!(error = diff_delta__from_one(diff, GIT_DELTA_DELETED, oitem)))
+				error = diff_delta__from_one(diff, GIT_DELTA_UNREADABLE, nitem);
+			return error;
+		}
 		else {
 			if (!(error = diff_delta__from_one(diff, GIT_DELTA_DELETED, oitem)))
 				error = diff_delta__from_one(diff, GIT_DELTA_ADDED, nitem);