Well to start with, it only seems to affect multipart requests. Which isn't very surprising since there is no "boundary" for single-part requests.
If I'm reading the log correctly, though, I don't understand why we are failing. Specifically, it looks like Savannah is returning:
< Connection: Keep-Alive
< Content-Type: multipart/byteranges; boundary=":gn1T,l__lXvUYr73ia-"
< Date: Thu, 31 Jul 2008 16:12:17 GMT
< Server: Apache/2.2.3 (Debian) DAV/2
< Last-Modified: Thu, 26 Jun 2008 22:04:56 GMT
< ETag: "1c9c203-9e5b0-fbc3b200"
< Accept-Ranges: bytes
< Content-Type: application/plain
< Via: 1.0 hinet-C233.8
Which is perfectly clear about what the boundary should be. I wonder if it is because Savannah is returning 2 Content-type: strings, which is confusing pycurl.
Specifically, I'm guessing that pycurl is just appending the second value onto the first value, and then getting:
Well to start with, it only seems to affect multipart requests. Which isn't very surprising since there is no "boundary" for single-part requests.
If I'm reading the log correctly, though, I don't understand why we are failing. Specifically, it looks like Savannah is returning: byteranges; boundary= ":gn1T, l__lXvUYr73ia- " 9e5b0-fbc3b200"
< Connection: Keep-Alive
< Content-Type: multipart/
< Date: Thu, 31 Jul 2008 16:12:17 GMT
< Server: Apache/2.2.3 (Debian) DAV/2
< Last-Modified: Thu, 26 Jun 2008 22:04:56 GMT
< ETag: "1c9c203-
< Accept-Ranges: bytes
< Content-Type: application/plain
< Via: 1.0 hinet-C233.8
Which is perfectly clear about what the boundary should be. I wonder if it is because Savannah is returning 2 Content-type: strings, which is confusing pycurl.
Specifically, I'm guessing that pycurl is just appending the second value onto the first value, and then getting:
content_type = 'multipart/ byteranges; boundary=";gn1...." application/plain'
And then it fails to parse the boundary="" portion. (It doesn't find the quotes to remove because of the trailing information.)
Could you try doing the same fetch without pycurl? Specifically try:
bzr pull http+urllib: //original/ path
We have 2-http implementations, and it is possible that urllib handles this better.
That said, is it legal to give 2 ContentType values? (Certainly urllib might break under this condition as well, but at least we could try it.)