Tweak an RPC implementation for Repository.get_parent_map, it was
doing an inefficient small_set.difference_update(large_set) when we
can do small_set=small_set.difference(large_set). This speeds up
discovery time by about 10%. (John Arbash Meinel)

Remove the deprecation decorators for failUnlessExists and
failIfExists. The deprecation “will” occur in 2.4, not
before. Providing the wrappers is enough as far as 2.3 is concerned.
(Vincent Ladeuil #794960)

Getting all entries from CHKInventory.iter_entries_by_dir() has been
sped up dramatically for large trees. Iterating by dir is not the best
way to load data from a CHK inventory, so it preloads all the items in
the correct order. (With the gcc-tree, this changes it (re)reading 8GB
of CHK data, down to just 150MB.) This has noticeable affects for things
like building checkouts, etc. (John Arbash Meinel, #737234)

Bazaar now infers the default user email address on Unix from the local
account name plus the contents of /etc/mailname if that file exists.
In particular, this means that committing as root through etckeeper will
normally not require running bzrwhoami first.
(Martin Pool, #616878)

bzrpush into a repository (that doesn’t have a branch), will no
longer copy all revisions in the repository. Only the ones in the
ancestry of the source branch, like it does in all other cases.
(John Arbash Meinel, #465517)

FreeBSD8 has switched to python-2.7 which revealed a re-occurrence of a test
failure in the launchpad plugin. xmlrpclib.py on natty carries a patch
that is not in python-2.7 upstream and masked the issue. An additional fix
has been added in the interim
(<http://psf.upfronthosting.co.za/roundup/tracker/issue8194> should be fixed
in python > 2.7.1). (Vincent Ladeuil, #654733)

This release marks the start of another long-term-stable series. From here, we
will only make bugfix releases on the 2.3 series (2.3.1, etc, and support it
until August 2012), while 2.4 will become our new development series. The 2.1
and 2.2 series will also continue to get bugfixes. (Currently 2.0 is planned
to be EOLed circa September 2011 and will receive only critical bugfixes.)

This is a bugfix and polish release over the 2.2 series, with a large number
of bugs fixed (>130), and some performance improvements. Some features have
been enhanced including commits on stacked branches, upgrades of related
branches, shortcut URL schemes for ubuntu and debian on launchpad and better
conflict resolution.

Only bugfixes from other stables series have been included since 2.3b5 so all
known fixed bugs are included here.

This is the fifth and last beta of the 2.3 series, leading up to a 2.3.0
release in February. Beta releases are suitable for everyday use but may cause
some incompatibilities with plugins.

2.3b5 includes bug fixes for committing to stacked branches, smoother upgrades
of multiple branches, compatibility with python-2.7, full test suite passing
on Ubuntu Natty and windows, less round-trips for several smart server
operations, better support text conflicts resolve actions and some more.

All known fixed bugs in other series (2.0, 2.1, 2.2) are also included here.

A redundant parent inventories calculation was removed from
fetch.py, as Repository.insert_stream already reports any
missing inventories. This removes at least one network roundtrip when
pushing to a stacked branch. (Andrew Bennetts)

ControlDir.sprout no longer opens the target repository more than
once. This avoids some unnecessary IO, and removes a network roundtrip
when doing bzrbranch to a smart server URL. (Andrew Bennetts)

bzrmodified now read-locks the working tree (and branch and
repository) just once. (Andrew Bennetts)

bzrresolve now accepts --take-this and --take-other actions
for text conflicts. This replace the whole file with the content
designated by the action. This will ignore all differences that would
have been merge cleanly otherwise. (Vincent Ladeuil, #638451)

bt.test_http was breaking os.environ by erasing the values saved by
TestCase leading to bt.test_import_tariff failures.
(Vincent Ladeuil, #690563)

upgrade now upgrades dependent branches when a shared repository is
specified. It also supports new options: --dry-run for showing what
will happen and --clean to remove the backup directory on successful
completion. (Ian Clatworthy, Matthew Fuller, #89830, #374734, #422450)

bzrbreak-lock on a corrupted lock file works correctly, rather than
raising a PermissionDenied error. We were accidentally holding open the
file we were trying to delete. (John Arbash Meinel, #659978)

bzrupdate in a checkout of a readonly branch works again, without
trying to set the tags in the master branch. This had been broken by the
bug fix for bug #603395. (John Arbash Meinel, #701212)

Per-transport tests now prefer to use Transport.get_bytes() rather
than Transport.get().read(). The SFTP code uses an async message to
close the file handle if you let the handle die from refcounting, while
it uses a synchronous message if you close it directly. This should help
prevent random test suite failures from race conditions.
(John Arbash Meinel, #681047)

Stop using bzrlib.tuned_gzip.GzipFile. It is incompatible with
python-2.7 and was only used for Knit format repositories, which haven’t
been recommended since 2007. The file itself will be removed in the next
release. (John Arbash Meinel)

The BZR_COLUMNS environment variable can be set to 0 to indicate no
limitation on the width of the terminal. (Neil Martinsen-Burrell, #675652)

Treat WSAECONNABORTED the same as WSAECONNRESET for the purposes of
considering a smart data stream as being interrupted. This fixes a
failure in the windows test suite, that was trying to ensure we cleanly
handled a server disconnect. (John Arbash Meinel, #581311, #686587)

Unshelving changes that occur in a now-unversioned directory now restore
the directory properly rather than crashing.
(John Arbash Meinel, #389674)

You are now able to commit directly to a stacked branch. Any needed
parent inventories will be filled in as part of the commit process.
(John Arbash Meinel, #375013)

Branch.sprout, BranchFormat.initalize and
ControlDir.create_branch now take an optional repository keyword
argument, and BranchFormat.open now takes an optional
found_repository keyword argument. These provide the repository
object for new branch object to use (for cases when the caller has
already opened that repository). Implementations of these APIs will
need to be updated to accept these arguments. (Andrew Bennetts)

bzrlib.tuned_gzip.GzipFile is now deprecated and will be removed in
the bzr-2.4 series. Code that was using it can just use the python
stdlib gzip.GzipFile. (John Arbash Meinel)

bzrlib.tests defines isolated_environ with the definitions of all
the environment variables the tests should care about. It also defines
override_os_environ and restore_os_environ to properly implement
isolation from os.environ for tests. bzrlib.tests now defines a
DocTestSuite class using this facility for all bzrlib
doctests. (Vincent Ladeuil, #321320)

This is the fourth beta of the 2.3 series, leading up to a 2.3.0 release in
February. Beta releases are suitable for everyday use but may cause some
incompatibilities with plugins.

2.3b4 includes bug fixes for the config command and conflict
resolution. More changes were made for the test scripts handling to make it
easier to add reproducing recipes to bugs.

It also includes bug fixes from the 2.2.2 release as well as the bug fixes
in the upcoming 2.0.7, 2.1.4 and 2.2.3 releases. This means that all known
fixed bugs at the time of this release are included.

Bazaar now caches a branch’s tags while that branch is read-locked.
This removes 1 network roundtrip from most interactions with a remote
branch. (Andrew Bennetts)

bzrconfig<option> will now display only the value itself so scripts
can use it to query the currently active configuration. Displaying several
options matching a given regular expression is now controlled via the
--all option. (Vincent Ladeuil, bug #670251)

bzrresolve now reports the number of conflicts resolved and the
number of remaining conflicts. This provides a better feedback about the
whole resolution process. (Vincent Ladeuil)

Read configuration files in $XDG_CONFIG_HOME/bazaar on Unix if there is
already a directory there. (Neil Martinsen-Burrell, #195397)

Better message if there is an error while setting ownership of
.bazaar directory. (Parth Malwankar, #657553)

bzrconfig properly displays list values. (Vincent Ladeuil, #672382)

bzrconfig will now respect option policies when displaying the value
and display the definition sections when appropriate.
(Vincent Ladeuil, #671050)

Don’t create commit message files in the current directory to avoid nasty
interactions with emacs (which tries to establish the status of the file
during the commit which breaks on windows). (Vincent Ladeuil, #673637)

bzrresolve--take-other<file> will not crash anymore if <file>
is involved in a text conflict (but the conflict is still not
resolved). (Vincent Ladeuil, #646961)

Merge will now correctly locate a lca where there is a criss-cross merge
of a new root. (Gary van der Merwe, #588698)

Report error if non-ASCII command option given. (Rory Yorke, #140563)

tools/check-newsbug.py is now based on lp:hydrazine and no longer
crashes when encountering private bugs (they are just displayed as such).
(Vincent Ladeuil, #354985)

BranchBuilder.build_snapshot now accepts parent_ids == [].
This can be used to create a new root in the graph. (Gary van der Merwe)

Old repository development formats
RepositoryFormatCHK1 and RepositoryFormatCHK2 have been removed, and so
have the corresponding metadir format options development-rich-root,
development6-rich-root, and development7-rich-root.

Add a null_output_matches_anything keyword argument with default False to
bzrlib.tests.script.ScriptRunner.run_script to specify that the command
output should not be checked (as opposed to expecting an empty output).
(Neil Martinsen-Burrell, #662509)

Blank output section in scriptrunner tests no longer match any output.
Instead, use ‘...’ as a wildcard if you don’t care about the output.
(Martin Pool, #637830)

Bump minimum testtools version required to run bzrselftest from 0.9.2
to 0.9.5 which will allow tests that need the fixed unicode handling to be
written. (Martin [gz])

Introduce an overrideEnv() helper for tests that needs to change the
environment variables while respecting the isolation rules. Get rid of
TestCase._restoreEnvironment which is now useless.
(Vincent Ladeuil, #690563)

Printing selftest results to a non-UTF-8 console will now escape characters
that can’t be encoded rather than aborting the test run with an exception.
(Martin [gz], #633216)

Add –no-tree option to ‘bzr push’ and ‘bzr init’ for creating a
new or mirrored branch without working trees.
(Matthew Gordon, #506730)

bzrconfig is a new command that displays the configuration options for
a given directory. It accepts a glob to match against multiple options at
once. It can also be used to set or delete a configuration option in any
configuration file. (Vincent Ladeuil)

New shortcut URL schemes ubuntu: and debianlp: access source
branches on Launchpad. E.g. bzrbranchubuntu:foo gives you the source
branch for project foo in the current distroseries for Ubuntu while
bzrbranchdebianlp:lenny/foo gives you the source branch (on Launchpad)
for project foo in Debian Lenny.
(Barry Warsaw, #609186)

Provide a configuration option “default_format” that controls the
default format for new branches created with bzrinit.
(Neil Martinsen-Burrell, #484101)

Correctly add directory contents when the name was previously added as a
normal file, rather than throwing AttributeError:children during
smart_add. (Martin [gz], #251864)

Correctly handle the --directory option for all code paths of
resolve and shelve, this was previously ignored when paths were
provided as parameters. When both are provided, --directory becomes
the base directory for the other paths. (Vincent Ladeuil, #670851)

NotBranchError no longer allows errors from calling
bzrdir.open_repository() to propagate. This is unhelpful at best,
and at worst can trigger infinite loops in callers. (Andrew Bennetts)

The branch.tags.merge_to(target_branch) API used by plugins such as
bzr-builddeb now propagates changes to the master branch of the
target branch (if there is one). This makes it consistent with the
other tag APIs. (Andrew Bennetts, #603395)

The bzrtags command sorts tag names using a natural sort by
default (so tag2 sorts before tag10). The previous default was
strictly “asciibetical”. That behavior is still available as bzrtags--sort=alpha. (Neil Martinsen-Burrell, #640760)

BzrDir.generate_backup_name has been deprecated and replaced by a
private method. osutils.available_backup_name provides an extensible
replacement. This allowed the deprecation of
bzrlib.transform.get_backup_name,
bzrlib.transform._get_backup_name and
bzrlib.transform.TreeTransformBase.has_named_child.
(Vincent Ladeuil)

unshelve--preview now can show diff in a non-ascii encoding.
(Andrej A Antonov, #518916)

Deleting a versioned directory can leave orphans: unversioned files that
were present don’t have a parent anymore. The
bzr.transform.orphan_policy configuration option controls the bzr
behaviour: conflict (the default) leave the orphans in place and
create a conflict for the directory, move create orphans named
<file>.~#~ in a bzr-orphans directory at the root of the working
tree. (Vincent Ladeuil, #323111)

WorkingTree methods pull, update, and _update_tree
now have an optional argument, show_base, which is by default
False. This is flag is ultimately passed to merge.merge_inner
in each case. (Rory Yorke, #202374)

Add a new simpler way to generate multiple test variations, by setting
the scenarios attribute of a test class to a list of scenarios
descriptions, then using load_tests_apply_scenarios. (See the testing
guide and bzrlib.tests.scenarios.) Simplify test_http using this.
(Martin Pool, #597791)

This is the first beta of the 2.3 series, leading up to a 2.3.0
release in January or February. Beta releases are suitable for everyday use
but may cause some incompatibilities with plugins. Some plugins may need
small updates to work with 2.3b1.

2.3b1 includes some performance improvements in both speed and memory
consumption, some preliminary support for generating a texinfo version of
the doc and better support for launchpad. Many changes were made to make
our test suite more robust as well as numerous documentation fixes. It
improves the common infrastructure for dealing with colocated named
branches and foreign branches. We plan to continue with these themes
through the 2.3 series.

It also includes bug fixes for 2.0.6, 2.1.3 and 2.2.1 and over 40 fixes of
its own.

bzrlib.config.LockableConfig is a base class for config files that
needs to be protected against multiple writers. All methods that
change a configuration variable value must be decorated with
@needs_write_lock (set_option() for example).
(Vincent Ladeuil, #525571)

The lp: prefix will now use your known username (from
bzrlaunchpad-login) to expand ~ to your username. For example:
bzrlaunchpad-loginuser&&bzrpushlp:~/project/branch will now
push to lp:~user/project/branch. (John Arbash Meinel)

New development format development8-subtree which is similar to the
2a format and adds subtree support. (Jelmer Vernooij)

bzrremove now just backs up changed files instead of exiting,
forcing you to choose to either keep or delete them. Bazaar will now delete
the files if they can easily be recovered using revert, otherwise they
will be backed up (adding an extension of the form .~#~).
(Marius Kruger, #400554)

bzrrevert and bzrstatus are up to 15% faster on large trees
with many changes by not repeatedly building a list of all file-ids.
(Andrew Bennetts)

Decrease memory consumption when many chk index pages are loaded. (Such
as during bzrco or bzrls-R of a large tree.) Often we need to
read many chk pages because the individual chk map nodes will be spread
randomly. Peak memory for ‘bzr ls -R’ on a large tree dropped from 396MB
down to 247MB, expect even more significant savings on 64-bit platforms.
(John Arbash Meinel)

Decrease peak memory during bzrsend. The old code was caching all
text content and all inventory strings for all revisions before
computing the diffs. Now we only cache as long as there is a child that
will need them. Sending 2000 bzr revisions drops from 1.2GB peak to
256MB peak. (John Arbash Meinel, #614576)

DirState internals use a little bit less memory. For bzr.dev it
drops the memory from 1MB down to about 800kB. And replaces a few
thousand tuples and sets with StaticTuple. (John Arbash Meinel)

When building new working trees, default to reading from the repository
rather than the source tree unless explicitly requested. (via
--files-from and --hardlink for bzrbranch and
bzrcheckout. Generally, 2a format repositories extract
content faster than seeking and reading content from another tree,
especially in cold-cache situations. (John Arbash Meinel, #607298)

Add __pycache__ to the default ignores file. Future releases of
Python will use this directory to store bytecodes.
(Andrea Corbellini, #626687)

Fix AttributeErroronparent.children when adding a file under a
directory that was a symlink in the previous commit.
(Martin Pool, #192859)

Fix AttributeError:'NoneType'objecthasnoattribute'close' in
_close_ssh_proc when using bzr+ssh://. This was causing
connections to pre-1.6 bzr+ssh servers to fail, and causing warnings on
stderr in some other circumstances. (Andrew Bennetts, #633745)

Fix AttributeErroronparent.children when adding a file under a
directory that was a symlink in the previous commit.
(Martin Pool, #192859)

Fix AttributeError:'NoneType'objecthasnoattribute'close' in
_close_ssh_proc when using bzr+ssh://. This was causing
connections to pre-1.6 bzr+ssh servers to fail, and causing warnings on
stderr in some other circumstances. (Andrew Bennetts, #633745)

Fix a problem in bzr’s Makefile that meant syntax errors in some
parts of bzr’s source code could cause makecheck-nodocs to
incorrectly return an exit code of 0.
(Vincent Ladeuil, #626667)

Most of the leaked threads during selftest are now fixed, allowing the
full test suite to pass on gentoo.
(Vincent Ladeuil, #392127)

Only call setlocale in the bzr startup script on posix systems. This
avoids an issue with the newer windows C runtimes used by Python 2.6 and
later which can mangle bytestrings printed to the console.
(Martin [gz], #631350)

Repositories accessed via a smart server now reject being stacked on a
repository in an incompatible format, as is the case when accessing them
via other methods. This was causing fetches from those repositories via
a smart server (e.g. using bzrbranch) to receive invalid data.
(Andrew Bennetts, #562380)

Selftest with versions of subunit that support stopTestRun will no longer
error. This error was caused by 2.0 not being updated when upstream
python merged the end of run patch, which chose stopTestRun rather than
done. (Robert Collins, #571437)

strace test-helper tests cope with the new Ubuntu policy of not allowing
users to attach to their own processes by default.
(Martin Pool, #626679)

Test classes like TestCase, TestLoader, and TestSuite should
be available from bzrlib.tests.*. They used to be, but were
accidentally removed. (John Arbash Meinel, #627438)

Transport.stat on a symlink, including a transport pointing directly
to a symlink, now returns information about the symlink.
(Martin Pool)

Upgrading or fetching from a non-rich-root repository to a rich-root
repository (e.g. from pack-0.92 to 2a) no longer fails with
'Inter1and2Helper'objecthasnoattribute'source_repo'. This was
a regression from Bazaar 2.1. (Andrew Bennetts, #636930)

When passing a file to UTF8DirReader make sure to close the current
directory file handle after the chdir fails. Otherwise when passing many
filenames into a command line bzrstatus we would leak descriptors.
(John Arbash Meinel, #583486)

ControlDirFormat and ControlDir have been split out of BzrDirFormat
and BzrDir, respectively. ControlDirFormat
and ControlDir should be used as the base classes for new non-.bzr
implementations.

BzrDirFormat.register_control_format has been renamed to
ControlDirFormat.register_format.

BzrDirFormat.register_server_control_format has been removed.

Probing for control directories is now done by separate objects derived
from bzrlib.controldir.Prober and registered using
bzrlib.controldir.ControlDirFormat.register_prober or
bzrlib.controldir.ControlDirFormat.register_server_prober.
BzrDirFormat.probe_transport has been moved onto Prober.

BzrDirFormat.register_format has been renamed to
BzrProber.register_bzrdir_format.

bzrlib.bzrdir.network_format_registry has been moved to
bzrlib.controldir.

BzrError subclasses no longer support the name “message” to be used
as an argument for __init__ or in _fmt format specification as this
breaks in some Python versions. errors.LockError.__init__ argument
is now named “msg” instead of earlier “message”.
(Parth Malwankar, #603461)

Configuration files should now use the from_string constructor rather
than the file parameter of the _get_parser method. The later has
been deprecated. from_string also accept a save=True parameter to
have the configuration file immediately written to disk.
(Vincent Ladeuil)

Deprecate treating a PushResult and PullResult as an integer for the
relative change in revno.
(Martin Pool)

FileInWrongBranch is deprecated in favour of PathNotChild and no
longer raised.
(Martin Pool)

IniBaseConfig objects should now use the from_string constructor
the rather than the file parameter of the _get_parser method. The
later has been deprecated. (Vincent Ladeuil)

InventoryEntry instances now raise AttributeError if you try to assign
to attributes that are irrelevant to that kind of entry. e.g. setting
symlink_target on an InventoryFile will fail. It is still okay to
read those attributes on any kind of InventoryEntry. The complete list
of affected attributes is: executable, text_id, text_sha1,
text_size (only valid for kind == file); symlink_target (only
valid for kind == link); and reference_revision (only valid for kind
== tree-reference). (Andrew Bennetts)

The test suite now simply holds log files in memory, rather than writing them
out to disk and then reading them back in and deleting them.
(Andrew Bennetts)

The way bzrselftest--parallel generates N partitions of tests to
run in parallel has changed. Instead of splitting the list of tests at
N-1 points, it distributes the tests one-by-one into the partitions in a
round robin fashion. This reduces the total time to run the tests in
parallel because a series of slow tests in the test suite will be
distributed evenly among the parallel test suites, rather than slowing
down just one suite. (Andrew Bennetts)

Tracebacks from a parameterized test are no longer reported against every
parameterization of that test. This was done by adding a hack to
bzrlib.tests.clone_test so that it no longer causes
testtools.TestCase instances to share a details dict.
(Andrew Bennetts, #625574)