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

[PATCH v3] sparse-checkout: improve OS ls compatibility

From
Ed Maste <emaste@freebsd.org>
Date
Dec 20, 2019, 15:38 UTC
Message-ID
<20191220153814.54899-1-emaste@FreeBSD.org>
In-Reply-To
<20191219015833.49314-1-emaste@FreeBSD.org>
On FreeBSD, when executed by root ls enables the '-A' option:
  -A  Include directory entries whose names begin with a dot (`.')
      except for . and ...  Automatically set for the super-user unless
      -I is specified.

As a result the .git directory appeared in the output when run as root. Simulate no-dotfile ls behaviour using a shell glob.

Helped-by: Eric Wong <e@80x24.org>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Ed Maste <emaste@FreeBSD.org>
---
Since v2, rename the function list_files and add a comment explaining why
it's not just using ls.  Note that this change is not necessary when running
the tests as an unprivileged user on FreeBSD, and the proposed FreeBSD CI
patch has been updated to do so.  That said I still believe we should make
either this change or add a prerequisite so this test does not run as root
on FreeBSD.
 t/t1091-sparse-checkout-builtin.sh | 35 ++++++++++++++++++------------
 1 file changed, 21 insertions(+), 14 deletions(-)
diff --git a/t/t1091-sparse-checkout-builtin.sh b/t/t1091-sparse-checkout-builtin.sh
index cee98a1c8a..168702784d 100755
--- a/t/t1091-sparse-checkout-builtin.sh
+++ b/t/t1091-sparse-checkout-builtin.sh
@@ -4,6 +4,13 @@ test_description='sparse checkout builtin tests'
 
 . ./test-lib.sh
 
+# List files in a directory, excluding hidden dot files (such as .git).
+# This is similar to ls, but some ls implementations include dot files by
+# default when run as root.
+list_files() {
+	(cd "$1" && printf '%s\n' *)
+}
+
 test_expect_success 'setup' '
 	git init repo &&
 	(
@@ -50,7 +57,7 @@ test_expect_success 'git sparse-checkout init' '
 	EOF
 	test_cmp expect repo/.git/info/sparse-checkout &&
 	test_cmp_config -C repo true core.sparsecheckout &&
-	ls repo >dir  &&
+	list_files repo >dir  &&
 	echo a >expect &&
 	test_cmp expect dir
 '
@@ -73,7 +80,7 @@ test_expect_success 'init with existing sparse-checkout' '
 		*folder*
 	EOF
 	test_cmp expect repo/.git/info/sparse-checkout &&
-	ls repo >dir  &&
+	list_files repo >dir  &&
 	cat >expect <<-EOF &&
 		a
 		folder1
@@ -90,7 +97,7 @@ test_expect_success 'clone --sparse' '
 		!/*/
 	EOF
 	test_cmp expect actual &&
-	ls clone >dir &&
+	list_files clone >dir &&
 	echo a >expect &&
 	test_cmp expect dir
 '
@@ -119,7 +126,7 @@ test_expect_success 'set sparse-checkout using builtin' '
 	git -C repo sparse-checkout list >actual &&
 	test_cmp expect actual &&
 	test_cmp expect repo/.git/info/sparse-checkout &&
-	ls repo >dir  &&
+	list_files repo >dir  &&
 	cat >expect <<-EOF &&
 		a
 		folder1
@@ -139,7 +146,7 @@ test_expect_success 'set sparse-checkout using --stdin' '
 	git -C repo sparse-checkout list >actual &&
 	test_cmp expect actual &&
 	test_cmp expect repo/.git/info/sparse-checkout &&
-	ls repo >dir  &&
+	list_files repo >dir  &&
 	cat >expect <<-EOF &&
 		a
 		folder1
@@ -154,7 +161,7 @@ test_expect_success 'cone mode: match patterns' '
 	git -C repo read-tree -mu HEAD 2>err &&
 	test_i18ngrep ! "disabling cone patterns" err &&
 	git -C repo reset --hard &&
-	ls repo >dir  &&
+	list_files repo >dir  &&
 	cat >expect <<-EOF &&
 		a
 		folder1
@@ -177,7 +184,7 @@ test_expect_success 'sparse-checkout disable' '
 	test_path_is_file repo/.git/info/sparse-checkout &&
 	git -C repo config --list >config &&
 	test_must_fail git config core.sparseCheckout &&
-	ls repo >dir &&
+	list_files repo >dir &&
 	cat >expect <<-EOF &&
 		a
 		deep
@@ -191,24 +198,24 @@ test_expect_success 'cone mode: init and set' '
 	git -C repo sparse-checkout init --cone &&
 	git -C repo config --list >config &&
 	test_i18ngrep "core.sparsecheckoutcone=true" config &&
-	ls repo >dir  &&
+	list_files repo >dir  &&
 	echo a >expect &&
 	test_cmp expect dir &&
 	git -C repo sparse-checkout set deep/deeper1/deepest/ 2>err &&
 	test_must_be_empty err &&
-	ls repo >dir  &&
+	list_files repo >dir  &&
 	cat >expect <<-EOF &&
 		a
 		deep
 	EOF
 	test_cmp expect dir &&
-	ls repo/deep >dir  &&
+	list_files repo/deep >dir  &&
 	cat >expect <<-EOF &&
 		a
 		deeper1
 	EOF
 	test_cmp expect dir &&
-	ls repo/deep/deeper1 >dir  &&
+	list_files repo/deep/deeper1 >dir  &&
 	cat >expect <<-EOF &&
 		a
 		deepest
@@ -234,7 +241,7 @@ test_expect_success 'cone mode: init and set' '
 		folder1
 		folder2
 	EOF
-	ls repo >dir &&
+	list_files repo >dir &&
 	test_cmp expect dir
 '
 
@@ -256,7 +263,7 @@ test_expect_success 'revert to old sparse-checkout on bad update' '
 	test_must_fail git -C repo sparse-checkout set deep/deeper1 2>err &&
 	test_i18ngrep "cannot set sparse-checkout patterns" err &&
 	test_cmp repo/.git/info/sparse-checkout expect &&
-	ls repo/deep >dir &&
+	list_files repo/deep >dir &&
 	cat >expect <<-EOF &&
 		a
 		deeper1
@@ -313,7 +320,7 @@ test_expect_success 'cone mode: set with core.ignoreCase=true' '
 		/folder1/
 	EOF
 	test_cmp expect repo/.git/info/sparse-checkout &&
-	ls repo >dir &&
+	list_files repo >dir &&
 	cat >expect <<-EOF &&
 		a
 		folder1
-- 
2.24.0
Previous: Denton LiuNext: Derrick Stolee
Message 14 of 24 in “sparse-checkout: improve OS ls compatibility”
  1. sparse-checkout: improve OS ls compatibilityEd Maste, Dec 19, 2019
  2. Derrick StoleeDec 19, 2019
  3. Ed MasteDec 19, 2019
  4. Derrick StoleeDec 19, 2019
  5. Eric WongDec 19, 2019
  6. Derrick StoleeDec 19, 2019
  7. Ed MasteDec 19, 2019
  8. Derrick StoleeDec 19, 2019
  9. Junio C HamanoDec 19, 2019
  10. Ed MasteDec 19, 2019
  11. Junio C HamanoDec 19, 2019
  12. sparse-checkout: improve OS ls compatibilityEd Maste, Dec 19, 2019
  13. Denton LiuDec 19, 2019
  14. sparse-checkout: improve OS ls compatibilityEd Maste, Dec 20, 2019
  15. Derrick StoleeDec 20, 2019
  16. Junio C HamanoDec 20, 2019
  17. Eric SunshineDec 20, 2019
  18. Ed MasteDec 20, 2019
  19. Junio C HamanoDec 20, 2019
  20. Eric SunshineDec 20, 2019
  21. Ed MasteDec 20, 2019
  22. Junio C HamanoDec 20, 2019
  23. Eric SunshineDec 20, 2019
  24. sparse-checkout: improve OS ls compatibilityEd Maste, Dec 20, 2019

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.