Merge branch 'bw/push-dry-run'
"git push --dry-run --recurse-submodule=on-demand" wasn't "--dry-run" in the submodules. * bw/push-dry-run: push: fix --dry-run to not push submodules push: --dry-run updates submodules when --recurse-submodules=on-demandmaint
						commit
						12cf1135df
					
				
							
								
								
									
										13
									
								
								submodule.c
								
								
								
								
							
							
						
						
									
										13
									
								
								submodule.c
								
								
								
								
							|  | @ -661,16 +661,17 @@ int find_unpushed_submodules(struct sha1_array *commits, | |||
| 	return needs_pushing->nr; | ||||
| } | ||||
|  | ||||
| static int push_submodule(const char *path) | ||||
| static int push_submodule(const char *path, int dry_run) | ||||
| { | ||||
| 	if (add_submodule_odb(path)) | ||||
| 		return 1; | ||||
|  | ||||
| 	if (for_each_remote_ref_submodule(path, has_remote, NULL) > 0) { | ||||
| 		struct child_process cp = CHILD_PROCESS_INIT; | ||||
| 		const char *argv[] = {"push", NULL}; | ||||
| 		argv_array_push(&cp.args, "push"); | ||||
| 		if (dry_run) | ||||
| 			argv_array_push(&cp.args, "--dry-run"); | ||||
|  | ||||
| 		cp.argv = argv; | ||||
| 		prepare_submodule_repo_env(&cp.env_array); | ||||
| 		cp.git_cmd = 1; | ||||
| 		cp.no_stdin = 1; | ||||
|  | @ -683,7 +684,9 @@ static int push_submodule(const char *path) | |||
| 	return 1; | ||||
| } | ||||
|  | ||||
| int push_unpushed_submodules(struct sha1_array *commits, const char *remotes_name) | ||||
| int push_unpushed_submodules(struct sha1_array *commits, | ||||
| 			     const char *remotes_name, | ||||
| 			     int dry_run) | ||||
| { | ||||
| 	int i, ret = 1; | ||||
| 	struct string_list needs_pushing = STRING_LIST_INIT_DUP; | ||||
|  | @ -694,7 +697,7 @@ int push_unpushed_submodules(struct sha1_array *commits, const char *remotes_nam | |||
| 	for (i = 0; i < needs_pushing.nr; i++) { | ||||
| 		const char *path = needs_pushing.items[i].string; | ||||
| 		fprintf(stderr, "Pushing submodule '%s'\n", path); | ||||
| 		if (!push_submodule(path)) { | ||||
| 		if (!push_submodule(path, dry_run)) { | ||||
| 			fprintf(stderr, "Unable to push submodule '%s'\n", path); | ||||
| 			ret = 0; | ||||
| 		} | ||||
|  |  | |||
|  | @ -65,7 +65,9 @@ int merge_submodule(unsigned char result[20], const char *path, const unsigned c | |||
| 		    const unsigned char a[20], const unsigned char b[20], int search); | ||||
| int find_unpushed_submodules(struct sha1_array *commits, const char *remotes_name, | ||||
| 		struct string_list *needs_pushing); | ||||
| int push_unpushed_submodules(struct sha1_array *commits, const char *remotes_name); | ||||
| extern int push_unpushed_submodules(struct sha1_array *commits, | ||||
| 				    const char *remotes_name, | ||||
| 				    int dry_run); | ||||
| void connect_work_tree_and_git_dir(const char *work_tree, const char *git_dir); | ||||
| int parallel_submodules(void); | ||||
|  | ||||
|  |  | |||
|  | @ -427,7 +427,31 @@ test_expect_success 'push unpushable submodule recursively fails' ' | |||
| 		cd submodule.git && | ||||
| 		git rev-parse master >../actual | ||||
| 	) && | ||||
| 	test_when_finished git -C work reset --hard master^ && | ||||
| 	test_cmp expected actual | ||||
| ' | ||||
|  | ||||
| test_expect_success 'push --dry-run does not recursively update submodules' ' | ||||
| 	( | ||||
| 		cd work/gar/bage && | ||||
| 		git checkout master && | ||||
| 		git rev-parse master >../../../expected_submodule && | ||||
| 		> junk9 && | ||||
| 		git add junk9 && | ||||
| 		git commit -m "Ninth junk" && | ||||
|  | ||||
| 		# Go up to 'work' directory | ||||
| 		cd ../.. && | ||||
| 		git checkout master && | ||||
| 		git rev-parse master >../expected_pub && | ||||
| 		git add gar/bage && | ||||
| 		git commit -m "Ninth commit for gar/bage" && | ||||
| 		git push --dry-run --recurse-submodules=on-demand ../pub.git master | ||||
| 	) && | ||||
| 	git -C submodule.git rev-parse master >actual_submodule && | ||||
| 	git -C pub.git rev-parse master >actual_pub && | ||||
| 	test_cmp expected_pub actual_pub && | ||||
| 	test_cmp expected_submodule actual_submodule | ||||
| ' | ||||
|  | ||||
| test_done | ||||
|  |  | |||
|  | @ -955,15 +955,18 @@ int transport_push(struct transport *transport, | |||
| 				if (!is_null_oid(&ref->new_oid)) | ||||
| 					sha1_array_append(&commits, ref->new_oid.hash); | ||||
|  | ||||
| 			if (!push_unpushed_submodules(&commits, transport->remote->name)) { | ||||
| 			if (!push_unpushed_submodules(&commits, | ||||
| 						      transport->remote->name, | ||||
| 						      pretend)) { | ||||
| 				sha1_array_clear(&commits); | ||||
| 				die("Failed to push all needed submodules!"); | ||||
| 			} | ||||
| 			sha1_array_clear(&commits); | ||||
| 		} | ||||
|  | ||||
| 		if ((flags & (TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND | | ||||
| 			      TRANSPORT_RECURSE_SUBMODULES_CHECK)) && !is_bare_repository()) { | ||||
| 		if (((flags & TRANSPORT_RECURSE_SUBMODULES_CHECK) || | ||||
| 		     ((flags & TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND) && | ||||
| 		      !pretend)) && !is_bare_repository()) { | ||||
| 			struct ref *ref = remote_refs; | ||||
| 			struct string_list needs_pushing = STRING_LIST_INIT_DUP; | ||||
| 			struct sha1_array commits = SHA1_ARRAY_INIT; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano