http-push: Normalise directory names when pushing to some WebDAV servers
authorTay Ray Chuan <rctay89@gmail.com>
Thu, 25 Nov 2010 08:21:07 +0000 (16:21 +0800)
committerJunio C Hamano <gitster@pobox.com>
Fri, 26 Nov 2010 22:50:45 +0000 (14:50 -0800)
Fix a bug when pushing to WebDAV servers which do not use a trailing
slash for collection names. The previous implementation fails to see
that the requested resource "refs/" is the same resource as "refs"
and loads every reference twice (once for refs/ and once for refs).

This implementation normalises every collection name by appending a
trailing slash if necessary.

This can be tested with old versions of Apache (such as the WebDAV
server of GMX, Apache 2.0.63).

Based-on-patch-by: Gabriel Corona <gabriel.corona@enst-bretagne.fr>
Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
http-push.c

index c9bcd116975635cabf30eceb7909abfc7f341948..565e580d5a50924ec9466c5b696f9163fce78a94 100644 (file)
@@ -1090,6 +1090,10 @@ static void handle_remote_ls_ctx(struct xml_ctx *ctx, int tag_closed)
        if (tag_closed) {
                if (!strcmp(ctx->name, DAV_PROPFIND_RESP) && ls->dentry_name) {
                        if (ls->dentry_flags & IS_DIR) {
+
+                               /* ensure collection names end with slash */
+                               str_end_url_with_slash(ls->dentry_name, &ls->dentry_name);
+
                                if (ls->flags & PROCESS_DIRS) {
                                        ls->userFunc(ls);
                                }