git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: git archive and glob pathspecs

From
Duy Nguyen <pclouds@gmail.com>
Date
Sep 3, 2014, 06:21 UTC
Message-ID
<CACsJy8BZBe1XV-uM8VHeGcDntn6vqJrNsWi6wTdQ1+fWAAsGFg@mail.gmail.com>
In-Reply-To
<7752133.8a4hJ4krff@al>
On Wed, Sep 3, 2014 at 5:17 AM, Peter Wu <peter@lekensteyn.nl> wrote:
Show 16 quoted lines
> Hi,
>
> The `git archive` seems to accept a pathspec judging from the error message (git
> version 2.1.0):
>
>     git archive HEAD -- :x
>     fatal: pathspec 'x' did not match any files
>
> When I try to use deeper glob specs however, it throws an error (this also
> happens if I use `:(glob)**/Makefile`, tested in the git source tree):
>
>     $ git archive HEAD -- ':(glob)*/Makefile'
>     fatal: pathspec '*/Makefile' did not match any files
>
> Strange enough, command `git log -- ':(glob)*/Makefile'` works. Any idea what is
> wrong?

There may be something wrong. This patch seems to make it work for me, but it includes lots of empty directories. I'll have a closer look later (btw it's surprising that negative pathspec works too..)

diff --git a/archive.c b/archive.c
index 3fc0fb2..a5be58d 100644
--- a/archive.c
+++ b/archive.c
@@ -221,6 +221,7 @@ static int path_exists(struct tree *tree, const char *path)
  int ret;

  parse_pathspec(&pathspec, 0, 0, "", paths);
+ pathspec.recursive = 1;
  ret = read_tree_recursive(tree, "", 0, 0, &pathspec, reject_entry, NULL);
  free_pathspec(&pathspec);
  return ret != 0;
@@ -237,6 +238,7 @@ static void parse_pathspec_arg(const char **pathspec,
  parse_pathspec(&ar_args->pathspec, 0,
        PATHSPEC_PREFER_FULL,
        "", pathspec);
+ ar_args->pathspec.recursive = 1;
  if (pathspec) {
  while (*pathspec) {
  if (**pathspec && !path_exists(ar_args->tree, *pathspec))
-- 
Duy
Previous: Peter WuNext: Peter Wu
Message 2 of 9 in “git archive and glob pathspecs”
  1. Peter WuSep 2, 2014
  2. Duy NguyenSep 3, 2014
  3. Peter WuSep 13, 2014
  4. archive: support filtering paths with globNguyễn Thái Ngọc Duy, Sep 4, 2014
  5. Peter WuSep 13, 2014
  6. archive: support filtering paths with globNguyễn Thái Ngọc Duy, Sep 21, 2014
  7. Junio C HamanoSep 22, 2014
  8. Duy NguyenSep 22, 2014
  9. Junio C HamanoSep 23, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.