path: root/diffcore.h
diff options
authorJunio C Hamano <>2005-05-26 09:24:30 (GMT)
committerLinus Torvalds <>2005-05-26 22:18:55 (GMT)
commit4130b99571903fb93e4c6e0d6677be7b6b986426 (patch)
tree4f330570b0cbf3edceaef05ca97e4d255afd48e4 /diffcore.h
parenta577284aee793d71982e896b711c7b3d57e6bcf2 (diff)
[PATCH] Diff updates to express type changes
With the introduction of type 'T' in the diff-raw output, and the "apply-patch" program Linus has been quietly working on without much advertisement, it started to make sense to emit usable information in the "diff --git" patch output format as well. Earlier built-in diff driver punted and did not say anything about a symbolic link changing into a file or vice versa, but this version represents it as a pair of deletion and creation. It also fixes a minor problem dealing with old archive created with ancient git. The earlier code was reporting file mode change between 100664 and 100644 (we shouldn't). The linux-2.6 git tree has a good example that exposes this problem. A good test case is commit ce1dc02f76432a46db149241e015a4f782974623. Signed-off-by: Junio C Hamano <> Signed-off-by: Linus Torvalds <>
Diffstat (limited to 'diffcore.h')
1 files changed, 6 insertions, 0 deletions
diff --git a/diffcore.h b/diffcore.h
index 092eecc..ee1955b 100644
--- a/diffcore.h
+++ b/diffcore.h
@@ -48,6 +48,12 @@ struct diff_filepair {
((S_IFMT & (p)->one->mode) != (S_IFMT & (p)->two->mode))
+#define DIFF_PAIR_MODE_CHANGED(p) ((p)->one->mode != (p)->two->mode)
+#define DIFF_FILE_CANON_MODE(mode) \
+ (S_ISREG(mode) ? (S_IFREG | ce_permissions(mode)) : \
+ S_ISLNK(mode) ? S_IFLNK : S_IFDIR)
extern int diff_unmodified_pair(struct diff_filepair *);
struct diff_queue_struct {