summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 7246ed4)
raw | patch | inline | side by side (parent: 7246ed4)
author | Junio C Hamano <junkio@cox.net> | |
Thu, 22 Dec 2005 20:39:39 +0000 (12:39 -0800) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Thu, 22 Dec 2005 20:39:39 +0000 (12:39 -0800) |
Wnen refusing to push a head, we said cryptic "remote 'branch'
object X does not exist on local" or "remote ref 'branch' is not
a strict subset of local ref 'branch'". That was gittish.
Since the most likely reason this happens is because the pushed
head was not up-to-date, clarify the error message to say that
straight, and suggest pulling first.
First noticed by Johannes and seconded by Andreas.
Signed-off-by: Junio C Hamano <junkio@cox.net>
object X does not exist on local" or "remote ref 'branch' is not
a strict subset of local ref 'branch'". That was gittish.
Since the most likely reason this happens is because the pushed
head was not up-to-date, clarify the error message to say that
straight, and suggest pulling first.
First noticed by Johannes and seconded by Andreas.
Signed-off-by: Junio C Hamano <junkio@cox.net>
send-pack.c | patch | blob | history |
diff --git a/send-pack.c b/send-pack.c
index 5bc2f017bca8e9c92352b19469b3c1021844ddec..0d41f9a1787429a1498ce82e1af7e7d93cea5a41 100644 (file)
--- a/send-pack.c
+++ b/send-pack.c
if (!force_update &&
!is_zero_sha1(ref->old_sha1) &&
!ref->force) {
- if (!has_sha1_file(ref->old_sha1)) {
- error("remote '%s' object %s does not "
- "exist on local",
- ref->name, sha1_to_hex(ref->old_sha1));
- ret = -2;
- continue;
- }
-
- /* We assume that local is fsck-clean. Otherwise
- * you _could_ have an old tag which points at
- * something you do not have, which may or may not
- * be a commit.
- */
- if (!ref_newer(ref->peer_ref->new_sha1,
+ if (!has_sha1_file(ref->old_sha1) ||
+ !ref_newer(ref->peer_ref->new_sha1,
ref->old_sha1)) {
- error("remote ref '%s' is not a strict "
- "subset of local ref '%s'.", ref->name,
+ /* We do not have the remote ref, or
+ * we know that the remote ref is not
+ * an ancestor of what we are trying to
+ * push. Either way this can be losing
+ * commits at the remote end and likely
+ * we were not up to date to begin with.
+ */
+ error("remote '%s' is not a strict "
+ "subset of local ref '%s'. "
+ "maybe you are not up-to-date and "
+ "need to pull first?",
+ ref->name,
ref->peer_ref->name);
ret = -2;
continue;