diff options
| author | Justin Tobler <jltobler@gmail.com> | 2025-03-19 13:34:09 -0500 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2025-03-21 03:40:02 -0700 |
| commit | 1c3c1ab3d2a9558050ef6beee0a416700f6b953f (patch) | |
| tree | 7a89a1be2d2a4cacbb38ed3ee5a5d6c46b4f1776 | |
| parent | c3d59c2e70c939c39cbeb545b30899d52b650dfc (diff) | |
| download | git-1c3c1ab3d2a9558050ef6beee0a416700f6b953f.tar.xz | |
rev-list: support NUL-delimited --boundary option
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
| -rw-r--r-- | Documentation/rev-list-options.adoc | 12 | ||||
| -rw-r--r-- | builtin/rev-list.c | 9 | ||||
| -rwxr-xr-x | t/t6000-rev-list-misc.sh | 16 |
3 files changed, 30 insertions, 7 deletions
diff --git a/Documentation/rev-list-options.adoc b/Documentation/rev-list-options.adoc index aef83813b8..3fc9902d6b 100644 --- a/Documentation/rev-list-options.adoc +++ b/Documentation/rev-list-options.adoc @@ -371,17 +371,19 @@ 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. +This mode is only compatible with the `--objects` and `--boundary` output +options. endif::git-rev-list[] History Simplification diff --git a/builtin/rev-list.c b/builtin/rev-list.c index 17de99d9ca..bcb880f109 100644 --- a/builtin/rev-list.c +++ b/builtin/rev-list.c @@ -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; @@ -778,7 +783,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")); } diff --git a/t/t6000-rev-list-misc.sh b/t/t6000-rev-list-misc.sh index 886e2fc710..33881274a4 100755 --- a/t/t6000-rev-list-misc.sh +++ b/t/t6000-rev-list-misc.sh @@ -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" "$oid2" "$oid1" >expect && + git -C repo rev-list -z --boundary HEAD~.. >actual && + + test_cmp expect actual +' + test_done |
