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>
This commit is contained in:
Clemens Buchacher 2012-01-08 22:06:20 +01:00 committed by Junio C Hamano
parent f47182c852
commit c207e34f77
5 changed files with 40 additions and 6 deletions

View File

@ -33,6 +33,7 @@ static int transfer_unpack_limit = -1;
static int unpack_limit = 100; static int unpack_limit = 100;
static int report_status; static int report_status;
static int use_sideband; static int use_sideband;
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;
@ -122,7 +123,7 @@ static int show_ref(const char *path, const unsigned char *sha1, int flag, void
else else
packet_write(1, "%s %s%c%s%s\n", packet_write(1, "%s %s%c%s%s\n",
sha1_to_hex(sha1), path, 0, 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" : ""); prefer_ofs_delta ? " ofs-delta" : "");
sent_capabilities = 1; sent_capabilities = 1;
return 0; return 0;
@ -736,6 +737,8 @@ static struct command *read_head_info(void)
report_status = 1; report_status = 1;
if (parse_feature_request(feature_list, "side-band-64k")) if (parse_feature_request(feature_list, "side-band-64k"))
use_sideband = LARGE_PACKET_MAX; use_sideband = LARGE_PACKET_MAX;
if (parse_feature_request(feature_list, "quiet"))
quiet = 1;
} }
cmd = xcalloc(1, sizeof(struct command) + len - 80); cmd = xcalloc(1, sizeof(struct command) + len - 80);
hashcpy(cmd->old_sha1, old_sha1); hashcpy(cmd->old_sha1, old_sha1);
@ -789,8 +792,10 @@ static const char *unpack(void)
if (ntohl(hdr.hdr_entries) < unpack_limit) { if (ntohl(hdr.hdr_entries) < unpack_limit) {
int code, i = 0; int code, i = 0;
const char *unpacker[4]; const char *unpacker[5];
unpacker[i++] = "unpack-objects"; unpacker[i++] = "unpack-objects";
if (quiet)
unpacker[i++] = "-q";
if (fsck_objects) if (fsck_objects)
unpacker[i++] = "--strict"; unpacker[i++] = "--strict";
unpacker[i++] = hdr_arg; unpacker[i++] = hdr_arg;
@ -904,6 +909,11 @@ int cmd_receive_pack(int argc, const char **argv, const char *prefix)
const char *arg = *argv++; const char *arg = *argv++;
if (*arg == '-') { if (*arg == '-') {
if (!strcmp(arg, "--quiet")) {
quiet = 1;
continue;
}
if (!strcmp(arg, "--advertise-refs")) { if (!strcmp(arg, "--advertise-refs")) {
advertise_refs = 1; advertise_refs = 1;
continue; continue;

View File

@ -263,6 +263,8 @@ int send_pack(struct send_pack_args *args,
args->use_ofs_delta = 1; args->use_ofs_delta = 1;
if (server_supports("side-band-64k")) if (server_supports("side-band-64k"))
use_sideband = 1; use_sideband = 1;
if (!server_supports("quiet"))
args->quiet = 0;
if (!remote_refs) { if (!remote_refs) {
fprintf(stderr, "No refs in common and none specified; doing nothing.\n" 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 *old_hex = sha1_to_hex(ref->old_sha1);
char *new_hex = sha1_to_hex(ref->new_sha1); char *new_hex = sha1_to_hex(ref->new_sha1);
if (!cmds_sent && (status_report || use_sideband)) { if (!cmds_sent && (status_report || use_sideband || args->quiet)) {
packet_buf_write(&req_buf, "%s %s %s%c%s%s", packet_buf_write(&req_buf, "%s %s %s%c%s%s%s",
old_hex, new_hex, ref->name, 0, old_hex, new_hex, ref->name, 0,
status_report ? " report-status" : "", status_report ? " report-status" : "",
use_sideband ? " side-band-64k" : ""); use_sideband ? " side-band-64k" : "",
args->quiet ? " quiet" : "");
} }
else else
packet_buf_write(&req_buf, "%s %s %s", 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; args.force_update = 1;
continue; continue;
} }
if (!strcmp(arg, "--quiet")) {
args.quiet = 1;
continue;
}
if (!strcmp(arg, "--verbose")) { if (!strcmp(arg, "--verbose")) {
args.verbose = 1; args.verbose = 1;
continue; continue;

View File

@ -770,7 +770,9 @@ static int push_git(struct discovery *heads, int nr_spec, char **specs)
argv[argc++] = "--thin"; argv[argc++] = "--thin";
if (options.dry_run) if (options.dry_run)
argv[argc++] = "--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++] = "--verbose";
argv[argc++] = url; argv[argc++] = url;
for (i = 0; i < nr_spec; i++) for (i = 0; i < nr_spec; i++)

View File

@ -108,4 +108,11 @@ test_expect_failure TTY 'push --no-progress suppresses progress' '
! grep "Writing objects" err ! 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 test_done

View File

@ -5,6 +5,7 @@
test_description='test smart pushing over http via http-backend' test_description='test smart pushing over http via http-backend'
. ./test-lib.sh . ./test-lib.sh
. "$TEST_DIRECTORY"/lib-terminal.sh
if test -n "$NO_CURL"; then if test -n "$NO_CURL"; then
skip_all='skipping test, git built without http support' 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 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 stop_httpd
test_done test_done