Metadata-Version: 2.1
Name: mercurial_all_paths
Version: 1.2.2
Summary: Mercurial allpaths extension
Home-page: https://foss.heptapod.net/mercurial/mercurial-all_paths
Author: Marcin Kasperski
Author-email: Marcin.Kasperski@mekk.waw.pl
License: GNU General Public License v2 (GPLv2)
Keywords: mercurial paths multi extension
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: DFSG approved
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Classifier: Topic :: Software Development :: Version Control
License-File: COPYING
Requires-Dist: mercurial_extension_utils>=1.5.0

.. -*- mode: rst; compile-command: "rst2html README.rst README.html" -*-

================================================
Mercurial All Paths extension
================================================

Push or pull to many (or all) paths at once. 

.. contents::
   :local:
   :depth: 2

.. sectnum::

Basic usage
================================================

Execute::

    hg pushall

to push to all remotes which are defined for the repository. Or::

    hg pullall

to pull from all remotes in order.

There are also::

    hg incomingall

    hg outgoingall

Standard push/pull options can be given, for example::

    hg pushall -f -B issue-13724

    hg pullall -r stable --insecure

Those commands iterate over all paths returned by ``hg paths``.  This
usually means iterating over paths defined in ``[paths]`` section of
``.hg/hgrc``, but `Path Pattern`_ paths are also handled. You can
impact this behaviour by configuration, see below.


Defining path groups
================================================

Instead of pushing/pulling everywhere, you can define and use *groups*::

    hg pushall -g publish

pushes to all paths from the ``publish`` group (where ``publish`` is
symbolic name of your choosing). Or::

    hg pullall -g shared

pulls from all paths in ``shared`` group.

There are two ways to define such a group:

1. Define appropriate entry in ``[all_paths]`` section (either in ``.hg/hgrc``
   or in your global ``~/.hgrc``). For example::

     [all_paths]
     group.publish = bitbucket github backup

   (path aliases ``bitbucket``, ``github`` and ``backup`` must
   be somehow defined).

2. (Legacy method) Put the section of the same name in ``.hg/hgrc``,
   and define all paths there. For example::

    [publish]
    bitbucket = ssh://hg@bitbucket.org/ludovicchabant/piecrust
    github = git+ssh://git@github.com:ludovicchabant/PieCrust.git
    backup = ssh://ludo@backup.local/piecrust

   The syntax is the same as in standard ``[paths]`` section, just
   name the section with the name of your group.

   .. note::

      Be careful to avoid conflicts with names which mean something
      to Mercurial. For example ``web`` would be a bad name as ``[web]``
      section configures ``hg serve`` behaviour, and ``ui`` would be
      fatal as ``[ui]`` configures various basic Mercurial settings.

I recommend the former method as it avoids the risk of conflicts,
makes it easy to define groups globally instead of defining them for
every repository (especially handy if you use `Path Pattern`_), and is
more compact.

Groups are also handled for ``incomingall`` and ``outgoingall``, but
long ``--group`` option must be used (``-g`` is already taken by
standard Mercurial, means reporting in ``--git`` diff format)::

     hg outgoingall --group publish

Configuration
=======================================================

The extension can be configured using ``[all_paths]`` section of your
global (``~/.hgrc``) or repository-level (``.hg/hgrc``) config file::

  [all_paths]
  prioritize = platon department
  ignore = bitbucket production
  group.publish = github bitbucket
  group.backup = homebackup awsbackup

``prioritize`` impacts the order, defines paths which are to be
handled first (if present). This is mostly useful for ``pullall``
where pulling from local fast computer before pulling from remote
server means saving some time and traffic. So::

  prioritize = platon department

means: if path named ``platon`` is present, handle it first, then
path named ``department``, only then follow to the other paths.

``ignore`` lists paths which should be ignored, those remotes will
be skipped. So::

  ignore = bitbucket production

means that ``hg pullall`` or ``hg pushall`` should not use
``bitbucket`` path (in my case because this is HTTP remote, and I have
also preferable ``bitssh``configured), and ``production`` path (as
there I prefer to pull and push only on specific demand).

Both those settings impact only *default* commands (those run
without ``-g GROUP`` option). In case of groups items are processed
in the order they are specified in group definition.

``group.«NAME»`` define group for ``-g «NAME»`` as described earlier. 


Installation
=======================================================

From PyPi
--------------------

If you have working ``pip`` or ``easy_install``::

    pip install --user mercurial_all_paths

or maybe::

    sudo pip install mercurial_all_paths

Then activate by::

    [extensions]
    mercurial_all_paths =

To upgrade, repeat the same command with ``--upgrade`` option, for
example::

    pip install --user --upgrade mercurial_all_paths

From source
-------------------------------------------------------

If you don't have ``pip``, or wish to follow development more closely:

- clone both this repository and `mercurial_extension_utils`_ and put
  them in the same directory, for example::

    cd ~/sources
    hg clone https://foss.heptapod.net/mercurial/mercurial-extension_utils/
    hg clone https://foss.heptapod.net/mercurial/mercurial-all_paths/

- update to newest tags,

- activate by::

    [extensions]
    mercurial_all_paths = ~/sources/mercurial-all_paths/mercurial_all_paths.py

To upgrade, pull and update.

Note that directory names matter. See `mercurial_extension_utils`_ for
longer description of this kind of installation.

History
=======================================================

See `HISTORY.rst`_

Repository, bug reports, enhancements suggestions
=======================================================

Development is tracked on HeptaPod, see

    https://foss.heptapod.net/mercurial/mercurial-all_paths/

Use issue tracker there for bug reports and enhancement
suggestions.

Thanks to Octobus_ and `Clever Cloud`_ for hosting this service.

Original repository, maintained by Ludovic Chabant:

    https://bitbucket.org/ludovicchabant/allpaths


Additional notes
=======================================================

Information about this extension is also available
on Mercurial Wiki: http://mercurial.selenic.com/wiki/AllPathsExtension



.. _Octobus: https://octobus.net/
.. _Clever Cloud: https://www.clever-cloud.com/

.. _Path Pattern: https://foss.heptapod.net/mercurial/mercurial-path_pattern/
.. _HISTORY.rst: https://foss.heptapod.net/mercurial/mercurial-all_paths/src/tip/HISTORY.rst
.. _mercurial_extension_utils: https://foss.heptapod.net/mercurial/mercurial-extension_utils/

