To write a bundle’s table of contents, the name passed on the command line for each ref is needed. Unfortunately, names passed through stdin are put in a temporary buffer and then freed; the random gibberish that tends to replace them does not look like a meaningful ref name to bundle_list_refs(), so no valid toc entries are found and ‘git bundle --stdin’ thinks it has been asked to create an empty bundle.
So teach the revision walker to keep rev names after reading them from stdin. This fixes ‘git bundle --stdin’ at the cost of a memory leak. Reported-by: Joey Hess <j...@kitenet.net> Signed-off-by: Jonathan Nieder <jrnie...@gmail.com> --- revision.c | 2 +- t/t5704-bundle.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/revision.c b/revision.c index f4b8b38..cf86af3 100644 --- a/revision.c +++ b/revision.c @@ -1022,7 +1022,7 @@ static void read_revisions_from_stdin(struct rev_info *revs, const char ***prune } die("options not supported in --stdin mode"); } - if (handle_revision_arg(sb.buf, revs, 0, 1)) + if (handle_revision_arg(xstrdup(sb.buf), revs, 0, 1)) die("bad revision '%s'", sb.buf); } if (seen_dashdash) diff --git a/t/t5704-bundle.sh b/t/t5704-bundle.sh index ddc3dc5..cc463f3 100755 --- a/t/t5704-bundle.sh +++ b/t/t5704-bundle.sh @@ -30,7 +30,7 @@ test_expect_success 'tags can be excluded by rev-list options' ' ' -test_expect_failure 'bundle --stdin' ' +test_expect_success 'bundle --stdin' ' echo master | git bundle create stdin-bundle.bdl --stdin && git ls-remote stdin-bundle.bdl >output && @@ -38,7 +38,7 @@ test_expect_failure 'bundle --stdin' ' ' -test_expect_failure 'bundle --stdin <rev-list options>' ' +test_expect_success 'bundle --stdin <rev-list options>' ' echo master | git bundle create hybrid-bundle.bdl --stdin tag && git ls-remote hybrid-bundle.bdl >output && -- 1.7.1.198.g8d802 -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org