git-daemon
git-diff
git-diff-files
-git-diff-helper
git-diff-index
git-diff-stages
git-diff-tree
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:
+++ /dev/null
-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
-
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.
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 \
+++ /dev/null
-/*
- * 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;
-}
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,
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);
'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
'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 \
'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
'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
'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 \
'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
'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