@@ -371,19 +371,21 @@ ifdef::git-rev-list[]
<OID> NUL [<token>=<value> NUL]...
-----------------------------------------------------------------------
+
-Additional object metadata, such as object paths, is printed using the
-`<token>=<value>` form. Token values are printed as-is without any
-encoding/truncation. An OID entry never contains a '=' character and thus
-is used to signal the start of a new object record. Examples:
+Additional object metadata, such as object paths or boundary objects, is
+printed using the `<token>=<value>` form. Token values are printed as-is
+without any encoding/truncation. An OID entry never contains a '=' character
+and thus is used to signal the start of a new object record. Examples:
+
-----------------------------------------------------------------------
<OID> NUL
<OID> NUL path=<path> NUL
+<OID> NUL boundary=yes NUL
-----------------------------------------------------------------------
+
-This mode is only compatible with the `--objects` output option. Also, revision
-and pathspec argument parsing on stdin with the `--stdin` option is NUL byte
-delimited instead of using newlines while in this mode.
+This mode is only compatible with the `--objects` and `--boundary` output
+options. Also, revision and pathspec argument parsing on stdin with the
+`--stdin` option is NUL byte delimited instead of using newlines while in this
+mode.
endif::git-rev-list[]
History Simplification
@@ -240,13 +240,18 @@ static void show_commit(struct commit *commit, void *data)
fputs(info->header_prefix, stdout);
if (revs->include_header) {
- if (!revs->graph)
+ if (!revs->graph && line_term)
fputs(get_revision_mark(revs, commit), stdout);
if (revs->abbrev_commit && revs->abbrev)
fputs(repo_find_unique_abbrev(the_repository, &commit->object.oid, revs->abbrev),
stdout);
else
fputs(oid_to_hex(&commit->object.oid), stdout);
+
+ if (!line_term) {
+ if (commit->object.flags & BOUNDARY)
+ printf("%cboundary=yes", info_term);
+ }
}
if (revs->print_parents) {
struct commit_list *parents = commit->parents;
@@ -779,7 +784,7 @@ int cmd_rev_list(int argc,
if (revs.graph || revs.verbose_header || show_disk_usage ||
info.show_timestamp || info.header_prefix || bisect_list ||
use_bitmap_index || revs.edge_hint || revs.left_right ||
- revs.cherry_mark || arg_missing_action || revs.boundary)
+ revs.cherry_mark || arg_missing_action)
die(_("-z option used with unsupported option"));
}
@@ -217,4 +217,20 @@ test_expect_success 'rev-list -z --objects' '
test_cmp expect actual
'
+test_expect_success 'rev-list -z --boundary' '
+ test_when_finished rm -rf repo &&
+
+ git init repo &&
+ test_commit -C repo 1 &&
+ test_commit -C repo 2 &&
+
+ oid1=$(git -C repo rev-parse HEAD) &&
+ oid2=$(git -C repo rev-parse HEAD~) &&
+
+ printf "%s\0%s\0boundary=yes\0" "$oid1" "$oid2" >expect &&
+ git -C repo rev-list -z --boundary HEAD~.. >actual &&
+
+ test_cmp expect actual
+'
+
test_done
The `--boundary` option for git-rev-list(1) prints boundary objects found while performing the object walk in the form: $ git rev-list --boundary <rev> -<oid> LF Add support for printing boundary objects in a NUL-delimited format when the `-z` option is enabled. $ git rev-list -z --boundary <rev> <oid> NUL boundary=yes NUL In this mode, instead of prefixing the boundary OID with '-', a separate `boundary=yes` token/value pair is appended. Signed-off-by: Justin Tobler <jltobler@gmail.com> --- Documentation/rev-list-options.adoc | 16 +++++++++------- builtin/rev-list.c | 9 +++++++-- t/t6000-rev-list-misc.sh | 16 ++++++++++++++++ 3 files changed, 32 insertions(+), 9 deletions(-)