{ "info": { "author": "Marcin Kasperski", "author_email": "Marcin.Kasperski@mekk.waw.pl", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "License :: DFSG approved", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Topic :: Software Development :: Version Control" ], "description": ".. -*- mode: rst; compile-command: \"rst2html README.txt README.html\" -*-\n\n=======================================================\nMercurial Path Pattern\n=======================================================\n\nDon't repeat yourself defining ``[paths]`` over many repositories,\nspecify the general rule once in ``~/.hgrc``.\n\nPath Pattern is a Mercurial_ extension used to define default\nremote path aliases. You may find it helpful if you maintain\nconsistently layed out repository trees on a few machines.\n\n.. contents::\n :local:\n :depth: 2\n\n.. sectnum::\n\nPath Pattern mostly works behind the courtains, making standard\ncommands like ``hg pull``, ``hg push``, and ``hg incoming`` aware of\nextra paths. Still, it implements some commands, in particular ``hg\ncloneto \u00abpath-alias\u00bb`` (clone to remote address specified by short\nname).\n\n\nUsing path patterns\n=======================================================\n\nInstall the extension as described below.\n\nSimple example\n-------------------------------------------------------\n\nWrite in your ``~/.hgrc``::\n\n [extensions]\n mercurial_path_pattern =\n\n [path_pattern]\n lagrange.local = ~/devel/{repo}\n lagrange.remote = ssh://johny@lagrange.mekk.net/sources/{repo}\n bbssh.local = ~/devel/public/{below}\n bbssh.remote = ssh://hg@bitbucket.org/Johny/{below:/=-}\n\nImagine ``~/devel/personal/blog/drafts`` and ``~/devel/public/pymods/acme``\nare both some mercurial repositories. Then::\n\n cd ~/devel/personal/blog/drafts\n hg push lagrange\n # Works, pushes to ssh://johny@lagrange.mekk.net/sources/personal/blog/drafts\n\n cd ~/devel/public/pymods/acme\n hg pull lagrange\n # Works, pulls from ssh://johny@lagrange.mekk.net/sources/public/pymods/acme\n hg pull bbssh\n # Works too, pulls from ssh://hg@bitbucket.org/Johny/pymods-acme\n\nThis works in spite of the fact, that those repos lack ``.hg/hgrc``.\n\nFor two repositories that's not very useful, but once you have hundred\nof them, managing individual ``.hg/hgrc`` becomes a hassle (imagine\nchanging ``lagrange.mekk.net`` to ``lagrange.mekk.com`` everywhere, or\nmaybe adding second remote alias for the new development machine).\n\n.. note::\n\n On Windows extension tries to handle (in ``.local`` specifications)\n both native paths (``C:\\repos\\sth``) and portable ones\n (``C:/repos/sth``), but it is recommended to use the\n latter. Whichever syntax is used, extracted ``{fragments}`` contain\n ``/`` (so they can be easily used in remote urls).\n\nOverriding repository-level paths\n-------------------------------------------------------\n\nBy default path patterns have lower priority than per-repository\npaths, so in case you define ``lagrange`` path on repository level, it\nwon't be overwritten by the pattern. You can augment it by adding\n``.enforce``::\n\n [path_pattern]\n lagrange.local = ~/devel/{repo}\n lagrange.remote = ssh://johny@lagrange.mekk.net/sources/{repo}\n lagrange.enforce = true\n\nWith such config pattern wins against any path from ``.hg/hgrc``\n(usually it is not recommended but can be handy if you have some\nbroken path scattered around repositories).\n\nReusing the same alias\n--------------------------------------------------------\n\nTo (re)use the same alias in a few different locations, use\n``ALIAS.XTRA.local`` and ``ALIAS.XTRA.remote`` keys, where ``XTRA``\nis something unique. For example::\n\n [path_pattern]\n production.main.local = ~/devel/{repo}\n production.main.remote = ssh://www-owner@www.acme.org/public/{repo}\n production.beta.local = ~/experiments/{repo}\n production.beta.remote = ssh://www-owner@beta.acme.org/public/{repo}\n\nwould let you ``hg push production`` not only in\n``~/devel/website/blog`` but also in ``~/experiments/website/qagame``\n(pushing to ``www.acme.org`` in the former, and to ``beta.acme.org`` in the\nlatter case). Whether this is a good idea, is up to you.\n\n\n\nClone-supporting commands\n=======================================================\n\nUsing ``cloneto``\n-------------------------------------------------------\n\nThe ``cloneto`` command makes it easier to clone repository to remote url::\n\n hg cloneto lagrange\n # Equivalent to \n # hg clone . ssh://johny@lagrange.mekk.net/sources/pymodules/acme\n # but noticeably shorter\n\nwhich works both for normal paths and paths derived from patterns, but\nis especially handy with patterns. In particular, it makes\nit possible to push newly created repository, for example::\n\n cd ~/devel/libs\n hg init xyz\n cd xyz\n hg cloneto lagrange\n # Works, creates sources/libs/xyz on johny@lagrange.mekk.net\n\n.. note::\n\n While ``cloneto`` is particularly useful with patterns, it works\n for usual paths as well. You can write (new) path to repository-level\n ``.hg/hgrc``, then ``hg cloneto \u00abnew-name\u00bb``.\n\nInstead of ``clonefrom``\n-------------------------------------------------------\n\nThere is no ``clonefrom`` command (at least for now), but it is not\nreally needed. The following works (imagine ``libs/zzz`` exists on\n``lagrange.mekk.net``, but is not yet cloned *here*)::\n\n cd ~/devel/libs\n hg init zzz\n cd zzz\n hg pull lagrange\n\n\nTesting pattern configuration\n=======================================================\n\nThe standard::\n\n hg paths\n\ncommand lists paths defined for current repository, after pattern\nexpansion. Use it (in a few different repositories) to verify whether\nyour patterns generate proper paths.\n\nThe::\n\n hg list_path_patterns\n\ncommand prints all patterns found in configuration. Use it to detect\ntypos causing some patterns to be ignored and to check the final\nresult of configuration processing.\n\n\nPattern syntax\n=======================================================\n\nIntroduction\n--------------------\n\nPatterns are defined in ``[path_pattern]`` section of mercurial\nconfiguration file (typically ``~/.hgrc``). You may have as many\npatterns as you like. Example illustrating various syntax elements::\n\n [path_pattern]\n lagrange.local = ~/devel/{repo}\n lagrange.remote = ssh://johny@lagrange.mekk.net/sources/{repo}\n euler.local = ~/devel/{repo}\n euler.remote = ssh://johny@euler.mekk.net/devel/{repo:/=.}/hg\n wrk.local = ~/work/{what}\n wrk.remote = https://tim@devel-department.local/{what:/=__:\\=__}\n ugly.local = ~/(topic)/sources/{subpath}/repo\n ugly.remote = ssh://hg{topic}@devel.local/{topic}/{subpath}\n cfg.dotcfg.local = ~/.config/{repo}\n cfg.dotcfg.remote = ssh://hgrepos@central.com/configs/riemann-config/{repo}\n cfg.dotshr.local = ~/.local/share/{repo}\n cfg.dotshr.remote = ssh://hgrepos@central.com/configs/riemann-local/{repo}\n official.hgstable.local = ~/tracked/mercurial/hg-stable\n official.hgstable.remote = http://selenic.com/repo/hg-stable\n official.thg.local = ~/tracked/mercurial/tortoisehg-stable\n official.thg.remote = https://bitbucket.org/tortoisehg/thg\n official.evolve.local = ~/tracked/mercurial/mutable-history\n official.evolve.remote = https://bitbucket.org/marmoute/mutable-history\n\nPattern definition\n---------------------\n\nEvery pattern is defined by the pair of keys - ``\u00abalias\u00bb.local`` and\n``\u00abalias\u00bb.remote`` - or, in case the same alias is to be used in a few\nplaces, by ``\u00abalias\u00bb.\u00absth\u00bb.local`` and ``\u00abalias\u00bb.\u00absth\u00bb.remote`` (where\n``\u00absth\u00bb`` is anything making the key unique).\n\nWhile processing patterns, the extension matches current repository\nroot path against ``local`` pattern, and if it matches, calculates\nremote path by filling markers present there, and defines the path alias.\n\nThe ``.local`` part should specify absolute repository path (``~`` and\n``~user`` are allowed). Some part(s) of the path may be replaced with\n``{brace}`` or ``(paren)`` markers:\n\n- ``{brace}`` matches everything aggressively (to the very end, unless\n some fixed text follows it),\n\n- ``(paren)`` is limited to single path item and does not cross ``/`` or ``\\\\`` characters).\n\nThose parts will be extracted from local repository path and available\nfor use in remote path being defined.\n\n.. note::\n\n Typically there will be single ``{marker}`` on the end, but more\n obscure patterns are possible (as ``ugly`` above\n illustrates). \n\nMarkers are optional, if no marker is used (see ``official`` above),\nrule applies to exactly one repository. This may make sense (over\ndefining path in given repo ``.hg/hgrc``) if you prefer to centralize\nyour remote paths list (or if you frequently drop those repos to re-clone\nthem again later).\n\nThe ``.remote`` part defines appropriate remote address. This is typical\nMercurial remote path, but ``{marker}``'s can be used to refer to\nvalues extracted from local path: ``{sth}`` is replaced with whatever\nmatched ``{sth}`` or ``(sth)`` present in local path.\n\nSimple modifications are supported \u2013 ``{sth:x=y}`` means *take whatever\nwas extracted as* ``sth`` *and replace any* ``x`` *with* ``y``. This is\nmostly used to replace ``/`` with some other character (in particular\n``{below:/=-}`` handles BitBucket convention, replacing slashes with minuses).\nReplacements can be multi-letter, for example ``{sth:lib=library}``.\n\nReplacements can be chained if necessary \u2013 ``{sth:x=y:v=z}`` means\n*take whatever was extracted as* ``sth``, *replace any* ``x`` *with*\n``y``, *then replace any* ``v`` *with* ``z``, *then use the final\nresult*.\n\n.. note::\n\n In case multiple patterns of the same name match, extension tries\n to find *best* one. See `Pattern priority`_ chapter below.\n\n\nResolution example\n--------------------\n\nWith definitions quoted above, if you happen to work\ninside the ``~/devel/python/libs/webby`` repository, the extension will:\n\n1. Find that ``lagrange.local`` matches and that ``{repo}`` is\n ``python/libs/webby``. Filling ``lagrange.remote`` with\n that value generates\n ``ssh://johny@lagrange.mekk.net/sources/python/libs/webby``, so\n the following path alias is created:\n ``lagrange=ssh://johny@lagrange.mekk.net/sources/python/libs/webby``\n\n2. Discover that ``euler.local`` also matches, and ``{repo}`` is again\n ``python/libs/webby``. After replacing ``/``-s with ``.``-s,\n that brings alias \n ``euler=ssh://johny@euler.mekk.net/devel/python.libs.webby/hg``\n\n3. Ignore remaining patterns as they do not match.\n\nOr, in ``~/tracked/mercurial/tortoisehg-stable``, the extension will:\n\n1. Note that ``official.thg.local`` matches (at this time without\n defining anything), extract matching path from\n ``official.thg.remote``, and finally generate for this repository\n path ``official = https://bitbucket.org/tortoisehg/thg`` (so ``hg\n pull official`` works there). Note that the path alias is just\n ``official``, the ``.thg.`` part was used only to group appropriate\n config items.\n\n2. Ignore remaining patterns which do not match.\n\n\nLegacy syntax\n------------------------------------------------------\n\nFor compatibility reasons, there exist alternative way\nto reuse the same path alias. For example, instead of\n(currently recommended)::\n\n [path_pattern]\n production.web.local = ~/devel/web/{repo}\n production.web.remote = ssh://product@acme.org/www/{repo}\n production.db.local = ~/devel/database/{repo}\n production.db.remote = ssh://product@backend.acme.org/db/{repo}\n production.monit.local = ~/devel/monitoring/{repo}\n production.monit.remote = ssh://product@monit.acme.org/{repo}\n\none can use ``.alias``::\n\n [path_pattern]\n production.local = ~/devel/web/{repo}\n production.remote = ssh://product@acme.org/www/{repo}\n dbproduction.db.local = ~/devel/database/{repo}\n dbproduction.db.remote = ssh://product@backend.acme.org/db/{repo}\n dbproduction.alias = production\n monproduction.local = ~/devel/monitoring/{repo}\n monproduction.remote = ssh://product@monit.acme.org/{repo}\n monproduction.alias = production\n\nBoth those syntaxes give meaning to ``hg push production`` in all matching\nrepositories.\n\n.. note::\n\n I keep supporting ``.alias`` syntax for backward compatibility (it\n was the initial syntax provided for the task) but it is more\n elaborate and less readable, so I don't recommend it anymore.\n\n\nPattern priority\n=======================================================\n\nIt is possible to write patterns so they *conflict* (more than one\ndefinition of some path exists). While not frequent, such approach has\nsometimes it's uses.\n\nPath aliases have the following priority:\n\n- enforced patterns (patterns with ``.enforce`` set),\n- per repo aliases (standard ``[paths]`` defined in ``.hg/hgrc``),\n- non-enforced patterns.\n\nSo, for example, with::\n\n [path_pattern]\n acme.local = ~/devel/{repo}\n acme.remote = ssh://johny@apps.mekk.net/code/{repo}\n acme.enforce = true\n acme.alt.local = ~/devel/libs/{repo}\n acme.alt.remote = ssh://johny@libs.mekk.net/{repo}\n\n(both patterns define the same alias ``acme``) executing ``hg push\nacme`` in ``~/devel/libs/calc`` will push to\n``ssh://johny@apps.mekk.net/code/libs/calc`` as enforced pattern wins\nover non-enforced one. The same will happen even if ``acme`` is\ndefined in per-repository ``.hg/hgrc`` (among standard ``[paths]``).\n\nIf more than one pattern of the same strength matches, extension tries\nit's best to pick one with more specific local path, for example if we\ndrop ``acme.enforce`` from the example above (or if we add\n``acme.alt.enforce``), executing ``hg push acme`` in\n``~/devel/libs/calc`` will push to ``ssh://johny@libs.mekk.net/calc``\nas more specific pattern wins.\n\n.. note::\n\n It's not always obvious which pattern is more specific (compare\n ``~/(klass)/libs/base`` with ``~/src/{repo}``). Current\n implementation looks for the length of non-varying prefix (so the\n latter will win over the former as ``~/src/`` is longer than\n ``~/``). If those are of equal length, pattern with more non-var characters wins,\n and finally, the one which happened last in the config file.\n\n Some details may change in the future, use ``enforce`` when in\n doubt (or let me know if numeric priority would be useful).\n\n\n\n\nTips and tricks\n=======================================================\n\n``default`` as path pattern\n--------------------------------------------------------\n\nYou can define ``default`` via path pattern if you wish::\n\n [path_pattern]\n default.hobby.local = ~/hobby/{repo}\n default.hobby.remote = ssh://hg@bitbucket.org/Johny/{below:/=-}\n default.wrk.local = ~/work/{what}\n default.wrk.remote = https://tim@devel-department.local/{what}\n\n(here in ``~/hobby`` I push to bitbucket by default, but in ``~/work``\nto department server).\n\n.. note::\n\n Mercurial will sooner or later define ``default`` path in\n per-repository ``.hg/hgrc`` files. Enforce your patterns\n (``default.hobby.enforce = true``) if you need to defeat those\n settings. Or don't, if you want those patterns for defaults only.\n\n\nSpecial treatment of specific repositories \n-------------------------------------------------------\n\nIt happens that some repository (or a few) *does not match* the\ngeneral rule. In such a case, one can simply overwrite given alias\non repository level, or use pattern priority.\n\nMy real example is `Keyring Extension`_ repository. While I generally\nuse dash (``-``) as path separator (so Path Pattern is located at\n``/Mekk/mercurial-path_pattern`` and `Dynamic Username`_ at\n``/Mekk/mercurial-dynamic_username``), keyring repo predates this\nconvention and is named ``/Mekk/mercurial_keyring``. So I solve this\nby::\n\n [path_pattern]\n # By default bitbucket mirrors my dir structure replacing / with -\n bbssh.local = ~/devel/{below}\n bbssh.remote = ssh://hg@bitbucket.org/Mekk/{below:/=-}\n # \u2026 but there are overrides\n bbssh.keyring.local = ~/devel/mercurial/keyring\n bbssh.keyring.remote = ssh://hg@bitbucket.org/Mekk/mercurial_keyring\n\nOf course I could achieve the same by defining ``bbssh`` among\n``[paths]`` in ``~/devel/mercurial/keyring/.hg/hgrc`` file, but pattern\ntechnique have some advantages:\n\n- as I share and sync snippet of my ``~/.hgrc`` between machines, \n this definition automatically propagates everywhere, and I don't need\n to remember about adding path to the new clone,\n\n- it leaves all paths in one place where I can review them together,\n\n- it can be expanded to whole subtree if necessary.\n\nKeeping non-standard remote paths as patterns\n-------------------------------------------------------\n\nThe same trick can be used for maintaining list of remotes.\nFor example here is my way to have ``hg pull official`` handy\nin various tracked repositories::\n\n [path_pattern]\n official.hgstable.local = ~/tracked/hg-stable\n official.hgstable.remote = http://selenic.com/repo/hg-stable\n official.thg.local = ~/tracked/tortoise-hg\n official.thg.remote = https://bitbucket.org/tortoisehg/thg/\n # \u2026\n\nOf course I could enter those paths directly inside ``.hg/hgrc``, but\nthose definitions can be synced between machines, and survive \nin case I discard the repo in charge for some time.\n\nSeparating (and sharing) pattern configuration\n---------------------------------------------------\n\nIn case the pattern list grows bigger, I recommend moving patterns\ninto the separate config file. For example, write in ``~/.hgrc``::\n\n %include ~/configs/mercurial/path_pattern.hgrc\n\nand then store all patterns in ``path_pattern.hgrc``::\n\n [path_pattern]\n \u2026\n\nExtra benefit of such approach is that it makes sharing the file\neasier (in my case ``~/configs/mercurial`` is by itself Mercurial\nrepository which I share over my various development machines, and\nwhich contains all non-machine specific snippets of my Mercurial\nconfiguration).\n\n\nInstallation\n=======================================================\n\nLinux/Unix (from PyPI)\n-------------------------------------------------------\n\nIf you have working ``pip`` or ``easy_install``::\n\n pip install --user mercurial_path_pattern\n\nor maybe::\n\n sudo pip install mercurial_path_pattern\n\n(or use ``easy_install`` instead of ``pip``). Then activate by::\n\n [extensions]\n mercurial_path_pattern =\n\nTo upgrade, repeat the same command with ``--upgrade`` option, for\nexample::\n\n pip install --user --upgrade mercurial_path_pattern\n\nLinux/Unix (from source)\n-------------------------------------------------------\n\nIf you don't have ``pip``, or wish to follow development more closely:\n\n- clone both this repository and `mercurial_extension_utils`_ and put\n them in the same directory, for example::\n\n cd ~/sources\n hg clone https://bitbucket.org/Mekk/mercurial-extension_utils/\n hg clone https://bitbucket.org/Mekk/mercurial-path_pattern/\n\n- update to newest tags,\n\n- activate by::\n\n [extensions]\n mercurial_path_pattern = ~/sources/mercurial-path_pattern/mercurial_path_pattern.py\n\nTo upgrade, pull and update.\n\nNote that directory names matter. See `mercurial_extension_utils`_ for\nlonger description of this kind of installation.\n\nWindows\n-------------------------------------------------------\n\nIf you have any Python installed, you may install with ``pip``::\n\n pip install mercurial_path_pattern\n\nStill, as Mercurial (whether taken from TortoiseHg_, or own package)\nuses it's own bundled Python, you must activate by specifying the path::\n\n [extensions]\n mercurial_path_pattern = C:/Python27/Lib/site-packages/mercurial_path_pattern.py\n ;; Or wherever pip installed it\n\nTo upgrade to new version::\n\n pip --upgrade mercurial_path_pattern\n\nIf you don't have any Python, clone repositories::\n\n cd c:\\hgplugins\n hg clone https://bitbucket.org/Mekk/mercurial-extension_utils/\n hg clone https://bitbucket.org/Mekk/mercurial-path_pattern/\n\nupdate to tagged versions and activate by path::\n\n [extensions]\n mercurial_path_pattern = C:/hgplugins/mercurial-path_pattern/mercurial_path_pattern.py\n ;; Or wherever you cloned\n\nSee `mercurial_extension_utils`_ documentation for more details on\nWindows installation. \n\n.. note::\n\n Directory names matter. If ``mercurial_path_pattern.py`` can't find\n ``mercurial_extension_utils.py`` in system path, it looks for it in\n its own directory, in ``../mercurial_extension_utils``, and in\n ``../extension_utils``.\n\n\nRelated extensions\n=======================================================\n\n`Schemes Extension`_, distributed together with Mercurial, makes it\npossible to simplify repository URLs. For example, you can write::\n\n hg clone bb://Mekk/mercurial-path_pattern\n\n(``bb`` is schemes alias expanding to BitBucket url).\n\nWhile both Path Pattern and Schemes are related to path management,\nthey target different habits. Schemes is particularly useful\nfor people making frequent ad-hoc clones, Path Pattern is about\nkeeping consistent synchronized repository hierarchies. With Schemes,\nurls you type are shorter and less error-prone, with Path Pattern\nyou don't type them at all as Mercurial guesses them for you.\n\nBoth can cooperate, schemes aliases can be used in pattern definitions::\n\n [path_pattern]\n bitb.local = ~/sources/{below}\n bitb.remote = bb://Mekk/{below:/=-}\n\nwill work (as long as schemes extension is enabled).\n\nHistory\n=======================================================\n\nSee `HISTORY.txt`_\n\nDevelopment, bug reports, enhancement suggestions\n=======================================================\n\nDevelopment is tracked on BitBucket, see \nhttps://bitbucket.org/Mekk/mercurial-path_pattern/\n\nUse BitBucket issue tracker for bug reports and enhancement\nsuggestions.\n\nAdditional notes\n=======================================================\n\nInformation about this extension is also available\non Mercurial Wiki: http://mercurial.selenic.com/wiki/PathPatternExtension\n\nCheck also `other Mercurial extensions I wrote`_.\n\n.. _other Mercurial extensions I wrote: http://mekk.bitbucket.io/mercurial.html\n\n\n.. _Mercurial: http://mercurial.selenic.com\n.. _HISTORY.txt: https://bitbucket.org/Mekk/mercurial-path_pattern/src/tip/HISTORY.txt\n.. _mercurial_extension_utils: https://bitbucket.org/Mekk/mercurial-extension_utils/\n.. _Schemes Extension: https://www.mercurial-scm.org/wiki/SchemesExtension\n.. _TortoiseHg: http://tortoisehg.bitbucket.org/\n.. _Keyring Extension: https://bitbucket.org/Mekk/mercurial_keyring/\n.. _Dynamic Username: https://bitbucket.org/Mekk/mercurial-dynamic_username/\n\n.. |drone-badge| \n image:: https://drone.io/bitbucket.org/Mekk/mercurial-path_pattern/status.png\n :target: https://drone.io/bitbucket.org/Mekk/mercurial-path_pattern/latest\n :align: middle\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://bitbucket.org/Mekk/mercurial-path_pattern", "keywords": "mercurial hg path alias", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "mercurial_path_pattern", "package_url": "https://pypi.org/project/mercurial_path_pattern/", "platform": "", "project_url": "https://pypi.org/project/mercurial_path_pattern/", "project_urls": { "Homepage": "http://bitbucket.org/Mekk/mercurial-path_pattern" }, "release_url": "https://pypi.org/project/mercurial_path_pattern/1.3.7/", "requires_dist": null, "requires_python": "", "summary": "Mercurial Path Pattern Extension", "version": "1.3.7" }, "last_serial": 4453004, "releases": { "0.6.0": [ { "comment_text": "", "digests": { "md5": "d6e83b83ba67b63f9ad44647d11f3be1", "sha256": "bc410d8f843e7b1c64262fc0a61ecce747376f974655bf85156cf61df6850716" }, "downloads": -1, "filename": "mercurial_path_pattern-0.6.0.tar.gz", "has_sig": false, "md5_digest": "d6e83b83ba67b63f9ad44647d11f3be1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7057, "upload_time": "2015-10-10T12:28:17", "url": "https://files.pythonhosted.org/packages/dd/3c/3489323bfc3a6c73f79a3259a7496f48d1692050fc25775cc4b9adbaf10b/mercurial_path_pattern-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "a9f46463cf8d1b220bd63d5d57249d54", "sha256": "baba9ff6dc1773ae1860f4a6d6e3972e94f71026e9327015717d50eb7917297d" }, "downloads": -1, "filename": "mercurial_path_pattern-0.6.1.tar.gz", "has_sig": false, "md5_digest": "a9f46463cf8d1b220bd63d5d57249d54", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7232, "upload_time": "2015-10-10T12:32:56", "url": "https://files.pythonhosted.org/packages/92/26/9b2611517dd745f8caf070171b4aec7155786a5f7877ff5dbe6266062527/mercurial_path_pattern-0.6.1.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "b10294dc9eb09125854b60aa5b673fd1", "sha256": "be62b2cc072b374049f6d04b0d056e8235a27270c26f43cfd95c0461aa5292e4" }, "downloads": -1, "filename": "mercurial_path_pattern-0.7.0.tar.gz", "has_sig": false, "md5_digest": "b10294dc9eb09125854b60aa5b673fd1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7843, "upload_time": "2015-10-11T14:36:15", "url": "https://files.pythonhosted.org/packages/f7/1f/251742ccf5e30d2ed759b599e25f62ca8410b53b9687703083c57bd6e214/mercurial_path_pattern-0.7.0.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "80b3029f3a4c5e5030e22df8f9d5286a", "sha256": "21040c03d8ef24622bb7f7f732c565f77902c4324076d66bb1062432f4dc9d66" }, "downloads": -1, "filename": "mercurial_path_pattern-0.8.0.tar.gz", "has_sig": false, "md5_digest": "80b3029f3a4c5e5030e22df8f9d5286a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7872, "upload_time": "2015-10-14T11:17:07", "url": "https://files.pythonhosted.org/packages/da/d8/d9248bed2e1e6bae1e4c1c403cebf6abe5960d71626e3e8fd80c2ec33b78/mercurial_path_pattern-0.8.0.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "ad24c09bd45d326af92a7dbefac791e5", "sha256": "9d35a4cf9f504c59eff2a6c7bdf4729140d0cc0d5e7ce5ed751b7585d767d10e" }, "downloads": -1, "filename": "mercurial_path_pattern-0.9.0.tar.gz", "has_sig": false, "md5_digest": "ad24c09bd45d326af92a7dbefac791e5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8526, "upload_time": "2015-10-14T21:35:34", "url": "https://files.pythonhosted.org/packages/a8/86/33378da0d7848916276f90d5ef873c7790e42354bc50c92f25daf401a0ae/mercurial_path_pattern-0.9.0.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "dec66108280a5e47461f9f93a48748bb", "sha256": "d1eaa1a48f28887772e3d59fc58f143e3e4579d7667d86ce1f51f26c4711fe08" }, "downloads": -1, "filename": "mercurial_path_pattern-1.0.0.tar.gz", "has_sig": false, "md5_digest": "dec66108280a5e47461f9f93a48748bb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11647, "upload_time": "2015-10-28T22:34:40", "url": "https://files.pythonhosted.org/packages/5e/3f/83a4b36cae053a2cc137f354b011c3e063fe2614dfafe3cd8482ce17dcc0/mercurial_path_pattern-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "87f528ad43644ae9aa52f49ce0ba7688", "sha256": "dcc845f6a5fce6628e512c6a478de8525d6d75b2affe30181d92a5a7893c72e7" }, "downloads": -1, "filename": "mercurial_path_pattern-1.1.0.tar.gz", "has_sig": false, "md5_digest": "87f528ad43644ae9aa52f49ce0ba7688", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14146, "upload_time": "2015-11-13T21:07:33", "url": "https://files.pythonhosted.org/packages/b8/3a/35d75e5cd52a89cd6b8d659effe48772010f6b692b28a03053cd71630c72/mercurial_path_pattern-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "4964e4cced93ce16d1c6b792ecf43674", "sha256": "4a1584e4a7e0ec2928971f200189cd5f2008c44c711ca61da9574ae3e57d9e43" }, "downloads": -1, "filename": "mercurial_path_pattern-1.1.1.tar.gz", "has_sig": false, "md5_digest": "4964e4cced93ce16d1c6b792ecf43674", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14098, "upload_time": "2015-12-05T22:38:40", "url": "https://files.pythonhosted.org/packages/a6/33/be512ced35578ee8b346fa5ea787922ce62ae044fdaad25dfb0ea67df00e/mercurial_path_pattern-1.1.1.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "8b499b74fb7d6c05539bffc35bc6e9c1", "sha256": "8fd2ac8b198cc8a7898385c66eb65d4cb321a0edd44f786ff4d956710301dbac" }, "downloads": -1, "filename": "mercurial_path_pattern-1.2.0.tar.gz", "has_sig": false, "md5_digest": "8b499b74fb7d6c05539bffc35bc6e9c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14117, "upload_time": "2016-03-09T23:51:59", "url": "https://files.pythonhosted.org/packages/e0/6b/eb8d93976e2a83f3bf290d18063d0b43201baf2040fbf76e1844a4e2f03a/mercurial_path_pattern-1.2.0.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "607c2ff128019e8fef0d0ae27f8f1c6f", "sha256": "8b7f322c089c96e027e52f854e77c3ef2668a345c07566ac40b245619fc73f7c" }, "downloads": -1, "filename": "mercurial_path_pattern-1.3.0.tar.gz", "has_sig": false, "md5_digest": "607c2ff128019e8fef0d0ae27f8f1c6f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15538, "upload_time": "2016-03-13T22:21:58", "url": "https://files.pythonhosted.org/packages/ae/a2/84e2c197f8ee92e51ce540b7d4263546679210756717d95182c047dd64d2/mercurial_path_pattern-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "bffd827f3176d5a462e7488790db29b1", "sha256": "d2e4ac2e91806fa59d9e53b8fcf7008587edcdff45349c54d9384b9a6ff44ecf" }, "downloads": -1, "filename": "mercurial_path_pattern-1.3.1.tar.gz", "has_sig": false, "md5_digest": "bffd827f3176d5a462e7488790db29b1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15548, "upload_time": "2016-11-13T11:30:47", "url": "https://files.pythonhosted.org/packages/9e/a1/0181ef851cd61f09d2753a6112cfc5d8a124ab90cf20c172f1f0b3c1e012/mercurial_path_pattern-1.3.1.tar.gz" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "b2920feceeba3ceee77377e1dbcedff9", "sha256": "fc561354fcbf9c569e3f7ec9412695a120537184f2daf049f17aaf13e0ad8d6f" }, "downloads": -1, "filename": "mercurial_path_pattern-1.3.2.tar.gz", "has_sig": false, "md5_digest": "b2920feceeba3ceee77377e1dbcedff9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15614, "upload_time": "2016-11-13T18:49:29", "url": "https://files.pythonhosted.org/packages/5e/ad/c681decee8501e04bd01fdc522b0050980cc346f2920747947c0280f589f/mercurial_path_pattern-1.3.2.tar.gz" } ], "1.3.3": [ { "comment_text": "", "digests": { "md5": "ec1316b5fc0fa600c21b4c2d43d6f1b0", "sha256": "b2d35a5e3792e5fca822599a471224f3bcf4c9a75a03f67e064a3688a5961bad" }, "downloads": -1, "filename": "mercurial_path_pattern-1.3.3.tar.gz", "has_sig": false, "md5_digest": "ec1316b5fc0fa600c21b4c2d43d6f1b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22010, "upload_time": "2017-05-18T14:53:56", "url": "https://files.pythonhosted.org/packages/d1/6d/c140b8e3863d0c41841febf570da99d4913430d43fe50822e2aea0b789b3/mercurial_path_pattern-1.3.3.tar.gz" } ], "1.3.4": [ { "comment_text": "", "digests": { "md5": "bccae77a96f801c5974569cd7ef45e65", "sha256": "e0671c98505eabf7b6750a75c8d5a0bf51d1396f4a6718080b2217f3d3ee535a" }, "downloads": -1, "filename": "mercurial_path_pattern-1.3.4.tar.gz", "has_sig": false, "md5_digest": "bccae77a96f801c5974569cd7ef45e65", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19697, "upload_time": "2018-05-25T23:17:20", "url": "https://files.pythonhosted.org/packages/0f/0d/6483e6e598f35b7752126cba00554337ecaba53c846e9c45ec2233c87ee1/mercurial_path_pattern-1.3.4.tar.gz" } ], "1.3.5": [ { "comment_text": "", "digests": { "md5": "3b9ec69e52f8bc4ead11d64b2cc57221", "sha256": "f61d691cc7951bd7f635632c82231450f24eb50fa93b7584a60f93fffdb7d5d3" }, "downloads": -1, "filename": "mercurial_path_pattern-1.3.5.tar.gz", "has_sig": false, "md5_digest": "3b9ec69e52f8bc4ead11d64b2cc57221", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19710, "upload_time": "2018-05-26T00:08:10", "url": "https://files.pythonhosted.org/packages/07/6c/5bac84af65165deb27f8a6e5222e8f8724be52f346004bb047b6c87ff70c/mercurial_path_pattern-1.3.5.tar.gz" } ], "1.3.6": [ { "comment_text": "", "digests": { "md5": "e658eb6fa79aa783606cd1c3a39ff96f", "sha256": "21d8e0b7d160c5da0840b7fd488c0e79195c1f4286d13ea3b6259ceec9a251ed" }, "downloads": -1, "filename": "mercurial_path_pattern-1.3.6.tar.gz", "has_sig": false, "md5_digest": "e658eb6fa79aa783606cd1c3a39ff96f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19706, "upload_time": "2018-08-03T21:25:22", "url": "https://files.pythonhosted.org/packages/28/15/21db2bfc3ada7256908ddc68bf5e60fa308d8cdec307c209956fc6f393d2/mercurial_path_pattern-1.3.6.tar.gz" } ], "1.3.7": [ { "comment_text": "", "digests": { "md5": "95ca351b951f44a73d9a81baf383203a", "sha256": "ed24c3f111e2dc6f938f133c4e654891eefe23a158357fffd0d6753309a02cff" }, "downloads": -1, "filename": "mercurial_path_pattern-1.3.7.tar.gz", "has_sig": false, "md5_digest": "95ca351b951f44a73d9a81baf383203a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22069, "upload_time": "2018-11-05T13:57:51", "url": "https://files.pythonhosted.org/packages/a6/7a/e2a91f2b3ba1d574245c4261176c89c494f3dc9a782ebc3217404ce7e308/mercurial_path_pattern-1.3.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "95ca351b951f44a73d9a81baf383203a", "sha256": "ed24c3f111e2dc6f938f133c4e654891eefe23a158357fffd0d6753309a02cff" }, "downloads": -1, "filename": "mercurial_path_pattern-1.3.7.tar.gz", "has_sig": false, "md5_digest": "95ca351b951f44a73d9a81baf383203a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22069, "upload_time": "2018-11-05T13:57:51", "url": "https://files.pythonhosted.org/packages/a6/7a/e2a91f2b3ba1d574245c4261176c89c494f3dc9a782ebc3217404ce7e308/mercurial_path_pattern-1.3.7.tar.gz" } ] }