Rev 4869: Merge fix for bug #583667 from 2.0 in file:///home/vila/src/bzr/bugs/583667-lp-no-edge-2.1/

Vincent Ladeuil v.ladeuil+lp at free.fr
Fri Nov 26 16:19:59 GMT 2010


At file:///home/vila/src/bzr/bugs/583667-lp-no-edge-2.1/

------------------------------------------------------------
revno: 4869 [merge]
revision-id: v.ladeuil+lp at free.fr-20101126161957-0g5wlr5g8873i5rf
parent: pqm at pqm.ubuntu.com-20101015030427-70zuki5lqgsnejtb
parent: v.ladeuil+lp at free.fr-20101126153458-k2r43hmcgt6y9jvn
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: 583667-lp-no-edge-2.1
timestamp: Fri 2010-11-26 17:19:57 +0100
message:
  Merge fix for bug #583667 from 2.0
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/lockdir.py              lockdir.py-20060220222025-98258adf27fbdda3
  bzrlib/plugins/launchpad/__init__.py __init__.py-20060315182712-2d5feebd2a1032dc
  bzrlib/plugins/launchpad/lp_registration.py lp_registration.py-20060315190948-daa617eafe3a8d48
  bzrlib/plugins/launchpad/test_lp_directory.py test_lp_indirect.py-20070126002743-oyle362tzv9cd8mi-1
  bzrlib/plugins/launchpad/test_lp_open.py test_lp_open.py-20090125174355-hxrsxh3sj84225qu-1
  bzrlib/plugins/launchpad/test_lp_service.py test_lp_service.py-20080213034527-drf0ucr2x1js3onb-1
  bzrlib/plugins/launchpad/test_register.py test_register.py-20060315182712-40f5dda945c829a8
  bzrlib/reconcile.py            reweave_inventory.py-20051108164726-1e5e0934febac06e
  bzrlib/remote.py               remote.py-20060720103555-yeeg2x51vn0rbtdp-1
  bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
  bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
  bzrlib/tests/blackbox/test_commit.py test_commit.py-20060212094538-ae88fc861d969db0
  bzrlib/tests/blackbox/test_merge.py test_merge.py-20060323225809-9bc0459c19917f41
  bzrlib/tests/blackbox/test_reconfigure.py test_reconfigure.py-20070908173426-khfo5fi2rgzgtwj3-1
  bzrlib/tests/per_tree/test_inv.py test_inv.py-20070312023226-0cdvk5uwhutis9vg-1
  bzrlib/tests/per_workingtree/test_content_filters.py test_content_filters-20080424071441-8navsrmrfdxpn90a-1
  bzrlib/tests/test_errors.py    test_errors.py-20060210110251-41aba2deddf936a8
  bzrlib/tests/test_lockdir.py   test_lockdir.py-20060220222025-33d4221569a3d600
  bzrlib/tests/test_osutils.py   test_osutils.py-20051201224856-e48ee24c12182989
  bzrlib/tests/test_remote.py    test_remote.py-20060720103555-yeeg2x51vn0rbtdp-2
  bzrlib/tests/test_ui.py        test_ui.py-20051130162854-458e667a7414af09
  bzrlib/workingtree_4.py        workingtree_4.py-20070208044105-5fgpc5j3ljlh5q6c-1
  setup.py                       setup.py-20050314065409-02f8a0a6e3f9bc70
-------------- next part --------------
=== modified file 'NEWS'
--- a/NEWS	2010-10-08 10:05:39 +0000
+++ b/NEWS	2010-11-26 16:19:57 +0000
@@ -13,6 +13,13 @@
 Compatibility Breaks
 ********************
 
+* The ``edge.launchpad.net`` server has been deprecated and all references to
+  it have been removed from the code base. This ensures that users upgrading
+  to bzr 2.0.7 or better will never try to contact the 'edge' server. Users of
+  previous versions can workaround connection problems by setting the
+  ``BZR_LP_XMLRPC_URL`` environment variable to
+  ``http://xmlrpc.launchpad.net/bazaar/``.  (Vincent Ladeuil, #583667)
+
 New Features
 ************
 

=== modified file 'bzrlib/lockdir.py'
--- a/bzrlib/lockdir.py	2010-09-10 05:13:57 +0000
+++ b/bzrlib/lockdir.py	2010-11-26 16:19:57 +0000
@@ -244,7 +244,7 @@
         # have a similar bug allowing someone to think they got the lock
         # when it's already held.
         #
-        # See <https://bugs.edge.launchpad.net/bzr/+bug/498378> for one case.
+        # See <https://bugs.launchpad.net/bzr/+bug/498378> for one case.
         #
         # Strictly the check is unnecessary and a waste of time for most
         # people, but probably worth trapping if something is wrong.

=== modified file 'bzrlib/plugins/launchpad/__init__.py'
--- a/bzrlib/plugins/launchpad/__init__.py	2010-02-17 17:11:16 +0000
+++ b/bzrlib/plugins/launchpad/__init__.py	2010-11-26 16:19:57 +0000
@@ -17,7 +17,7 @@
 """Launchpad.net integration plugin for Bazaar."""
 
 # The XMLRPC server address can be overridden by setting the environment
-# variable $BZR_LP_XMLRPL_URL
+# variable $BZR_LP_XMLRPC_URL
 
 # see http://bazaar-vcs.org/Specs/BranchRegistrationTool
 

=== modified file 'bzrlib/plugins/launchpad/lp_registration.py'
--- a/bzrlib/plugins/launchpad/lp_registration.py	2010-02-17 17:11:16 +0000
+++ b/bzrlib/plugins/launchpad/lp_registration.py	2010-11-26 16:19:57 +0000
@@ -86,7 +86,6 @@
 
     LAUNCHPAD_DOMAINS = {
         'production': 'launchpad.net',
-        'edge': 'edge.launchpad.net',
         'staging': 'staging.launchpad.net',
         'demo': 'demo.launchpad.net',
         'dev': 'launchpad.dev',
@@ -98,11 +97,9 @@
     for instance, domain in LAUNCHPAD_DOMAINS.iteritems():
         LAUNCHPAD_INSTANCE[instance] = 'https://xmlrpc.%s/bazaar/' % domain
 
-    # We use edge as the default because:
-    # Beta users get redirected to it
-    # All users can use it
-    # There is a bug in the launchpad side where redirection causes an OOPS.
-    DEFAULT_INSTANCE = 'edge'
+    # We use production as the default because edge has been deprecated circa
+    # 2010-11 (see bug https://bugs.launchpad.net/bzr/+bug/583667)
+    DEFAULT_INSTANCE = 'production'
     DEFAULT_SERVICE_URL = LAUNCHPAD_INSTANCE[DEFAULT_INSTANCE]
 
     transport = None

=== modified file 'bzrlib/plugins/launchpad/test_lp_directory.py'
--- a/bzrlib/plugins/launchpad/test_lp_directory.py	2010-02-17 17:11:16 +0000
+++ b/bzrlib/plugins/launchpad/test_lp_directory.py	2010-11-26 16:19:57 +0000
@@ -91,7 +91,7 @@
         self.assertEquals('http://bazaar.launchpad.net/~apt/apt/devel',
                           directory._resolve('lp:apt', factory))
         # Make sure that resolve went to the production server.
-        self.assertEquals('https://xmlrpc.edge.launchpad.net/bazaar/',
+        self.assertEquals('https://xmlrpc.launchpad.net/bazaar/',
                           factory._service_url)
 
     def test_staging(self):

=== modified file 'bzrlib/plugins/launchpad/test_lp_open.py'
--- a/bzrlib/plugins/launchpad/test_lp_open.py	2010-02-17 17:11:16 +0000
+++ b/bzrlib/plugins/launchpad/test_lp_open.py	2010-11-26 16:19:57 +0000
@@ -54,7 +54,7 @@
         branch.set_public_branch(
             'bzr+ssh://bazaar.launchpad.net/~foo/bar/baz')
         self.assertEqual(
-            ['Opening https://code.edge.launchpad.net/~foo/bar/baz in web '
+            ['Opening https://code.launchpad.net/~foo/bar/baz in web '
              'browser'],
             self.run_open('lp'))
 
@@ -65,7 +65,7 @@
         branch.set_push_location(
             'bzr+ssh://bazaar.launchpad.net/~foo/bar/push')
         self.assertEqual(
-            ['Opening https://code.edge.launchpad.net/~foo/bar/public in web '
+            ['Opening https://code.launchpad.net/~foo/bar/public in web '
              'browser'],
             self.run_open('lp'))
 
@@ -76,7 +76,7 @@
         branch.set_push_location(
             'bzr+ssh://bazaar.launchpad.net/~foo/bar/baz')
         self.assertEqual(
-            ['Opening https://code.edge.launchpad.net/~foo/bar/baz in web '
+            ['Opening https://code.launchpad.net/~foo/bar/baz in web '
              'browser'],
             self.run_open('lp'))
 
@@ -85,7 +85,7 @@
         # location and no push location, then just try to look up the
         # Launchpad page for that URL.
         self.assertEqual(
-            ['Opening https://code.edge.launchpad.net/~foo/bar/baz in web '
+            ['Opening https://code.launchpad.net/~foo/bar/baz in web '
              'browser'],
             self.run_open('bzr+ssh://bazaar.launchpad.net/~foo/bar/baz'))
 

=== modified file 'bzrlib/plugins/launchpad/test_lp_service.py'
--- a/bzrlib/plugins/launchpad/test_lp_service.py	2009-03-23 14:59:43 +0000
+++ b/bzrlib/plugins/launchpad/test_lp_service.py	2010-11-26 14:25:18 +0000
@@ -54,11 +54,6 @@
         self.assertEqual('https://xmlrpc.staging.launchpad.net/bazaar/',
                          service.service_url)
 
-    def test_edge_service(self):
-        service = LaunchpadService(lp_instance='edge')
-        self.assertEqual('https://xmlrpc.edge.launchpad.net/bazaar/',
-                         service.service_url)
-
     def test_dev_service(self):
         service = LaunchpadService(lp_instance='dev')
         self.assertEqual('https://xmlrpc.launchpad.dev/bazaar/',
@@ -97,7 +92,7 @@
         web_url = service.get_web_url_from_branch_url(
             'bzr+ssh://bazaar.launchpad.net/~foo/bar/baz')
         self.assertEqual(
-            'https://code.edge.launchpad.net/~foo/bar/baz', web_url)
+            'https://code.launchpad.net/~foo/bar/baz', web_url)
 
     def test_product_bzr_ssh_url(self):
         service = LaunchpadService(lp_instance='production')
@@ -152,7 +147,7 @@
             dict(urls=['http://bazaar.launchpad.net/~foo/bar/baz']))
         web_url = service.get_web_url_from_branch_url('lp:foo', factory)
         self.assertEqual(
-            'https://code.edge.launchpad.net/~foo/bar/baz', web_url)
+            'https://code.launchpad.net/~foo/bar/baz', web_url)
 
     def test_lp_branch_fault(self):
         service = LaunchpadService()
@@ -171,13 +166,6 @@
         self.assertEqual(
             'https://code.staging.launchpad.net/~foo/bar/baz', web_url)
 
-    def test_edge_url(self):
-        service = LaunchpadService(lp_instance='edge')
-        web_url = service.get_web_url_from_branch_url(
-            'bzr+ssh://bazaar.launchpad.net/~foo/bar/baz')
-        self.assertEqual(
-            'https://code.edge.launchpad.net/~foo/bar/baz', web_url)
-
     def test_dev_url(self):
         service = LaunchpadService(lp_instance='dev')
         web_url = service.get_web_url_from_branch_url(

=== modified file 'bzrlib/plugins/launchpad/test_register.py'
--- a/bzrlib/plugins/launchpad/test_register.py	2009-06-10 03:56:49 +0000
+++ b/bzrlib/plugins/launchpad/test_register.py	2010-11-26 14:25:18 +0000
@@ -175,7 +175,7 @@
         self.assertEquals(out, 'Branch registered.\n')
 
     def test_onto_transport(self):
-        """Test how the request is sent by transmitting across a mock Transport"""
+        """How the request is sent by transmitting across a mock Transport"""
         # use a real transport, but intercept at the http/xml layer
         transport = InstrumentedXMLRPCTransport(self, expect_auth=True)
         service = LaunchpadService(transport)
@@ -188,7 +188,7 @@
                 'author at launchpad.net',
                 'product')
         rego.submit(service)
-        self.assertEquals(transport.connected_host, 'xmlrpc.edge.launchpad.net')
+        self.assertEquals(transport.connected_host, 'xmlrpc.launchpad.net')
         self.assertEquals(len(transport.sent_params), 6)
         self.assertEquals(transport.sent_params,
                 ('http://test-server.com/bzr/branch',  # branch_url
@@ -200,12 +200,12 @@
         self.assertTrue(transport.got_request)
 
     def test_onto_transport_unauthenticated(self):
-        """Test how an unauthenticated request is transmitted across a mock Transport"""
+        """An unauthenticated request is transmitted across a mock Transport"""
         transport = InstrumentedXMLRPCTransport(self, expect_auth=False)
         service = LaunchpadService(transport)
         resolve = ResolveLaunchpadPathRequest('bzr')
         resolve.submit(service)
-        self.assertEquals(transport.connected_host, 'xmlrpc.edge.launchpad.net')
+        self.assertEquals(transport.connected_host, 'xmlrpc.launchpad.net')
         self.assertEquals(len(transport.sent_params), 1)
         self.assertEquals(transport.sent_params, ('bzr', ))
         self.assertTrue(transport.got_request)

=== modified file 'bzrlib/reconcile.py'
--- a/bzrlib/reconcile.py	2010-02-17 17:11:16 +0000
+++ b/bzrlib/reconcile.py	2010-11-26 16:19:57 +0000
@@ -495,7 +495,7 @@
     #  - lock the names list
     #  - perform a customised pack() that regenerates data as needed
     #  - unlock the names list
-    # https://bugs.edge.launchpad.net/bzr/+bug/154173
+    # https://bugs.launchpad.net/bzr/+bug/154173
 
     def _reconcile_steps(self):
         """Perform the steps to reconcile this repository."""

=== modified file 'bzrlib/remote.py'
--- a/bzrlib/remote.py	2010-05-19 23:09:33 +0000
+++ b/bzrlib/remote.py	2010-11-26 16:19:57 +0000
@@ -879,7 +879,7 @@
     def _has_same_fallbacks(self, other_repo):
         """Returns true if the repositories have the same fallbacks."""
         # XXX: copied from Repository; it should be unified into a base class
-        # <https://bugs.edge.launchpad.net/bzr/+bug/401622>
+        # <https://bugs.launchpad.net/bzr/+bug/401622>
         my_fb = self._fallback_repositories
         other_fb = other_repo._fallback_repositories
         if len(my_fb) != len(other_fb):

=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py	2010-03-23 06:45:56 +0000
+++ b/bzrlib/repository.py	2010-11-26 16:19:57 +0000
@@ -1686,7 +1686,7 @@
                 "May not fetch while in a write group.")
         # fast path same-url fetch operations
         # TODO: lift out to somewhere common with RemoteRepository
-        # <https://bugs.edge.launchpad.net/bzr/+bug/401646>
+        # <https://bugs.launchpad.net/bzr/+bug/401646>
         if (self.has_same_location(source)
             and fetch_spec is None
             and self._has_same_fallbacks(source)):

=== modified file 'bzrlib/tests/__init__.py'
--- a/bzrlib/tests/__init__.py	2010-09-23 13:52:55 +0000
+++ b/bzrlib/tests/__init__.py	2010-11-26 16:19:57 +0000
@@ -743,7 +743,7 @@
     # XXX: Should probably unify more with CannedInputUIFactory or a
     # particular configuration of TextUIFactory, or otherwise have a clearer
     # idea of how they're supposed to be different.
-    # See https://bugs.edge.launchpad.net/bzr/+bug/408213
+    # See https://bugs.launchpad.net/bzr/+bug/408213
 
     def __init__(self, stdout=None, stderr=None, stdin=None):
         if stdin is not None:

=== modified file 'bzrlib/tests/blackbox/test_commit.py'
--- a/bzrlib/tests/blackbox/test_commit.py	2010-02-17 17:11:16 +0000
+++ b/bzrlib/tests/blackbox/test_commit.py	2010-11-26 16:19:57 +0000
@@ -654,7 +654,7 @@
         self.assertContainsRe(err, r'modified test\nCommitted revision 2.')
 
     def test_commit_readonly_checkout(self):
-        # https://bugs.edge.launchpad.net/bzr/+bug/129701
+        # https://bugs.launchpad.net/bzr/+bug/129701
         # "UnlockableTransport error trying to commit in checkout of readonly
         # branch"
         self.make_branch('master')

=== modified file 'bzrlib/tests/blackbox/test_merge.py'
--- a/bzrlib/tests/blackbox/test_merge.py	2010-02-17 17:11:16 +0000
+++ b/bzrlib/tests/blackbox/test_merge.py	2010-11-26 16:19:57 +0000
@@ -393,7 +393,7 @@
     def test_directive_cherrypick(self):
         source = self.make_branch_and_tree('source')
         source.commit("nothing")
-        # see https://bugs.edge.launchpad.net/bzr/+bug/409688 - trying to
+        # see https://bugs.launchpad.net/bzr/+bug/409688 - trying to
         # cherrypick from one branch into another unrelated branch with a
         # different root id will give shape conflicts.  as a workaround we
         # make sure they share the same root id.

=== modified file 'bzrlib/tests/blackbox/test_reconfigure.py'
--- a/bzrlib/tests/blackbox/test_reconfigure.py	2009-07-10 08:18:28 +0000
+++ b/bzrlib/tests/blackbox/test_reconfigure.py	2010-11-26 15:24:36 +0000
@@ -197,7 +197,7 @@
          * then make the second unstacked, so it has to fill in history from
            the original fallback lying underneath its original content
 
-        See discussion in <https://bugs.edge.launchpad.net/bzr/+bug/391411>
+        See discussion in <https://bugs.launchpad.net/bzr/+bug/391411>
         """
         # there are also per_branch tests that exercise remote operation etc
         tree_1 = self.make_branch_and_tree('b1', format='2a')

=== modified file 'bzrlib/tests/per_tree/test_inv.py'
--- a/bzrlib/tests/per_tree/test_inv.py	2010-02-16 16:08:40 +0000
+++ b/bzrlib/tests/per_tree/test_inv.py	2010-11-26 16:19:57 +0000
@@ -170,7 +170,7 @@
                          work_tree.get_canonical_inventory_path('Dir/None'))
 
     def test_canonical_tree_name_mismatch(self):
-        # see <https://bugs.edge.launchpad.net/bzr/+bug/368931>
+        # see <https://bugs.launchpad.net/bzr/+bug/368931>
         # some of the trees we want to use can only exist on a disk, not in
         # memory - therefore we can only test this if the filesystem is
         # case-sensitive.

=== modified file 'bzrlib/tests/per_workingtree/test_content_filters.py'
--- a/bzrlib/tests/per_workingtree/test_content_filters.py	2010-02-17 17:11:16 +0000
+++ b/bzrlib/tests/per_workingtree/test_content_filters.py	2010-11-26 16:19:57 +0000
@@ -227,7 +227,7 @@
 
     def test_path_content_summary(self):
         """path_content_summary should always talk about the canonical form."""
-        # see https://bugs.edge.launchpad.net/bzr/+bug/415508
+        # see https://bugs.launchpad.net/bzr/+bug/415508
         #
         # set up a tree where the canonical form has a string added to the
         # end

=== modified file 'bzrlib/tests/test_errors.py'
--- a/bzrlib/tests/test_errors.py	2010-09-10 05:13:57 +0000
+++ b/bzrlib/tests/test_errors.py	2010-11-26 16:19:57 +0000
@@ -710,7 +710,7 @@
             str(e), 'Unprintable exception ErrorWithBadFormat')
 
     def test_cannot_bind_address(self):
-        # see <https://bugs.edge.launchpad.net/bzr/+bug/286871>
+        # see <https://bugs.launchpad.net/bzr/+bug/286871>
         e = errors.CannotBindAddress('example.com', 22,
             socket.error(13, 'Permission denied'))
         self.assertContainsRe(str(e),

=== modified file 'bzrlib/tests/test_lockdir.py'
--- a/bzrlib/tests/test_lockdir.py	2010-09-23 16:37:27 +0000
+++ b/bzrlib/tests/test_lockdir.py	2010-11-26 16:19:57 +0000
@@ -726,7 +726,7 @@
     def test_no_lockdir_info(self):
         """We can cope with empty info files."""
         # This seems like a fairly common failure case - see
-        # <https://bugs.edge.launchpad.net/bzr/+bug/185103> and all its dupes.
+        # <https://bugs.launchpad.net/bzr/+bug/185103> and all its dupes.
         # Processes are often interrupted after opening the file
         # before the actual contents are committed.
         t = self.get_transport()
@@ -745,7 +745,7 @@
     def test_corrupt_lockdir_info(self):
         """We can cope with corrupt (and thus unparseable) info files."""
         # This seems like a fairly common failure case too - see
-        # <https://bugs.edge.launchpad.net/bzr/+bug/619872> for instance.
+        # <https://bugs.launchpad.net/bzr/+bug/619872> for instance.
         # In particular some systems tend to fill recently created files with
         # nul bytes after recovering from a system crash.
         t = self.get_transport()

=== modified file 'bzrlib/tests/test_osutils.py'
--- a/bzrlib/tests/test_osutils.py	2010-09-23 16:37:27 +0000
+++ b/bzrlib/tests/test_osutils.py	2010-11-26 16:19:57 +0000
@@ -1062,7 +1062,7 @@
         self.assertExpectedBlocks(expected_dirblocks[1:], result)
 
     def test_walkdirs_os_error(self):
-        # <https://bugs.edge.launchpad.net/bzr/+bug/338653>
+        # <https://bugs.launchpad.net/bzr/+bug/338653>
         # Pyrex readdir didn't raise useful messages if it had an error
         # reading the directory
         if sys.platform == 'win32':

=== modified file 'bzrlib/tests/test_remote.py'
--- a/bzrlib/tests/test_remote.py	2010-05-19 23:09:33 +0000
+++ b/bzrlib/tests/test_remote.py	2010-11-26 16:19:57 +0000
@@ -1617,7 +1617,7 @@
     def test_get_multi_line_branch_conf(self):
         # Make sure that multiple-line branch.conf files are supported
         #
-        # https://bugs.edge.launchpad.net/bzr/+bug/354075
+        # https://bugs.launchpad.net/bzr/+bug/354075
         client = FakeClient()
         client.add_expected_call(
             'Branch.get_stacked_on_url', ('memory:///',),

=== modified file 'bzrlib/tests/test_ui.py'
--- a/bzrlib/tests/test_ui.py	2010-03-24 05:15:03 +0000
+++ b/bzrlib/tests/test_ui.py	2010-11-26 16:19:57 +0000
@@ -399,7 +399,7 @@
 
     def test_test_ui_factory_progress(self):
         # there's no output; we just want to make sure this doesn't crash -
-        # see https://bugs.edge.launchpad.net/bzr/+bug/408201
+        # see https://bugs.launchpad.net/bzr/+bug/408201
         ui = tests.TestUIFactory()
         pb = ui.nested_progress_bar()
         pb.update('hello')

=== modified file 'bzrlib/workingtree_4.py'
--- a/bzrlib/workingtree_4.py	2010-07-14 10:11:45 +0000
+++ b/bzrlib/workingtree_4.py	2010-11-26 16:19:57 +0000
@@ -1319,7 +1319,7 @@
     def _file_content_summary(self, path, stat_result):
         # This is to support the somewhat obsolete path_content_summary method
         # with content filtering: see
-        # <https://bugs.edge.launchpad.net/bzr/+bug/415508>.
+        # <https://bugs.launchpad.net/bzr/+bug/415508>.
         #
         # If the dirstate cache is up to date and knows the hash and size,
         # return that.

=== modified file 'setup.py'
--- a/setup.py	2010-03-07 13:33:37 +0000
+++ b/setup.py	2010-11-26 16:19:57 +0000
@@ -288,8 +288,8 @@
         # The code it generates re-uses a "local" pointer and
         # calls "PY_DECREF" after having set it to NULL. (It mixes PY_XDECREF
         # which is NULL safe with PY_DECREF which is not.)
-        # <https://bugs.edge.launchpad.net/bzr/+bug/449372>
-        # <https://bugs.edge.launchpad.net/bzr/+bug/276868>
+        # <https://bugs.launchpad.net/bzr/+bug/449372>
+        # <https://bugs.launchpad.net/bzr/+bug/276868>
         print 'Cannot build extension "bzrlib._dirstate_helpers_pyx" using'
         print 'your version of pyrex "%s". Please upgrade your pyrex' % (
             pyrex_version,)



More information about the bazaar-commits mailing list