Rev 6061: Merge 2.4 into trunk in http://bazaar.launchpad.net/~vila/bzr/integration/

Vincent Ladeuil v.ladeuil+lp at free.fr
Fri Aug 12 09:49:25 UTC 2011


At http://bazaar.launchpad.net/~vila/bzr/integration/

------------------------------------------------------------
revno: 6061 [merge]
revision-id: v.ladeuil+lp at free.fr-20110812094924-knc5s0g7vs31a2f1
parent: pqm at pqm.ubuntu.com-20110809170446-f1wc1a8fhgnxi4cn
parent: pqm at pqm.ubuntu.com-20110811152213-htaahpauzcf5vcnr
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: trunk
timestamp: Fri 2011-08-12 11:49:24 +0200
message:
  Merge 2.4 into trunk
modified:
  bzrlib/branch.py               branch.py-20050309040759-e4baf4e0d046576e
  bzrlib/config.py               config.py-20051011043216-070c74f4e9e338e8
  bzrlib/plugins/launchpad/__init__.py __init__.py-20060315182712-2d5feebd2a1032dc
  bzrlib/plugins/launchpad/test_lp_api_lite.py test_lp_api_lite.py-20110713114529-lurqfgc09yifvs3u-1
  bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
  bzrlib/tests/blackbox/test_branch.py test_branch.py-20060524161337-noms9gmcwqqrfi8y-1
  bzrlib/tests/blackbox/test_merge.py test_merge.py-20060323225809-9bc0459c19917f41
  bzrlib/tests/blackbox/test_pull.py test_pull.py-20051201144907-64959364f629947f
  bzrlib/tests/per_branch/test_pull.py test_pull.py-20060410103942-83c35b26657414fc
  bzrlib/tests/per_controldir/test_controldir.py test_bzrdir.py-20060131065642-0ebeca5e30e30866
  bzrlib/tests/test_bzrdir.py    test_bzrdir.py-20060131065654-deba40eef51cf220
  bzrlib/tests/test_remote.py    test_remote.py-20060720103555-yeeg2x51vn0rbtdp-2
  doc/en/release-notes/bzr-2.4.txt bzr2.4.txt-20110114053217-k7ym9jfz243fddjm-1
  doc/en/whats-new/whats-new-in-2.4.txt whatsnewin2.4.txt-20110114044330-nipk1og7j729fy89-1
-------------- next part --------------
=== modified file 'bzrlib/branch.py'
--- a/bzrlib/branch.py	2011-08-04 13:30:30 +0000
+++ b/bzrlib/branch.py	2011-08-12 09:49:24 +0000
@@ -1540,10 +1540,15 @@
         # For bzr native formats must_fetch is just the tip, and if_present_fetch
         # are the tags.
         must_fetch = set([self.last_revision()])
-        try:
-            if_present_fetch = set(self.tags.get_reverse_tag_dict())
-        except errors.TagsNotSupported:
-            if_present_fetch = set()
+        if_present_fetch = set()
+        c = self.get_config()
+        include_tags = c.get_user_option_as_bool('branch.fetch_tags',
+                                                 default=False)
+        if include_tags:
+            try:
+                if_present_fetch = set(self.tags.get_reverse_tag_dict())
+            except errors.TagsNotSupported:
+                pass
         must_fetch.discard(_mod_revision.NULL_REVISION)
         if_present_fetch.discard(_mod_revision.NULL_REVISION)
         return must_fetch, if_present_fetch

=== modified file 'bzrlib/config.py'
--- a/bzrlib/config.py	2011-08-09 17:04:46 +0000
+++ b/bzrlib/config.py	2011-08-12 09:49:24 +0000
@@ -172,9 +172,7 @@
 # FIXME: Until we can guarantee that each config file is loaded once and
 # only once for a given bzrlib session, we don't want to re-read the file every
 # time we query for an option so we cache the value (bad ! watch out for tests
-# needing to restore the proper value).This shouldn't be part of 2.4.0 final,
-# yell at mgz^W vila and the RM if this is still present at that time
-# -- vila 20110219
+# needing to restore the proper value). -- vila 20110219
 _expand_default_value = None
 def _get_expand_default_value():
     global _expand_default_value

=== modified file 'bzrlib/plugins/launchpad/__init__.py'
--- a/bzrlib/plugins/launchpad/__init__.py	2011-08-02 01:10:27 +0000
+++ b/bzrlib/plugins/launchpad/__init__.py	2011-08-12 09:49:24 +0000
@@ -479,9 +479,11 @@
     :return: If this isn't a packaging branch, return None. If it is, return
         (archive, series, project)
     """
+    if url is None:
+        return None
     m = _package_branch.search(url)
     if m is None:
-        return
+        return None
     archive, series, project, user = m.group('archive', 'series',
                                              'project', 'user')
     if series is not None:

=== modified file 'bzrlib/plugins/launchpad/test_lp_api_lite.py'
--- a/bzrlib/plugins/launchpad/test_lp_api_lite.py	2011-08-02 01:10:27 +0000
+++ b/bzrlib/plugins/launchpad/test_lp_api_lite.py	2011-08-12 09:49:24 +0000
@@ -330,6 +330,9 @@
         self.assertNotPackageBranch(
             'http://bazaar.launchpad.net/+branch'
             '/~user/ubuntu/natty/foo/natty')
+        # Older versions of bzr-svn/hg/git did not set Branch.base until after
+        # they called Branch.__init__().
+        self.assertNotPackageBranch(None)
 
     def test__get_package_branch_info(self):
         self.assertBranchInfo(

=== modified file 'bzrlib/tests/__init__.py'
--- a/bzrlib/tests/__init__.py	2011-08-05 21:26:39 +0000
+++ b/bzrlib/tests/__init__.py	2011-08-12 09:49:24 +0000
@@ -384,9 +384,18 @@
         getDetails = getattr(test, "getDetails", None)
         if getDetails is not None:
             getDetails().clear()
+        # Clear _type_equality_funcs to try to stop TestCase instances
+        # from wasting memory. 'clear' is not available in all Python
+        # versions (bug 809048)
         type_equality_funcs = getattr(test, "_type_equality_funcs", None)
         if type_equality_funcs is not None:
-            type_equality_funcs.clear()
+            tef_clear = getattr(type_equality_funcs, "clear", None)
+            if tef_clear is None:
+                tef_instance_dict = getattr(type_equality_funcs, "__dict__", None)
+                if tef_instance_dict is not None:
+                    tef_clear = tef_instance_dict.clear
+            if tef_clear is not None:
+                tef_clear()
         self._traceback_from_test = None
 
     def startTests(self):

=== modified file 'bzrlib/tests/blackbox/test_branch.py'
--- a/bzrlib/tests/blackbox/test_branch.py	2011-06-14 01:26:41 +0000
+++ b/bzrlib/tests/blackbox/test_branch.py	2011-08-12 09:49:24 +0000
@@ -289,6 +289,7 @@
         builder = self.make_branch_builder('source')
         source = fixtures.build_branch_with_non_ancestral_rev(builder)
         source.tags.set_tag('tag-a', 'rev-2')
+        source.get_config().set_user_option('branch.fetch_tags', 'True')
         # Now source has a tag not in its ancestry.  Make a branch from it.
         self.run_bzr('branch source new-branch')
         new_branch = branch.Branch.open('new-branch')
@@ -440,7 +441,7 @@
         # being too low. If rpc_count increases, more network roundtrips have
         # become necessary for this use case. Please do not adjust this number
         # upwards without agreement from bzr's network support maintainers.
-        self.assertLength(36, self.hpss_calls)
+        self.assertLength(37, self.hpss_calls)
 
     def test_branch_from_trivial_branch_streaming_acceptance(self):
         self.setup_smart_server_with_call_log()
@@ -455,7 +456,7 @@
         # being too low. If rpc_count increases, more network roundtrips have
         # become necessary for this use case. Please do not adjust this number
         # upwards without agreement from bzr's network support maintainers.
-        self.assertLength(9, self.hpss_calls)
+        self.assertLength(10, self.hpss_calls)
 
     def test_branch_from_trivial_stacked_branch_streaming_acceptance(self):
         self.setup_smart_server_with_call_log()
@@ -475,12 +476,13 @@
         # being too low. If rpc_count increases, more network roundtrips have
         # become necessary for this use case. Please do not adjust this number
         # upwards without agreement from bzr's network support maintainers.
-        self.assertLength(14, self.hpss_calls)
+        self.assertLength(15, self.hpss_calls)
 
     def test_branch_from_branch_with_tags(self):
         self.setup_smart_server_with_call_log()
         builder = self.make_branch_builder('source')
         source = fixtures.build_branch_with_non_ancestral_rev(builder)
+        source.get_config().set_user_option('branch.fetch_tags', 'True')
         source.tags.set_tag('tag-a', 'rev-2')
         source.tags.set_tag('tag-missing', 'missing-rev')
         # Now source has a tag not in its ancestry.  Make a branch from it.
@@ -491,7 +493,7 @@
         # being too low. If rpc_count increases, more network roundtrips have
         # become necessary for this use case. Please do not adjust this number
         # upwards without agreement from bzr's network support maintainers.
-        self.assertLength(9, self.hpss_calls)
+        self.assertLength(10, self.hpss_calls)
 
     def test_branch_to_stacked_from_trivial_branch_streaming_acceptance(self):
         self.setup_smart_server_with_call_log()

=== modified file 'bzrlib/tests/blackbox/test_merge.py'
--- a/bzrlib/tests/blackbox/test_merge.py	2011-06-13 14:32:13 +0000
+++ b/bzrlib/tests/blackbox/test_merge.py	2011-08-09 13:30:21 +0000
@@ -681,6 +681,7 @@
         builder.build_commit(message="Rev 2a", rev_id='rev-2a')
         source.tags.set_tag('tag-a', 'rev-2a')
         source.set_last_revision_info(1, 'rev-1')
+        source.get_config().set_user_option('branch.fetch_tags', 'True')
         builder.build_commit(message="Rev 2b", rev_id='rev-2b')
         # Merge from source
         self.run_bzr('merge -d target source')

=== modified file 'bzrlib/tests/blackbox/test_pull.py'
--- a/bzrlib/tests/blackbox/test_pull.py	2011-02-11 05:57:31 +0000
+++ b/bzrlib/tests/blackbox/test_pull.py	2011-08-10 14:02:04 +0000
@@ -152,6 +152,7 @@
         # Make a source, sprout a target off it
         builder = self.make_branch_builder('source')
         source = fixtures.build_branch_with_non_ancestral_rev(builder)
+        source.get_config().set_user_option('branch.fetch_tags', 'True')
         target_bzrdir = source.bzrdir.sprout('target')
         source.tags.set_tag('tag-a', 'rev-2')
         # Pull from source
@@ -410,7 +411,7 @@
         # being too low. If rpc_count increases, more network roundtrips have
         # become necessary for this use case. Please do not adjust this number
         # upwards without agreement from bzr's network support maintainers.
-        self.assertLength(18, self.hpss_calls)
+        self.assertLength(19, self.hpss_calls)
         remote = Branch.open('stacked')
         self.assertEndsWith(remote.get_stacked_on_url(), '/parent')
     

=== modified file 'bzrlib/tests/per_branch/test_pull.py'
--- a/bzrlib/tests/per_branch/test_pull.py	2011-02-09 06:36:35 +0000
+++ b/bzrlib/tests/per_branch/test_pull.py	2011-08-09 14:18:05 +0000
@@ -156,6 +156,7 @@
         except errors.TagsNotSupported:
             raise TestNotApplicable('format does not support tags.')
         source.tags.set_tag('tag-a', 'rev-2')
+        source.get_config().set_user_option('branch.fetch_tags', 'True')
         target.pull(source)
         # The tag is present, and so is its revision.
         self.assertEqual('rev-2', target.tags.lookup_tag('tag-a'))
@@ -177,6 +178,7 @@
             source.tags.set_tag('tag-a', 'rev-2')
         except errors.TagsNotSupported:
             raise TestNotApplicable('format does not support tags.')
+        source.get_config().set_user_option('branch.fetch_tags', 'True')
         target.pull(source, 'rev-2-again')
         # The tag is present, and so is its revision.
         self.assertEqual('rev-2', target.tags.lookup_tag('tag-a'))

=== modified file 'bzrlib/tests/per_controldir/test_controldir.py'
--- a/bzrlib/tests/per_controldir/test_controldir.py	2011-05-13 12:51:05 +0000
+++ b/bzrlib/tests/per_controldir/test_controldir.py	2011-08-10 14:02:04 +0000
@@ -690,6 +690,7 @@
             source.tags.set_tag('tag-a', 'rev-2')
         except errors.TagsNotSupported:
             raise TestNotApplicable('Branch format does not support tags.')
+        source.get_config().set_user_option('branch.fetch_tags', 'True')
         # Now source has a tag not in its ancestry.  Sprout its controldir.
         dir = source.bzrdir
         target = dir.sprout(self.get_url('target'))
@@ -761,6 +762,7 @@
             source.tags.set_tag('tag-absent', 'absent-rev')
         except errors.TagsNotSupported:
             raise TestNotApplicable('Branch format does not support tags.')
+        source.get_config().set_user_option('branch.fetch_tags', 'True')
         # And ask sprout for C2
         dir = source.bzrdir
         target = dir.sprout(self.get_url('target'), revision_id='rev-c2')

=== modified file 'bzrlib/tests/test_bzrdir.py'
--- a/bzrlib/tests/test_bzrdir.py	2011-05-13 12:51:05 +0000
+++ b/bzrlib/tests/test_bzrdir.py	2011-08-10 14:02:04 +0000
@@ -26,6 +26,7 @@
 from bzrlib import (
     branch,
     bzrdir,
+    config,
     controldir,
     errors,
     help_topics,
@@ -1208,7 +1209,7 @@
 
     def __init__(self, *args, **kwargs):
         super(_TestBzrDir, self).__init__(*args, **kwargs)
-        self.test_branch = _TestBranch()
+        self.test_branch = _TestBranch(self.transport)
         self.test_branch.repository = self.create_repository()
 
     def open_branch(self, unsupported=False):
@@ -1225,15 +1226,17 @@
 class _TestBranch(bzrlib.branch.Branch):
     """Test Branch implementation for TestBzrDirSprout."""
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, transport, *args, **kwargs):
         self._format = _TestBranchFormat()
+        self._transport = transport
+        self.base = transport.base
         super(_TestBranch, self).__init__(*args, **kwargs)
         self.calls = []
         self._parent = None
 
     def sprout(self, *args, **kwargs):
         self.calls.append('sprout')
-        return _TestBranch()
+        return _TestBranch(self._transport)
 
     def copy_content_into(self, destination, revision_id=None):
         self.calls.append('copy_content_into')
@@ -1244,6 +1247,9 @@
     def get_parent(self):
         return self._parent
 
+    def _get_config(self):
+        return config.TransportConfig(self._transport, 'branch.conf')
+
     def set_parent(self, parent):
         self._parent = parent
 

=== modified file 'bzrlib/tests/test_remote.py'
--- a/bzrlib/tests/test_remote.py	2011-07-15 14:13:21 +0000
+++ b/bzrlib/tests/test_remote.py	2011-08-12 09:49:24 +0000
@@ -1183,6 +1183,28 @@
         client.add_expected_call(
             'Branch.last_revision_info', ('quack/',),
             'success', ('ok', '1', 'rev-tip'))
+        client.add_expected_call(
+            'Branch.get_config_file', ('quack/',),
+            'success', ('ok',), '')
+        transport.mkdir('quack')
+        transport = transport.clone('quack')
+        branch = self.make_remote_branch(transport, client)
+        result = branch.heads_to_fetch()
+        self.assertFinished(client)
+        self.assertEqual((set(['rev-tip']), set()), result)
+
+    def test_uses_last_revision_info_and_tags_when_set(self):
+        transport = MemoryTransport()
+        client = FakeClient(transport.base)
+        client.add_expected_call(
+            'Branch.get_stacked_on_url', ('quack/',),
+            'error', ('NotStacked',))
+        client.add_expected_call(
+            'Branch.last_revision_info', ('quack/',),
+            'success', ('ok', '1', 'rev-tip'))
+        client.add_expected_call(
+            'Branch.get_config_file', ('quack/',),
+            'success', ('ok',), 'branch.fetch_tags = True')
         # XXX: this will break if the default format's serialization of tags
         # changes, or if the RPC for fetching tags changes from get_tags_bytes.
         client.add_expected_call(
@@ -1213,7 +1235,7 @@
         self.assertFinished(client)
         self.assertEqual((set(['tip']), set(['tagged-1', 'tagged-2'])), result)
 
-    def test_backwards_compatible(self):
+    def make_branch_with_tags(self):
         self.setup_smart_server_with_call_log()
         # Make a branch with a single revision.
         builder = self.make_branch_builder('foo')
@@ -1225,6 +1247,12 @@
         # Add two tags to that branch
         branch.tags.set_tag('tag-1', 'rev-1')
         branch.tags.set_tag('tag-2', 'rev-2')
+        return branch
+
+    def test_backwards_compatible(self):
+        branch = self.make_branch_with_tags()
+        c = branch.get_config()
+        c.set_user_option('branch.fetch_tags', 'True')
         self.addCleanup(branch.lock_read().unlock)
         # Disable the heads_to_fetch verb
         verb = 'Branch.heads_to_fetch'
@@ -1233,7 +1261,23 @@
         result = branch.heads_to_fetch()
         self.assertEqual((set(['tip']), set(['rev-1', 'rev-2'])), result)
         self.assertEqual(
-            ['Branch.last_revision_info', 'Branch.get_tags_bytes'],
+            ['Branch.last_revision_info', 'Branch.get_config_file',
+             'Branch.get_tags_bytes'],
+            [call.call.method for call in self.hpss_calls])
+
+    def test_backwards_compatible_no_tags(self):
+        branch = self.make_branch_with_tags()
+        c = branch.get_config()
+        c.set_user_option('branch.fetch_tags', 'False')
+        self.addCleanup(branch.lock_read().unlock)
+        # Disable the heads_to_fetch verb
+        verb = 'Branch.heads_to_fetch'
+        self.disable_verb(verb)
+        self.reset_smart_call_log()
+        result = branch.heads_to_fetch()
+        self.assertEqual((set(['tip']), set()), result)
+        self.assertEqual(
+            ['Branch.last_revision_info', 'Branch.get_config_file'],
             [call.call.method for call in self.hpss_calls])
 
 

=== modified file 'doc/en/release-notes/bzr-2.4.txt'
--- a/doc/en/release-notes/bzr-2.4.txt	2011-08-02 01:10:27 +0000
+++ b/doc/en/release-notes/bzr-2.4.txt	2011-08-12 09:49:24 +0000
@@ -5,10 +5,78 @@
 .. toctree::
    :maxdepth: 1
 
+bzr 2.4.1
+#########
+
+:2.4.1: NOT RELEASED YET
+
+External Compatibility Breaks
+*****************************
+
+.. These may require users to change the way they use Bazaar.
+
+New Features
+************
+
+.. 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.4.0
 #########
 
-:2.4.0: NOT RELEASED YET
+:2.4.0: 2011-08-11
+
+This release marks the start of a new long-term-stable series. From here, we
+will only make bugfix releases on the 2.4 series (2.4.1, etc, and support it
+until February 2013), while 2.5 will become our new development series.
+
+This is a bugfix and polish release over the 2.3 series, with a large number
+of bugs fixed (>150 for the 2.4 series alone), and some performance
+improvements. Support for python 2.4 and 2.5 has been dropped, many large
+working tree operations have been optimized as well as some stacked branches
+operations.
+
+Only bugfixes from other stables series have been included since 2.4b5 so
+all known fixed bugs are included here.
+
+Users are encouraged to upgrade from the other stable series.
+
 
 External Compatibility Breaks
 *****************************
@@ -32,6 +100,11 @@
 .. Fixes for situations where bzr would previously crash or give incorrect
    or undesirable results.
 
+* A call to CHKInventory's filter-method will not result in a
+  DuplicateFileId error, if you move a subfolder and change a file in
+  that subfolder.
+  (Bastian Bowe, #809901)
+
 * Accessing a packaging branch on Launchpad (eg, ``lp:ubuntu/bzr``) now
   checks to see if the most recent published source package version for
   that project is present in the branch tags. This should help developers
@@ -56,6 +129,14 @@
 
   (John Arbash Meinel, #609187, #812928)
 
+* Cope with not all Python versions having a ``clear`` method on
+  ``TestCase._type_equality_funcs``.
+  (Martin [gz], Jelmer Vernooij, #809048)
+
+* Fetching tags when fetching the tip revision of a branch is now
+  controlled by the config setting ``branch.fetch_tags``. The behavior has
+  been reverted to 2.3's not-fetching tagged revisions by default.
+  (John Arbash Meinel, #771184)
 
 * The fix for bug #513709 caused us to open a new connection when
   switching a lightweight checkout that was pointing at a bound branch.
@@ -63,6 +144,7 @@
   avoiding an extra SSH connection, etc.
   (John Arbash Meinel, #812285)
 
+
 Documentation
 *************
 
@@ -107,7 +189,7 @@
 :2.4b5: 2011-07-07
 
 This is the fifth (and last) beta of the 2.4 series leading to
-2.4.0 release in Auguest 2011. Beta releases are suitable for
+2.4.0 release in August 2011. Beta releases are suitable for
 everyday use but may cause some incompatibilities with plugins.
 
 This release includes all bug fixed in previous series known at
@@ -292,7 +374,7 @@
 * Reports the original error when an InvalidHttpResponse exception is
   encountered to facilitate debug. (Vincent Ladeuil, #788530)
 
-* Reports a non-existant file error when trying to merge in a file
+* Reports a non-existent file error when trying to merge in a file
   that does not exist. (Jonathan Riddell, #330063)
 
 * ``UIFactory.prompt``, ``UIFactory.get_username``,
@@ -374,7 +456,7 @@
   (Vincent Ladeuil, #787942)
 
 * Re-target ``bb.test_merge.TestMerge.test_merge_reversed_revision_range``
-  and rewrite it as a parameterized test to avoid unrelated failures.
+  and rewrite it as a parametrized test to avoid unrelated failures.
   (Vincent Ladeuil, #795456)
 
 * Show log file contents from subprocesses started by
@@ -382,7 +464,7 @@
   strange hangs and failures involving subprocesses.  (Andrew Bennetts)
 
 * Skip ``utextwrap`` tests when ``sphinx`` breaks text_wrap by an hostile
-  monkeypatch to textwrap.TextWrapper.wordsep_re.
+  monkey-patch to textwrap.TextWrapper.wordsep_re.
   (Vincent Ladeuil, #785098)
 
 * Multiple ``selftest --exclude`` options are now combined instead of
@@ -1071,7 +1153,7 @@
   by catching them so they can be re-raised in the controlling thread. It's
   available in the ``bzrlib.cethread`` module.  (Vincent Ladeuil)
 
-* Correctly propogate malloc failures from diff-delta.c code as MemoryError
+* Correctly propagate malloc failures from diff-delta.c code as MemoryError
   so OOM conditions during groupcompress are clearly reported. This entailed a
   change to several function signatures. (Martin [gz], #633336)
 

=== modified file 'doc/en/whats-new/whats-new-in-2.4.txt'
--- a/doc/en/whats-new/whats-new-in-2.4.txt	2011-07-18 15:09:20 +0000
+++ b/doc/en/whats-new/whats-new-in-2.4.txt	2011-08-12 09:49:24 +0000
@@ -1,8 +1,12 @@
-***********************************
-What's New in Bazaar 2.4 (Oronsay)?
-***********************************
-
-Bazaar 2.4 is still under development, and will be released in August 2011.
+**********************************
+What's New in Bazaar 2.4 (Oronsay)
+**********************************
+
+Bazaar 2.4 has been released on the 8th of August 2011 and marks the start
+of a new long-term-stable series. From here, we will only make bugfix
+releases on the 2.4 series (2.4.1, etc, and support it until February 2013),
+while 2.5 will become our new development series.
+
 This document accumulates a high level summary of what's changed.  See the
 :doc:`../release-notes/index` for a full list.
 
@@ -38,10 +42,11 @@
 ***************************
 
 When tags are copied from a branch, the associated revisions are now copied
-too.  Previously operations like branching, merging or pulling might have
-copied new tags visible in ``bzr tags``, but not copied the revisions.  Now
-revisions from tags will always be present, so that operations like ``bzr
-log -r tag:foo`` will always work.
+too if the config entry ``branch.fetch_tags`` is set to True.  Operations
+like branching, merging or pulling will still always copy new tags visible
+in ``bzr tags``. When the config is set, it will now also copy the
+revisions and their ancestry.  This way tagged revisions will always be
+present, so that operations like ``bzr log -r tag:foo`` will always work.
 
 Deprecated command synonyms
 ***************************
@@ -58,10 +63,10 @@
 Configuration files
 *******************
 
-Option values can now refer to other options in the same configuration file by
-enclosing them in curly brackets (``{option}``). This is an opt-in feature
-during the beta period controlled by the ``bzr.config.expand`` option that
-should be declared in ``bazaar.conf`` and no other file.
+Option values can now refer to other options in the same configuration file
+by enclosing them in curly brackets (``{option}``). This is an opt-in
+feature controlled by the ``bzr.config.expand`` option that should be
+declared in ``bazaar.conf`` and no other file.
 
 Changelog merge plugin
 **********************
@@ -118,7 +123,7 @@
 
 The ``selftest --exclude`` option can now be specified multiple times and
 the tests that match any of the specified patterns will be excluded. Only
-the last specified patetrn was previously taken into account.
+the last specified pattern was previously taken into account.
 
 Digital Signature Verification
 ******************************



More information about the bazaar-commits mailing list