rev-parse: add option --resolve-git-dir <path>
Check if <path> is a valid git-dir or a valid git-file that points to a valid git-dir. We want tests to be independent from the fact that a git-dir may be a git-file. Thus we changed tests to use this feature. Signed-off-by: Fredrik Gustafsson <iveqy@iveqy.com> Mentored-by: Jens Lehmann <Jens.Lehmann@web.de> Mentored-by: Heiko Voigt <hvoigt@hvoigt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									e7a85be3cf
								
							
						
					
					
						commit
						abc06822af
					
				|  | @ -180,6 +180,10 @@ print a message to stderr and exit with nonzero status. | ||||||
| <args>...:: | <args>...:: | ||||||
| 	Flags and parameters to be parsed. | 	Flags and parameters to be parsed. | ||||||
|  |  | ||||||
|  | --resolve-git-dir <path>:: | ||||||
|  | 	Check if <path> is a valid git-dir or a git-file pointing to a valid | ||||||
|  | 	git-dir. If <path> is a valid git-dir the resolved path to git-dir will | ||||||
|  | 	be printed. | ||||||
|  |  | ||||||
| include::revisions.txt[] | include::revisions.txt[] | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @ -468,6 +468,14 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) | ||||||
| 		return 0; | 		return 0; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	if (argc > 2 && !strcmp(argv[1], "--resolve-git-dir")) { | ||||||
|  | 		const char *gitdir = resolve_gitdir(argv[2]); | ||||||
|  | 		if (!gitdir) | ||||||
|  | 			die("not a gitdir '%s'", argv[2]); | ||||||
|  | 		puts(gitdir); | ||||||
|  | 		return 0; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if (argc > 1 && !strcmp("-h", argv[1])) | 	if (argc > 1 && !strcmp("-h", argv[1])) | ||||||
| 		usage(builtin_rev_parse_usage); | 		usage(builtin_rev_parse_usage); | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								cache.h
								
								
								
								
							
							
						
						
									
										1
									
								
								cache.h
								
								
								
								
							|  | @ -436,6 +436,7 @@ extern char *get_graft_file(void); | ||||||
| extern int set_git_dir(const char *path); | extern int set_git_dir(const char *path); | ||||||
| extern const char *get_git_work_tree(void); | extern const char *get_git_work_tree(void); | ||||||
| extern const char *read_gitfile_gently(const char *path); | extern const char *read_gitfile_gently(const char *path); | ||||||
|  | extern const char *resolve_gitdir(const char *suspect); | ||||||
| extern void set_git_work_tree(const char *tree); | extern void set_git_work_tree(const char *tree); | ||||||
|  |  | ||||||
| #define ALTERNATE_DB_ENVIRONMENT "GIT_ALTERNATE_OBJECT_DIRECTORIES" | #define ALTERNATE_DB_ENVIRONMENT "GIT_ALTERNATE_OBJECT_DIRECTORIES" | ||||||
|  |  | ||||||
							
								
								
									
										7
									
								
								setup.c
								
								
								
								
							
							
						
						
									
										7
									
								
								setup.c
								
								
								
								
							|  | @ -808,3 +808,10 @@ const char *setup_git_directory(void) | ||||||
| { | { | ||||||
| 	return setup_git_directory_gently(NULL); | 	return setup_git_directory_gently(NULL); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | const char *resolve_gitdir(const char *suspect) | ||||||
|  | { | ||||||
|  | 	if (is_git_directory(suspect)) | ||||||
|  | 		return suspect; | ||||||
|  | 	return read_gitfile_gently(suspect); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -360,10 +360,10 @@ test_expect_success 'update --init' ' | ||||||
| 	git submodule update init > update.out && | 	git submodule update init > update.out && | ||||||
| 	cat update.out && | 	cat update.out && | ||||||
| 	test_i18ngrep "not initialized" update.out && | 	test_i18ngrep "not initialized" update.out && | ||||||
| 	! test -d init/.git && | 	test_must_fail git rev-parse --resolve-git-dir init/.git && | ||||||
|  |  | ||||||
| 	git submodule update --init init && | 	git submodule update --init init && | ||||||
| 	test -d init/.git | 	git rev-parse --resolve-git-dir init/.git | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success 'do not add files from a submodule' ' | test_expect_success 'do not add files from a submodule' ' | ||||||
|  |  | ||||||
|  | @ -56,8 +56,9 @@ test_expect_success '"git submodule sync" should update submodule URLs' ' | ||||||
| 	 git pull --no-recurse-submodules && | 	 git pull --no-recurse-submodules && | ||||||
| 	 git submodule sync | 	 git submodule sync | ||||||
| 	) && | 	) && | ||||||
| 	test -d "$(git config -f super-clone/submodule/.git/config \ | 	test -d "$(cd super-clone/submodule && | ||||||
| 	                        remote.origin.url)" && | 	 git config remote.origin.url | ||||||
|  | 	)" && | ||||||
| 	(cd super-clone/submodule && | 	(cd super-clone/submodule && | ||||||
| 	 git checkout master && | 	 git checkout master && | ||||||
| 	 git pull | 	 git pull | ||||||
|  |  | ||||||
|  | @ -118,19 +118,19 @@ test_expect_success 'use "submodule foreach" to checkout 2nd level submodule' ' | ||||||
| 	git clone super clone2 && | 	git clone super clone2 && | ||||||
| 	( | 	( | ||||||
| 		cd clone2 && | 		cd clone2 && | ||||||
| 		test ! -d sub1/.git && | 		test_must_fail git rev-parse --resolve-git-dir sub1/.git && | ||||||
| 		test ! -d sub2/.git && | 		test_must_fail git rev-parse --resolve-git-dir sub2/.git && | ||||||
| 		test ! -d sub3/.git && | 		test_must_fail git rev-parse --resolve-git-dir sub3/.git && | ||||||
| 		test ! -d nested1/.git && | 		test_must_fail git rev-parse --resolve-git-dir nested1/.git && | ||||||
| 		git submodule update --init && | 		git submodule update --init && | ||||||
| 		test -d sub1/.git && | 		git rev-parse --resolve-git-dir sub1/.git && | ||||||
| 		test -d sub2/.git && | 		git rev-parse --resolve-git-dir sub2/.git && | ||||||
| 		test -d sub3/.git && | 		git rev-parse --resolve-git-dir sub3/.git && | ||||||
| 		test -d nested1/.git && | 		git rev-parse --resolve-git-dir nested1/.git && | ||||||
| 		test ! -d nested1/nested2/.git && | 		test_must_fail git rev-parse --resolve-git-dir nested1/nested2/.git && | ||||||
| 		git submodule foreach "git submodule update --init" && | 		git submodule foreach "git submodule update --init" && | ||||||
| 		test -d nested1/nested2/.git && | 		git rev-parse --resolve-git-dir nested1/nested1/nested2/.git | ||||||
| 		test ! -d nested1/nested2/nested3/.git | 		test_must_fail git rev-parse --resolve-git-dir nested1/nested2/nested3/.git | ||||||
| 	) | 	) | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  | @ -138,8 +138,8 @@ test_expect_success 'use "foreach --recursive" to checkout all submodules' ' | ||||||
| 	( | 	( | ||||||
| 		cd clone2 && | 		cd clone2 && | ||||||
| 		git submodule foreach --recursive "git submodule update --init" && | 		git submodule foreach --recursive "git submodule update --init" && | ||||||
| 		test -d nested1/nested2/nested3/.git && | 		git rev-parse --resolve-git-dir nested1/nested2/nested3/.git && | ||||||
| 		test -d nested1/nested2/nested3/submodule/.git | 		git rev-parse --resolve-git-dir nested1/nested2/nested3/submodule/.git | ||||||
| 	) | 	) | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  | @ -183,18 +183,18 @@ test_expect_success 'use "update --recursive" to checkout all submodules' ' | ||||||
| 	git clone super clone3 && | 	git clone super clone3 && | ||||||
| 	( | 	( | ||||||
| 		cd clone3 && | 		cd clone3 && | ||||||
| 		test ! -d sub1/.git && | 		test_must_fail git rev-parse --resolve-git-dir sub1/.git && | ||||||
| 		test ! -d sub2/.git && | 		test_must_fail git rev-parse --resolve-git-dir sub2/.git && | ||||||
| 		test ! -d sub3/.git && | 		test_must_fail git rev-parse --resolve-git-dir sub3/.git && | ||||||
| 		test ! -d nested1/.git && | 		test_must_fail git rev-parse --resolve-git-dir nested1/.git && | ||||||
| 		git submodule update --init --recursive && | 		git submodule update --init --recursive && | ||||||
| 		test -d sub1/.git && | 		git rev-parse --resolve-git-dir sub1/.git && | ||||||
| 		test -d sub2/.git && | 		git rev-parse --resolve-git-dir sub2/.git && | ||||||
| 		test -d sub3/.git && | 		git rev-parse --resolve-git-dir sub3/.git && | ||||||
| 		test -d nested1/.git && | 		git rev-parse --resolve-git-dir nested1/.git && | ||||||
| 		test -d nested1/nested2/.git && | 		git rev-parse --resolve-git-dir nested1/nested2/.git && | ||||||
| 		test -d nested1/nested2/nested3/.git && | 		git rev-parse --resolve-git-dir nested1/nested2/nested3/.git && | ||||||
| 		test -d nested1/nested2/nested3/submodule/.git | 		git rev-parse --resolve-git-dir nested1/nested2/nested3/submodule/.git | ||||||
| 	) | 	) | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  | @ -247,14 +247,17 @@ test_expect_success 'ensure "status --cached --recursive" preserves the --cached | ||||||
|  |  | ||||||
| test_expect_success 'use "git clone --recursive" to checkout all submodules' ' | test_expect_success 'use "git clone --recursive" to checkout all submodules' ' | ||||||
| 	git clone --recursive super clone4 && | 	git clone --recursive super clone4 && | ||||||
| 	test -d clone4/.git && | 	( | ||||||
| 	test -d clone4/sub1/.git && | 		cd clone4 && | ||||||
| 	test -d clone4/sub2/.git && | 		git rev-parse --resolve-git-dir .git && | ||||||
| 	test -d clone4/sub3/.git && | 		git rev-parse --resolve-git-dir sub1/.git && | ||||||
| 	test -d clone4/nested1/.git && | 		git rev-parse --resolve-git-dir sub2/.git && | ||||||
| 	test -d clone4/nested1/nested2/.git && | 		git rev-parse --resolve-git-dir sub3/.git && | ||||||
| 	test -d clone4/nested1/nested2/nested3/.git && | 		git rev-parse --resolve-git-dir nested1/.git && | ||||||
| 	test -d clone4/nested1/nested2/nested3/submodule/.git | 		git rev-parse --resolve-git-dir nested1/nested2/.git && | ||||||
|  | 		git rev-parse --resolve-git-dir nested1/nested2/nested3/.git && | ||||||
|  | 		git rev-parse --resolve-git-dir nested1/nested2/nested3/submodule/.git | ||||||
|  | 	) | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success 'test "update --recursive" with a flag with spaces' ' | test_expect_success 'test "update --recursive" with a flag with spaces' ' | ||||||
|  | @ -262,14 +265,14 @@ test_expect_success 'test "update --recursive" with a flag with spaces' ' | ||||||
| 	git clone super clone5 && | 	git clone super clone5 && | ||||||
| 	( | 	( | ||||||
| 		cd clone5 && | 		cd clone5 && | ||||||
| 		test ! -d nested1/.git && | 		test_must_fail git rev-parse --resolve-git-dir d nested1/.git && | ||||||
| 		git submodule update --init --recursive --reference="$(dirname "$PWD")/common objects" && | 		git submodule update --init --recursive --reference="$(dirname "$PWD")/common objects" && | ||||||
| 		test -d nested1/.git && | 		git rev-parse --resolve-git-dir nested1/.git && | ||||||
| 		test -d nested1/nested2/.git && | 		git rev-parse --resolve-git-dir nested1/nested2/.git && | ||||||
| 		test -d nested1/nested2/nested3/.git && | 		git rev-parse --resolve-git-dir nested1/nested2/nested3/.git && | ||||||
| 		test -f nested1/.git/objects/info/alternates && | 		test -f .git/modules/nested1/objects/info/alternates && | ||||||
| 		test -f nested1/nested2/.git/objects/info/alternates && | 		test -f .git/modules/nested1/modules/nested2/objects/info/alternates && | ||||||
| 		test -f nested1/nested2/nested3/.git/objects/info/alternates | 		test -f .git/modules/nested1/modules/nested2/modules/nested3/objects/info/alternates | ||||||
| 	) | 	) | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  | @ -277,18 +280,18 @@ test_expect_success 'use "update --recursive nested1" to checkout all submodules | ||||||
| 	git clone super clone6 && | 	git clone super clone6 && | ||||||
| 	( | 	( | ||||||
| 		cd clone6 && | 		cd clone6 && | ||||||
| 		test ! -d sub1/.git && | 		test_must_fail git rev-parse --resolve-git-dir sub1/.git && | ||||||
| 		test ! -d sub2/.git && | 		test_must_fail git rev-parse --resolve-git-dir sub2/.git && | ||||||
| 		test ! -d sub3/.git && | 		test_must_fail git rev-parse --resolve-git-dir sub3/.git && | ||||||
| 		test ! -d nested1/.git && | 		test_must_fail git rev-parse --resolve-git-dir nested1/.git && | ||||||
| 		git submodule update --init --recursive -- nested1 && | 		git submodule update --init --recursive -- nested1 && | ||||||
| 		test ! -d sub1/.git && | 		test_must_fail git rev-parse --resolve-git-dir sub1/.git && | ||||||
| 		test ! -d sub2/.git && | 		test_must_fail git rev-parse --resolve-git-dir sub2/.git && | ||||||
| 		test ! -d sub3/.git && | 		test_must_fail git rev-parse --resolve-git-dir sub3/.git && | ||||||
| 		test -d nested1/.git && | 		git rev-parse --resolve-git-dir nested1/.git && | ||||||
| 		test -d nested1/nested2/.git && | 		git rev-parse --resolve-git-dir nested1/nested2/.git && | ||||||
| 		test -d nested1/nested2/nested3/.git && | 		git rev-parse --resolve-git-dir nested1/nested2/nested3/.git && | ||||||
| 		test -d nested1/nested2/nested3/submodule/.git | 		git rev-parse --resolve-git-dir nested1/nested2/nested3/submodule/.git | ||||||
| 	) | 	) | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Fredrik Gustafsson
						Fredrik Gustafsson