push: respect --no-thin
- From the beginning of push.c inmaint755225d, 2006-04-29, "thin" option was enabled by default but could be turned off with --no-thin. - Then Shawn changed the default to 0 in favor of saving server resources ina4503a1, 2007-09-09. --no-thin worked great. - One day later, in9b28851Daniel extracted some code from push.c to create transport.c. He (probably accidentally) flipped the default value from 0 to 1 in transport_get(). From then on --no-thin is effectively no-op because git-push still expects the default value to be false and only calls transport_set_option() when "thin" variable in push.c is true (which is unnecessary). Correct the code to respect --no-thin by calling transport_set_option() in both cases. receive-pack learns about --reject-thin-pack-for-testing option, which only is for testing purposes, hence no document update. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
							parent
							
								
									96cb27a9d2
								
							
						
					
					
						commit
						f7c815c3ee
					
				|  | @ -15,7 +15,7 @@ static const char * const push_usage[] = { | ||||||
| 	NULL, | 	NULL, | ||||||
| }; | }; | ||||||
|  |  | ||||||
| static int thin; | static int thin = 1; | ||||||
| static int deleterefs; | static int deleterefs; | ||||||
| static const char *receivepack; | static const char *receivepack; | ||||||
| static int verbosity; | static int verbosity; | ||||||
|  | @ -313,8 +313,7 @@ static int push_with_options(struct transport *transport, int flags) | ||||||
| 	if (receivepack) | 	if (receivepack) | ||||||
| 		transport_set_option(transport, | 		transport_set_option(transport, | ||||||
| 				     TRANS_OPT_RECEIVEPACK, receivepack); | 				     TRANS_OPT_RECEIVEPACK, receivepack); | ||||||
| 	if (thin) | 	transport_set_option(transport, TRANS_OPT_THIN, thin ? "yes" : NULL); | ||||||
| 		transport_set_option(transport, TRANS_OPT_THIN, "yes"); |  | ||||||
|  |  | ||||||
| 	if (verbosity > 0) | 	if (verbosity > 0) | ||||||
| 		fprintf(stderr, _("Pushing to %s\n"), transport->url); | 		fprintf(stderr, _("Pushing to %s\n"), transport->url); | ||||||
|  |  | ||||||
|  | @ -38,6 +38,7 @@ static int quiet; | ||||||
| static int prefer_ofs_delta = 1; | static int prefer_ofs_delta = 1; | ||||||
| static int auto_update_server_info; | static int auto_update_server_info; | ||||||
| static int auto_gc = 1; | static int auto_gc = 1; | ||||||
|  | static int fix_thin = 1; | ||||||
| static const char *head_name; | static const char *head_name; | ||||||
| static void *head_name_to_free; | static void *head_name_to_free; | ||||||
| static int sent_capabilities; | static int sent_capabilities; | ||||||
|  | @ -869,6 +870,7 @@ static const char *unpack(int err_fd) | ||||||
| 		keeper[i++] = "--stdin"; | 		keeper[i++] = "--stdin"; | ||||||
| 		if (fsck_objects) | 		if (fsck_objects) | ||||||
| 			keeper[i++] = "--strict"; | 			keeper[i++] = "--strict"; | ||||||
|  | 		if (fix_thin) | ||||||
| 			keeper[i++] = "--fix-thin"; | 			keeper[i++] = "--fix-thin"; | ||||||
| 		keeper[i++] = hdr_arg; | 		keeper[i++] = hdr_arg; | ||||||
| 		keeper[i++] = keep_arg; | 		keeper[i++] = keep_arg; | ||||||
|  | @ -975,6 +977,10 @@ int cmd_receive_pack(int argc, const char **argv, const char *prefix) | ||||||
| 				stateless_rpc = 1; | 				stateless_rpc = 1; | ||||||
| 				continue; | 				continue; | ||||||
| 			} | 			} | ||||||
|  | 			if (!strcmp(arg, "--reject-thin-pack-for-testing")) { | ||||||
|  | 				fix_thin = 0; | ||||||
|  | 				continue; | ||||||
|  | 			} | ||||||
|  |  | ||||||
| 			usage(receive_pack_usage); | 			usage(receive_pack_usage); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | @ -1172,4 +1172,21 @@ test_expect_success 'push --follow-tag only pushes relevant tags' ' | ||||||
| 	test_cmp expect actual | 	test_cmp expect actual | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  | test_expect_success 'push --no-thin must produce non-thin pack' ' | ||||||
|  | 	cat >>path1 <<\EOF && | ||||||
|  | keep base version of path1 big enough, compared to the new changes | ||||||
|  | later, in order to pass size heuristics in | ||||||
|  | builtin/pack-objects.c:try_delta() | ||||||
|  | EOF | ||||||
|  | 	git commit -am initial && | ||||||
|  | 	git init no-thin && | ||||||
|  | 	git --git-dir=no-thin/.git config receive.unpacklimit 0 && | ||||||
|  | 	git push no-thin/.git refs/heads/master:refs/heads/foo && | ||||||
|  | 	echo modified >> path1 && | ||||||
|  | 	git commit -am modified && | ||||||
|  | 	git repack -adf && | ||||||
|  | 	rcvpck="git receive-pack --reject-thin-pack-for-testing" && | ||||||
|  | 	git push --no-thin --receive-pack="$rcvpck" no-thin/.git refs/heads/master:refs/heads/foo | ||||||
|  | ' | ||||||
|  |  | ||||||
| test_done | test_done | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Nguyễn Thái Ngọc Duy
						Nguyễn Thái Ngọc Duy