X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=transport.c;h=98c577804f177b1c6f9df0e34e5fc3a656a81d27;hb=90a6c7d4;hp=a02f79aae3d91ea4109d21a9ed9ca2d962125375;hpb=c7fe5b61e15cc5195e33f7d5e5ec452e6966c1ad;p=git.git diff --git a/transport.c b/transport.c index a02f79aae..98c577804 100644 --- a/transport.c +++ b/transport.c @@ -156,7 +156,7 @@ static void set_upstreams(struct transport *transport, struct ref *refs, continue; if (!ref->peer_ref) continue; - if (!ref->new_sha1 || is_null_sha1(ref->new_sha1)) + if (is_null_sha1(ref->new_sha1)) continue; /* Follow symbolic refs (mainly for HEAD). */ @@ -482,14 +482,18 @@ static int set_git_option(struct git_transport_options *opts, static int connect_setup(struct transport *transport, int for_push, int verbose) { struct git_transport_data *data = transport->data; + struct strbuf sb = STRBUF_INIT; if (data->conn) return 0; - data->conn = git_connect(data->fd, transport->url, - for_push ? data->options.receivepack : - data->options.uploadpack, + strbuf_addstr(&sb, for_push ? data->options.receivepack : + data->options.uploadpack); + if (for_push && transport->verbose < 0) + strbuf_addstr(&sb, " --quiet"); + data->conn = git_connect(data->fd, transport->url, sb.buf, verbose ? CONNECT_VERBOSE : 0); + strbuf_release(&sb); return 0; } @@ -1190,14 +1194,20 @@ literal_copy: return xstrdup(url); } -int refs_from_alternate_cb(struct alternate_object_database *e, void *cb) +struct alternate_refs_data { + alternate_ref_fn *fn; + void *data; +}; + +static int refs_from_alternate_cb(struct alternate_object_database *e, + void *data) { char *other; size_t len; struct remote *remote; struct transport *transport; const struct ref *extra; - alternate_ref_fn *ref_fn = cb; + struct alternate_refs_data *cb = data; e->name[-1] = '\0'; other = xstrdup(real_path(e->base)); @@ -1218,8 +1228,16 @@ int refs_from_alternate_cb(struct alternate_object_database *e, void *cb) for (extra = transport_get_remote_refs(transport); extra; extra = extra->next) - ref_fn(extra, NULL); + cb->fn(extra, cb->data); transport_disconnect(transport); free(other); return 0; } + +void for_each_alternate_ref(alternate_ref_fn fn, void *data) +{ + struct alternate_refs_data cb; + cb.fn = fn; + cb.data = data; + foreach_alt_odb(refs_from_alternate_cb, &cb); +}