archive: handle commits with an empty tree
authorJeff King <peff@peff.net>
Mon, 11 Mar 2013 01:32:32 +0000 (21:32 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 11 Mar 2013 05:25:22 +0000 (22:25 -0700)
commitbd54cf17a4acfb9555b8a83b7e74fb0274c38bb4
treed6e40cd0431e51757c4615d7ab3ef811f2058684
parentf838ce5826a2deffff7b70986fc7392d7114013e
archive: handle commits with an empty tree

git-archive relies on get_pathspec to convert its argv into
a list of pathspecs. When get_pathspec is given an empty
argv list, it returns a single pathspec, the empty string,
to indicate that everything matches. When we feed this to
our path_exists function, we typically see that the pathspec
turns up at least one item in the tree, and we are happy.

But when our tree is empty, we erroneously think it is
because the pathspec is too limited, when in fact it is
simply that there is nothing to be found in the tree. This
is a weird corner case, but the correct behavior is almost
certainly to produce an empty archive, not to exit with an
error.

This patch teaches git-archive to create empty archives when
there is no pathspec given (we continue to complain if a
pathspec is given, since it obviously is not matched). It
also confirms that the tar and zip writers produce sane
output in this instance.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
archive.c
t/t5004-archive-corner-cases.sh [new file with mode: 0755]
t/t5004/empty.zip [new file with mode: 0644]