fetch and pull: learn --progress
[gitweb.git] / builtin-push.c
index 28a26e7db2a86bf1514cdd54f9735c0be146dce7..ba9fe49034e1b4cbdc2d1b2168b8c6495f5b00fb 100644 (file)
@@ -17,6 +17,8 @@ static const char * const push_usage[] = {
 static int thin;
 static int deleterefs;
 static const char *receivepack;
+static int verbosity;
+static int progress;
 
 static const char **refspec;
 static int refspec_nr;
@@ -52,7 +54,7 @@ static void set_refspecs(const char **refs, int nr)
                } else if (deleterefs && !strchr(ref, ':')) {
                        char *delref;
                        int len = strlen(ref)+1;
-                       delref = xmalloc(len);
+                       delref = xmalloc(len+1);
                        strcpy(delref, ":");
                        strcat(delref, ref);
                        ref = delref;
@@ -105,13 +107,16 @@ static int push_with_options(struct transport *transport, int flags)
 {
        int err;
        int nonfastforward;
+
+       transport_set_verbosity(transport, verbosity, progress);
+
        if (receivepack)
                transport_set_option(transport,
                                     TRANS_OPT_RECEIVEPACK, receivepack);
        if (thin)
                transport_set_option(transport, TRANS_OPT_THIN, "yes");
 
-       if (flags & TRANSPORT_PUSH_VERBOSE)
+       if (verbosity > 0)
                fprintf(stderr, "Pushing to %s\n", transport->url);
        err = transport_push(transport, refspec_nr, refspec, flags,
                             &nonfastforward);
@@ -204,8 +209,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)
        int rc;
        const char *repo = NULL;        /* default repository */
        struct option options[] = {
-               OPT_BIT('q', "quiet", &flags, "be quiet", TRANSPORT_PUSH_QUIET),
-               OPT_BIT('v', "verbose", &flags, "be verbose", TRANSPORT_PUSH_VERBOSE),
+               OPT__VERBOSITY(&verbosity),
                OPT_STRING( 0 , "repo", &repo, "repository", "repository"),
                OPT_BIT( 0 , "all", &flags, "push all refs", TRANSPORT_PUSH_ALL),
                OPT_BIT( 0 , "mirror", &flags, "mirror all refs",
@@ -218,6 +222,9 @@ int cmd_push(int argc, const char **argv, const char *prefix)
                OPT_BOOLEAN( 0 , "thin", &thin, "use thin pack"),
                OPT_STRING( 0 , "receive-pack", &receivepack, "receive-pack", "receive pack program"),
                OPT_STRING( 0 , "exec", &receivepack, "receive-pack", "receive pack program"),
+               OPT_BIT('u', "set-upstream", &flags, "set upstream for git pull/status",
+                       TRANSPORT_PUSH_SET_UPSTREAM),
+               OPT_BOOLEAN(0, "progress", &progress, "force progress reporting"),
                OPT_END()
        };