Staging
v0.5.1
https://github.com/git/git
Revision 297ca895a27a6bbdb7906371d533f72a12ad25b2 authored by Junio C Hamano on 20 January 2022, 23:25:38 UTC, committed by Junio C Hamano on 20 January 2022, 23:25:38 UTC
"git branch -h" incorrectly said "--track[=direct|inherit]",
implying that "--trackinherit" is a valid option, which has been
corrected.
source: <3de40324bea6a1dd9bca2654721471e3809e87d8.1642538935.git.steadmon@google.com>
source: <c3c26192-aee9-185a-e559-b8735139e49c@web.de>

* js/branch-track-inherit:
  branch,checkout: fix --track documentation
2 parent s 50b2d72 + 6327f0e
Raw File
Tip revision: 297ca895a27a6bbdb7906371d533f72a12ad25b2 authored by Junio C Hamano on 20 January 2022, 23:25:38 UTC
Merge branch 'js/branch-track-inherit'
Tip revision: 297ca89
t3011-common-prefixes-and-directory-traversal.sh
#!/bin/sh

test_description='directory traversal handling, especially with common prefixes'

. ./test-lib.sh

test_expect_success 'setup' '
	test_commit hello &&

	>empty &&
	mkdir untracked_dir &&
	>untracked_dir/empty &&
	git init untracked_repo &&
	>untracked_repo/empty &&

	cat <<-EOF >.gitignore &&
	ignored
	an_ignored_dir/
	EOF
	mkdir an_ignored_dir &&
	mkdir an_untracked_dir &&
	>an_ignored_dir/ignored &&
	>an_ignored_dir/untracked &&
	>an_untracked_dir/ignored &&
	>an_untracked_dir/untracked
'

test_expect_success 'git ls-files -o shows the right entries' '
	cat <<-EOF >expect &&
	.gitignore
	actual
	an_ignored_dir/ignored
	an_ignored_dir/untracked
	an_untracked_dir/ignored
	an_untracked_dir/untracked
	empty
	expect
	untracked_dir/empty
	untracked_repo/
	EOF
	git ls-files -o >actual &&
	test_cmp expect actual
'

test_expect_success 'git ls-files -o --exclude-standard shows the right entries' '
	cat <<-EOF >expect &&
	.gitignore
	actual
	an_untracked_dir/untracked
	empty
	expect
	untracked_dir/empty
	untracked_repo/
	EOF
	git ls-files -o --exclude-standard >actual &&
	test_cmp expect actual
'

test_expect_success 'git ls-files -o untracked_dir recurses' '
	echo untracked_dir/empty >expect &&
	git ls-files -o untracked_dir >actual &&
	test_cmp expect actual
'

test_expect_success 'git ls-files -o untracked_dir/ recurses' '
	echo untracked_dir/empty >expect &&
	git ls-files -o untracked_dir/ >actual &&
	test_cmp expect actual
'

test_expect_success 'git ls-files -o --directory untracked_dir does not recurse' '
	echo untracked_dir/ >expect &&
	git ls-files -o --directory untracked_dir >actual &&
	test_cmp expect actual
'

test_expect_success 'git ls-files -o --directory untracked_dir/ does not recurse' '
	echo untracked_dir/ >expect &&
	git ls-files -o --directory untracked_dir/ >actual &&
	test_cmp expect actual
'

test_expect_success 'git ls-files -o untracked_repo does not recurse' '
	echo untracked_repo/ >expect &&
	git ls-files -o untracked_repo >actual &&
	test_cmp expect actual
'

test_expect_success 'git ls-files -o untracked_repo/ does not recurse' '
	echo untracked_repo/ >expect &&
	git ls-files -o untracked_repo/ >actual &&
	test_cmp expect actual
'

test_expect_success 'git ls-files -o untracked_dir untracked_repo recurses into untracked_dir only' '
	cat <<-EOF >expect &&
	untracked_dir/empty
	untracked_repo/
	EOF
	git ls-files -o untracked_dir untracked_repo >actual &&
	test_cmp expect actual
'

test_expect_success 'git ls-files -o untracked_dir/ untracked_repo/ recurses into untracked_dir only' '
	cat <<-EOF >expect &&
	untracked_dir/empty
	untracked_repo/
	EOF
	git ls-files -o untracked_dir/ untracked_repo/ >actual &&
	test_cmp expect actual
'

test_expect_success 'git ls-files -o --directory untracked_dir untracked_repo does not recurse' '
	cat <<-EOF >expect &&
	untracked_dir/
	untracked_repo/
	EOF
	git ls-files -o --directory untracked_dir untracked_repo >actual &&
	test_cmp expect actual
'

test_expect_success 'git ls-files -o --directory untracked_dir/ untracked_repo/ does not recurse' '
	cat <<-EOF >expect &&
	untracked_dir/
	untracked_repo/
	EOF
	git ls-files -o --directory untracked_dir/ untracked_repo/ >actual &&
	test_cmp expect actual
'

test_expect_success 'git ls-files -o .git shows nothing' '
	git ls-files -o .git >actual &&
	test_must_be_empty actual
'

test_expect_success 'git ls-files -o .git/ shows nothing' '
	git ls-files -o .git/ >actual &&
	test_must_be_empty actual
'

test_expect_success FUNNYNAMES 'git ls-files -o untracked_* recurses appropriately' '
	mkdir "untracked_*" &&
	>"untracked_*/empty" &&

	cat <<-EOF >expect &&
	untracked_*/empty
	untracked_dir/empty
	untracked_repo/
	EOF
	git ls-files -o "untracked_*" >actual &&
	test_cmp expect actual
'

# It turns out fill_directory returns the right paths, but ls-files' post-call
# filtering in show_dir_entry() via calling dir_path_match() which ends up
# in git_fnmatch() has logic for PATHSPEC_ONESTAR that assumes the pathspec
# must match the full path; it doesn't check it for matching a leading
# directory.
test_expect_failure FUNNYNAMES 'git ls-files -o untracked_*/ recurses appropriately' '
	cat <<-EOF >expect &&
	untracked_*/empty
	untracked_dir/empty
	untracked_repo/
	EOF
	git ls-files -o "untracked_*/" >actual &&
	test_cmp expect actual
'

test_expect_success FUNNYNAMES 'git ls-files -o --directory untracked_* does not recurse' '
	cat <<-EOF >expect &&
	untracked_*/
	untracked_dir/
	untracked_repo/
	EOF
	git ls-files -o --directory "untracked_*" >actual &&
	test_cmp expect actual
'

test_expect_success FUNNYNAMES 'git ls-files -o --directory untracked_*/ does not recurse' '
	cat <<-EOF >expect &&
	untracked_*/
	untracked_dir/
	untracked_repo/
	EOF
	git ls-files -o --directory "untracked_*/" >actual &&
	test_cmp expect actual
'

test_expect_success 'git ls-files -o consistent between one or two dirs' '
	git ls-files -o --exclude-standard an_ignored_dir/ an_untracked_dir/ >tmp &&
	! grep ^an_ignored_dir/ tmp >expect &&
	git ls-files -o --exclude-standard an_ignored_dir/ >actual &&
	test_cmp expect actual
'

# ls-files doesn't have a way to request showing both untracked and ignored
# files at the same time, so use `git status --ignored`
test_expect_success 'git status --ignored shows same files under dir with or without pathspec' '
	cat <<-EOF >expect &&
	?? an_untracked_dir/
	!! an_untracked_dir/ignored
	EOF
	git status --porcelain --ignored >output &&
	grep an_untracked_dir output >expect &&
	git status --porcelain --ignored an_untracked_dir/ >actual &&
	test_cmp expect actual
'

test_done
back to top