diff --git a/diff.c b/diff.c
index f6a1f5d..cd2ce0f 100644
--- a/diff.c
+++ b/diff.c
@@ -212,13 +212,34 @@
return 0;
}
+struct emit_callback {
+ const char **label_path;
+};
+
static int fn_out(void *priv, mmbuffer_t *mb, int nbuf)
{
int i;
+ struct emit_callback *ecbdata = priv;
+ if (ecbdata->label_path[0]) {
+ printf("--- %s\n", ecbdata->label_path[0]);
+ printf("+++ %s\n", ecbdata->label_path[1]);
+ ecbdata->label_path[0] = ecbdata->label_path[1] = NULL;
+ }
for (i = 0; i < nbuf; i++)
if (!fwrite(mb[i].ptr, mb[i].size, 1, stdout))
return -1;
+ return 0;
+}
+
+#define FIRST_FEW_BYTES 8000
+static int mmfile_is_binary(mmfile_t *mf)
+{
+ long sz = mf->size;
+ if (FIRST_FEW_BYTES < sz)
+ sz = FIRST_FEW_BYTES;
+ if (memchr(mf->ptr, 0, sz))
+ return 1;
return 0;
}
@@ -306,22 +327,32 @@
if (label_path[1][0] != '/')
label_path[1] = quote_two("b/", name_b);
- printf("--- %s\n", label_path[0]);
- printf("+++ %s\n", label_path[1]);
-
if (fill_mmfile(&mf1, temp[0].name) < 0 ||
fill_mmfile(&mf2, temp[1].name) < 0)
die("unable to read files to diff");
- /* Crazy xdl interfaces.. */
- {
+ if (mmfile_is_binary(&mf1) || mmfile_is_binary(&mf2))
+ printf("Binary files %s and %s differ\n",
+ label_path[0], label_path[1]);
+ else {
+ /* Crazy xdl interfaces.. */
+ const char *diffopts = getenv("GIT_DIFF_OPTS");
xpparam_t xpp;
xdemitconf_t xecfg;
xdemitcb_t ecb;
+ struct emit_callback ecbdata;
+ ecbdata.label_path = label_path;
xpp.flags = XDF_NEED_MINIMAL;
xecfg.ctxlen = 3;
+ if (!diffopts)
+ ;
+ else if (!strncmp(diffopts, "--unified=", 10))
+ xecfg.ctxlen = strtoul(diffopts + 10, NULL, 10);
+ else if (!strncmp(diffopts, "-u", 2))
+ xecfg.ctxlen = strtoul(diffopts + 2, NULL, 10);
ecb.outf = fn_out;
+ ecb.priv = &ecbdata;
xdl_diff(&mf1, &mf2, &xpp, &xecfg, &ecb);
}
diff --git a/t/t1200-tutorial.sh b/t/t1200-tutorial.sh
index 1002413..5ac373f 100755
--- a/t/t1200-tutorial.sh
+++ b/t/t1200-tutorial.sh
@@ -22,7 +22,7 @@
index 557db03..263414f 100644
--- a/hello
+++ b/hello
-@@ -1 +1,2 @@
+@@ -1,1 +1,2 @@
Hello World
+It's a new day for git
EOF
@@ -60,14 +60,14 @@
index 0000000..f24c74a
--- /dev/null
+++ b/example
-@@ -0,0 +1 @@
+@@ -0,0 +1,1 @@
+Silly example
diff --git a/hello b/hello
new file mode 100644
index 0000000..557db03
--- /dev/null
+++ b/hello
-@@ -0,0 +1 @@
+@@ -0,0 +1,1 @@
+Hello World
EOF
diff --git a/t/t4001-diff-rename.sh b/t/t4001-diff-rename.sh
index 2e3c20d..08c1131 100755
--- a/t/t4001-diff-rename.sh
+++ b/t/t4001-diff-rename.sh
@@ -49,7 +49,7 @@
rename to path1
--- a/path0
+++ b/path1
-@@ -8,7 +8,7 @@ Line 7
+@@ -8,7 +8,7 @@
Line 8
Line 9
Line 10
diff --git a/t/t4003-diff-rename-1.sh b/t/t4003-diff-rename-1.sh
index 2751970..af744fd 100755
--- a/t/t4003-diff-rename-1.sh
+++ b/t/t4003-diff-rename-1.sh
@@ -36,7 +36,7 @@
copy to COPYING.1
--- a/COPYING
+++ b/COPYING.1
-@@ -6 +6 @@
+@@ -6,1 +6,1 @@
- 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
@@ -44,13 +44,13 @@
rename to COPYING.2
--- a/COPYING
+++ b/COPYING.2
-@@ -2 +2 @@
+@@ -2,1 +2,1 @@
- 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 @@
+@@ -6,1 +6,1 @@
- 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 @@
+@@ -12,1 +12,1 @@
- 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
@@ -74,13 +74,13 @@
diff --git a/COPYING b/COPYING
--- a/COPYING
+++ b/COPYING
-@@ -2 +2 @@
+@@ -2,1 +2,1 @@
- 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 @@
+@@ -6,1 +6,1 @@
- 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 @@
+@@ -12,1 +12,1 @@
- 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
@@ -88,7 +88,7 @@
copy to COPYING.1
--- a/COPYING
+++ b/COPYING.1
-@@ -6 +6 @@
+@@ -6,1 +6,1 @@
- 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
@@ -116,7 +116,7 @@
copy to COPYING.1
--- a/COPYING
+++ b/COPYING.1
-@@ -6 +6 @@
+@@ -6,1 +6,1 @@
- 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
diff --git a/t/t4004-diff-rename-symlink.sh b/t/t4004-diff-rename-symlink.sh
index a23aaa0..04f0147 100755
--- a/t/t4004-diff-rename-symlink.sh
+++ b/t/t4004-diff-rename-symlink.sh
@@ -40,7 +40,7 @@
new file mode 120000
--- /dev/null
+++ b/bozbar
-@@ -0,0 +1 @@
+@@ -0,0 +1,1 @@
+xzzzy
\ No newline at end of file
diff --git a/frotz b/nitfol
@@ -55,7 +55,7 @@
deleted file mode 100644
--- a/yomin
+++ /dev/null
-@@ -1 +0,0 @@
+@@ -1,1 +0,0 @@
-xyzzy
\ No newline at end of file
EOF
diff --git a/t/t4011-diff-symlink.sh b/t/t4011-diff-symlink.sh
index 379a831..36ac16d 100755
--- a/t/t4011-diff-symlink.sh
+++ b/t/t4011-diff-symlink.sh
@@ -15,7 +15,7 @@
index 0000000..7c465af
--- /dev/null
+++ b/frotz
-@@ -0,0 +1 @@
+@@ -0,0 +1,1 @@
+xyzzy
\ No newline at end of file
EOF
@@ -41,7 +41,7 @@
index 7c465af..0000000
--- a/frotz
+++ /dev/null
-@@ -1 +0,0 @@
+@@ -1,1 +0,0 @@
-xyzzy
\ No newline at end of file
EOF
@@ -68,7 +68,7 @@
index 7c465af..df1db54 120000
--- a/frotz
+++ b/frotz
-@@ -1 +1 @@
+@@ -1,1 +1,1 @@
-xyzzy
\ No newline at end of file
+yxyyz