path: root/diff.h
diff options
authorJunio C Hamano <>2005-04-26 16:25:05 (GMT)
committerLinus Torvalds <>2005-04-26 16:25:05 (GMT)
commitbe3cfa85f45e32722a65349d023667be906a66b6 (patch)
treea172f60b1266b028962753354a367142f34c090d /diff.h
parentd1df5743809614241883ecad51876607cf432034 (diff)
[PATCH] Diff-tree-helper take two.
This reworks the diff-tree-helper and show-diff to further make external diff command interface simpler. These commands now honor GIT_EXTERNAL_DIFF environment variable which can point at an arbitrary program that takes 7 parameters: name file1 file1-sha1 file1-mode file2 file2-sha1 file2-mode The parameters for an external diff command are as follows: name this invocation of the command is to emit diff for the named cache/tree entry. file1 pathname that holds the contents of the first file. This can be a file inside the working tree, or a temporary file created from the blob object, or /dev/null. The command should not attempt to unlink it -- the temporary is unlinked by the caller. file1-sha1 sha1 hash if file1 is a blob object, or "." otherwise. file1-mode mode bits for file1, or "." for a deleted file. If GIT_EXTERNAL_DIFF environment variable is not set, the default is to invoke diff with the set of parameters old show-diff used to use. This built-in implementation honors the GIT_DIFF_CMD and GIT_DIFF_OPTS environment variables as before. Signed-off-by: Junio C Hamano <> Signed-off-by: Linus Torvalds <>
Diffstat (limited to 'diff.h')
1 files changed, 24 insertions, 10 deletions
diff --git a/diff.h b/diff.h
index 56ca373..24df908 100644
--- a/diff.h
+++ b/diff.h
@@ -1,17 +1,31 @@
+ * Copyright (C) 2005 Junio C Hamano
+ */
#ifndef DIFF_H
#define DIFF_H
-extern void prepare_diff_cmd(void);
+/* These two are for backward compatibility with show-diff;
+ * new users should not use them.
+ */
+extern void show_differences(const struct cache_entry *ce, int reverse);
+extern void show_diff_empty(const struct cache_entry *ce, int reverse);
-extern void show_differences(const char *name, /* filename on the filesystem */
- const char *label, /* diff label to use */
- void *old_contents, /* contents in core */
- unsigned long long old_size, /* size in core */
- int reverse /* 0: diff core file
- 1: diff file core */);
+struct diff_spec {
+ union {
+ const char *name; /* path on the filesystem */
+ unsigned char sha1[20]; /* blob object ID */
+ } u;
+ unsigned short mode; /* file mode */
+ unsigned sha1_valid : 1; /* if true, use u.sha1 and trust mode.
+ * (however with a NULL SHA1, read them
+ * from the file!).
+ * if false, use and read mode from
+ * the filesystem.
+ */
+ unsigned file_valid : 1; /* if false the file does not even exist */
-extern void show_diff_empty(const unsigned char *sha1,
- const char *name,
- int reverse);
+extern void run_external_diff(const char *name,
+ struct diff_spec *, struct diff_spec *);
#endif /* DIFF_H */