This patch seems to fix the problem. * If the original value of remote ref refers to an object we do not have, and if the ref is one of the branches we are trying to push, we refuse to update it. * Otherwise, we do not attempt to use such an value when computing what objects to put in pack, since rev-list would fail. I've tested Josef's two-branches case, one repo updates one branch and pushes to the central repo, another repo updates the other branch and pushed to the central repo. The old code barfed when invoking rev-list, but this does not seem to. Josef, could you give it a try please? --- cd /opt/packrat/playpen/public/in-place/git/git.junio/ jit-diff # - master: git-send-email-script: minimum whitespace cleanup. # + (working tree) diff --git a/send-pack.c b/send-pack.c --- a/send-pack.c +++ b/send-pack.c @@ -43,7 +43,8 @@ static void exec_rev_list(struct ref *re 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; @@ -208,6 +209,12 @@ static int send_pack(int in, int out, in 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; + } + /* Ok, mark it for update */ memcpy(ref->new_sha1, new_sha1, 20); } Compilation finished at Wed Aug 3 11:02:15 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.htmlReceived on Thu Aug 04 04:08:40 2005
This archive was generated by hypermail 2.1.8 : 2005-08-04 04:08:42 EST