summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--send-pack.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/send-pack.c b/send-pack.c
index 5a3aff6..3b66185 100644
--- a/send-pack.c
+++ b/send-pack.c
@@ -43,7 +43,8 @@ static void exec_rev_list(struct ref *refs)
char *buf = malloc(100);
if (i > 900)
die("git-rev-list environment overflow");
- if (!is_zero_sha1(refs->old_sha1)) {
+ if (!is_zero_sha1(refs->old_sha1) &&
+ has_sha1_file(refs->old_sha1)) {
args[i++] = buf;
snprintf(buf, 50, "^%s", sha1_to_hex(refs->old_sha1));
buf += 50;
@@ -203,6 +204,12 @@ static int send_pack(int in, int out, int nr_match, char **match)
continue;
}
+ if (!has_sha1_file(ref->old_sha1)) {
+ error("remote '%s' object %s does not exist on local",
+ name, sha1_to_hex(ref->old_sha1));
+ continue;
+ }
+
if (!ref_newer(new_sha1, ref->old_sha1)) {
error("remote '%s' isn't a strict parent of local", name);
continue;