merge with stable
exchange: extract push function from localrepo

The localrepo class if far too big. Push and pull logic will be extracted and
reworked to better fit with the fact they now exchange more than plain changeset
bundle.

This changeset extract the push code. later changeset will slowly slice this
over 200 hundred lines and 8 indentation level function into smaller saner
brick.

The localrepo.push method is kept for now to limit impact on user code. But it
will be ultimately removed, now that the public supposed API is hold by peer.
push: introduce a pushoperation object

This object will hold all data and state gathered through the push. This will
allow us to split the long function into multiple small one. Smaller function
will be easier to maintains and wrap.  The idea is to blindly store all
information related to the push in this object so that each step and extension
can use them if necessary.

We start by putting the `repo` variable in the object. More migration in other
changeset.
push: ease access to current ui object

The `pushoperation.repo.ui` attribute is very commonly used. we offer a faster way
to access it directly through the push operation object.
push: move `remote` argument in the push object

One more step toward a more modular push function.
push: move `force` argument into the push object

One more step toward a more modular push function.
push: move `revs` argument into the push object

One more step toward a more modular push function.
push: move `newbranch` argument into the push object

One more step toward a more modular push function.
push: move bookmarks exchange in the exchange module

The bookmark exchange code was already extracted during a previous cycle. This
changesets moves the extracted function in this module. This function will read
and write data in the `pushoperation` object and It  is preferable to have all
core function collaborating through this object in the same place.

This changeset is pure code movement only. Code change for direct consumption of
the `pushoperation` object will come later.
merge with stable
Makefile: hg.pot depends on the scripts generating it

This is convenient when editing this scripts. And translators will get updated
translation files even if nothing else has changed.
i18n: posplit writes a warning for translators before rst directives

rst directives like this one have been translated:
.. note::

To help the translator include a comment before such messages.

An entry containing a rst directive now looks like this:

#. do not translate: .. note::
#: path/to/file:75
msgid = ".. note:: to think about"
msgstr = ...
i18n-de: update po file for showing the effect of changed posplit
i18n: posplit removes the entry "::" from the pot file

We do not gain anything by allowing to translate it.
i18n: leave out entries which contain only a rst directive

This prevents the danger of translating entries like ".. note::"
i18n: leave out entries which contain only rst syntax

This prevents the danger of translating entries like the following ones:

.. container:: verbose

    .. input:: filename1.txt
revset: added baseset class (still empty) to improve revset performance

This class is going to be used to cache the set that is created from this list
in many cases while evaluating a revset.
i18n-de: remove locations

Strip the locations by running msgcat [1] as the wiki [2] tells to do. Do
this in a separate patch for getting a smaller one when updating from hg.pot.

[1] msgcat --no-location -o de.po de.po
[2] mercurial.selenic.com/wiki/TranslatingMercurial#Updating_a_Translation
i18n-de: updated po file with 427d672c0e4e

Do this in a separate patch for easier reviewing of the translation patch.
i18n-pt_BR: synchronized with 268a5ab5c27b