rev-list: teach --no-object-names to enable piping
commit42357b4e8b8bfb2626208c8816e9d8a2604d17b8
authorEmily Shaffer <emilyshaffer@google.com>
Wed, 19 Jun 2019 20:56:56 +0000 (19 13:56 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 20 Jun 2019 20:13:04 +0000 (20 13:13 -0700)
tree9e038a28f0d010f9cc80bcbea6da03b97d8256aa
parent0aae918dd929862d3ce0ea2960897787bb269a3b
rev-list: teach --no-object-names to enable piping

Allow easier parsing by cat-file by giving rev-list an option to print
only the OID of a non-commit object without any additional information.
This is a short-term shim; later on, rev-list should be taught how to
print the types of objects it finds in a format similar to cat-file's.

Before this commit, the output from rev-list needed to be massaged
before being piped to cat-file, like so:

  git rev-list --objects HEAD | cut -f 1 -d ' ' |
    git cat-file --batch-check

This was especially unexpected when dealing with root trees, as an
invisible whitespace exists at the end of the OID:

  git rev-list --objects --filter=tree:1 --max-count=1 HEAD |
    xargs -I% echo "AA%AA"

Now, it can be piped directly, as in the added test case:

  git rev-list --objects --no-object-names HEAD | git cat-file --batch-check

Signed-off-by: Emily Shaffer <emilyshaffer@google.com>
Change-Id: I489bdf0a8215532e540175188883ff7541d70e1b
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-rev-list.txt
Documentation/rev-list-options.txt
builtin/rev-list.c
t/t6000-rev-list-misc.sh