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

[PATCH 2/2] ls-files: fix broken --no-empty-directory

From
Jeff King <peff@peff.net>
Date
Mar 8, 2009, 01:27 UTC
Message-ID
<20090308012722.GB18714@coredump.intra.peff.net>
In-Reply-To
<20090308012049.GA18616@coredump.intra.peff.net>

Commit ce8e880 converted ls-files to use parseopt; the --no-empty-directory option was converted as an OPT_BIT for "empty-directory" to set the DIR_HIDE_EMPTY_DIRECTORY flag. However, that makes it do the opposite of what it should: --empty-directory would hide, but --no-empty-directory would turn off hiding.

Signed-off-by: Jeff King <peff@peff.net>
---
Two comments on this patch:
  1. The original conversion gave us --empty-directory and
     --no-empty-directory. This one gives us --no-empty-directory and
     --no-no-empty-directory. If we really want to expose a negatable
     flag, then either:
       - the bit needs to change to DIR_SHOW_EMPTY_DIRECTORY; however,
         that changes the behavior for callers who zero the flag field
       - we need a custom option which implements the negation with
         respect to the bit, instead of a vanilla OPT_BIT
  2. I tried to follow the existing style of the t3000 test script
     rather than overhauling it. However, I think the result is a little
     hard to read. We set up expectations for many cases at the
     beginning, and then do all the tests. I think it might read better
     as "set up a case, create expectat, run test".
 builtin-ls-files.c         |    4 ++--
 t/t3000-ls-files-others.sh |   14 +++++++++++++-
 2 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/builtin-ls-files.c b/builtin-ls-files.c
index 1742c0f..437c366 100644
--- a/builtin-ls-files.c
+++ b/builtin-ls-files.c
@@ -454,8 +454,8 @@ int cmd_ls_files(int argc, const char **argv, const char *prefix)
 		OPT_BIT(0, "directory", &dir.flags,
 			"show 'other' directories' name only",
 			DIR_SHOW_OTHER_DIRECTORIES),
-		OPT_BIT(0, "empty-directory", &dir.flags,
-			"list empty directories",
+		OPT_BIT(0, "no-empty-directory", &dir.flags,
+			"don't show empty directories",
 			DIR_HIDE_EMPTY_DIRECTORIES),
 		OPT_BOOLEAN('u', "unmerged", &show_unmerged,
 			"show unmerged files in the output"),
diff --git a/t/t3000-ls-files-others.sh b/t/t3000-ls-files-others.sh
index 36eee0f..379d963 100755
--- a/t/t3000-ls-files-others.sh
+++ b/t/t3000-ls-files-others.sh
@@ -13,12 +13,13 @@ filesystem.
     path2/file2 - a file in a directory
     path3-junk  - a file to confuse things
     path3/file3 - a file in a directory
+    path4       - an empty directory
 '
 . ./test-lib.sh
 
 date >path0
 ln -s xyzzy path1
-mkdir path2 path3
+mkdir path2 path3 path4
 date >path2/file2
 date >path2-junk
 date >path3/file3
@@ -28,6 +29,7 @@ git update-index --add path3-junk path3/file3
 cat >expected1 <<EOF
 expected1
 expected2
+expected3
 output
 path0
 path1
@@ -35,6 +37,8 @@ path2-junk
 path2/file2
 EOF
 sed -e 's|path2/file2|path2/|' <expected1 >expected2
+cat <expected2 >expected3
+echo path4/ >>expected2
 
 test_expect_success \
     'git ls-files --others to show output.' \
@@ -53,4 +57,12 @@ test_expect_success \
     'git ls-files --others --directory should not get confused.' \
     'test_cmp expected2 output'
 
+test_expect_success \
+    'git ls-files --others --directory --no-empty-directory to show output.' \
+    'git ls-files --others --directory --no-empty-directory >output'
+
+test_expect_success \
+    '--no-empty-directory hides empty directory' \
+    'test_cmp expected3 output'
+
 test_done
-- 
1.6.2.198.ge2a58
Previous: Jeff KingNext: Miklos Vajna
Message 3 of 6 in “fix ls-files parseopt regression”
  1. 0/2 fix ls-files parseopt regressionJeff King, Mar 8, 2009
  2. 1/2 t3000: use test_cmp instead of diffJeff King, Mar 8, 2009
  3. 2/2 ls-files: fix broken --no-empty-directoryJeff King, Mar 8, 2009
  4. Miklos VajnaMar 8, 2009
  5. Jeff KingMar 10, 2009
  6. Miklos VajnaMar 10, 2009

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.