Hi, On Mon, Aug 17, 2009 at 1:25 PM, Thomas Schlichter<thomas.schlichter@xxxxxx> wrote: > Hmm. I hope you won't take this as an argument for not fixing it, because it > is a clear regression! I tried git version 1.6.3.4, and it works flawlessly > with exactly this server! Even during bisecting, some versions worked, some > didn't (these after the mentioned commit...) > > So I think this commit didn't only refactor things, but unintentionally > changed the behavior. And this must be the problem. As I'm not into this code, > and the refactoring was not completely trivial, I was not able to quickly find > the place where the behavior was changed... Thomas, indeed you're right about this, the commit you noted in your earlier email (5424bc5) was indeed at fault. The commit changed how urls was handled, and resulted (incorrectly) in an extra slash being added to the url. In other words, urls now look like this: http://server/repo.git//objects/2a/ This problem occurs only in http-push.c, because repo urls (http://server/repo.git) are always made to end with a slash there. Btw, on my Apache 2.2.x server, this didn't crop up when I tested, while Thomas worked with a 2.0.x. I've attached a patch below that hopefully fixes it. -- >8 -- Subject: [PATCH] http.c: don't assume that urls don't end with slash Make append_remote_object_url() (and by implication, get_remote_object_url) use end_url_with_slash() to ensure that the url ends with a slash. Previously, they assumed that the url did not end with a slash and as a result appended a slash, sometimes errorneously. This fixes an issue introduced in 5424bc5 ("http*: add helper methods for fetching objects (loose)"), where the append_remote_object_url() implementation in http-push.c, which assumed that urls end with a slash, was replaced by another one in http.c, which assumed urls did not end with a slash. The above issue was raised by Thomas Schlichter: http://marc.info/?l=git&m=125043105231327 Signed-off-by: Tay Ray Chuan <rctay89@xxxxxxxxx> --- http.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/http.c b/http.c index 14d5357..eb0c669 100644 --- a/http.c +++ b/http.c @@ -719,7 +719,9 @@ void append_remote_object_url(struct strbuf *buf, const char *url, const char *hex, int only_two_digit_prefix) { - strbuf_addf(buf, "%s/objects/%.*s/", url, 2, hex); + end_url_with_slash(buf, url); + + strbuf_addf(buf, "objects/%.*s/", 2, hex); if (!only_two_digit_prefix) strbuf_addf(buf, "%s", hex+2); } -- 1.6.4.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html