Rev 6193: Merge vila's integration branch, to ensure we have the bzr-2.5b2 tag. in http://bazaar.launchpad.net/~jameinel/bzr/2.5-longer-timeout

John Arbash Meinel john at arbash-meinel.com
Thu Oct 6 09:51:04 UTC 2011


At http://bazaar.launchpad.net/~jameinel/bzr/2.5-longer-timeout

------------------------------------------------------------
revno: 6193 [merge]
revision-id: john at arbash-meinel.com-20111006095045-c2r8uk28vf6eil9j
parent: john at arbash-meinel.com-20111005150154-m8522v2u3ie7wpo2
parent: v.ladeuil+lp at free.fr-20111006094734-h4s6iu16j8jbup2h
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: 2.5-longer-timeout
timestamp: Thu 2011-10-06 11:50:45 +0200
message:
  Merge vila's integration branch, to ensure we have the bzr-2.5b2 tag.
modified:
  bzrlib/__init__.py             __init__.py-20050309040759-33e65acf91bbcd5d
  bzrlib/builtins.py             builtins.py-20050830033751-fc01482b9ca23183
  bzrlib/bzrdir.py               bzrdir.py-20060131065624-156dfea39c4387cb
  bzrlib/diff-delta.c            diffdelta.c-20090226042143-l9wzxynyuxnb5hus-1
  bzrlib/osutils.py              osutils.py-20050309040759-eeaff12fbf77ac86
  bzrlib/plugins/launchpad/lp_directory.py lp_indirect.py-20070126012204-de5rugwlt22c7u7e-1
  bzrlib/plugins/launchpad/test_lp_directory.py test_lp_indirect.py-20070126002743-oyle362tzv9cd8mi-1
  bzrlib/tests/blackbox/test_init.py test_init.py-20060309032856-a292116204d86eb7
  bzrlib/tests/stub_sftp.py      stub_sftp.py-20051027032739-0e7ef4f7bab0e174
  bzrlib/tests/test_bzrdir.py    test_bzrdir.py-20060131065654-deba40eef51cf220
  bzrlib/tests/test_osutils.py   test_osutils.py-20051201224856-e48ee24c12182989
  bzrlib/transport/local.py      local_transport.py-20050711165921-9b1f142bfe480c24
  bzrlib/urlutils.py             urlutils.py-20060502195429-e8a161ecf8fac004
  bzrlib/version.py              version.py-20060816024207-ves6ult9a11taj9t-1
  doc/en/release-notes/bzr-2.4.txt bzr2.4.txt-20110114053217-k7ym9jfz243fddjm-1
  doc/en/release-notes/bzr-2.5.txt bzr2.5.txt-20110708125756-587p0hpw7oke4h05-1
-------------- next part --------------
=== modified file 'bzrlib/__init__.py'
--- a/bzrlib/__init__.py	2011-09-26 15:40:02 +0000
+++ b/bzrlib/__init__.py	2011-10-06 09:20:02 +0000
@@ -52,7 +52,7 @@
 # Python version 2.0 is (2, 0, 0, 'final', 0)."  Additionally we use a
 # releaselevel of 'dev' for unreleased under-development code.
 
-version_info = (2, 5, 0, 'dev', 2)
+version_info = (2, 5, 0, 'dev', 3)
 
 # API compatibility version
 api_minimum_version = (2, 4, 0)

=== modified file 'bzrlib/builtins.py'
--- a/bzrlib/builtins.py	2011-10-03 14:50:03 +0000
+++ b/bzrlib/builtins.py	2011-10-05 14:12:34 +0000
@@ -1908,7 +1908,7 @@
                         raise errors.BranchExistsWithoutWorkingTree(location)
                 raise errors.AlreadyBranchError(location)
             branch = a_bzrdir.create_branch()
-            if not no_tree:
+            if not no_tree and not a_bzrdir.has_workingtree():
                 a_bzrdir.create_workingtree()
         if append_revisions_only:
             try:

=== modified file 'bzrlib/bzrdir.py'
--- a/bzrlib/bzrdir.py	2011-09-20 10:47:29 +0000
+++ b/bzrlib/bzrdir.py	2011-10-05 14:12:34 +0000
@@ -1323,6 +1323,123 @@
         return config.TransportConfig(self.transport, 'control.conf')
 
 
+class BzrDirMeta1Colo(BzrDirMeta1):
+    """BzrDirMeta1 with support for colocated branches.
+
+    This format is experimental, and will eventually be merged back into
+    BzrDirMeta1.
+    """
+
+    def __init__(self, _transport, _format):
+        super(BzrDirMeta1Colo, self).__init__(_transport, _format)
+        self.control_files = lockable_files.LockableFiles(_transport,
+            self._format._lock_file_name, self._format._lock_class)
+
+    def _get_branch_path(self, name):
+        """Obtain the branch path to use.
+
+        This uses the API specified branch name first, and then falls back to
+        the branch name specified in the URL. If neither of those is specified,
+        it uses the default branch.
+
+        :param name: Optional branch name to use
+        :return: Relative path to branch, branch name
+        """
+        if name is None:
+            name = self._get_selected_branch()
+        if name is None:
+            return 'branch', None
+        return urlutils.join('branches', name), name
+
+    def _read_branch_list(self):
+        """Read the branch list.
+
+        :return: List of utf-8 encoded branch names.
+        """
+        try:
+            f = self.control_transport.get('branch-list')
+        except errors.NoSuchFile:
+            return []
+
+        ret = []
+        try:
+            for name in f:
+                ret.append(name.rstrip("\n"))
+        finally:
+            f.close()
+        return ret
+
+    def _write_branch_list(self, branches):
+        """Write out the branch list.
+
+        :param branches: List of utf-8 branch names to write
+        """
+        self.transport.put_bytes('branch-list',
+            "".join([name+"\n" for name in branches]))
+
+    def destroy_branch(self, name=None):
+        """See BzrDir.create_branch."""
+        path, name = self._get_branch_path(name)
+        if name is not None:
+            self.control_files.lock_write()
+            try:
+                branches = self._read_branch_list()
+                try:
+                    branches.remove(name)
+                except ValueError:
+                    raise errors.NotBranchError(name)
+                self._write_branch_list(name)
+            finally:
+                self.control_files.unlock()
+        self.transport.delete_tree(path)
+
+    def list_branches(self):
+        """See ControlDir.list_branches."""
+        ret = []
+        # Default branch
+        try:
+            ret.append(self.open_branch())
+        except (errors.NotBranchError, errors.NoRepositoryPresent):
+            pass
+
+        # colocated branches
+        ret.extend([self.open_branch(name) for name in
+                    self._read_branch_list()])
+
+        return ret
+
+    def get_branch_transport(self, branch_format, name=None):
+        """See BzrDir.get_branch_transport()."""
+        path, name = self._get_branch_path(name)
+        # XXX: this shouldn't implicitly create the directory if it's just
+        # promising to get a transport -- mbp 20090727
+        if branch_format is None:
+            return self.transport.clone(path)
+        try:
+            branch_format.get_format_string()
+        except NotImplementedError:
+            raise errors.IncompatibleFormat(branch_format, self._format)
+        if name is not None:
+            try:
+                self.transport.mkdir('branches', mode=self._get_mkdir_mode())
+            except errors.FileExists:
+                pass
+            branches = self._read_branch_list()
+            if not name in branches:
+                self.control_files.lock_write()
+                try:
+                    branches = self._read_branch_list()
+                    branches.append(name)
+                    self._write_branch_list(branches)
+                finally:
+                    self.control_files.unlock()
+        try:
+            self.transport.mkdir(path, mode=self._get_mkdir_mode())
+        except errors.FileExists:
+            pass
+        return self.transport.clone(path)
+
+
 class BzrProber(controldir.Prober):
     """Prober for formats that use a .bzr/ control directory."""
 
@@ -1629,6 +1746,8 @@
 
     fixed_components = False
 
+    colocated_branches = False
+
     def __init__(self):
         self._workingtree_format = None
         self._branch_format = None
@@ -1831,6 +1950,34 @@
 controldir.ControlDirFormat._default_format = BzrDirMetaFormat1()
 
 
+class BzrDirMetaFormat1Colo(BzrDirMetaFormat1):
+    """BzrDirMeta1 format with support for colocated branches."""
+
+    colocated_branches = True
+
+    @classmethod
+    def get_format_string(cls):
+        """See BzrDirFormat.get_format_string()."""
+        return "Bazaar meta directory, format 1 (with colocated branches)\n"
+
+    def get_format_description(self):
+        """See BzrDirFormat.get_format_description()."""
+        return "Meta directory format 1 with support for colocated branches"
+
+    def _open(self, transport):
+        """See BzrDirFormat._open."""
+        # Create a new format instance because otherwise initialisation of new
+        # metadirs share the global default format object leading to alias
+        # problems.
+        format = BzrDirMetaFormat1Colo()
+        self._supply_sub_formats_to(format)
+        return BzrDirMeta1Colo(transport, format)
+
+
+BzrProber.formats.register(BzrDirMetaFormat1Colo.get_format_string(),
+    BzrDirMetaFormat1Colo)
+
+
 class ConvertMetaToMeta(controldir.Converter):
     """Converts the components of metadirs."""
 
@@ -2076,11 +2223,11 @@
          tree_format=None,
          hidden=False,
          experimental=False,
-         alias=False):
+         alias=False, bzrdir_format=None):
     """Register a metadir subformat.
 
-    These all use a BzrDirMetaFormat1 bzrdir, but can be parameterized
-    by the Repository/Branch/WorkingTreeformats.
+    These all use a meta bzrdir, but can be parameterized by the
+    Repository/Branch/WorkingTreeformats.
 
     :param repository_format: The fully-qualified repository format class
         name as a string.
@@ -2089,8 +2236,10 @@
     :param tree_format: Fully-qualified tree format class name as
         a string.
     """
+    if bzrdir_format is None:
+        bzrdir_format = BzrDirMetaFormat1
     # This should be expanded to support setting WorkingTree and Branch
-    # formats, once BzrDirMetaFormat1 supports that.
+    # formats, once the API supports that.
     def _load(full_name):
         mod_name, factory_name = full_name.rsplit('.', 1)
         try:
@@ -2103,7 +2252,7 @@
         return factory()
 
     def helper():
-        bd = BzrDirMetaFormat1()
+        bd = bzrdir_format()
         if branch_format is not None:
             bd.set_branch_format(_load(branch_format))
         if tree_format is not None:
@@ -2263,6 +2412,16 @@
     alias=False,
     )
 
+register_metadir(controldir.format_registry, 'development-colo',
+    'bzrlib.repofmt.groupcompress_repo.RepositoryFormat2a',
+    help='The 2a format with experimental support for colocated branches.\n',
+    branch_format='bzrlib.branch.BzrBranchFormat7',
+    tree_format='bzrlib.workingtree_4.WorkingTreeFormat6',
+    experimental=False,
+    bzrdir_format=BzrDirMetaFormat1Colo,
+    )
+
+
 # And the development formats above will have aliased one of the following:
 
 # Finally, the current format.

=== modified file 'bzrlib/diff-delta.c'
--- a/bzrlib/diff-delta.c	2011-05-16 14:26:54 +0000
+++ b/bzrlib/diff-delta.c	2011-09-30 16:29:17 +0000
@@ -720,6 +720,11 @@
 
     max_num_entries = (src->size - 1)  / RABIN_WINDOW;
 
+    if (!max_num_entries) {
+        *fresh = old_index;
+        return DELTA_OK;
+    }
+
     /* allocate an array to hold whatever entries we find */
     entries = malloc(sizeof(*entry) * max_num_entries);
     if (!entries) /* malloc failure */

=== modified file 'bzrlib/osutils.py'
--- a/bzrlib/osutils.py	2011-09-16 10:41:45 +0000
+++ b/bzrlib/osutils.py	2011-10-06 07:43:13 +0000
@@ -279,13 +279,28 @@
     # copy posixpath.abspath, but use os.getcwdu instead
     if not posixpath.isabs(path):
         path = posixpath.join(getcwd(), path)
-    return posixpath.normpath(path)
+    return _posix_normpath(path)
 
 
 def _posix_realpath(path):
     return posixpath.realpath(path.encode(_fs_enc)).decode(_fs_enc)
 
 
+def _posix_normpath(path):
+    path = posixpath.normpath(path)
+    # Bug 861008: posixpath.normpath() returns a path normalized according to
+    # the POSIX standard, which stipulates (for compatibility reasons) that two
+    # leading slashes must not be simplified to one, and only if there are 3 or
+    # more should they be simplified as one. So we treat the leading 2 slashes
+    # as a special case here by simply removing the first slash, as we consider
+    # that breaking POSIX compatibility for this obscure feature is acceptable.
+    # This is not a paranoid precaution, as we notably get paths like this when
+    # the repo is hosted at the root of the filesystem, i.e. in "/".    
+    if path.startswith('//'):
+        path = path[1:]
+    return path
+
+
 def _win32_fixdrive(path):
     """Force drive letters to be consistent.
 
@@ -379,7 +394,7 @@
 abspath = _posix_abspath
 realpath = _posix_realpath
 pathjoin = os.path.join
-normpath = os.path.normpath
+normpath = _posix_normpath
 getcwd = os.getcwdu
 rename = os.rename
 dirname = os.path.dirname

=== modified file 'bzrlib/plugins/launchpad/lp_directory.py'
--- a/bzrlib/plugins/launchpad/lp_directory.py	2011-09-20 14:11:27 +0000
+++ b/bzrlib/plugins/launchpad/lp_directory.py	2011-10-06 06:45:46 +0000
@@ -131,7 +131,7 @@
             else:
                 # There are either 0 or > 2 path parts, neither of which is
                 # supported for these schemes.
-                raise errors.InvalidURL('Bad path: %s' % result.path)
+                raise errors.InvalidURL('Bad path: %s' % url)
             # Expand any series shortcuts, but keep unknown series.
             series = distro_series.get(series, series)
             # Hack the url and let the following do the final resolution.

=== modified file 'bzrlib/plugins/launchpad/test_lp_directory.py'
--- a/bzrlib/plugins/launchpad/test_lp_directory.py	2011-07-11 07:02:20 +0000
+++ b/bzrlib/plugins/launchpad/test_lp_directory.py	2011-10-06 06:45:46 +0000
@@ -121,6 +121,17 @@
         self.assertResolve('bzr+ssh://bazaar.launchpad.net/+branch/ubuntu',
                            'lp:ubuntu')
 
+    def test_ubuntu_invalid(self):
+        """Invalid ubuntu urls don't crash.
+
+        :seealso: http://pad.lv/843900
+        """
+        # This ought to be natty-updates.
+        self.assertRaises(errors.InvalidURL,
+            self.assertResolve,
+            '',
+            'ubuntu:natty/updates/smartpm')
+
     def test_ubuntu_apt(self):
         self.assertResolve('bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/apt',
                            'lp:ubuntu/apt')

=== modified file 'bzrlib/tests/blackbox/test_init.py'
--- a/bzrlib/tests/blackbox/test_init.py	2011-09-07 14:06:40 +0000
+++ b/bzrlib/tests/blackbox/test_init.py	2011-10-05 14:12:34 +0000
@@ -48,12 +48,22 @@
         self.assertIsDirectory('.bzr/checkout/lock', t)
 
     def test_init_format_2a(self):
-        """Smoke test for constructing a format 2a repoistory."""
+        """Smoke test for constructing a format 2a repository."""
         out, err = self.run_bzr('init --format=2a')
         self.assertEqual("""Created a standalone tree (format: 2a)\n""",
             out)
         self.assertEqual('', err)
 
+    def test_init_colocated(self):
+        """Smoke test for constructing a colocated branch."""
+        out, err = self.run_bzr('init --format=development-colo file:,branch=abranch')
+        self.assertEqual("""Created a standalone tree (format: development-colo)\n""",
+            out)
+        self.assertEqual('', err)
+        out, err = self.run_bzr('branches')
+        self.assertEqual(" abranch\n", out)
+        self.assertEqual('', err)
+
     def test_init_at_repository_root(self):
         # bzr init at the root of a repository should create a branch
         # and working tree even when creation of working trees is disabled.

=== modified file 'bzrlib/tests/stub_sftp.py'
--- a/bzrlib/tests/stub_sftp.py	2011-08-15 12:37:25 +0000
+++ b/bzrlib/tests/stub_sftp.py	2011-10-06 07:43:13 +0000
@@ -118,9 +118,9 @@
     else:
         def canonicalize(self, path):
             if os.path.isabs(path):
-                return os.path.normpath(path)
+                return osutils.normpath(path)
             else:
-                return os.path.normpath('/' + os.path.join(self.home, path))
+                return osutils.normpath('/' + os.path.join(self.home, path))
 
     def chattr(self, path, attr):
         try:

=== modified file 'bzrlib/tests/test_bzrdir.py'
--- a/bzrlib/tests/test_bzrdir.py	2011-10-04 13:46:51 +0000
+++ b/bzrlib/tests/test_bzrdir.py	2011-10-05 14:12:34 +0000
@@ -1397,3 +1397,10 @@
         self._transport.put_bytes("a.~1~", "some content")
         self.assertEqual("a.~2~", self._bzrdir._available_backup_name("a"))
 
+
+class TestMeta1DirColoFormat(TestCaseWithTransport):
+    """Tests specific to the meta1 dir with colocated branches format."""
+
+    def test_supports_colo(self):
+        format = bzrdir.BzrDirMetaFormat1Colo()
+        self.assertTrue(format.colocated_branches)

=== modified file 'bzrlib/tests/test_osutils.py'
--- a/bzrlib/tests/test_osutils.py	2011-07-08 23:01:39 +0000
+++ b/bzrlib/tests/test_osutils.py	2011-10-06 07:43:13 +0000
@@ -818,6 +818,16 @@
         self.assertEqual(None, osutils.safe_file_id(None))
 
 
+class TestPosixFuncs(tests.TestCase):
+    """Test that the posix version of normpath returns an appropriate path
+       when used with 2 leading slashes."""
+
+    def test_normpath(self):
+        self.assertEqual('/etc/shadow', osutils._posix_normpath('/etc/shadow'))
+        self.assertEqual('/etc/shadow', osutils._posix_normpath('//etc/shadow'))
+        self.assertEqual('/etc/shadow', osutils._posix_normpath('///etc/shadow'))
+
+
 class TestWin32Funcs(tests.TestCase):
     """Test that _win32 versions of os utilities return appropriate paths."""
 

=== modified file 'bzrlib/transport/local.py'
--- a/bzrlib/transport/local.py	2011-08-31 01:35:15 +0000
+++ b/bzrlib/transport/local.py	2011-10-06 07:43:13 +0000
@@ -567,7 +567,7 @@
         self._local_base = urlutils._win32_local_path_from_url(base)
 
     def abspath(self, relpath):
-        path = osutils.normpath(osutils.pathjoin(
+        path = osutils._win32_normpath(osutils.pathjoin(
                     self._local_base, urlutils.unescape(relpath)))
         return urlutils._win32_local_path_to_url(path)
 

=== modified file 'bzrlib/urlutils.py'
--- a/bzrlib/urlutils.py	2011-09-04 23:22:47 +0000
+++ b/bzrlib/urlutils.py	2011-10-06 07:43:13 +0000
@@ -22,7 +22,7 @@
 
 from bzrlib.lazy_import import lazy_import
 lazy_import(globals(), """
-from posixpath import split as _posix_split, normpath as _posix_normpath
+from posixpath import split as _posix_split
 import urllib
 import urlparse
 
@@ -201,8 +201,7 @@
     """
     # importing directly from posixpath allows us to test this
     # on non-posix platforms
-    return 'file://' + escape(_posix_normpath(
-        osutils._posix_abspath(path)))
+    return 'file://' + escape(osutils._posix_abspath(path))
 
 
 def _win32_local_path_from_url(url):

=== modified file 'bzrlib/version.py'
--- a/bzrlib/version.py	2010-04-30 11:03:59 +0000
+++ b/bzrlib/version.py	2011-10-04 18:43:55 +0000
@@ -73,7 +73,7 @@
     else:
         to_file.write(bzrlib.__path__[0] + '\n')
     if show_config:
-        config_dir = os.path.normpath(config.config_dir())  # use native slashes
+        config_dir = osutils.normpath(config.config_dir())  # use native slashes
         if not isinstance(config_dir, unicode):
             config_dir = config_dir.decode(osutils.get_user_encoding())
         to_file.write("  Bazaar configuration: %s\n" % (config_dir,))

=== modified file 'doc/en/release-notes/bzr-2.4.txt'
--- a/doc/en/release-notes/bzr-2.4.txt	2011-09-28 16:50:40 +0000
+++ b/doc/en/release-notes/bzr-2.4.txt	2011-10-06 07:43:13 +0000
@@ -32,6 +32,11 @@
 Bug Fixes
 *********
 
+* Fixed an infinite loop when creating a repo at the root of the filesystem, 
+  i.e. "/", due to posixpath.normpath() not collapsing 2 leading slashes into 
+  one, thus respecting the POSIX standard, but making relpath() loop infinitely.
+  (Florian Vichot, #861008)
+
 * Fixed loading of external merge tools from config to properly decode
   command-lines which contain embedded quotes. (Gordon Tyler, #828803)
 
@@ -39,6 +44,10 @@
   stat fields into four bytes in dirstate pack_stat implementations.
   (Martin Packman, #683191 #706957)
 
+* Return early from create_delta_index_from_delta given tiny inputs. This
+  avoids raising a spurious MemoryError on certain platforms such as AIX.
+  (John Arbash Meinel, #856731)
+  
 Documentation
 *************
 

=== modified file 'doc/en/release-notes/bzr-2.5.txt'
--- a/doc/en/release-notes/bzr-2.5.txt	2011-10-04 11:38:49 +0000
+++ b/doc/en/release-notes/bzr-2.5.txt	2011-10-06 09:20:02 +0000
@@ -5,10 +5,10 @@
 .. toctree::
    :maxdepth: 1
 
-bzr 2.5b2
+bzr 2.5b3
 #########
 
-:2.5b2: NOT RELEASED YET
+:2.x.y: NOT RELEASED YET
 
 External Compatibility Breaks
 *****************************
@@ -20,12 +20,83 @@
 
 .. New commands, options, etc that users may wish to try out.
 
+Improvements
+************
+
+.. Improvements to existing commands, especially improved performance 
+   or memory usage, or better results.
+
+Bug Fixes
+*********
+
+.. Fixes for situations where bzr would previously crash or give incorrect
+   or undesirable results.
+
+Documentation
+*************
+
+.. Improved or updated documentation.
+
+API Changes
+***********
+
+.. Changes that may require updates in plugins or other code that uses
+   bzrlib.
+
+Internals
+*********
+
+.. Major internal changes, unlikely to be visible to users or plugin 
+   developers, but interesting for bzr developers.
+
+Testing
+*******
+
+.. Fixes and changes that are only relevant to bzr's test framework and 
+   suite.  This can include new facilities for writing tests, fixes to 
+   spurious test failures and changes to the way things should be tested.
+
+
+bzr 2.5b2
+#########
+
+This is the second beta of the 2.5 series, leading to a 2.5.0 release in
+February 2012. Beta releases are suitable for everyday use but may cause some
+incompatibilities with plugins.
+
+This release includes more filtering options for ``bzr log``, idle
+connections handling for ``bzr serve``, a ``development-colo`` experimental
+format to flesh out the colocated branches UI, better support for foreign
+formats, enhancements to the config framework and more.
+
+This release includes all bug fixed in previous series known at the time of
+this release.
+
+:2.5b2: 2011-10-06
+
+External Compatibility Breaks
+*****************************
+
+None
+
+New Features
+************
+
 * A new ``-O`` standard option (common to all commands) have been added. It
   provides a value for a config option in the ``-Oname=value`` form that
   takes precedence over all definitions found in config files.  It can be
   used multiple times to override different options.
   (Vincent Ladeuil, #491196)
 
+* ``bzr log`` now has an option called ``--omit-merges`` to omit
+  those commits that merged branches, i.e. those having more than one
+  parent.
+  In order to avoid confusion, the previous command line option
+  ``--include-merges`` has been renamed to ``--include-merged``.
+  The old name of the command line option will still be accepted.
+  The name change also affects ``bzr missing``.
+  (Martin von Gagern)
+
 * ``bzr serve`` will now disconnect clients if they have not issued an RPC
   request after 5minutes. On POSIX platforms, this will also happen for
   ``bzr serve --inet``. This can be overridden with the configuration
@@ -35,13 +106,15 @@
   finish the current request, and then close the connection.
   (John Arbash Meinel, #824797, #795025)
 
+* The new experimental format ``development-colo`` supports colocated
+  branches. This format will eventually be merged back into the ``2a``
+  format when it has stabilized and there is adequate UI support for
+  colocated branches.
+  (Jelmer Vernooij, #831481)
 
 Improvements
 ************
 
-.. Improvements to existing commands, especially improved performance 
-   or memory usage, or better results.
-
 * Fixed a bug where ``bzr tags -r x..y`` loaded the branch history once for
   every revision in the range; it's now much faster. (Vincent Ladeuil, #857335)
 
@@ -52,23 +125,20 @@
 Bug Fixes
 *********
 
-.. Fixes for situations where bzr would previously crash or give incorrect
-   or undesirable results.
-
 * ``bzr shelve`` can now be used in emacs shells as the input handling is
-  turned into a line-basde one when ``INSIDE_EMACS`` is set (which is the
+  turned into a line-based one when ``INSIDE_EMACS`` is set (which is the
   case for all recent emacs versions). (Vincent Ladeuil, #856261)
 
 * ``bzr tags`` can now be used against remote repositories that do
   not provide access to the revision graph. (Jelmer Vernooij, #858942)
 
 * ``bzr update PATH`` will stop if you seem to be asking it to update
-  anything less than a whole tree, because that's not supported by bzr's
+  anything less than a whole tree, because that's not supported by ``bzr``'s
   concept that the whole tree has a single basis revision.  Previously, it
   would go ahead and update the whole tree, which was surprising.
   (Martin Pool, #557886)
 
-* Don't crash if bzrlib.initialize() has not been called while accessing
+* Don't crash if ``bzrlib.initialize()`` has not been called while accessing
   configs.  (Vincent Ladeuil, #863401)
 
 * Redirects between http and https no longer discard path information
@@ -80,24 +150,26 @@
 * ``WorkingTree.get_file_mtime`` now raises NoSuchId if a file id is
   specified that is unknown. (Jelmer Vernooij, #847435)
 
-Documentation
-*************
-
-.. Improved or updated documentation.
 
 API Changes
 ***********
 
-.. Changes that may require updates in plugins or other code that uses
-   bzrlib.
-
 * ``Branch.get_revision_delta`` has been deprecated. Use
   ``Repository.get_revision_delta`` instead. (Jelmer Vernooij, #859712)
 
+* Plugins that implement custom protocols for ``bzr serve`` should now
+  also take an argument ``timeout``. This is used by the the bzr protocol
+  to close a connection if a client has been idle for more than X seconds.
+  (Default 5minutes). (John Arbash Meinel)
+
 * ``Repository.fileids_altered_by_revision_ids`` has been moved to
   ``VersionedFileRepository`` and is no longer part of the standard
   ``Repository`` interface. (Jelmer Vernooij)
 
+* The argument ``include_merges`` to ``missing.find_unmerged`` has
+  been renamed to ``include_merged``. The old name is still supported
+  for now but will cause a deprecation warning. (Martin von Gagern)
+
 * The new method ``ControlDirFormat.is_initializable()`` returns a boolean
   indicating whether or not it is possible to use any of the
   initialization methods of that format to create a new control dir.
@@ -106,9 +178,6 @@
 Internals
 *********
 
-.. Major internal changes, unlikely to be visible to users or plugin 
-   developers, but interesting for bzr developers.
-
 * ``Branch`` objects can now use a config stack with the newly introduced
   ``get_config_stack()``. Both ``get_config`` and ``get_config_stack`` can
   be used for the same branch but it's recommended to stick to one for a
@@ -120,10 +189,6 @@
 * Test scripts can now use ``bzr shelve`` and provide their input as
   complete lines. (Vincent Ladeuil, #856261)
 
-.. Fixes and changes that are only relevant to bzr's test framework and 
-   suite.  This can include new facilities for writing tests, fixes to 
-   spurious test failures and changes to the way things should be tested.
-
 * Really corrupt the pack file without depending on a special length or value.
   (Vincent Ladeuil, #807032)
 
@@ -134,9 +199,18 @@
 :2.5b1: 2011-09-15
 
 This is the first beta of the 2.5 series, leading up to a 2.5.0
-release in February 2012.  Beta releases are suitable for everyday use
-but may cause some incompatibilities with plugins.  Some plugins may need
-small updates to work with 2.5b1.
+release in February 2012.
+
+This release includes better support for gpg signing, better support for
+i18n (mostly command help and error messages), more options to filter ``bzr
+log`` output, more support for colocated branches ("location,branch=XXX"
+syntax), better feedback on updated tags for various commands, faster
+branching into an empty repository, enhancements to the config framework and
+more.
+
+Beta releases are suitable for everyday use but may cause some
+incompatibilities with plugins.  Some plugins may need small updates to work
+with 2.5b1.
 
 External Compatibility Breaks
 *****************************
@@ -198,15 +272,6 @@
   while ``--match-message, --match-author, --match-committer`` and
   ``--match-bugs`` match each of those fields. (Jacek Sieka)
 
-* ``bzr log`` now has an option called ``--omit-merges`` to ommit
-  those commits that merged branches, i.e. those having more than one
-  parent.
-  In order to avoid confusion, the previous command line option
-  ``--include-merges`` has been renamed to ``--include-merged``.
-  The old name of the command line option will still be accepted.
-  The name change also affects ``bzr missing``.
-  (Martin von Gagern)
-
 * ``config.Option`` can now declare ``default_from_env``, a list of
   environment variables to get a default value from. (Vincent Ladeuil)
 
@@ -224,7 +289,7 @@
   (Jonathan Riddell, #804254)
 
 * Translations are now enabled for command help, errors and globally
-  for any message using gettext given on output.  (Jonathan Riddell,
+  for any message using ``gettext`` given on output.  (Jonathan Riddell,
   INADA Naoki, #83941)
 
 Improvements
@@ -265,7 +330,7 @@
   if no bug tracker was specified on the command line.
   (Jelmer Vernooij, #334860)
 
-* Use gettext.NullTranslations in i18n to allow use of i18n even when
+* Use ``gettext.NullTranslations`` in i18n to allow use of i18n even when
   translations are not turned on. (Jonathan Riddell)
 
 Bug Fixes
@@ -352,11 +417,6 @@
 * New registry ``OptionRegistry`` specialized for configuration options.
   (Vincent Ladeuil)
 
-* Plugins that implement custom protocols for ``bzr serve`` should now
-  also take an argument ``timeout``. This is used by the the bzr protocol
-  to close a connection if a client has been idle for more than X seconds.
-  (Default 5minutes). (John Arbash Meinel)
-
 * Remove ``AtomicFile.closed`` which has been deprecated in bzr 0.10.
   (Vincent Ladeuil)
 
@@ -399,11 +459,6 @@
   and ``_path`` attributes. Proxies are provided for the moment but
   may be removed in the future. (Jelmer Vernooij)
 
-* The argument ``include_merges`` to ``missing.find_unmerged`` has
-  been renamed to ``include_merged``. The old name is still supported
-  for now but will cause a deprecation warning. (Martin von Gagern)
-
-
 Internals
 *********
 



More information about the bazaar-commits mailing list