diff options
author | Junio C Hamano <junkio@cox.net> | 2005-04-26 09:25:05 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-26 09:25:05 -0700 |
commit | be3cfa85f45e32722a65349d023667be906a66b6 (patch) | |
tree | a172f60b1266b028962753354a367142f34c090d /diff.h | |
parent | d1df5743809614241883ecad51876607cf432034 (diff) | |
download | git-be3cfa85f45e32722a65349d023667be906a66b6.tar.gz git-be3cfa85f45e32722a65349d023667be906a66b6.tar.xz |
[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 <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'diff.h')
-rw-r--r-- | diff.h | 34 |
1 files changed, 24 insertions, 10 deletions
@@ -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 u.name 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 */ |