Browse Source
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>maint
Junio C Hamano
20 years ago
committed by
Linus Torvalds
4 changed files with 271 additions and 270 deletions
@ -1,17 +1,31 @@
@@ -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 */ |
||||
|
Loading…
Reference in new issue