mirror of
https://github.com/git/git.git
synced 2024-11-24 02:17:02 +08:00
Retire diff-helper.
The textual diff generation with built-in '-p' in diff-* brothers has proven to be useful enough that git-diff-helper outlived its usefulness. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
9dcc829fe1
commit
5cfcd07c93
1
.gitignore
vendored
1
.gitignore
vendored
@ -20,7 +20,6 @@ git-cvsimport
|
||||
git-daemon
|
||||
git-diff
|
||||
git-diff-files
|
||||
git-diff-helper
|
||||
git-diff-index
|
||||
git-diff-stages
|
||||
git-diff-tree
|
||||
|
@ -62,8 +62,7 @@ When "git-diff-index", "git-diff-tree", or "git-diff-files" are run
|
||||
with a '-p' option, they do not produce the output described above;
|
||||
instead they produce a patch file.
|
||||
|
||||
The patch generation can be customized at two levels. This
|
||||
customization also applies to "git-diff-helper".
|
||||
The patch generation can be customized at two levels.
|
||||
|
||||
1. When the environment variable 'GIT_EXTERNAL_DIFF' is not set,
|
||||
these commands internally invoke "diff" like this:
|
||||
|
@ -1,53 +0,0 @@
|
||||
git-diff-helper(1)
|
||||
==================
|
||||
v0.1, May 2005
|
||||
|
||||
NAME
|
||||
----
|
||||
git-diff-helper - Generates patch format output for git-diff-*
|
||||
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
'git-diff-helper' [-z] [-S<string>] [-O<orderfile>]
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
Reads output from "git-diff-index", "git-diff-tree" and "git-diff-files" and
|
||||
generates patch format output.
|
||||
|
||||
OPTIONS
|
||||
-------
|
||||
-z::
|
||||
\0 line termination on input
|
||||
|
||||
-S<string>::
|
||||
Look for differences that contains the change in <string>.
|
||||
|
||||
--pickaxe-all::
|
||||
When -S finds a change, show all the changes in that
|
||||
changeset, not just the files that contains the change
|
||||
in <string>.
|
||||
|
||||
-O<orderfile>::
|
||||
Output the patch in the order specified in the
|
||||
<orderfile>, which has one shell glob pattern per line.
|
||||
|
||||
See Also
|
||||
--------
|
||||
The section on generating patches in gitlink:git-diff-index[1]
|
||||
|
||||
|
||||
Author
|
||||
------
|
||||
Written by Junio C Hamano <junkio@cox.net>
|
||||
|
||||
|
||||
Documentation
|
||||
--------------
|
||||
Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
|
||||
|
||||
GIT
|
||||
---
|
||||
Part of the gitlink:git[7] suite
|
||||
|
@ -363,9 +363,6 @@ gitlink:git-count-objects[1]::
|
||||
gitlink:git-daemon[1]::
|
||||
A really simple server for GIT repositories.
|
||||
|
||||
gitlink:git-diff-helper[1]::
|
||||
Generates patch format output for git-diff-*
|
||||
|
||||
gitlink:git-get-tar-commit-id[1]::
|
||||
Extract commit ID from an archive created using git-tar-tree.
|
||||
|
||||
|
2
Makefile
2
Makefile
@ -102,7 +102,7 @@ PROGRAMS = \
|
||||
git-apply git-cat-file \
|
||||
git-checkout-index git-clone-pack git-commit-tree \
|
||||
git-convert-objects git-diff-files \
|
||||
git-diff-helper git-diff-index git-diff-stages \
|
||||
git-diff-index git-diff-stages \
|
||||
git-diff-tree git-fetch-pack git-fsck-objects \
|
||||
git-hash-object git-init-db \
|
||||
git-local-fetch git-ls-files git-ls-tree git-merge-base \
|
||||
|
154
diff-helper.c
154
diff-helper.c
@ -1,154 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2005 Junio C Hamano
|
||||
*/
|
||||
#include "cache.h"
|
||||
#include "strbuf.h"
|
||||
#include "diff.h"
|
||||
|
||||
static const char *pickaxe = NULL;
|
||||
static int pickaxe_opts = 0;
|
||||
static const char *orderfile = NULL;
|
||||
static const char *diff_filter = NULL;
|
||||
static int line_termination = '\n';
|
||||
static int inter_name_termination = '\t';
|
||||
|
||||
static void flush_them(int ac, const char **av)
|
||||
{
|
||||
diffcore_std_no_resolve(av + 1,
|
||||
pickaxe, pickaxe_opts,
|
||||
orderfile, diff_filter);
|
||||
diff_flush(DIFF_FORMAT_PATCH, '\n');
|
||||
}
|
||||
|
||||
static const char diff_helper_usage[] =
|
||||
"git-diff-helper [-z] [-O<orderfile>] [-S<string>] [--pickaxe-all] [<path>...]";
|
||||
|
||||
int main(int ac, const char **av) {
|
||||
struct strbuf sb;
|
||||
const char *garbage_flush_format;
|
||||
|
||||
strbuf_init(&sb);
|
||||
|
||||
while (1 < ac && av[1][0] == '-') {
|
||||
if (av[1][1] == 'z')
|
||||
line_termination = inter_name_termination = 0;
|
||||
else if (av[1][1] == 'S') {
|
||||
pickaxe = av[1] + 2;
|
||||
}
|
||||
else if (!strcmp(av[1], "--pickaxe-all"))
|
||||
pickaxe_opts = DIFF_PICKAXE_ALL;
|
||||
else if (!strncmp(av[1], "--diff-filter=", 14))
|
||||
diff_filter = av[1] + 14;
|
||||
else if (!strncmp(av[1], "-O", 2))
|
||||
orderfile = av[1] + 2;
|
||||
else
|
||||
usage(diff_helper_usage);
|
||||
ac--; av++;
|
||||
}
|
||||
garbage_flush_format = (line_termination == 0) ? "%s" : "%s\n";
|
||||
|
||||
/* the remaining parameters are paths patterns */
|
||||
|
||||
diff_setup(0);
|
||||
while (1) {
|
||||
unsigned old_mode, new_mode;
|
||||
unsigned char old_sha1[20], new_sha1[20];
|
||||
char old_path[PATH_MAX];
|
||||
int status, score, two_paths;
|
||||
char new_path[PATH_MAX];
|
||||
|
||||
int ch;
|
||||
char *cp, *ep;
|
||||
|
||||
read_line(&sb, stdin, line_termination);
|
||||
if (sb.eof)
|
||||
break;
|
||||
switch (sb.buf[0]) {
|
||||
case ':':
|
||||
/* parse the first part up to the status */
|
||||
cp = sb.buf + 1;
|
||||
old_mode = new_mode = 0;
|
||||
while ((ch = *cp) && ('0' <= ch && ch <= '7')) {
|
||||
old_mode = (old_mode << 3) | (ch - '0');
|
||||
cp++;
|
||||
}
|
||||
if (*cp++ != ' ')
|
||||
break;
|
||||
while ((ch = *cp) && ('0' <= ch && ch <= '7')) {
|
||||
new_mode = (new_mode << 3) | (ch - '0');
|
||||
cp++;
|
||||
}
|
||||
if (*cp++ != ' ')
|
||||
break;
|
||||
if (get_sha1_hex(cp, old_sha1))
|
||||
break;
|
||||
cp += 40;
|
||||
if (*cp++ != ' ')
|
||||
break;
|
||||
if (get_sha1_hex(cp, new_sha1))
|
||||
break;
|
||||
cp += 40;
|
||||
if (*cp++ != ' ')
|
||||
break;
|
||||
status = *cp++;
|
||||
if (!strchr("AMCRDU", status))
|
||||
break;
|
||||
two_paths = score = 0;
|
||||
if (status == DIFF_STATUS_RENAMED ||
|
||||
status == DIFF_STATUS_COPIED)
|
||||
two_paths = 1;
|
||||
|
||||
/* pick up score if exists */
|
||||
if (sscanf(cp, "%d", &score) != 1)
|
||||
score = 0;
|
||||
cp = strchr(cp,
|
||||
inter_name_termination);
|
||||
if (!cp)
|
||||
break;
|
||||
if (*cp++ != inter_name_termination)
|
||||
break;
|
||||
|
||||
/* first pathname */
|
||||
if (!line_termination) {
|
||||
read_line(&sb, stdin, line_termination);
|
||||
if (sb.eof)
|
||||
break;
|
||||
strcpy(old_path, sb.buf);
|
||||
}
|
||||
else if (!two_paths)
|
||||
strcpy(old_path, cp);
|
||||
else {
|
||||
ep = strchr(cp, inter_name_termination);
|
||||
if (!ep)
|
||||
break;
|
||||
strncpy(old_path, cp, ep-cp);
|
||||
old_path[ep-cp] = 0;
|
||||
cp = ep + 1;
|
||||
}
|
||||
|
||||
/* second pathname */
|
||||
if (!two_paths)
|
||||
strcpy(new_path, old_path);
|
||||
else {
|
||||
if (!line_termination) {
|
||||
read_line(&sb, stdin,
|
||||
line_termination);
|
||||
if (sb.eof)
|
||||
break;
|
||||
strcpy(new_path, sb.buf);
|
||||
}
|
||||
else
|
||||
strcpy(new_path, cp);
|
||||
}
|
||||
diff_helper_input(old_mode, new_mode,
|
||||
old_sha1, new_sha1,
|
||||
old_path, status, score,
|
||||
new_path);
|
||||
continue;
|
||||
}
|
||||
flush_them(ac, av);
|
||||
printf(garbage_flush_format, sb.buf);
|
||||
}
|
||||
flush_them(ac, av);
|
||||
return 0;
|
||||
}
|
23
diff.c
23
diff.c
@ -1152,29 +1152,6 @@ void diff_addremove(int addremove, unsigned mode,
|
||||
diff_queue(&diff_queued_diff, one, two);
|
||||
}
|
||||
|
||||
void diff_helper_input(unsigned old_mode,
|
||||
unsigned new_mode,
|
||||
const unsigned char *old_sha1,
|
||||
const unsigned char *new_sha1,
|
||||
const char *old_path,
|
||||
int status,
|
||||
int score,
|
||||
const char *new_path)
|
||||
{
|
||||
struct diff_filespec *one, *two;
|
||||
struct diff_filepair *dp;
|
||||
|
||||
one = alloc_filespec(old_path);
|
||||
two = alloc_filespec(new_path);
|
||||
if (old_mode)
|
||||
fill_filespec(one, old_sha1, old_mode);
|
||||
if (new_mode)
|
||||
fill_filespec(two, new_sha1, new_mode);
|
||||
dp = diff_queue(&diff_queued_diff, one, two);
|
||||
dp->score = score * MAX_SCORE / 100;
|
||||
dp->status = status;
|
||||
}
|
||||
|
||||
void diff_change(unsigned old_mode, unsigned new_mode,
|
||||
const unsigned char *old_sha1,
|
||||
const unsigned char *new_sha1,
|
||||
|
9
diff.h
9
diff.h
@ -19,15 +19,6 @@ extern void diff_change(unsigned mode1, unsigned mode2,
|
||||
const unsigned char *sha2,
|
||||
const char *base, const char *path);
|
||||
|
||||
extern void diff_helper_input(unsigned mode1,
|
||||
unsigned mode2,
|
||||
const unsigned char *sha1,
|
||||
const unsigned char *sha2,
|
||||
const char *path1,
|
||||
int status,
|
||||
int score,
|
||||
const char *path2);
|
||||
|
||||
extern void diff_unmerge(const char *path);
|
||||
|
||||
extern int diff_scoreopt_parse(const char *opt);
|
||||
|
@ -50,13 +50,4 @@ test_expect_success \
|
||||
'validate git-diff-files -p output.' \
|
||||
'cmp -s current expected'
|
||||
|
||||
test_expect_success \
|
||||
'build same diff using git-diff-helper.' \
|
||||
'git-diff-files -z | git-diff-helper -z >current'
|
||||
|
||||
|
||||
test_expect_success \
|
||||
'validate git-diff-helper output.' \
|
||||
'cmp -s current expected'
|
||||
|
||||
test_done
|
||||
|
@ -40,38 +40,6 @@ test_expect_success \
|
||||
'validate output from rename/copy detection (#1)' \
|
||||
'compare_diff_raw current expected'
|
||||
|
||||
# make sure diff-helper can grok it.
|
||||
mv expected diff-raw
|
||||
GIT_DIFF_OPTS=--unified=0 git-diff-helper <diff-raw >current
|
||||
cat >expected <<\EOF
|
||||
diff --git a/COPYING b/COPYING.1
|
||||
copy from COPYING
|
||||
copy to COPYING.1
|
||||
--- a/COPYING
|
||||
+++ b/COPYING.1
|
||||
@@ -6 +6 @@
|
||||
- HOWEVER, in order to allow a migration to GPLv3 if that seems like
|
||||
+ However, in order to allow a migration to GPLv3 if that seems like
|
||||
diff --git a/COPYING b/COPYING.2
|
||||
rename from COPYING
|
||||
rename to COPYING.2
|
||||
--- a/COPYING
|
||||
+++ b/COPYING.2
|
||||
@@ -2 +2 @@
|
||||
- Note that the only valid version of the GPL as far as this project
|
||||
+ Note that the only valid version of the G.P.L as far as this project
|
||||
@@ -6 +6 @@
|
||||
- HOWEVER, in order to allow a migration to GPLv3 if that seems like
|
||||
+ HOWEVER, in order to allow a migration to G.P.Lv3 if that seems like
|
||||
@@ -12 +12 @@
|
||||
- This file is licensed under the GPL v2, or a later version
|
||||
+ This file is licensed under the G.P.L v2, or a later version
|
||||
EOF
|
||||
|
||||
test_expect_success \
|
||||
'validate output from diff-helper (#1)' \
|
||||
'compare_diff_patch current expected'
|
||||
|
||||
################################################################
|
||||
|
||||
test_expect_success \
|
||||
@ -94,36 +62,6 @@ test_expect_success \
|
||||
'validate output from rename/copy detection (#2)' \
|
||||
'compare_diff_raw current expected'
|
||||
|
||||
# make sure diff-helper can grok it.
|
||||
mv expected diff-raw
|
||||
GIT_DIFF_OPTS=--unified=0 git-diff-helper <diff-raw >current
|
||||
cat >expected <<\EOF
|
||||
diff --git a/COPYING b/COPYING
|
||||
--- a/COPYING
|
||||
+++ b/COPYING
|
||||
@@ -2 +2 @@
|
||||
- Note that the only valid version of the GPL as far as this project
|
||||
+ Note that the only valid version of the G.P.L as far as this project
|
||||
@@ -6 +6 @@
|
||||
- HOWEVER, in order to allow a migration to GPLv3 if that seems like
|
||||
+ HOWEVER, in order to allow a migration to G.P.Lv3 if that seems like
|
||||
@@ -12 +12 @@
|
||||
- This file is licensed under the GPL v2, or a later version
|
||||
+ This file is licensed under the G.P.L v2, or a later version
|
||||
diff --git a/COPYING b/COPYING.1
|
||||
copy from COPYING
|
||||
copy to COPYING.1
|
||||
--- a/COPYING
|
||||
+++ b/COPYING.1
|
||||
@@ -6 +6 @@
|
||||
- HOWEVER, in order to allow a migration to GPLv3 if that seems like
|
||||
+ However, in order to allow a migration to GPLv3 if that seems like
|
||||
EOF
|
||||
|
||||
test_expect_success \
|
||||
'validate output from diff-helper (#2)' \
|
||||
'compare_diff_patch current expected'
|
||||
|
||||
################################################################
|
||||
|
||||
# tree has COPYING and rezrov. work tree has the same COPYING and
|
||||
@ -145,22 +83,4 @@ test_expect_success \
|
||||
'validate output from rename/copy detection (#3)' \
|
||||
'compare_diff_raw current expected'
|
||||
|
||||
# make sure diff-helper can grok it.
|
||||
mv expected diff-raw
|
||||
GIT_DIFF_OPTS=--unified=0 git-diff-helper <diff-raw >current
|
||||
cat >expected <<\EOF
|
||||
diff --git a/COPYING b/COPYING.1
|
||||
copy from COPYING
|
||||
copy to COPYING.1
|
||||
--- a/COPYING
|
||||
+++ b/COPYING.1
|
||||
@@ -6 +6 @@
|
||||
- HOWEVER, in order to allow a migration to GPLv3 if that seems like
|
||||
+ However, in order to allow a migration to GPLv3 if that seems like
|
||||
EOF
|
||||
|
||||
test_expect_success \
|
||||
'validate output from diff-helper (#3)' \
|
||||
'compare_diff_patch current expected'
|
||||
|
||||
test_done
|
||||
|
@ -44,38 +44,6 @@ test_expect_success \
|
||||
'validate output from rename/copy detection (#1)' \
|
||||
'compare_diff_raw_z current expected'
|
||||
|
||||
# make sure diff-helper can grok it.
|
||||
mv current diff-raw
|
||||
GIT_DIFF_OPTS=--unified=0 git-diff-helper -z <diff-raw >current
|
||||
cat >expected <<\EOF
|
||||
diff --git a/COPYING b/COPYING.1
|
||||
copy from COPYING
|
||||
copy to COPYING.1
|
||||
--- a/COPYING
|
||||
+++ b/COPYING.1
|
||||
@@ -6 +6 @@
|
||||
- HOWEVER, in order to allow a migration to GPLv3 if that seems like
|
||||
+ However, in order to allow a migration to GPLv3 if that seems like
|
||||
diff --git a/COPYING b/COPYING.2
|
||||
rename from COPYING
|
||||
rename to COPYING.2
|
||||
--- a/COPYING
|
||||
+++ b/COPYING.2
|
||||
@@ -2 +2 @@
|
||||
- Note that the only valid version of the GPL as far as this project
|
||||
+ Note that the only valid version of the G.P.L as far as this project
|
||||
@@ -6 +6 @@
|
||||
- HOWEVER, in order to allow a migration to GPLv3 if that seems like
|
||||
+ HOWEVER, in order to allow a migration to G.P.Lv3 if that seems like
|
||||
@@ -12 +12 @@
|
||||
- This file is licensed under the GPL v2, or a later version
|
||||
+ This file is licensed under the G.P.L v2, or a later version
|
||||
EOF
|
||||
|
||||
test_expect_success \
|
||||
'validate output from diff-helper (#1)' \
|
||||
'compare_diff_patch current expected'
|
||||
|
||||
################################################################
|
||||
|
||||
test_expect_success \
|
||||
@ -101,36 +69,6 @@ test_expect_success \
|
||||
'validate output from rename/copy detection (#2)' \
|
||||
'compare_diff_raw_z current expected'
|
||||
|
||||
# make sure diff-helper can grok it.
|
||||
mv current diff-raw
|
||||
GIT_DIFF_OPTS=--unified=0 git-diff-helper -z <diff-raw >current
|
||||
cat >expected <<\EOF
|
||||
diff --git a/COPYING b/COPYING
|
||||
--- a/COPYING
|
||||
+++ b/COPYING
|
||||
@@ -2 +2 @@
|
||||
- Note that the only valid version of the GPL as far as this project
|
||||
+ Note that the only valid version of the G.P.L as far as this project
|
||||
@@ -6 +6 @@
|
||||
- HOWEVER, in order to allow a migration to GPLv3 if that seems like
|
||||
+ HOWEVER, in order to allow a migration to G.P.Lv3 if that seems like
|
||||
@@ -12 +12 @@
|
||||
- This file is licensed under the GPL v2, or a later version
|
||||
+ This file is licensed under the G.P.L v2, or a later version
|
||||
diff --git a/COPYING b/COPYING.1
|
||||
copy from COPYING
|
||||
copy to COPYING.1
|
||||
--- a/COPYING
|
||||
+++ b/COPYING.1
|
||||
@@ -6 +6 @@
|
||||
- HOWEVER, in order to allow a migration to GPLv3 if that seems like
|
||||
+ However, in order to allow a migration to GPLv3 if that seems like
|
||||
EOF
|
||||
|
||||
test_expect_success \
|
||||
'validate output from diff-helper (#2)' \
|
||||
'compare_diff_patch current expected'
|
||||
|
||||
################################################################
|
||||
|
||||
# tree has COPYING and rezrov. work tree has the same COPYING and
|
||||
@ -154,22 +92,4 @@ test_expect_success \
|
||||
'validate output from rename/copy detection (#3)' \
|
||||
'compare_diff_raw_z current expected'
|
||||
|
||||
# make sure diff-helper can grok it.
|
||||
mv current diff-raw
|
||||
GIT_DIFF_OPTS=--unified=0 git-diff-helper -z <diff-raw >current
|
||||
cat >expected <<\EOF
|
||||
diff --git a/COPYING b/COPYING.1
|
||||
copy from COPYING
|
||||
copy to COPYING.1
|
||||
--- a/COPYING
|
||||
+++ b/COPYING.1
|
||||
@@ -6 +6 @@
|
||||
- HOWEVER, in order to allow a migration to GPLv3 if that seems like
|
||||
+ However, in order to allow a migration to GPLv3 if that seems like
|
||||
EOF
|
||||
|
||||
test_expect_success \
|
||||
'validate output from diff-helper (#3)' \
|
||||
'compare_diff_patch current expected'
|
||||
|
||||
test_done
|
||||
|
Loading…
Reference in New Issue
Block a user