fix push --quiet: add 'quiet' capability to receive-pack
Currently, git push --quiet produces some non-error output, e.g.:
 $ git push --quiet
 Unpacking objects: 100% (3/3), done.
This fixes a bug reported for the fedora git package:
 https://bugzilla.redhat.com/show_bug.cgi?id=725593
Reported-by: Jesse Keating <jkeating@redhat.com>
Cc: Todd Zullinger <tmz@pobox.com>
Commit 90a6c7d4 (propagate --quiet to send-pack/receive-pack)
introduced the --quiet option to receive-pack and made send-pack
pass that option. Older versions of receive-pack do not recognize
the option, however, and terminate immediately. The commit was
therefore reverted.
This change instead adds a 'quiet' capability to receive-pack,
which is a backwards compatible.
In addition, this fixes push --quiet via http: A verbosity of 0
means quiet for remote helpers.
Reported-by: Tobias Ulmer <tobiasu@tmux.org>
Signed-off-by: Clemens Buchacher <drizzd@aon.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
			
			
				maint
			
			
		
							parent
							
								
									f47182c852
								
							
						
					
					
						commit
						c207e34f77
					
				|  | @ -33,6 +33,7 @@ static int transfer_unpack_limit = -1; | |||
| static int unpack_limit = 100; | ||||
| static int report_status; | ||||
| static int use_sideband; | ||||
| static int quiet; | ||||
| static int prefer_ofs_delta = 1; | ||||
| static int auto_update_server_info; | ||||
| static int auto_gc = 1; | ||||
|  | @ -122,7 +123,7 @@ static int show_ref(const char *path, const unsigned char *sha1, int flag, void | |||
| 	else | ||||
| 		packet_write(1, "%s %s%c%s%s\n", | ||||
| 			     sha1_to_hex(sha1), path, 0, | ||||
| 			     " report-status delete-refs side-band-64k", | ||||
| 			     " report-status delete-refs side-band-64k quiet", | ||||
| 			     prefer_ofs_delta ? " ofs-delta" : ""); | ||||
| 	sent_capabilities = 1; | ||||
| 	return 0; | ||||
|  | @ -736,6 +737,8 @@ static struct command *read_head_info(void) | |||
| 				report_status = 1; | ||||
| 			if (parse_feature_request(feature_list, "side-band-64k")) | ||||
| 				use_sideband = LARGE_PACKET_MAX; | ||||
| 			if (parse_feature_request(feature_list, "quiet")) | ||||
| 				quiet = 1; | ||||
| 		} | ||||
| 		cmd = xcalloc(1, sizeof(struct command) + len - 80); | ||||
| 		hashcpy(cmd->old_sha1, old_sha1); | ||||
|  | @ -789,8 +792,10 @@ static const char *unpack(void) | |||
|  | ||||
| 	if (ntohl(hdr.hdr_entries) < unpack_limit) { | ||||
| 		int code, i = 0; | ||||
| 		const char *unpacker[4]; | ||||
| 		const char *unpacker[5]; | ||||
| 		unpacker[i++] = "unpack-objects"; | ||||
| 		if (quiet) | ||||
| 			unpacker[i++] = "-q"; | ||||
| 		if (fsck_objects) | ||||
| 			unpacker[i++] = "--strict"; | ||||
| 		unpacker[i++] = hdr_arg; | ||||
|  | @ -904,6 +909,11 @@ int cmd_receive_pack(int argc, const char **argv, const char *prefix) | |||
| 		const char *arg = *argv++; | ||||
|  | ||||
| 		if (*arg == '-') { | ||||
| 			if (!strcmp(arg, "--quiet")) { | ||||
| 				quiet = 1; | ||||
| 				continue; | ||||
| 			} | ||||
|  | ||||
| 			if (!strcmp(arg, "--advertise-refs")) { | ||||
| 				advertise_refs = 1; | ||||
| 				continue; | ||||
|  |  | |||
|  | @ -263,6 +263,8 @@ int send_pack(struct send_pack_args *args, | |||
| 		args->use_ofs_delta = 1; | ||||
| 	if (server_supports("side-band-64k")) | ||||
| 		use_sideband = 1; | ||||
| 	if (!server_supports("quiet")) | ||||
| 		args->quiet = 0; | ||||
|  | ||||
| 	if (!remote_refs) { | ||||
| 		fprintf(stderr, "No refs in common and none specified; doing nothing.\n" | ||||
|  | @ -301,11 +303,12 @@ int send_pack(struct send_pack_args *args, | |||
| 			char *old_hex = sha1_to_hex(ref->old_sha1); | ||||
| 			char *new_hex = sha1_to_hex(ref->new_sha1); | ||||
|  | ||||
| 			if (!cmds_sent && (status_report || use_sideband)) { | ||||
| 				packet_buf_write(&req_buf, "%s %s %s%c%s%s", | ||||
| 			if (!cmds_sent && (status_report || use_sideband || args->quiet)) { | ||||
| 				packet_buf_write(&req_buf, "%s %s %s%c%s%s%s", | ||||
| 					old_hex, new_hex, ref->name, 0, | ||||
| 					status_report ? " report-status" : "", | ||||
| 					use_sideband ? " side-band-64k" : ""); | ||||
| 					use_sideband ? " side-band-64k" : "", | ||||
| 					args->quiet ? " quiet" : ""); | ||||
| 			} | ||||
| 			else | ||||
| 				packet_buf_write(&req_buf, "%s %s %s", | ||||
|  | @ -439,6 +442,10 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix) | |||
| 				args.force_update = 1; | ||||
| 				continue; | ||||
| 			} | ||||
| 			if (!strcmp(arg, "--quiet")) { | ||||
| 				args.quiet = 1; | ||||
| 				continue; | ||||
| 			} | ||||
| 			if (!strcmp(arg, "--verbose")) { | ||||
| 				args.verbose = 1; | ||||
| 				continue; | ||||
|  |  | |||
|  | @ -770,7 +770,9 @@ static int push_git(struct discovery *heads, int nr_spec, char **specs) | |||
| 		argv[argc++] = "--thin"; | ||||
| 	if (options.dry_run) | ||||
| 		argv[argc++] = "--dry-run"; | ||||
| 	if (options.verbosity > 1) | ||||
| 	if (options.verbosity == 0) | ||||
| 		argv[argc++] = "--quiet"; | ||||
| 	else if (options.verbosity > 1) | ||||
| 		argv[argc++] = "--verbose"; | ||||
| 	argv[argc++] = url; | ||||
| 	for (i = 0; i < nr_spec; i++) | ||||
|  |  | |||
|  | @ -108,4 +108,11 @@ test_expect_failure TTY 'push --no-progress suppresses progress' ' | |||
| 	! grep "Writing objects" err | ||||
| ' | ||||
|  | ||||
| test_expect_success TTY 'quiet push' ' | ||||
| 	ensure_fresh_upstream && | ||||
|  | ||||
| 	test_terminal git push --quiet --no-progress upstream master 2>&1 | tee output && | ||||
| 	test_cmp /dev/null output | ||||
| ' | ||||
|  | ||||
| test_done | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ | |||
|  | ||||
| test_description='test smart pushing over http via http-backend' | ||||
| . ./test-lib.sh | ||||
| . "$TEST_DIRECTORY"/lib-terminal.sh | ||||
|  | ||||
| if test -n "$NO_CURL"; then | ||||
| 	skip_all='skipping test, git built without http support' | ||||
|  | @ -186,5 +187,12 @@ test_expect_success 'push --mirror to repo with alternates' ' | |||
| 	git push --mirror "$HTTPD_URL"/smart/alternates-mirror.git | ||||
| ' | ||||
|  | ||||
| test_expect_success TTY 'quiet push' ' | ||||
| 	cd "$ROOT_PATH"/test_repo_clone && | ||||
| 	test_commit quiet && | ||||
| 	test_terminal git push --quiet --no-progress 2>&1 | tee output && | ||||
| 	test_cmp /dev/null output | ||||
| ' | ||||
|  | ||||
| stop_httpd | ||||
| test_done | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Clemens Buchacher
						Clemens Buchacher