[PATCH] Introducing software archaeologist's tool "pickaxe".
This steals the "pickaxe" feature from JIT and make it available to the bare Plumbing layer. From the command line, the user gives a string he is intersted in. Using the diff-core infrastructure previously introduced, it filters the differences to limit the output only to the diffs between <src> and <dst> where the string appears only in one but not in the other. For example: $ ./git-rev-list HEAD | ./git-diff-tree -Sdiff-tree-helper --stdin -M would show the diffs that touch the string "diff-tree-helper". In real software-archaeologist application, you would typically look for a few to several lines of code and see where that code came from. The "pickaxe" module runs after "rename/copy detection" module, so it even crosses the file rename boundary, as the above example demonstrates. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
427dcb4bca
commit
52e9578985
15
diff-tree.c
15
diff-tree.c
@ -13,6 +13,7 @@ static int generate_patch = 0;
|
||||
static int detect_rename = 0;
|
||||
static int reverse_diff = 0;
|
||||
static int diff_score_opt = 0;
|
||||
static char *pickaxe = 0;
|
||||
static const char *header = NULL;
|
||||
static const char *header_prefix = "";
|
||||
|
||||
@ -271,8 +272,8 @@ static int diff_tree_sha1_top(const unsigned char *old,
|
||||
{
|
||||
int ret;
|
||||
|
||||
diff_setup(detect_rename, diff_score_opt, reverse_diff,
|
||||
(generate_patch ? -1 : line_termination),
|
||||
diff_setup(detect_rename, diff_score_opt, pickaxe,
|
||||
reverse_diff, (generate_patch ? -1 : line_termination),
|
||||
NULL, 0);
|
||||
ret = diff_tree_sha1(old, new, base);
|
||||
diff_flush();
|
||||
@ -285,8 +286,8 @@ static int diff_root_tree(const unsigned char *new, const char *base)
|
||||
void *tree;
|
||||
unsigned long size;
|
||||
|
||||
diff_setup(detect_rename, diff_score_opt, reverse_diff,
|
||||
(generate_patch ? -1 : line_termination),
|
||||
diff_setup(detect_rename, diff_score_opt, pickaxe,
|
||||
reverse_diff, (generate_patch ? -1 : line_termination),
|
||||
NULL, 0);
|
||||
tree = read_object_with_reference(new, "tree", &size, NULL);
|
||||
if (!tree)
|
||||
@ -430,7 +431,7 @@ static int diff_tree_stdin(char *line)
|
||||
}
|
||||
|
||||
static char *diff_tree_usage =
|
||||
"git-diff-tree [-p] [-r] [-z] [--stdin] [-M] [-C] [-R] [-m] [-s] [-v] <tree-ish> <tree-ish>";
|
||||
"git-diff-tree [-p] [-r] [-z] [--stdin] [-M] [-C] [-R] [-S<string>] [-m] [-s] [-v] <tree-ish> <tree-ish>";
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
@ -473,6 +474,10 @@ int main(int argc, char **argv)
|
||||
recursive = generate_patch = 1;
|
||||
continue;
|
||||
}
|
||||
if (!strncmp(arg, "-S", 2)) {
|
||||
pickaxe = arg + 2;
|
||||
continue;
|
||||
}
|
||||
if (!strncmp(arg, "-M", 2)) {
|
||||
detect_rename = recursive = generate_patch = 1;
|
||||
diff_score_opt = diff_scoreopt_parse(arg);
|
||||
|
||||
Reference in New Issue
Block a user