Jeff King <> writes:

> We need to revert that commit before the release. It can either be
> replaced with:
>   1. A "--split" (or similar) option to use the behavior only when
>      desired.
>   2. Enabling splitting only when %(rest) is used in the output format.
> And I suppose it is too late in the cycle for either of those to go into
> v1.8.4. That's a shame, but I think losing that particular patch does
> not affect the rest of the series, so we are OK to ship without it.
> Thanks Joey for a timely bug report.

Thanks.  Will do this to jk/cat-file-batch-optim topic and merge it
to 'master' for now.

-- >8 --
Subject: [PATCH] Revert "cat-file: split --batch input lines on whitespace"

This reverts commit c334b87b30c1464a1ab563fe1fb8de5eaf0e5bac; the
update assumed that people only used the command to read from
"rev-list --objects" output, whose lines begin with a 40-hex object
name followed by a whitespace, but it turns out that scripts feed
random extended SHA-1 expressions (e.g. "HEAD:$pathname") in which
a whitespace has to be kept.
 Documentation/git-cat-file.txt | 10 ++--------
 builtin/cat-file.c             | 20 +-------------------
 t/            |  7 -------
 3 files changed, 3 insertions(+), 34 deletions(-)

diff --git a/Documentation/git-cat-file.txt b/Documentation/git-cat-file.txt
index 3ddec0b..10fbc6a 100644
--- a/Documentation/git-cat-file.txt
+++ b/Documentation/git-cat-file.txt
@@ -88,10 +88,8 @@ BATCH OUTPUT
 If `--batch` or `--batch-check` is given, `cat-file` will read objects
 from stdin, one per line, and print information about them.
-Each line is split at the first whitespace boundary. All characters
-before that whitespace are considered as a whole object name, and are
-parsed as if given to linkgit:git-rev-parse[1]. Characters after that
-whitespace can be accessed using the `%(rest)` atom (see below).
+Each line is considered as a whole object name, and is parsed as if
+given to linkgit:git-rev-parse[1].
 You can specify the information shown for each object by using a custom
 `<format>`. The `<format>` is copied literally to stdout for each
@@ -112,10 +110,6 @@ newline. The available atoms are:
        The size, in bytes, that the object takes up on disk. See the
        note about on-disk sizes in the `CAVEATS` section below.
-       The text (if any) found after the first run of whitespace on the
-       input line (i.e., the "rest" of the line).
 If no format is specified, the default format is `%(objectname)
 %(objecttype) %(objectsize)`.
diff --git a/builtin/cat-file.c b/builtin/cat-file.c
index 163ce6c..4253460 100644
--- a/builtin/cat-file.c
+++ b/builtin/cat-file.c
@@ -119,7 +119,6 @@ struct expand_data {
        enum object_type type;
        unsigned long size;
        unsigned long disk_size;
-       const char *rest;
         * If mark_query is true, we do not expand anything, but rather
@@ -164,9 +163,6 @@ static void expand_atom(struct strbuf *sb, const char 
*atom, int len,
                        data->info.disk_sizep = &data->disk_size;
                        strbuf_addf(sb, "%lu", data->disk_size);
-       } else if (is_atom("rest", atom, len)) {
-               if (!data->mark_query && data->rest)
-                       strbuf_addstr(sb, data->rest);
        } else
                die("unknown format element: %.*s", len, atom);
@@ -277,21 +273,7 @@ static int batch_objects(struct batch_options *opt)
        warn_on_object_refname_ambiguity = 0;
        while (strbuf_getline(&buf, stdin, '\n') != EOF) {
-               char *p;
-               int error;
-               /*
-                * Split at first whitespace, tying off the beginning of the
-                * string and saving the remainder (or NULL) in
-                */
-               p = strpbrk(buf.buf, " \t");
-               if (p) {
-                       while (*p && strchr(" \t", *p))
-                               *p++ = '\0';
-               }
-      = p;
-               error = batch_one_object(buf.buf, opt, &data);
+               int error = batch_one_object(buf.buf, opt, &data);
                if (error)
                        return error;
diff --git a/t/ b/t/
index d499d02..4e911fb 100755
--- a/t/
+++ b/t/
@@ -78,13 +78,6 @@ $content"
        echo $sha1 | git cat-file --batch-check="%(objecttype) %(objectname)" 
>actual &&
        test_cmp expect actual
-    test_expect_success '--batch-check with %(rest)' '
-       echo "$type this is some extra content" >expect &&
-       echo "$sha1    this is some extra content" |
-               git cat-file --batch-check="%(objecttype) %(rest)" >actual &&
-       test_cmp expect actual
-    '
 hello_content="Hello World"

To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to
More majordomo info at

Reply via email to