summaryrefslogtreecommitdiff
path: root/diff-helper.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-05-21 02:40:01 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-05-21 09:58:03 -0700
commit52e9578985fb636ec1d3f6cf794fdadd5ec896fc (patch)
treebb22f522116f5d8e6ae677b7a4660e959c052fc2 /diff-helper.c
parent427dcb4bca49117664d9428fd4e86483f516d703 (diff)
downloadgit-52e9578985fb636ec1d3f6cf794fdadd5ec896fc.tar.gz
[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>
Diffstat (limited to 'diff-helper.c')
-rw-r--r--diff-helper.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/diff-helper.c b/diff-helper.c
index 4e966db769..568d5ae356 100644
--- a/diff-helper.c
+++ b/diff-helper.c
@@ -9,6 +9,7 @@
static int detect_rename = 0;
static int diff_score_opt = 0;
static int generate_patch = 1;
+static char *pickaxe = 0;
static int parse_oneside_change(const char *cp, int *mode,
unsigned char *sha1, char *path)
@@ -93,7 +94,7 @@ static int parse_diff_raw_output(const char *buf)
}
static const char *diff_helper_usage =
- "git-diff-helper [-z] [-R] [-M] [-C] paths...";
+ "git-diff-helper [-z] [-R] [-M] [-C] [-S<string>] paths...";
int main(int ac, const char **av) {
struct strbuf sb;
@@ -117,14 +118,17 @@ int main(int ac, const char **av) {
detect_rename = 2;
diff_score_opt = diff_scoreopt_parse(av[1]);
}
+ else if (av[1][1] == 'S') {
+ pickaxe = av[1] + 2;
+ }
else
usage(diff_helper_usage);
ac--; av++;
}
/* the remaining parameters are paths patterns */
- diff_setup(detect_rename, diff_score_opt, reverse,
- (generate_patch ? -1 : line_termination),
+ diff_setup(detect_rename, diff_score_opt, pickaxe,
+ reverse, (generate_patch ? -1 : line_termination),
av+1, ac-1);
while (1) {