Merge branch 'jk/push-quiet'
authorJunio C Hamano <gitster@pobox.com>
Tue, 11 Aug 2009 05:18:21 +0000 (22:18 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 11 Aug 2009 05:18:21 +0000 (22:18 -0700)
* jk/push-quiet:
transport: don't show push status if --quiet is given
transport: pass "quiet" flag to pack-objects
push: add --quiet flag

1  2 
transport.c
diff --combined transport.c
index 8a42e76b3eafcb48b0904ab6f66b525624609477,a3d01451165731e1de5f6b3ecb60e9ce99ba9561..afec5b731aa39f8bf9d647528c1a314bf677a26b
@@@ -396,6 -396,7 +396,6 @@@ static int curl_transport_push(struct t
  {
        const char **argv;
        int argc;
 -      int err;
  
        if (flags & TRANSPORT_PUSH_MIRROR)
                return error("http transport does not support mirror mode");
        while (refspec_nr--)
                argv[argc++] = *refspec++;
        argv[argc] = NULL;
 -      err = run_command_v_opt(argv, RUN_GIT_CMD);
 -      switch (err) {
 -      case -ERR_RUN_COMMAND_FORK:
 -              error("unable to fork for %s", argv[0]);
 -      case -ERR_RUN_COMMAND_EXEC:
 -              error("unable to exec %s", argv[0]);
 -              break;
 -      case -ERR_RUN_COMMAND_WAITPID:
 -      case -ERR_RUN_COMMAND_WAITPID_WRONG_PID:
 -      case -ERR_RUN_COMMAND_WAITPID_SIGNAL:
 -      case -ERR_RUN_COMMAND_WAITPID_NOEXIT:
 -              error("%s died with strange error", argv[0]);
 -      }
 -      return !!err;
 +      return !!run_command_v_opt(argv, RUN_GIT_CMD);
  }
  
  static struct ref *get_refs_via_curl(struct transport *transport, int for_push)
@@@ -667,6 -681,21 +667,21 @@@ static int fetch_refs_via_pack(struct t
        return (refs ? 0 : -1);
  }
  
+ static int push_had_errors(struct ref *ref)
+ {
+       for (; ref; ref = ref->next) {
+               switch (ref->status) {
+               case REF_STATUS_NONE:
+               case REF_STATUS_UPTODATE:
+               case REF_STATUS_OK:
+                       break;
+               default:
+                       return 1;
+               }
+       }
+       return 0;
+ }
  static int refs_pushed(struct ref *ref)
  {
        for (; ref; ref = ref->next) {
@@@ -878,6 -907,7 +893,7 @@@ static int git_transport_push(struct tr
        args.force_update = !!(flags & TRANSPORT_PUSH_FORCE);
        args.use_thin_pack = data->thin;
        args.verbose = !!(flags & TRANSPORT_PUSH_VERBOSE);
+       args.quiet = !!(flags & TRANSPORT_PUSH_QUIET);
        args.dry_run = !!(flags & TRANSPORT_PUSH_DRY_RUN);
  
        ret = send_pack(&args, data->fd, data->conn, remote_refs,
@@@ -995,6 -1025,7 +1011,7 @@@ int transport_push(struct transport *tr
                struct ref *local_refs = get_local_heads();
                int match_flags = MATCH_REFS_NONE;
                int verbose = flags & TRANSPORT_PUSH_VERBOSE;
+               int quiet = flags & TRANSPORT_PUSH_QUIET;
                int porcelain = flags & TRANSPORT_PUSH_PORCELAIN;
                int ret;
  
  
                ret = transport->push_refs(transport, remote_refs, flags);
  
-               print_push_status(transport->url, remote_refs, verbose | porcelain, porcelain);
+               if (!quiet || push_had_errors(remote_refs))
+                       print_push_status(transport->url, remote_refs,
+                                       verbose | porcelain, porcelain);
  
                if (!(flags & TRANSPORT_PUSH_DRY_RUN)) {
                        struct ref *ref;