summaryrefslogtreecommitdiff
path: root/builtin-send-pack.c
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2007-11-18 03:08:22 -0500
committerJunio C Hamano <gitster@pobox.com>2007-11-18 02:35:39 -0800
commit73fa0b44ac1ed3b0b34ea6bcdca7d9b76886b903 (patch)
treeb926e0a7c28b49ba9d89e2731510d5c050ba6ae7 /builtin-send-pack.c
parent2a0fe89a976331cb2163d4f299e38e2cb5010632 (diff)
downloadgit-73fa0b44ac1ed3b0b34ea6bcdca7d9b76886b903.tar.gz
send-pack: fix "everything up-to-date" message
This has always been slightly inaccurate, since it used the new_refs counter, which really meant "did we send any objects," so deletions were not counted. It has gotten even worse with recent patches, since we no longer look at the 'ret' value, meaning we would say "up to date" if non-ff pushes were rejected. Instead, we now claim up to date iff every ref is either unmatched or up to date. Any other case should already have generated a status line. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin-send-pack.c')
-rw-r--r--builtin-send-pack.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/builtin-send-pack.c b/builtin-send-pack.c
index 14447bb7cd..3aab89ca1b 100644
--- a/builtin-send-pack.c
+++ b/builtin-send-pack.c
@@ -347,6 +347,20 @@ static void print_push_status(const char *dest, struct ref *refs)
}
}
+static int refs_pushed(struct ref *ref)
+{
+ for (; ref; ref = ref->next) {
+ switch(ref->status) {
+ case REF_STATUS_NONE:
+ case REF_STATUS_UPTODATE:
+ break;
+ default:
+ return 1;
+ }
+ }
+ return 0;
+}
+
static int do_send_pack(int in, int out, struct remote *remote, const char *dest, int nr_refspec, const char **refspec)
{
struct ref *ref;
@@ -487,7 +501,7 @@ static int do_send_pack(int in, int out, struct remote *remote, const char *dest
update_tracking_ref(remote, ref);
}
- if (!new_refs)
+ if (!refs_pushed(remote_refs))
fprintf(stderr, "Everything up-to-date\n");
if (ret < 0)
return ret;