Code

Merge branch 'va/p4-branch-import-test-update'
[git.git] / transport.c
index c9c8056f9de69bd378cd271d70363b5560f13e07..d2725e57dcee993b6d969f039179406a863c94b2 100644 (file)
@@ -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;