diff options
Diffstat (limited to 'transport.c')
-rw-r--r-- | transport.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/transport.c b/transport.c index c9c8056f9..d2725e57d 100644 --- a/transport.c +++ b/transport.c @@ -10,6 +10,7 @@ #include "refs.h" #include "branch.h" #include "url.h" +#include "submodule.h" /* rsync support */ @@ -482,14 +483,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; } @@ -1041,6 +1046,14 @@ int transport_push(struct transport *transport, flags & TRANSPORT_PUSH_MIRROR, flags & TRANSPORT_PUSH_FORCE); + if ((flags & TRANSPORT_RECURSE_SUBMODULES_CHECK) && !is_bare_repository()) { + struct ref *ref = remote_refs; + for (; ref; ref = ref->next) + if (!is_null_sha1(ref->new_sha1) && + check_submodule_needs_pushing(ref->new_sha1,transport->remote->name)) + die("There are unpushed submodules, aborting."); + } + push_ret = transport->push_refs(transport, remote_refs, flags); err = push_had_errors(remote_refs); ret = push_ret | err; |