bzr 2.1.0b3
###########

:Codename: after sprint recovery
:2.1.0b3: 2009-11-16

This release was pushed up from its normal release cycle due to a
regression in python 2.4 compatibility in 2.1.0b2.  Since this regression
was caught before 2.1.0b2 was officially announced, the full changelog
includes both 2.1.0b3 and 2.1.0b2 changes.

Highlights of 2.1.0b3 are: new globbing code for all commands on Windows,
the test suite now conforms to python's trunk enhanced semantics (skip,
etc.), and ``bzr info -v`` will now report the correct branch and repo
formats for Remote objects.


New Features
************

* Users can define a shelve editor to provide shelf functionality at a
  granularity finer than per-patch-hunk. (Aaron Bentley)

Bug Fixes
*********

* Fix for shell completion and short options.  (Benoît PIERRE)

* Hooks daughter classes should always call the base constructor.
  (Alexander Belchenko, Vincent Ladeuil, #389648) 

* Improve "Binary files differ" hunk handling.  (Aaron Bentley, #436325)

* On Windows, do glob expansion at the command-line level (as is usually
  done in bash, etc.) This means that *all* commands get glob expansion
  (bzr status, bzr add, bzr mv, etc). It uses a custom command line
  parser, which allows us to know if a given section was quoted. It means
  you can now do ``bzr ignore "*.py"``.
  (John Arbash Meinel, #425510, #426410, #194450)

* Sanitize commit messages that come in from the '-m' flag. We translate
  '\r\n' => '\n' and a plain '\r' => '\n'. The storage layer doesn't
  allow those because XML store silently translate it anyway. (The parser
  auto-translates \r\n => \n in ways that are hard for us to catch.)

* Show correct branch and repository format descriptions in 
  ``bzr info -v`` on a smart server location.  (Andrew Bennetts, #196080)

* The fix for bug #186920 accidentally broke compatibility with python
  2.4.  (Vincent Ladeuil, #475585)

* Using ``Repository.get_commit_builder().record_iter_changes()`` now
  correctly sets ``self.inv_sha1`` to a sha1 string and
  ``self.new_inventory`` to an Inventory instance after calling
  ``self.finish_inventory()``. (Previously it accidently set both values
  as a tuple on ``self.inv_sha1``. This was missed because
  ``repo.add_revision`` ignores the supplied inventory sha1 and recomputes
  the sha1 from the repo directly. (John Arbash Meinel)

* Shelve command refuse to run if there is no real terminal.
  (Alexander Belchenko)

* Avoid unnecessarily flushing of trace file; it's now unbuffered at the
  Python level.  (Martin Pool)

Documentation
*************

* Include Japanese translations for documentation (Inada Naoki)

* New API ``ui_factory.make_output_stream`` to be used for sending bulk
  (rather than user-interaction) data to stdout.  This automatically
  coordinates with progress bars or other terminal activity, and can be
  overridden by GUIs.
  (Martin Pool, 493944)

Internals
*********

* Some of the core groupcompress functionality now releases the GIL before
  operation. Similar to how zlib and bz2 operate without the GIL in the
  core compression and decompression routines. (John Arbash Meinel)

Testing
*******

* -Dhpssvfs will now trigger on ``RemoteBzrDir._ensure_real``, providing
  more debugging of VFS access triggers. (Robert Collins)

* KnownFailure is now signalled to ``ExtendedTestResult`` using the same
  method that Python 2.7 uses - ``addExpectedFailure``. (Robert Collins)

* ``--parallel=fork`` is now compatible with --subunit.
  (Robert Collins, Vincent Ladeuil, #419776)

* Reporting of failures shows test ids not descriptions and thus shows
  parameterised tests correctly. (Robert Collins)

* TestNotApplicable is now handled within the TestCase.run method rather
  than being looked for within ``ExtendedTestResult.addError``. This
  provides better handling with other ``TestResult`` objects, degrading to
  sucess rather than error. (Robert Collins)

* The private method ``_testConcluded`` on ``ExtendedTestResult`` has been
  removed - it was empty and unused. (Robert Collins)

* UnavailableFeature is now handled within the TestCase.run method rather
  than being looked for within addError. If the Result object does not
  have an addNotSupported method, addSkip is attempted instead, and
  failing that addSuccess. (Robert Collins)

* When a TestResult does not have an addSkip method, skipped tests are now
  reported as successful tests, rather than as errors. This change is
  to make it possible to get a clean test run with a less capable
  TestResult. (Robert Collins)



