bzr 1.18
########

Compatibility Breaks
********************

* Committing directly to a stacked branch from a lightweight checkout will
  no longer work. In previous versions this would appear to work but would
  generate repositories with insufficient data to create deltas, leading
  to later errors when branching or reading from the repository.
  (Robert Collins, bug #375013)

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

Bug Fixes
*********

* Fetching from 2a branches from a version-2 bzr protocol would fail to
  copy the internal inventory pages from the CHK store. This cannot happen
  in normal use as all 2a compatible clients and servers support the
  version-3 protocol, but it does cause test suite failures when testing
  downlevel protocol behaviour. (Robert Collins)

* Fix a test failure on karmic by making a locale test more robust.
  (Vincent Ladeuil, #413514)

* Fixed "Pack ... already exists" error when running ``bzr pack`` on a
  fully packed 2a repository.  (Andrew Bennetts, #382463)

* Further tweaks to handling of ``bzr add`` messages about ignored files.
  (Jason Spashett, #76616)

* Properly handle fetching into a stacked branch while converting the
  data, especially when there are also ghosts. The code was filling in
  parent inventories incorrectly, and also not handling when one of the
  parents was a ghost. (John Arbash Meinel, #402778, #412198)

* ``RemoteStreamSource.get_stream_for_missing_keys`` will fetch CHK
  inventory pages when appropriate (by falling back to the vfs stream
  source).  (Andrew Bennetts, #406686)

* StreamSource generates rich roots from non-rich root sources correctly
  now.  (Andrew Bennetts, #368921)

* When deciding whether a repository was compatible for upgrading or
  fetching, we previously incorrectly checked the default repository
  format for the bzrdir format, rather than the format that was actually
  present on disk.  (Martin Pool, #408824)

Improvements
************

* A better description of the platform is shown in crash tracebacks, ``bzr
  --version`` and ``bzr selftest``.
  (Martin Pool, #409137)

* Cross-format fetches (such as between 1.9-rich-root and 2a) via the
  smart server are more efficient now.  They send inventory deltas rather
  than full inventories.  The smart server has two new requests,
  ``Repository.get_stream_1.19`` and ``Repository.insert_stream_1.19`` to
  support this.  (Andrew Bennetts, #374738, #385826)

* Extracting the full ancestry and computing the ``merge_sort`` is now
  significantly faster. This effects things like ``bzr log -n0``. (For
  example, ``bzr log -r -10..-1 -n0 bzr.dev`` is 2.5s down to 1.0s.
  (John Arbash Meinel)

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

API Changes
***********

Internals
*********

* ``-Dstrict_locks`` can now be used to check that read and write locks
  are treated properly w.r.t. exclusivity. (We don't try to take an OS
  read lock on a file that we already have an OS write lock on.) This is
  now set by default for all tests, if you have a test which cannot be
  fixed, you can use ``self.thisFailsStrictLockCheck()`` as a
  compatibility knob. (John Arbash Meinel)

* InterDifferingSerializer is now only used locally.  Other fetches that
  would have used InterDifferingSerializer now use the more network
  friendly StreamSource, which now automatically does the same
  transformations as InterDifferingSerializer.  (Andrew Bennetts)

* ``KnownGraph`` now has a ``.topo_sort`` and ``.merge_sort`` member which
  are implemented in pyrex and significantly faster. This is exposed along
  with ``CombinedGraphIndex.find_ancestry()`` as
  ``VersionedFiles.get_known_graph_ancestry(keys)``.
  (John Arbash Meinel)

* RemoteBranch.open now honours ignore_fallbacks correctly on bzr-v2
  protocols. (Robert Collins)

* The index code now has some specialized routines to extract the full
  ancestry of a key in a more efficient manner.
  ``CombinedGraphIndex.find_ancestry()``. (Time to get ancestry for
  bzr.dev drops from 1.5s down to 300ms. For OOo from 33s => 10.5s) (John
  Arbash Meinel)

Testing
*******

* Install the test ssl certificate and key so that installed bzr
  can run the https tests. (Denys Duchier, #392401)
  

