The tests that would have help avoid bug #73948 and all that mess :)
* bzrlib/transport/http/response.py: (handle_response): Translate a 416 http error code into a bzr exception.
* bzrlib/transport/http/_urllib2_wrappers.py: (HTTPDefaultErrorHandler.http_error_default): Translate a 416 http error code into a bzr exception.
* bzrlib/transport/http/_pycurl.py: (PyCurlTransport._curl_perform): It could happen that pycrul itself detect a short read.
* bzrlib/transport/http/__init__.py: (HttpTransportBase._retry_get): New method, factorizing the retry logic. (HttpTransportBase.readv): We can have exception during the initial GET worth degrading the range requirements (i.e. retrying the GET request with either single or not ranges).
* bzrlib/tests/test_transport_implementations.py: (TransportTests.test_readv_short_read): InvalidRange can also be raised.
* bzrlib/tests/test_http.py: (TestRangeRequestServer.test_readv_invalid_ranges): Was named test_readv_short_read, the new name make the intent clearer. Depending of the code path used (urllib or pycurl), both exceptions can be raised.
* bzrlib/tests/HttpServer.py: (TestingHTTPRequestHandler.do_GET): If invalid ranges are specified, returns a 416 instead of the whole file (both are valid according to the RFC).