Commit Diff


commit - 3ca1653055ac692a4788d256c94d2aabc24552cb
commit + f02ba292c92e97724d810282babcb71cafbed10b
blob - 8de680cd25a36dc61a0b03b3ddcc44aafad31907
blob + 787e05f69344a61688a6493bbc4e89b9ecea0096
--- regress/cmdline/status.sh
+++ regress/cmdline/status.sh
@@ -45,4 +45,86 @@ function test_status_basic {
 	test_done "$testroot" "0"
 }
 
+function test_status_subdir_no_mods {
+	local testroot=`test_init status_subdir_no_mods 1`
+
+	mkdir $testroot/repo/Basic/
+	mkdir $testroot/repo/Basic/Targets/
+	touch $testroot/repo/Basic/Targets/AArch64.cpp
+	touch $testroot/repo/Basic/Targets.cpp
+	touch $testroot/repo/Basic/Targets.h
+	(cd $testroot/repo && git add .)
+	git_commit $testroot/repo -m "add subdir with files"
+
+	got checkout $testroot/repo $testroot/wt > /dev/null
+	if [ "$?" != "0" ]; then
+		test_done "$testroot" "$?"
+		return 1
+	fi
+
+	touch $testroot/stdout.expected
+
+	# This used to erroneously print:
+	#
+	# !  Basic/Targets.cpp
+	# ?  Basic/Targets.cpp
+	(cd $testroot/wt && got status > $testroot/stdout)
+
+	cmp $testroot/stdout.expected $testroot/stdout
+	if [ "$?" != "0" ]; then
+		diff -u $testroot/stdout.expected $testroot/stdout
+		test_done "$testroot" "$?"
+		return 1
+	fi
+
+	test_done "$testroot" "0"
+}
+
+function test_status_subdir_no_mods2 {
+	local testroot=`test_init status_subdir_no_mods2 1`
+
+	mkdir $testroot/repo/AST
+	touch $testroot/repo/AST/APValue.cpp
+	mkdir $testroot/repo/ASTMatchers
+	touch $testroot/repo/ASTMatchers/ASTMatchFinder.cpp
+	mkdir $testroot/repo/Frontend
+	touch $testroot/repo/Frontend/ASTConsumers.cpp
+	mkdir $testroot/repo/Frontend/Rewrite
+	touch $testroot/repo/Frontend/Rewrite/CMakeLists.txt
+	mkdir $testroot/repo/FrontendTool
+	touch $testroot/repo/FrontendTool/CMakeLists.txt
+	touch $testroot/repo/FrontendTool/ExecuteCompilerInvocation.cpp
+	(cd $testroot/repo && git add .)
+	git_commit $testroot/repo -m "add subdir with files"
+
+	got checkout $testroot/repo $testroot/wt > /dev/null
+	if [ "$?" != "0" ]; then
+		test_done "$testroot" "$?"
+		return 1
+	fi
+
+	touch $testroot/stdout.expected
+
+	# This used to erroneously print:
+	#
+	# !  AST/APValue.cpp
+	# ?  AST/APValue.cpp
+	# !  Frontend/ASTConsumers.cpp
+	# !  Frontend/Rewrite/CMakeLists.txt
+	# ?  Frontend/ASTConsumers.cpp
+	# ?  Frontend/Rewrite/CMakeLists.txt
+	(cd $testroot/wt && got status > $testroot/stdout)
+
+	cmp $testroot/stdout.expected $testroot/stdout
+	if [ "$?" != "0" ]; then
+		diff -u $testroot/stdout.expected $testroot/stdout
+		test_done "$testroot" "$?"
+		return 1
+	fi
+
+	test_done "$testroot" "0"
+}
+
 run_test test_status_basic
+run_test test_status_subdir_no_mods
+run_test test_status_subdir_no_mods2