Thread (15 messages) 15 messages, 4 authors, 2017-09-13

Re: [PATCH 4/4] archive: queue directories for all types of pathspecs

From: René Scharfe <hidden>
Date: 2017-08-19 16:54:03

Am 19.08.2017 um 07:33 schrieb René Scharfe:
When read_tree_recursive() encounters a directory excluded by a pathspec
then it enters it anyway because it might contain included entries.  It
calls the callback function before it is able to decide if the directory
is actually needed.

For that reason git archive adds directories to a queue and writes
entries for them only when it encounters the first child item -- but
only if pathspecs with wildcards are used.  Do the same for literal
pathspecs as well, as the reasoning above applies to them, too.  This
prevents git archive from writing entries for excluded directories.
This breaks the test "archive empty subtree with no pathspec" in t5004 by
omitting the empty directory from the archive.  Sorry for missing that!

This is kind of a bonus patch, so please discard it for now; the first
three are OK IMHO.

A better version of this patch would at least update t5004 as well, but
there might be a better way.
quoted hunk ↗ jump to hunk
Signed-off-by: Rene Scharfe <redacted>
---
  archive.c               | 2 +-
  t/t5001-archive-attr.sh | 2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/archive.c b/archive.c
index 1ab8d3a1d7..174c0555b6 100644
--- a/archive.c
+++ b/archive.c
@@ -123,7 +123,7 @@ static int check_attr_export_subst(const struct attr_check *check)
  
  static int should_queue_directories(const struct archiver_args *args)
  {
-	return args->pathspec.has_wildcard;
+	return args->pathspec.nr;
  }
  
  static int write_archive_entry(const unsigned char *sha1, const char *base,
diff --git a/t/t5001-archive-attr.sh b/t/t5001-archive-attr.sh
index 897f6f06d5..e9aa97117a 100755
--- a/t/t5001-archive-attr.sh
+++ b/t/t5001-archive-attr.sh
@@ -73,7 +73,7 @@ test_expect_missing	archive-pathspec/ignored-by-tree
  test_expect_missing	archive-pathspec/ignored-by-tree.d
  test_expect_missing	archive-pathspec/ignored-by-tree.d/file
  test_expect_exists	archive-pathspec/ignored-by-worktree
-test_expect_missing	archive-pathspec/excluded-by-pathspec.d failure
+test_expect_missing	archive-pathspec/excluded-by-pathspec.d
  test_expect_missing	archive-pathspec/excluded-by-pathspec.d/file
  
  test_expect_success 'git archive with wildcard pathspec' '
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help