Merge branch 'bw/push-submodule-only'
"git submodule push" learned "--recurse-submodules=only option to push submodules out without pushing the top-level superproject. * bw/push-submodule-only: push: add option to push only submodules submodules: add RECURSE_SUBMODULES_ONLY value transport: reformat flag #defines to be more readablemaint
						commit
						792e22e3fd
					
				|  | @ -568,6 +568,8 @@ int cmd_push(int argc, const char **argv, const char *prefix) | ||||||
| 		flags |= TRANSPORT_RECURSE_SUBMODULES_CHECK; | 		flags |= TRANSPORT_RECURSE_SUBMODULES_CHECK; | ||||||
| 	else if (recurse_submodules == RECURSE_SUBMODULES_ON_DEMAND) | 	else if (recurse_submodules == RECURSE_SUBMODULES_ON_DEMAND) | ||||||
| 		flags |= TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND; | 		flags |= TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND; | ||||||
|  | 	else if (recurse_submodules == RECURSE_SUBMODULES_ONLY) | ||||||
|  | 		flags |= TRANSPORT_RECURSE_SUBMODULES_ONLY; | ||||||
|  |  | ||||||
| 	if (tags) | 	if (tags) | ||||||
| 		add_refspec("refs/tags/*"); | 		add_refspec("refs/tags/*"); | ||||||
|  |  | ||||||
|  | @ -251,6 +251,8 @@ static int parse_push_recurse(const char *opt, const char *arg, | ||||||
| 			return RECURSE_SUBMODULES_ON_DEMAND; | 			return RECURSE_SUBMODULES_ON_DEMAND; | ||||||
| 		else if (!strcmp(arg, "check")) | 		else if (!strcmp(arg, "check")) | ||||||
| 			return RECURSE_SUBMODULES_CHECK; | 			return RECURSE_SUBMODULES_CHECK; | ||||||
|  | 		else if (!strcmp(arg, "only")) | ||||||
|  | 			return RECURSE_SUBMODULES_ONLY; | ||||||
| 		else if (die_on_error) | 		else if (die_on_error) | ||||||
| 			die("bad %s argument: %s", opt, arg); | 			die("bad %s argument: %s", opt, arg); | ||||||
| 		else | 		else | ||||||
|  |  | ||||||
|  | @ -6,6 +6,7 @@ struct argv_array; | ||||||
| struct sha1_array; | struct sha1_array; | ||||||
|  |  | ||||||
| enum { | enum { | ||||||
|  | 	RECURSE_SUBMODULES_ONLY = -5, | ||||||
| 	RECURSE_SUBMODULES_CHECK = -4, | 	RECURSE_SUBMODULES_CHECK = -4, | ||||||
| 	RECURSE_SUBMODULES_ERROR = -3, | 	RECURSE_SUBMODULES_ERROR = -3, | ||||||
| 	RECURSE_SUBMODULES_NONE = -2, | 	RECURSE_SUBMODULES_NONE = -2, | ||||||
|  |  | ||||||
|  | @ -454,4 +454,25 @@ test_expect_success 'push --dry-run does not recursively update submodules' ' | ||||||
| 	test_cmp expected_submodule actual_submodule | 	test_cmp expected_submodule actual_submodule | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  | test_expect_success 'push --dry-run does not recursively update submodules' ' | ||||||
|  | 	git -C work push --dry-run --recurse-submodules=only ../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_expect_success 'push only unpushed submodules recursively' ' | ||||||
|  | 	git -C work/gar/bage rev-parse master >expected_submodule && | ||||||
|  | 	git -C pub.git rev-parse master >expected_pub && | ||||||
|  |  | ||||||
|  | 	git -C work push --recurse-submodules=only ../pub.git master && | ||||||
|  |  | ||||||
|  | 	git -C submodule.git rev-parse master >actual_submodule && | ||||||
|  | 	git -C pub.git rev-parse master >actual_pub && | ||||||
|  | 	test_cmp expected_submodule actual_submodule && | ||||||
|  | 	test_cmp expected_pub actual_pub | ||||||
|  | ' | ||||||
|  |  | ||||||
| test_done | test_done | ||||||
|  |  | ||||||
							
								
								
									
										15
									
								
								transport.c
								
								
								
								
							
							
						
						
									
										15
									
								
								transport.c
								
								
								
								
							|  | @ -1015,7 +1015,9 @@ int transport_push(struct transport *transport, | ||||||
| 			if (run_pre_push_hook(transport, remote_refs)) | 			if (run_pre_push_hook(transport, remote_refs)) | ||||||
| 				return -1; | 				return -1; | ||||||
|  |  | ||||||
| 		if ((flags & TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND) && !is_bare_repository()) { | 		if ((flags & (TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND | | ||||||
|  | 			      TRANSPORT_RECURSE_SUBMODULES_ONLY)) && | ||||||
|  | 		    !is_bare_repository()) { | ||||||
| 			struct ref *ref = remote_refs; | 			struct ref *ref = remote_refs; | ||||||
| 			struct sha1_array commits = SHA1_ARRAY_INIT; | 			struct sha1_array commits = SHA1_ARRAY_INIT; | ||||||
|  |  | ||||||
|  | @ -1033,7 +1035,8 @@ int transport_push(struct transport *transport, | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		if (((flags & TRANSPORT_RECURSE_SUBMODULES_CHECK) || | 		if (((flags & TRANSPORT_RECURSE_SUBMODULES_CHECK) || | ||||||
| 		     ((flags & TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND) && | 		     ((flags & (TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND | | ||||||
|  | 				TRANSPORT_RECURSE_SUBMODULES_ONLY)) && | ||||||
| 		      !pretend)) && !is_bare_repository()) { | 		      !pretend)) && !is_bare_repository()) { | ||||||
| 			struct ref *ref = remote_refs; | 			struct ref *ref = remote_refs; | ||||||
| 			struct string_list needs_pushing = STRING_LIST_INIT_DUP; | 			struct string_list needs_pushing = STRING_LIST_INIT_DUP; | ||||||
|  | @ -1052,7 +1055,10 @@ int transport_push(struct transport *transport, | ||||||
| 			sha1_array_clear(&commits); | 			sha1_array_clear(&commits); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		push_ret = transport->push_refs(transport, remote_refs, flags); | 		if (!(flags & TRANSPORT_RECURSE_SUBMODULES_ONLY)) | ||||||
|  | 			push_ret = transport->push_refs(transport, remote_refs, flags); | ||||||
|  | 		else | ||||||
|  | 			push_ret = 0; | ||||||
| 		err = push_had_errors(remote_refs); | 		err = push_had_errors(remote_refs); | ||||||
| 		ret = push_ret | err; | 		ret = push_ret | err; | ||||||
|  |  | ||||||
|  | @ -1064,7 +1070,8 @@ int transport_push(struct transport *transport, | ||||||
| 		if (flags & TRANSPORT_PUSH_SET_UPSTREAM) | 		if (flags & TRANSPORT_PUSH_SET_UPSTREAM) | ||||||
| 			set_upstreams(transport, remote_refs, pretend); | 			set_upstreams(transport, remote_refs, pretend); | ||||||
|  |  | ||||||
| 		if (!(flags & TRANSPORT_PUSH_DRY_RUN)) { | 		if (!(flags & (TRANSPORT_PUSH_DRY_RUN | | ||||||
|  | 			       TRANSPORT_RECURSE_SUBMODULES_ONLY))) { | ||||||
| 			struct ref *ref; | 			struct ref *ref; | ||||||
| 			for (ref = remote_refs; ref; ref = ref->next) | 			for (ref = remote_refs; ref; ref = ref->next) | ||||||
| 				transport_update_tracking_ref(transport->remote, ref, verbose); | 				transport_update_tracking_ref(transport->remote, ref, verbose); | ||||||
|  |  | ||||||
							
								
								
									
										31
									
								
								transport.h
								
								
								
								
							
							
						
						
									
										31
									
								
								transport.h
								
								
								
								
							|  | @ -131,21 +131,22 @@ struct transport { | ||||||
| 	enum transport_family family; | 	enum transport_family family; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| #define TRANSPORT_PUSH_ALL 1 | #define TRANSPORT_PUSH_ALL			(1<<0) | ||||||
| #define TRANSPORT_PUSH_FORCE 2 | #define TRANSPORT_PUSH_FORCE			(1<<1) | ||||||
| #define TRANSPORT_PUSH_DRY_RUN 4 | #define TRANSPORT_PUSH_DRY_RUN			(1<<2) | ||||||
| #define TRANSPORT_PUSH_MIRROR 8 | #define TRANSPORT_PUSH_MIRROR			(1<<3) | ||||||
| #define TRANSPORT_PUSH_PORCELAIN 16 | #define TRANSPORT_PUSH_PORCELAIN		(1<<4) | ||||||
| #define TRANSPORT_PUSH_SET_UPSTREAM 32 | #define TRANSPORT_PUSH_SET_UPSTREAM		(1<<5) | ||||||
| #define TRANSPORT_RECURSE_SUBMODULES_CHECK 64 | #define TRANSPORT_RECURSE_SUBMODULES_CHECK	(1<<6) | ||||||
| #define TRANSPORT_PUSH_PRUNE 128 | #define TRANSPORT_PUSH_PRUNE			(1<<7) | ||||||
| #define TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND 256 | #define TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND	(1<<8) | ||||||
| #define TRANSPORT_PUSH_NO_HOOK 512 | #define TRANSPORT_PUSH_NO_HOOK			(1<<9) | ||||||
| #define TRANSPORT_PUSH_FOLLOW_TAGS 1024 | #define TRANSPORT_PUSH_FOLLOW_TAGS		(1<<10) | ||||||
| #define TRANSPORT_PUSH_CERT_ALWAYS 2048 | #define TRANSPORT_PUSH_CERT_ALWAYS		(1<<11) | ||||||
| #define TRANSPORT_PUSH_CERT_IF_ASKED 4096 | #define TRANSPORT_PUSH_CERT_IF_ASKED		(1<<12) | ||||||
| #define TRANSPORT_PUSH_ATOMIC 8192 | #define TRANSPORT_PUSH_ATOMIC			(1<<13) | ||||||
| #define TRANSPORT_PUSH_OPTIONS 16384 | #define TRANSPORT_PUSH_OPTIONS			(1<<14) | ||||||
|  | #define TRANSPORT_RECURSE_SUBMODULES_ONLY	(1<<15) | ||||||
|  |  | ||||||
| extern int transport_summary_width(const struct ref *refs); | extern int transport_summary_width(const struct ref *refs); | ||||||
|  |  | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano