Merge branch 'ph/submodule-sync-recursive'
Adds "--recursive" option to submodule sync. * ph/submodule-sync-recursive: Add tests for submodule sync --recursive Teach --recursive to submodule syncmaint
						commit
						a1b3293936
					
				|  | @ -11,7 +11,7 @@ USAGE="[--quiet] add [-b branch] [-f|--force] [--name <name>] [--reference <repo | ||||||
|    or: $dashless [--quiet] update [--init] [-N|--no-fetch] [-f|--force] [--rebase] [--reference <repository>] [--merge] [--recursive] [--] [<path>...] |    or: $dashless [--quiet] update [--init] [-N|--no-fetch] [-f|--force] [--rebase] [--reference <repository>] [--merge] [--recursive] [--] [<path>...] | ||||||
|    or: $dashless [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...] |    or: $dashless [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...] | ||||||
|    or: $dashless [--quiet] foreach [--recursive] <command> |    or: $dashless [--quiet] foreach [--recursive] <command> | ||||||
|    or: $dashless [--quiet] sync [--] [<path>...]" |    or: $dashless [--quiet] sync [--recursive] [--] [<path>...]" | ||||||
| OPTIONS_SPEC= | OPTIONS_SPEC= | ||||||
| . git-sh-setup | . git-sh-setup | ||||||
| . git-sh-i18n | . git-sh-i18n | ||||||
|  | @ -1032,6 +1032,10 @@ cmd_sync() | ||||||
| 			GIT_QUIET=1 | 			GIT_QUIET=1 | ||||||
| 			shift | 			shift | ||||||
| 			;; | 			;; | ||||||
|  | 		--recursive) | ||||||
|  | 			recursive=1 | ||||||
|  | 			shift | ||||||
|  | 			;; | ||||||
| 		--) | 		--) | ||||||
| 			shift | 			shift | ||||||
| 			break | 			break | ||||||
|  | @ -1073,7 +1077,7 @@ cmd_sync() | ||||||
|  |  | ||||||
| 		if git config "submodule.$name.url" >/dev/null 2>/dev/null | 		if git config "submodule.$name.url" >/dev/null 2>/dev/null | ||||||
| 		then | 		then | ||||||
| 			say "$(eval_gettext "Synchronizing submodule url for '\$name'")" | 			say "$(eval_gettext "Synchronizing submodule url for '\$prefix\$sm_path'")" | ||||||
| 			git config submodule."$name".url "$super_config_url" | 			git config submodule."$name".url "$super_config_url" | ||||||
|  |  | ||||||
| 			if test -e "$sm_path"/.git | 			if test -e "$sm_path"/.git | ||||||
|  | @ -1083,6 +1087,12 @@ cmd_sync() | ||||||
| 				cd "$sm_path" | 				cd "$sm_path" | ||||||
| 				remote=$(get_default_remote) | 				remote=$(get_default_remote) | ||||||
| 				git config remote."$remote".url "$sub_origin_url" | 				git config remote."$remote".url "$sub_origin_url" | ||||||
|  |  | ||||||
|  | 				if test -n "$recursive" | ||||||
|  | 				then | ||||||
|  | 					prefix="$prefix$sm_path/" | ||||||
|  | 					eval cmd_sync | ||||||
|  | 				fi | ||||||
| 			) | 			) | ||||||
| 			fi | 			fi | ||||||
| 		fi | 		fi | ||||||
|  |  | ||||||
|  | @ -17,18 +17,25 @@ test_expect_success setup ' | ||||||
| 	git commit -m upstream && | 	git commit -m upstream && | ||||||
| 	git clone . super && | 	git clone . super && | ||||||
| 	git clone super submodule && | 	git clone super submodule && | ||||||
|  | 	(cd submodule && | ||||||
|  | 	 git submodule add ../submodule sub-submodule && | ||||||
|  | 	 test_tick && | ||||||
|  | 	 git commit -m "sub-submodule" | ||||||
|  | 	) && | ||||||
| 	(cd super && | 	(cd super && | ||||||
| 	 git submodule add ../submodule submodule && | 	 git submodule add ../submodule submodule && | ||||||
| 	 test_tick && | 	 test_tick && | ||||||
| 	 git commit -m "submodule" | 	 git commit -m "submodule" | ||||||
| 	) && | 	) && | ||||||
| 	git clone super super-clone && | 	git clone super super-clone && | ||||||
| 	(cd super-clone && git submodule update --init) && | 	(cd super-clone && git submodule update --init --recursive) && | ||||||
| 	git clone super empty-clone && | 	git clone super empty-clone && | ||||||
| 	(cd empty-clone && git submodule init) && | 	(cd empty-clone && git submodule init) && | ||||||
| 	git clone super top-only-clone && | 	git clone super top-only-clone && | ||||||
| 	git clone super relative-clone && | 	git clone super relative-clone && | ||||||
| 	(cd relative-clone && git submodule update --init) | 	(cd relative-clone && git submodule update --init --recursive) && | ||||||
|  | 	git clone super recursive-clone && | ||||||
|  | 	(cd recursive-clone && git submodule update --init --recursive) | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success 'change submodule' ' | test_expect_success 'change submodule' ' | ||||||
|  | @ -46,6 +53,11 @@ test_expect_success 'change submodule url' ' | ||||||
| 	 git pull | 	 git pull | ||||||
| 	) && | 	) && | ||||||
| 	mv submodule moved-submodule && | 	mv submodule moved-submodule && | ||||||
|  | 	(cd moved-submodule && | ||||||
|  | 	 git config -f .gitmodules submodule.sub-submodule.url ../moved-submodule && | ||||||
|  | 	 test_tick && | ||||||
|  | 	 git commit -a -m moved-sub-submodule | ||||||
|  | 	) && | ||||||
| 	(cd super && | 	(cd super && | ||||||
| 	 git config -f .gitmodules submodule.submodule.url ../moved-submodule && | 	 git config -f .gitmodules submodule.submodule.url ../moved-submodule && | ||||||
| 	 test_tick && | 	 test_tick && | ||||||
|  | @ -61,6 +73,9 @@ test_expect_success '"git submodule sync" should update submodule URLs' ' | ||||||
| 	test -d "$(cd super-clone/submodule && | 	test -d "$(cd super-clone/submodule && | ||||||
| 	 git config remote.origin.url | 	 git config remote.origin.url | ||||||
| 	)" && | 	)" && | ||||||
|  | 	test ! -d "$(cd super-clone/submodule/sub-submodule && | ||||||
|  | 	 git config remote.origin.url | ||||||
|  | 	)" && | ||||||
| 	(cd super-clone/submodule && | 	(cd super-clone/submodule && | ||||||
| 	 git checkout master && | 	 git checkout master && | ||||||
| 	 git pull | 	 git pull | ||||||
|  | @ -70,6 +85,25 @@ test_expect_success '"git submodule sync" should update submodule URLs' ' | ||||||
| 	) | 	) | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  | test_expect_success '"git submodule sync --recursive" should update all submodule URLs' ' | ||||||
|  | 	(cd super-clone && | ||||||
|  | 	 (cd submodule && | ||||||
|  | 	  git pull --no-recurse-submodules | ||||||
|  | 	 ) && | ||||||
|  | 	 git submodule sync --recursive | ||||||
|  | 	) && | ||||||
|  | 	test -d "$(cd super-clone/submodule && | ||||||
|  | 	 git config remote.origin.url | ||||||
|  | 	)" && | ||||||
|  | 	test -d "$(cd super-clone/submodule/sub-submodule && | ||||||
|  | 	 git config remote.origin.url | ||||||
|  | 	)" && | ||||||
|  | 	(cd super-clone/submodule/sub-submodule && | ||||||
|  | 	 git checkout master && | ||||||
|  | 	 git pull | ||||||
|  | 	) | ||||||
|  | ' | ||||||
|  |  | ||||||
| test_expect_success '"git submodule sync" should update known submodule URLs' ' | test_expect_success '"git submodule sync" should update known submodule URLs' ' | ||||||
| 	(cd empty-clone && | 	(cd empty-clone && | ||||||
| 	 git pull && | 	 git pull && | ||||||
|  | @ -107,6 +141,23 @@ test_expect_success '"git submodule sync" handles origin URL of the form foo/bar | ||||||
| 	 #actual foo/submodule | 	 #actual foo/submodule | ||||||
| 	 test "$(git config remote.origin.url)" = "../foo/submodule" | 	 test "$(git config remote.origin.url)" = "../foo/submodule" | ||||||
| 	) | 	) | ||||||
|  | 	(cd submodule/sub-submodule && | ||||||
|  | 	 test "$(git config remote.origin.url)" != "../../foo/submodule" | ||||||
|  | 	) | ||||||
|  | 	) | ||||||
|  | ' | ||||||
|  |  | ||||||
|  | test_expect_success '"git submodule sync --recursive" propagates changes in origin' ' | ||||||
|  | 	(cd recursive-clone && | ||||||
|  | 	 git remote set-url origin foo/bar && | ||||||
|  | 	 git submodule sync --recursive && | ||||||
|  | 	(cd submodule && | ||||||
|  | 	 #actual foo/submodule | ||||||
|  | 	 test "$(git config remote.origin.url)" = "../foo/submodule" | ||||||
|  | 	) | ||||||
|  | 	(cd submodule/sub-submodule && | ||||||
|  | 	 test "$(git config remote.origin.url)" = "../../foo/submodule" | ||||||
|  | 	) | ||||||
| 	) | 	) | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano