On Wed, Aug 03, 2011 at 01:31:39PM +0200, David Coppa wrote:
> Hi,
> 
> bzr is broken since we switched to python2.7, due to an api change
> in the xmlrpclib library.
> 
> The patch below fixes this issue. The patch is stolen from fedora, 
> but it's the same in any $randomlinuxdistro...

Definitely ok for me.

Landry

> $ bzr branch lp:egtk
> bzr: ERROR: exceptions.AttributeError: addinfourl instance has no attribute 
> 'getheader'
> 
> Traceback (most recent call last):
>   File "/usr/local/lib/python2.7/site-packages/bzrlib/commands.py", line 912, 
> in exception_to_return_code
>     return the_callable(*args, **kwargs)
>   File "/usr/local/lib/python2.7/site-packages/bzrlib/commands.py", line 
> 1112, in run_bzr
>     ret = run(*run_argv)
>   File "/usr/local/lib/python2.7/site-packages/bzrlib/commands.py", line 690, 
> in run_argv_aliases
>     return self.run(**all_cmd_args)
>   File "/usr/local/lib/python2.7/site-packages/bzrlib/commands.py", line 705, 
> in run
>     return self._operation.run_simple(*args, **kwargs)
>   File "/usr/local/lib/python2.7/site-packages/bzrlib/cleanup.py", line 135, 
> in run_simple
>     self.cleanups, self.func, *args, **kwargs)
>   File "/usr/local/lib/python2.7/site-packages/bzrlib/cleanup.py", line 165, 
> in _do_with_cleanups
>     result = func(*args, **kwargs)
>   File "/usr/local/lib/python2.7/site-packages/bzrlib/builtins.py", line 
> 1209, in run
>     from_location)
>   File "/usr/local/lib/python2.7/site-packages/bzrlib/bzrdir.py", line 1032, 
> in open_tree_or_branch
>     bzrdir = klass.open(location)
>   File "/usr/local/lib/python2.7/site-packages/bzrlib/bzrdir.py", line 910, 
> in open
>     t = get_transport(base, possible_transports=possible_transports)
>   File "/usr/local/lib/python2.7/site-packages/bzrlib/lazy_import.py", line 
> 125, in __call__
>     return obj(*args, **kwargs)
>   File "/usr/local/lib/python2.7/site-packages/bzrlib/transport/__init__.py", 
> line 1569, in get_transport
>     base = directories.dereference(base)
>   File "/usr/local/lib/python2.7/site-packages/bzrlib/directory_service.py", 
> line 58, in dereference
>     return service().look_up(name, url)
>   File 
> "/usr/local/lib/python2.7/site-packages/bzrlib/plugins/launchpad/lp_directory.py",
>  line 59, in look_up
>     return self._resolve(url)
>   File 
> "/usr/local/lib/python2.7/site-packages/bzrlib/plugins/launchpad/lp_directory.py",
>  line 69, in _resolve
>     result = resolve.submit(service)
>   File 
> "/usr/local/lib/python2.7/site-packages/bzrlib/plugins/launchpad/lp_registration.py",
>  line 272, in submit
>     self._authenticated)
>   File 
> "/usr/local/lib/python2.7/site-packages/bzrlib/plugins/launchpad/lp_registration.py",
>  line 195, in send_request
>     result = method(*method_params)
>   File "/usr/local/lib/python2.7/xmlrpclib.py", line 1224, in __call__
>     return self.__send(self.__name, args)
>   File "/usr/local/lib/python2.7/xmlrpclib.py", line 1570, in __request
>     verbose=self.__verbose
>   File 
> "/usr/local/lib/python2.7/site-packages/bzrlib/plugins/launchpad/lp_registration.py",
>  line 78, in request
>     return self.parse_response(response)
>   File "/usr/local/lib/python2.7/xmlrpclib.py", line 1449, in parse_response
>     if response.getheader("Content-Encoding", "") == "gzip":
> AttributeError: addinfourl instance has no attribute 'getheader'
> 
> bzr 2.2.2 on python 2.7.1 
> (OpenBSD-5.0-amd64-Intel-R-_Core-TM-2_Duo_CPU_T7250_@_2.00GHz-64bit-ELF)
> arguments: ['/usr/local/bin/bzr', 'branch', 'lp:egtk']
> encoding: 'UTF-8', fsenc: 'UTF-8', lang: None
> plugins:
>   bash_completion      
> /usr/local/lib/python2.7/site-packages/bzrlib/plugins/bash_completion [2.2.2]
>   launchpad            
> /usr/local/lib/python2.7/site-packages/bzrlib/plugins/launchpad [2.2.2]
>   netrc_credential_store 
> /usr/local/lib/python2.7/site-packages/bzrlib/plugins/netrc_credential_store 
> [2.2.2]
>   news_merge           
> /usr/local/lib/python2.7/site-packages/bzrlib/plugins/news_merge [2.2.2]
> 
> *** Bazaar has encountered an internal error.  This probably indicates a
>     bug in Bazaar.  You can help us fix it by filing a bug report at
>         https://bugs.launchpad.net/bzr/+filebug
>     including this traceback and a description of the problem.
> 
> 
> 
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/devel/bzr/Makefile,v
> retrieving revision 1.16
> diff -u -p -r1.16 Makefile
> --- Makefile  8 Jun 2011 17:40:08 -0000       1.16
> +++ Makefile  3 Aug 2011 11:30:16 -0000
> @@ -4,7 +4,7 @@ COMMENT =     distributed version control sy
>  
>  MODPY_EGG_VERSION = 2.2.2
>  DISTNAME =   bzr-${MODPY_EGG_VERSION}
> -REVISION =   0
> +REVISION =   1
>  CATEGORIES = devel
>  
>  HOMEPAGE =   http://bazaar-vcs.org/
> Index: patches/patch-bzrlib_transport_http__urllib2_wrappers_py
> ===================================================================
> RCS file: patches/patch-bzrlib_transport_http__urllib2_wrappers_py
> diff -N patches/patch-bzrlib_transport_http__urllib2_wrappers_py
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-bzrlib_transport_http__urllib2_wrappers_py  3 Aug 2011 
> 11:30:16 -0000
> @@ -0,0 +1,43 @@
> +$OpenBSD$
> +
> +Unbreak bzr with python2.7 (xmlrpclib API change)
> +https://bugs.launchpad.net/bzr/+bug/612096
> +
> +--- bzrlib/transport/http/_urllib2_wrappers.py.orig  Thu Nov 25 16:59:33 2010
> ++++ bzrlib/transport/http/_urllib2_wrappers.py       Wed Aug  3 13:10:47 2011
> +@@ -75,6 +75,26 @@ from bzrlib import (
> +     )
> + 
> + 
> ++class addinfourl(urllib2.addinfourl):
> ++    '''Replacement addinfourl class compatible with python-2.7's xmlrpclib
> ++
> ++    In python-2.7, xmlrpclib expects that the response object that it 
> receives
> ++    has a getheader method.  httplib.HTTPResponse provides this but
> ++    urllib2.addinfourl does not.  Add the necessary functions here, ported 
> to
> ++    use the internal data structures of addinfourl.
> ++    '''
> ++
> ++    def getheader(self, name, default=None):
> ++        if self.headers is None:
> ++            raise httplib.ResponseNotReady()
> ++        return self.headers.getheader(name, default)
> ++
> ++    def getheaders(self):
> ++        if self.headers is None:
> ++            raise httplib.ResponseNotReady()
> ++        return self.headers.items()
> ++
> ++
> + class _ReportingFileSocket(object):
> + 
> +     def __init__(self, filesock, report_activity=None):
> +@@ -656,7 +676,7 @@ class AbstractHTTPHandler(urllib2.AbstractHTTPHandler)
> +             r = response
> +             r.recv = r.read
> +             fp = socket._fileobject(r, bufsize=65536)
> +-            resp = urllib2.addinfourl(fp, r.msg, req.get_full_url())
> ++            resp = addinfourl(fp, r.msg, req.get_full_url())
> +             resp.code = r.status
> +             resp.msg = r.reason
> +             resp.version = r.version
> 

Reply via email to