Rev 5371: (jam) Merge 2.2.0 into trunk in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Fri Aug 6 23:11:37 BST 2010


At file:///home/pqm/archives/thelove/bzr/%2Btrunk/

------------------------------------------------------------
revno: 5371 [merge]
revision-id: pqm at pqm.ubuntu.com-20100806221134-i0gwvzn5qyyxftno
parent: pqm at pqm.ubuntu.com-20100806124332-dywuju3s7bzn5y69
parent: john at arbash-meinel.com-20100806204556-9y7b31h0awy28ee3
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Fri 2010-08-06 23:11:34 +0100
message:
  (jam) Merge 2.2.0 into trunk
added:
  tools/win32/py2exe_boot_common.py boot_common.py-20100726104937-42rsvhmwpm52nrv5-1
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/tests/test_progress.py  test_progress.py-20060308160359-978c397bc79b7fda
  bzrlib/tests/test_transform.py test_transaction.py-20060105172520-b3ffb3946550e6c4
  bzrlib/transform.py            transform.py-20060105172343-dd99e54394d91687
  bzrlib/ui/text.py              text.py-20051130153916-2e438cffc8afc478
  doc/developers/releasing.txt   releasing.txt-20080502015919-fnrcav8fwy8ccibu-1
  setup.py                       setup.py-20050314065409-02f8a0a6e3f9bc70
=== modified file 'NEWS'
--- a/NEWS	2010-08-05 08:30:07 +0000
+++ b/NEWS	2010-08-06 19:54:45 +0000
@@ -82,6 +82,15 @@
 Documentation
 *************
 
+* First tests defined for sphinx, including a new bzrlib.tests.features.sphinx
+  to make the tests conditional.
+  (Vincent Ladeuil)
+
+* Added a builder/writer sphinx extension that can generate texinfo files. The
+  generated files are syntactically correct but the info navigation nodes
+  needs more work. (Vincent Ladeuil, #219334)
+
+
 API Changes
 ***********
 
@@ -108,11 +117,30 @@
   distributed evenly among the parallel test suites, rather than slowing
   down just one suite.  (Andrew Bennetts)
 
-bzr 2.2rc1
-##########
-
-:Codename: ???
-:2.2rc1: NOT RELEASED YET
+
+bzr 2.2
+#######
+
+:Codename: La Hulpe
+:2.2: 2010-08-06
+
+This release marks the start of another long-term-stable series. From
+here, we will only make bugfix releases on the 2.2 series (2.2.1, etc),
+while 2.3 will become our new development series. The 2.0 and 2.1 series
+will also continue to get bugfixes. (Currently 2.0 is planned to be
+supported for another 6 months.)
+
+This is primarily a bugfix and polish release over the 2.1 series, with
+a large number of bugs fixed (>120), and some performance improvements.
+
+There are some compatibility changes in this release.  For users of bzrlib
+as a library, we now request that they call ``bzrlib.initialize`` and use
+the returned context manager appropriately. For commandline users we no
+longer guess user identity for ``bzr commit``, users must specify their
+identity using ``bzr whoami`` (you don't need to specify your identity for
+readonly operations).
+
+Users are encouraged to upgrade from the other stable series.
 
 Compatibility Breaks
 ********************
@@ -128,9 +156,6 @@
   macrobenchmark suite.
   (Martin Pool)
 
-New Features
-************
-
 Bug Fixes
 *********
 
@@ -146,12 +171,27 @@
 * Don't traceback trying to unversion children files of an already
   unversioned directory.  (Vincent Ladeuil, #494221)
 
+* ``HTTP/1.1` test servers now set a ``Content-Length`` header to comply
+  with pedantic ``HTTP/1.1`` clients. (Vincent Ladeuil, #568421)
+
+* Progress bars prefer to truncate the text message rather than the
+  counters.  The spinner is shown between the network transfer indicator
+  and the progress message.  Progress bars are correctly cleared off when 
+  they finish.  (Martin Pool, #611127)
+
+* Recursive binding for checkouts is now detected by bzr. A clear error
+  message is shown to the user. (Parth Malwankar, #405192)
+
 Improvements
 ************
 
 * Add ``bzrlib.merge.MergeIntoMerger``, which can merge part or all of a
   tree, and works with unrelated branches.  (Andrew Bennetts)
 
+* Add py2exe windows target ``bzrw.exe``. This allow for starting a Bazaar
+  GUI with out have a console open in the background.
+  (Gary van der Merwe, #433781)
+
 Documentation
 *************
 
@@ -164,9 +204,6 @@
 
 * Delete ``ProgressTask.note``, which was deprecated in 2.1.
 
-Internals
-*********
-
 Testing
 *******
 
@@ -610,17 +647,6 @@
   plugins to an all-in-one installation, ensure they are compiled and
   installed with -O1 or help may not work. (Martin [gz])
 
-Documentation
-*************
-
-* First tests defined for sphinx, including a new bzrlib.tests.features.sphinx
-  to make the tests conditional.
-  (Vincent Ladeuil)
-
-* Added a builder/writer sphinx extension that can generate texinfo files. The
-  generated files are syntactically correct but the info navigation nodes
-  needs more work. (Vincent Ladeuil, #219334)
-
 API Changes
 ***********
 
@@ -676,7 +702,7 @@
 
 * No longer require zlib headers to build extensions, and remove the need
   for seperate copy of zlib library on windows.
-  (John Arbash Meinel, Martin <gzlist at googlemail.com>, #66923)
+  (John Arbash Meinel, Martin <gzlist at googlemail.com>, #566923)
 
 Testing
 *******
@@ -764,7 +790,7 @@
   (Vincent Ladeuil, #474807)
 
 * Properly handle ``param_name`` attribute for ``ListOption``.
-  (Martin von Gagern, 387117)
+  (Martin von Gagern, #387117)
 
 Improvements
 ************
@@ -884,7 +910,7 @@
 
 * Parsing of command lines, for example in ``diff --using``, no longer
   treats backslash as an escape character on Windows.   (Gordon Tyler,
-  #392248)
+  #392428)
 
 * Plugins can be disabled by defining ``BZR_DISABLE_PLUGINS`` as
   a list of plugin names separated by ':' (';' on windows).

=== modified file 'bzrlib/tests/test_progress.py'
--- a/bzrlib/tests/test_progress.py	2010-07-09 15:47:01 +0000
+++ b/bzrlib/tests/test_progress.py	2010-08-05 08:18:06 +0000
@@ -70,6 +70,21 @@
         task.total_cnt = total
         return task
 
+    def test_clear(self):
+        # <https://bugs.launchpad.net/bzr/+bug/611127> clear must actually
+        # send spaces to clear the line
+        out, view = self.make_view()
+        task = self.make_task(None, view, 'reticulating splines', 5, 20)
+        view.show_progress(task)
+        self.assertEqual(
+'\r/ reticulating splines 5/20                                                    \r'
+            , out.getvalue())
+        view.clear()
+        self.assertEqual(
+'\r/ reticulating splines 5/20                                                    \r'
+            + '\r' + 79 * ' ' + '\r',
+            out.getvalue())
+
     def test_render_progress_no_bar(self):
         """The default view now has a spinner but no bar."""
         out, view = self.make_view()

=== modified file 'bzrlib/tests/test_transform.py'
--- a/bzrlib/tests/test_transform.py	2010-05-13 17:32:55 +0000
+++ b/bzrlib/tests/test_transform.py	2010-07-21 10:38:31 +0000
@@ -859,10 +859,14 @@
         myfile = create.new_file('myfile', root_id, 'myfile-text',
                                  'myfile-id')
         create.apply()
-        # make the file and directory readonly in the hope this will prevent
-        # renames
-        osutils.make_readonly(self.wt.abspath('first-dir'))
-        osutils.make_readonly(self.wt.abspath('myfile'))
+        if os.name == "posix" and sys.platform != "cygwin":
+            # posix filesystems fail on renaming if the readonly bit is set
+            osutils.make_readonly(self.wt.abspath('first-dir'))
+        elif os.name == "nt":
+            # windows filesystems fail on renaming open files
+            self.addCleanup(file(self.wt.abspath('myfile')).close)
+        else:
+            self.skip("Don't know how to force a permissions error on rename")
         # now transform to rename
         rename_transform, root_id = self.get_transform()
         file_trans_id = rename_transform.trans_id_file_id('myfile-id')
@@ -870,13 +874,15 @@
         rename_transform.adjust_path('newname', dir_id, file_trans_id)
         e = self.assertRaises(errors.TransformRenameFailed,
             rename_transform.apply)
-        # Looks like: 
+        # On nix looks like: 
         # "Failed to rename .../work/.bzr/checkout/limbo/new-1
         # to .../first-dir/newname: [Errno 13] Permission denied"
-        # so the first filename is not visible in it; we expect a strerror but
-        # it may vary per OS and language so it's not checked here
+        # On windows looks like:
+        # "Failed to rename .../work/myfile to 
+        # .../work/.bzr/checkout/limbo/new-1: [Errno 13] Permission denied"
+        # The strerror will vary per OS and language so it's not checked here
         self.assertContainsRe(str(e),
-            "Failed to rename .*first-dir.newname:")
+            "Failed to rename .*(first-dir.newname:|myfile)")
 
     def test_set_executability_order(self):
         """Ensure that executability behaves the same, no matter what order.

=== modified file 'bzrlib/transform.py'
--- a/bzrlib/transform.py	2010-07-15 13:39:38 +0000
+++ b/bzrlib/transform.py	2010-08-06 19:54:45 +0000
@@ -1182,7 +1182,7 @@
             if trans_id not in self._new_contents:
                 continue
             new_path = self._limbo_name(trans_id)
-            osutils.rename(old_path, new_path)
+            os.rename(old_path, new_path)
             for descendant in self._limbo_descendants(trans_id):
                 desc_path = self._limbo_files[descendant]
                 desc_path = new_path + desc_path[len(old_path):]
@@ -2919,8 +2919,8 @@
     def rename(self, from_, to):
         """Rename a file from one path to another."""
         try:
-            osutils.rename(from_, to)
-        except (IOError, OSError), e:
+            os.rename(from_, to)
+        except OSError, e:
             if e.errno in (errno.EEXIST, errno.ENOTEMPTY):
                 raise errors.FileExists(to, str(e))
             # normal OSError doesn't include filenames so it's hard to see where
@@ -2942,8 +2942,8 @@
         """Reverse all renames that have been performed"""
         for from_, to in reversed(self.past_renames):
             try:
-                osutils.rename(to, from_)
-            except (OSError, IOError), e:
+                os.rename(to, from_)
+            except OSError, e:
                 raise errors.TransformRenameFailed(to, from_, str(e), e.errno)                
         # after rollback, don't reuse _FileMover
         past_renames = None

=== modified file 'bzrlib/ui/text.py'
--- a/bzrlib/ui/text.py	2010-07-09 15:47:01 +0000
+++ b/bzrlib/ui/text.py	2010-08-05 08:18:06 +0000
@@ -304,11 +304,15 @@
         # we need one extra space for terminals that wrap on last char
         w = osutils.terminal_width() 
         if w is None:
-            return w
+            return None
         else:
             return w - 1
 
     def _show_line(self, s):
+        # sys.stderr.write("progress %r\n" % s)
+        width = self._avail_width()
+        if width is not None:
+            s = '%-*.*s' % (width, width, s)
         self._term_file.write('\r' + s + '\r')
 
     def clear(self):

=== modified file 'doc/developers/releasing.txt'
--- a/doc/developers/releasing.txt	2010-05-27 19:54:56 +0000
+++ b/doc/developers/releasing.txt	2010-08-06 20:11:05 +0000
@@ -3,10 +3,9 @@
 
 This document describes the processes for making and announcing a Bazaar
 release, and managing the release process.  This is just one phase of the
-`overall development cycle <http://doc.bazaar-vcs.org/developers/cycle.html>`_,
-but it's the most complex part.
-This document gives a checklist you can follow from start to end in one
-go.
+`overall development cycle <http://doc.bazaar.canonical.com/developers/cycle.html>`_,
+but it's the most complex part.  This document gives a checklist you can
+follow from start to end in one go.
 
 If you're helping the Release Manager (RM) for one reason or another, you
 may notice that he didn't follow that document scrupulously. He may have
@@ -73,7 +72,7 @@
 	submit_to = bazaar at lists.canonical.com
 	smtp_server = mail.example.com:25
 
-    Please see <http://doc.bazaar-vcs.org/developers/HACKING.html#an-overview-of-pqm>
+    Please see <http://doc.bazaar.canonical.com/developers/HACKING.html#an-overview-of-pqm>
     for more details on PQM
 
 #. Update the version number in the ``bzr`` script, and the
@@ -263,17 +262,12 @@
 
 #. Go to the release web page at <https://launchpad.net/bzr/x.y/x.y.z>
 
-#. Link from http://bazaar-vcs.org/SourceDownloads to the tarball and
-   signature.
-
-#. Announce on the `Bazaar website <http://bazaar-vcs.org/>`_.
+#. Announce on the `Bazaar website <http://bazaar.canonical.com/>`_.
    This page is edited via the lp:bzr-website branch. (Changes
    pushed to this branch are refreshed by a cron job on escudero.)
 
-#. Announce on the `Bazaar wiki <http://bazaar-vcs.org/Welcome>`_.
-
 #. Check that the documentation for this release is available in
-   <http://doc.bazaar-vcs.org>.  It should be automatically build when the
+   <http://doc.bazaar.canonical.com>.  It should be automatically build when the
    branch is created, by a cron script ``update-bzr-docs`` on
    ``escudero``. As of today (2009-08-27) ``igc`` manually updates the
    pretty version of it.
@@ -312,7 +306,7 @@
       feedback.
 
       Bazaar is now available for download from
-      http://bazaar-vcs.org/Download as a source tarball; packages
+      https://launchpad.net/bzr/2.x/2.x/ as a source tarball; packages
       for various systems will be available soon.
 
       <<NEWS section from this release back to the last major release>>

=== modified file 'setup.py'
--- a/setup.py	2010-07-26 10:15:32 +0000
+++ b/setup.py	2010-08-02 19:56:52 +0000
@@ -9,6 +9,7 @@
 import os
 import os.path
 import sys
+import copy
 
 if sys.version_info < (2, 4):
     sys.stderr.write("[ERROR] Not a supported Python version. Need 2.4+\n")
@@ -557,6 +558,8 @@
                                      company_name = "Canonical Ltd.",
                                      comments = META_INFO['description'],
                                     )
+    gui_target = copy.copy(target)
+    gui_target.dest_base = "bzrw"
 
     packages = BZRLIB['packages']
     packages.remove('bzrlib')
@@ -647,7 +650,7 @@
     console_targets = [target,
                        'tools/win32/bzr_postinstall.py',
                        ]
-    gui_targets = []
+    gui_targets = [gui_target]
     data_files = topics_files + plugins_files
 
     if 'qbzr' in plugins:
@@ -692,6 +695,8 @@
                                "dll_excludes": dll_excludes,
                                "dist_dir": "win32_bzr.exe",
                                "optimize": 2,
+                               "custom_boot_script":
+                                        "tools/win32/py2exe_boot_common.py",
                               },
                    }
 

=== added file 'tools/win32/py2exe_boot_common.py'
--- a/tools/win32/py2exe_boot_common.py	1970-01-01 00:00:00 +0000
+++ b/tools/win32/py2exe_boot_common.py	2010-08-02 16:12:01 +0000
@@ -0,0 +1,35 @@
+# Common py2exe boot script - executed for all target types.
+
+# In the standard py2exe boot script, it setup stderr so that anything written
+# to it will be written to exe.log, and a message dialog is shown.
+# For Bazaar, we log most things to .bzr.log, and there are many things that
+# write to stderr, that are not errors, and so we don't want the py2exe dialog
+# message, So also blackhole stderr.
+
+import sys
+if sys.frozen == "windows_exe":
+
+    class Blackhole(object):
+        softspace = 0
+        def write(self, text):
+            pass
+        def flush(self):
+            pass
+    sys.stdout = Blackhole()
+    sys.stderr = Blackhole()
+    del Blackhole
+del sys
+
+# Disable linecache.getline() which is called by
+# traceback.extract_stack() when an exception occurs to try and read
+# the filenames embedded in the packaged python code.  This is really
+# annoying on windows when the d: or e: on our build box refers to
+# someone elses removable or network drive so the getline() call
+# causes it to ask them to insert a disk in that drive.
+import linecache
+def fake_getline(filename, lineno, module_globals=None):
+    return ''
+linecache.orig_getline = linecache.getline
+linecache.getline = fake_getline
+
+del linecache, fake_getline




More information about the bazaar-commits mailing list