From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: Johannes Sixt <j.sixt@viscovery.net>,
Matthieu Moy <Matthieu.Moy@imag.fr>,
git@vger.kernel.org
Subject: [PATCH 4/7] textconv: don't convert for every operation
Date: Fri, 24 Oct 2008 20:52:56 -0400 [thread overview]
Message-ID: <20081025005256.GD23903@coredump.intra.peff.net> (raw)
In-Reply-To: <20081025004815.GA23851@coredump.intra.peff.net>
Since we do the text conversion in fill_mmfile, the
conversion was happening any time we fed data to xdiff,
including diffstat, whitespace checking, etc.
This patch makes it optional for each caller, and
conservatively chooses to turn it on only for actual patch
generation.
Signed-off-by: Jeff King <peff@peff.net>
---
And this was part 2 of the big refactoring patch.
diff.c | 19 ++++++++++---------
t/t4030-diff-textconv.sh | 2 +-
2 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/diff.c b/diff.c
index 8fad215..fcdfd7b 100644
--- a/diff.c
+++ b/diff.c
@@ -292,7 +292,8 @@ static const char *get_textconv(struct diff_filespec *one)
return one->driver->textconv;
}
-static int fill_mmfile(mmfile_t *mf, struct diff_filespec *one)
+static int fill_mmfile(mmfile_t *mf, struct diff_filespec *one,
+ int try_textconv)
{
const char *textconv;
@@ -304,7 +305,7 @@ static int fill_mmfile(mmfile_t *mf, struct diff_filespec *one)
else if (diff_populate_filespec(one, 0))
return -1;
- if ((textconv = get_textconv(one))) {
+ if (try_textconv && (textconv = get_textconv(one))) {
size_t size;
mf->ptr = run_textconv(textconv, one, &size);
if (!mf->ptr)
@@ -1396,7 +1397,7 @@ static void builtin_diff(const char *name_a,
}
}
- if (fill_mmfile(&mf1, one) < 0 || fill_mmfile(&mf2, two) < 0)
+ if (fill_mmfile(&mf1, one, 1) < 0 || fill_mmfile(&mf2, two, 1) < 0)
die("unable to read files to diff");
if (!DIFF_OPT_TST(o, TEXT) &&
@@ -1486,7 +1487,7 @@ static void builtin_diffstat(const char *name_a, const char *name_b,
data->added = count_lines(two->data, two->size);
goto free_and_return;
}
- if (fill_mmfile(&mf1, one) < 0 || fill_mmfile(&mf2, two) < 0)
+ if (fill_mmfile(&mf1, one, 0) < 0 || fill_mmfile(&mf2, two, 0) < 0)
die("unable to read files to diff");
if (diff_filespec_is_binary(one) || diff_filespec_is_binary(two)) {
@@ -1528,7 +1529,7 @@ static void builtin_checkdiff(const char *name_a, const char *name_b,
data.o = o;
data.ws_rule = whitespace_rule(attr_path);
- if (fill_mmfile(&mf1, one) < 0 || fill_mmfile(&mf2, two) < 0)
+ if (fill_mmfile(&mf1, one, 0) < 0 || fill_mmfile(&mf2, two, 0) < 0)
die("unable to read files to diff");
/*
@@ -2085,8 +2086,8 @@ static void run_diff(struct diff_filepair *p, struct diff_options *o)
if (DIFF_OPT_TST(o, BINARY)) {
mmfile_t mf;
- if ((!fill_mmfile(&mf, one) && diff_filespec_is_binary(one)) ||
- (!fill_mmfile(&mf, two) && diff_filespec_is_binary(two)))
+ if ((!fill_mmfile(&mf, one, 0) && diff_filespec_is_binary(one)) ||
+ (!fill_mmfile(&mf, two, 0) && diff_filespec_is_binary(two)))
abbrev = 40;
}
strbuf_addf(&msg, "index %.*s..%.*s",
@@ -2983,8 +2984,8 @@ static int diff_get_patch_id(struct diff_options *options, unsigned char *sha1)
diff_fill_sha1_info(p->one);
diff_fill_sha1_info(p->two);
- if (fill_mmfile(&mf1, p->one) < 0 ||
- fill_mmfile(&mf2, p->two) < 0)
+ if (fill_mmfile(&mf1, p->one, 0) < 0 ||
+ fill_mmfile(&mf2, p->two, 0) < 0)
return error("unable to read files to diff");
len1 = remove_space(p->one->path, strlen(p->one->path));
diff --git a/t/t4030-diff-textconv.sh b/t/t4030-diff-textconv.sh
index af94e1a..090a21d 100755
--- a/t/t4030-diff-textconv.sh
+++ b/t/t4030-diff-textconv.sh
@@ -80,7 +80,7 @@ cat >expect.stat <<'EOF'
file | Bin 2 -> 4 bytes
1 files changed, 0 insertions(+), 0 deletions(-)
EOF
-test_expect_failure 'diffstat does not run textconv' '
+test_expect_success 'diffstat does not run textconv' '
echo file diff=fail >.gitattributes &&
git diff --stat HEAD^ HEAD >actual &&
test_cmp expect.stat actual
--
1.6.0.3.523.g38597.dirty
next prev parent reply other threads:[~2008-10-25 0:54 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-28 2:06 Implementation of a "textconv" filter for easy custom diff Matthieu Moy
2008-09-28 2:06 ` [PATCH] Facility to have multiple kinds of drivers for diff Matthieu Moy
2008-09-28 2:06 ` [PATCH] Implement run_command_to_buf (spawn a process and reads its stdout) Matthieu Moy
2008-09-28 2:06 ` [PATCH] Implement a textconv filter for "git diff" Matthieu Moy
2008-09-28 2:06 ` [PATCH] Document the textconv filter Matthieu Moy
2008-09-28 2:06 ` [PATCH] Add a basic test for " Matthieu Moy
2008-09-28 11:07 ` [PATCH] Document " Johannes Sixt
2008-09-28 12:29 ` Matthieu Moy
2008-09-28 4:15 ` [PATCH] Implement a textconv filter for "git diff" Jeff King
2008-09-28 10:00 ` Matthieu Moy
2008-09-28 16:12 ` Jeff King
2008-09-28 4:10 ` Implementation of a "textconv" filter for easy custom diff Jeff King
2008-09-28 9:57 ` Matthieu Moy
2008-09-28 16:11 ` Jeff King
2008-09-30 15:19 ` Matthieu Moy
2008-09-30 16:45 ` Jeff King
2008-10-05 21:41 ` [PATCH 0/4] diff text conversion filter Jeff King
2008-10-05 21:42 ` [PATCH 1/4] t4012: use test_cmp instead of cmp Jeff King
2008-10-05 21:43 ` [PATCH 2/4] diff: unify external diff and funcname parsing code Jeff King
2008-10-05 21:43 ` [PATCH 3/4] diff: introduce diff.<driver>.binary Jeff King
2008-10-07 15:17 ` Johannes Sixt
2008-10-07 15:35 ` Jeff King
2008-10-07 15:54 ` Johannes Sixt
2008-10-12 5:24 ` Junio C Hamano
2008-10-13 1:23 ` Jeff King
2008-10-13 4:00 ` Junio C Hamano
2008-10-13 4:15 ` Jeff King
2008-10-13 6:10 ` Johannes Sixt
2008-10-13 13:54 ` Junio C Hamano
2008-10-13 8:12 ` Matthieu Moy
2008-10-24 2:46 ` Jeff King
2008-10-24 2:48 ` [PATCH 1/5] diff: add missing static declaration Jeff King
2008-10-24 2:50 ` [PATCH 2/5] add userdiff textconv tests Jeff King
2008-10-24 2:53 ` [PATCH 3/5] refactor userdiff textconv code Jeff King
2008-10-24 7:15 ` Johannes Sixt
2008-10-24 12:40 ` Jeff King
2008-10-24 13:51 ` Jeff King
2008-10-24 14:01 ` Johannes Sixt
2008-10-24 14:08 ` Jeff King
2008-10-24 21:12 ` Junio C Hamano
2008-10-24 22:50 ` Jeff King
2008-10-24 22:56 ` Jeff King
2008-10-25 0:48 ` Jeff King
2008-10-25 0:50 ` [PATCH 1/7] diff: add missing static declaration Jeff King
2008-10-25 0:51 ` [PATCH 2/7] add userdiff textconv tests Jeff King
2008-10-25 0:52 ` [PATCH 3/7] textconv: assume text-converted contents are not binary Jeff King
2008-10-25 0:52 ` Jeff King [this message]
2008-10-25 5:41 ` [PATCH 4/7] textconv: don't convert for every operation Junio C Hamano
2008-10-25 7:19 ` Jeff King
2008-10-25 18:32 ` Junio C Hamano
2008-10-25 19:35 ` Jeff King
2008-10-25 23:35 ` Junio C Hamano
2008-10-25 23:48 ` Junio C Hamano
2008-10-26 4:52 ` Jeff King
2008-10-26 4:38 ` Jeff King
2008-10-26 4:41 ` [PATCH v3 1/8] diff: add missing static declaration Jeff King
2008-10-26 4:41 ` [PATCH v3 2/8] document the diff driver textconv feature Jeff King
2008-10-26 4:42 ` [PATCH v3 3/8] add userdiff textconv tests Jeff King
2008-10-26 4:44 ` [PATCH v3 4/8] refactor userdiff textconv code Jeff King
2008-10-26 4:45 ` [PATCH v3 5/8] userdiff: require explicitly allowing textconv Jeff King
2008-10-26 4:46 ` [PATCH v3 6/8] only textconv regular files Jeff King
2008-10-26 4:49 ` [PATCH v3 7/8] wt-status: load diff ui config Jeff King
2008-10-27 5:30 ` Junio C Hamano
2008-10-27 8:23 ` Jeff King
2008-10-26 4:50 ` [PATCH v3 8/8] enable textconv for diff in verbose status/commit Jeff King
2008-10-25 0:54 ` [PATCH 5/7] userdiff: require explicitly allowing textconv Jeff King
2008-10-25 0:54 ` [PATCH 6/7] document the diff driver textconv feature Jeff King
2008-10-25 0:55 ` [PATCH 7/7] only textconv regular files Jeff King
2008-10-24 2:55 ` [PATCH 4/5] userdiff: require explicitly allowing textconv Jeff King
2008-10-24 7:04 ` Johannes Sixt
2008-10-24 2:56 ` [PATCH 5/5] document the diff driver textconv feature Jeff King
2008-10-24 7:02 ` [PATCH 3/4] diff: introduce diff.<driver>.binary Johannes Sixt
2008-10-05 21:43 ` [PATCH 4/4] diff: add filter for converting binary to text Jeff King
2008-10-05 22:03 ` [PATCH 0/4] diff text conversion filter Jakub Narebski
2008-10-06 6:29 ` Johannes Sixt
2008-10-06 6:52 ` Jeff King
2008-10-06 8:55 ` Johannes Sixt
2008-10-06 15:15 ` Matthieu Moy
2008-10-07 1:20 ` Jeff King
2008-10-07 5:52 ` Johannes Sixt
2008-10-07 6:00 ` Jeff King
2008-10-07 6:15 ` Matthieu Moy
2008-10-07 15:46 ` Jeff King
2008-10-07 16:15 ` Johannes Sixt
2008-10-13 1:29 ` Jeff King
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20081025005256.GD23903@coredump.intra.peff.net \
--to=peff@peff.net \
--cc=Matthieu.Moy@imag.fr \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=j.sixt@viscovery.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).