===========================================================
                                      .___ __  __   
          _________________  __ __  __| _/|__|/  |_ 
         / ___\_` __ \__  \ |  |  \/ __ | | \\_  __\
        / /_/  >  | \// __ \|  |  / /_/ | |  ||  |  
        \___  /|__|  (____  /____/\____ | |__||__|  
       /_____/            \/           \/           
              grep rough audit - static analysis tool
                  v2.8 written by @Wireghoul
=================================[justanotherhacker.com]===
mercurial-5.5.2/tests/test-revset2.t-414-
mercurial-5.5.2/tests/test-revset2.t:415:  $ hg log -T '{rev}\n' -r `"$PYTHON" -c "print('+'.join(['0:1'] * 500))"`
mercurial-5.5.2/tests/test-revset2.t-416-  0
##############################################
mercurial-5.5.2/tests/test-revset2.t-421-
mercurial-5.5.2/tests/test-revset2.t:422:  $ hg log -T '{rev}\n' `"$PYTHON" -c "for i in range(500): print('-r 0::1 ')"`
mercurial-5.5.2/tests/test-revset2.t-423-  0
##############################################
mercurial-5.5.2/tests/test-pager.t-26-  $ hg ci -m 'add a'
mercurial-5.5.2/tests/test-pager.t:27:  $ for x in `"$PYTHON" $TESTDIR/seq.py 1 10`; do
mercurial-5.5.2/tests/test-pager.t-28-  >   echo a $x >> a
##############################################
mercurial-5.5.2/tests/test-push-race.t-76-  >         sleep 0.1;
mercurial-5.5.2/tests/test-push-race.t:77:  >         count=`expr $count - 1`;
mercurial-5.5.2/tests/test-push-race.t-78-  >         if [ $count -lt 0 ];
##############################################
mercurial-5.5.2/tests/test-push-race.t-93-  >         sleep 0.1;
mercurial-5.5.2/tests/test-push-race.t:94:  >         count=`expr $count - 1`;
mercurial-5.5.2/tests/test-push-race.t-95-  >         if [ $count -lt 0 ];
##############################################
mercurial-5.5.2/tests/test-rebase-base-flag.t-16-  $ rebasewithdag() {
mercurial-5.5.2/tests/test-rebase-base-flag.t:17:  >   N=`"$PYTHON" -c "print($N+1)"`
mercurial-5.5.2/tests/test-rebase-base-flag.t-18-  >   hg init repo$N && cd repo$N
##############################################
mercurial-5.5.2/tests/test-convert-svn-move.t-10-  $ SVNREPOPATH=`pwd`/svn-repo
mercurial-5.5.2/tests/test-convert-svn-move.t:11:  $ SVNREPOURL="`"$PYTHON" $TESTDIR/svnurlof.py \"$SVNREPOPATH\"`"
mercurial-5.5.2/tests/test-convert-svn-move.t-12-
##############################################
mercurial-5.5.2/tests/test-narrow-widen-no-ellipsis.t-238-  $ cd upstream
mercurial-5.5.2/tests/test-narrow-widen-no-ellipsis.t:239:  $ for x in `$TESTDIR/seq.py 0 10`
mercurial-5.5.2/tests/test-narrow-widen-no-ellipsis.t-240-  > do
##############################################
mercurial-5.5.2/tests/test-check-execute.t-3-  $ . "$TESTDIR/helpers-testrepo.sh"
mercurial-5.5.2/tests/test-check-execute.t:4:  $ cd "`dirname "$TESTDIR"`"
mercurial-5.5.2/tests/test-check-execute.t-5-
##############################################
mercurial-5.5.2/tests/test-check-pyflakes.t-13-  
mercurial-5.5.2/tests/test-check-pyflakes.t:14:  $ cd "`dirname "$TESTDIR"`"
mercurial-5.5.2/tests/test-check-pyflakes.t-15-
##############################################
mercurial-5.5.2/tests/test-sparse-revlog.t-13-
mercurial-5.5.2/tests/test-sparse-revlog.t:14:  $ expectedhash=`cat "$bundlepath".md5`
mercurial-5.5.2/tests/test-sparse-revlog.t-15-
##############################################
mercurial-5.5.2/tests/test-sparse-revlog.t-30-
mercurial-5.5.2/tests/test-sparse-revlog.t:31:  $ currenthash=`f -M "$bundlepath" | cut -d = -f 2`
mercurial-5.5.2/tests/test-sparse-revlog.t-32-  $ if [ "$currenthash" != "$expectedhash" ]; then
##############################################
mercurial-5.5.2/tests/phabricator/phabread-multi-drev.json-74-                "body": {
mercurial-5.5.2/tests/phabricator/phabread-multi-drev.json:75:                    "string": "{\"result\":{\"20443\":{\"id\":\"20443\",\"revisionID\":\"8207\",\"dateCreated\":\"1581964120\",\"dateModified\":\"1583327828\",\"sourceControlBaseRevision\":\"9b46270917348950e3fb1e73a5c9e46038065622\",\"sourceControlPath\":null,\"sourceControlSystem\":\"hg\",\"branch\":null,\"bookmark\":null,\"creationMethod\":\"commit\",\"description\":\"rHGa271ef1de08664a9ee4a286711681377875ca2a2\",\"unitStatus\":\"6\",\"lintStatus\":\"6\",\"changes\":[{\"id\":\"55598\",\"metadata\":{\"line:first\":1043,\"hash.effect\":\".HmDk8vnow9e\"},\"oldPath\":\"hgext\\/phabricator.py\",\"currentPath\":\"hgext\\/phabricator.py\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"7\",\"delLines\":\"4\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"1799\",\"newLength\":\"1802\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\" # phabricator.py - simple Phabricator integration\\n #\\n # Copyright 2017 Facebook, Inc.\\n #\\n # This software may be used and distributed according to the terms of the\\n # GNU General Public License version 2 or any later version.\\n \\\"\\\"\\\"simple Phabricator integration (EXPERIMENTAL)\\n \\n This extension provides a ``phabsend`` command which sends a stack of\\n changesets to Phabricator, and a ``phabread`` command which prints a stack of\\n revisions in a format suitable for :hg:`import`, and a ``phabupdate`` command\\n to update statuses in batch.\\n \\n A \\\"phabstatus\\\" view for :hg:`show` is also provided; it displays status\\n information of Phabricator differentials associated with unfinished\\n changesets.\\n \\n By default, Phabricator requires ``Test Plan`` which might prevent some\\n changeset from being sent. The requirement could be disabled by changing\\n ``differential.require-test-plan-field`` config server side.\\n \\n Config::\\n \\n     [phabricator]\\n     # Phabricator URL\\n     url = https:\\/\\/phab.example.com\\/\\n \\n     # Repo callsign. If a repo has a URL https:\\/\\/$HOST\\/diffusion\\/FOO, then its\\n     # callsign is \\\"FOO\\\".\\n     callsign = FOO\\n \\n     # curl command to use. If not set (default), use builtin HTTP library to\\n     # communicate. If set, use the specified curl command. This could be useful\\n     # if you need to specify advanced options that is not easily supported by\\n     # the internal library.\\n     curlcmd = curl --connect-timeout 2 --retry 3 --silent\\n \\n     [auth]\\n     example.schemes = https\\n     example.prefix = phab.example.com\\n \\n     # API token. Get it from https:\\/\\/$HOST\\/conduit\\/login\\/\\n     example.phabtoken = cli-xxxxxxxxxxxxxxxxxxxxxxxxxxxx\\n \\\"\\\"\\\"\\n \\n from __future__ import absolute_import\\n \\n import base64\\n import contextlib\\n import hashlib\\n import itertools\\n import json\\n import mimetypes\\n import operator\\n import re\\n \\n from mercurial.node import bin, nullid\\n from mercurial.i18n import _\\n from mercurial.pycompat import getattr\\n from mercurial.thirdparty import attr\\n from mercurial import (\\n     cmdutil,\\n     context,\\n     encoding,\\n     error,\\n     exthelper,\\n     graphmod,\\n     httpconnection as httpconnectionmod,\\n     localrepo,\\n     logcmdutil,\\n     match,\\n     mdiff,\\n     obsutil,\\n     parser,\\n     patch,\\n     phases,\\n     pycompat,\\n     scmutil,\\n     smartset,\\n     tags,\\n     templatefilters,\\n     templateutil,\\n     url as urlmod,\\n     util,\\n )\\n from mercurial.utils import (\\n     procutil,\\n     stringutil,\\n )\\n from . import show\\n \\n \\n # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for\\n # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should\\n # be specifying the version(s) of Mercurial they are tested with, or\\n # leave the attribute unspecified.\\n testedwith = b'ships-with-hg-core'\\n \\n eh = exthelper.exthelper()\\n \\n cmdtable = eh.cmdtable\\n command = eh.command\\n configtable = eh.configtable\\n templatekeyword = eh.templatekeyword\\n uisetup = eh.finaluisetup\\n \\n # developer config: phabricator.batchsize\\n eh.configitem(\\n     b'phabricator', b'batchsize', default=12,\\n )\\n eh.configitem(\\n     b'phabricator', b'callsign', default=None,\\n )\\n eh.configitem(\\n     b'phabricator', b'curlcmd', default=None,\\n )\\n # developer config: phabricator.repophid\\n eh.configitem(\\n     b'phabricator', b'repophid', default=None,\\n )\\n eh.configitem(\\n     b'phabricator', b'url', default=None,\\n )\\n eh.configitem(\\n     b'phabsend', b'confirm', default=False,\\n )\\n \\n colortable = {\\n     b'phabricator.action.created': b'green',\\n     b'phabricator.action.skipped': b'magenta',\\n     b'phabricator.action.updated': b'magenta',\\n     b'phabricator.desc': b'',\\n     b'phabricator.drev': b'bold',\\n     b'phabricator.node': b'',\\n     b'phabricator.status.abandoned': b'magenta dim',\\n     b'phabricator.status.accepted': b'green bold',\\n     b'phabricator.status.closed': b'green',\\n     b'phabricator.status.needsreview': b'yellow',\\n     b'phabricator.status.needsrevision': b'red',\\n     b'phabricator.status.changesplanned': b'red',\\n }\\n \\n _VCR_FLAGS = [\\n     (\\n         b'',\\n         b'test-vcr',\\n         b'',\\n         _(\\n             b'Path to a vcr file. If nonexistent, will record a new vcr transcript'\\n             b', otherwise will mock all http requests using the specified vcr file.'\\n             b' (ADVANCED)'\\n         ),\\n     ),\\n ]\\n \\n \\n @eh.wrapfunction(localrepo, \\\"loadhgrc\\\")\\n def _loadhgrc(orig, ui, wdirvfs, hgvfs, requirements):\\n     \\\"\\\"\\\"Load ``.arcconfig`` content into a ui instance on repository open.\\n     \\\"\\\"\\\"\\n     result = False\\n     arcconfig = {}\\n \\n     try:\\n         # json.loads only accepts bytes from 3.6+\\n         rawparams = encoding.unifromlocal(wdirvfs.read(b\\\".arcconfig\\\"))\\n         # json.loads only returns unicode strings\\n         arcconfig = pycompat.rapply(\\n             lambda x: encoding.unitolocal(x)\\n             if isinstance(x, pycompat.unicode)\\n             else x,\\n             pycompat.json_loads(rawparams),\\n         )\\n \\n         result = True\\n     except ValueError:\\n         ui.warn(_(b\\\"invalid JSON in %s\\\\n\\\") % wdirvfs.join(b\\\".arcconfig\\\"))\\n     except IOError:\\n         pass\\n \\n     cfg = util.sortdict()\\n \\n     if b\\\"repository.callsign\\\" in arcconfig:\\n         cfg[(b\\\"phabricator\\\", b\\\"callsign\\\")] = arcconfig[b\\\"repository.callsign\\\"]\\n \\n     if b\\\"phabricator.uri\\\" in arcconfig:\\n         cfg[(b\\\"phabricator\\\", b\\\"url\\\")] = arcconfig[b\\\"phabricator.uri\\\"]\\n \\n     if cfg:\\n         ui.applyconfig(cfg, source=wdirvfs.join(b\\\".arcconfig\\\"))\\n \\n     return orig(ui, wdirvfs, hgvfs, requirements) or result  # Load .hg\\/hgrc\\n \\n \\n def vcrcommand(name, flags, spec, helpcategory=None, optionalrepo=False):\\n     fullflags = flags + _VCR_FLAGS\\n \\n     def hgmatcher(r1, r2):\\n         if r1.uri != r2.uri or r1.method != r2.method:\\n             return False\\n         r1params = util.urlreq.parseqs(r1.body)\\n         r2params = util.urlreq.parseqs(r2.body)\\n         for key in r1params:\\n             if key not in r2params:\\n                 return False\\n             value = r1params[key][0]\\n             # we want to compare json payloads without worrying about ordering\\n             if value.startswith(b'{') and value.endswith(b'}'):\\n                 r1json = pycompat.json_loads(value)\\n                 r2json = pycompat.json_loads(r2params[key][0])\\n                 if r1json != r2json:\\n                     return False\\n             elif r2params[key][0] != value:\\n                 return False\\n         return True\\n \\n     def sanitiserequest(request):\\n         request.body = re.sub(\\n             br'cli-[a-z0-9]+', br'cli-hahayouwish', request.body\\n         )\\n         return request\\n \\n     def sanitiseresponse(response):\\n         if 'set-cookie' in response['headers']:\\n             del response['headers']['set-cookie']\\n         return response\\n \\n     def decorate(fn):\\n         def inner(*args, **kwargs):\\n             cassette = pycompat.fsdecode(kwargs.pop('test_vcr', None))\\n             if cassette:\\n                 import hgdemandimport\\n \\n                 with hgdemandimport.deactivated():\\n                     import vcr as vcrmod\\n                     import vcr.stubs as stubs\\n \\n                     vcr = vcrmod.VCR(\\n                         serializer='json',\\n                         before_record_request=sanitiserequest,\\n                         before_record_response=sanitiseresponse,\\n                         custom_patches=[\\n                             (\\n                                 urlmod,\\n                                 'httpconnection',\\n                                 stubs.VCRHTTPConnection,\\n                             ),\\n                             (\\n                                 urlmod,\\n                                 'httpsconnection',\\n                                 stubs.VCRHTTPSConnection,\\n                             ),\\n                         ],\\n                     )\\n                     vcr.register_matcher('hgmatcher', hgmatcher)\\n                     with vcr.use_cassette(cassette, match_on=['hgmatcher']):\\n                         return fn(*args, **kwargs)\\n             return fn(*args, **kwargs)\\n \\n         inner.__name__ = fn.__name__\\n         inner.__doc__ = fn.__doc__\\n         return command(\\n             name,\\n             fullflags,\\n             spec,\\n             helpcategory=helpcategory,\\n             optionalrepo=optionalrepo,\\n         )(inner)\\n \\n     return decorate\\n \\n \\n def urlencodenested(params):\\n     \\\"\\\"\\\"like urlencode, but works with nested parameters.\\n \\n     For example, if params is {'a': ['b', 'c'], 'd': {'e': 'f'}}, it will be\\n     flattened to {'a[0]': 'b', 'a[1]': 'c', 'd[e]': 'f'} and then passed to\\n     urlencode. Note: the encoding is consistent with PHP's http_build_query.\\n     \\\"\\\"\\\"\\n     flatparams = util.sortdict()\\n \\n     def process(prefix, obj):\\n         if isinstance(obj, bool):\\n             obj = {True: b'true', False: b'false'}[obj]  # Python -\\u003e PHP form\\n         lister = lambda l: [(b'%d' % k, v) for k, v in enumerate(l)]\\n         items = {list: lister, dict: lambda x: x.items()}.get(type(obj))\\n         if items is None:\\n             flatparams[prefix] = obj\\n         else:\\n             for k, v in items(obj):\\n                 if prefix:\\n                     process(b'%s[%s]' % (prefix, k), v)\\n                 else:\\n                     process(k, v)\\n \\n     process(b'', params)\\n     return util.urlreq.urlencode(flatparams)\\n \\n \\n def readurltoken(ui):\\n     \\\"\\\"\\\"return conduit url, token and make sure they exist\\n \\n     Currently read from [auth] config section. In the future, it might\\n     make sense to read from .arcconfig and .arcrc as well.\\n     \\\"\\\"\\\"\\n     url = ui.config(b'phabricator', b'url')\\n     if not url:\\n         raise error.Abort(\\n             _(b'config %s.%s is required') % (b'phabricator', b'url')\\n         )\\n \\n     res = httpconnectionmod.readauthforuri(ui, url, util.url(url).user)\\n     token = None\\n \\n     if res:\\n         group, auth = res\\n \\n         ui.debug(b\\\"using auth.%s.* for authentication\\\\n\\\" % group)\\n \\n         token = auth.get(b'phabtoken')\\n \\n     if not token:\\n         raise error.Abort(\\n             _(b'Can\\\\'t find conduit token associated to %s') % (url,)\\n         )\\n \\n     return url, token\\n \\n \\n def callconduit(ui, name, params):\\n     \\\"\\\"\\\"call Conduit API, params is a dict. return json.loads result, or None\\\"\\\"\\\"\\n     host, token = readurltoken(ui)\\n     url, authinfo = util.url(b'\\/'.join([host, b'api', name])).authinfo()\\n     ui.debug(b'Conduit Call: %s %s\\\\n' % (url, pycompat.byterepr(params)))\\n     params = params.copy()\\n     params[b'__conduit__'] = {\\n         b'token': token,\\n     }\\n     rawdata = {\\n         b'params': templatefilters.json(params),\\n         b'output': b'json',\\n         b'__conduit__': 1,\\n     }\\n     data = urlencodenested(rawdata)\\n     curlcmd = ui.config(b'phabricator', b'curlcmd')\\n     if curlcmd:\\n         sin, sout = procutil.popen2(\\n             b'%s -d @- %s' % (curlcmd, procutil.shellquote(url))\\n         )\\n         sin.write(data)\\n         sin.close()\\n         body = sout.read()\\n     else:\\n         urlopener = urlmod.opener(ui, authinfo)\\n         request = util.urlreq.request(pycompat.strurl(url), data=data)\\n         with contextlib.closing(urlopener.open(request)) as rsp:\\n             body = rsp.read()\\n     ui.debug(b'Conduit Response: %s\\\\n' % body)\\n     parsed = pycompat.rapply(\\n         lambda x: encoding.unitolocal(x)\\n         if isinstance(x, pycompat.unicode)\\n         else x,\\n         # json.loads only accepts bytes from py3.6+\\n         pycompat.json_loads(encoding.unifromlocal(body)),\\n     )\\n     if parsed.get(b'error_code'):\\n         msg = _(b'Conduit Error (%s): %s') % (\\n             parsed[b'error_code'],\\n             parsed[b'error_info'],\\n         )\\n         raise error.Abort(msg)\\n     return parsed[b'result']\\n \\n \\n @vcrcommand(b'debugcallconduit', [], _(b'METHOD'), optionalrepo=True)\\n def debugcallconduit(ui, repo, name):\\n     \\\"\\\"\\\"call Conduit API\\n \\n     Call parameters are read from stdin as a JSON blob. Result will be written\\n     to stdout as a JSON blob.\\n     \\\"\\\"\\\"\\n     # json.loads only accepts bytes from 3.6+\\n     rawparams = encoding.unifromlocal(ui.fin.read())\\n     # json.loads only returns unicode strings\\n     params = pycompat.rapply(\\n         lambda x: encoding.unitolocal(x)\\n         if isinstance(x, pycompat.unicode)\\n         else x,\\n         pycompat.json_loads(rawparams),\\n     )\\n     # json.dumps only accepts unicode strings\\n     result = pycompat.rapply(\\n         lambda x: encoding.unifromlocal(x) if isinstance(x, bytes) else x,\\n         callconduit(ui, name, params),\\n     )\\n     s = json.dumps(result, sort_keys=True, indent=2, separators=(u',', u': '))\\n     ui.write(b'%s\\\\n' % encoding.unitolocal(s))\\n \\n \\n def getrepophid(repo):\\n     \\\"\\\"\\\"given callsign, return repository PHID or None\\\"\\\"\\\"\\n     # developer config: phabricator.repophid\\n     repophid = repo.ui.config(b'phabricator', b'repophid')\\n     if repophid:\\n         return repophid\\n     callsign = repo.ui.config(b'phabricator', b'callsign')\\n     if not callsign:\\n         return None\\n     query = callconduit(\\n         repo.ui,\\n         b'diffusion.repository.search',\\n         {b'constraints': {b'callsigns': [callsign]}},\\n     )\\n     if len(query[b'data']) == 0:\\n         return None\\n     repophid = query[b'data'][0][b'phid']\\n     repo.ui.setconfig(b'phabricator', b'repophid', repophid)\\n     return repophid\\n \\n \\n _differentialrevisiontagre = re.compile(br'\\\\AD([1-9][0-9]*)\\\\Z')\\n _differentialrevisiondescre = re.compile(\\n     br'^Differential Revision:\\\\s*(?P\\u003curl\\u003e(?:.*)D(?P\\u003cid\\u003e[1-9][0-9]*))$', re.M\\n )\\n \\n \\n def getoldnodedrevmap(repo, nodelist):\\n     \\\"\\\"\\\"find previous nodes that has been sent to Phabricator\\n \\n     return {node: (oldnode, Differential diff, Differential Revision ID)}\\n     for node in nodelist with known previous sent versions, or associated\\n     Differential Revision IDs. ``oldnode`` and ``Differential diff`` could\\n     be ``None``.\\n \\n     Examines commit messages like \\\"Differential Revision:\\\" to get the\\n     association information.\\n \\n     If such commit message line is not found, examines all precursors and their\\n     tags. Tags with format like \\\"D1234\\\" are considered a match and the node\\n     with that tag, and the number after \\\"D\\\" (ex. 1234) will be returned.\\n \\n     The ``old node``, if not None, is guaranteed to be the last diff of\\n     corresponding Differential Revision, and exist in the repo.\\n     \\\"\\\"\\\"\\n     unfi = repo.unfiltered()\\n     has_node = unfi.changelog.index.has_node\\n \\n     result = {}  # {node: (oldnode?, lastdiff?, drev)}\\n     toconfirm = {}  # {node: (force, {precnode}, drev)}\\n     for node in nodelist:\\n         ctx = unfi[node]\\n         # For tags like \\\"D123\\\", put them into \\\"toconfirm\\\" to verify later\\n         precnodes = list(obsutil.allpredecessors(unfi.obsstore, [node]))\\n         for n in precnodes:\\n             if has_node(n):\\n                 for tag in unfi.nodetags(n):\\n                     m = _differentialrevisiontagre.match(tag)\\n                     if m:\\n                         toconfirm[node] = (0, set(precnodes), int(m.group(1)))\\n                         break\\n                 else:\\n                     continue  # move to next predecessor\\n                 break  # found a tag, stop\\n         else:\\n             # Check commit message\\n             m = _differentialrevisiondescre.search(ctx.description())\\n             if m:\\n                 toconfirm[node] = (1, set(precnodes), int(m.group('id')))\\n \\n     # Double check if tags are genuine by collecting all old nodes from\\n     # Phabricator, and expect precursors overlap with it.\\n     if toconfirm:\\n         drevs = [drev for force, precs, drev in toconfirm.values()]\\n         alldiffs = callconduit(\\n             unfi.ui, b'differential.querydiffs', {b'revisionIDs': drevs}\\n         )\\n         getnode = lambda d: bin(getdiffmeta(d).get(b'node', b'')) or None\\n         for newnode, (force, precset, drev) in toconfirm.items():\\n             diffs = [\\n                 d for d in alldiffs.values() if int(d[b'revisionID']) == drev\\n             ]\\n \\n             # \\\"precursors\\\" as known by Phabricator\\n             phprecset = set(getnode(d) for d in diffs)\\n \\n             # Ignore if precursors (Phabricator and local repo) do not overlap,\\n             # and force is not set (when commit message says nothing)\\n             if not force and not bool(phprecset & precset):\\n                 tagname = b'D%d' % drev\\n                 tags.tag(\\n                     repo,\\n                     tagname,\\n                     nullid,\\n                     message=None,\\n                     user=None,\\n                     date=None,\\n                     local=True,\\n                 )\\n                 unfi.ui.warn(\\n                     _(\\n                         b'D%d: local tag removed - does not match '\\n                         b'Differential history\\\\n'\\n                     )\\n                     % drev\\n                 )\\n                 continue\\n \\n             # Find the last node using Phabricator metadata, and make sure it\\n             # exists in the repo\\n             oldnode = lastdiff = None\\n             if diffs:\\n                 lastdiff = max(diffs, key=lambda d: int(d[b'id']))\\n                 oldnode = getnode(lastdiff)\\n                 if oldnode and not has_node(oldnode):\\n                     oldnode = None\\n \\n             result[newnode] = (oldnode, lastdiff, drev)\\n \\n     return result\\n \\n \\n def getdrevmap(repo, revs):\\n     \\\"\\\"\\\"Return a dict mapping each rev in `revs` to their Differential Revision\\n     ID or None.\\n     \\\"\\\"\\\"\\n     result = {}\\n     for rev in revs:\\n         result[rev] = None\\n         ctx = repo[rev]\\n         # Check commit message\\n         m = _differentialrevisiondescre.search(ctx.description())\\n         if m:\\n             result[rev] = int(m.group('id'))\\n             continue\\n         # Check tags\\n         for tag in repo.nodetags(ctx.node()):\\n             m = _differentialrevisiontagre.match(tag)\\n             if m:\\n                 result[rev] = int(m.group(1))\\n                 break\\n \\n     return result\\n \\n \\n def getdiff(ctx, diffopts):\\n     \\\"\\\"\\\"plain-text diff without header (user, commit message, etc)\\\"\\\"\\\"\\n     output = util.stringio()\\n     for chunk, _label in patch.diffui(\\n         ctx.repo(), ctx.p1().node(), ctx.node(), None, opts=diffopts\\n     ):\\n         output.write(chunk)\\n     return output.getvalue()\\n \\n \\n class DiffChangeType(object):\\n     ADD = 1\\n     CHANGE = 2\\n     DELETE = 3\\n     MOVE_AWAY = 4\\n     COPY_AWAY = 5\\n     MOVE_HERE = 6\\n     COPY_HERE = 7\\n     MULTICOPY = 8\\n \\n \\n class DiffFileType(object):\\n     TEXT = 1\\n     IMAGE = 2\\n     BINARY = 3\\n \\n \\n @attr.s\\n class phabhunk(dict):\\n     \\\"\\\"\\\"Represents a Differential hunk, which is owned by a Differential change\\n     \\\"\\\"\\\"\\n \\n     oldOffset = attr.ib(default=0)  # camelcase-required\\n     oldLength = attr.ib(default=0)  # camelcase-required\\n     newOffset = attr.ib(default=0)  # camelcase-required\\n     newLength = attr.ib(default=0)  # camelcase-required\\n     corpus = attr.ib(default='')\\n     # These get added to the phabchange's equivalents\\n     addLines = attr.ib(default=0)  # camelcase-required\\n     delLines = attr.ib(default=0)  # camelcase-required\\n \\n \\n @attr.s\\n class phabchange(object):\\n     \\\"\\\"\\\"Represents a Differential change, owns Differential hunks and owned by a\\n     Differential diff.  Each one represents one file in a diff.\\n     \\\"\\\"\\\"\\n \\n     currentPath = attr.ib(default=None)  # camelcase-required\\n     oldPath = attr.ib(default=None)  # camelcase-required\\n     awayPaths = attr.ib(default=attr.Factory(list))  # camelcase-required\\n     metadata = attr.ib(default=attr.Factory(dict))\\n     oldProperties = attr.ib(default=attr.Factory(dict))  # camelcase-required\\n     newProperties = attr.ib(default=attr.Factory(dict))  # camelcase-required\\n     type = attr.ib(default=DiffChangeType.CHANGE)\\n     fileType = attr.ib(default=DiffFileType.TEXT)  # camelcase-required\\n     commitHash = attr.ib(default=None)  # camelcase-required\\n     addLines = attr.ib(default=0)  # camelcase-required\\n     delLines = attr.ib(default=0)  # camelcase-required\\n     hunks = attr.ib(default=attr.Factory(list))\\n \\n     def copynewmetadatatoold(self):\\n         for key in list(self.metadata.keys()):\\n             newkey = key.replace(b'new:', b'old:')\\n             self.metadata[newkey] = self.metadata[key]\\n \\n     def addoldmode(self, value):\\n         self.oldProperties[b'unix:filemode'] = value\\n \\n     def addnewmode(self, value):\\n         self.newProperties[b'unix:filemode'] = value\\n \\n     def addhunk(self, hunk):\\n         if not isinstance(hunk, phabhunk):\\n             raise error.Abort(b'phabchange.addhunk only takes phabhunks')\\n         self.hunks.append(pycompat.byteskwargs(attr.asdict(hunk)))\\n         # It's useful to include these stats since the Phab web UI shows them,\\n         # and uses them to estimate how large a change a Revision is. Also used\\n         # in email subjects for the [+++--] bit.\\n         self.addLines += hunk.addLines\\n         self.delLines += hunk.delLines\\n \\n \\n @attr.s\\n class phabdiff(object):\\n     \\\"\\\"\\\"Represents a Differential diff, owns Differential changes.  Corresponds\\n     to a commit.\\n     \\\"\\\"\\\"\\n \\n     # Doesn't seem to be any reason to send this (output of uname -n)\\n     sourceMachine = attr.ib(default=b'')  # camelcase-required\\n     sourcePath = attr.ib(default=b'\\/')  # camelcase-required\\n     sourceControlBaseRevision = attr.ib(default=b'0' * 40)  # camelcase-required\\n     sourceControlPath = attr.ib(default=b'\\/')  # camelcase-required\\n     sourceControlSystem = attr.ib(default=b'hg')  # camelcase-required\\n     branch = attr.ib(default=b'default')\\n     bookmark = attr.ib(default=None)\\n     creationMethod = attr.ib(default=b'phabsend')  # camelcase-required\\n     lintStatus = attr.ib(default=b'none')  # camelcase-required\\n     unitStatus = attr.ib(default=b'none')  # camelcase-required\\n     changes = attr.ib(default=attr.Factory(dict))\\n     repositoryPHID = attr.ib(default=None)  # camelcase-required\\n \\n     def addchange(self, change):\\n         if not isinstance(change, phabchange):\\n             raise error.Abort(b'phabdiff.addchange only takes phabchanges')\\n         self.changes[change.currentPath] = pycompat.byteskwargs(\\n             attr.asdict(change)\\n         )\\n \\n \\n def maketext(pchange, ctx, fname):\\n     \\\"\\\"\\\"populate the phabchange for a text file\\\"\\\"\\\"\\n     repo = ctx.repo()\\n     fmatcher = match.exact([fname])\\n     diffopts = mdiff.diffopts(git=True, context=32767)\\n     _pfctx, _fctx, header, fhunks = next(\\n         patch.diffhunks(repo, ctx.p1(), ctx, fmatcher, opts=diffopts)\\n     )\\n \\n     for fhunk in fhunks:\\n         (oldOffset, oldLength, newOffset, newLength), lines = fhunk\\n         corpus = b''.join(lines[1:])\\n         shunk = list(header)\\n         shunk.extend(lines)\\n         _mf, _mt, addLines, delLines, _hb = patch.diffstatsum(\\n             patch.diffstatdata(util.iterlines(shunk))\\n         )\\n         pchange.addhunk(\\n             phabhunk(\\n                 oldOffset,\\n                 oldLength,\\n                 newOffset,\\n                 newLength,\\n                 corpus,\\n                 addLines,\\n                 delLines,\\n             )\\n         )\\n \\n \\n def uploadchunks(fctx, fphid):\\n     \\\"\\\"\\\"upload large binary files as separate chunks.\\n     Phab requests chunking over 8MiB, and splits into 4MiB chunks\\n     \\\"\\\"\\\"\\n     ui = fctx.repo().ui\\n     chunks = callconduit(ui, b'file.querychunks', {b'filePHID': fphid})\\n     with ui.makeprogress(\\n         _(b'uploading file chunks'), unit=_(b'chunks'), total=len(chunks)\\n     ) as progress:\\n         for chunk in chunks:\\n             progress.increment()\\n             if chunk[b'complete']:\\n                 continue\\n             bstart = int(chunk[b'byteStart'])\\n             bend = int(chunk[b'byteEnd'])\\n             callconduit(\\n                 ui,\\n                 b'file.uploadchunk',\\n                 {\\n                     b'filePHID': fphid,\\n                     b'byteStart': bstart,\\n                     b'data': base64.b64encode(fctx.data()[bstart:bend]),\\n                     b'dataEncoding': b'base64',\\n                 },\\n             )\\n \\n \\n def uploadfile(fctx):\\n     \\\"\\\"\\\"upload binary files to Phabricator\\\"\\\"\\\"\\n     repo = fctx.repo()\\n     ui = repo.ui\\n     fname = fctx.path()\\n     size = fctx.size()\\n     fhash = pycompat.bytestr(hashlib.sha256(fctx.data()).hexdigest())\\n \\n     # an allocate call is required first to see if an upload is even required\\n     # (Phab might already have it) and to determine if chunking is needed\\n     allocateparams = {\\n         b'name': fname,\\n         b'contentLength': size,\\n         b'contentHash': fhash,\\n     }\\n     filealloc = callconduit(ui, b'file.allocate', allocateparams)\\n     fphid = filealloc[b'filePHID']\\n \\n     if filealloc[b'upload']:\\n         ui.write(_(b'uploading %s\\\\n') % bytes(fctx))\\n         if not fphid:\\n             uploadparams = {\\n                 b'name': fname,\\n                 b'data_base64': base64.b64encode(fctx.data()),\\n             }\\n             fphid = callconduit(ui, b'file.upload', uploadparams)\\n         else:\\n             uploadchunks(fctx, fphid)\\n     else:\\n         ui.debug(b'server already has %s\\\\n' % bytes(fctx))\\n \\n     if not fphid:\\n         raise error.Abort(b'Upload of %s failed.' % bytes(fctx))\\n \\n     return fphid\\n \\n \\n def addoldbinary(pchange, fctx):\\n     \\\"\\\"\\\"add the metadata for the previous version of a binary file to the\\n     phabchange for the new version\\n     \\\"\\\"\\\"\\n     oldfctx = fctx.p1()\\n     if fctx.cmp(oldfctx):\\n         # Files differ, add the old one\\n         pchange.metadata[b'old:file:size'] = oldfctx.size()\\n         mimeguess, _enc = mimetypes.guess_type(\\n             encoding.unifromlocal(oldfctx.path())\\n         )\\n         if mimeguess:\\n             pchange.metadata[b'old:file:mime-type'] = pycompat.bytestr(\\n                 mimeguess\\n             )\\n         fphid = uploadfile(oldfctx)\\n         pchange.metadata[b'old:binary-phid'] = fphid\\n     else:\\n         # If it's left as IMAGE\\/BINARY web UI might try to display it\\n         pchange.fileType = DiffFileType.TEXT\\n         pchange.copynewmetadatatoold()\\n \\n \\n def makebinary(pchange, fctx):\\n     \\\"\\\"\\\"populate the phabchange for a binary file\\\"\\\"\\\"\\n     pchange.fileType = DiffFileType.BINARY\\n     fphid = uploadfile(fctx)\\n     pchange.metadata[b'new:binary-phid'] = fphid\\n     pchange.metadata[b'new:file:size'] = fctx.size()\\n     mimeguess, _enc = mimetypes.guess_type(encoding.unifromlocal(fctx.path()))\\n     if mimeguess:\\n         mimeguess = pycompat.bytestr(mimeguess)\\n         pchange.metadata[b'new:file:mime-type'] = mimeguess\\n         if mimeguess.startswith(b'image\\/'):\\n             pchange.fileType = DiffFileType.IMAGE\\n \\n \\n # Copied from mercurial\\/patch.py\\n gitmode = {b'l': b'120000', b'x': b'100755', b'': b'100644'}\\n \\n \\n def notutf8(fctx):\\n     \\\"\\\"\\\"detect non-UTF-8 text files since Phabricator requires them to be marked\\n     as binary\\n     \\\"\\\"\\\"\\n     try:\\n         fctx.data().decode('utf-8')\\n         if fctx.parents():\\n             fctx.p1().data().decode('utf-8')\\n         return False\\n     except UnicodeDecodeError:\\n         fctx.repo().ui.write(\\n             _(b'file %s detected as non-UTF-8, marked as binary\\\\n')\\n             % fctx.path()\\n         )\\n         return True\\n \\n \\n def addremoved(pdiff, ctx, removed):\\n     \\\"\\\"\\\"add removed files to the phabdiff. Shouldn't include moves\\\"\\\"\\\"\\n     for fname in removed:\\n         pchange = phabchange(\\n             currentPath=fname, oldPath=fname, type=DiffChangeType.DELETE\\n         )\\n         pchange.addoldmode(gitmode[ctx.p1()[fname].flags()])\\n         fctx = ctx.p1()[fname]\\n         if not (fctx.isbinary() or notutf8(fctx)):\\n             maketext(pchange, ctx, fname)\\n \\n         pdiff.addchange(pchange)\\n \\n \\n def addmodified(pdiff, ctx, modified):\\n     \\\"\\\"\\\"add modified files to the phabdiff\\\"\\\"\\\"\\n     for fname in modified:\\n         fctx = ctx[fname]\\n         pchange = phabchange(currentPath=fname, oldPath=fname)\\n         filemode = gitmode[ctx[fname].flags()]\\n         originalmode = gitmode[ctx.p1()[fname].flags()]\\n         if filemode != originalmode:\\n             pchange.addoldmode(originalmode)\\n             pchange.addnewmode(filemode)\\n \\n         if fctx.isbinary() or notutf8(fctx):\\n             makebinary(pchange, fctx)\\n             addoldbinary(pchange, fctx)\\n         else:\\n             maketext(pchange, ctx, fname)\\n \\n         pdiff.addchange(pchange)\\n \\n \\n def addadded(pdiff, ctx, added, removed):\\n     \\\"\\\"\\\"add file adds to the phabdiff, both new files and copies\\/moves\\\"\\\"\\\"\\n     # Keep track of files that've been recorded as moved\\/copied, so if there are\\n     # additional copies we can mark them (moves get removed from removed)\\n     copiedchanges = {}\\n     movedchanges = {}\\n     for fname in added:\\n         fctx = ctx[fname]\\n         pchange = phabchange(currentPath=fname)\\n \\n         filemode = gitmode[ctx[fname].flags()]\\n         renamed = fctx.renamed()\\n \\n         if renamed:\\n             originalfname = renamed[0]\\n             originalmode = gitmode[ctx.p1()[originalfname].flags()]\\n             pchange.oldPath = originalfname\\n \\n             if originalfname in removed:\\n                 origpchange = phabchange(\\n                     currentPath=originalfname,\\n                     oldPath=originalfname,\\n                     type=DiffChangeType.MOVE_AWAY,\\n                     awayPaths=[fname],\\n                 )\\n                 movedchanges[originalfname] = origpchange\\n                 removed.remove(originalfname)\\n                 pchange.type = DiffChangeType.MOVE_HERE\\n             elif originalfname in movedchanges:\\n                 movedchanges[originalfname].type = DiffChangeType.MULTICOPY\\n                 movedchanges[originalfname].awayPaths.append(fname)\\n                 pchange.type = DiffChangeType.COPY_HERE\\n             else:  # pure copy\\n                 if originalfname not in copiedchanges:\\n                     origpchange = phabchange(\\n                         currentPath=originalfname, type=DiffChangeType.COPY_AWAY\\n                     )\\n                     copiedchanges[originalfname] = origpchange\\n                 else:\\n                     origpchange = copiedchanges[originalfname]\\n                 origpchange.awayPaths.append(fname)\\n                 pchange.type = DiffChangeType.COPY_HERE\\n \\n             if filemode != originalmode:\\n                 pchange.addoldmode(originalmode)\\n                 pchange.addnewmode(filemode)\\n         else:  # Brand-new file\\n             pchange.addnewmode(gitmode[fctx.flags()])\\n             pchange.type = DiffChangeType.ADD\\n \\n         if fctx.isbinary() or notutf8(fctx):\\n             makebinary(pchange, fctx)\\n             if renamed:\\n                 addoldbinary(pchange, fctx)\\n         else:\\n             maketext(pchange, ctx, fname)\\n \\n         pdiff.addchange(pchange)\\n \\n     for _path, copiedchange in copiedchanges.items():\\n         pdiff.addchange(copiedchange)\\n     for _path, movedchange in movedchanges.items():\\n         pdiff.addchange(movedchange)\\n \\n \\n def creatediff(ctx):\\n     \\\"\\\"\\\"create a Differential Diff\\\"\\\"\\\"\\n     repo = ctx.repo()\\n     repophid = getrepophid(repo)\\n     # Create a \\\"Differential Diff\\\" via \\\"differential.creatediff\\\" API\\n     pdiff = phabdiff(\\n         sourceControlBaseRevision=b'%s' % ctx.p1().hex(),\\n         branch=b'%s' % ctx.branch(),\\n     )\\n     modified, added, removed, _d, _u, _i, _c = ctx.p1().status(ctx)\\n     # addadded will remove moved files from removed, so addremoved won't get\\n     # them\\n     addadded(pdiff, ctx, added, removed)\\n     addmodified(pdiff, ctx, modified)\\n     addremoved(pdiff, ctx, removed)\\n     if repophid:\\n         pdiff.repositoryPHID = repophid\\n     diff = callconduit(\\n         repo.ui,\\n         b'differential.creatediff',\\n         pycompat.byteskwargs(attr.asdict(pdiff)),\\n     )\\n     if not diff:\\n         raise error.Abort(_(b'cannot create diff for %s') % ctx)\\n     return diff\\n \\n \\n def writediffproperties(ctx, diff):\\n     \\\"\\\"\\\"write metadata to diff so patches could be applied losslessly\\\"\\\"\\\"\\n     # creatediff returns with a diffid but query returns with an id\\n     diffid = diff.get(b'diffid', diff.get(b'id'))\\n     params = {\\n         b'diff_id': diffid,\\n         b'name': b'hg:meta',\\n         b'data': templatefilters.json(\\n             {\\n                 b'user': ctx.user(),\\n                 b'date': b'%d %d' % ctx.date(),\\n                 b'branch': ctx.branch(),\\n                 b'node': ctx.hex(),\\n                 b'parent': ctx.p1().hex(),\\n             }\\n         ),\\n     }\\n     callconduit(ctx.repo().ui, b'differential.setdiffproperty', params)\\n \\n     params = {\\n         b'diff_id': diffid,\\n         b'name': b'local:commits',\\n         b'data': templatefilters.json(\\n             {\\n                 ctx.hex(): {\\n                     b'author': stringutil.person(ctx.user()),\\n                     b'authorEmail': stringutil.email(ctx.user()),\\n                     b'time': int(ctx.date()[0]),\\n                     b'commit': ctx.hex(),\\n                     b'parents': [ctx.p1().hex()],\\n                     b'branch': ctx.branch(),\\n                 },\\n             }\\n         ),\\n     }\\n     callconduit(ctx.repo().ui, b'differential.setdiffproperty', params)\\n \\n \\n def createdifferentialrevision(\\n     ctx,\\n     revid=None,\\n     parentrevphid=None,\\n     oldnode=None,\\n     olddiff=None,\\n     actions=None,\\n     comment=None,\\n ):\\n     \\\"\\\"\\\"create or update a Differential Revision\\n \\n     If revid is None, create a new Differential Revision, otherwise update\\n     revid. If parentrevphid is not None, set it as a dependency.\\n \\n     If oldnode is not None, check if the patch content (without commit message\\n     and metadata) has changed before creating another diff.\\n \\n     If actions is not None, they will be appended to the transaction.\\n     \\\"\\\"\\\"\\n     repo = ctx.repo()\\n     if oldnode:\\n         diffopts = mdiff.diffopts(git=True, context=32767)\\n         oldctx = repo.unfiltered()[oldnode]\\n         neednewdiff = getdiff(ctx, diffopts) != getdiff(oldctx, diffopts)\\n     else:\\n         neednewdiff = True\\n \\n     transactions = []\\n     if neednewdiff:\\n         diff = creatediff(ctx)\\n         transactions.append({b'type': b'update', b'value': diff[b'phid']})\\n         if comment:\\n             transactions.append({b'type': b'comment', b'value': comment})\\n     else:\\n         # Even if we don't need to upload a new diff because the patch content\\n         # does not change. We might still need to update its metadata so\\n         # pushers could know the correct node metadata.\\n         assert olddiff\\n         diff = olddiff\\n     writediffproperties(ctx, diff)\\n \\n     # Set the parent Revision every time, so commit re-ordering is picked-up\\n     if parentrevphid:\\n         transactions.append(\\n             {b'type': b'parents.set', b'value': [parentrevphid]}\\n         )\\n \\n     if actions:\\n         transactions += actions\\n \\n     # Parse commit message and update related fields.\\n     desc = ctx.description()\\n     info = callconduit(\\n         repo.ui, b'differential.parsecommitmessage', {b'corpus': desc}\\n     )\\n     for k, v in info[b'fields'].items():\\n         if k in [b'title', b'summary', b'testPlan']:\\n             transactions.append({b'type': k, b'value': v})\\n \\n     params = {b'transactions': transactions}\\n     if revid is not None:\\n         # Update an existing Differential Revision\\n         params[b'objectIdentifier'] = revid\\n \\n     revision = callconduit(repo.ui, b'differential.revision.edit', params)\\n     if not revision:\\n         raise error.Abort(_(b'cannot create revision for %s') % ctx)\\n \\n     return revision, diff\\n \\n \\n-def userphids(repo, names):\\n+def userphids(ui, names):\\n     \\\"\\\"\\\"convert user names to PHIDs\\\"\\\"\\\"\\n     names = [name.lower() for name in names]\\n     query = {b'constraints': {b'usernames': names}}\\n-    result = callconduit(repo.ui, b'user.search', query)\\n+    result = callconduit(ui, b'user.search', query)\\n     # username not found is not an error of the API. So check if we have missed\\n     # some names here.\\n     data = result[b'data']\\n     resolved = set(entry[b'fields'][b'username'].lower() for entry in data)\\n     unresolved = set(names) - resolved\\n     if unresolved:\\n         raise error.Abort(\\n             _(b'unknown username: %s') % b' '.join(sorted(unresolved))\\n         )\\n     return [entry[b'phid'] for entry in data]\\n \\n \\n @vcrcommand(\\n     b'phabsend',\\n     [\\n         (b'r', b'rev', [], _(b'revisions to send'), _(b'REV')),\\n         (b'', b'amend', True, _(b'update commit messages')),\\n         (b'', b'reviewer', [], _(b'specify reviewers')),\\n         (b'', b'blocker', [], _(b'specify blocking reviewers')),\\n         (\\n             b'm',\\n             b'comment',\\n             b'',\\n             _(b'add a comment to Revisions with new\\/updated Diffs'),\\n         ),\\n         (b'', b'confirm', None, _(b'ask for confirmation before sending')),\\n     ],\\n     _(b'REV [OPTIONS]'),\\n     helpcategory=command.CATEGORY_IMPORT_EXPORT,\\n )\\n def phabsend(ui, repo, *revs, **opts):\\n     \\\"\\\"\\\"upload changesets to Phabricator\\n \\n     If there are multiple revisions specified, they will be send as a stack\\n     with a linear dependencies relationship using the order specified by the\\n     revset.\\n \\n     For the first time uploading changesets, local tags will be created to\\n     maintain the association. After the first time, phabsend will check\\n     obsstore and tags information so it can figure out whether to update an\\n     existing Differential Revision, or create a new one.\\n \\n     If --amend is set, update commit messages so they have the\\n     ``Differential Revision`` URL, remove related tags. This is similar to what\\n     arcanist will do, and is more desired in author-push workflows. Otherwise,\\n     use local tags to record the ``Differential Revision`` association.\\n \\n     The --confirm option lets you confirm changesets before sending them. You\\n     can also add following to your configuration file to make it default\\n     behaviour::\\n \\n         [phabsend]\\n         confirm = true\\n \\n     phabsend will check obsstore and the above association to decide whether to\\n     update an existing Differential Revision, or create a new one.\\n     \\\"\\\"\\\"\\n     opts = pycompat.byteskwargs(opts)\\n     revs = list(revs) + opts.get(b'rev', [])\\n     revs = scmutil.revrange(repo, revs)\\n     revs.sort()  # ascending order to preserve topological parent\\/child in phab\\n \\n     if not revs:\\n         raise error.Abort(_(b'phabsend requires at least one changeset'))\\n     if opts.get(b'amend'):\\n         cmdutil.checkunfinished(repo)\\n \\n     # {newnode: (oldnode, olddiff, olddrev}\\n     oldmap = getoldnodedrevmap(repo, [repo[r].node() for r in revs])\\n \\n     confirm = ui.configbool(b'phabsend', b'confirm')\\n     confirm |= bool(opts.get(b'confirm'))\\n     if confirm:\\n         confirmed = _confirmbeforesend(repo, revs, oldmap)\\n         if not confirmed:\\n             raise error.Abort(_(b'phabsend cancelled'))\\n \\n     actions = []\\n     reviewers = opts.get(b'reviewer', [])\\n     blockers = opts.get(b'blocker', [])\\n     phids = []\\n     if reviewers:\\n-        phids.extend(userphids(repo, reviewers))\\n+        phids.extend(userphids(repo.ui, reviewers))\\n     if blockers:\\n         phids.extend(\\n-            map(lambda phid: b'blocking(%s)' % phid, userphids(repo, blockers))\\n+            map(\\n+                lambda phid: b'blocking(%s)' % phid,\\n+                userphids(repo.ui, blockers),\\n+            )\\n         )\\n     if phids:\\n         actions.append({b'type': b'reviewers.add', b'value': phids})\\n \\n     drevids = []  # [int]\\n     diffmap = {}  # {newnode: diff}\\n \\n     # Send patches one by one so we know their Differential Revision PHIDs and\\n     # can provide dependency relationship\\n     lastrevphid = None\\n     for rev in revs:\\n         ui.debug(b'sending rev %d\\\\n' % rev)\\n         ctx = repo[rev]\\n \\n         # Get Differential Revision ID\\n         oldnode, olddiff, revid = oldmap.get(ctx.node(), (None, None, None))\\n         if oldnode != ctx.node() or opts.get(b'amend'):\\n             # Create or update Differential Revision\\n             revision, diff = createdifferentialrevision(\\n                 ctx,\\n                 revid,\\n                 lastrevphid,\\n                 oldnode,\\n                 olddiff,\\n                 actions,\\n                 opts.get(b'comment'),\\n             )\\n             diffmap[ctx.node()] = diff\\n             newrevid = int(revision[b'object'][b'id'])\\n             newrevphid = revision[b'object'][b'phid']\\n             if revid:\\n                 action = b'updated'\\n             else:\\n                 action = b'created'\\n \\n             # Create a local tag to note the association, if commit message\\n             # does not have it already\\n             m = _differentialrevisiondescre.search(ctx.description())\\n             if not m or int(m.group('id')) != newrevid:\\n                 tagname = b'D%d' % newrevid\\n                 tags.tag(\\n                     repo,\\n                     tagname,\\n                     ctx.node(),\\n                     message=None,\\n                     user=None,\\n                     date=None,\\n                     local=True,\\n                 )\\n         else:\\n             # Nothing changed. But still set \\\"newrevphid\\\" so the next revision\\n             # could depend on this one and \\\"newrevid\\\" for the summary line.\\n             newrevphid = querydrev(repo.ui, b'%d' % revid)[0][b'phid']\\n             newrevid = revid\\n             action = b'skipped'\\n \\n         actiondesc = ui.label(\\n             {\\n                 b'created': _(b'created'),\\n                 b'skipped': _(b'skipped'),\\n                 b'updated': _(b'updated'),\\n             }[action],\\n             b'phabricator.action.%s' % action,\\n         )\\n         drevdesc = ui.label(b'D%d' % newrevid, b'phabricator.drev')\\n         nodedesc = ui.label(bytes(ctx), b'phabricator.node')\\n         desc = ui.label(ctx.description().split(b'\\\\n')[0], b'phabricator.desc')\\n         ui.write(\\n             _(b'%s - %s - %s: %s\\\\n') % (drevdesc, actiondesc, nodedesc, desc)\\n         )\\n         drevids.append(newrevid)\\n         lastrevphid = newrevphid\\n \\n     # Update commit messages and remove tags\\n     if opts.get(b'amend'):\\n         unfi = repo.unfiltered()\\n         drevs = callconduit(ui, b'differential.query', {b'ids': drevids})\\n         with repo.wlock(), repo.lock(), repo.transaction(b'phabsend'):\\n             wnode = unfi[b'.'].node()\\n             mapping = {}  # {oldnode: [newnode]}\\n             for i, rev in enumerate(revs):\\n                 old = unfi[rev]\\n                 drevid = drevids[i]\\n                 drev = [d for d in drevs if int(d[b'id']) == drevid][0]\\n                 newdesc = getdescfromdrev(drev)\\n                 # Make sure commit message contain \\\"Differential Revision\\\"\\n                 if old.description() != newdesc:\\n                     if old.phase() == phases.public:\\n                         ui.warn(\\n                             _(b\\\"warning: not updating public commit %s\\\\n\\\")\\n                             % scmutil.formatchangeid(old)\\n                         )\\n                         continue\\n                     parents = [\\n                         mapping.get(old.p1().node(), (old.p1(),))[0],\\n                         mapping.get(old.p2().node(), (old.p2(),))[0],\\n                     ]\\n                     new = context.metadataonlyctx(\\n                         repo,\\n                         old,\\n                         parents=parents,\\n                         text=newdesc,\\n                         user=old.user(),\\n                         date=old.date(),\\n                         extra=old.extra(),\\n                     )\\n \\n                     newnode = new.commit()\\n \\n                     mapping[old.node()] = [newnode]\\n                     # Update diff property\\n                     # If it fails just warn and keep going, otherwise the DREV\\n                     # associations will be lost\\n                     try:\\n                         writediffproperties(unfi[newnode], diffmap[old.node()])\\n                     except util.urlerr.urlerror:\\n                         ui.warnnoi18n(\\n                             b'Failed to update metadata for D%d\\\\n' % drevid\\n                         )\\n                 # Remove local tags since it's no longer necessary\\n                 tagname = b'D%d' % drevid\\n                 if tagname in repo.tags():\\n                     tags.tag(\\n                         repo,\\n                         tagname,\\n                         nullid,\\n                         message=None,\\n                         user=None,\\n                         date=None,\\n                         local=True,\\n                     )\\n             scmutil.cleanupnodes(repo, mapping, b'phabsend', fixphase=True)\\n             if wnode in mapping:\\n                 unfi.setparents(mapping[wnode][0])\\n \\n \\n # Map from \\\"hg:meta\\\" keys to header understood by \\\"hg import\\\". The order is\\n # consistent with \\\"hg export\\\" output.\\n _metanamemap = util.sortdict(\\n     [\\n         (b'user', b'User'),\\n         (b'date', b'Date'),\\n         (b'branch', b'Branch'),\\n         (b'node', b'Node ID'),\\n         (b'parent', b'Parent '),\\n     ]\\n )\\n \\n \\n def _confirmbeforesend(repo, revs, oldmap):\\n     url, token = readurltoken(repo.ui)\\n     ui = repo.ui\\n     for rev in revs:\\n         ctx = repo[rev]\\n         desc = ctx.description().splitlines()[0]\\n         oldnode, olddiff, drevid = oldmap.get(ctx.node(), (None, None, None))\\n         if drevid:\\n             drevdesc = ui.label(b'D%d' % drevid, b'phabricator.drev')\\n         else:\\n             drevdesc = ui.label(_(b'NEW'), b'phabricator.drev')\\n \\n         ui.write(\\n             _(b'%s - %s: %s\\\\n')\\n             % (\\n                 drevdesc,\\n                 ui.label(bytes(ctx), b'phabricator.node'),\\n                 ui.label(desc, b'phabricator.desc'),\\n             )\\n         )\\n \\n     if ui.promptchoice(\\n         _(b'Send the above changes to %s (yn)?$$ &Yes $$ &No') % url\\n     ):\\n         return False\\n \\n     return True\\n \\n \\n _knownstatusnames = {\\n     b'accepted',\\n     b'needsreview',\\n     b'needsrevision',\\n     b'closed',\\n     b'abandoned',\\n     b'changesplanned',\\n }\\n \\n \\n def _getstatusname(drev):\\n     \\\"\\\"\\\"get normalized status name from a Differential Revision\\\"\\\"\\\"\\n     return drev[b'statusName'].replace(b' ', b'').lower()\\n \\n \\n # Small language to specify differential revisions. Support symbols: (), :X,\\n # +, and -.\\n \\n _elements = {\\n     # token-type: binding-strength, primary, prefix, infix, suffix\\n     b'(': (12, None, (b'group', 1, b')'), None, None),\\n     b':': (8, None, (b'ancestors', 8), None, None),\\n     b'&': (5, None, None, (b'and_', 5), None),\\n     b'+': (4, None, None, (b'add', 4), None),\\n     b'-': (4, None, None, (b'sub', 4), None),\\n     b')': (0, None, None, None, None),\\n     b'symbol': (0, b'symbol', None, None, None),\\n     b'end': (0, None, None, None, None),\\n }\\n \\n \\n def _tokenize(text):\\n     view = memoryview(text)  # zero-copy slice\\n     special = b'():+-& '\\n     pos = 0\\n     length = len(text)\\n     while pos \\u003c length:\\n         symbol = b''.join(\\n             itertools.takewhile(\\n                 lambda ch: ch not in special, pycompat.iterbytestr(view[pos:])\\n             )\\n         )\\n         if symbol:\\n             yield (b'symbol', symbol, pos)\\n             pos += len(symbol)\\n         else:  # special char, ignore space\\n             if text[pos : pos + 1] != b' ':\\n                 yield (text[pos : pos + 1], None, pos)\\n             pos += 1\\n     yield (b'end', None, pos)\\n \\n \\n def _parse(text):\\n     tree, pos = parser.parser(_elements).parse(_tokenize(text))\\n     if pos != len(text):\\n         raise error.ParseError(b'invalid token', pos)\\n     return tree\\n \\n \\n def _parsedrev(symbol):\\n     \\\"\\\"\\\"str -\\u003e int or None, ex. 'D45' -\\u003e 45; '12' -\\u003e 12; 'x' -\\u003e None\\\"\\\"\\\"\\n     if symbol.startswith(b'D') and symbol[1:].isdigit():\\n         return int(symbol[1:])\\n     if symbol.isdigit():\\n         return int(symbol)\\n \\n \\n def _prefetchdrevs(tree):\\n     \\\"\\\"\\\"return ({single-drev-id}, {ancestor-drev-id}) to prefetch\\\"\\\"\\\"\\n     drevs = set()\\n     ancestordrevs = set()\\n     op = tree[0]\\n     if op == b'symbol':\\n         r = _parsedrev(tree[1])\\n         if r:\\n             drevs.add(r)\\n     elif op == b'ancestors':\\n         r, a = _prefetchdrevs(tree[1])\\n         drevs.update(r)\\n         ancestordrevs.update(r)\\n         ancestordrevs.update(a)\\n     else:\\n         for t in tree[1:]:\\n             r, a = _prefetchdrevs(t)\\n             drevs.update(r)\\n             ancestordrevs.update(a)\\n     return drevs, ancestordrevs\\n \\n \\n def querydrev(ui, spec):\\n     \\\"\\\"\\\"return a list of \\\"Differential Revision\\\" dicts\\n \\n     spec is a string using a simple query language, see docstring in phabread\\n     for details.\\n \\n     A \\\"Differential Revision dict\\\" looks like:\\n \\n         {\\n             \\\"activeDiffPHID\\\": \\\"PHID-DIFF-xoqnjkobbm6k4dk6hi72\\\",\\n             \\\"authorPHID\\\": \\\"PHID-USER-tv3ohwc4v4jeu34otlye\\\",\\n             \\\"auxiliary\\\": {\\n               \\\"phabricator:depends-on\\\": [\\n                 \\\"PHID-DREV-gbapp366kutjebt7agcd\\\"\\n               ]\\n               \\\"phabricator:projects\\\": [],\\n             },\\n             \\\"branch\\\": \\\"default\\\",\\n             \\\"ccs\\\": [],\\n             \\\"commits\\\": [],\\n             \\\"dateCreated\\\": \\\"1499181406\\\",\\n             \\\"dateModified\\\": \\\"1499182103\\\",\\n             \\\"diffs\\\": [\\n               \\\"3\\\",\\n               \\\"4\\\",\\n             ],\\n             \\\"hashes\\\": [],\\n             \\\"id\\\": \\\"2\\\",\\n             \\\"lineCount\\\": \\\"2\\\",\\n             \\\"phid\\\": \\\"PHID-DREV-672qvysjcczopag46qty\\\",\\n             \\\"properties\\\": {},\\n             \\\"repositoryPHID\\\": \\\"PHID-REPO-hub2hx62ieuqeheznasv\\\",\\n             \\\"reviewers\\\": [],\\n             \\\"sourcePath\\\": null\\n             \\\"status\\\": \\\"0\\\",\\n             \\\"statusName\\\": \\\"Needs Review\\\",\\n             \\\"summary\\\": \\\"\\\",\\n             \\\"testPlan\\\": \\\"\\\",\\n             \\\"title\\\": \\\"example\\\",\\n             \\\"uri\\\": \\\"https:\\/\\/phab.example.com\\/D2\\\",\\n         }\\n     \\\"\\\"\\\"\\n     # TODO: replace differential.query and differential.querydiffs with\\n     # differential.diff.search because the former (and their output) are\\n     # frozen, and planned to be deprecated and removed.\\n \\n     def fetch(params):\\n         \\\"\\\"\\\"params -\\u003e single drev or None\\\"\\\"\\\"\\n         key = (params.get(b'ids') or params.get(b'phids') or [None])[0]\\n         if key in prefetched:\\n             return prefetched[key]\\n         drevs = callconduit(ui, b'differential.query', params)\\n         # Fill prefetched with the result\\n         for drev in drevs:\\n             prefetched[drev[b'phid']] = drev\\n             prefetched[int(drev[b'id'])] = drev\\n         if key not in prefetched:\\n             raise error.Abort(\\n                 _(b'cannot get Differential Revision %r') % params\\n             )\\n         return prefetched[key]\\n \\n     def getstack(topdrevids):\\n         \\\"\\\"\\\"given a top, get a stack from the bottom, [id] -\\u003e [id]\\\"\\\"\\\"\\n         visited = set()\\n         result = []\\n         queue = [{b'ids': [i]} for i in topdrevids]\\n         while queue:\\n             params = queue.pop()\\n             drev = fetch(params)\\n             if drev[b'id'] in visited:\\n                 continue\\n             visited.add(drev[b'id'])\\n             result.append(int(drev[b'id']))\\n             auxiliary = drev.get(b'auxiliary', {})\\n             depends = auxiliary.get(b'phabricator:depends-on', [])\\n             for phid in depends:\\n                 queue.append({b'phids': [phid]})\\n         result.reverse()\\n         return smartset.baseset(result)\\n \\n     # Initialize prefetch cache\\n     prefetched = {}  # {id or phid: drev}\\n \\n     tree = _parse(spec)\\n     drevs, ancestordrevs = _prefetchdrevs(tree)\\n \\n     # developer config: phabricator.batchsize\\n     batchsize = ui.configint(b'phabricator', b'batchsize')\\n \\n     # Prefetch Differential Revisions in batch\\n     tofetch = set(drevs)\\n     for r in ancestordrevs:\\n         tofetch.update(range(max(1, r - batchsize), r + 1))\\n     if drevs:\\n         fetch({b'ids': list(tofetch)})\\n     validids = sorted(set(getstack(list(ancestordrevs))) | set(drevs))\\n \\n     # Walk through the tree, return smartsets\\n     def walk(tree):\\n         op = tree[0]\\n         if op == b'symbol':\\n             drev = _parsedrev(tree[1])\\n             if drev:\\n                 return smartset.baseset([drev])\\n             elif tree[1] in _knownstatusnames:\\n                 drevs = [\\n                     r\\n                     for r in validids\\n                     if _getstatusname(prefetched[r]) == tree[1]\\n                 ]\\n                 return smartset.baseset(drevs)\\n             else:\\n                 raise error.Abort(_(b'unknown symbol: %s') % tree[1])\\n         elif op in {b'and_', b'add', b'sub'}:\\n             assert len(tree) == 3\\n             return getattr(operator, op)(walk(tree[1]), walk(tree[2]))\\n         elif op == b'group':\\n             return walk(tree[1])\\n         elif op == b'ancestors':\\n             return getstack(walk(tree[1]))\\n         else:\\n             raise error.ProgrammingError(b'illegal tree: %r' % tree)\\n \\n     return [prefetched[r] for r in walk(tree)]\\n \\n \\n def getdescfromdrev(drev):\\n     \\\"\\\"\\\"get description (commit message) from \\\"Differential Revision\\\"\\n \\n     This is similar to differential.getcommitmessage API. But we only care\\n     about limited fields: title, summary, test plan, and URL.\\n     \\\"\\\"\\\"\\n     title = drev[b'title']\\n     summary = drev[b'summary'].rstrip()\\n     testplan = drev[b'testPlan'].rstrip()\\n     if testplan:\\n         testplan = b'Test Plan:\\\\n%s' % testplan\\n     uri = b'Differential Revision: %s' % drev[b'uri']\\n     return b'\\\\n\\\\n'.join(filter(None, [title, summary, testplan, uri]))\\n \\n \\n def getdiffmeta(diff):\\n     \\\"\\\"\\\"get commit metadata (date, node, user, p1) from a diff object\\n \\n     The metadata could be \\\"hg:meta\\\", sent by phabsend, like:\\n \\n         \\\"properties\\\": {\\n           \\\"hg:meta\\\": {\\n             \\\"branch\\\": \\\"default\\\",\\n             \\\"date\\\": \\\"1499571514 25200\\\",\\n             \\\"node\\\": \\\"98c08acae292b2faf60a279b4189beb6cff1414d\\\",\\n             \\\"user\\\": \\\"Foo Bar \\u003cfoo@example.com\\u003e\\\",\\n             \\\"parent\\\": \\\"6d0abad76b30e4724a37ab8721d630394070fe16\\\"\\n           }\\n         }\\n \\n     Or converted from \\\"local:commits\\\", sent by \\\"arc\\\", like:\\n \\n         \\\"properties\\\": {\\n           \\\"local:commits\\\": {\\n             \\\"98c08acae292b2faf60a279b4189beb6cff1414d\\\": {\\n               \\\"author\\\": \\\"Foo Bar\\\",\\n               \\\"authorEmail\\\": \\\"foo@example.com\\\"\\n               \\\"branch\\\": \\\"default\\\",\\n               \\\"commit\\\": \\\"98c08acae292b2faf60a279b4189beb6cff1414d\\\",\\n               \\\"local\\\": \\\"1000\\\",\\n               \\\"message\\\": \\\"...\\\",\\n               \\\"parents\\\": [\\\"6d0abad76b30e4724a37ab8721d630394070fe16\\\"],\\n               \\\"rev\\\": \\\"98c08acae292b2faf60a279b4189beb6cff1414d\\\",\\n               \\\"summary\\\": \\\"...\\\",\\n               \\\"tag\\\": \\\"\\\",\\n               \\\"time\\\": 1499546314,\\n             }\\n           }\\n         }\\n \\n     Note: metadata extracted from \\\"local:commits\\\" will lose time zone\\n     information.\\n     \\\"\\\"\\\"\\n     props = diff.get(b'properties') or {}\\n     meta = props.get(b'hg:meta')\\n     if not meta:\\n         if props.get(b'local:commits'):\\n             commit = sorted(props[b'local:commits'].values())[0]\\n             meta = {}\\n             if b'author' in commit and b'authorEmail' in commit:\\n                 meta[b'user'] = b'%s \\u003c%s\\u003e' % (\\n                     commit[b'author'],\\n                     commit[b'authorEmail'],\\n                 )\\n             if b'time' in commit:\\n                 meta[b'date'] = b'%d 0' % int(commit[b'time'])\\n             if b'branch' in commit:\\n                 meta[b'branch'] = commit[b'branch']\\n             node = commit.get(b'commit', commit.get(b'rev'))\\n             if node:\\n                 meta[b'node'] = node\\n             if len(commit.get(b'parents', ())) \\u003e= 1:\\n                 meta[b'parent'] = commit[b'parents'][0]\\n         else:\\n             meta = {}\\n     if b'date' not in meta and b'dateCreated' in diff:\\n         meta[b'date'] = b'%s 0' % diff[b'dateCreated']\\n     if b'branch' not in meta and diff.get(b'branch'):\\n         meta[b'branch'] = diff[b'branch']\\n     if b'parent' not in meta and diff.get(b'sourceControlBaseRevision'):\\n         meta[b'parent'] = diff[b'sourceControlBaseRevision']\\n     return meta\\n \\n \\n def readpatch(ui, drevs, write):\\n     \\\"\\\"\\\"generate plain-text patch readable by 'hg import'\\n \\n     write is usually ui.write. drevs is what \\\"querydrev\\\" returns, results of\\n     \\\"differential.query\\\".\\n     \\\"\\\"\\\"\\n     # Prefetch hg:meta property for all diffs\\n     diffids = sorted(set(max(int(v) for v in drev[b'diffs']) for drev in drevs))\\n     diffs = callconduit(ui, b'differential.querydiffs', {b'ids': diffids})\\n \\n     # Generate patch for each drev\\n     for drev in drevs:\\n         ui.note(_(b'reading D%s\\\\n') % drev[b'id'])\\n \\n         diffid = max(int(v) for v in drev[b'diffs'])\\n         body = callconduit(ui, b'differential.getrawdiff', {b'diffID': diffid})\\n         desc = getdescfromdrev(drev)\\n         header = b'# HG changeset patch\\\\n'\\n \\n         # Try to preserve metadata from hg:meta property. Write hg patch\\n         # headers that can be read by the \\\"import\\\" command. See patchheadermap\\n         # and extract in mercurial\\/patch.py for supported headers.\\n         meta = getdiffmeta(diffs[b'%d' % diffid])\\n         for k in _metanamemap.keys():\\n             if k in meta:\\n                 header += b'# %s %s\\\\n' % (_metanamemap[k], meta[k])\\n \\n         content = b'%s%s\\\\n%s' % (header, desc, body)\\n         write(content)\\n \\n \\n @vcrcommand(\\n     b'phabread',\\n     [(b'', b'stack', False, _(b'read dependencies'))],\\n     _(b'DREVSPEC [OPTIONS]'),\\n     helpcategory=command.CATEGORY_IMPORT_EXPORT,\\n )\\n def phabread(ui, repo, spec, **opts):\\n     \\\"\\\"\\\"print patches from Phabricator suitable for importing\\n \\n     DREVSPEC could be a Differential Revision identity, like ``D123``, or just\\n     the number ``123``. It could also have common operators like ``+``, ``-``,\\n     ``&``, ``(``, ``)`` for complex queries. Prefix ``:`` could be used to\\n     select a stack.\\n \\n     ``abandoned``, ``accepted``, ``closed``, ``needsreview``, ``needsrevision``\\n     could be used to filter patches by status. For performance reason, they\\n     only represent a subset of non-status selections and cannot be used alone.\\n \\n     For example, ``:D6+8-(2+D4)`` selects a stack up to D6, plus D8 and exclude\\n     D2 and D4. ``:D9 & needsreview`` selects \\\"Needs Review\\\" revisions in a\\n     stack up to D9.\\n \\n     If --stack is given, follow dependencies information and read all patches.\\n     It is equivalent to the ``:`` operator.\\n     \\\"\\\"\\\"\\n     opts = pycompat.byteskwargs(opts)\\n     if opts.get(b'stack'):\\n         spec = b':(%s)' % spec\\n     drevs = querydrev(repo.ui, spec)\\n     readpatch(repo.ui, drevs, ui.write)\\n \\n \\n @vcrcommand(\\n     b'phabupdate',\\n     [\\n         (b'', b'accept', False, _(b'accept revisions')),\\n         (b'', b'reject', False, _(b'reject revisions')),\\n         (b'', b'abandon', False, _(b'abandon revisions')),\\n         (b'', b'reclaim', False, _(b'reclaim revisions')),\\n         (b'm', b'comment', b'', _(b'comment on the last revision')),\\n     ],\\n     _(b'DREVSPEC [OPTIONS]'),\\n     helpcategory=command.CATEGORY_IMPORT_EXPORT,\\n )\\n def phabupdate(ui, repo, spec, **opts):\\n     \\\"\\\"\\\"update Differential Revision in batch\\n \\n     DREVSPEC selects revisions. See :hg:`help phabread` for its usage.\\n     \\\"\\\"\\\"\\n     opts = pycompat.byteskwargs(opts)\\n     flags = [n for n in b'accept reject abandon reclaim'.split() if opts.get(n)]\\n     if len(flags) \\u003e 1:\\n         raise error.Abort(_(b'%s cannot be used together') % b', '.join(flags))\\n \\n     actions = []\\n     for f in flags:\\n         actions.append({b'type': f, b'value': True})\\n \\n     drevs = querydrev(repo.ui, spec)\\n     for i, drev in enumerate(drevs):\\n         if i + 1 == len(drevs) and opts.get(b'comment'):\\n             actions.append({b'type': b'comment', b'value': opts[b'comment']})\\n         if actions:\\n             params = {\\n                 b'objectIdentifier': drev[b'phid'],\\n                 b'transactions': actions,\\n             }\\n             callconduit(ui, b'differential.revision.edit', params)\\n \\n \\n @eh.templatekeyword(b'phabreview', requires={b'ctx'})\\n def template_review(context, mapping):\\n     \\\"\\\"\\\":phabreview: Object describing the review for this changeset.\\n     Has attributes `url` and `id`.\\n     \\\"\\\"\\\"\\n     ctx = context.resource(mapping, b'ctx')\\n     m = _differentialrevisiondescre.search(ctx.description())\\n     if m:\\n         return templateutil.hybriddict(\\n             {b'url': m.group('url'), b'id': b\\\"D%s\\\" % m.group('id'),}\\n         )\\n     else:\\n         tags = ctx.repo().nodetags(ctx.node())\\n         for t in tags:\\n             if _differentialrevisiontagre.match(t):\\n                 url = ctx.repo().ui.config(b'phabricator', b'url')\\n                 if not url.endswith(b'\\/'):\\n                     url += b'\\/'\\n                 url += t\\n \\n                 return templateutil.hybriddict({b'url': url, b'id': t,})\\n     return None\\n \\n \\n @eh.templatekeyword(b'phabstatus', requires={b'ctx', b'repo', b'ui'})\\n def template_status(context, mapping):\\n     \\\"\\\"\\\":phabstatus: String. Status of Phabricator differential.\\n     \\\"\\\"\\\"\\n     ctx = context.resource(mapping, b'ctx')\\n     repo = context.resource(mapping, b'repo')\\n     ui = context.resource(mapping, b'ui')\\n \\n     rev = ctx.rev()\\n     try:\\n         drevid = getdrevmap(repo, [rev])[rev]\\n     except KeyError:\\n         return None\\n     drevs = callconduit(ui, b'differential.query', {b'ids': [drevid]})\\n     for drev in drevs:\\n         if int(drev[b'id']) == drevid:\\n             return templateutil.hybriddict(\\n                 {b'url': drev[b'uri'], b'status': drev[b'statusName'],}\\n             )\\n     return None\\n \\n \\n @show.showview(b'phabstatus', csettopic=b'work')\\n def phabstatusshowview(ui, repo, displayer):\\n     \\\"\\\"\\\"Phabricator differiential status\\\"\\\"\\\"\\n     revs = repo.revs('sort(_underway(), topo)')\\n     drevmap = getdrevmap(repo, revs)\\n     unknownrevs, drevids, revsbydrevid = [], set([]), {}\\n     for rev, drevid in pycompat.iteritems(drevmap):\\n         if drevid is not None:\\n             drevids.add(drevid)\\n             revsbydrevid.setdefault(drevid, set([])).add(rev)\\n         else:\\n             unknownrevs.append(rev)\\n \\n     drevs = callconduit(ui, b'differential.query', {b'ids': list(drevids)})\\n     drevsbyrev = {}\\n     for drev in drevs:\\n         for rev in revsbydrevid[int(drev[b'id'])]:\\n             drevsbyrev[rev] = drev\\n \\n     def phabstatus(ctx):\\n         drev = drevsbyrev[ctx.rev()]\\n         status = ui.label(\\n             b'%(statusName)s' % drev,\\n             b'phabricator.status.%s' % _getstatusname(drev),\\n         )\\n         ui.write(b\\\"\\\\n%s %s\\\\n\\\" % (drev[b'uri'], status))\\n \\n     revs -= smartset.baseset(unknownrevs)\\n     revdag = graphmod.dagwalker(repo, revs)\\n \\n     ui.setconfig(b'experimental', b'graphshorten', True)\\n     displayer._exthook = phabstatus\\n     nodelen = show.longestshortest(repo, revs)\\n     logcmdutil.displaygraph(\\n         ui,\\n         repo,\\n         revdag,\\n         displayer,\\n         graphmod.asciiedges,\\n         props={b'nodelen': nodelen},\\n     )\\n\"}]}],\"properties\":[]},\"20442\":{\"id\":\"20442\",\"revisionID\":\"8206\",\"dateCreated\":\"1581962881\",\"dateModified\":\"1583327825\",\"sourceControlBaseRevision\":\"72c6190de577bb2bb448eb2b14121e4ef85d08ff\",\"sourceControlPath\":null,\"sourceControlSystem\":\"hg\",\"branch\":null,\"bookmark\":null,\"creationMethod\":\"commit\",\"description\":\"rHG9b46270917348950e3fb1e73a5c9e46038065622\",\"unitStatus\":\"6\",\"lintStatus\":\"6\",\"changes\":[{\"id\":\"55597\",\"metadata\":{\"line:first\":1186,\"hash.effect\":\"QoC7Ipbh4yf0\"},\"oldPath\":\"hgext\\/phabricator.py\",\"currentPath\":\"hgext\\/phabricator.py\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"6\",\"delLines\":\"6\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"1799\",\"newLength\":\"1799\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\" # phabricator.py - simple Phabricator integration\\n #\\n # Copyright 2017 Facebook, Inc.\\n #\\n # This software may be used and distributed according to the terms of the\\n # GNU General Public License version 2 or any later version.\\n \\\"\\\"\\\"simple Phabricator integration (EXPERIMENTAL)\\n \\n This extension provides a ``phabsend`` command which sends a stack of\\n changesets to Phabricator, and a ``phabread`` command which prints a stack of\\n revisions in a format suitable for :hg:`import`, and a ``phabupdate`` command\\n to update statuses in batch.\\n \\n A \\\"phabstatus\\\" view for :hg:`show` is also provided; it displays status\\n information of Phabricator differentials associated with unfinished\\n changesets.\\n \\n By default, Phabricator requires ``Test Plan`` which might prevent some\\n changeset from being sent. The requirement could be disabled by changing\\n ``differential.require-test-plan-field`` config server side.\\n \\n Config::\\n \\n     [phabricator]\\n     # Phabricator URL\\n     url = https:\\/\\/phab.example.com\\/\\n \\n     # Repo callsign. If a repo has a URL https:\\/\\/$HOST\\/diffusion\\/FOO, then its\\n     # callsign is \\\"FOO\\\".\\n     callsign = FOO\\n \\n     # curl command to use. If not set (default), use builtin HTTP library to\\n     # communicate. If set, use the specified curl command. This could be useful\\n     # if you need to specify advanced options that is not easily supported by\\n     # the internal library.\\n     curlcmd = curl --connect-timeout 2 --retry 3 --silent\\n \\n     [auth]\\n     example.schemes = https\\n     example.prefix = phab.example.com\\n \\n     # API token. Get it from https:\\/\\/$HOST\\/conduit\\/login\\/\\n     example.phabtoken = cli-xxxxxxxxxxxxxxxxxxxxxxxxxxxx\\n \\\"\\\"\\\"\\n \\n from __future__ import absolute_import\\n \\n import base64\\n import contextlib\\n import hashlib\\n import itertools\\n import json\\n import mimetypes\\n import operator\\n import re\\n \\n from mercurial.node import bin, nullid\\n from mercurial.i18n import _\\n from mercurial.pycompat import getattr\\n from mercurial.thirdparty import attr\\n from mercurial import (\\n     cmdutil,\\n     context,\\n     encoding,\\n     error,\\n     exthelper,\\n     graphmod,\\n     httpconnection as httpconnectionmod,\\n     localrepo,\\n     logcmdutil,\\n     match,\\n     mdiff,\\n     obsutil,\\n     parser,\\n     patch,\\n     phases,\\n     pycompat,\\n     scmutil,\\n     smartset,\\n     tags,\\n     templatefilters,\\n     templateutil,\\n     url as urlmod,\\n     util,\\n )\\n from mercurial.utils import (\\n     procutil,\\n     stringutil,\\n )\\n from . import show\\n \\n \\n # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for\\n # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should\\n # be specifying the version(s) of Mercurial they are tested with, or\\n # leave the attribute unspecified.\\n testedwith = b'ships-with-hg-core'\\n \\n eh = exthelper.exthelper()\\n \\n cmdtable = eh.cmdtable\\n command = eh.command\\n configtable = eh.configtable\\n templatekeyword = eh.templatekeyword\\n uisetup = eh.finaluisetup\\n \\n # developer config: phabricator.batchsize\\n eh.configitem(\\n     b'phabricator', b'batchsize', default=12,\\n )\\n eh.configitem(\\n     b'phabricator', b'callsign', default=None,\\n )\\n eh.configitem(\\n     b'phabricator', b'curlcmd', default=None,\\n )\\n # developer config: phabricator.repophid\\n eh.configitem(\\n     b'phabricator', b'repophid', default=None,\\n )\\n eh.configitem(\\n     b'phabricator', b'url', default=None,\\n )\\n eh.configitem(\\n     b'phabsend', b'confirm', default=False,\\n )\\n \\n colortable = {\\n     b'phabricator.action.created': b'green',\\n     b'phabricator.action.skipped': b'magenta',\\n     b'phabricator.action.updated': b'magenta',\\n     b'phabricator.desc': b'',\\n     b'phabricator.drev': b'bold',\\n     b'phabricator.node': b'',\\n     b'phabricator.status.abandoned': b'magenta dim',\\n     b'phabricator.status.accepted': b'green bold',\\n     b'phabricator.status.closed': b'green',\\n     b'phabricator.status.needsreview': b'yellow',\\n     b'phabricator.status.needsrevision': b'red',\\n     b'phabricator.status.changesplanned': b'red',\\n }\\n \\n _VCR_FLAGS = [\\n     (\\n         b'',\\n         b'test-vcr',\\n         b'',\\n         _(\\n             b'Path to a vcr file. If nonexistent, will record a new vcr transcript'\\n             b', otherwise will mock all http requests using the specified vcr file.'\\n             b' (ADVANCED)'\\n         ),\\n     ),\\n ]\\n \\n \\n @eh.wrapfunction(localrepo, \\\"loadhgrc\\\")\\n def _loadhgrc(orig, ui, wdirvfs, hgvfs, requirements):\\n     \\\"\\\"\\\"Load ``.arcconfig`` content into a ui instance on repository open.\\n     \\\"\\\"\\\"\\n     result = False\\n     arcconfig = {}\\n \\n     try:\\n         # json.loads only accepts bytes from 3.6+\\n         rawparams = encoding.unifromlocal(wdirvfs.read(b\\\".arcconfig\\\"))\\n         # json.loads only returns unicode strings\\n         arcconfig = pycompat.rapply(\\n             lambda x: encoding.unitolocal(x)\\n             if isinstance(x, pycompat.unicode)\\n             else x,\\n             pycompat.json_loads(rawparams),\\n         )\\n \\n         result = True\\n     except ValueError:\\n         ui.warn(_(b\\\"invalid JSON in %s\\\\n\\\") % wdirvfs.join(b\\\".arcconfig\\\"))\\n     except IOError:\\n         pass\\n \\n     cfg = util.sortdict()\\n \\n     if b\\\"repository.callsign\\\" in arcconfig:\\n         cfg[(b\\\"phabricator\\\", b\\\"callsign\\\")] = arcconfig[b\\\"repository.callsign\\\"]\\n \\n     if b\\\"phabricator.uri\\\" in arcconfig:\\n         cfg[(b\\\"phabricator\\\", b\\\"url\\\")] = arcconfig[b\\\"phabricator.uri\\\"]\\n \\n     if cfg:\\n         ui.applyconfig(cfg, source=wdirvfs.join(b\\\".arcconfig\\\"))\\n \\n     return orig(ui, wdirvfs, hgvfs, requirements) or result  # Load .hg\\/hgrc\\n \\n \\n def vcrcommand(name, flags, spec, helpcategory=None, optionalrepo=False):\\n     fullflags = flags + _VCR_FLAGS\\n \\n     def hgmatcher(r1, r2):\\n         if r1.uri != r2.uri or r1.method != r2.method:\\n             return False\\n         r1params = util.urlreq.parseqs(r1.body)\\n         r2params = util.urlreq.parseqs(r2.body)\\n         for key in r1params:\\n             if key not in r2params:\\n                 return False\\n             value = r1params[key][0]\\n             # we want to compare json payloads without worrying about ordering\\n             if value.startswith(b'{') and value.endswith(b'}'):\\n                 r1json = pycompat.json_loads(value)\\n                 r2json = pycompat.json_loads(r2params[key][0])\\n                 if r1json != r2json:\\n                     return False\\n             elif r2params[key][0] != value:\\n                 return False\\n         return True\\n \\n     def sanitiserequest(request):\\n         request.body = re.sub(\\n             br'cli-[a-z0-9]+', br'cli-hahayouwish', request.body\\n         )\\n         return request\\n \\n     def sanitiseresponse(response):\\n         if 'set-cookie' in response['headers']:\\n             del response['headers']['set-cookie']\\n         return response\\n \\n     def decorate(fn):\\n         def inner(*args, **kwargs):\\n             cassette = pycompat.fsdecode(kwargs.pop('test_vcr', None))\\n             if cassette:\\n                 import hgdemandimport\\n \\n                 with hgdemandimport.deactivated():\\n                     import vcr as vcrmod\\n                     import vcr.stubs as stubs\\n \\n                     vcr = vcrmod.VCR(\\n                         serializer='json',\\n                         before_record_request=sanitiserequest,\\n                         before_record_response=sanitiseresponse,\\n                         custom_patches=[\\n                             (\\n                                 urlmod,\\n                                 'httpconnection',\\n                                 stubs.VCRHTTPConnection,\\n                             ),\\n                             (\\n                                 urlmod,\\n                                 'httpsconnection',\\n                                 stubs.VCRHTTPSConnection,\\n                             ),\\n                         ],\\n                     )\\n                     vcr.register_matcher('hgmatcher', hgmatcher)\\n                     with vcr.use_cassette(cassette, match_on=['hgmatcher']):\\n                         return fn(*args, **kwargs)\\n             return fn(*args, **kwargs)\\n \\n         inner.__name__ = fn.__name__\\n         inner.__doc__ = fn.__doc__\\n         return command(\\n             name,\\n             fullflags,\\n             spec,\\n             helpcategory=helpcategory,\\n             optionalrepo=optionalrepo,\\n         )(inner)\\n \\n     return decorate\\n \\n \\n def urlencodenested(params):\\n     \\\"\\\"\\\"like urlencode, but works with nested parameters.\\n \\n     For example, if params is {'a': ['b', 'c'], 'd': {'e': 'f'}}, it will be\\n     flattened to {'a[0]': 'b', 'a[1]': 'c', 'd[e]': 'f'} and then passed to\\n     urlencode. Note: the encoding is consistent with PHP's http_build_query.\\n     \\\"\\\"\\\"\\n     flatparams = util.sortdict()\\n \\n     def process(prefix, obj):\\n         if isinstance(obj, bool):\\n             obj = {True: b'true', False: b'false'}[obj]  # Python -\\u003e PHP form\\n         lister = lambda l: [(b'%d' % k, v) for k, v in enumerate(l)]\\n         items = {list: lister, dict: lambda x: x.items()}.get(type(obj))\\n         if items is None:\\n             flatparams[prefix] = obj\\n         else:\\n             for k, v in items(obj):\\n                 if prefix:\\n                     process(b'%s[%s]' % (prefix, k), v)\\n                 else:\\n                     process(k, v)\\n \\n     process(b'', params)\\n     return util.urlreq.urlencode(flatparams)\\n \\n \\n def readurltoken(ui):\\n     \\\"\\\"\\\"return conduit url, token and make sure they exist\\n \\n     Currently read from [auth] config section. In the future, it might\\n     make sense to read from .arcconfig and .arcrc as well.\\n     \\\"\\\"\\\"\\n     url = ui.config(b'phabricator', b'url')\\n     if not url:\\n         raise error.Abort(\\n             _(b'config %s.%s is required') % (b'phabricator', b'url')\\n         )\\n \\n     res = httpconnectionmod.readauthforuri(ui, url, util.url(url).user)\\n     token = None\\n \\n     if res:\\n         group, auth = res\\n \\n         ui.debug(b\\\"using auth.%s.* for authentication\\\\n\\\" % group)\\n \\n         token = auth.get(b'phabtoken')\\n \\n     if not token:\\n         raise error.Abort(\\n             _(b'Can\\\\'t find conduit token associated to %s') % (url,)\\n         )\\n \\n     return url, token\\n \\n \\n def callconduit(ui, name, params):\\n     \\\"\\\"\\\"call Conduit API, params is a dict. return json.loads result, or None\\\"\\\"\\\"\\n     host, token = readurltoken(ui)\\n     url, authinfo = util.url(b'\\/'.join([host, b'api', name])).authinfo()\\n     ui.debug(b'Conduit Call: %s %s\\\\n' % (url, pycompat.byterepr(params)))\\n     params = params.copy()\\n     params[b'__conduit__'] = {\\n         b'token': token,\\n     }\\n     rawdata = {\\n         b'params': templatefilters.json(params),\\n         b'output': b'json',\\n         b'__conduit__': 1,\\n     }\\n     data = urlencodenested(rawdata)\\n     curlcmd = ui.config(b'phabricator', b'curlcmd')\\n     if curlcmd:\\n         sin, sout = procutil.popen2(\\n             b'%s -d @- %s' % (curlcmd, procutil.shellquote(url))\\n         )\\n         sin.write(data)\\n         sin.close()\\n         body = sout.read()\\n     else:\\n         urlopener = urlmod.opener(ui, authinfo)\\n         request = util.urlreq.request(pycompat.strurl(url), data=data)\\n         with contextlib.closing(urlopener.open(request)) as rsp:\\n             body = rsp.read()\\n     ui.debug(b'Conduit Response: %s\\\\n' % body)\\n     parsed = pycompat.rapply(\\n         lambda x: encoding.unitolocal(x)\\n         if isinstance(x, pycompat.unicode)\\n         else x,\\n         # json.loads only accepts bytes from py3.6+\\n         pycompat.json_loads(encoding.unifromlocal(body)),\\n     )\\n     if parsed.get(b'error_code'):\\n         msg = _(b'Conduit Error (%s): %s') % (\\n             parsed[b'error_code'],\\n             parsed[b'error_info'],\\n         )\\n         raise error.Abort(msg)\\n     return parsed[b'result']\\n \\n \\n @vcrcommand(b'debugcallconduit', [], _(b'METHOD'), optionalrepo=True)\\n def debugcallconduit(ui, repo, name):\\n     \\\"\\\"\\\"call Conduit API\\n \\n     Call parameters are read from stdin as a JSON blob. Result will be written\\n     to stdout as a JSON blob.\\n     \\\"\\\"\\\"\\n     # json.loads only accepts bytes from 3.6+\\n     rawparams = encoding.unifromlocal(ui.fin.read())\\n     # json.loads only returns unicode strings\\n     params = pycompat.rapply(\\n         lambda x: encoding.unitolocal(x)\\n         if isinstance(x, pycompat.unicode)\\n         else x,\\n         pycompat.json_loads(rawparams),\\n     )\\n     # json.dumps only accepts unicode strings\\n     result = pycompat.rapply(\\n         lambda x: encoding.unifromlocal(x) if isinstance(x, bytes) else x,\\n         callconduit(ui, name, params),\\n     )\\n     s = json.dumps(result, sort_keys=True, indent=2, separators=(u',', u': '))\\n     ui.write(b'%s\\\\n' % encoding.unitolocal(s))\\n \\n \\n def getrepophid(repo):\\n     \\\"\\\"\\\"given callsign, return repository PHID or None\\\"\\\"\\\"\\n     # developer config: phabricator.repophid\\n     repophid = repo.ui.config(b'phabricator', b'repophid')\\n     if repophid:\\n         return repophid\\n     callsign = repo.ui.config(b'phabricator', b'callsign')\\n     if not callsign:\\n         return None\\n     query = callconduit(\\n         repo.ui,\\n         b'diffusion.repository.search',\\n         {b'constraints': {b'callsigns': [callsign]}},\\n     )\\n     if len(query[b'data']) == 0:\\n         return None\\n     repophid = query[b'data'][0][b'phid']\\n     repo.ui.setconfig(b'phabricator', b'repophid', repophid)\\n     return repophid\\n \\n \\n _differentialrevisiontagre = re.compile(br'\\\\AD([1-9][0-9]*)\\\\Z')\\n _differentialrevisiondescre = re.compile(\\n     br'^Differential Revision:\\\\s*(?P\\u003curl\\u003e(?:.*)D(?P\\u003cid\\u003e[1-9][0-9]*))$', re.M\\n )\\n \\n \\n def getoldnodedrevmap(repo, nodelist):\\n     \\\"\\\"\\\"find previous nodes that has been sent to Phabricator\\n \\n     return {node: (oldnode, Differential diff, Differential Revision ID)}\\n     for node in nodelist with known previous sent versions, or associated\\n     Differential Revision IDs. ``oldnode`` and ``Differential diff`` could\\n     be ``None``.\\n \\n     Examines commit messages like \\\"Differential Revision:\\\" to get the\\n     association information.\\n \\n     If such commit message line is not found, examines all precursors and their\\n     tags. Tags with format like \\\"D1234\\\" are considered a match and the node\\n     with that tag, and the number after \\\"D\\\" (ex. 1234) will be returned.\\n \\n     The ``old node``, if not None, is guaranteed to be the last diff of\\n     corresponding Differential Revision, and exist in the repo.\\n     \\\"\\\"\\\"\\n     unfi = repo.unfiltered()\\n     has_node = unfi.changelog.index.has_node\\n \\n     result = {}  # {node: (oldnode?, lastdiff?, drev)}\\n     toconfirm = {}  # {node: (force, {precnode}, drev)}\\n     for node in nodelist:\\n         ctx = unfi[node]\\n         # For tags like \\\"D123\\\", put them into \\\"toconfirm\\\" to verify later\\n         precnodes = list(obsutil.allpredecessors(unfi.obsstore, [node]))\\n         for n in precnodes:\\n             if has_node(n):\\n                 for tag in unfi.nodetags(n):\\n                     m = _differentialrevisiontagre.match(tag)\\n                     if m:\\n                         toconfirm[node] = (0, set(precnodes), int(m.group(1)))\\n                         break\\n                 else:\\n                     continue  # move to next predecessor\\n                 break  # found a tag, stop\\n         else:\\n             # Check commit message\\n             m = _differentialrevisiondescre.search(ctx.description())\\n             if m:\\n                 toconfirm[node] = (1, set(precnodes), int(m.group('id')))\\n \\n     # Double check if tags are genuine by collecting all old nodes from\\n     # Phabricator, and expect precursors overlap with it.\\n     if toconfirm:\\n         drevs = [drev for force, precs, drev in toconfirm.values()]\\n         alldiffs = callconduit(\\n             unfi.ui, b'differential.querydiffs', {b'revisionIDs': drevs}\\n         )\\n         getnode = lambda d: bin(getdiffmeta(d).get(b'node', b'')) or None\\n         for newnode, (force, precset, drev) in toconfirm.items():\\n             diffs = [\\n                 d for d in alldiffs.values() if int(d[b'revisionID']) == drev\\n             ]\\n \\n             # \\\"precursors\\\" as known by Phabricator\\n             phprecset = set(getnode(d) for d in diffs)\\n \\n             # Ignore if precursors (Phabricator and local repo) do not overlap,\\n             # and force is not set (when commit message says nothing)\\n             if not force and not bool(phprecset & precset):\\n                 tagname = b'D%d' % drev\\n                 tags.tag(\\n                     repo,\\n                     tagname,\\n                     nullid,\\n                     message=None,\\n                     user=None,\\n                     date=None,\\n                     local=True,\\n                 )\\n                 unfi.ui.warn(\\n                     _(\\n                         b'D%d: local tag removed - does not match '\\n                         b'Differential history\\\\n'\\n                     )\\n                     % drev\\n                 )\\n                 continue\\n \\n             # Find the last node using Phabricator metadata, and make sure it\\n             # exists in the repo\\n             oldnode = lastdiff = None\\n             if diffs:\\n                 lastdiff = max(diffs, key=lambda d: int(d[b'id']))\\n                 oldnode = getnode(lastdiff)\\n                 if oldnode and not has_node(oldnode):\\n                     oldnode = None\\n \\n             result[newnode] = (oldnode, lastdiff, drev)\\n \\n     return result\\n \\n \\n def getdrevmap(repo, revs):\\n     \\\"\\\"\\\"Return a dict mapping each rev in `revs` to their Differential Revision\\n     ID or None.\\n     \\\"\\\"\\\"\\n     result = {}\\n     for rev in revs:\\n         result[rev] = None\\n         ctx = repo[rev]\\n         # Check commit message\\n         m = _differentialrevisiondescre.search(ctx.description())\\n         if m:\\n             result[rev] = int(m.group('id'))\\n             continue\\n         # Check tags\\n         for tag in repo.nodetags(ctx.node()):\\n             m = _differentialrevisiontagre.match(tag)\\n             if m:\\n                 result[rev] = int(m.group(1))\\n                 break\\n \\n     return result\\n \\n \\n def getdiff(ctx, diffopts):\\n     \\\"\\\"\\\"plain-text diff without header (user, commit message, etc)\\\"\\\"\\\"\\n     output = util.stringio()\\n     for chunk, _label in patch.diffui(\\n         ctx.repo(), ctx.p1().node(), ctx.node(), None, opts=diffopts\\n     ):\\n         output.write(chunk)\\n     return output.getvalue()\\n \\n \\n class DiffChangeType(object):\\n     ADD = 1\\n     CHANGE = 2\\n     DELETE = 3\\n     MOVE_AWAY = 4\\n     COPY_AWAY = 5\\n     MOVE_HERE = 6\\n     COPY_HERE = 7\\n     MULTICOPY = 8\\n \\n \\n class DiffFileType(object):\\n     TEXT = 1\\n     IMAGE = 2\\n     BINARY = 3\\n \\n \\n @attr.s\\n class phabhunk(dict):\\n     \\\"\\\"\\\"Represents a Differential hunk, which is owned by a Differential change\\n     \\\"\\\"\\\"\\n \\n     oldOffset = attr.ib(default=0)  # camelcase-required\\n     oldLength = attr.ib(default=0)  # camelcase-required\\n     newOffset = attr.ib(default=0)  # camelcase-required\\n     newLength = attr.ib(default=0)  # camelcase-required\\n     corpus = attr.ib(default='')\\n     # These get added to the phabchange's equivalents\\n     addLines = attr.ib(default=0)  # camelcase-required\\n     delLines = attr.ib(default=0)  # camelcase-required\\n \\n \\n @attr.s\\n class phabchange(object):\\n     \\\"\\\"\\\"Represents a Differential change, owns Differential hunks and owned by a\\n     Differential diff.  Each one represents one file in a diff.\\n     \\\"\\\"\\\"\\n \\n     currentPath = attr.ib(default=None)  # camelcase-required\\n     oldPath = attr.ib(default=None)  # camelcase-required\\n     awayPaths = attr.ib(default=attr.Factory(list))  # camelcase-required\\n     metadata = attr.ib(default=attr.Factory(dict))\\n     oldProperties = attr.ib(default=attr.Factory(dict))  # camelcase-required\\n     newProperties = attr.ib(default=attr.Factory(dict))  # camelcase-required\\n     type = attr.ib(default=DiffChangeType.CHANGE)\\n     fileType = attr.ib(default=DiffFileType.TEXT)  # camelcase-required\\n     commitHash = attr.ib(default=None)  # camelcase-required\\n     addLines = attr.ib(default=0)  # camelcase-required\\n     delLines = attr.ib(default=0)  # camelcase-required\\n     hunks = attr.ib(default=attr.Factory(list))\\n \\n     def copynewmetadatatoold(self):\\n         for key in list(self.metadata.keys()):\\n             newkey = key.replace(b'new:', b'old:')\\n             self.metadata[newkey] = self.metadata[key]\\n \\n     def addoldmode(self, value):\\n         self.oldProperties[b'unix:filemode'] = value\\n \\n     def addnewmode(self, value):\\n         self.newProperties[b'unix:filemode'] = value\\n \\n     def addhunk(self, hunk):\\n         if not isinstance(hunk, phabhunk):\\n             raise error.Abort(b'phabchange.addhunk only takes phabhunks')\\n         self.hunks.append(pycompat.byteskwargs(attr.asdict(hunk)))\\n         # It's useful to include these stats since the Phab web UI shows them,\\n         # and uses them to estimate how large a change a Revision is. Also used\\n         # in email subjects for the [+++--] bit.\\n         self.addLines += hunk.addLines\\n         self.delLines += hunk.delLines\\n \\n \\n @attr.s\\n class phabdiff(object):\\n     \\\"\\\"\\\"Represents a Differential diff, owns Differential changes.  Corresponds\\n     to a commit.\\n     \\\"\\\"\\\"\\n \\n     # Doesn't seem to be any reason to send this (output of uname -n)\\n     sourceMachine = attr.ib(default=b'')  # camelcase-required\\n     sourcePath = attr.ib(default=b'\\/')  # camelcase-required\\n     sourceControlBaseRevision = attr.ib(default=b'0' * 40)  # camelcase-required\\n     sourceControlPath = attr.ib(default=b'\\/')  # camelcase-required\\n     sourceControlSystem = attr.ib(default=b'hg')  # camelcase-required\\n     branch = attr.ib(default=b'default')\\n     bookmark = attr.ib(default=None)\\n     creationMethod = attr.ib(default=b'phabsend')  # camelcase-required\\n     lintStatus = attr.ib(default=b'none')  # camelcase-required\\n     unitStatus = attr.ib(default=b'none')  # camelcase-required\\n     changes = attr.ib(default=attr.Factory(dict))\\n     repositoryPHID = attr.ib(default=None)  # camelcase-required\\n \\n     def addchange(self, change):\\n         if not isinstance(change, phabchange):\\n             raise error.Abort(b'phabdiff.addchange only takes phabchanges')\\n         self.changes[change.currentPath] = pycompat.byteskwargs(\\n             attr.asdict(change)\\n         )\\n \\n \\n def maketext(pchange, ctx, fname):\\n     \\\"\\\"\\\"populate the phabchange for a text file\\\"\\\"\\\"\\n     repo = ctx.repo()\\n     fmatcher = match.exact([fname])\\n     diffopts = mdiff.diffopts(git=True, context=32767)\\n     _pfctx, _fctx, header, fhunks = next(\\n         patch.diffhunks(repo, ctx.p1(), ctx, fmatcher, opts=diffopts)\\n     )\\n \\n     for fhunk in fhunks:\\n         (oldOffset, oldLength, newOffset, newLength), lines = fhunk\\n         corpus = b''.join(lines[1:])\\n         shunk = list(header)\\n         shunk.extend(lines)\\n         _mf, _mt, addLines, delLines, _hb = patch.diffstatsum(\\n             patch.diffstatdata(util.iterlines(shunk))\\n         )\\n         pchange.addhunk(\\n             phabhunk(\\n                 oldOffset,\\n                 oldLength,\\n                 newOffset,\\n                 newLength,\\n                 corpus,\\n                 addLines,\\n                 delLines,\\n             )\\n         )\\n \\n \\n def uploadchunks(fctx, fphid):\\n     \\\"\\\"\\\"upload large binary files as separate chunks.\\n     Phab requests chunking over 8MiB, and splits into 4MiB chunks\\n     \\\"\\\"\\\"\\n     ui = fctx.repo().ui\\n     chunks = callconduit(ui, b'file.querychunks', {b'filePHID': fphid})\\n     with ui.makeprogress(\\n         _(b'uploading file chunks'), unit=_(b'chunks'), total=len(chunks)\\n     ) as progress:\\n         for chunk in chunks:\\n             progress.increment()\\n             if chunk[b'complete']:\\n                 continue\\n             bstart = int(chunk[b'byteStart'])\\n             bend = int(chunk[b'byteEnd'])\\n             callconduit(\\n                 ui,\\n                 b'file.uploadchunk',\\n                 {\\n                     b'filePHID': fphid,\\n                     b'byteStart': bstart,\\n                     b'data': base64.b64encode(fctx.data()[bstart:bend]),\\n                     b'dataEncoding': b'base64',\\n                 },\\n             )\\n \\n \\n def uploadfile(fctx):\\n     \\\"\\\"\\\"upload binary files to Phabricator\\\"\\\"\\\"\\n     repo = fctx.repo()\\n     ui = repo.ui\\n     fname = fctx.path()\\n     size = fctx.size()\\n     fhash = pycompat.bytestr(hashlib.sha256(fctx.data()).hexdigest())\\n \\n     # an allocate call is required first to see if an upload is even required\\n     # (Phab might already have it) and to determine if chunking is needed\\n     allocateparams = {\\n         b'name': fname,\\n         b'contentLength': size,\\n         b'contentHash': fhash,\\n     }\\n     filealloc = callconduit(ui, b'file.allocate', allocateparams)\\n     fphid = filealloc[b'filePHID']\\n \\n     if filealloc[b'upload']:\\n         ui.write(_(b'uploading %s\\\\n') % bytes(fctx))\\n         if not fphid:\\n             uploadparams = {\\n                 b'name': fname,\\n                 b'data_base64': base64.b64encode(fctx.data()),\\n             }\\n             fphid = callconduit(ui, b'file.upload', uploadparams)\\n         else:\\n             uploadchunks(fctx, fphid)\\n     else:\\n         ui.debug(b'server already has %s\\\\n' % bytes(fctx))\\n \\n     if not fphid:\\n         raise error.Abort(b'Upload of %s failed.' % bytes(fctx))\\n \\n     return fphid\\n \\n \\n def addoldbinary(pchange, fctx):\\n     \\\"\\\"\\\"add the metadata for the previous version of a binary file to the\\n     phabchange for the new version\\n     \\\"\\\"\\\"\\n     oldfctx = fctx.p1()\\n     if fctx.cmp(oldfctx):\\n         # Files differ, add the old one\\n         pchange.metadata[b'old:file:size'] = oldfctx.size()\\n         mimeguess, _enc = mimetypes.guess_type(\\n             encoding.unifromlocal(oldfctx.path())\\n         )\\n         if mimeguess:\\n             pchange.metadata[b'old:file:mime-type'] = pycompat.bytestr(\\n                 mimeguess\\n             )\\n         fphid = uploadfile(oldfctx)\\n         pchange.metadata[b'old:binary-phid'] = fphid\\n     else:\\n         # If it's left as IMAGE\\/BINARY web UI might try to display it\\n         pchange.fileType = DiffFileType.TEXT\\n         pchange.copynewmetadatatoold()\\n \\n \\n def makebinary(pchange, fctx):\\n     \\\"\\\"\\\"populate the phabchange for a binary file\\\"\\\"\\\"\\n     pchange.fileType = DiffFileType.BINARY\\n     fphid = uploadfile(fctx)\\n     pchange.metadata[b'new:binary-phid'] = fphid\\n     pchange.metadata[b'new:file:size'] = fctx.size()\\n     mimeguess, _enc = mimetypes.guess_type(encoding.unifromlocal(fctx.path()))\\n     if mimeguess:\\n         mimeguess = pycompat.bytestr(mimeguess)\\n         pchange.metadata[b'new:file:mime-type'] = mimeguess\\n         if mimeguess.startswith(b'image\\/'):\\n             pchange.fileType = DiffFileType.IMAGE\\n \\n \\n # Copied from mercurial\\/patch.py\\n gitmode = {b'l': b'120000', b'x': b'100755', b'': b'100644'}\\n \\n \\n def notutf8(fctx):\\n     \\\"\\\"\\\"detect non-UTF-8 text files since Phabricator requires them to be marked\\n     as binary\\n     \\\"\\\"\\\"\\n     try:\\n         fctx.data().decode('utf-8')\\n         if fctx.parents():\\n             fctx.p1().data().decode('utf-8')\\n         return False\\n     except UnicodeDecodeError:\\n         fctx.repo().ui.write(\\n             _(b'file %s detected as non-UTF-8, marked as binary\\\\n')\\n             % fctx.path()\\n         )\\n         return True\\n \\n \\n def addremoved(pdiff, ctx, removed):\\n     \\\"\\\"\\\"add removed files to the phabdiff. Shouldn't include moves\\\"\\\"\\\"\\n     for fname in removed:\\n         pchange = phabchange(\\n             currentPath=fname, oldPath=fname, type=DiffChangeType.DELETE\\n         )\\n         pchange.addoldmode(gitmode[ctx.p1()[fname].flags()])\\n         fctx = ctx.p1()[fname]\\n         if not (fctx.isbinary() or notutf8(fctx)):\\n             maketext(pchange, ctx, fname)\\n \\n         pdiff.addchange(pchange)\\n \\n \\n def addmodified(pdiff, ctx, modified):\\n     \\\"\\\"\\\"add modified files to the phabdiff\\\"\\\"\\\"\\n     for fname in modified:\\n         fctx = ctx[fname]\\n         pchange = phabchange(currentPath=fname, oldPath=fname)\\n         filemode = gitmode[ctx[fname].flags()]\\n         originalmode = gitmode[ctx.p1()[fname].flags()]\\n         if filemode != originalmode:\\n             pchange.addoldmode(originalmode)\\n             pchange.addnewmode(filemode)\\n \\n         if fctx.isbinary() or notutf8(fctx):\\n             makebinary(pchange, fctx)\\n             addoldbinary(pchange, fctx)\\n         else:\\n             maketext(pchange, ctx, fname)\\n \\n         pdiff.addchange(pchange)\\n \\n \\n def addadded(pdiff, ctx, added, removed):\\n     \\\"\\\"\\\"add file adds to the phabdiff, both new files and copies\\/moves\\\"\\\"\\\"\\n     # Keep track of files that've been recorded as moved\\/copied, so if there are\\n     # additional copies we can mark them (moves get removed from removed)\\n     copiedchanges = {}\\n     movedchanges = {}\\n     for fname in added:\\n         fctx = ctx[fname]\\n         pchange = phabchange(currentPath=fname)\\n \\n         filemode = gitmode[ctx[fname].flags()]\\n         renamed = fctx.renamed()\\n \\n         if renamed:\\n             originalfname = renamed[0]\\n             originalmode = gitmode[ctx.p1()[originalfname].flags()]\\n             pchange.oldPath = originalfname\\n \\n             if originalfname in removed:\\n                 origpchange = phabchange(\\n                     currentPath=originalfname,\\n                     oldPath=originalfname,\\n                     type=DiffChangeType.MOVE_AWAY,\\n                     awayPaths=[fname],\\n                 )\\n                 movedchanges[originalfname] = origpchange\\n                 removed.remove(originalfname)\\n                 pchange.type = DiffChangeType.MOVE_HERE\\n             elif originalfname in movedchanges:\\n                 movedchanges[originalfname].type = DiffChangeType.MULTICOPY\\n                 movedchanges[originalfname].awayPaths.append(fname)\\n                 pchange.type = DiffChangeType.COPY_HERE\\n             else:  # pure copy\\n                 if originalfname not in copiedchanges:\\n                     origpchange = phabchange(\\n                         currentPath=originalfname, type=DiffChangeType.COPY_AWAY\\n                     )\\n                     copiedchanges[originalfname] = origpchange\\n                 else:\\n                     origpchange = copiedchanges[originalfname]\\n                 origpchange.awayPaths.append(fname)\\n                 pchange.type = DiffChangeType.COPY_HERE\\n \\n             if filemode != originalmode:\\n                 pchange.addoldmode(originalmode)\\n                 pchange.addnewmode(filemode)\\n         else:  # Brand-new file\\n             pchange.addnewmode(gitmode[fctx.flags()])\\n             pchange.type = DiffChangeType.ADD\\n \\n         if fctx.isbinary() or notutf8(fctx):\\n             makebinary(pchange, fctx)\\n             if renamed:\\n                 addoldbinary(pchange, fctx)\\n         else:\\n             maketext(pchange, ctx, fname)\\n \\n         pdiff.addchange(pchange)\\n \\n     for _path, copiedchange in copiedchanges.items():\\n         pdiff.addchange(copiedchange)\\n     for _path, movedchange in movedchanges.items():\\n         pdiff.addchange(movedchange)\\n \\n \\n def creatediff(ctx):\\n     \\\"\\\"\\\"create a Differential Diff\\\"\\\"\\\"\\n     repo = ctx.repo()\\n     repophid = getrepophid(repo)\\n     # Create a \\\"Differential Diff\\\" via \\\"differential.creatediff\\\" API\\n     pdiff = phabdiff(\\n         sourceControlBaseRevision=b'%s' % ctx.p1().hex(),\\n         branch=b'%s' % ctx.branch(),\\n     )\\n     modified, added, removed, _d, _u, _i, _c = ctx.p1().status(ctx)\\n     # addadded will remove moved files from removed, so addremoved won't get\\n     # them\\n     addadded(pdiff, ctx, added, removed)\\n     addmodified(pdiff, ctx, modified)\\n     addremoved(pdiff, ctx, removed)\\n     if repophid:\\n         pdiff.repositoryPHID = repophid\\n     diff = callconduit(\\n         repo.ui,\\n         b'differential.creatediff',\\n         pycompat.byteskwargs(attr.asdict(pdiff)),\\n     )\\n     if not diff:\\n         raise error.Abort(_(b'cannot create diff for %s') % ctx)\\n     return diff\\n \\n \\n def writediffproperties(ctx, diff):\\n     \\\"\\\"\\\"write metadata to diff so patches could be applied losslessly\\\"\\\"\\\"\\n     # creatediff returns with a diffid but query returns with an id\\n     diffid = diff.get(b'diffid', diff.get(b'id'))\\n     params = {\\n         b'diff_id': diffid,\\n         b'name': b'hg:meta',\\n         b'data': templatefilters.json(\\n             {\\n                 b'user': ctx.user(),\\n                 b'date': b'%d %d' % ctx.date(),\\n                 b'branch': ctx.branch(),\\n                 b'node': ctx.hex(),\\n                 b'parent': ctx.p1().hex(),\\n             }\\n         ),\\n     }\\n     callconduit(ctx.repo().ui, b'differential.setdiffproperty', params)\\n \\n     params = {\\n         b'diff_id': diffid,\\n         b'name': b'local:commits',\\n         b'data': templatefilters.json(\\n             {\\n                 ctx.hex(): {\\n                     b'author': stringutil.person(ctx.user()),\\n                     b'authorEmail': stringutil.email(ctx.user()),\\n                     b'time': int(ctx.date()[0]),\\n                     b'commit': ctx.hex(),\\n                     b'parents': [ctx.p1().hex()],\\n                     b'branch': ctx.branch(),\\n                 },\\n             }\\n         ),\\n     }\\n     callconduit(ctx.repo().ui, b'differential.setdiffproperty', params)\\n \\n \\n def createdifferentialrevision(\\n     ctx,\\n     revid=None,\\n     parentrevphid=None,\\n     oldnode=None,\\n     olddiff=None,\\n     actions=None,\\n     comment=None,\\n ):\\n     \\\"\\\"\\\"create or update a Differential Revision\\n \\n     If revid is None, create a new Differential Revision, otherwise update\\n     revid. If parentrevphid is not None, set it as a dependency.\\n \\n     If oldnode is not None, check if the patch content (without commit message\\n     and metadata) has changed before creating another diff.\\n \\n     If actions is not None, they will be appended to the transaction.\\n     \\\"\\\"\\\"\\n     repo = ctx.repo()\\n     if oldnode:\\n         diffopts = mdiff.diffopts(git=True, context=32767)\\n         oldctx = repo.unfiltered()[oldnode]\\n         neednewdiff = getdiff(ctx, diffopts) != getdiff(oldctx, diffopts)\\n     else:\\n         neednewdiff = True\\n \\n     transactions = []\\n     if neednewdiff:\\n         diff = creatediff(ctx)\\n         transactions.append({b'type': b'update', b'value': diff[b'phid']})\\n         if comment:\\n             transactions.append({b'type': b'comment', b'value': comment})\\n     else:\\n         # Even if we don't need to upload a new diff because the patch content\\n         # does not change. We might still need to update its metadata so\\n         # pushers could know the correct node metadata.\\n         assert olddiff\\n         diff = olddiff\\n     writediffproperties(ctx, diff)\\n \\n     # Set the parent Revision every time, so commit re-ordering is picked-up\\n     if parentrevphid:\\n         transactions.append(\\n             {b'type': b'parents.set', b'value': [parentrevphid]}\\n         )\\n \\n     if actions:\\n         transactions += actions\\n \\n     # Parse commit message and update related fields.\\n     desc = ctx.description()\\n     info = callconduit(\\n         repo.ui, b'differential.parsecommitmessage', {b'corpus': desc}\\n     )\\n     for k, v in info[b'fields'].items():\\n         if k in [b'title', b'summary', b'testPlan']:\\n             transactions.append({b'type': k, b'value': v})\\n \\n     params = {b'transactions': transactions}\\n     if revid is not None:\\n         # Update an existing Differential Revision\\n         params[b'objectIdentifier'] = revid\\n \\n     revision = callconduit(repo.ui, b'differential.revision.edit', params)\\n     if not revision:\\n         raise error.Abort(_(b'cannot create revision for %s') % ctx)\\n \\n     return revision, diff\\n \\n \\n def userphids(repo, names):\\n     \\\"\\\"\\\"convert user names to PHIDs\\\"\\\"\\\"\\n     names = [name.lower() for name in names]\\n     query = {b'constraints': {b'usernames': names}}\\n     result = callconduit(repo.ui, b'user.search', query)\\n     # username not found is not an error of the API. So check if we have missed\\n     # some names here.\\n     data = result[b'data']\\n     resolved = set(entry[b'fields'][b'username'].lower() for entry in data)\\n     unresolved = set(names) - resolved\\n     if unresolved:\\n         raise error.Abort(\\n             _(b'unknown username: %s') % b' '.join(sorted(unresolved))\\n         )\\n     return [entry[b'phid'] for entry in data]\\n \\n \\n @vcrcommand(\\n     b'phabsend',\\n     [\\n         (b'r', b'rev', [], _(b'revisions to send'), _(b'REV')),\\n         (b'', b'amend', True, _(b'update commit messages')),\\n         (b'', b'reviewer', [], _(b'specify reviewers')),\\n         (b'', b'blocker', [], _(b'specify blocking reviewers')),\\n         (\\n             b'm',\\n             b'comment',\\n             b'',\\n             _(b'add a comment to Revisions with new\\/updated Diffs'),\\n         ),\\n         (b'', b'confirm', None, _(b'ask for confirmation before sending')),\\n     ],\\n     _(b'REV [OPTIONS]'),\\n     helpcategory=command.CATEGORY_IMPORT_EXPORT,\\n )\\n def phabsend(ui, repo, *revs, **opts):\\n     \\\"\\\"\\\"upload changesets to Phabricator\\n \\n     If there are multiple revisions specified, they will be send as a stack\\n     with a linear dependencies relationship using the order specified by the\\n     revset.\\n \\n     For the first time uploading changesets, local tags will be created to\\n     maintain the association. After the first time, phabsend will check\\n     obsstore and tags information so it can figure out whether to update an\\n     existing Differential Revision, or create a new one.\\n \\n     If --amend is set, update commit messages so they have the\\n     ``Differential Revision`` URL, remove related tags. This is similar to what\\n     arcanist will do, and is more desired in author-push workflows. Otherwise,\\n     use local tags to record the ``Differential Revision`` association.\\n \\n     The --confirm option lets you confirm changesets before sending them. You\\n     can also add following to your configuration file to make it default\\n     behaviour::\\n \\n         [phabsend]\\n         confirm = true\\n \\n     phabsend will check obsstore and the above association to decide whether to\\n     update an existing Differential Revision, or create a new one.\\n     \\\"\\\"\\\"\\n     opts = pycompat.byteskwargs(opts)\\n     revs = list(revs) + opts.get(b'rev', [])\\n     revs = scmutil.revrange(repo, revs)\\n     revs.sort()  # ascending order to preserve topological parent\\/child in phab\\n \\n     if not revs:\\n         raise error.Abort(_(b'phabsend requires at least one changeset'))\\n     if opts.get(b'amend'):\\n         cmdutil.checkunfinished(repo)\\n \\n     # {newnode: (oldnode, olddiff, olddrev}\\n     oldmap = getoldnodedrevmap(repo, [repo[r].node() for r in revs])\\n \\n     confirm = ui.configbool(b'phabsend', b'confirm')\\n     confirm |= bool(opts.get(b'confirm'))\\n     if confirm:\\n         confirmed = _confirmbeforesend(repo, revs, oldmap)\\n         if not confirmed:\\n             raise error.Abort(_(b'phabsend cancelled'))\\n \\n     actions = []\\n     reviewers = opts.get(b'reviewer', [])\\n     blockers = opts.get(b'blocker', [])\\n     phids = []\\n     if reviewers:\\n         phids.extend(userphids(repo, reviewers))\\n     if blockers:\\n         phids.extend(\\n             map(lambda phid: b'blocking(%s)' % phid, userphids(repo, blockers))\\n         )\\n     if phids:\\n         actions.append({b'type': b'reviewers.add', b'value': phids})\\n \\n     drevids = []  # [int]\\n     diffmap = {}  # {newnode: diff}\\n \\n     # Send patches one by one so we know their Differential Revision PHIDs and\\n     # can provide dependency relationship\\n     lastrevphid = None\\n     for rev in revs:\\n         ui.debug(b'sending rev %d\\\\n' % rev)\\n         ctx = repo[rev]\\n \\n         # Get Differential Revision ID\\n         oldnode, olddiff, revid = oldmap.get(ctx.node(), (None, None, None))\\n         if oldnode != ctx.node() or opts.get(b'amend'):\\n             # Create or update Differential Revision\\n             revision, diff = createdifferentialrevision(\\n                 ctx,\\n                 revid,\\n                 lastrevphid,\\n                 oldnode,\\n                 olddiff,\\n                 actions,\\n                 opts.get(b'comment'),\\n             )\\n             diffmap[ctx.node()] = diff\\n             newrevid = int(revision[b'object'][b'id'])\\n             newrevphid = revision[b'object'][b'phid']\\n             if revid:\\n                 action = b'updated'\\n             else:\\n                 action = b'created'\\n \\n             # Create a local tag to note the association, if commit message\\n             # does not have it already\\n             m = _differentialrevisiondescre.search(ctx.description())\\n             if not m or int(m.group('id')) != newrevid:\\n                 tagname = b'D%d' % newrevid\\n                 tags.tag(\\n                     repo,\\n                     tagname,\\n                     ctx.node(),\\n                     message=None,\\n                     user=None,\\n                     date=None,\\n                     local=True,\\n                 )\\n         else:\\n             # Nothing changed. But still set \\\"newrevphid\\\" so the next revision\\n             # could depend on this one and \\\"newrevid\\\" for the summary line.\\n-            newrevphid = querydrev(repo, b'%d' % revid)[0][b'phid']\\n+            newrevphid = querydrev(repo.ui, b'%d' % revid)[0][b'phid']\\n             newrevid = revid\\n             action = b'skipped'\\n \\n         actiondesc = ui.label(\\n             {\\n                 b'created': _(b'created'),\\n                 b'skipped': _(b'skipped'),\\n                 b'updated': _(b'updated'),\\n             }[action],\\n             b'phabricator.action.%s' % action,\\n         )\\n         drevdesc = ui.label(b'D%d' % newrevid, b'phabricator.drev')\\n         nodedesc = ui.label(bytes(ctx), b'phabricator.node')\\n         desc = ui.label(ctx.description().split(b'\\\\n')[0], b'phabricator.desc')\\n         ui.write(\\n             _(b'%s - %s - %s: %s\\\\n') % (drevdesc, actiondesc, nodedesc, desc)\\n         )\\n         drevids.append(newrevid)\\n         lastrevphid = newrevphid\\n \\n     # Update commit messages and remove tags\\n     if opts.get(b'amend'):\\n         unfi = repo.unfiltered()\\n         drevs = callconduit(ui, b'differential.query', {b'ids': drevids})\\n         with repo.wlock(), repo.lock(), repo.transaction(b'phabsend'):\\n             wnode = unfi[b'.'].node()\\n             mapping = {}  # {oldnode: [newnode]}\\n             for i, rev in enumerate(revs):\\n                 old = unfi[rev]\\n                 drevid = drevids[i]\\n                 drev = [d for d in drevs if int(d[b'id']) == drevid][0]\\n                 newdesc = getdescfromdrev(drev)\\n                 # Make sure commit message contain \\\"Differential Revision\\\"\\n                 if old.description() != newdesc:\\n                     if old.phase() == phases.public:\\n                         ui.warn(\\n                             _(b\\\"warning: not updating public commit %s\\\\n\\\")\\n                             % scmutil.formatchangeid(old)\\n                         )\\n                         continue\\n                     parents = [\\n                         mapping.get(old.p1().node(), (old.p1(),))[0],\\n                         mapping.get(old.p2().node(), (old.p2(),))[0],\\n                     ]\\n                     new = context.metadataonlyctx(\\n                         repo,\\n                         old,\\n                         parents=parents,\\n                         text=newdesc,\\n                         user=old.user(),\\n                         date=old.date(),\\n                         extra=old.extra(),\\n                     )\\n \\n                     newnode = new.commit()\\n \\n                     mapping[old.node()] = [newnode]\\n                     # Update diff property\\n                     # If it fails just warn and keep going, otherwise the DREV\\n                     # associations will be lost\\n                     try:\\n                         writediffproperties(unfi[newnode], diffmap[old.node()])\\n                     except util.urlerr.urlerror:\\n                         ui.warnnoi18n(\\n                             b'Failed to update metadata for D%d\\\\n' % drevid\\n                         )\\n                 # Remove local tags since it's no longer necessary\\n                 tagname = b'D%d' % drevid\\n                 if tagname in repo.tags():\\n                     tags.tag(\\n                         repo,\\n                         tagname,\\n                         nullid,\\n                         message=None,\\n                         user=None,\\n                         date=None,\\n                         local=True,\\n                     )\\n             scmutil.cleanupnodes(repo, mapping, b'phabsend', fixphase=True)\\n             if wnode in mapping:\\n                 unfi.setparents(mapping[wnode][0])\\n \\n \\n # Map from \\\"hg:meta\\\" keys to header understood by \\\"hg import\\\". The order is\\n # consistent with \\\"hg export\\\" output.\\n _metanamemap = util.sortdict(\\n     [\\n         (b'user', b'User'),\\n         (b'date', b'Date'),\\n         (b'branch', b'Branch'),\\n         (b'node', b'Node ID'),\\n         (b'parent', b'Parent '),\\n     ]\\n )\\n \\n \\n def _confirmbeforesend(repo, revs, oldmap):\\n     url, token = readurltoken(repo.ui)\\n     ui = repo.ui\\n     for rev in revs:\\n         ctx = repo[rev]\\n         desc = ctx.description().splitlines()[0]\\n         oldnode, olddiff, drevid = oldmap.get(ctx.node(), (None, None, None))\\n         if drevid:\\n             drevdesc = ui.label(b'D%d' % drevid, b'phabricator.drev')\\n         else:\\n             drevdesc = ui.label(_(b'NEW'), b'phabricator.drev')\\n \\n         ui.write(\\n             _(b'%s - %s: %s\\\\n')\\n             % (\\n                 drevdesc,\\n                 ui.label(bytes(ctx), b'phabricator.node'),\\n                 ui.label(desc, b'phabricator.desc'),\\n             )\\n         )\\n \\n     if ui.promptchoice(\\n         _(b'Send the above changes to %s (yn)?$$ &Yes $$ &No') % url\\n     ):\\n         return False\\n \\n     return True\\n \\n \\n _knownstatusnames = {\\n     b'accepted',\\n     b'needsreview',\\n     b'needsrevision',\\n     b'closed',\\n     b'abandoned',\\n     b'changesplanned',\\n }\\n \\n \\n def _getstatusname(drev):\\n     \\\"\\\"\\\"get normalized status name from a Differential Revision\\\"\\\"\\\"\\n     return drev[b'statusName'].replace(b' ', b'').lower()\\n \\n \\n # Small language to specify differential revisions. Support symbols: (), :X,\\n # +, and -.\\n \\n _elements = {\\n     # token-type: binding-strength, primary, prefix, infix, suffix\\n     b'(': (12, None, (b'group', 1, b')'), None, None),\\n     b':': (8, None, (b'ancestors', 8), None, None),\\n     b'&': (5, None, None, (b'and_', 5), None),\\n     b'+': (4, None, None, (b'add', 4), None),\\n     b'-': (4, None, None, (b'sub', 4), None),\\n     b')': (0, None, None, None, None),\\n     b'symbol': (0, b'symbol', None, None, None),\\n     b'end': (0, None, None, None, None),\\n }\\n \\n \\n def _tokenize(text):\\n     view = memoryview(text)  # zero-copy slice\\n     special = b'():+-& '\\n     pos = 0\\n     length = len(text)\\n     while pos \\u003c length:\\n         symbol = b''.join(\\n             itertools.takewhile(\\n                 lambda ch: ch not in special, pycompat.iterbytestr(view[pos:])\\n             )\\n         )\\n         if symbol:\\n             yield (b'symbol', symbol, pos)\\n             pos += len(symbol)\\n         else:  # special char, ignore space\\n             if text[pos : pos + 1] != b' ':\\n                 yield (text[pos : pos + 1], None, pos)\\n             pos += 1\\n     yield (b'end', None, pos)\\n \\n \\n def _parse(text):\\n     tree, pos = parser.parser(_elements).parse(_tokenize(text))\\n     if pos != len(text):\\n         raise error.ParseError(b'invalid token', pos)\\n     return tree\\n \\n \\n def _parsedrev(symbol):\\n     \\\"\\\"\\\"str -\\u003e int or None, ex. 'D45' -\\u003e 45; '12' -\\u003e 12; 'x' -\\u003e None\\\"\\\"\\\"\\n     if symbol.startswith(b'D') and symbol[1:].isdigit():\\n         return int(symbol[1:])\\n     if symbol.isdigit():\\n         return int(symbol)\\n \\n \\n def _prefetchdrevs(tree):\\n     \\\"\\\"\\\"return ({single-drev-id}, {ancestor-drev-id}) to prefetch\\\"\\\"\\\"\\n     drevs = set()\\n     ancestordrevs = set()\\n     op = tree[0]\\n     if op == b'symbol':\\n         r = _parsedrev(tree[1])\\n         if r:\\n             drevs.add(r)\\n     elif op == b'ancestors':\\n         r, a = _prefetchdrevs(tree[1])\\n         drevs.update(r)\\n         ancestordrevs.update(r)\\n         ancestordrevs.update(a)\\n     else:\\n         for t in tree[1:]:\\n             r, a = _prefetchdrevs(t)\\n             drevs.update(r)\\n             ancestordrevs.update(a)\\n     return drevs, ancestordrevs\\n \\n \\n-def querydrev(repo, spec):\\n+def querydrev(ui, spec):\\n     \\\"\\\"\\\"return a list of \\\"Differential Revision\\\" dicts\\n \\n     spec is a string using a simple query language, see docstring in phabread\\n     for details.\\n \\n     A \\\"Differential Revision dict\\\" looks like:\\n \\n         {\\n             \\\"activeDiffPHID\\\": \\\"PHID-DIFF-xoqnjkobbm6k4dk6hi72\\\",\\n             \\\"authorPHID\\\": \\\"PHID-USER-tv3ohwc4v4jeu34otlye\\\",\\n             \\\"auxiliary\\\": {\\n               \\\"phabricator:depends-on\\\": [\\n                 \\\"PHID-DREV-gbapp366kutjebt7agcd\\\"\\n               ]\\n               \\\"phabricator:projects\\\": [],\\n             },\\n             \\\"branch\\\": \\\"default\\\",\\n             \\\"ccs\\\": [],\\n             \\\"commits\\\": [],\\n             \\\"dateCreated\\\": \\\"1499181406\\\",\\n             \\\"dateModified\\\": \\\"1499182103\\\",\\n             \\\"diffs\\\": [\\n               \\\"3\\\",\\n               \\\"4\\\",\\n             ],\\n             \\\"hashes\\\": [],\\n             \\\"id\\\": \\\"2\\\",\\n             \\\"lineCount\\\": \\\"2\\\",\\n             \\\"phid\\\": \\\"PHID-DREV-672qvysjcczopag46qty\\\",\\n             \\\"properties\\\": {},\\n             \\\"repositoryPHID\\\": \\\"PHID-REPO-hub2hx62ieuqeheznasv\\\",\\n             \\\"reviewers\\\": [],\\n             \\\"sourcePath\\\": null\\n             \\\"status\\\": \\\"0\\\",\\n             \\\"statusName\\\": \\\"Needs Review\\\",\\n             \\\"summary\\\": \\\"\\\",\\n             \\\"testPlan\\\": \\\"\\\",\\n             \\\"title\\\": \\\"example\\\",\\n             \\\"uri\\\": \\\"https:\\/\\/phab.example.com\\/D2\\\",\\n         }\\n     \\\"\\\"\\\"\\n     # TODO: replace differential.query and differential.querydiffs with\\n     # differential.diff.search because the former (and their output) are\\n     # frozen, and planned to be deprecated and removed.\\n \\n     def fetch(params):\\n         \\\"\\\"\\\"params -\\u003e single drev or None\\\"\\\"\\\"\\n         key = (params.get(b'ids') or params.get(b'phids') or [None])[0]\\n         if key in prefetched:\\n             return prefetched[key]\\n-        drevs = callconduit(repo.ui, b'differential.query', params)\\n+        drevs = callconduit(ui, b'differential.query', params)\\n         # Fill prefetched with the result\\n         for drev in drevs:\\n             prefetched[drev[b'phid']] = drev\\n             prefetched[int(drev[b'id'])] = drev\\n         if key not in prefetched:\\n             raise error.Abort(\\n                 _(b'cannot get Differential Revision %r') % params\\n             )\\n         return prefetched[key]\\n \\n     def getstack(topdrevids):\\n         \\\"\\\"\\\"given a top, get a stack from the bottom, [id] -\\u003e [id]\\\"\\\"\\\"\\n         visited = set()\\n         result = []\\n         queue = [{b'ids': [i]} for i in topdrevids]\\n         while queue:\\n             params = queue.pop()\\n             drev = fetch(params)\\n             if drev[b'id'] in visited:\\n                 continue\\n             visited.add(drev[b'id'])\\n             result.append(int(drev[b'id']))\\n             auxiliary = drev.get(b'auxiliary', {})\\n             depends = auxiliary.get(b'phabricator:depends-on', [])\\n             for phid in depends:\\n                 queue.append({b'phids': [phid]})\\n         result.reverse()\\n         return smartset.baseset(result)\\n \\n     # Initialize prefetch cache\\n     prefetched = {}  # {id or phid: drev}\\n \\n     tree = _parse(spec)\\n     drevs, ancestordrevs = _prefetchdrevs(tree)\\n \\n     # developer config: phabricator.batchsize\\n-    batchsize = repo.ui.configint(b'phabricator', b'batchsize')\\n+    batchsize = ui.configint(b'phabricator', b'batchsize')\\n \\n     # Prefetch Differential Revisions in batch\\n     tofetch = set(drevs)\\n     for r in ancestordrevs:\\n         tofetch.update(range(max(1, r - batchsize), r + 1))\\n     if drevs:\\n         fetch({b'ids': list(tofetch)})\\n     validids = sorted(set(getstack(list(ancestordrevs))) | set(drevs))\\n \\n     # Walk through the tree, return smartsets\\n     def walk(tree):\\n         op = tree[0]\\n         if op == b'symbol':\\n             drev = _parsedrev(tree[1])\\n             if drev:\\n                 return smartset.baseset([drev])\\n             elif tree[1] in _knownstatusnames:\\n                 drevs = [\\n                     r\\n                     for r in validids\\n                     if _getstatusname(prefetched[r]) == tree[1]\\n                 ]\\n                 return smartset.baseset(drevs)\\n             else:\\n                 raise error.Abort(_(b'unknown symbol: %s') % tree[1])\\n         elif op in {b'and_', b'add', b'sub'}:\\n             assert len(tree) == 3\\n             return getattr(operator, op)(walk(tree[1]), walk(tree[2]))\\n         elif op == b'group':\\n             return walk(tree[1])\\n         elif op == b'ancestors':\\n             return getstack(walk(tree[1]))\\n         else:\\n             raise error.ProgrammingError(b'illegal tree: %r' % tree)\\n \\n     return [prefetched[r] for r in walk(tree)]\\n \\n \\n def getdescfromdrev(drev):\\n     \\\"\\\"\\\"get description (commit message) from \\\"Differential Revision\\\"\\n \\n     This is similar to differential.getcommitmessage API. But we only care\\n     about limited fields: title, summary, test plan, and URL.\\n     \\\"\\\"\\\"\\n     title = drev[b'title']\\n     summary = drev[b'summary'].rstrip()\\n     testplan = drev[b'testPlan'].rstrip()\\n     if testplan:\\n         testplan = b'Test Plan:\\\\n%s' % testplan\\n     uri = b'Differential Revision: %s' % drev[b'uri']\\n     return b'\\\\n\\\\n'.join(filter(None, [title, summary, testplan, uri]))\\n \\n \\n def getdiffmeta(diff):\\n     \\\"\\\"\\\"get commit metadata (date, node, user, p1) from a diff object\\n \\n     The metadata could be \\\"hg:meta\\\", sent by phabsend, like:\\n \\n         \\\"properties\\\": {\\n           \\\"hg:meta\\\": {\\n             \\\"branch\\\": \\\"default\\\",\\n             \\\"date\\\": \\\"1499571514 25200\\\",\\n             \\\"node\\\": \\\"98c08acae292b2faf60a279b4189beb6cff1414d\\\",\\n             \\\"user\\\": \\\"Foo Bar \\u003cfoo@example.com\\u003e\\\",\\n             \\\"parent\\\": \\\"6d0abad76b30e4724a37ab8721d630394070fe16\\\"\\n           }\\n         }\\n \\n     Or converted from \\\"local:commits\\\", sent by \\\"arc\\\", like:\\n \\n         \\\"properties\\\": {\\n           \\\"local:commits\\\": {\\n             \\\"98c08acae292b2faf60a279b4189beb6cff1414d\\\": {\\n               \\\"author\\\": \\\"Foo Bar\\\",\\n               \\\"authorEmail\\\": \\\"foo@example.com\\\"\\n               \\\"branch\\\": \\\"default\\\",\\n               \\\"commit\\\": \\\"98c08acae292b2faf60a279b4189beb6cff1414d\\\",\\n               \\\"local\\\": \\\"1000\\\",\\n               \\\"message\\\": \\\"...\\\",\\n               \\\"parents\\\": [\\\"6d0abad76b30e4724a37ab8721d630394070fe16\\\"],\\n               \\\"rev\\\": \\\"98c08acae292b2faf60a279b4189beb6cff1414d\\\",\\n               \\\"summary\\\": \\\"...\\\",\\n               \\\"tag\\\": \\\"\\\",\\n               \\\"time\\\": 1499546314,\\n             }\\n           }\\n         }\\n \\n     Note: metadata extracted from \\\"local:commits\\\" will lose time zone\\n     information.\\n     \\\"\\\"\\\"\\n     props = diff.get(b'properties') or {}\\n     meta = props.get(b'hg:meta')\\n     if not meta:\\n         if props.get(b'local:commits'):\\n             commit = sorted(props[b'local:commits'].values())[0]\\n             meta = {}\\n             if b'author' in commit and b'authorEmail' in commit:\\n                 meta[b'user'] = b'%s \\u003c%s\\u003e' % (\\n                     commit[b'author'],\\n                     commit[b'authorEmail'],\\n                 )\\n             if b'time' in commit:\\n                 meta[b'date'] = b'%d 0' % int(commit[b'time'])\\n             if b'branch' in commit:\\n                 meta[b'branch'] = commit[b'branch']\\n             node = commit.get(b'commit', commit.get(b'rev'))\\n             if node:\\n                 meta[b'node'] = node\\n             if len(commit.get(b'parents', ())) \\u003e= 1:\\n                 meta[b'parent'] = commit[b'parents'][0]\\n         else:\\n             meta = {}\\n     if b'date' not in meta and b'dateCreated' in diff:\\n         meta[b'date'] = b'%s 0' % diff[b'dateCreated']\\n     if b'branch' not in meta and diff.get(b'branch'):\\n         meta[b'branch'] = diff[b'branch']\\n     if b'parent' not in meta and diff.get(b'sourceControlBaseRevision'):\\n         meta[b'parent'] = diff[b'sourceControlBaseRevision']\\n     return meta\\n \\n \\n def readpatch(ui, drevs, write):\\n     \\\"\\\"\\\"generate plain-text patch readable by 'hg import'\\n \\n     write is usually ui.write. drevs is what \\\"querydrev\\\" returns, results of\\n     \\\"differential.query\\\".\\n     \\\"\\\"\\\"\\n     # Prefetch hg:meta property for all diffs\\n     diffids = sorted(set(max(int(v) for v in drev[b'diffs']) for drev in drevs))\\n     diffs = callconduit(ui, b'differential.querydiffs', {b'ids': diffids})\\n \\n     # Generate patch for each drev\\n     for drev in drevs:\\n         ui.note(_(b'reading D%s\\\\n') % drev[b'id'])\\n \\n         diffid = max(int(v) for v in drev[b'diffs'])\\n         body = callconduit(ui, b'differential.getrawdiff', {b'diffID': diffid})\\n         desc = getdescfromdrev(drev)\\n         header = b'# HG changeset patch\\\\n'\\n \\n         # Try to preserve metadata from hg:meta property. Write hg patch\\n         # headers that can be read by the \\\"import\\\" command. See patchheadermap\\n         # and extract in mercurial\\/patch.py for supported headers.\\n         meta = getdiffmeta(diffs[b'%d' % diffid])\\n         for k in _metanamemap.keys():\\n             if k in meta:\\n                 header += b'# %s %s\\\\n' % (_metanamemap[k], meta[k])\\n \\n         content = b'%s%s\\\\n%s' % (header, desc, body)\\n         write(content)\\n \\n \\n @vcrcommand(\\n     b'phabread',\\n     [(b'', b'stack', False, _(b'read dependencies'))],\\n     _(b'DREVSPEC [OPTIONS]'),\\n     helpcategory=command.CATEGORY_IMPORT_EXPORT,\\n )\\n def phabread(ui, repo, spec, **opts):\\n     \\\"\\\"\\\"print patches from Phabricator suitable for importing\\n \\n     DREVSPEC could be a Differential Revision identity, like ``D123``, or just\\n     the number ``123``. It could also have common operators like ``+``, ``-``,\\n     ``&``, ``(``, ``)`` for complex queries. Prefix ``:`` could be used to\\n     select a stack.\\n \\n     ``abandoned``, ``accepted``, ``closed``, ``needsreview``, ``needsrevision``\\n     could be used to filter patches by status. For performance reason, they\\n     only represent a subset of non-status selections and cannot be used alone.\\n \\n     For example, ``:D6+8-(2+D4)`` selects a stack up to D6, plus D8 and exclude\\n     D2 and D4. ``:D9 & needsreview`` selects \\\"Needs Review\\\" revisions in a\\n     stack up to D9.\\n \\n     If --stack is given, follow dependencies information and read all patches.\\n     It is equivalent to the ``:`` operator.\\n     \\\"\\\"\\\"\\n     opts = pycompat.byteskwargs(opts)\\n     if opts.get(b'stack'):\\n         spec = b':(%s)' % spec\\n-    drevs = querydrev(repo, spec)\\n+    drevs = querydrev(repo.ui, spec)\\n     readpatch(repo.ui, drevs, ui.write)\\n \\n \\n @vcrcommand(\\n     b'phabupdate',\\n     [\\n         (b'', b'accept', False, _(b'accept revisions')),\\n         (b'', b'reject', False, _(b'reject revisions')),\\n         (b'', b'abandon', False, _(b'abandon revisions')),\\n         (b'', b'reclaim', False, _(b'reclaim revisions')),\\n         (b'm', b'comment', b'', _(b'comment on the last revision')),\\n     ],\\n     _(b'DREVSPEC [OPTIONS]'),\\n     helpcategory=command.CATEGORY_IMPORT_EXPORT,\\n )\\n def phabupdate(ui, repo, spec, **opts):\\n     \\\"\\\"\\\"update Differential Revision in batch\\n \\n     DREVSPEC selects revisions. See :hg:`help phabread` for its usage.\\n     \\\"\\\"\\\"\\n     opts = pycompat.byteskwargs(opts)\\n     flags = [n for n in b'accept reject abandon reclaim'.split() if opts.get(n)]\\n     if len(flags) \\u003e 1:\\n         raise error.Abort(_(b'%s cannot be used together') % b', '.join(flags))\\n \\n     actions = []\\n     for f in flags:\\n         actions.append({b'type': f, b'value': True})\\n \\n-    drevs = querydrev(repo, spec)\\n+    drevs = querydrev(repo.ui, spec)\\n     for i, drev in enumerate(drevs):\\n         if i + 1 == len(drevs) and opts.get(b'comment'):\\n             actions.append({b'type': b'comment', b'value': opts[b'comment']})\\n         if actions:\\n             params = {\\n                 b'objectIdentifier': drev[b'phid'],\\n                 b'transactions': actions,\\n             }\\n             callconduit(ui, b'differential.revision.edit', params)\\n \\n \\n @eh.templatekeyword(b'phabreview', requires={b'ctx'})\\n def template_review(context, mapping):\\n     \\\"\\\"\\\":phabreview: Object describing the review for this changeset.\\n     Has attributes `url` and `id`.\\n     \\\"\\\"\\\"\\n     ctx = context.resource(mapping, b'ctx')\\n     m = _differentialrevisiondescre.search(ctx.description())\\n     if m:\\n         return templateutil.hybriddict(\\n             {b'url': m.group('url'), b'id': b\\\"D%s\\\" % m.group('id'),}\\n         )\\n     else:\\n         tags = ctx.repo().nodetags(ctx.node())\\n         for t in tags:\\n             if _differentialrevisiontagre.match(t):\\n                 url = ctx.repo().ui.config(b'phabricator', b'url')\\n                 if not url.endswith(b'\\/'):\\n                     url += b'\\/'\\n                 url += t\\n \\n                 return templateutil.hybriddict({b'url': url, b'id': t,})\\n     return None\\n \\n \\n @eh.templatekeyword(b'phabstatus', requires={b'ctx', b'repo', b'ui'})\\n def template_status(context, mapping):\\n     \\\"\\\"\\\":phabstatus: String. Status of Phabricator differential.\\n     \\\"\\\"\\\"\\n     ctx = context.resource(mapping, b'ctx')\\n     repo = context.resource(mapping, b'repo')\\n     ui = context.resource(mapping, b'ui')\\n \\n     rev = ctx.rev()\\n     try:\\n         drevid = getdrevmap(repo, [rev])[rev]\\n     except KeyError:\\n         return None\\n     drevs = callconduit(ui, b'differential.query', {b'ids': [drevid]})\\n     for drev in drevs:\\n         if int(drev[b'id']) == drevid:\\n             return templateutil.hybriddict(\\n                 {b'url': drev[b'uri'], b'status': drev[b'statusName'],}\\n             )\\n     return None\\n \\n \\n @show.showview(b'phabstatus', csettopic=b'work')\\n def phabstatusshowview(ui, repo, displayer):\\n     \\\"\\\"\\\"Phabricator differiential status\\\"\\\"\\\"\\n     revs = repo.revs('sort(_underway(), topo)')\\n     drevmap = getdrevmap(repo, revs)\\n     unknownrevs, drevids, revsbydrevid = [], set([]), {}\\n     for rev, drevid in pycompat.iteritems(drevmap):\\n         if drevid is not None:\\n             drevids.add(drevid)\\n             revsbydrevid.setdefault(drevid, set([])).add(rev)\\n         else:\\n             unknownrevs.append(rev)\\n \\n     drevs = callconduit(ui, b'differential.query', {b'ids': list(drevids)})\\n     drevsbyrev = {}\\n     for drev in drevs:\\n         for rev in revsbydrevid[int(drev[b'id'])]:\\n             drevsbyrev[rev] = drev\\n \\n     def phabstatus(ctx):\\n         drev = drevsbyrev[ctx.rev()]\\n         status = ui.label(\\n             b'%(statusName)s' % drev,\\n             b'phabricator.status.%s' % _getstatusname(drev),\\n         )\\n         ui.write(b\\\"\\\\n%s %s\\\\n\\\" % (drev[b'uri'], status))\\n \\n     revs -= smartset.baseset(unknownrevs)\\n     revdag = graphmod.dagwalker(repo, revs)\\n \\n     ui.setconfig(b'experimental', b'graphshorten', True)\\n     displayer._exthook = phabstatus\\n     nodelen = show.longestshortest(repo, revs)\\n     logcmdutil.displaygraph(\\n         ui,\\n         repo,\\n         revdag,\\n         displayer,\\n         graphmod.asciiedges,\\n         props={b'nodelen': nodelen},\\n     )\\n\"}]}],\"properties\":[]},\"20441\":{\"id\":\"20441\",\"revisionID\":\"8205\",\"dateCreated\":\"1581962476\",\"dateModified\":\"1583327820\",\"sourceControlBaseRevision\":\"69392460f7b1adf37a2b1206af8a5eb8ca0828f1\",\"sourceControlPath\":null,\"sourceControlSystem\":\"hg\",\"branch\":null,\"bookmark\":null,\"creationMethod\":\"commit\",\"description\":\"rHG72c6190de577bb2bb448eb2b14121e4ef85d08ff\",\"unitStatus\":\"6\",\"lintStatus\":\"6\",\"changes\":[{\"id\":\"55596\",\"metadata\":{\"line:first\":1612,\"hash.effect\":\"8g80k6H5tv6i\"},\"oldPath\":\"hgext\\/phabricator.py\",\"currentPath\":\"hgext\\/phabricator.py\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"5\",\"delLines\":\"7\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"1801\",\"newLength\":\"1799\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\" # phabricator.py - simple Phabricator integration\\n #\\n # Copyright 2017 Facebook, Inc.\\n #\\n # This software may be used and distributed according to the terms of the\\n # GNU General Public License version 2 or any later version.\\n \\\"\\\"\\\"simple Phabricator integration (EXPERIMENTAL)\\n \\n This extension provides a ``phabsend`` command which sends a stack of\\n changesets to Phabricator, and a ``phabread`` command which prints a stack of\\n revisions in a format suitable for :hg:`import`, and a ``phabupdate`` command\\n to update statuses in batch.\\n \\n A \\\"phabstatus\\\" view for :hg:`show` is also provided; it displays status\\n information of Phabricator differentials associated with unfinished\\n changesets.\\n \\n By default, Phabricator requires ``Test Plan`` which might prevent some\\n changeset from being sent. The requirement could be disabled by changing\\n ``differential.require-test-plan-field`` config server side.\\n \\n Config::\\n \\n     [phabricator]\\n     # Phabricator URL\\n     url = https:\\/\\/phab.example.com\\/\\n \\n     # Repo callsign. If a repo has a URL https:\\/\\/$HOST\\/diffusion\\/FOO, then its\\n     # callsign is \\\"FOO\\\".\\n     callsign = FOO\\n \\n     # curl command to use. If not set (default), use builtin HTTP library to\\n     # communicate. If set, use the specified curl command. This could be useful\\n     # if you need to specify advanced options that is not easily supported by\\n     # the internal library.\\n     curlcmd = curl --connect-timeout 2 --retry 3 --silent\\n \\n     [auth]\\n     example.schemes = https\\n     example.prefix = phab.example.com\\n \\n     # API token. Get it from https:\\/\\/$HOST\\/conduit\\/login\\/\\n     example.phabtoken = cli-xxxxxxxxxxxxxxxxxxxxxxxxxxxx\\n \\\"\\\"\\\"\\n \\n from __future__ import absolute_import\\n \\n import base64\\n import contextlib\\n import hashlib\\n import itertools\\n import json\\n import mimetypes\\n import operator\\n import re\\n \\n from mercurial.node import bin, nullid\\n from mercurial.i18n import _\\n from mercurial.pycompat import getattr\\n from mercurial.thirdparty import attr\\n from mercurial import (\\n     cmdutil,\\n     context,\\n     encoding,\\n     error,\\n     exthelper,\\n     graphmod,\\n     httpconnection as httpconnectionmod,\\n     localrepo,\\n     logcmdutil,\\n     match,\\n     mdiff,\\n     obsutil,\\n     parser,\\n     patch,\\n     phases,\\n     pycompat,\\n     scmutil,\\n     smartset,\\n     tags,\\n     templatefilters,\\n     templateutil,\\n     url as urlmod,\\n     util,\\n )\\n from mercurial.utils import (\\n     procutil,\\n     stringutil,\\n )\\n from . import show\\n \\n \\n # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for\\n # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should\\n # be specifying the version(s) of Mercurial they are tested with, or\\n # leave the attribute unspecified.\\n testedwith = b'ships-with-hg-core'\\n \\n eh = exthelper.exthelper()\\n \\n cmdtable = eh.cmdtable\\n command = eh.command\\n configtable = eh.configtable\\n templatekeyword = eh.templatekeyword\\n uisetup = eh.finaluisetup\\n \\n # developer config: phabricator.batchsize\\n eh.configitem(\\n     b'phabricator', b'batchsize', default=12,\\n )\\n eh.configitem(\\n     b'phabricator', b'callsign', default=None,\\n )\\n eh.configitem(\\n     b'phabricator', b'curlcmd', default=None,\\n )\\n # developer config: phabricator.repophid\\n eh.configitem(\\n     b'phabricator', b'repophid', default=None,\\n )\\n eh.configitem(\\n     b'phabricator', b'url', default=None,\\n )\\n eh.configitem(\\n     b'phabsend', b'confirm', default=False,\\n )\\n \\n colortable = {\\n     b'phabricator.action.created': b'green',\\n     b'phabricator.action.skipped': b'magenta',\\n     b'phabricator.action.updated': b'magenta',\\n     b'phabricator.desc': b'',\\n     b'phabricator.drev': b'bold',\\n     b'phabricator.node': b'',\\n     b'phabricator.status.abandoned': b'magenta dim',\\n     b'phabricator.status.accepted': b'green bold',\\n     b'phabricator.status.closed': b'green',\\n     b'phabricator.status.needsreview': b'yellow',\\n     b'phabricator.status.needsrevision': b'red',\\n     b'phabricator.status.changesplanned': b'red',\\n }\\n \\n _VCR_FLAGS = [\\n     (\\n         b'',\\n         b'test-vcr',\\n         b'',\\n         _(\\n             b'Path to a vcr file. If nonexistent, will record a new vcr transcript'\\n             b', otherwise will mock all http requests using the specified vcr file.'\\n             b' (ADVANCED)'\\n         ),\\n     ),\\n ]\\n \\n \\n @eh.wrapfunction(localrepo, \\\"loadhgrc\\\")\\n def _loadhgrc(orig, ui, wdirvfs, hgvfs, requirements):\\n     \\\"\\\"\\\"Load ``.arcconfig`` content into a ui instance on repository open.\\n     \\\"\\\"\\\"\\n     result = False\\n     arcconfig = {}\\n \\n     try:\\n         # json.loads only accepts bytes from 3.6+\\n         rawparams = encoding.unifromlocal(wdirvfs.read(b\\\".arcconfig\\\"))\\n         # json.loads only returns unicode strings\\n         arcconfig = pycompat.rapply(\\n             lambda x: encoding.unitolocal(x)\\n             if isinstance(x, pycompat.unicode)\\n             else x,\\n             pycompat.json_loads(rawparams),\\n         )\\n \\n         result = True\\n     except ValueError:\\n         ui.warn(_(b\\\"invalid JSON in %s\\\\n\\\") % wdirvfs.join(b\\\".arcconfig\\\"))\\n     except IOError:\\n         pass\\n \\n     cfg = util.sortdict()\\n \\n     if b\\\"repository.callsign\\\" in arcconfig:\\n         cfg[(b\\\"phabricator\\\", b\\\"callsign\\\")] = arcconfig[b\\\"repository.callsign\\\"]\\n \\n     if b\\\"phabricator.uri\\\" in arcconfig:\\n         cfg[(b\\\"phabricator\\\", b\\\"url\\\")] = arcconfig[b\\\"phabricator.uri\\\"]\\n \\n     if cfg:\\n         ui.applyconfig(cfg, source=wdirvfs.join(b\\\".arcconfig\\\"))\\n \\n     return orig(ui, wdirvfs, hgvfs, requirements) or result  # Load .hg\\/hgrc\\n \\n \\n def vcrcommand(name, flags, spec, helpcategory=None, optionalrepo=False):\\n     fullflags = flags + _VCR_FLAGS\\n \\n     def hgmatcher(r1, r2):\\n         if r1.uri != r2.uri or r1.method != r2.method:\\n             return False\\n         r1params = util.urlreq.parseqs(r1.body)\\n         r2params = util.urlreq.parseqs(r2.body)\\n         for key in r1params:\\n             if key not in r2params:\\n                 return False\\n             value = r1params[key][0]\\n             # we want to compare json payloads without worrying about ordering\\n             if value.startswith(b'{') and value.endswith(b'}'):\\n                 r1json = pycompat.json_loads(value)\\n                 r2json = pycompat.json_loads(r2params[key][0])\\n                 if r1json != r2json:\\n                     return False\\n             elif r2params[key][0] != value:\\n                 return False\\n         return True\\n \\n     def sanitiserequest(request):\\n         request.body = re.sub(\\n             br'cli-[a-z0-9]+', br'cli-hahayouwish', request.body\\n         )\\n         return request\\n \\n     def sanitiseresponse(response):\\n         if 'set-cookie' in response['headers']:\\n             del response['headers']['set-cookie']\\n         return response\\n \\n     def decorate(fn):\\n         def inner(*args, **kwargs):\\n             cassette = pycompat.fsdecode(kwargs.pop('test_vcr', None))\\n             if cassette:\\n                 import hgdemandimport\\n \\n                 with hgdemandimport.deactivated():\\n                     import vcr as vcrmod\\n                     import vcr.stubs as stubs\\n \\n                     vcr = vcrmod.VCR(\\n                         serializer='json',\\n                         before_record_request=sanitiserequest,\\n                         before_record_response=sanitiseresponse,\\n                         custom_patches=[\\n                             (\\n                                 urlmod,\\n                                 'httpconnection',\\n                                 stubs.VCRHTTPConnection,\\n                             ),\\n                             (\\n                                 urlmod,\\n                                 'httpsconnection',\\n                                 stubs.VCRHTTPSConnection,\\n                             ),\\n                         ],\\n                     )\\n                     vcr.register_matcher('hgmatcher', hgmatcher)\\n                     with vcr.use_cassette(cassette, match_on=['hgmatcher']):\\n                         return fn(*args, **kwargs)\\n             return fn(*args, **kwargs)\\n \\n         inner.__name__ = fn.__name__\\n         inner.__doc__ = fn.__doc__\\n         return command(\\n             name,\\n             fullflags,\\n             spec,\\n             helpcategory=helpcategory,\\n             optionalrepo=optionalrepo,\\n         )(inner)\\n \\n     return decorate\\n \\n \\n def urlencodenested(params):\\n     \\\"\\\"\\\"like urlencode, but works with nested parameters.\\n \\n     For example, if params is {'a': ['b', 'c'], 'd': {'e': 'f'}}, it will be\\n     flattened to {'a[0]': 'b', 'a[1]': 'c', 'd[e]': 'f'} and then passed to\\n     urlencode. Note: the encoding is consistent with PHP's http_build_query.\\n     \\\"\\\"\\\"\\n     flatparams = util.sortdict()\\n \\n     def process(prefix, obj):\\n         if isinstance(obj, bool):\\n             obj = {True: b'true', False: b'false'}[obj]  # Python -\\u003e PHP form\\n         lister = lambda l: [(b'%d' % k, v) for k, v in enumerate(l)]\\n         items = {list: lister, dict: lambda x: x.items()}.get(type(obj))\\n         if items is None:\\n             flatparams[prefix] = obj\\n         else:\\n             for k, v in items(obj):\\n                 if prefix:\\n                     process(b'%s[%s]' % (prefix, k), v)\\n                 else:\\n                     process(k, v)\\n \\n     process(b'', params)\\n     return util.urlreq.urlencode(flatparams)\\n \\n \\n def readurltoken(ui):\\n     \\\"\\\"\\\"return conduit url, token and make sure they exist\\n \\n     Currently read from [auth] config section. In the future, it might\\n     make sense to read from .arcconfig and .arcrc as well.\\n     \\\"\\\"\\\"\\n     url = ui.config(b'phabricator', b'url')\\n     if not url:\\n         raise error.Abort(\\n             _(b'config %s.%s is required') % (b'phabricator', b'url')\\n         )\\n \\n     res = httpconnectionmod.readauthforuri(ui, url, util.url(url).user)\\n     token = None\\n \\n     if res:\\n         group, auth = res\\n \\n         ui.debug(b\\\"using auth.%s.* for authentication\\\\n\\\" % group)\\n \\n         token = auth.get(b'phabtoken')\\n \\n     if not token:\\n         raise error.Abort(\\n             _(b'Can\\\\'t find conduit token associated to %s') % (url,)\\n         )\\n \\n     return url, token\\n \\n \\n def callconduit(ui, name, params):\\n     \\\"\\\"\\\"call Conduit API, params is a dict. return json.loads result, or None\\\"\\\"\\\"\\n     host, token = readurltoken(ui)\\n     url, authinfo = util.url(b'\\/'.join([host, b'api', name])).authinfo()\\n     ui.debug(b'Conduit Call: %s %s\\\\n' % (url, pycompat.byterepr(params)))\\n     params = params.copy()\\n     params[b'__conduit__'] = {\\n         b'token': token,\\n     }\\n     rawdata = {\\n         b'params': templatefilters.json(params),\\n         b'output': b'json',\\n         b'__conduit__': 1,\\n     }\\n     data = urlencodenested(rawdata)\\n     curlcmd = ui.config(b'phabricator', b'curlcmd')\\n     if curlcmd:\\n         sin, sout = procutil.popen2(\\n             b'%s -d @- %s' % (curlcmd, procutil.shellquote(url))\\n         )\\n         sin.write(data)\\n         sin.close()\\n         body = sout.read()\\n     else:\\n         urlopener = urlmod.opener(ui, authinfo)\\n         request = util.urlreq.request(pycompat.strurl(url), data=data)\\n         with contextlib.closing(urlopener.open(request)) as rsp:\\n             body = rsp.read()\\n     ui.debug(b'Conduit Response: %s\\\\n' % body)\\n     parsed = pycompat.rapply(\\n         lambda x: encoding.unitolocal(x)\\n         if isinstance(x, pycompat.unicode)\\n         else x,\\n         # json.loads only accepts bytes from py3.6+\\n         pycompat.json_loads(encoding.unifromlocal(body)),\\n     )\\n     if parsed.get(b'error_code'):\\n         msg = _(b'Conduit Error (%s): %s') % (\\n             parsed[b'error_code'],\\n             parsed[b'error_info'],\\n         )\\n         raise error.Abort(msg)\\n     return parsed[b'result']\\n \\n \\n @vcrcommand(b'debugcallconduit', [], _(b'METHOD'), optionalrepo=True)\\n def debugcallconduit(ui, repo, name):\\n     \\\"\\\"\\\"call Conduit API\\n \\n     Call parameters are read from stdin as a JSON blob. Result will be written\\n     to stdout as a JSON blob.\\n     \\\"\\\"\\\"\\n     # json.loads only accepts bytes from 3.6+\\n     rawparams = encoding.unifromlocal(ui.fin.read())\\n     # json.loads only returns unicode strings\\n     params = pycompat.rapply(\\n         lambda x: encoding.unitolocal(x)\\n         if isinstance(x, pycompat.unicode)\\n         else x,\\n         pycompat.json_loads(rawparams),\\n     )\\n     # json.dumps only accepts unicode strings\\n     result = pycompat.rapply(\\n         lambda x: encoding.unifromlocal(x) if isinstance(x, bytes) else x,\\n         callconduit(ui, name, params),\\n     )\\n     s = json.dumps(result, sort_keys=True, indent=2, separators=(u',', u': '))\\n     ui.write(b'%s\\\\n' % encoding.unitolocal(s))\\n \\n \\n def getrepophid(repo):\\n     \\\"\\\"\\\"given callsign, return repository PHID or None\\\"\\\"\\\"\\n     # developer config: phabricator.repophid\\n     repophid = repo.ui.config(b'phabricator', b'repophid')\\n     if repophid:\\n         return repophid\\n     callsign = repo.ui.config(b'phabricator', b'callsign')\\n     if not callsign:\\n         return None\\n     query = callconduit(\\n         repo.ui,\\n         b'diffusion.repository.search',\\n         {b'constraints': {b'callsigns': [callsign]}},\\n     )\\n     if len(query[b'data']) == 0:\\n         return None\\n     repophid = query[b'data'][0][b'phid']\\n     repo.ui.setconfig(b'phabricator', b'repophid', repophid)\\n     return repophid\\n \\n \\n _differentialrevisiontagre = re.compile(br'\\\\AD([1-9][0-9]*)\\\\Z')\\n _differentialrevisiondescre = re.compile(\\n     br'^Differential Revision:\\\\s*(?P\\u003curl\\u003e(?:.*)D(?P\\u003cid\\u003e[1-9][0-9]*))$', re.M\\n )\\n \\n \\n def getoldnodedrevmap(repo, nodelist):\\n     \\\"\\\"\\\"find previous nodes that has been sent to Phabricator\\n \\n     return {node: (oldnode, Differential diff, Differential Revision ID)}\\n     for node in nodelist with known previous sent versions, or associated\\n     Differential Revision IDs. ``oldnode`` and ``Differential diff`` could\\n     be ``None``.\\n \\n     Examines commit messages like \\\"Differential Revision:\\\" to get the\\n     association information.\\n \\n     If such commit message line is not found, examines all precursors and their\\n     tags. Tags with format like \\\"D1234\\\" are considered a match and the node\\n     with that tag, and the number after \\\"D\\\" (ex. 1234) will be returned.\\n \\n     The ``old node``, if not None, is guaranteed to be the last diff of\\n     corresponding Differential Revision, and exist in the repo.\\n     \\\"\\\"\\\"\\n     unfi = repo.unfiltered()\\n     has_node = unfi.changelog.index.has_node\\n \\n     result = {}  # {node: (oldnode?, lastdiff?, drev)}\\n     toconfirm = {}  # {node: (force, {precnode}, drev)}\\n     for node in nodelist:\\n         ctx = unfi[node]\\n         # For tags like \\\"D123\\\", put them into \\\"toconfirm\\\" to verify later\\n         precnodes = list(obsutil.allpredecessors(unfi.obsstore, [node]))\\n         for n in precnodes:\\n             if has_node(n):\\n                 for tag in unfi.nodetags(n):\\n                     m = _differentialrevisiontagre.match(tag)\\n                     if m:\\n                         toconfirm[node] = (0, set(precnodes), int(m.group(1)))\\n                         break\\n                 else:\\n                     continue  # move to next predecessor\\n                 break  # found a tag, stop\\n         else:\\n             # Check commit message\\n             m = _differentialrevisiondescre.search(ctx.description())\\n             if m:\\n                 toconfirm[node] = (1, set(precnodes), int(m.group('id')))\\n \\n     # Double check if tags are genuine by collecting all old nodes from\\n     # Phabricator, and expect precursors overlap with it.\\n     if toconfirm:\\n         drevs = [drev for force, precs, drev in toconfirm.values()]\\n         alldiffs = callconduit(\\n             unfi.ui, b'differential.querydiffs', {b'revisionIDs': drevs}\\n         )\\n         getnode = lambda d: bin(getdiffmeta(d).get(b'node', b'')) or None\\n         for newnode, (force, precset, drev) in toconfirm.items():\\n             diffs = [\\n                 d for d in alldiffs.values() if int(d[b'revisionID']) == drev\\n             ]\\n \\n             # \\\"precursors\\\" as known by Phabricator\\n             phprecset = set(getnode(d) for d in diffs)\\n \\n             # Ignore if precursors (Phabricator and local repo) do not overlap,\\n             # and force is not set (when commit message says nothing)\\n             if not force and not bool(phprecset & precset):\\n                 tagname = b'D%d' % drev\\n                 tags.tag(\\n                     repo,\\n                     tagname,\\n                     nullid,\\n                     message=None,\\n                     user=None,\\n                     date=None,\\n                     local=True,\\n                 )\\n                 unfi.ui.warn(\\n                     _(\\n                         b'D%d: local tag removed - does not match '\\n                         b'Differential history\\\\n'\\n                     )\\n                     % drev\\n                 )\\n                 continue\\n \\n             # Find the last node using Phabricator metadata, and make sure it\\n             # exists in the repo\\n             oldnode = lastdiff = None\\n             if diffs:\\n                 lastdiff = max(diffs, key=lambda d: int(d[b'id']))\\n                 oldnode = getnode(lastdiff)\\n                 if oldnode and not has_node(oldnode):\\n                     oldnode = None\\n \\n             result[newnode] = (oldnode, lastdiff, drev)\\n \\n     return result\\n \\n \\n def getdrevmap(repo, revs):\\n     \\\"\\\"\\\"Return a dict mapping each rev in `revs` to their Differential Revision\\n     ID or None.\\n     \\\"\\\"\\\"\\n     result = {}\\n     for rev in revs:\\n         result[rev] = None\\n         ctx = repo[rev]\\n         # Check commit message\\n         m = _differentialrevisiondescre.search(ctx.description())\\n         if m:\\n             result[rev] = int(m.group('id'))\\n             continue\\n         # Check tags\\n         for tag in repo.nodetags(ctx.node()):\\n             m = _differentialrevisiontagre.match(tag)\\n             if m:\\n                 result[rev] = int(m.group(1))\\n                 break\\n \\n     return result\\n \\n \\n def getdiff(ctx, diffopts):\\n     \\\"\\\"\\\"plain-text diff without header (user, commit message, etc)\\\"\\\"\\\"\\n     output = util.stringio()\\n     for chunk, _label in patch.diffui(\\n         ctx.repo(), ctx.p1().node(), ctx.node(), None, opts=diffopts\\n     ):\\n         output.write(chunk)\\n     return output.getvalue()\\n \\n \\n class DiffChangeType(object):\\n     ADD = 1\\n     CHANGE = 2\\n     DELETE = 3\\n     MOVE_AWAY = 4\\n     COPY_AWAY = 5\\n     MOVE_HERE = 6\\n     COPY_HERE = 7\\n     MULTICOPY = 8\\n \\n \\n class DiffFileType(object):\\n     TEXT = 1\\n     IMAGE = 2\\n     BINARY = 3\\n \\n \\n @attr.s\\n class phabhunk(dict):\\n     \\\"\\\"\\\"Represents a Differential hunk, which is owned by a Differential change\\n     \\\"\\\"\\\"\\n \\n     oldOffset = attr.ib(default=0)  # camelcase-required\\n     oldLength = attr.ib(default=0)  # camelcase-required\\n     newOffset = attr.ib(default=0)  # camelcase-required\\n     newLength = attr.ib(default=0)  # camelcase-required\\n     corpus = attr.ib(default='')\\n     # These get added to the phabchange's equivalents\\n     addLines = attr.ib(default=0)  # camelcase-required\\n     delLines = attr.ib(default=0)  # camelcase-required\\n \\n \\n @attr.s\\n class phabchange(object):\\n     \\\"\\\"\\\"Represents a Differential change, owns Differential hunks and owned by a\\n     Differential diff.  Each one represents one file in a diff.\\n     \\\"\\\"\\\"\\n \\n     currentPath = attr.ib(default=None)  # camelcase-required\\n     oldPath = attr.ib(default=None)  # camelcase-required\\n     awayPaths = attr.ib(default=attr.Factory(list))  # camelcase-required\\n     metadata = attr.ib(default=attr.Factory(dict))\\n     oldProperties = attr.ib(default=attr.Factory(dict))  # camelcase-required\\n     newProperties = attr.ib(default=attr.Factory(dict))  # camelcase-required\\n     type = attr.ib(default=DiffChangeType.CHANGE)\\n     fileType = attr.ib(default=DiffFileType.TEXT)  # camelcase-required\\n     commitHash = attr.ib(default=None)  # camelcase-required\\n     addLines = attr.ib(default=0)  # camelcase-required\\n     delLines = attr.ib(default=0)  # camelcase-required\\n     hunks = attr.ib(default=attr.Factory(list))\\n \\n     def copynewmetadatatoold(self):\\n         for key in list(self.metadata.keys()):\\n             newkey = key.replace(b'new:', b'old:')\\n             self.metadata[newkey] = self.metadata[key]\\n \\n     def addoldmode(self, value):\\n         self.oldProperties[b'unix:filemode'] = value\\n \\n     def addnewmode(self, value):\\n         self.newProperties[b'unix:filemode'] = value\\n \\n     def addhunk(self, hunk):\\n         if not isinstance(hunk, phabhunk):\\n             raise error.Abort(b'phabchange.addhunk only takes phabhunks')\\n         self.hunks.append(pycompat.byteskwargs(attr.asdict(hunk)))\\n         # It's useful to include these stats since the Phab web UI shows them,\\n         # and uses them to estimate how large a change a Revision is. Also used\\n         # in email subjects for the [+++--] bit.\\n         self.addLines += hunk.addLines\\n         self.delLines += hunk.delLines\\n \\n \\n @attr.s\\n class phabdiff(object):\\n     \\\"\\\"\\\"Represents a Differential diff, owns Differential changes.  Corresponds\\n     to a commit.\\n     \\\"\\\"\\\"\\n \\n     # Doesn't seem to be any reason to send this (output of uname -n)\\n     sourceMachine = attr.ib(default=b'')  # camelcase-required\\n     sourcePath = attr.ib(default=b'\\/')  # camelcase-required\\n     sourceControlBaseRevision = attr.ib(default=b'0' * 40)  # camelcase-required\\n     sourceControlPath = attr.ib(default=b'\\/')  # camelcase-required\\n     sourceControlSystem = attr.ib(default=b'hg')  # camelcase-required\\n     branch = attr.ib(default=b'default')\\n     bookmark = attr.ib(default=None)\\n     creationMethod = attr.ib(default=b'phabsend')  # camelcase-required\\n     lintStatus = attr.ib(default=b'none')  # camelcase-required\\n     unitStatus = attr.ib(default=b'none')  # camelcase-required\\n     changes = attr.ib(default=attr.Factory(dict))\\n     repositoryPHID = attr.ib(default=None)  # camelcase-required\\n \\n     def addchange(self, change):\\n         if not isinstance(change, phabchange):\\n             raise error.Abort(b'phabdiff.addchange only takes phabchanges')\\n         self.changes[change.currentPath] = pycompat.byteskwargs(\\n             attr.asdict(change)\\n         )\\n \\n \\n def maketext(pchange, ctx, fname):\\n     \\\"\\\"\\\"populate the phabchange for a text file\\\"\\\"\\\"\\n     repo = ctx.repo()\\n     fmatcher = match.exact([fname])\\n     diffopts = mdiff.diffopts(git=True, context=32767)\\n     _pfctx, _fctx, header, fhunks = next(\\n         patch.diffhunks(repo, ctx.p1(), ctx, fmatcher, opts=diffopts)\\n     )\\n \\n     for fhunk in fhunks:\\n         (oldOffset, oldLength, newOffset, newLength), lines = fhunk\\n         corpus = b''.join(lines[1:])\\n         shunk = list(header)\\n         shunk.extend(lines)\\n         _mf, _mt, addLines, delLines, _hb = patch.diffstatsum(\\n             patch.diffstatdata(util.iterlines(shunk))\\n         )\\n         pchange.addhunk(\\n             phabhunk(\\n                 oldOffset,\\n                 oldLength,\\n                 newOffset,\\n                 newLength,\\n                 corpus,\\n                 addLines,\\n                 delLines,\\n             )\\n         )\\n \\n \\n def uploadchunks(fctx, fphid):\\n     \\\"\\\"\\\"upload large binary files as separate chunks.\\n     Phab requests chunking over 8MiB, and splits into 4MiB chunks\\n     \\\"\\\"\\\"\\n     ui = fctx.repo().ui\\n     chunks = callconduit(ui, b'file.querychunks', {b'filePHID': fphid})\\n     with ui.makeprogress(\\n         _(b'uploading file chunks'), unit=_(b'chunks'), total=len(chunks)\\n     ) as progress:\\n         for chunk in chunks:\\n             progress.increment()\\n             if chunk[b'complete']:\\n                 continue\\n             bstart = int(chunk[b'byteStart'])\\n             bend = int(chunk[b'byteEnd'])\\n             callconduit(\\n                 ui,\\n                 b'file.uploadchunk',\\n                 {\\n                     b'filePHID': fphid,\\n                     b'byteStart': bstart,\\n                     b'data': base64.b64encode(fctx.data()[bstart:bend]),\\n                     b'dataEncoding': b'base64',\\n                 },\\n             )\\n \\n \\n def uploadfile(fctx):\\n     \\\"\\\"\\\"upload binary files to Phabricator\\\"\\\"\\\"\\n     repo = fctx.repo()\\n     ui = repo.ui\\n     fname = fctx.path()\\n     size = fctx.size()\\n     fhash = pycompat.bytestr(hashlib.sha256(fctx.data()).hexdigest())\\n \\n     # an allocate call is required first to see if an upload is even required\\n     # (Phab might already have it) and to determine if chunking is needed\\n     allocateparams = {\\n         b'name': fname,\\n         b'contentLength': size,\\n         b'contentHash': fhash,\\n     }\\n     filealloc = callconduit(ui, b'file.allocate', allocateparams)\\n     fphid = filealloc[b'filePHID']\\n \\n     if filealloc[b'upload']:\\n         ui.write(_(b'uploading %s\\\\n') % bytes(fctx))\\n         if not fphid:\\n             uploadparams = {\\n                 b'name': fname,\\n                 b'data_base64': base64.b64encode(fctx.data()),\\n             }\\n             fphid = callconduit(ui, b'file.upload', uploadparams)\\n         else:\\n             uploadchunks(fctx, fphid)\\n     else:\\n         ui.debug(b'server already has %s\\\\n' % bytes(fctx))\\n \\n     if not fphid:\\n         raise error.Abort(b'Upload of %s failed.' % bytes(fctx))\\n \\n     return fphid\\n \\n \\n def addoldbinary(pchange, fctx):\\n     \\\"\\\"\\\"add the metadata for the previous version of a binary file to the\\n     phabchange for the new version\\n     \\\"\\\"\\\"\\n     oldfctx = fctx.p1()\\n     if fctx.cmp(oldfctx):\\n         # Files differ, add the old one\\n         pchange.metadata[b'old:file:size'] = oldfctx.size()\\n         mimeguess, _enc = mimetypes.guess_type(\\n             encoding.unifromlocal(oldfctx.path())\\n         )\\n         if mimeguess:\\n             pchange.metadata[b'old:file:mime-type'] = pycompat.bytestr(\\n                 mimeguess\\n             )\\n         fphid = uploadfile(oldfctx)\\n         pchange.metadata[b'old:binary-phid'] = fphid\\n     else:\\n         # If it's left as IMAGE\\/BINARY web UI might try to display it\\n         pchange.fileType = DiffFileType.TEXT\\n         pchange.copynewmetadatatoold()\\n \\n \\n def makebinary(pchange, fctx):\\n     \\\"\\\"\\\"populate the phabchange for a binary file\\\"\\\"\\\"\\n     pchange.fileType = DiffFileType.BINARY\\n     fphid = uploadfile(fctx)\\n     pchange.metadata[b'new:binary-phid'] = fphid\\n     pchange.metadata[b'new:file:size'] = fctx.size()\\n     mimeguess, _enc = mimetypes.guess_type(encoding.unifromlocal(fctx.path()))\\n     if mimeguess:\\n         mimeguess = pycompat.bytestr(mimeguess)\\n         pchange.metadata[b'new:file:mime-type'] = mimeguess\\n         if mimeguess.startswith(b'image\\/'):\\n             pchange.fileType = DiffFileType.IMAGE\\n \\n \\n # Copied from mercurial\\/patch.py\\n gitmode = {b'l': b'120000', b'x': b'100755', b'': b'100644'}\\n \\n \\n def notutf8(fctx):\\n     \\\"\\\"\\\"detect non-UTF-8 text files since Phabricator requires them to be marked\\n     as binary\\n     \\\"\\\"\\\"\\n     try:\\n         fctx.data().decode('utf-8')\\n         if fctx.parents():\\n             fctx.p1().data().decode('utf-8')\\n         return False\\n     except UnicodeDecodeError:\\n         fctx.repo().ui.write(\\n             _(b'file %s detected as non-UTF-8, marked as binary\\\\n')\\n             % fctx.path()\\n         )\\n         return True\\n \\n \\n def addremoved(pdiff, ctx, removed):\\n     \\\"\\\"\\\"add removed files to the phabdiff. Shouldn't include moves\\\"\\\"\\\"\\n     for fname in removed:\\n         pchange = phabchange(\\n             currentPath=fname, oldPath=fname, type=DiffChangeType.DELETE\\n         )\\n         pchange.addoldmode(gitmode[ctx.p1()[fname].flags()])\\n         fctx = ctx.p1()[fname]\\n         if not (fctx.isbinary() or notutf8(fctx)):\\n             maketext(pchange, ctx, fname)\\n \\n         pdiff.addchange(pchange)\\n \\n \\n def addmodified(pdiff, ctx, modified):\\n     \\\"\\\"\\\"add modified files to the phabdiff\\\"\\\"\\\"\\n     for fname in modified:\\n         fctx = ctx[fname]\\n         pchange = phabchange(currentPath=fname, oldPath=fname)\\n         filemode = gitmode[ctx[fname].flags()]\\n         originalmode = gitmode[ctx.p1()[fname].flags()]\\n         if filemode != originalmode:\\n             pchange.addoldmode(originalmode)\\n             pchange.addnewmode(filemode)\\n \\n         if fctx.isbinary() or notutf8(fctx):\\n             makebinary(pchange, fctx)\\n             addoldbinary(pchange, fctx)\\n         else:\\n             maketext(pchange, ctx, fname)\\n \\n         pdiff.addchange(pchange)\\n \\n \\n def addadded(pdiff, ctx, added, removed):\\n     \\\"\\\"\\\"add file adds to the phabdiff, both new files and copies\\/moves\\\"\\\"\\\"\\n     # Keep track of files that've been recorded as moved\\/copied, so if there are\\n     # additional copies we can mark them (moves get removed from removed)\\n     copiedchanges = {}\\n     movedchanges = {}\\n     for fname in added:\\n         fctx = ctx[fname]\\n         pchange = phabchange(currentPath=fname)\\n \\n         filemode = gitmode[ctx[fname].flags()]\\n         renamed = fctx.renamed()\\n \\n         if renamed:\\n             originalfname = renamed[0]\\n             originalmode = gitmode[ctx.p1()[originalfname].flags()]\\n             pchange.oldPath = originalfname\\n \\n             if originalfname in removed:\\n                 origpchange = phabchange(\\n                     currentPath=originalfname,\\n                     oldPath=originalfname,\\n                     type=DiffChangeType.MOVE_AWAY,\\n                     awayPaths=[fname],\\n                 )\\n                 movedchanges[originalfname] = origpchange\\n                 removed.remove(originalfname)\\n                 pchange.type = DiffChangeType.MOVE_HERE\\n             elif originalfname in movedchanges:\\n                 movedchanges[originalfname].type = DiffChangeType.MULTICOPY\\n                 movedchanges[originalfname].awayPaths.append(fname)\\n                 pchange.type = DiffChangeType.COPY_HERE\\n             else:  # pure copy\\n                 if originalfname not in copiedchanges:\\n                     origpchange = phabchange(\\n                         currentPath=originalfname, type=DiffChangeType.COPY_AWAY\\n                     )\\n                     copiedchanges[originalfname] = origpchange\\n                 else:\\n                     origpchange = copiedchanges[originalfname]\\n                 origpchange.awayPaths.append(fname)\\n                 pchange.type = DiffChangeType.COPY_HERE\\n \\n             if filemode != originalmode:\\n                 pchange.addoldmode(originalmode)\\n                 pchange.addnewmode(filemode)\\n         else:  # Brand-new file\\n             pchange.addnewmode(gitmode[fctx.flags()])\\n             pchange.type = DiffChangeType.ADD\\n \\n         if fctx.isbinary() or notutf8(fctx):\\n             makebinary(pchange, fctx)\\n             if renamed:\\n                 addoldbinary(pchange, fctx)\\n         else:\\n             maketext(pchange, ctx, fname)\\n \\n         pdiff.addchange(pchange)\\n \\n     for _path, copiedchange in copiedchanges.items():\\n         pdiff.addchange(copiedchange)\\n     for _path, movedchange in movedchanges.items():\\n         pdiff.addchange(movedchange)\\n \\n \\n def creatediff(ctx):\\n     \\\"\\\"\\\"create a Differential Diff\\\"\\\"\\\"\\n     repo = ctx.repo()\\n     repophid = getrepophid(repo)\\n     # Create a \\\"Differential Diff\\\" via \\\"differential.creatediff\\\" API\\n     pdiff = phabdiff(\\n         sourceControlBaseRevision=b'%s' % ctx.p1().hex(),\\n         branch=b'%s' % ctx.branch(),\\n     )\\n     modified, added, removed, _d, _u, _i, _c = ctx.p1().status(ctx)\\n     # addadded will remove moved files from removed, so addremoved won't get\\n     # them\\n     addadded(pdiff, ctx, added, removed)\\n     addmodified(pdiff, ctx, modified)\\n     addremoved(pdiff, ctx, removed)\\n     if repophid:\\n         pdiff.repositoryPHID = repophid\\n     diff = callconduit(\\n         repo.ui,\\n         b'differential.creatediff',\\n         pycompat.byteskwargs(attr.asdict(pdiff)),\\n     )\\n     if not diff:\\n         raise error.Abort(_(b'cannot create diff for %s') % ctx)\\n     return diff\\n \\n \\n def writediffproperties(ctx, diff):\\n     \\\"\\\"\\\"write metadata to diff so patches could be applied losslessly\\\"\\\"\\\"\\n     # creatediff returns with a diffid but query returns with an id\\n     diffid = diff.get(b'diffid', diff.get(b'id'))\\n     params = {\\n         b'diff_id': diffid,\\n         b'name': b'hg:meta',\\n         b'data': templatefilters.json(\\n             {\\n                 b'user': ctx.user(),\\n                 b'date': b'%d %d' % ctx.date(),\\n                 b'branch': ctx.branch(),\\n                 b'node': ctx.hex(),\\n                 b'parent': ctx.p1().hex(),\\n             }\\n         ),\\n     }\\n     callconduit(ctx.repo().ui, b'differential.setdiffproperty', params)\\n \\n     params = {\\n         b'diff_id': diffid,\\n         b'name': b'local:commits',\\n         b'data': templatefilters.json(\\n             {\\n                 ctx.hex(): {\\n                     b'author': stringutil.person(ctx.user()),\\n                     b'authorEmail': stringutil.email(ctx.user()),\\n                     b'time': int(ctx.date()[0]),\\n                     b'commit': ctx.hex(),\\n                     b'parents': [ctx.p1().hex()],\\n                     b'branch': ctx.branch(),\\n                 },\\n             }\\n         ),\\n     }\\n     callconduit(ctx.repo().ui, b'differential.setdiffproperty', params)\\n \\n \\n def createdifferentialrevision(\\n     ctx,\\n     revid=None,\\n     parentrevphid=None,\\n     oldnode=None,\\n     olddiff=None,\\n     actions=None,\\n     comment=None,\\n ):\\n     \\\"\\\"\\\"create or update a Differential Revision\\n \\n     If revid is None, create a new Differential Revision, otherwise update\\n     revid. If parentrevphid is not None, set it as a dependency.\\n \\n     If oldnode is not None, check if the patch content (without commit message\\n     and metadata) has changed before creating another diff.\\n \\n     If actions is not None, they will be appended to the transaction.\\n     \\\"\\\"\\\"\\n     repo = ctx.repo()\\n     if oldnode:\\n         diffopts = mdiff.diffopts(git=True, context=32767)\\n         oldctx = repo.unfiltered()[oldnode]\\n         neednewdiff = getdiff(ctx, diffopts) != getdiff(oldctx, diffopts)\\n     else:\\n         neednewdiff = True\\n \\n     transactions = []\\n     if neednewdiff:\\n         diff = creatediff(ctx)\\n         transactions.append({b'type': b'update', b'value': diff[b'phid']})\\n         if comment:\\n             transactions.append({b'type': b'comment', b'value': comment})\\n     else:\\n         # Even if we don't need to upload a new diff because the patch content\\n         # does not change. We might still need to update its metadata so\\n         # pushers could know the correct node metadata.\\n         assert olddiff\\n         diff = olddiff\\n     writediffproperties(ctx, diff)\\n \\n     # Set the parent Revision every time, so commit re-ordering is picked-up\\n     if parentrevphid:\\n         transactions.append(\\n             {b'type': b'parents.set', b'value': [parentrevphid]}\\n         )\\n \\n     if actions:\\n         transactions += actions\\n \\n     # Parse commit message and update related fields.\\n     desc = ctx.description()\\n     info = callconduit(\\n         repo.ui, b'differential.parsecommitmessage', {b'corpus': desc}\\n     )\\n     for k, v in info[b'fields'].items():\\n         if k in [b'title', b'summary', b'testPlan']:\\n             transactions.append({b'type': k, b'value': v})\\n \\n     params = {b'transactions': transactions}\\n     if revid is not None:\\n         # Update an existing Differential Revision\\n         params[b'objectIdentifier'] = revid\\n \\n     revision = callconduit(repo.ui, b'differential.revision.edit', params)\\n     if not revision:\\n         raise error.Abort(_(b'cannot create revision for %s') % ctx)\\n \\n     return revision, diff\\n \\n \\n def userphids(repo, names):\\n     \\\"\\\"\\\"convert user names to PHIDs\\\"\\\"\\\"\\n     names = [name.lower() for name in names]\\n     query = {b'constraints': {b'usernames': names}}\\n     result = callconduit(repo.ui, b'user.search', query)\\n     # username not found is not an error of the API. So check if we have missed\\n     # some names here.\\n     data = result[b'data']\\n     resolved = set(entry[b'fields'][b'username'].lower() for entry in data)\\n     unresolved = set(names) - resolved\\n     if unresolved:\\n         raise error.Abort(\\n             _(b'unknown username: %s') % b' '.join(sorted(unresolved))\\n         )\\n     return [entry[b'phid'] for entry in data]\\n \\n \\n @vcrcommand(\\n     b'phabsend',\\n     [\\n         (b'r', b'rev', [], _(b'revisions to send'), _(b'REV')),\\n         (b'', b'amend', True, _(b'update commit messages')),\\n         (b'', b'reviewer', [], _(b'specify reviewers')),\\n         (b'', b'blocker', [], _(b'specify blocking reviewers')),\\n         (\\n             b'm',\\n             b'comment',\\n             b'',\\n             _(b'add a comment to Revisions with new\\/updated Diffs'),\\n         ),\\n         (b'', b'confirm', None, _(b'ask for confirmation before sending')),\\n     ],\\n     _(b'REV [OPTIONS]'),\\n     helpcategory=command.CATEGORY_IMPORT_EXPORT,\\n )\\n def phabsend(ui, repo, *revs, **opts):\\n     \\\"\\\"\\\"upload changesets to Phabricator\\n \\n     If there are multiple revisions specified, they will be send as a stack\\n     with a linear dependencies relationship using the order specified by the\\n     revset.\\n \\n     For the first time uploading changesets, local tags will be created to\\n     maintain the association. After the first time, phabsend will check\\n     obsstore and tags information so it can figure out whether to update an\\n     existing Differential Revision, or create a new one.\\n \\n     If --amend is set, update commit messages so they have the\\n     ``Differential Revision`` URL, remove related tags. This is similar to what\\n     arcanist will do, and is more desired in author-push workflows. Otherwise,\\n     use local tags to record the ``Differential Revision`` association.\\n \\n     The --confirm option lets you confirm changesets before sending them. You\\n     can also add following to your configuration file to make it default\\n     behaviour::\\n \\n         [phabsend]\\n         confirm = true\\n \\n     phabsend will check obsstore and the above association to decide whether to\\n     update an existing Differential Revision, or create a new one.\\n     \\\"\\\"\\\"\\n     opts = pycompat.byteskwargs(opts)\\n     revs = list(revs) + opts.get(b'rev', [])\\n     revs = scmutil.revrange(repo, revs)\\n     revs.sort()  # ascending order to preserve topological parent\\/child in phab\\n \\n     if not revs:\\n         raise error.Abort(_(b'phabsend requires at least one changeset'))\\n     if opts.get(b'amend'):\\n         cmdutil.checkunfinished(repo)\\n \\n     # {newnode: (oldnode, olddiff, olddrev}\\n     oldmap = getoldnodedrevmap(repo, [repo[r].node() for r in revs])\\n \\n     confirm = ui.configbool(b'phabsend', b'confirm')\\n     confirm |= bool(opts.get(b'confirm'))\\n     if confirm:\\n         confirmed = _confirmbeforesend(repo, revs, oldmap)\\n         if not confirmed:\\n             raise error.Abort(_(b'phabsend cancelled'))\\n \\n     actions = []\\n     reviewers = opts.get(b'reviewer', [])\\n     blockers = opts.get(b'blocker', [])\\n     phids = []\\n     if reviewers:\\n         phids.extend(userphids(repo, reviewers))\\n     if blockers:\\n         phids.extend(\\n             map(lambda phid: b'blocking(%s)' % phid, userphids(repo, blockers))\\n         )\\n     if phids:\\n         actions.append({b'type': b'reviewers.add', b'value': phids})\\n \\n     drevids = []  # [int]\\n     diffmap = {}  # {newnode: diff}\\n \\n     # Send patches one by one so we know their Differential Revision PHIDs and\\n     # can provide dependency relationship\\n     lastrevphid = None\\n     for rev in revs:\\n         ui.debug(b'sending rev %d\\\\n' % rev)\\n         ctx = repo[rev]\\n \\n         # Get Differential Revision ID\\n         oldnode, olddiff, revid = oldmap.get(ctx.node(), (None, None, None))\\n         if oldnode != ctx.node() or opts.get(b'amend'):\\n             # Create or update Differential Revision\\n             revision, diff = createdifferentialrevision(\\n                 ctx,\\n                 revid,\\n                 lastrevphid,\\n                 oldnode,\\n                 olddiff,\\n                 actions,\\n                 opts.get(b'comment'),\\n             )\\n             diffmap[ctx.node()] = diff\\n             newrevid = int(revision[b'object'][b'id'])\\n             newrevphid = revision[b'object'][b'phid']\\n             if revid:\\n                 action = b'updated'\\n             else:\\n                 action = b'created'\\n \\n             # Create a local tag to note the association, if commit message\\n             # does not have it already\\n             m = _differentialrevisiondescre.search(ctx.description())\\n             if not m or int(m.group('id')) != newrevid:\\n                 tagname = b'D%d' % newrevid\\n                 tags.tag(\\n                     repo,\\n                     tagname,\\n                     ctx.node(),\\n                     message=None,\\n                     user=None,\\n                     date=None,\\n                     local=True,\\n                 )\\n         else:\\n             # Nothing changed. But still set \\\"newrevphid\\\" so the next revision\\n             # could depend on this one and \\\"newrevid\\\" for the summary line.\\n             newrevphid = querydrev(repo, b'%d' % revid)[0][b'phid']\\n             newrevid = revid\\n             action = b'skipped'\\n \\n         actiondesc = ui.label(\\n             {\\n                 b'created': _(b'created'),\\n                 b'skipped': _(b'skipped'),\\n                 b'updated': _(b'updated'),\\n             }[action],\\n             b'phabricator.action.%s' % action,\\n         )\\n         drevdesc = ui.label(b'D%d' % newrevid, b'phabricator.drev')\\n         nodedesc = ui.label(bytes(ctx), b'phabricator.node')\\n         desc = ui.label(ctx.description().split(b'\\\\n')[0], b'phabricator.desc')\\n         ui.write(\\n             _(b'%s - %s - %s: %s\\\\n') % (drevdesc, actiondesc, nodedesc, desc)\\n         )\\n         drevids.append(newrevid)\\n         lastrevphid = newrevphid\\n \\n     # Update commit messages and remove tags\\n     if opts.get(b'amend'):\\n         unfi = repo.unfiltered()\\n         drevs = callconduit(ui, b'differential.query', {b'ids': drevids})\\n         with repo.wlock(), repo.lock(), repo.transaction(b'phabsend'):\\n             wnode = unfi[b'.'].node()\\n             mapping = {}  # {oldnode: [newnode]}\\n             for i, rev in enumerate(revs):\\n                 old = unfi[rev]\\n                 drevid = drevids[i]\\n                 drev = [d for d in drevs if int(d[b'id']) == drevid][0]\\n                 newdesc = getdescfromdrev(drev)\\n                 # Make sure commit message contain \\\"Differential Revision\\\"\\n                 if old.description() != newdesc:\\n                     if old.phase() == phases.public:\\n                         ui.warn(\\n                             _(b\\\"warning: not updating public commit %s\\\\n\\\")\\n                             % scmutil.formatchangeid(old)\\n                         )\\n                         continue\\n                     parents = [\\n                         mapping.get(old.p1().node(), (old.p1(),))[0],\\n                         mapping.get(old.p2().node(), (old.p2(),))[0],\\n                     ]\\n                     new = context.metadataonlyctx(\\n                         repo,\\n                         old,\\n                         parents=parents,\\n                         text=newdesc,\\n                         user=old.user(),\\n                         date=old.date(),\\n                         extra=old.extra(),\\n                     )\\n \\n                     newnode = new.commit()\\n \\n                     mapping[old.node()] = [newnode]\\n                     # Update diff property\\n                     # If it fails just warn and keep going, otherwise the DREV\\n                     # associations will be lost\\n                     try:\\n                         writediffproperties(unfi[newnode], diffmap[old.node()])\\n                     except util.urlerr.urlerror:\\n                         ui.warnnoi18n(\\n                             b'Failed to update metadata for D%d\\\\n' % drevid\\n                         )\\n                 # Remove local tags since it's no longer necessary\\n                 tagname = b'D%d' % drevid\\n                 if tagname in repo.tags():\\n                     tags.tag(\\n                         repo,\\n                         tagname,\\n                         nullid,\\n                         message=None,\\n                         user=None,\\n                         date=None,\\n                         local=True,\\n                     )\\n             scmutil.cleanupnodes(repo, mapping, b'phabsend', fixphase=True)\\n             if wnode in mapping:\\n                 unfi.setparents(mapping[wnode][0])\\n \\n \\n # Map from \\\"hg:meta\\\" keys to header understood by \\\"hg import\\\". The order is\\n # consistent with \\\"hg export\\\" output.\\n _metanamemap = util.sortdict(\\n     [\\n         (b'user', b'User'),\\n         (b'date', b'Date'),\\n         (b'branch', b'Branch'),\\n         (b'node', b'Node ID'),\\n         (b'parent', b'Parent '),\\n     ]\\n )\\n \\n \\n def _confirmbeforesend(repo, revs, oldmap):\\n     url, token = readurltoken(repo.ui)\\n     ui = repo.ui\\n     for rev in revs:\\n         ctx = repo[rev]\\n         desc = ctx.description().splitlines()[0]\\n         oldnode, olddiff, drevid = oldmap.get(ctx.node(), (None, None, None))\\n         if drevid:\\n             drevdesc = ui.label(b'D%d' % drevid, b'phabricator.drev')\\n         else:\\n             drevdesc = ui.label(_(b'NEW'), b'phabricator.drev')\\n \\n         ui.write(\\n             _(b'%s - %s: %s\\\\n')\\n             % (\\n                 drevdesc,\\n                 ui.label(bytes(ctx), b'phabricator.node'),\\n                 ui.label(desc, b'phabricator.desc'),\\n             )\\n         )\\n \\n     if ui.promptchoice(\\n         _(b'Send the above changes to %s (yn)?$$ &Yes $$ &No') % url\\n     ):\\n         return False\\n \\n     return True\\n \\n \\n _knownstatusnames = {\\n     b'accepted',\\n     b'needsreview',\\n     b'needsrevision',\\n     b'closed',\\n     b'abandoned',\\n     b'changesplanned',\\n }\\n \\n \\n def _getstatusname(drev):\\n     \\\"\\\"\\\"get normalized status name from a Differential Revision\\\"\\\"\\\"\\n     return drev[b'statusName'].replace(b' ', b'').lower()\\n \\n \\n # Small language to specify differential revisions. Support symbols: (), :X,\\n # +, and -.\\n \\n _elements = {\\n     # token-type: binding-strength, primary, prefix, infix, suffix\\n     b'(': (12, None, (b'group', 1, b')'), None, None),\\n     b':': (8, None, (b'ancestors', 8), None, None),\\n     b'&': (5, None, None, (b'and_', 5), None),\\n     b'+': (4, None, None, (b'add', 4), None),\\n     b'-': (4, None, None, (b'sub', 4), None),\\n     b')': (0, None, None, None, None),\\n     b'symbol': (0, b'symbol', None, None, None),\\n     b'end': (0, None, None, None, None),\\n }\\n \\n \\n def _tokenize(text):\\n     view = memoryview(text)  # zero-copy slice\\n     special = b'():+-& '\\n     pos = 0\\n     length = len(text)\\n     while pos \\u003c length:\\n         symbol = b''.join(\\n             itertools.takewhile(\\n                 lambda ch: ch not in special, pycompat.iterbytestr(view[pos:])\\n             )\\n         )\\n         if symbol:\\n             yield (b'symbol', symbol, pos)\\n             pos += len(symbol)\\n         else:  # special char, ignore space\\n             if text[pos : pos + 1] != b' ':\\n                 yield (text[pos : pos + 1], None, pos)\\n             pos += 1\\n     yield (b'end', None, pos)\\n \\n \\n def _parse(text):\\n     tree, pos = parser.parser(_elements).parse(_tokenize(text))\\n     if pos != len(text):\\n         raise error.ParseError(b'invalid token', pos)\\n     return tree\\n \\n \\n def _parsedrev(symbol):\\n     \\\"\\\"\\\"str -\\u003e int or None, ex. 'D45' -\\u003e 45; '12' -\\u003e 12; 'x' -\\u003e None\\\"\\\"\\\"\\n     if symbol.startswith(b'D') and symbol[1:].isdigit():\\n         return int(symbol[1:])\\n     if symbol.isdigit():\\n         return int(symbol)\\n \\n \\n def _prefetchdrevs(tree):\\n     \\\"\\\"\\\"return ({single-drev-id}, {ancestor-drev-id}) to prefetch\\\"\\\"\\\"\\n     drevs = set()\\n     ancestordrevs = set()\\n     op = tree[0]\\n     if op == b'symbol':\\n         r = _parsedrev(tree[1])\\n         if r:\\n             drevs.add(r)\\n     elif op == b'ancestors':\\n         r, a = _prefetchdrevs(tree[1])\\n         drevs.update(r)\\n         ancestordrevs.update(r)\\n         ancestordrevs.update(a)\\n     else:\\n         for t in tree[1:]:\\n             r, a = _prefetchdrevs(t)\\n             drevs.update(r)\\n             ancestordrevs.update(a)\\n     return drevs, ancestordrevs\\n \\n \\n def querydrev(repo, spec):\\n     \\\"\\\"\\\"return a list of \\\"Differential Revision\\\" dicts\\n \\n     spec is a string using a simple query language, see docstring in phabread\\n     for details.\\n \\n     A \\\"Differential Revision dict\\\" looks like:\\n \\n         {\\n             \\\"activeDiffPHID\\\": \\\"PHID-DIFF-xoqnjkobbm6k4dk6hi72\\\",\\n             \\\"authorPHID\\\": \\\"PHID-USER-tv3ohwc4v4jeu34otlye\\\",\\n             \\\"auxiliary\\\": {\\n               \\\"phabricator:depends-on\\\": [\\n                 \\\"PHID-DREV-gbapp366kutjebt7agcd\\\"\\n               ]\\n               \\\"phabricator:projects\\\": [],\\n             },\\n             \\\"branch\\\": \\\"default\\\",\\n             \\\"ccs\\\": [],\\n             \\\"commits\\\": [],\\n             \\\"dateCreated\\\": \\\"1499181406\\\",\\n             \\\"dateModified\\\": \\\"1499182103\\\",\\n             \\\"diffs\\\": [\\n               \\\"3\\\",\\n               \\\"4\\\",\\n             ],\\n             \\\"hashes\\\": [],\\n             \\\"id\\\": \\\"2\\\",\\n             \\\"lineCount\\\": \\\"2\\\",\\n             \\\"phid\\\": \\\"PHID-DREV-672qvysjcczopag46qty\\\",\\n             \\\"properties\\\": {},\\n             \\\"repositoryPHID\\\": \\\"PHID-REPO-hub2hx62ieuqeheznasv\\\",\\n             \\\"reviewers\\\": [],\\n             \\\"sourcePath\\\": null\\n             \\\"status\\\": \\\"0\\\",\\n             \\\"statusName\\\": \\\"Needs Review\\\",\\n             \\\"summary\\\": \\\"\\\",\\n             \\\"testPlan\\\": \\\"\\\",\\n             \\\"title\\\": \\\"example\\\",\\n             \\\"uri\\\": \\\"https:\\/\\/phab.example.com\\/D2\\\",\\n         }\\n     \\\"\\\"\\\"\\n     # TODO: replace differential.query and differential.querydiffs with\\n     # differential.diff.search because the former (and their output) are\\n     # frozen, and planned to be deprecated and removed.\\n \\n     def fetch(params):\\n         \\\"\\\"\\\"params -\\u003e single drev or None\\\"\\\"\\\"\\n         key = (params.get(b'ids') or params.get(b'phids') or [None])[0]\\n         if key in prefetched:\\n             return prefetched[key]\\n         drevs = callconduit(repo.ui, b'differential.query', params)\\n         # Fill prefetched with the result\\n         for drev in drevs:\\n             prefetched[drev[b'phid']] = drev\\n             prefetched[int(drev[b'id'])] = drev\\n         if key not in prefetched:\\n             raise error.Abort(\\n                 _(b'cannot get Differential Revision %r') % params\\n             )\\n         return prefetched[key]\\n \\n     def getstack(topdrevids):\\n         \\\"\\\"\\\"given a top, get a stack from the bottom, [id] -\\u003e [id]\\\"\\\"\\\"\\n         visited = set()\\n         result = []\\n         queue = [{b'ids': [i]} for i in topdrevids]\\n         while queue:\\n             params = queue.pop()\\n             drev = fetch(params)\\n             if drev[b'id'] in visited:\\n                 continue\\n             visited.add(drev[b'id'])\\n             result.append(int(drev[b'id']))\\n             auxiliary = drev.get(b'auxiliary', {})\\n             depends = auxiliary.get(b'phabricator:depends-on', [])\\n             for phid in depends:\\n                 queue.append({b'phids': [phid]})\\n         result.reverse()\\n         return smartset.baseset(result)\\n \\n     # Initialize prefetch cache\\n     prefetched = {}  # {id or phid: drev}\\n \\n     tree = _parse(spec)\\n     drevs, ancestordrevs = _prefetchdrevs(tree)\\n \\n     # developer config: phabricator.batchsize\\n     batchsize = repo.ui.configint(b'phabricator', b'batchsize')\\n \\n     # Prefetch Differential Revisions in batch\\n     tofetch = set(drevs)\\n     for r in ancestordrevs:\\n         tofetch.update(range(max(1, r - batchsize), r + 1))\\n     if drevs:\\n         fetch({b'ids': list(tofetch)})\\n     validids = sorted(set(getstack(list(ancestordrevs))) | set(drevs))\\n \\n     # Walk through the tree, return smartsets\\n     def walk(tree):\\n         op = tree[0]\\n         if op == b'symbol':\\n             drev = _parsedrev(tree[1])\\n             if drev:\\n                 return smartset.baseset([drev])\\n             elif tree[1] in _knownstatusnames:\\n                 drevs = [\\n                     r\\n                     for r in validids\\n                     if _getstatusname(prefetched[r]) == tree[1]\\n                 ]\\n                 return smartset.baseset(drevs)\\n             else:\\n                 raise error.Abort(_(b'unknown symbol: %s') % tree[1])\\n         elif op in {b'and_', b'add', b'sub'}:\\n             assert len(tree) == 3\\n             return getattr(operator, op)(walk(tree[1]), walk(tree[2]))\\n         elif op == b'group':\\n             return walk(tree[1])\\n         elif op == b'ancestors':\\n             return getstack(walk(tree[1]))\\n         else:\\n             raise error.ProgrammingError(b'illegal tree: %r' % tree)\\n \\n     return [prefetched[r] for r in walk(tree)]\\n \\n \\n def getdescfromdrev(drev):\\n     \\\"\\\"\\\"get description (commit message) from \\\"Differential Revision\\\"\\n \\n     This is similar to differential.getcommitmessage API. But we only care\\n     about limited fields: title, summary, test plan, and URL.\\n     \\\"\\\"\\\"\\n     title = drev[b'title']\\n     summary = drev[b'summary'].rstrip()\\n     testplan = drev[b'testPlan'].rstrip()\\n     if testplan:\\n         testplan = b'Test Plan:\\\\n%s' % testplan\\n     uri = b'Differential Revision: %s' % drev[b'uri']\\n     return b'\\\\n\\\\n'.join(filter(None, [title, summary, testplan, uri]))\\n \\n \\n def getdiffmeta(diff):\\n     \\\"\\\"\\\"get commit metadata (date, node, user, p1) from a diff object\\n \\n     The metadata could be \\\"hg:meta\\\", sent by phabsend, like:\\n \\n         \\\"properties\\\": {\\n           \\\"hg:meta\\\": {\\n             \\\"branch\\\": \\\"default\\\",\\n             \\\"date\\\": \\\"1499571514 25200\\\",\\n             \\\"node\\\": \\\"98c08acae292b2faf60a279b4189beb6cff1414d\\\",\\n             \\\"user\\\": \\\"Foo Bar \\u003cfoo@example.com\\u003e\\\",\\n             \\\"parent\\\": \\\"6d0abad76b30e4724a37ab8721d630394070fe16\\\"\\n           }\\n         }\\n \\n     Or converted from \\\"local:commits\\\", sent by \\\"arc\\\", like:\\n \\n         \\\"properties\\\": {\\n           \\\"local:commits\\\": {\\n             \\\"98c08acae292b2faf60a279b4189beb6cff1414d\\\": {\\n               \\\"author\\\": \\\"Foo Bar\\\",\\n               \\\"authorEmail\\\": \\\"foo@example.com\\\"\\n               \\\"branch\\\": \\\"default\\\",\\n               \\\"commit\\\": \\\"98c08acae292b2faf60a279b4189beb6cff1414d\\\",\\n               \\\"local\\\": \\\"1000\\\",\\n               \\\"message\\\": \\\"...\\\",\\n               \\\"parents\\\": [\\\"6d0abad76b30e4724a37ab8721d630394070fe16\\\"],\\n               \\\"rev\\\": \\\"98c08acae292b2faf60a279b4189beb6cff1414d\\\",\\n               \\\"summary\\\": \\\"...\\\",\\n               \\\"tag\\\": \\\"\\\",\\n               \\\"time\\\": 1499546314,\\n             }\\n           }\\n         }\\n \\n     Note: metadata extracted from \\\"local:commits\\\" will lose time zone\\n     information.\\n     \\\"\\\"\\\"\\n     props = diff.get(b'properties') or {}\\n     meta = props.get(b'hg:meta')\\n     if not meta:\\n         if props.get(b'local:commits'):\\n             commit = sorted(props[b'local:commits'].values())[0]\\n             meta = {}\\n             if b'author' in commit and b'authorEmail' in commit:\\n                 meta[b'user'] = b'%s \\u003c%s\\u003e' % (\\n                     commit[b'author'],\\n                     commit[b'authorEmail'],\\n                 )\\n             if b'time' in commit:\\n                 meta[b'date'] = b'%d 0' % int(commit[b'time'])\\n             if b'branch' in commit:\\n                 meta[b'branch'] = commit[b'branch']\\n             node = commit.get(b'commit', commit.get(b'rev'))\\n             if node:\\n                 meta[b'node'] = node\\n             if len(commit.get(b'parents', ())) \\u003e= 1:\\n                 meta[b'parent'] = commit[b'parents'][0]\\n         else:\\n             meta = {}\\n     if b'date' not in meta and b'dateCreated' in diff:\\n         meta[b'date'] = b'%s 0' % diff[b'dateCreated']\\n     if b'branch' not in meta and diff.get(b'branch'):\\n         meta[b'branch'] = diff[b'branch']\\n     if b'parent' not in meta and diff.get(b'sourceControlBaseRevision'):\\n         meta[b'parent'] = diff[b'sourceControlBaseRevision']\\n     return meta\\n \\n \\n-def readpatch(repo, drevs, write):\\n+def readpatch(ui, drevs, write):\\n     \\\"\\\"\\\"generate plain-text patch readable by 'hg import'\\n \\n     write is usually ui.write. drevs is what \\\"querydrev\\\" returns, results of\\n     \\\"differential.query\\\".\\n     \\\"\\\"\\\"\\n     # Prefetch hg:meta property for all diffs\\n     diffids = sorted(set(max(int(v) for v in drev[b'diffs']) for drev in drevs))\\n-    diffs = callconduit(repo.ui, b'differential.querydiffs', {b'ids': diffids})\\n+    diffs = callconduit(ui, b'differential.querydiffs', {b'ids': diffids})\\n \\n     # Generate patch for each drev\\n     for drev in drevs:\\n-        repo.ui.note(_(b'reading D%s\\\\n') % drev[b'id'])\\n+        ui.note(_(b'reading D%s\\\\n') % drev[b'id'])\\n \\n         diffid = max(int(v) for v in drev[b'diffs'])\\n-        body = callconduit(\\n-            repo.ui, b'differential.getrawdiff', {b'diffID': diffid}\\n-        )\\n+        body = callconduit(ui, b'differential.getrawdiff', {b'diffID': diffid})\\n         desc = getdescfromdrev(drev)\\n         header = b'# HG changeset patch\\\\n'\\n \\n         # Try to preserve metadata from hg:meta property. Write hg patch\\n         # headers that can be read by the \\\"import\\\" command. See patchheadermap\\n         # and extract in mercurial\\/patch.py for supported headers.\\n         meta = getdiffmeta(diffs[b'%d' % diffid])\\n         for k in _metanamemap.keys():\\n             if k in meta:\\n                 header += b'# %s %s\\\\n' % (_metanamemap[k], meta[k])\\n \\n         content = b'%s%s\\\\n%s' % (header, desc, body)\\n         write(content)\\n \\n \\n @vcrcommand(\\n     b'phabread',\\n     [(b'', b'stack', False, _(b'read dependencies'))],\\n     _(b'DREVSPEC [OPTIONS]'),\\n     helpcategory=command.CATEGORY_IMPORT_EXPORT,\\n )\\n def phabread(ui, repo, spec, **opts):\\n     \\\"\\\"\\\"print patches from Phabricator suitable for importing\\n \\n     DREVSPEC could be a Differential Revision identity, like ``D123``, or just\\n     the number ``123``. It could also have common operators like ``+``, ``-``,\\n     ``&``, ``(``, ``)`` for complex queries. Prefix ``:`` could be used to\\n     select a stack.\\n \\n     ``abandoned``, ``accepted``, ``closed``, ``needsreview``, ``needsrevision``\\n     could be used to filter patches by status. For performance reason, they\\n     only represent a subset of non-status selections and cannot be used alone.\\n \\n     For example, ``:D6+8-(2+D4)`` selects a stack up to D6, plus D8 and exclude\\n     D2 and D4. ``:D9 & needsreview`` selects \\\"Needs Review\\\" revisions in a\\n     stack up to D9.\\n \\n     If --stack is given, follow dependencies information and read all patches.\\n     It is equivalent to the ``:`` operator.\\n     \\\"\\\"\\\"\\n     opts = pycompat.byteskwargs(opts)\\n     if opts.get(b'stack'):\\n         spec = b':(%s)' % spec\\n     drevs = querydrev(repo, spec)\\n-    readpatch(repo, drevs, ui.write)\\n+    readpatch(repo.ui, drevs, ui.write)\\n \\n \\n @vcrcommand(\\n     b'phabupdate',\\n     [\\n         (b'', b'accept', False, _(b'accept revisions')),\\n         (b'', b'reject', False, _(b'reject revisions')),\\n         (b'', b'abandon', False, _(b'abandon revisions')),\\n         (b'', b'reclaim', False, _(b'reclaim revisions')),\\n         (b'm', b'comment', b'', _(b'comment on the last revision')),\\n     ],\\n     _(b'DREVSPEC [OPTIONS]'),\\n     helpcategory=command.CATEGORY_IMPORT_EXPORT,\\n )\\n def phabupdate(ui, repo, spec, **opts):\\n     \\\"\\\"\\\"update Differential Revision in batch\\n \\n     DREVSPEC selects revisions. See :hg:`help phabread` for its usage.\\n     \\\"\\\"\\\"\\n     opts = pycompat.byteskwargs(opts)\\n     flags = [n for n in b'accept reject abandon reclaim'.split() if opts.get(n)]\\n     if len(flags) \\u003e 1:\\n         raise error.Abort(_(b'%s cannot be used together') % b', '.join(flags))\\n \\n     actions = []\\n     for f in flags:\\n         actions.append({b'type': f, b'value': True})\\n \\n     drevs = querydrev(repo, spec)\\n     for i, drev in enumerate(drevs):\\n         if i + 1 == len(drevs) and opts.get(b'comment'):\\n             actions.append({b'type': b'comment', b'value': opts[b'comment']})\\n         if actions:\\n             params = {\\n                 b'objectIdentifier': drev[b'phid'],\\n                 b'transactions': actions,\\n             }\\n             callconduit(ui, b'differential.revision.edit', params)\\n \\n \\n @eh.templatekeyword(b'phabreview', requires={b'ctx'})\\n def template_review(context, mapping):\\n     \\\"\\\"\\\":phabreview: Object describing the review for this changeset.\\n     Has attributes `url` and `id`.\\n     \\\"\\\"\\\"\\n     ctx = context.resource(mapping, b'ctx')\\n     m = _differentialrevisiondescre.search(ctx.description())\\n     if m:\\n         return templateutil.hybriddict(\\n             {b'url': m.group('url'), b'id': b\\\"D%s\\\" % m.group('id'),}\\n         )\\n     else:\\n         tags = ctx.repo().nodetags(ctx.node())\\n         for t in tags:\\n             if _differentialrevisiontagre.match(t):\\n                 url = ctx.repo().ui.config(b'phabricator', b'url')\\n                 if not url.endswith(b'\\/'):\\n                     url += b'\\/'\\n                 url += t\\n \\n                 return templateutil.hybriddict({b'url': url, b'id': t,})\\n     return None\\n \\n \\n @eh.templatekeyword(b'phabstatus', requires={b'ctx', b'repo', b'ui'})\\n def template_status(context, mapping):\\n     \\\"\\\"\\\":phabstatus: String. Status of Phabricator differential.\\n     \\\"\\\"\\\"\\n     ctx = context.resource(mapping, b'ctx')\\n     repo = context.resource(mapping, b'repo')\\n     ui = context.resource(mapping, b'ui')\\n \\n     rev = ctx.rev()\\n     try:\\n         drevid = getdrevmap(repo, [rev])[rev]\\n     except KeyError:\\n         return None\\n     drevs = callconduit(ui, b'differential.query', {b'ids': [drevid]})\\n     for drev in drevs:\\n         if int(drev[b'id']) == drevid:\\n             return templateutil.hybriddict(\\n                 {b'url': drev[b'uri'], b'status': drev[b'statusName'],}\\n             )\\n     return None\\n \\n \\n @show.showview(b'phabstatus', csettopic=b'work')\\n def phabstatusshowview(ui, repo, displayer):\\n     \\\"\\\"\\\"Phabricator differiential status\\\"\\\"\\\"\\n     revs = repo.revs('sort(_underway(), topo)')\\n     drevmap = getdrevmap(repo, revs)\\n     unknownrevs, drevids, revsbydrevid = [], set([]), {}\\n     for rev, drevid in pycompat.iteritems(drevmap):\\n         if drevid is not None:\\n             drevids.add(drevid)\\n             revsbydrevid.setdefault(drevid, set([])).add(rev)\\n         else:\\n             unknownrevs.append(rev)\\n \\n     drevs = callconduit(ui, b'differential.query', {b'ids': list(drevids)})\\n     drevsbyrev = {}\\n     for drev in drevs:\\n         for rev in revsbydrevid[int(drev[b'id'])]:\\n             drevsbyrev[rev] = drev\\n \\n     def phabstatus(ctx):\\n         drev = drevsbyrev[ctx.rev()]\\n         status = ui.label(\\n             b'%(statusName)s' % drev,\\n             b'phabricator.status.%s' % _getstatusname(drev),\\n         )\\n         ui.write(b\\\"\\\\n%s %s\\\\n\\\" % (drev[b'uri'], status))\\n \\n     revs -= smartset.baseset(unknownrevs)\\n     revdag = graphmod.dagwalker(repo, revs)\\n \\n     ui.setconfig(b'experimental', b'graphshorten', True)\\n     displayer._exthook = phabstatus\\n     nodelen = show.longestshortest(repo, revs)\\n     logcmdutil.displaygraph(\\n         ui,\\n         repo,\\n         revdag,\\n         displayer,\\n         graphmod.asciiedges,\\n         props={b'nodelen': nodelen},\\n     )\\n\"}]}],\"properties\":[]}},\"error_code\":null,\"error_info\":null}"
mercurial-5.5.2/tests/phabricator/phabread-multi-drev.json-76-                }, 
##############################################
mercurial-5.5.2/tests/phabricator/phabread-str-time.json-112-                "body": {
mercurial-5.5.2/tests/phabricator/phabread-str-time.json:113:                    "string": "{\"result\":{\"4092\":{\"id\":\"4092\",\"revisionID\":\"1285\",\"dateCreated\":\"1512396989\",\"dateModified\":\"1512396993\",\"sourceControlBaseRevision\":null,\"sourceControlPath\":null,\"sourceControlSystem\":null,\"branch\":null,\"bookmark\":null,\"creationMethod\":\"web\",\"description\":null,\"unitStatus\":\"4\",\"lintStatus\":\"4\",\"changes\":[{\"id\":\"9311\",\"metadata\":{\"line:first\":188},\"oldPath\":\"mercurial\\/repoview.py\",\"currentPath\":\"mercurial\\/repoview.py\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"11\",\"delLines\":\"0\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"242\",\"newLength\":\"253\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\" # repoview.py - Filtered view of a localrepo object\\n #\\n # Copyright 2012 Pierre-Yves David \\u003cpierre-yves.david@ens-lyon.org\\u003e\\n #                Logilab SA        \\u003ccontact@logilab.fr\\u003e\\n #\\n # This software may be used and distributed according to the terms of the\\n # GNU General Public License version 2 or any later version.\\n \\n from __future__ import absolute_import\\n \\n import copy\\n \\n from .node import nullrev\\n from . import (\\n     obsolete,\\n     phases,\\n     tags as tagsmod,\\n )\\n \\n def hideablerevs(repo):\\n     \\\"\\\"\\\"Revision candidates to be hidden\\n \\n     This is a standalone function to allow extensions to wrap it.\\n \\n     Because we use the set of immutable changesets as a fallback subset in\\n     branchmap (see mercurial.branchmap.subsettable), you cannot set \\\"public\\\"\\n     changesets as \\\"hideable\\\". Doing so would break multiple code assertions and\\n     lead to crashes.\\\"\\\"\\\"\\n     return obsolete.getrevs(repo, 'obsolete')\\n \\n def pinnedrevs(repo):\\n     \\\"\\\"\\\"revisions blocking hidden changesets from being filtered\\n     \\\"\\\"\\\"\\n \\n     cl = repo.changelog\\n     pinned = set()\\n     pinned.update([par.rev() for par in repo[None].parents()])\\n     pinned.update([cl.rev(bm) for bm in repo._bookmarks.values()])\\n \\n     tags = {}\\n     tagsmod.readlocaltags(repo.ui, repo, tags, {})\\n     if tags:\\n         rev, nodemap = cl.rev, cl.nodemap\\n         pinned.update(rev(t[0]) for t in tags.values() if t[0] in nodemap)\\n     return pinned\\n \\n \\n def _revealancestors(pfunc, hidden, revs):\\n     \\\"\\\"\\\"reveals contiguous chains of hidden ancestors of 'revs' by removing them\\n     from 'hidden'\\n \\n     - pfunc(r): a funtion returning parent of 'r',\\n     - hidden: the (preliminary) hidden revisions, to be updated\\n     - revs: iterable of revnum,\\n \\n     (Ancestors are revealed exclusively, i.e. the elements in 'revs' are\\n     *not* revealed)\\n     \\\"\\\"\\\"\\n     stack = list(revs)\\n     while stack:\\n         for p in pfunc(stack.pop()):\\n             if p != nullrev and p in hidden:\\n                 hidden.remove(p)\\n                 stack.append(p)\\n \\n def computehidden(repo):\\n     \\\"\\\"\\\"compute the set of hidden revision to filter\\n \\n     During most operation hidden should be filtered.\\\"\\\"\\\"\\n     assert not repo.changelog.filteredrevs\\n \\n     hidden = hideablerevs(repo)\\n     if hidden:\\n         hidden = set(hidden - pinnedrevs(repo))\\n         pfunc = repo.changelog.parentrevs\\n         mutablephases = (phases.draft, phases.secret)\\n         mutable = repo._phasecache.getrevset(repo, mutablephases)\\n \\n         visible = mutable - hidden\\n         _revealancestors(pfunc, hidden, visible)\\n     return frozenset(hidden)\\n \\n def computeunserved(repo):\\n     \\\"\\\"\\\"compute the set of revision that should be filtered when used a server\\n \\n     Secret and hidden changeset should not pretend to be here.\\\"\\\"\\\"\\n     assert not repo.changelog.filteredrevs\\n     # fast path in simple case to avoid impact of non optimised code\\n     hiddens = filterrevs(repo, 'visible')\\n     if phases.hassecret(repo):\\n         cl = repo.changelog\\n         secret = phases.secret\\n         getphase = repo._phasecache.phase\\n         first = min(cl.rev(n) for n in repo._phasecache.phaseroots[secret])\\n         revs = cl.revs(start=first)\\n         secrets = set(r for r in revs if getphase(repo, r) \\u003e= secret)\\n         return frozenset(hiddens | secrets)\\n     else:\\n         return hiddens\\n \\n def computemutable(repo):\\n     assert not repo.changelog.filteredrevs\\n     # fast check to avoid revset call on huge repo\\n     if any(repo._phasecache.phaseroots[1:]):\\n         getphase = repo._phasecache.phase\\n         maymutable = filterrevs(repo, 'base')\\n         return frozenset(r for r in maymutable if getphase(repo, r))\\n     return frozenset()\\n \\n def computeimpactable(repo):\\n     \\\"\\\"\\\"Everything impactable by mutable revision\\n \\n     The immutable filter still have some chance to get invalidated. This will\\n     happen when:\\n \\n     - you garbage collect hidden changeset,\\n     - public phase is moved backward,\\n     - something is changed in the filtering (this could be fixed)\\n \\n     This filter out any mutable changeset and any public changeset that may be\\n     impacted by something happening to a mutable revision.\\n \\n     This is achieved by filtered everything with a revision number egal or\\n     higher than the first mutable changeset is filtered.\\\"\\\"\\\"\\n     assert not repo.changelog.filteredrevs\\n     cl = repo.changelog\\n     firstmutable = len(cl)\\n     for roots in repo._phasecache.phaseroots[1:]:\\n         if roots:\\n             firstmutable = min(firstmutable, min(cl.rev(r) for r in roots))\\n     # protect from nullrev root\\n     firstmutable = max(0, firstmutable)\\n     return frozenset(xrange(firstmutable, len(cl)))\\n \\n # function to compute filtered set\\n #\\n # When adding a new filter you MUST update the table at:\\n #     mercurial.branchmap.subsettable\\n # Otherwise your filter will have to recompute all its branches cache\\n # from scratch (very slow).\\n filtertable = {'visible': computehidden,\\n                'served': computeunserved,\\n                'immutable':  computemutable,\\n                'base':  computeimpactable}\\n \\n def filterrevs(repo, filtername):\\n     \\\"\\\"\\\"returns set of filtered revision for this filter name\\\"\\\"\\\"\\n     if filtername not in repo.filteredrevcache:\\n         func = filtertable[filtername]\\n         repo.filteredrevcache[filtername] = func(repo.unfiltered())\\n     return repo.filteredrevcache[filtername]\\n \\n class repoview(object):\\n     \\\"\\\"\\\"Provide a read\\/write view of a repo through a filtered changelog\\n \\n     This object is used to access a filtered version of a repository without\\n     altering the original repository object itself. We can not alter the\\n     original object for two main reasons:\\n     - It prevents the use of a repo with multiple filters at the same time. In\\n       particular when multiple threads are involved.\\n     - It makes scope of the filtering harder to control.\\n \\n     This object behaves very closely to the original repository. All attribute\\n     operations are done on the original repository:\\n     - An access to `repoview.someattr` actually returns `repo.someattr`,\\n     - A write to `repoview.someattr` actually sets value of `repo.someattr`,\\n     - A deletion of `repoview.someattr` actually drops `someattr`\\n       from `repo.__dict__`.\\n \\n     The only exception is the `changelog` property. It is overridden to return\\n     a (surface) copy of `repo.changelog` with some revisions filtered. The\\n     `filtername` attribute of the view control the revisions that need to be\\n     filtered.  (the fact the changelog is copied is an implementation detail).\\n \\n     Unlike attributes, this object intercepts all method calls. This means that\\n     all methods are run on the `repoview` object with the filtered `changelog`\\n     property. For this purpose the simple `repoview` class must be mixed with\\n     the actual class of the repository. This ensures that the resulting\\n     `repoview` object have the very same methods than the repo object. This\\n     leads to the property below.\\n \\n         repoview.method() --\\u003e repo.__class__.method(repoview)\\n \\n     The inheritance has to be done dynamically because `repo` can be of any\\n     subclasses of `localrepo`. Eg: `bundlerepo` or `statichttprepo`.\\n     \\\"\\\"\\\"\\n \\n+    # hidden revs which should be visible\\n+    _visibilityexceptions = set()\\n+\\n     def __init__(self, repo, filtername):\\n         object.__setattr__(self, r'_unfilteredrepo', repo)\\n         object.__setattr__(self, r'filtername', filtername)\\n         object.__setattr__(self, r'_clcachekey', None)\\n         object.__setattr__(self, r'_clcache', None)\\n \\n     # not a propertycache on purpose we shall implement a proper cache later\\n     @property\\n     def changelog(self):\\n         \\\"\\\"\\\"return a filtered version of the changeset\\n \\n         this changelog must not be used for writing\\\"\\\"\\\"\\n         # some cache may be implemented later\\n         unfi = self._unfilteredrepo\\n         unfichangelog = unfi.changelog\\n         # bypass call to changelog.method\\n         unfiindex = unfichangelog.index\\n         unfilen = len(unfiindex) - 1\\n         unfinode = unfiindex[unfilen - 1][7]\\n \\n         revs = filterrevs(unfi, self.filtername)\\n         cl = self._clcache\\n         newkey = (unfilen, unfinode, hash(revs), unfichangelog._delayed)\\n         # if cl.index is not unfiindex, unfi.changelog would be\\n         # recreated, and our clcache refers to garbage object\\n         if (cl is not None and\\n             (cl.index is not unfiindex or newkey != self._clcachekey)):\\n             cl = None\\n         # could have been made None by the previous if\\n         if cl is None:\\n             cl = copy.copy(unfichangelog)\\n             cl.filteredrevs = revs\\n             object.__setattr__(self, r'_clcache', cl)\\n             object.__setattr__(self, r'_clcachekey', newkey)\\n         return cl\\n \\n     def unfiltered(self):\\n         \\\"\\\"\\\"Return an unfiltered version of a repo\\\"\\\"\\\"\\n         return self._unfilteredrepo\\n \\n     def filtered(self, name):\\n         \\\"\\\"\\\"Return a filtered version of a repository\\\"\\\"\\\"\\n         if name == self.filtername:\\n             return self\\n         return self.unfiltered().filtered(name)\\n \\n+    def addvisibilityexceptions(self, revs):\\n+        \\\"\\\"\\\"adds hidden revs which should be visible to set of exceptions\\\"\\\"\\\"\\n+        self._visibilityexceptions.update(revs)\\n+\\n+    def getvisibilityexceptions(self):\\n+        \\\"\\\"\\\"returns the set of hidden revs which should be visible\\\"\\\"\\\"\\n+        return self._visibilityexceptions\\n+\\n     # everything access are forwarded to the proxied repo\\n     def __getattr__(self, attr):\\n         return getattr(self._unfilteredrepo, attr)\\n \\n     def __setattr__(self, attr, value):\\n         return setattr(self._unfilteredrepo, attr, value)\\n \\n     def __delattr__(self, attr):\\n         return delattr(self._unfilteredrepo, attr)\\n\"}]},{\"id\":\"9310\",\"metadata\":{\"line:first\":573},\"oldPath\":\"mercurial\\/localrepo.py\",\"currentPath\":\"mercurial\\/localrepo.py\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"8\",\"delLines\":\"0\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"2301\",\"newLength\":\"2309\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\" # localrepo.py - read\\/write repository class for mercurial\\n #\\n # Copyright 2005-2007 Matt Mackall \\u003cmpm@selenic.com\\u003e\\n #\\n # This software may be used and distributed according to the terms of the\\n # GNU General Public License version 2 or any later version.\\n \\n from __future__ import absolute_import\\n \\n import errno\\n import hashlib\\n import inspect\\n import os\\n import random\\n import time\\n import weakref\\n \\n from .i18n import _\\n from .node import (\\n     hex,\\n     nullid,\\n     short,\\n )\\n from . import (\\n     bookmarks,\\n     branchmap,\\n     bundle2,\\n     changegroup,\\n     changelog,\\n     color,\\n     context,\\n     dirstate,\\n     dirstateguard,\\n     discovery,\\n     encoding,\\n     error,\\n     exchange,\\n     extensions,\\n     filelog,\\n     hook,\\n     lock as lockmod,\\n     manifest,\\n     match as matchmod,\\n     merge as mergemod,\\n     mergeutil,\\n     namespaces,\\n     obsolete,\\n     pathutil,\\n     peer,\\n     phases,\\n     pushkey,\\n     pycompat,\\n     repository,\\n     repoview,\\n     revset,\\n     revsetlang,\\n     scmutil,\\n     sparse,\\n     store,\\n     subrepo,\\n     tags as tagsmod,\\n     transaction,\\n     txnutil,\\n     util,\\n     vfs as vfsmod,\\n )\\n \\n release = lockmod.release\\n urlerr = util.urlerr\\n urlreq = util.urlreq\\n \\n # set of (path, vfs-location) tuples. vfs-location is:\\n # - 'plain for vfs relative paths\\n # - '' for svfs relative paths\\n _cachedfiles = set()\\n \\n class _basefilecache(scmutil.filecache):\\n     \\\"\\\"\\\"All filecache usage on repo are done for logic that should be unfiltered\\n     \\\"\\\"\\\"\\n     def __get__(self, repo, type=None):\\n         if repo is None:\\n             return self\\n         return super(_basefilecache, self).__get__(repo.unfiltered(), type)\\n     def __set__(self, repo, value):\\n         return super(_basefilecache, self).__set__(repo.unfiltered(), value)\\n     def __delete__(self, repo):\\n         return super(_basefilecache, self).__delete__(repo.unfiltered())\\n \\n class repofilecache(_basefilecache):\\n     \\\"\\\"\\\"filecache for files in .hg but outside of .hg\\/store\\\"\\\"\\\"\\n     def __init__(self, *paths):\\n         super(repofilecache, self).__init__(*paths)\\n         for path in paths:\\n             _cachedfiles.add((path, 'plain'))\\n \\n     def join(self, obj, fname):\\n         return obj.vfs.join(fname)\\n \\n class storecache(_basefilecache):\\n     \\\"\\\"\\\"filecache for files in the store\\\"\\\"\\\"\\n     def __init__(self, *paths):\\n         super(storecache, self).__init__(*paths)\\n         for path in paths:\\n             _cachedfiles.add((path, ''))\\n \\n     def join(self, obj, fname):\\n         return obj.sjoin(fname)\\n \\n def isfilecached(repo, name):\\n     \\\"\\\"\\\"check if a repo has already cached \\\"name\\\" filecache-ed property\\n \\n     This returns (cachedobj-or-None, iscached) tuple.\\n     \\\"\\\"\\\"\\n     cacheentry = repo.unfiltered()._filecache.get(name, None)\\n     if not cacheentry:\\n         return None, False\\n     return cacheentry.obj, True\\n \\n class unfilteredpropertycache(util.propertycache):\\n     \\\"\\\"\\\"propertycache that apply to unfiltered repo only\\\"\\\"\\\"\\n \\n     def __get__(self, repo, type=None):\\n         unfi = repo.unfiltered()\\n         if unfi is repo:\\n             return super(unfilteredpropertycache, self).__get__(unfi)\\n         return getattr(unfi, self.name)\\n \\n class filteredpropertycache(util.propertycache):\\n     \\\"\\\"\\\"propertycache that must take filtering in account\\\"\\\"\\\"\\n \\n     def cachevalue(self, obj, value):\\n         object.__setattr__(obj, self.name, value)\\n \\n \\n def hasunfilteredcache(repo, name):\\n     \\\"\\\"\\\"check if a repo has an unfilteredpropertycache value for \\u003cname\\u003e\\\"\\\"\\\"\\n     return name in vars(repo.unfiltered())\\n \\n def unfilteredmethod(orig):\\n     \\\"\\\"\\\"decorate method that always need to be run on unfiltered version\\\"\\\"\\\"\\n     def wrapper(repo, *args, **kwargs):\\n         return orig(repo.unfiltered(), *args, **kwargs)\\n     return wrapper\\n \\n moderncaps = {'lookup', 'branchmap', 'pushkey', 'known', 'getbundle',\\n               'unbundle'}\\n legacycaps = moderncaps.union({'changegroupsubset'})\\n \\n class localpeer(repository.peer):\\n     '''peer for a local repo; reflects only the most recent API'''\\n \\n     def __init__(self, repo, caps=None):\\n         super(localpeer, self).__init__()\\n \\n         if caps is None:\\n             caps = moderncaps.copy()\\n         self._repo = repo.filtered('served')\\n         self._ui = repo.ui\\n         self._caps = repo._restrictcapabilities(caps)\\n \\n     # Begin of _basepeer interface.\\n \\n     @util.propertycache\\n     def ui(self):\\n         return self._ui\\n \\n     def url(self):\\n         return self._repo.url()\\n \\n     def local(self):\\n         return self._repo\\n \\n     def peer(self):\\n         return self\\n \\n     def canpush(self):\\n         return True\\n \\n     def close(self):\\n         self._repo.close()\\n \\n     # End of _basepeer interface.\\n \\n     # Begin of _basewirecommands interface.\\n \\n     def branchmap(self):\\n         return self._repo.branchmap()\\n \\n     def capabilities(self):\\n         return self._caps\\n \\n     def debugwireargs(self, one, two, three=None, four=None, five=None):\\n         \\\"\\\"\\\"Used to test argument passing over the wire\\\"\\\"\\\"\\n         return \\\"%s %s %s %s %s\\\" % (one, two, three, four, five)\\n \\n     def getbundle(self, source, heads=None, common=None, bundlecaps=None,\\n                   **kwargs):\\n         chunks = exchange.getbundlechunks(self._repo, source, heads=heads,\\n                                           common=common, bundlecaps=bundlecaps,\\n                                           **kwargs)\\n         cb = util.chunkbuffer(chunks)\\n \\n         if exchange.bundle2requested(bundlecaps):\\n             # When requesting a bundle2, getbundle returns a stream to make the\\n             # wire level function happier. We need to build a proper object\\n             # from it in local peer.\\n             return bundle2.getunbundler(self.ui, cb)\\n         else:\\n             return changegroup.getunbundler('01', cb, None)\\n \\n     def heads(self):\\n         return self._repo.heads()\\n \\n     def known(self, nodes):\\n         return self._repo.known(nodes)\\n \\n     def listkeys(self, namespace):\\n         return self._repo.listkeys(namespace)\\n \\n     def lookup(self, key):\\n         return self._repo.lookup(key)\\n \\n     def pushkey(self, namespace, key, old, new):\\n         return self._repo.pushkey(namespace, key, old, new)\\n \\n     def stream_out(self):\\n         raise error.Abort(_('cannot perform stream clone against local '\\n                             'peer'))\\n \\n     def unbundle(self, cg, heads, url):\\n         \\\"\\\"\\\"apply a bundle on a repo\\n \\n         This function handles the repo locking itself.\\\"\\\"\\\"\\n         try:\\n             try:\\n                 cg = exchange.readbundle(self.ui, cg, None)\\n                 ret = exchange.unbundle(self._repo, cg, heads, 'push', url)\\n                 if util.safehasattr(ret, 'getchunks'):\\n                     # This is a bundle20 object, turn it into an unbundler.\\n                     # This little dance should be dropped eventually when the\\n                     # API is finally improved.\\n                     stream = util.chunkbuffer(ret.getchunks())\\n                     ret = bundle2.getunbundler(self.ui, stream)\\n                 return ret\\n             except Exception as exc:\\n                 # If the exception contains output salvaged from a bundle2\\n                 # reply, we need to make sure it is printed before continuing\\n                 # to fail. So we build a bundle2 with such output and consume\\n                 # it directly.\\n                 #\\n                 # This is not very elegant but allows a \\\"simple\\\" solution for\\n                 # issue4594\\n                 output = getattr(exc, '_bundle2salvagedoutput', ())\\n                 if output:\\n                     bundler = bundle2.bundle20(self._repo.ui)\\n                     for out in output:\\n                         bundler.addpart(out)\\n                     stream = util.chunkbuffer(bundler.getchunks())\\n                     b = bundle2.getunbundler(self.ui, stream)\\n                     bundle2.processbundle(self._repo, b)\\n                 raise\\n         except error.PushRaced as exc:\\n             raise error.ResponseError(_('push failed:'), str(exc))\\n \\n     # End of _basewirecommands interface.\\n \\n     # Begin of peer interface.\\n \\n     def iterbatch(self):\\n         return peer.localiterbatcher(self)\\n \\n     # End of peer interface.\\n \\n class locallegacypeer(repository.legacypeer, localpeer):\\n     '''peer extension which implements legacy methods too; used for tests with\\n     restricted capabilities'''\\n \\n     def __init__(self, repo):\\n         super(locallegacypeer, self).__init__(repo, caps=legacycaps)\\n \\n     # Begin of baselegacywirecommands interface.\\n \\n     def between(self, pairs):\\n         return self._repo.between(pairs)\\n \\n     def branches(self, nodes):\\n         return self._repo.branches(nodes)\\n \\n     def changegroup(self, basenodes, source):\\n         outgoing = discovery.outgoing(self._repo, missingroots=basenodes,\\n                                       missingheads=self._repo.heads())\\n         return changegroup.makechangegroup(self._repo, outgoing, '01', source)\\n \\n     def changegroupsubset(self, bases, heads, source):\\n         outgoing = discovery.outgoing(self._repo, missingroots=bases,\\n                                       missingheads=heads)\\n         return changegroup.makechangegroup(self._repo, outgoing, '01', source)\\n \\n     # End of baselegacywirecommands interface.\\n \\n # Increment the sub-version when the revlog v2 format changes to lock out old\\n # clients.\\n REVLOGV2_REQUIREMENT = 'exp-revlogv2.0'\\n \\n class localrepository(object):\\n \\n     supportedformats = {\\n         'revlogv1',\\n         'generaldelta',\\n         'treemanifest',\\n         'manifestv2',\\n         REVLOGV2_REQUIREMENT,\\n     }\\n     _basesupported = supportedformats | {\\n         'store',\\n         'fncache',\\n         'shared',\\n         'relshared',\\n         'dotencode',\\n         'exp-sparse',\\n     }\\n     openerreqs = {\\n         'revlogv1',\\n         'generaldelta',\\n         'treemanifest',\\n         'manifestv2',\\n     }\\n \\n     # a list of (ui, featureset) functions.\\n     # only functions defined in module of enabled extensions are invoked\\n     featuresetupfuncs = set()\\n \\n     # list of prefix for file which can be written without 'wlock'\\n     # Extensions should extend this list when needed\\n     _wlockfreeprefix = {\\n         # We migh consider requiring 'wlock' for the next\\n         # two, but pretty much all the existing code assume\\n         # wlock is not needed so we keep them excluded for\\n         # now.\\n         'hgrc',\\n         'requires',\\n         # XXX cache is a complicatged business someone\\n         # should investigate this in depth at some point\\n         'cache\\/',\\n         # XXX shouldn't be dirstate covered by the wlock?\\n         'dirstate',\\n         # XXX bisect was still a bit too messy at the time\\n         # this changeset was introduced. Someone should fix\\n         # the remainig bit and drop this line\\n         'bisect.state',\\n     }\\n \\n     def __init__(self, baseui, path, create=False):\\n         self.requirements = set()\\n         self.filtername = None\\n         # wvfs: rooted at the repository root, used to access the working copy\\n         self.wvfs = vfsmod.vfs(path, expandpath=True, realpath=True)\\n         # vfs: rooted at .hg, used to access repo files outside of .hg\\/store\\n         self.vfs = None\\n         # svfs: usually rooted at .hg\\/store, used to access repository history\\n         # If this is a shared repository, this vfs may point to another\\n         # repository's .hg\\/store directory.\\n         self.svfs = None\\n         self.root = self.wvfs.base\\n         self.path = self.wvfs.join(\\\".hg\\\")\\n         self.origroot = path\\n         # This is only used by context.workingctx.match in order to\\n         # detect files in subrepos.\\n         self.auditor = pathutil.pathauditor(\\n             self.root, callback=self._checknested)\\n         # This is only used by context.basectx.match in order to detect\\n         # files in subrepos.\\n         self.nofsauditor = pathutil.pathauditor(\\n             self.root, callback=self._checknested, realfs=False, cached=True)\\n         self.baseui = baseui\\n         self.ui = baseui.copy()\\n         self.ui.copy = baseui.copy # prevent copying repo configuration\\n         self.vfs = vfsmod.vfs(self.path, cacheaudited=True)\\n         if (self.ui.configbool('devel', 'all-warnings') or\\n             self.ui.configbool('devel', 'check-locks')):\\n             self.vfs.audit = self._getvfsward(self.vfs.audit)\\n         # A list of callback to shape the phase if no data were found.\\n         # Callback are in the form: func(repo, roots) --\\u003e processed root.\\n         # This list it to be filled by extension during repo setup\\n         self._phasedefaults = []\\n         try:\\n             self.ui.readconfig(self.vfs.join(\\\"hgrc\\\"), self.root)\\n             self._loadextensions()\\n         except IOError:\\n             pass\\n \\n         if self.featuresetupfuncs:\\n             self.supported = set(self._basesupported) # use private copy\\n             extmods = set(m.__name__ for n, m\\n                           in extensions.extensions(self.ui))\\n             for setupfunc in self.featuresetupfuncs:\\n                 if setupfunc.__module__ in extmods:\\n                     setupfunc(self.ui, self.supported)\\n         else:\\n             self.supported = self._basesupported\\n         color.setup(self.ui)\\n \\n         # Add compression engines.\\n         for name in util.compengines:\\n             engine = util.compengines[name]\\n             if engine.revlogheader():\\n                 self.supported.add('exp-compression-%s' % name)\\n \\n         if not self.vfs.isdir():\\n             if create:\\n                 self.requirements = newreporequirements(self)\\n \\n                 if not self.wvfs.exists():\\n                     self.wvfs.makedirs()\\n                 self.vfs.makedir(notindexed=True)\\n \\n                 if 'store' in self.requirements:\\n                     self.vfs.mkdir(\\\"store\\\")\\n \\n                     # create an invalid changelog\\n                     self.vfs.append(\\n                         \\\"00changelog.i\\\",\\n                         '\\\\0\\\\0\\\\0\\\\2' # represents revlogv2\\n                         ' dummy changelog to prevent using the old repo layout'\\n                     )\\n             else:\\n                 raise error.RepoError(_(\\\"repository %s not found\\\") % path)\\n         elif create:\\n             raise error.RepoError(_(\\\"repository %s already exists\\\") % path)\\n         else:\\n             try:\\n                 self.requirements = scmutil.readrequires(\\n                         self.vfs, self.supported)\\n             except IOError as inst:\\n                 if inst.errno != errno.ENOENT:\\n                     raise\\n \\n         cachepath = self.vfs.join('cache')\\n         self.sharedpath = self.path\\n         try:\\n             sharedpath = self.vfs.read(\\\"sharedpath\\\").rstrip('\\\\n')\\n             if 'relshared' in self.requirements:\\n                 sharedpath = self.vfs.join(sharedpath)\\n             vfs = vfsmod.vfs(sharedpath, realpath=True)\\n             cachepath = vfs.join('cache')\\n             s = vfs.base\\n             if not vfs.exists():\\n                 raise error.RepoError(\\n                     _('.hg\\/sharedpath points to nonexistent directory %s') % s)\\n             self.sharedpath = s\\n         except IOError as inst:\\n             if inst.errno != errno.ENOENT:\\n                 raise\\n \\n         if 'exp-sparse' in self.requirements and not sparse.enabled:\\n             raise error.RepoError(_('repository is using sparse feature but '\\n                                     'sparse is not enabled; enable the '\\n                                     '\\\"sparse\\\" extensions to access'))\\n \\n         self.store = store.store(\\n             self.requirements, self.sharedpath,\\n             lambda base: vfsmod.vfs(base, cacheaudited=True))\\n         self.spath = self.store.path\\n         self.svfs = self.store.vfs\\n         self.sjoin = self.store.join\\n         self.vfs.createmode = self.store.createmode\\n         self.cachevfs = vfsmod.vfs(cachepath, cacheaudited=True)\\n         self.cachevfs.createmode = self.store.createmode\\n         if (self.ui.configbool('devel', 'all-warnings') or\\n             self.ui.configbool('devel', 'check-locks')):\\n             if util.safehasattr(self.svfs, 'vfs'): # this is filtervfs\\n                 self.svfs.vfs.audit = self._getsvfsward(self.svfs.vfs.audit)\\n             else: # standard vfs\\n                 self.svfs.audit = self._getsvfsward(self.svfs.audit)\\n         self._applyopenerreqs()\\n         if create:\\n             self._writerequirements()\\n \\n         self._dirstatevalidatewarned = False\\n \\n         self._branchcaches = {}\\n         self._revbranchcache = None\\n         self.filterpats = {}\\n         self._datafilters = {}\\n         self._transref = self._lockref = self._wlockref = None\\n \\n         # A cache for various files under .hg\\/ that tracks file changes,\\n         # (used by the filecache decorator)\\n         #\\n         # Maps a property name to its util.filecacheentry\\n         self._filecache = {}\\n \\n         # hold sets of revision to be filtered\\n         # should be cleared when something might have changed the filter value:\\n         # - new changesets,\\n         # - phase change,\\n         # - new obsolescence marker,\\n         # - working directory parent change,\\n         # - bookmark changes\\n         self.filteredrevcache = {}\\n \\n         # post-dirstate-status hooks\\n         self._postdsstatus = []\\n \\n         # Cache of types representing filtered repos.\\n         self._filteredrepotypes = weakref.WeakKeyDictionary()\\n \\n         # generic mapping between names and nodes\\n         self.names = namespaces.namespaces()\\n \\n         # Key to signature value.\\n         self._sparsesignaturecache = {}\\n         # Signature to cached matcher instance.\\n         self._sparsematchercache = {}\\n \\n     def _getvfsward(self, origfunc):\\n         \\\"\\\"\\\"build a ward for self.vfs\\\"\\\"\\\"\\n         rref = weakref.ref(self)\\n         def checkvfs(path, mode=None):\\n             ret = origfunc(path, mode=mode)\\n             repo = rref()\\n             if (repo is None\\n                 or not util.safehasattr(repo, '_wlockref')\\n                 or not util.safehasattr(repo, '_lockref')):\\n                 return\\n             if mode in (None, 'r', 'rb'):\\n                 return\\n             if path.startswith(repo.path):\\n                 # truncate name relative to the repository (.hg)\\n                 path = path[len(repo.path) + 1:]\\n             if path.startswith('cache\\/'):\\n                 msg = 'accessing cache with vfs instead of cachevfs: \\\"%s\\\"'\\n                 repo.ui.develwarn(msg % path, stacklevel=2, config=\\\"cache-vfs\\\")\\n             if path.startswith('journal.'):\\n                 # journal is covered by 'lock'\\n                 if repo._currentlock(repo._lockref) is None:\\n                     repo.ui.develwarn('write with no lock: \\\"%s\\\"' % path,\\n                                       stacklevel=2, config='check-locks')\\n             elif repo._currentlock(repo._wlockref) is None:\\n                 # rest of vfs files are covered by 'wlock'\\n                 #\\n                 # exclude special files\\n                 for prefix in self._wlockfreeprefix:\\n                     if path.startswith(prefix):\\n                         return\\n                 repo.ui.develwarn('write with no wlock: \\\"%s\\\"' % path,\\n                                   stacklevel=2, config='check-locks')\\n             return ret\\n         return checkvfs\\n \\n     def _getsvfsward(self, origfunc):\\n         \\\"\\\"\\\"build a ward for self.svfs\\\"\\\"\\\"\\n         rref = weakref.ref(self)\\n         def checksvfs(path, mode=None):\\n             ret = origfunc(path, mode=mode)\\n             repo = rref()\\n             if repo is None or not util.safehasattr(repo, '_lockref'):\\n                 return\\n             if mode in (None, 'r', 'rb'):\\n                 return\\n             if path.startswith(repo.sharedpath):\\n                 # truncate name relative to the repository (.hg)\\n                 path = path[len(repo.sharedpath) + 1:]\\n             if repo._currentlock(repo._lockref) is None:\\n                 repo.ui.develwarn('write with no lock: \\\"%s\\\"' % path,\\n                                   stacklevel=3)\\n             return ret\\n         return checksvfs\\n \\n     def close(self):\\n         self._writecaches()\\n \\n+    def addvisibilityexceptions(self, exceptions):\\n+        # should be called on a filtered repository\\n+        pass\\n+\\n+    def getvisibilityexceptions(self):\\n+        # should be called on a filtered repository\\n+        return set()\\n+\\n     def _loadextensions(self):\\n         extensions.loadall(self.ui)\\n \\n     def _writecaches(self):\\n         if self._revbranchcache:\\n             self._revbranchcache.write()\\n \\n     def _restrictcapabilities(self, caps):\\n         if self.ui.configbool('experimental', 'bundle2-advertise'):\\n             caps = set(caps)\\n             capsblob = bundle2.encodecaps(bundle2.getrepocaps(self))\\n             caps.add('bundle2=' + urlreq.quote(capsblob))\\n         return caps\\n \\n     def _applyopenerreqs(self):\\n         self.svfs.options = dict((r, 1) for r in self.requirements\\n                                            if r in self.openerreqs)\\n         # experimental config: format.chunkcachesize\\n         chunkcachesize = self.ui.configint('format', 'chunkcachesize')\\n         if chunkcachesize is not None:\\n             self.svfs.options['chunkcachesize'] = chunkcachesize\\n         # experimental config: format.maxchainlen\\n         maxchainlen = self.ui.configint('format', 'maxchainlen')\\n         if maxchainlen is not None:\\n             self.svfs.options['maxchainlen'] = maxchainlen\\n         # experimental config: format.manifestcachesize\\n         manifestcachesize = self.ui.configint('format', 'manifestcachesize')\\n         if manifestcachesize is not None:\\n             self.svfs.options['manifestcachesize'] = manifestcachesize\\n         # experimental config: format.aggressivemergedeltas\\n         aggressivemergedeltas = self.ui.configbool('format',\\n                                                    'aggressivemergedeltas')\\n         self.svfs.options['aggressivemergedeltas'] = aggressivemergedeltas\\n         self.svfs.options['lazydeltabase'] = not scmutil.gddeltaconfig(self.ui)\\n         chainspan = self.ui.configbytes('experimental', 'maxdeltachainspan')\\n         if 0 \\u003c= chainspan:\\n             self.svfs.options['maxdeltachainspan'] = chainspan\\n         mmapindexthreshold = self.ui.configbytes('experimental',\\n                                                  'mmapindexthreshold')\\n         if mmapindexthreshold is not None:\\n             self.svfs.options['mmapindexthreshold'] = mmapindexthreshold\\n         withsparseread = self.ui.configbool('experimental', 'sparse-read')\\n         srdensitythres = float(self.ui.config('experimental',\\n                                               'sparse-read.density-threshold'))\\n         srmingapsize = self.ui.configbytes('experimental',\\n                                            'sparse-read.min-gap-size')\\n         self.svfs.options['with-sparse-read'] = withsparseread\\n         self.svfs.options['sparse-read-density-threshold'] = srdensitythres\\n         self.svfs.options['sparse-read-min-gap-size'] = srmingapsize\\n \\n         for r in self.requirements:\\n             if r.startswith('exp-compression-'):\\n                 self.svfs.options['compengine'] = r[len('exp-compression-'):]\\n \\n         # TODO move \\\"revlogv2\\\" to openerreqs once finalized.\\n         if REVLOGV2_REQUIREMENT in self.requirements:\\n             self.svfs.options['revlogv2'] = True\\n \\n     def _writerequirements(self):\\n         scmutil.writerequires(self.vfs, self.requirements)\\n \\n     def _checknested(self, path):\\n         \\\"\\\"\\\"Determine if path is a legal nested repository.\\\"\\\"\\\"\\n         if not path.startswith(self.root):\\n             return False\\n         subpath = path[len(self.root) + 1:]\\n         normsubpath = util.pconvert(subpath)\\n \\n         # XXX: Checking against the current working copy is wrong in\\n         # the sense that it can reject things like\\n         #\\n         #   $ hg cat -r 10 sub\\/x.txt\\n         #\\n         # if sub\\/ is no longer a subrepository in the working copy\\n         # parent revision.\\n         #\\n         # However, it can of course also allow things that would have\\n         # been rejected before, such as the above cat command if sub\\/\\n         # is a subrepository now, but was a normal directory before.\\n         # The old path auditor would have rejected by mistake since it\\n         # panics when it sees sub\\/.hg\\/.\\n         #\\n         # All in all, checking against the working copy seems sensible\\n         # since we want to prevent access to nested repositories on\\n         # the filesystem *now*.\\n         ctx = self[None]\\n         parts = util.splitpath(subpath)\\n         while parts:\\n             prefix = '\\/'.join(parts)\\n             if prefix in ctx.substate:\\n                 if prefix == normsubpath:\\n                     return True\\n                 else:\\n                     sub = ctx.sub(prefix)\\n                     return sub.checknested(subpath[len(prefix) + 1:])\\n             else:\\n                 parts.pop()\\n         return False\\n \\n     def peer(self):\\n         return localpeer(self) # not cached to avoid reference cycle\\n \\n     def unfiltered(self):\\n         \\\"\\\"\\\"Return unfiltered version of the repository\\n \\n         Intended to be overwritten by filtered repo.\\\"\\\"\\\"\\n         return self\\n \\n     def filtered(self, name):\\n         \\\"\\\"\\\"Return a filtered version of a repository\\\"\\\"\\\"\\n         # Python \\u003c3.4 easily leaks types via __mro__. See\\n         # https:\\/\\/bugs.python.org\\/issue17950. We cache dynamically\\n         # created types so this method doesn't leak on every\\n         # invocation.\\n \\n         key = self.unfiltered().__class__\\n         if key not in self._filteredrepotypes:\\n             # Build a new type with the repoview mixin and the base\\n             # class of this repo. Give it a name containing the\\n             # filter name to aid debugging.\\n             bases = (repoview.repoview, key)\\n             cls = type(r'%sfilteredrepo' % name, bases, {})\\n             self._filteredrepotypes[key] = cls\\n \\n         return self._filteredrepotypes[key](self, name)\\n \\n     @repofilecache('bookmarks', 'bookmarks.current')\\n     def _bookmarks(self):\\n         return bookmarks.bmstore(self)\\n \\n     @property\\n     def _activebookmark(self):\\n         return self._bookmarks.active\\n \\n     # _phaserevs and _phasesets depend on changelog. what we need is to\\n     # call _phasecache.invalidate() if '00changelog.i' was changed, but it\\n     # can't be easily expressed in filecache mechanism.\\n     @storecache('phaseroots', '00changelog.i')\\n     def _phasecache(self):\\n         return phases.phasecache(self, self._phasedefaults)\\n \\n     @storecache('obsstore')\\n     def obsstore(self):\\n         return obsolete.makestore(self.ui, self)\\n \\n     @storecache('00changelog.i')\\n     def changelog(self):\\n         return changelog.changelog(self.svfs,\\n                                    trypending=txnutil.mayhavepending(self.root))\\n \\n     def _constructmanifest(self):\\n         # This is a temporary function while we migrate from manifest to\\n         # manifestlog. It allows bundlerepo and unionrepo to intercept the\\n         # manifest creation.\\n         return manifest.manifestrevlog(self.svfs)\\n \\n     @storecache('00manifest.i')\\n     def manifestlog(self):\\n         return manifest.manifestlog(self.svfs, self)\\n \\n     @repofilecache('dirstate')\\n     def dirstate(self):\\n         sparsematchfn = lambda: sparse.matcher(self)\\n \\n         return dirstate.dirstate(self.vfs, self.ui, self.root,\\n                                  self._dirstatevalidate, sparsematchfn)\\n \\n     def _dirstatevalidate(self, node):\\n         try:\\n             self.changelog.rev(node)\\n             return node\\n         except error.LookupError:\\n             if not self._dirstatevalidatewarned:\\n                 self._dirstatevalidatewarned = True\\n                 self.ui.warn(_(\\\"warning: ignoring unknown\\\"\\n                                \\\" working parent %s!\\\\n\\\") % short(node))\\n             return nullid\\n \\n     def __getitem__(self, changeid):\\n         if changeid is None:\\n             return context.workingctx(self)\\n         if isinstance(changeid, slice):\\n             # wdirrev isn't contiguous so the slice shouldn't include it\\n             return [context.changectx(self, i)\\n                     for i in xrange(*changeid.indices(len(self)))\\n                     if i not in self.changelog.filteredrevs]\\n         try:\\n             return context.changectx(self, changeid)\\n         except error.WdirUnsupported:\\n             return context.workingctx(self)\\n \\n     def __contains__(self, changeid):\\n         \\\"\\\"\\\"True if the given changeid exists\\n \\n         error.LookupError is raised if an ambiguous node specified.\\n         \\\"\\\"\\\"\\n         try:\\n             self[changeid]\\n             return True\\n         except error.RepoLookupError:\\n             return False\\n \\n     def __nonzero__(self):\\n         return True\\n \\n     __bool__ = __nonzero__\\n \\n     def __len__(self):\\n         return len(self.changelog)\\n \\n     def __iter__(self):\\n         return iter(self.changelog)\\n \\n     def revs(self, expr, *args):\\n         '''Find revisions matching a revset.\\n \\n         The revset is specified as a string ``expr`` that may contain\\n         %-formatting to escape certain types. See ``revsetlang.formatspec``.\\n \\n         Revset aliases from the configuration are not expanded. To expand\\n         user aliases, consider calling ``scmutil.revrange()`` or\\n         ``repo.anyrevs([expr], user=True)``.\\n \\n         Returns a revset.abstractsmartset, which is a list-like interface\\n         that contains integer revisions.\\n         '''\\n         expr = revsetlang.formatspec(expr, *args)\\n         m = revset.match(None, expr)\\n         return m(self)\\n \\n     def set(self, expr, *args):\\n         '''Find revisions matching a revset and emit changectx instances.\\n \\n         This is a convenience wrapper around ``revs()`` that iterates the\\n         result and is a generator of changectx instances.\\n \\n         Revset aliases from the configuration are not expanded. To expand\\n         user aliases, consider calling ``scmutil.revrange()``.\\n         '''\\n         for r in self.revs(expr, *args):\\n             yield self[r]\\n \\n     def anyrevs(self, specs, user=False, localalias=None):\\n         '''Find revisions matching one of the given revsets.\\n \\n         Revset aliases from the configuration are not expanded by default. To\\n         expand user aliases, specify ``user=True``. To provide some local\\n         definitions overriding user aliases, set ``localalias`` to\\n         ``{name: definitionstring}``.\\n         '''\\n         if user:\\n             m = revset.matchany(self.ui, specs, repo=self,\\n                                 localalias=localalias)\\n         else:\\n             m = revset.matchany(None, specs, localalias=localalias)\\n         return m(self)\\n \\n     def url(self):\\n         return 'file:' + self.root\\n \\n     def hook(self, name, throw=False, **args):\\n         \\\"\\\"\\\"Call a hook, passing this repo instance.\\n \\n         This a convenience method to aid invoking hooks. Extensions likely\\n         won't call this unless they have registered a custom hook or are\\n         replacing code that is expected to call a hook.\\n         \\\"\\\"\\\"\\n         return hook.hook(self.ui, self, name, throw, **args)\\n \\n     @filteredpropertycache\\n     def _tagscache(self):\\n         '''Returns a tagscache object that contains various tags related\\n         caches.'''\\n \\n         # This simplifies its cache management by having one decorated\\n         # function (this one) and the rest simply fetch things from it.\\n         class tagscache(object):\\n             def __init__(self):\\n                 # These two define the set of tags for this repository. tags\\n                 # maps tag name to node; tagtypes maps tag name to 'global' or\\n                 # 'local'. (Global tags are defined by .hgtags across all\\n                 # heads, and local tags are defined in .hg\\/localtags.)\\n                 # They constitute the in-memory cache of tags.\\n                 self.tags = self.tagtypes = None\\n \\n                 self.nodetagscache = self.tagslist = None\\n \\n         cache = tagscache()\\n         cache.tags, cache.tagtypes = self._findtags()\\n \\n         return cache\\n \\n     def tags(self):\\n         '''return a mapping of tag to node'''\\n         t = {}\\n         if self.changelog.filteredrevs:\\n             tags, tt = self._findtags()\\n         else:\\n             tags = self._tagscache.tags\\n         for k, v in tags.iteritems():\\n             try:\\n                 # ignore tags to unknown nodes\\n                 self.changelog.rev(v)\\n                 t[k] = v\\n             except (error.LookupError, ValueError):\\n                 pass\\n         return t\\n \\n     def _findtags(self):\\n         '''Do the hard work of finding tags.  Return a pair of dicts\\n         (tags, tagtypes) where tags maps tag name to node, and tagtypes\\n         maps tag name to a string like \\\\'global\\\\' or \\\\'local\\\\'.\\n         Subclasses or extensions are free to add their own tags, but\\n         should be aware that the returned dicts will be retained for the\\n         duration of the localrepo object.'''\\n \\n         # XXX what tagtype should subclasses\\/extensions use?  Currently\\n         # mq and bookmarks add tags, but do not set the tagtype at all.\\n         # Should each extension invent its own tag type?  Should there\\n         # be one tagtype for all such \\\"virtual\\\" tags?  Or is the status\\n         # quo fine?\\n \\n \\n         # map tag name to (node, hist)\\n         alltags = tagsmod.findglobaltags(self.ui, self)\\n         # map tag name to tag type\\n         tagtypes = dict((tag, 'global') for tag in alltags)\\n \\n         tagsmod.readlocaltags(self.ui, self, alltags, tagtypes)\\n \\n         # Build the return dicts.  Have to re-encode tag names because\\n         # the tags module always uses UTF-8 (in order not to lose info\\n         # writing to the cache), but the rest of Mercurial wants them in\\n         # local encoding.\\n         tags = {}\\n         for (name, (node, hist)) in alltags.iteritems():\\n             if node != nullid:\\n                 tags[encoding.tolocal(name)] = node\\n         tags['tip'] = self.changelog.tip()\\n         tagtypes = dict([(encoding.tolocal(name), value)\\n                          for (name, value) in tagtypes.iteritems()])\\n         return (tags, tagtypes)\\n \\n     def tagtype(self, tagname):\\n         '''\\n         return the type of the given tag. result can be:\\n \\n         'local'  : a local tag\\n         'global' : a global tag\\n         None     : tag does not exist\\n         '''\\n \\n         return self._tagscache.tagtypes.get(tagname)\\n \\n     def tagslist(self):\\n         '''return a list of tags ordered by revision'''\\n         if not self._tagscache.tagslist:\\n             l = []\\n             for t, n in self.tags().iteritems():\\n                 l.append((self.changelog.rev(n), t, n))\\n             self._tagscache.tagslist = [(t, n) for r, t, n in sorted(l)]\\n \\n         return self._tagscache.tagslist\\n \\n     def nodetags(self, node):\\n         '''return the tags associated with a node'''\\n         if not self._tagscache.nodetagscache:\\n             nodetagscache = {}\\n             for t, n in self._tagscache.tags.iteritems():\\n                 nodetagscache.setdefault(n, []).append(t)\\n             for tags in nodetagscache.itervalues():\\n                 tags.sort()\\n             self._tagscache.nodetagscache = nodetagscache\\n         return self._tagscache.nodetagscache.get(node, [])\\n \\n     def nodebookmarks(self, node):\\n         \\\"\\\"\\\"return the list of bookmarks pointing to the specified node\\\"\\\"\\\"\\n         marks = []\\n         for bookmark, n in self._bookmarks.iteritems():\\n             if n == node:\\n                 marks.append(bookmark)\\n         return sorted(marks)\\n \\n     def branchmap(self):\\n         '''returns a dictionary {branch: [branchheads]} with branchheads\\n         ordered by increasing revision number'''\\n         branchmap.updatecache(self)\\n         return self._branchcaches[self.filtername]\\n \\n     @unfilteredmethod\\n     def revbranchcache(self):\\n         if not self._revbranchcache:\\n             self._revbranchcache = branchmap.revbranchcache(self.unfiltered())\\n         return self._revbranchcache\\n \\n     def branchtip(self, branch, ignoremissing=False):\\n         '''return the tip node for a given branch\\n \\n         If ignoremissing is True, then this method will not raise an error.\\n         This is helpful for callers that only expect None for a missing branch\\n         (e.g. namespace).\\n \\n         '''\\n         try:\\n             return self.branchmap().branchtip(branch)\\n         except KeyError:\\n             if not ignoremissing:\\n                 raise error.RepoLookupError(_(\\\"unknown branch '%s'\\\") % branch)\\n             else:\\n                 pass\\n \\n     def lookup(self, key):\\n         return self[key].node()\\n \\n     def lookupbranch(self, key, remote=None):\\n         repo = remote or self\\n         if key in repo.branchmap():\\n             return key\\n \\n         repo = (remote and remote.local()) and remote or self\\n         return repo[key].branch()\\n \\n     def known(self, nodes):\\n         cl = self.changelog\\n         nm = cl.nodemap\\n         filtered = cl.filteredrevs\\n         result = []\\n         for n in nodes:\\n             r = nm.get(n)\\n             resp = not (r is None or r in filtered)\\n             result.append(resp)\\n         return result\\n \\n     def local(self):\\n         return self\\n \\n     def publishing(self):\\n         # it's safe (and desirable) to trust the publish flag unconditionally\\n         # so that we don't finalize changes shared between users via ssh or nfs\\n         return self.ui.configbool('phases', 'publish', untrusted=True)\\n \\n     def cancopy(self):\\n         # so statichttprepo's override of local() works\\n         if not self.local():\\n             return False\\n         if not self.publishing():\\n             return True\\n         # if publishing we can't copy if there is filtered content\\n         return not self.filtered('visible').changelog.filteredrevs\\n \\n     def shared(self):\\n         '''the type of shared repository (None if not shared)'''\\n         if self.sharedpath != self.path:\\n             return 'store'\\n         return None\\n \\n     def wjoin(self, f, *insidef):\\n         return self.vfs.reljoin(self.root, f, *insidef)\\n \\n     def file(self, f):\\n         if f[0] == '\\/':\\n             f = f[1:]\\n         return filelog.filelog(self.svfs, f)\\n \\n     def changectx(self, changeid):\\n         return self[changeid]\\n \\n     def setparents(self, p1, p2=nullid):\\n         with self.dirstate.parentchange():\\n             copies = self.dirstate.setparents(p1, p2)\\n             pctx = self[p1]\\n             if copies:\\n                 # Adjust copy records, the dirstate cannot do it, it\\n                 # requires access to parents manifests. Preserve them\\n                 # only for entries added to first parent.\\n                 for f in copies:\\n                     if f not in pctx and copies[f] in pctx:\\n                         self.dirstate.copy(copies[f], f)\\n             if p2 == nullid:\\n                 for f, s in sorted(self.dirstate.copies().items()):\\n                     if f not in pctx and s not in pctx:\\n                         self.dirstate.copy(None, f)\\n \\n     def filectx(self, path, changeid=None, fileid=None):\\n         \\\"\\\"\\\"changeid can be a changeset revision, node, or tag.\\n            fileid can be a file revision or node.\\\"\\\"\\\"\\n         return context.filectx(self, path, changeid, fileid)\\n \\n     def getcwd(self):\\n         return self.dirstate.getcwd()\\n \\n     def pathto(self, f, cwd=None):\\n         return self.dirstate.pathto(f, cwd)\\n \\n     def _loadfilter(self, filter):\\n         if filter not in self.filterpats:\\n             l = []\\n             for pat, cmd in self.ui.configitems(filter):\\n                 if cmd == '!':\\n                     continue\\n                 mf = matchmod.match(self.root, '', [pat])\\n                 fn = None\\n                 params = cmd\\n                 for name, filterfn in self._datafilters.iteritems():\\n                     if cmd.startswith(name):\\n                         fn = filterfn\\n                         params = cmd[len(name):].lstrip()\\n                         break\\n                 if not fn:\\n                     fn = lambda s, c, **kwargs: util.filter(s, c)\\n                 # Wrap old filters not supporting keyword arguments\\n                 if not inspect.getargspec(fn)[2]:\\n                     oldfn = fn\\n                     fn = lambda s, c, **kwargs: oldfn(s, c)\\n                 l.append((mf, fn, params))\\n             self.filterpats[filter] = l\\n         return self.filterpats[filter]\\n \\n     def _filter(self, filterpats, filename, data):\\n         for mf, fn, cmd in filterpats:\\n             if mf(filename):\\n                 self.ui.debug(\\\"filtering %s through %s\\\\n\\\" % (filename, cmd))\\n                 data = fn(data, cmd, ui=self.ui, repo=self, filename=filename)\\n                 break\\n \\n         return data\\n \\n     @unfilteredpropertycache\\n     def _encodefilterpats(self):\\n         return self._loadfilter('encode')\\n \\n     @unfilteredpropertycache\\n     def _decodefilterpats(self):\\n         return self._loadfilter('decode')\\n \\n     def adddatafilter(self, name, filter):\\n         self._datafilters[name] = filter\\n \\n     def wread(self, filename):\\n         if self.wvfs.islink(filename):\\n             data = self.wvfs.readlink(filename)\\n         else:\\n             data = self.wvfs.read(filename)\\n         return self._filter(self._encodefilterpats, filename, data)\\n \\n     def wwrite(self, filename, data, flags, backgroundclose=False):\\n         \\\"\\\"\\\"write ``data`` into ``filename`` in the working directory\\n \\n         This returns length of written (maybe decoded) data.\\n         \\\"\\\"\\\"\\n         data = self._filter(self._decodefilterpats, filename, data)\\n         if 'l' in flags:\\n             self.wvfs.symlink(data, filename)\\n         else:\\n             self.wvfs.write(filename, data, backgroundclose=backgroundclose)\\n             if 'x' in flags:\\n                 self.wvfs.setflags(filename, False, True)\\n         return len(data)\\n \\n     def wwritedata(self, filename, data):\\n         return self._filter(self._decodefilterpats, filename, data)\\n \\n     def currenttransaction(self):\\n         \\\"\\\"\\\"return the current transaction or None if non exists\\\"\\\"\\\"\\n         if self._transref:\\n             tr = self._transref()\\n         else:\\n             tr = None\\n \\n         if tr and tr.running():\\n             return tr\\n         return None\\n \\n     def transaction(self, desc, report=None):\\n         if (self.ui.configbool('devel', 'all-warnings')\\n                 or self.ui.configbool('devel', 'check-locks')):\\n             if self._currentlock(self._lockref) is None:\\n                 raise error.ProgrammingError('transaction requires locking')\\n         tr = self.currenttransaction()\\n         if tr is not None:\\n             scmutil.registersummarycallback(self, tr, desc)\\n             return tr.nest()\\n \\n         # abort here if the journal already exists\\n         if self.svfs.exists(\\\"journal\\\"):\\n             raise error.RepoError(\\n                 _(\\\"abandoned transaction found\\\"),\\n                 hint=_(\\\"run 'hg recover' to clean up transaction\\\"))\\n \\n         idbase = \\\"%.40f#%f\\\" % (random.random(), time.time())\\n         ha = hex(hashlib.sha1(idbase).digest())\\n         txnid = 'TXN:' + ha\\n         self.hook('pretxnopen', throw=True, txnname=desc, txnid=txnid)\\n \\n         self._writejournal(desc)\\n         renames = [(vfs, x, undoname(x)) for vfs, x in self._journalfiles()]\\n         if report:\\n             rp = report\\n         else:\\n             rp = self.ui.warn\\n         vfsmap = {'plain': self.vfs} # root of .hg\\/\\n         # we must avoid cyclic reference between repo and transaction.\\n         reporef = weakref.ref(self)\\n         # Code to track tag movement\\n         #\\n         # Since tags are all handled as file content, it is actually quite hard\\n         # to track these movement from a code perspective. So we fallback to a\\n         # tracking at the repository level. One could envision to track changes\\n         # to the '.hgtags' file through changegroup apply but that fails to\\n         # cope with case where transaction expose new heads without changegroup\\n         # being involved (eg: phase movement).\\n         #\\n         # For now, We gate the feature behind a flag since this likely comes\\n         # with performance impacts. The current code run more often than needed\\n         # and do not use caches as much as it could.  The current focus is on\\n         # the behavior of the feature so we disable it by default. The flag\\n         # will be removed when we are happy with the performance impact.\\n         #\\n         # Once this feature is no longer experimental move the following\\n         # documentation to the appropriate help section:\\n         #\\n         # The ``HG_TAG_MOVED`` variable will be set if the transaction touched\\n         # tags (new or changed or deleted tags). In addition the details of\\n         # these changes are made available in a file at:\\n         #     ``REPOROOT\\/.hg\\/changes\\/tags.changes``.\\n         # Make sure you check for HG_TAG_MOVED before reading that file as it\\n         # might exist from a previous transaction even if no tag were touched\\n         # in this one. Changes are recorded in a line base format::\\n         #\\n         #     \\u003caction\\u003e \\u003chex-node\\u003e \\u003ctag-name\\u003e\\\\n\\n         #\\n         # Actions are defined as follow:\\n         #   \\\"-R\\\": tag is removed,\\n         #   \\\"+A\\\": tag is added,\\n         #   \\\"-M\\\": tag is moved (old value),\\n         #   \\\"+M\\\": tag is moved (new value),\\n         tracktags = lambda x: None\\n         # experimental config: experimental.hook-track-tags\\n         shouldtracktags = self.ui.configbool('experimental', 'hook-track-tags')\\n         if desc != 'strip' and shouldtracktags:\\n             oldheads = self.changelog.headrevs()\\n             def tracktags(tr2):\\n                 repo = reporef()\\n                 oldfnodes = tagsmod.fnoderevs(repo.ui, repo, oldheads)\\n                 newheads = repo.changelog.headrevs()\\n                 newfnodes = tagsmod.fnoderevs(repo.ui, repo, newheads)\\n                 # notes: we compare lists here.\\n                 # As we do it only once buiding set would not be cheaper\\n                 changes = tagsmod.difftags(repo.ui, repo, oldfnodes, newfnodes)\\n                 if changes:\\n                     tr2.hookargs['tag_moved'] = '1'\\n                     with repo.vfs('changes\\/tags.changes', 'w',\\n                                   atomictemp=True) as changesfile:\\n                         # note: we do not register the file to the transaction\\n                         # because we needs it to still exist on the transaction\\n                         # is close (for txnclose hooks)\\n                         tagsmod.writediff(changesfile, changes)\\n         def validate(tr2):\\n             \\\"\\\"\\\"will run pre-closing hooks\\\"\\\"\\\"\\n             # XXX the transaction API is a bit lacking here so we take a hacky\\n             # path for now\\n             #\\n             # We cannot add this as a \\\"pending\\\" hooks since the 'tr.hookargs'\\n             # dict is copied before these run. In addition we needs the data\\n             # available to in memory hooks too.\\n             #\\n             # Moreover, we also need to make sure this runs before txnclose\\n             # hooks and there is no \\\"pending\\\" mechanism that would execute\\n             # logic only if hooks are about to run.\\n             #\\n             # Fixing this limitation of the transaction is also needed to track\\n             # other families of changes (bookmarks, phases, obsolescence).\\n             #\\n             # This will have to be fixed before we remove the experimental\\n             # gating.\\n             tracktags(tr2)\\n             repo = reporef()\\n             if repo.ui.configbool('experimental', 'single-head-per-branch'):\\n                 scmutil.enforcesinglehead(repo, tr2, desc)\\n             if hook.hashook(repo.ui, 'pretxnclose-bookmark'):\\n                 for name, (old, new) in sorted(tr.changes['bookmarks'].items()):\\n                     args = tr.hookargs.copy()\\n                     args.update(bookmarks.preparehookargs(name, old, new))\\n                     repo.hook('pretxnclose-bookmark', throw=True,\\n                               txnname=desc,\\n                               **pycompat.strkwargs(args))\\n             if hook.hashook(repo.ui, 'pretxnclose-phase'):\\n                 cl = repo.unfiltered().changelog\\n                 for rev, (old, new) in tr.changes['phases'].items():\\n                     args = tr.hookargs.copy()\\n                     node = hex(cl.node(rev))\\n                     args.update(phases.preparehookargs(node, old, new))\\n                     repo.hook('pretxnclose-phase', throw=True, txnname=desc,\\n                               **pycompat.strkwargs(args))\\n \\n             repo.hook('pretxnclose', throw=True,\\n                       txnname=desc, **pycompat.strkwargs(tr.hookargs))\\n         def releasefn(tr, success):\\n             repo = reporef()\\n             if success:\\n                 # this should be explicitly invoked here, because\\n                 # in-memory changes aren't written out at closing\\n                 # transaction, if tr.addfilegenerator (via\\n                 # dirstate.write or so) isn't invoked while\\n                 # transaction running\\n                 repo.dirstate.write(None)\\n             else:\\n                 # discard all changes (including ones already written\\n                 # out) in this transaction\\n                 repo.dirstate.restorebackup(None, 'journal.dirstate')\\n \\n                 repo.invalidate(clearfilecache=True)\\n \\n         tr = transaction.transaction(rp, self.svfs, vfsmap,\\n                                      \\\"journal\\\",\\n                                      \\\"undo\\\",\\n                                      aftertrans(renames),\\n                                      self.store.createmode,\\n                                      validator=validate,\\n                                      releasefn=releasefn,\\n                                      checkambigfiles=_cachedfiles)\\n         tr.changes['revs'] = set()\\n         tr.changes['obsmarkers'] = set()\\n         tr.changes['phases'] = {}\\n         tr.changes['bookmarks'] = {}\\n \\n         tr.hookargs['txnid'] = txnid\\n         # note: writing the fncache only during finalize mean that the file is\\n         # outdated when running hooks. As fncache is used for streaming clone,\\n         # this is not expected to break anything that happen during the hooks.\\n         tr.addfinalize('flush-fncache', self.store.write)\\n         def txnclosehook(tr2):\\n             \\\"\\\"\\\"To be run if transaction is successful, will schedule a hook run\\n             \\\"\\\"\\\"\\n             # Don't reference tr2 in hook() so we don't hold a reference.\\n             # This reduces memory consumption when there are multiple\\n             # transactions per lock. This can likely go away if issue5045\\n             # fixes the function accumulation.\\n             hookargs = tr2.hookargs\\n \\n             def hookfunc():\\n                 repo = reporef()\\n                 if hook.hashook(repo.ui, 'txnclose-bookmark'):\\n                     bmchanges = sorted(tr.changes['bookmarks'].items())\\n                     for name, (old, new) in bmchanges:\\n                         args = tr.hookargs.copy()\\n                         args.update(bookmarks.preparehookargs(name, old, new))\\n                         repo.hook('txnclose-bookmark', throw=False,\\n                                   txnname=desc, **pycompat.strkwargs(args))\\n \\n                 if hook.hashook(repo.ui, 'txnclose-phase'):\\n                     cl = repo.unfiltered().changelog\\n                     phasemv = sorted(tr.changes['phases'].items())\\n                     for rev, (old, new) in phasemv:\\n                         args = tr.hookargs.copy()\\n                         node = hex(cl.node(rev))\\n                         args.update(phases.preparehookargs(node, old, new))\\n                         repo.hook('txnclose-phase', throw=False, txnname=desc,\\n                                   **pycompat.strkwargs(args))\\n \\n                 repo.hook('txnclose', throw=False, txnname=desc,\\n                           **pycompat.strkwargs(hookargs))\\n             reporef()._afterlock(hookfunc)\\n         tr.addfinalize('txnclose-hook', txnclosehook)\\n         tr.addpostclose('warms-cache', self._buildcacheupdater(tr))\\n         def txnaborthook(tr2):\\n             \\\"\\\"\\\"To be run if transaction is aborted\\n             \\\"\\\"\\\"\\n             reporef().hook('txnabort', throw=False, txnname=desc,\\n                            **tr2.hookargs)\\n         tr.addabort('txnabort-hook', txnaborthook)\\n         # avoid eager cache invalidation. in-memory data should be identical\\n         # to stored data if transaction has no error.\\n         tr.addpostclose('refresh-filecachestats', self._refreshfilecachestats)\\n         self._transref = weakref.ref(tr)\\n         scmutil.registersummarycallback(self, tr, desc)\\n         return tr\\n \\n     def _journalfiles(self):\\n         return ((self.svfs, 'journal'),\\n                 (self.vfs, 'journal.dirstate'),\\n                 (self.vfs, 'journal.branch'),\\n                 (self.vfs, 'journal.desc'),\\n                 (self.vfs, 'journal.bookmarks'),\\n                 (self.svfs, 'journal.phaseroots'))\\n \\n     def undofiles(self):\\n         return [(vfs, undoname(x)) for vfs, x in self._journalfiles()]\\n \\n     @unfilteredmethod\\n     def _writejournal(self, desc):\\n         self.dirstate.savebackup(None, 'journal.dirstate')\\n         self.vfs.write(\\\"journal.branch\\\",\\n                           encoding.fromlocal(self.dirstate.branch()))\\n         self.vfs.write(\\\"journal.desc\\\",\\n                           \\\"%d\\\\n%s\\\\n\\\" % (len(self), desc))\\n         self.vfs.write(\\\"journal.bookmarks\\\",\\n                           self.vfs.tryread(\\\"bookmarks\\\"))\\n         self.svfs.write(\\\"journal.phaseroots\\\",\\n                            self.svfs.tryread(\\\"phaseroots\\\"))\\n \\n     def recover(self):\\n         with self.lock():\\n             if self.svfs.exists(\\\"journal\\\"):\\n                 self.ui.status(_(\\\"rolling back interrupted transaction\\\\n\\\"))\\n                 vfsmap = {'': self.svfs,\\n                           'plain': self.vfs,}\\n                 transaction.rollback(self.svfs, vfsmap, \\\"journal\\\",\\n                                      self.ui.warn,\\n                                      checkambigfiles=_cachedfiles)\\n                 self.invalidate()\\n                 return True\\n             else:\\n                 self.ui.warn(_(\\\"no interrupted transaction available\\\\n\\\"))\\n                 return False\\n \\n     def rollback(self, dryrun=False, force=False):\\n         wlock = lock = dsguard = None\\n         try:\\n             wlock = self.wlock()\\n             lock = self.lock()\\n             if self.svfs.exists(\\\"undo\\\"):\\n                 dsguard = dirstateguard.dirstateguard(self, 'rollback')\\n \\n                 return self._rollback(dryrun, force, dsguard)\\n             else:\\n                 self.ui.warn(_(\\\"no rollback information available\\\\n\\\"))\\n                 return 1\\n         finally:\\n             release(dsguard, lock, wlock)\\n \\n     @unfilteredmethod # Until we get smarter cache management\\n     def _rollback(self, dryrun, force, dsguard):\\n         ui = self.ui\\n         try:\\n             args = self.vfs.read('undo.desc').splitlines()\\n             (oldlen, desc, detail) = (int(args[0]), args[1], None)\\n             if len(args) \\u003e= 3:\\n                 detail = args[2]\\n             oldtip = oldlen - 1\\n \\n             if detail and ui.verbose:\\n                 msg = (_('repository tip rolled back to revision %d'\\n                          ' (undo %s: %s)\\\\n')\\n                        % (oldtip, desc, detail))\\n             else:\\n                 msg = (_('repository tip rolled back to revision %d'\\n                          ' (undo %s)\\\\n')\\n                        % (oldtip, desc))\\n         except IOError:\\n             msg = _('rolling back unknown transaction\\\\n')\\n             desc = None\\n \\n         if not force and self['.'] != self['tip'] and desc == 'commit':\\n             raise error.Abort(\\n                 _('rollback of last commit while not checked out '\\n                   'may lose data'), hint=_('use -f to force'))\\n \\n         ui.status(msg)\\n         if dryrun:\\n             return 0\\n \\n         parents = self.dirstate.parents()\\n         self.destroying()\\n         vfsmap = {'plain': self.vfs, '': self.svfs}\\n         transaction.rollback(self.svfs, vfsmap, 'undo', ui.warn,\\n                              checkambigfiles=_cachedfiles)\\n         if self.vfs.exists('undo.bookmarks'):\\n             self.vfs.rename('undo.bookmarks', 'bookmarks', checkambig=True)\\n         if self.svfs.exists('undo.phaseroots'):\\n             self.svfs.rename('undo.phaseroots', 'phaseroots', checkambig=True)\\n         self.invalidate()\\n \\n         parentgone = (parents[0] not in self.changelog.nodemap or\\n                       parents[1] not in self.changelog.nodemap)\\n         if parentgone:\\n             # prevent dirstateguard from overwriting already restored one\\n             dsguard.close()\\n \\n             self.dirstate.restorebackup(None, 'undo.dirstate')\\n             try:\\n                 branch = self.vfs.read('undo.branch')\\n                 self.dirstate.setbranch(encoding.tolocal(branch))\\n             except IOError:\\n                 ui.warn(_('named branch could not be reset: '\\n                           'current branch is still \\\\'%s\\\\'\\\\n')\\n                         % self.dirstate.branch())\\n \\n             parents = tuple([p.rev() for p in self[None].parents()])\\n             if len(parents) \\u003e 1:\\n                 ui.status(_('working directory now based on '\\n                             'revisions %d and %d\\\\n') % parents)\\n             else:\\n                 ui.status(_('working directory now based on '\\n                             'revision %d\\\\n') % parents)\\n             mergemod.mergestate.clean(self, self['.'].node())\\n \\n         # TODO: if we know which new heads may result from this rollback, pass\\n         # them to destroy(), which will prevent the branchhead cache from being\\n         # invalidated.\\n         self.destroyed()\\n         return 0\\n \\n     def _buildcacheupdater(self, newtransaction):\\n         \\\"\\\"\\\"called during transaction to build the callback updating cache\\n \\n         Lives on the repository to help extension who might want to augment\\n         this logic. For this purpose, the created transaction is passed to the\\n         method.\\n         \\\"\\\"\\\"\\n         # we must avoid cyclic reference between repo and transaction.\\n         reporef = weakref.ref(self)\\n         def updater(tr):\\n             repo = reporef()\\n             repo.updatecaches(tr)\\n         return updater\\n \\n     @unfilteredmethod\\n     def updatecaches(self, tr=None):\\n         \\\"\\\"\\\"warm appropriate caches\\n \\n         If this function is called after a transaction closed. The transaction\\n         will be available in the 'tr' argument. This can be used to selectively\\n         update caches relevant to the changes in that transaction.\\n         \\\"\\\"\\\"\\n         if tr is not None and tr.hookargs.get('source') == 'strip':\\n             # During strip, many caches are invalid but\\n             # later call to `destroyed` will refresh them.\\n             return\\n \\n         if tr is None or tr.changes['revs']:\\n             # updating the unfiltered branchmap should refresh all the others,\\n             self.ui.debug('updating the branch cache\\\\n')\\n             branchmap.updatecache(self.filtered('served'))\\n \\n     def invalidatecaches(self):\\n \\n         if '_tagscache' in vars(self):\\n             # can't use delattr on proxy\\n             del self.__dict__['_tagscache']\\n \\n         self.unfiltered()._branchcaches.clear()\\n         self.invalidatevolatilesets()\\n         self._sparsesignaturecache.clear()\\n \\n     def invalidatevolatilesets(self):\\n         self.filteredrevcache.clear()\\n         obsolete.clearobscaches(self)\\n \\n     def invalidatedirstate(self):\\n         '''Invalidates the dirstate, causing the next call to dirstate\\n         to check if it was modified since the last time it was read,\\n         rereading it if it has.\\n \\n         This is different to dirstate.invalidate() that it doesn't always\\n         rereads the dirstate. Use dirstate.invalidate() if you want to\\n         explicitly read the dirstate again (i.e. restoring it to a previous\\n         known good state).'''\\n         if hasunfilteredcache(self, 'dirstate'):\\n             for k in self.dirstate._filecache:\\n                 try:\\n                     delattr(self.dirstate, k)\\n                 except AttributeError:\\n                     pass\\n             delattr(self.unfiltered(), 'dirstate')\\n \\n     def invalidate(self, clearfilecache=False):\\n         '''Invalidates both store and non-store parts other than dirstate\\n \\n         If a transaction is running, invalidation of store is omitted,\\n         because discarding in-memory changes might cause inconsistency\\n         (e.g. incomplete fncache causes unintentional failure, but\\n         redundant one doesn't).\\n         '''\\n         unfiltered = self.unfiltered() # all file caches are stored unfiltered\\n         for k in list(self._filecache.keys()):\\n             # dirstate is invalidated separately in invalidatedirstate()\\n             if k == 'dirstate':\\n                 continue\\n             if (k == 'changelog' and\\n                 self.currenttransaction() and\\n                 self.changelog._delayed):\\n                 # The changelog object may store unwritten revisions. We don't\\n                 # want to lose them.\\n                 # TODO: Solve the problem instead of working around it.\\n                 continue\\n \\n             if clearfilecache:\\n                 del self._filecache[k]\\n             try:\\n                 delattr(unfiltered, k)\\n             except AttributeError:\\n                 pass\\n         self.invalidatecaches()\\n         if not self.currenttransaction():\\n             # TODO: Changing contents of store outside transaction\\n             # causes inconsistency. We should make in-memory store\\n             # changes detectable, and abort if changed.\\n             self.store.invalidatecaches()\\n \\n     def invalidateall(self):\\n         '''Fully invalidates both store and non-store parts, causing the\\n         subsequent operation to reread any outside changes.'''\\n         # extension should hook this to invalidate its caches\\n         self.invalidate()\\n         self.invalidatedirstate()\\n \\n     @unfilteredmethod\\n     def _refreshfilecachestats(self, tr):\\n         \\\"\\\"\\\"Reload stats of cached files so that they are flagged as valid\\\"\\\"\\\"\\n         for k, ce in self._filecache.items():\\n             if k == 'dirstate' or k not in self.__dict__:\\n                 continue\\n             ce.refresh()\\n \\n     def _lock(self, vfs, lockname, wait, releasefn, acquirefn, desc,\\n               inheritchecker=None, parentenvvar=None):\\n         parentlock = None\\n         # the contents of parentenvvar are used by the underlying lock to\\n         # determine whether it can be inherited\\n         if parentenvvar is not None:\\n             parentlock = encoding.environ.get(parentenvvar)\\n         try:\\n             l = lockmod.lock(vfs, lockname, 0, releasefn=releasefn,\\n                              acquirefn=acquirefn, desc=desc,\\n                              inheritchecker=inheritchecker,\\n                              parentlock=parentlock)\\n         except error.LockHeld as inst:\\n             if not wait:\\n                 raise\\n             # show more details for new-style locks\\n             if ':' in inst.locker:\\n                 host, pid = inst.locker.split(\\\":\\\", 1)\\n                 self.ui.warn(\\n                     _(\\\"waiting for lock on %s held by process %r \\\"\\n                       \\\"on host %r\\\\n\\\") % (desc, pid, host))\\n             else:\\n                 self.ui.warn(_(\\\"waiting for lock on %s held by %r\\\\n\\\") %\\n                              (desc, inst.locker))\\n             # default to 600 seconds timeout\\n             l = lockmod.lock(vfs, lockname,\\n                              int(self.ui.config(\\\"ui\\\", \\\"timeout\\\")),\\n                              releasefn=releasefn, acquirefn=acquirefn,\\n                              desc=desc)\\n             self.ui.warn(_(\\\"got lock after %s seconds\\\\n\\\") % l.delay)\\n         return l\\n \\n     def _afterlock(self, callback):\\n         \\\"\\\"\\\"add a callback to be run when the repository is fully unlocked\\n \\n         The callback will be executed when the outermost lock is released\\n         (with wlock being higher level than 'lock').\\\"\\\"\\\"\\n         for ref in (self._wlockref, self._lockref):\\n             l = ref and ref()\\n             if l and l.held:\\n                 l.postrelease.append(callback)\\n                 break\\n         else: # no lock have been found.\\n             callback()\\n \\n     def lock(self, wait=True):\\n         '''Lock the repository store (.hg\\/store) and return a weak reference\\n         to the lock. Use this before modifying the store (e.g. committing or\\n         stripping). If you are opening a transaction, get a lock as well.)\\n \\n         If both 'lock' and 'wlock' must be acquired, ensure you always acquires\\n         'wlock' first to avoid a dead-lock hazard.'''\\n         l = self._currentlock(self._lockref)\\n         if l is not None:\\n             l.lock()\\n             return l\\n \\n         l = self._lock(self.svfs, \\\"lock\\\", wait, None,\\n                        self.invalidate, _('repository %s') % self.origroot)\\n         self._lockref = weakref.ref(l)\\n         return l\\n \\n     def _wlockchecktransaction(self):\\n         if self.currenttransaction() is not None:\\n             raise error.LockInheritanceContractViolation(\\n                 'wlock cannot be inherited in the middle of a transaction')\\n \\n     def wlock(self, wait=True):\\n         '''Lock the non-store parts of the repository (everything under\\n         .hg except .hg\\/store) and return a weak reference to the lock.\\n \\n         Use this before modifying files in .hg.\\n \\n         If both 'lock' and 'wlock' must be acquired, ensure you always acquires\\n         'wlock' first to avoid a dead-lock hazard.'''\\n         l = self._wlockref and self._wlockref()\\n         if l is not None and l.held:\\n             l.lock()\\n             return l\\n \\n         # We do not need to check for non-waiting lock acquisition.  Such\\n         # acquisition would not cause dead-lock as they would just fail.\\n         if wait and (self.ui.configbool('devel', 'all-warnings')\\n                      or self.ui.configbool('devel', 'check-locks')):\\n             if self._currentlock(self._lockref) is not None:\\n                 self.ui.develwarn('\\\"wlock\\\" acquired after \\\"lock\\\"')\\n \\n         def unlock():\\n             if self.dirstate.pendingparentchange():\\n                 self.dirstate.invalidate()\\n             else:\\n                 self.dirstate.write(None)\\n \\n             self._filecache['dirstate'].refresh()\\n \\n         l = self._lock(self.vfs, \\\"wlock\\\", wait, unlock,\\n                        self.invalidatedirstate, _('working directory of %s') %\\n                        self.origroot,\\n                        inheritchecker=self._wlockchecktransaction,\\n                        parentenvvar='HG_WLOCK_LOCKER')\\n         self._wlockref = weakref.ref(l)\\n         return l\\n \\n     def _currentlock(self, lockref):\\n         \\\"\\\"\\\"Returns the lock if it's held, or None if it's not.\\\"\\\"\\\"\\n         if lockref is None:\\n             return None\\n         l = lockref()\\n         if l is None or not l.held:\\n             return None\\n         return l\\n \\n     def currentwlock(self):\\n         \\\"\\\"\\\"Returns the wlock if it's held, or None if it's not.\\\"\\\"\\\"\\n         return self._currentlock(self._wlockref)\\n \\n     def _filecommit(self, fctx, manifest1, manifest2, linkrev, tr, changelist):\\n         \\\"\\\"\\\"\\n         commit an individual file as part of a larger transaction\\n         \\\"\\\"\\\"\\n \\n         fname = fctx.path()\\n         fparent1 = manifest1.get(fname, nullid)\\n         fparent2 = manifest2.get(fname, nullid)\\n         if isinstance(fctx, context.filectx):\\n             node = fctx.filenode()\\n             if node in [fparent1, fparent2]:\\n                 self.ui.debug('reusing %s filelog entry\\\\n' % fname)\\n                 if manifest1.flags(fname) != fctx.flags():\\n                     changelist.append(fname)\\n                 return node\\n \\n         flog = self.file(fname)\\n         meta = {}\\n         copy = fctx.renamed()\\n         if copy and copy[0] != fname:\\n             # Mark the new revision of this file as a copy of another\\n             # file.  This copy data will effectively act as a parent\\n             # of this new revision.  If this is a merge, the first\\n             # parent will be the nullid (meaning \\\"look up the copy data\\\")\\n             # and the second one will be the other parent.  For example:\\n             #\\n             # 0 --- 1 --- 3   rev1 changes file foo\\n             #   \\\\       \\/     rev2 renames foo to bar and changes it\\n             #    \\\\- 2 -\\/      rev3 should have bar with all changes and\\n             #                      should record that bar descends from\\n             #                      bar in rev2 and foo in rev1\\n             #\\n             # this allows this merge to succeed:\\n             #\\n             # 0 --- 1 --- 3   rev4 reverts the content change from rev2\\n             #   \\\\       \\/     merging rev3 and rev4 should use bar@rev2\\n             #    \\\\- 2 --- 4        as the merge base\\n             #\\n \\n             cfname = copy[0]\\n             crev = manifest1.get(cfname)\\n             newfparent = fparent2\\n \\n             if manifest2: # branch merge\\n                 if fparent2 == nullid or crev is None: # copied on remote side\\n                     if cfname in manifest2:\\n                         crev = manifest2[cfname]\\n                         newfparent = fparent1\\n \\n             # Here, we used to search backwards through history to try to find\\n             # where the file copy came from if the source of a copy was not in\\n             # the parent directory. However, this doesn't actually make sense to\\n             # do (what does a copy from something not in your working copy even\\n             # mean?) and it causes bugs (eg, issue4476). Instead, we will warn\\n             # the user that copy information was dropped, so if they didn't\\n             # expect this outcome it can be fixed, but this is the correct\\n             # behavior in this circumstance.\\n \\n             if crev:\\n                 self.ui.debug(\\\" %s: copy %s:%s\\\\n\\\" % (fname, cfname, hex(crev)))\\n                 meta[\\\"copy\\\"] = cfname\\n                 meta[\\\"copyrev\\\"] = hex(crev)\\n                 fparent1, fparent2 = nullid, newfparent\\n             else:\\n                 self.ui.warn(_(\\\"warning: can't find ancestor for '%s' \\\"\\n                                \\\"copied from '%s'!\\\\n\\\") % (fname, cfname))\\n \\n         elif fparent1 == nullid:\\n             fparent1, fparent2 = fparent2, nullid\\n         elif fparent2 != nullid:\\n             # is one parent an ancestor of the other?\\n             fparentancestors = flog.commonancestorsheads(fparent1, fparent2)\\n             if fparent1 in fparentancestors:\\n                 fparent1, fparent2 = fparent2, nullid\\n             elif fparent2 in fparentancestors:\\n                 fparent2 = nullid\\n \\n         # is the file changed?\\n         text = fctx.data()\\n         if fparent2 != nullid or flog.cmp(fparent1, text) or meta:\\n             changelist.append(fname)\\n             return flog.add(text, meta, tr, linkrev, fparent1, fparent2)\\n         # are just the flags changed during merge?\\n         elif fname in manifest1 and manifest1.flags(fname) != fctx.flags():\\n             changelist.append(fname)\\n \\n         return fparent1\\n \\n     def checkcommitpatterns(self, wctx, vdirs, match, status, fail):\\n         \\\"\\\"\\\"check for commit arguments that aren't committable\\\"\\\"\\\"\\n         if match.isexact() or match.prefix():\\n             matched = set(status.modified + status.added + status.removed)\\n \\n             for f in match.files():\\n                 f = self.dirstate.normalize(f)\\n                 if f == '.' or f in matched or f in wctx.substate:\\n                     continue\\n                 if f in status.deleted:\\n                     fail(f, _('file not found!'))\\n                 if f in vdirs: # visited directory\\n                     d = f + '\\/'\\n                     for mf in matched:\\n                         if mf.startswith(d):\\n                             break\\n                     else:\\n                         fail(f, _(\\\"no match under directory!\\\"))\\n                 elif f not in self.dirstate:\\n                     fail(f, _(\\\"file not tracked!\\\"))\\n \\n     @unfilteredmethod\\n     def commit(self, text=\\\"\\\", user=None, date=None, match=None, force=False,\\n                editor=False, extra=None):\\n         \\\"\\\"\\\"Add a new revision to current repository.\\n \\n         Revision information is gathered from the working directory,\\n         match can be used to filter the committed files. If editor is\\n         supplied, it is called to get a commit message.\\n         \\\"\\\"\\\"\\n         if extra is None:\\n             extra = {}\\n \\n         def fail(f, msg):\\n             raise error.Abort('%s: %s' % (f, msg))\\n \\n         if not match:\\n             match = matchmod.always(self.root, '')\\n \\n         if not force:\\n             vdirs = []\\n             match.explicitdir = vdirs.append\\n             match.bad = fail\\n \\n         wlock = lock = tr = None\\n         try:\\n             wlock = self.wlock()\\n             lock = self.lock() # for recent changelog (see issue4368)\\n \\n             wctx = self[None]\\n             merge = len(wctx.parents()) \\u003e 1\\n \\n             if not force and merge and not match.always():\\n                 raise error.Abort(_('cannot partially commit a merge '\\n                                    '(do not specify files or patterns)'))\\n \\n             status = self.status(match=match, clean=force)\\n             if force:\\n                 status.modified.extend(status.clean) # mq may commit clean files\\n \\n             # check subrepos\\n             subs, commitsubs, newstate = subrepo.precommit(\\n                 self.ui, wctx, status, match, force=force)\\n \\n             # make sure all explicit patterns are matched\\n             if not force:\\n                 self.checkcommitpatterns(wctx, vdirs, match, status, fail)\\n \\n             cctx = context.workingcommitctx(self, status,\\n                                             text, user, date, extra)\\n \\n             # internal config: ui.allowemptycommit\\n             allowemptycommit = (wctx.branch() != wctx.p1().branch()\\n                                 or extra.get('close') or merge or cctx.files()\\n                                 or self.ui.configbool('ui', 'allowemptycommit'))\\n             if not allowemptycommit:\\n                 return None\\n \\n             if merge and cctx.deleted():\\n                 raise error.Abort(_(\\\"cannot commit merge with missing files\\\"))\\n \\n             ms = mergemod.mergestate.read(self)\\n             mergeutil.checkunresolved(ms)\\n \\n             if editor:\\n                 cctx._text = editor(self, cctx, subs)\\n             edited = (text != cctx._text)\\n \\n             # Save commit message in case this transaction gets rolled back\\n             # (e.g. by a pretxncommit hook).  Leave the content alone on\\n             # the assumption that the user will use the same editor again.\\n             msgfn = self.savecommitmessage(cctx._text)\\n \\n             # commit subs and write new state\\n             if subs:\\n                 for s in sorted(commitsubs):\\n                     sub = wctx.sub(s)\\n                     self.ui.status(_('committing subrepository %s\\\\n') %\\n                         subrepo.subrelpath(sub))\\n                     sr = sub.commit(cctx._text, user, date)\\n                     newstate[s] = (newstate[s][0], sr)\\n                 subrepo.writestate(self, newstate)\\n \\n             p1, p2 = self.dirstate.parents()\\n             hookp1, hookp2 = hex(p1), (p2 != nullid and hex(p2) or '')\\n             try:\\n                 self.hook(\\\"precommit\\\", throw=True, parent1=hookp1,\\n                           parent2=hookp2)\\n                 tr = self.transaction('commit')\\n                 ret = self.commitctx(cctx, True)\\n             except: # re-raises\\n                 if edited:\\n                     self.ui.write(\\n                         _('note: commit message saved in %s\\\\n') % msgfn)\\n                 raise\\n             # update bookmarks, dirstate and mergestate\\n             bookmarks.update(self, [p1, p2], ret)\\n             cctx.markcommitted(ret)\\n             ms.reset()\\n             tr.close()\\n \\n         finally:\\n             lockmod.release(tr, lock, wlock)\\n \\n         def commithook(node=hex(ret), parent1=hookp1, parent2=hookp2):\\n             # hack for command that use a temporary commit (eg: histedit)\\n             # temporary commit got stripped before hook release\\n             if self.changelog.hasnode(ret):\\n                 self.hook(\\\"commit\\\", node=node, parent1=parent1,\\n                           parent2=parent2)\\n         self._afterlock(commithook)\\n         return ret\\n \\n     @unfilteredmethod\\n     def commitctx(self, ctx, error=False):\\n         \\\"\\\"\\\"Add a new revision to current repository.\\n         Revision information is passed via the context argument.\\n         \\\"\\\"\\\"\\n \\n         tr = None\\n         p1, p2 = ctx.p1(), ctx.p2()\\n         user = ctx.user()\\n \\n         lock = self.lock()\\n         try:\\n             tr = self.transaction(\\\"commit\\\")\\n             trp = weakref.proxy(tr)\\n \\n             if ctx.manifestnode():\\n                 # reuse an existing manifest revision\\n                 mn = ctx.manifestnode()\\n                 files = ctx.files()\\n             elif ctx.files():\\n                 m1ctx = p1.manifestctx()\\n                 m2ctx = p2.manifestctx()\\n                 mctx = m1ctx.copy()\\n \\n                 m = mctx.read()\\n                 m1 = m1ctx.read()\\n                 m2 = m2ctx.read()\\n \\n                 # check in files\\n                 added = []\\n                 changed = []\\n                 removed = list(ctx.removed())\\n                 linkrev = len(self)\\n                 self.ui.note(_(\\\"committing files:\\\\n\\\"))\\n                 for f in sorted(ctx.modified() + ctx.added()):\\n                     self.ui.note(f + \\\"\\\\n\\\")\\n                     try:\\n                         fctx = ctx[f]\\n                         if fctx is None:\\n                             removed.append(f)\\n                         else:\\n                             added.append(f)\\n                             m[f] = self._filecommit(fctx, m1, m2, linkrev,\\n                                                     trp, changed)\\n                             m.setflag(f, fctx.flags())\\n                     except OSError as inst:\\n                         self.ui.warn(_(\\\"trouble committing %s!\\\\n\\\") % f)\\n                         raise\\n                     except IOError as inst:\\n                         errcode = getattr(inst, 'errno', errno.ENOENT)\\n                         if error or errcode and errcode != errno.ENOENT:\\n                             self.ui.warn(_(\\\"trouble committing %s!\\\\n\\\") % f)\\n                         raise\\n \\n                 # update manifest\\n                 self.ui.note(_(\\\"committing manifest\\\\n\\\"))\\n                 removed = [f for f in sorted(removed) if f in m1 or f in m2]\\n                 drop = [f for f in removed if f in m]\\n                 for f in drop:\\n                     del m[f]\\n                 mn = mctx.write(trp, linkrev,\\n                                 p1.manifestnode(), p2.manifestnode(),\\n                                 added, drop)\\n                 files = changed + removed\\n             else:\\n                 mn = p1.manifestnode()\\n                 files = []\\n \\n             # update changelog\\n             self.ui.note(_(\\\"committing changelog\\\\n\\\"))\\n             self.changelog.delayupdate(tr)\\n             n = self.changelog.add(mn, files, ctx.description(),\\n                                    trp, p1.node(), p2.node(),\\n                                    user, ctx.date(), ctx.extra().copy())\\n             xp1, xp2 = p1.hex(), p2 and p2.hex() or ''\\n             self.hook('pretxncommit', throw=True, node=hex(n), parent1=xp1,\\n                       parent2=xp2)\\n             # set the new commit is proper phase\\n             targetphase = subrepo.newcommitphase(self.ui, ctx)\\n             if targetphase:\\n                 # retract boundary do not alter parent changeset.\\n                 # if a parent have higher the resulting phase will\\n                 # be compliant anyway\\n                 #\\n                 # if minimal phase was 0 we don't need to retract anything\\n                 phases.registernew(self, tr, targetphase, [n])\\n             tr.close()\\n             return n\\n         finally:\\n             if tr:\\n                 tr.release()\\n             lock.release()\\n \\n     @unfilteredmethod\\n     def destroying(self):\\n         '''Inform the repository that nodes are about to be destroyed.\\n         Intended for use by strip and rollback, so there's a common\\n         place for anything that has to be done before destroying history.\\n \\n         This is mostly useful for saving state that is in memory and waiting\\n         to be flushed when the current lock is released. Because a call to\\n         destroyed is imminent, the repo will be invalidated causing those\\n         changes to stay in memory (waiting for the next unlock), or vanish\\n         completely.\\n         '''\\n         # When using the same lock to commit and strip, the phasecache is left\\n         # dirty after committing. Then when we strip, the repo is invalidated,\\n         # causing those changes to disappear.\\n         if '_phasecache' in vars(self):\\n             self._phasecache.write()\\n \\n     @unfilteredmethod\\n     def destroyed(self):\\n         '''Inform the repository that nodes have been destroyed.\\n         Intended for use by strip and rollback, so there's a common\\n         place for anything that has to be done after destroying history.\\n         '''\\n         # When one tries to:\\n         # 1) destroy nodes thus calling this method (e.g. strip)\\n         # 2) use phasecache somewhere (e.g. commit)\\n         #\\n         # then 2) will fail because the phasecache contains nodes that were\\n         # removed. We can either remove phasecache from the filecache,\\n         # causing it to reload next time it is accessed, or simply filter\\n         # the removed nodes now and write the updated cache.\\n         self._phasecache.filterunknown(self)\\n         self._phasecache.write()\\n \\n         # refresh all repository caches\\n         self.updatecaches()\\n \\n         # Ensure the persistent tag cache is updated.  Doing it now\\n         # means that the tag cache only has to worry about destroyed\\n         # heads immediately after a strip\\/rollback.  That in turn\\n         # guarantees that \\\"cachetip == currenttip\\\" (comparing both rev\\n         # and node) always means no nodes have been added or destroyed.\\n \\n         # XXX this is suboptimal when qrefresh'ing: we strip the current\\n         # head, refresh the tag cache, then immediately add a new head.\\n         # But I think doing it this way is necessary for the \\\"instant\\n         # tag cache retrieval\\\" case to work.\\n         self.invalidate()\\n \\n     def walk(self, match, node=None):\\n         '''\\n         walk recursively through the directory tree or a given\\n         changeset, finding all files matched by the match\\n         function\\n         '''\\n         self.ui.deprecwarn('use repo[node].walk instead of repo.walk', '4.3')\\n         return self[node].walk(match)\\n \\n     def status(self, node1='.', node2=None, match=None,\\n                ignored=False, clean=False, unknown=False,\\n                listsubrepos=False):\\n         '''a convenience method that calls node1.status(node2)'''\\n         return self[node1].status(node2, match, ignored, clean, unknown,\\n                                   listsubrepos)\\n \\n     def addpostdsstatus(self, ps):\\n         \\\"\\\"\\\"Add a callback to run within the wlock, at the point at which status\\n         fixups happen.\\n \\n         On status completion, callback(wctx, status) will be called with the\\n         wlock held, unless the dirstate has changed from underneath or the wlock\\n         couldn't be grabbed.\\n \\n         Callbacks should not capture and use a cached copy of the dirstate --\\n         it might change in the meanwhile. Instead, they should access the\\n         dirstate via wctx.repo().dirstate.\\n \\n         This list is emptied out after each status run -- extensions should\\n         make sure it adds to this list each time dirstate.status is called.\\n         Extensions should also make sure they don't call this for statuses\\n         that don't involve the dirstate.\\n         \\\"\\\"\\\"\\n \\n         # The list is located here for uniqueness reasons -- it is actually\\n         # managed by the workingctx, but that isn't unique per-repo.\\n         self._postdsstatus.append(ps)\\n \\n     def postdsstatus(self):\\n         \\\"\\\"\\\"Used by workingctx to get the list of post-dirstate-status hooks.\\\"\\\"\\\"\\n         return self._postdsstatus\\n \\n     def clearpostdsstatus(self):\\n         \\\"\\\"\\\"Used by workingctx to clear post-dirstate-status hooks.\\\"\\\"\\\"\\n         del self._postdsstatus[:]\\n \\n     def heads(self, start=None):\\n         if start is None:\\n             cl = self.changelog\\n             headrevs = reversed(cl.headrevs())\\n             return [cl.node(rev) for rev in headrevs]\\n \\n         heads = self.changelog.heads(start)\\n         # sort the output in rev descending order\\n         return sorted(heads, key=self.changelog.rev, reverse=True)\\n \\n     def branchheads(self, branch=None, start=None, closed=False):\\n         '''return a (possibly filtered) list of heads for the given branch\\n \\n         Heads are returned in topological order, from newest to oldest.\\n         If branch is None, use the dirstate branch.\\n         If start is not None, return only heads reachable from start.\\n         If closed is True, return heads that are marked as closed as well.\\n         '''\\n         if branch is None:\\n             branch = self[None].branch()\\n         branches = self.branchmap()\\n         if branch not in branches:\\n             return []\\n         # the cache returns heads ordered lowest to highest\\n         bheads = list(reversed(branches.branchheads(branch, closed=closed)))\\n         if start is not None:\\n             # filter out the heads that cannot be reached from startrev\\n             fbheads = set(self.changelog.nodesbetween([start], bheads)[2])\\n             bheads = [h for h in bheads if h in fbheads]\\n         return bheads\\n \\n     def branches(self, nodes):\\n         if not nodes:\\n             nodes = [self.changelog.tip()]\\n         b = []\\n         for n in nodes:\\n             t = n\\n             while True:\\n                 p = self.changelog.parents(n)\\n                 if p[1] != nullid or p[0] == nullid:\\n                     b.append((t, n, p[0], p[1]))\\n                     break\\n                 n = p[0]\\n         return b\\n \\n     def between(self, pairs):\\n         r = []\\n \\n         for top, bottom in pairs:\\n             n, l, i = top, [], 0\\n             f = 1\\n \\n             while n != bottom and n != nullid:\\n                 p = self.changelog.parents(n)[0]\\n                 if i == f:\\n                     l.append(n)\\n                     f = f * 2\\n                 n = p\\n                 i += 1\\n \\n             r.append(l)\\n \\n         return r\\n \\n     def checkpush(self, pushop):\\n         \\\"\\\"\\\"Extensions can override this function if additional checks have\\n         to be performed before pushing, or call it if they override push\\n         command.\\n         \\\"\\\"\\\"\\n \\n     @unfilteredpropertycache\\n     def prepushoutgoinghooks(self):\\n         \\\"\\\"\\\"Return util.hooks consists of a pushop with repo, remote, outgoing\\n         methods, which are called before pushing changesets.\\n         \\\"\\\"\\\"\\n         return util.hooks()\\n \\n     def pushkey(self, namespace, key, old, new):\\n         try:\\n             tr = self.currenttransaction()\\n             hookargs = {}\\n             if tr is not None:\\n                 hookargs.update(tr.hookargs)\\n             hookargs['namespace'] = namespace\\n             hookargs['key'] = key\\n             hookargs['old'] = old\\n             hookargs['new'] = new\\n             self.hook('prepushkey', throw=True, **hookargs)\\n         except error.HookAbort as exc:\\n             self.ui.write_err(_(\\\"pushkey-abort: %s\\\\n\\\") % exc)\\n             if exc.hint:\\n                 self.ui.write_err(_(\\\"(%s)\\\\n\\\") % exc.hint)\\n             return False\\n         self.ui.debug('pushing key for \\\"%s:%s\\\"\\\\n' % (namespace, key))\\n         ret = pushkey.push(self, namespace, key, old, new)\\n         def runhook():\\n             self.hook('pushkey', namespace=namespace, key=key, old=old, new=new,\\n                       ret=ret)\\n         self._afterlock(runhook)\\n         return ret\\n \\n     def listkeys(self, namespace):\\n         self.hook('prelistkeys', throw=True, namespace=namespace)\\n         self.ui.debug('listing keys for \\\"%s\\\"\\\\n' % namespace)\\n         values = pushkey.list(self, namespace)\\n         self.hook('listkeys', namespace=namespace, values=values)\\n         return values\\n \\n     def debugwireargs(self, one, two, three=None, four=None, five=None):\\n         '''used to test argument passing over the wire'''\\n         return \\\"%s %s %s %s %s\\\" % (one, two, three, four, five)\\n \\n     def savecommitmessage(self, text):\\n         fp = self.vfs('last-message.txt', 'wb')\\n         try:\\n             fp.write(text)\\n         finally:\\n             fp.close()\\n         return self.pathto(fp.name[len(self.root) + 1:])\\n \\n # used to avoid circular references so destructors work\\n def aftertrans(files):\\n     renamefiles = [tuple(t) for t in files]\\n     def a():\\n         for vfs, src, dest in renamefiles:\\n             # if src and dest refer to a same file, vfs.rename is a no-op,\\n             # leaving both src and dest on disk. delete dest to make sure\\n             # the rename couldn't be such a no-op.\\n             vfs.tryunlink(dest)\\n             try:\\n                 vfs.rename(src, dest)\\n             except OSError: # journal file does not yet exist\\n                 pass\\n     return a\\n \\n def undoname(fn):\\n     base, name = os.path.split(fn)\\n     assert name.startswith('journal')\\n     return os.path.join(base, name.replace('journal', 'undo', 1))\\n \\n def instance(ui, path, create):\\n     return localrepository(ui, util.urllocalpath(path), create)\\n \\n def islocal(path):\\n     return True\\n \\n def newreporequirements(repo):\\n     \\\"\\\"\\\"Determine the set of requirements for a new local repository.\\n \\n     Extensions can wrap this function to specify custom requirements for\\n     new repositories.\\n     \\\"\\\"\\\"\\n     ui = repo.ui\\n     requirements = {'revlogv1'}\\n     if ui.configbool('format', 'usestore'):\\n         requirements.add('store')\\n         if ui.configbool('format', 'usefncache'):\\n             requirements.add('fncache')\\n             if ui.configbool('format', 'dotencode'):\\n                 requirements.add('dotencode')\\n \\n     compengine = ui.config('experimental', 'format.compression')\\n     if compengine not in util.compengines:\\n         raise error.Abort(_('compression engine %s defined by '\\n                             'experimental.format.compression not available') %\\n                           compengine,\\n                           hint=_('run \\\"hg debuginstall\\\" to list available '\\n                                  'compression engines'))\\n \\n     # zlib is the historical default and doesn't need an explicit requirement.\\n     if compengine != 'zlib':\\n         requirements.add('exp-compression-%s' % compengine)\\n \\n     if scmutil.gdinitconfig(ui):\\n         requirements.add('generaldelta')\\n     if ui.configbool('experimental', 'treemanifest'):\\n         requirements.add('treemanifest')\\n     if ui.configbool('experimental', 'manifestv2'):\\n         requirements.add('manifestv2')\\n \\n     revlogv2 = ui.config('experimental', 'revlogv2')\\n     if revlogv2 == 'enable-unstable-format-and-corrupt-my-data':\\n         requirements.remove('revlogv1')\\n         # generaldelta is implied by revlogv2.\\n         requirements.discard('generaldelta')\\n         requirements.add(REVLOGV2_REQUIREMENT)\\n \\n     return requirements\\n\"}]}],\"properties\":{\"hg:meta\":{\"date\":\"1509404054 -19800\",\"node\":\"44fc1c1f1774a76423b9c732af6938435099bcc5\",\"user\":\"Pulkit Goyal \\u003c7895pulkit@gmail.com\\u003e\",\"parent\":\"8feef8ef8389a3b544e0a74624f1efc3a8d85d35\"}}}},\"error_code\":null,\"error_info\":null}"
mercurial-5.5.2/tests/phabricator/phabread-str-time.json-114-                }
##############################################
mercurial-5.5.2/tests/test-narrow-widen.t-244-  > EOF
mercurial-5.5.2/tests/test-narrow-widen.t:245:  $ for x in `$TESTDIR/seq.py 0 10`
mercurial-5.5.2/tests/test-narrow-widen.t-246-  > do
##############################################
mercurial-5.5.2/tests/test-pager-legacy.t-24-  $ hg ci -m 'add a'
mercurial-5.5.2/tests/test-pager-legacy.t:25:  $ for x in `"$PYTHON" $TESTDIR/seq.py 1 10`; do
mercurial-5.5.2/tests/test-pager-legacy.t-26-  >   echo a $x >> a
##############################################
mercurial-5.5.2/tests/test-copies-unrelated.t-34-  >     cd $TESTTMP
mercurial-5.5.2/tests/test-copies-unrelated.t:35:  >     REPONUM=`expr $REPONUM + 1`
mercurial-5.5.2/tests/test-copies-unrelated.t-36-  >     hg init repo-$REPONUM
##############################################
mercurial-5.5.2/tests/test-narrow-clone-nonlinear.t-15-  (branches are permanent and global, did you want a bookmark?)
mercurial-5.5.2/tests/test-narrow-clone-nonlinear.t:16:  $ for x in `$TESTDIR/seq.py 10`; do
mercurial-5.5.2/tests/test-narrow-clone-nonlinear.t-17-  >   echo $x > "f$x"
##############################################
mercurial-5.5.2/tests/test-narrow-clone-nonlinear.t-28-  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
mercurial-5.5.2/tests/test-narrow-clone-nonlinear.t:29:  $ for x in `$TESTDIR/seq.py 10`; do
mercurial-5.5.2/tests/test-narrow-clone-nonlinear.t-30-  >   echo "$x v2" > "f$x"
##############################################
mercurial-5.5.2/tests/test-narrow-clone-nonlinear.t-37-  marked working directory as branch release-v1
mercurial-5.5.2/tests/test-narrow-clone-nonlinear.t:38:  $ for x in `$TESTDIR/seq.py 1 5`; do
mercurial-5.5.2/tests/test-narrow-clone-nonlinear.t-39-  >   echo "$x v1 hotfix" > "f$x"
##############################################
mercurial-5.5.2/tests/test-narrow-clone-nonlinear.t-52-  marked working directory as branch default
mercurial-5.5.2/tests/test-narrow-clone-nonlinear.t:53:  $ for x in `$TESTDIR/seq.py 10`; do
mercurial-5.5.2/tests/test-narrow-clone-nonlinear.t-54-  >   echo "$x v3" > "f$x"
##############################################
mercurial-5.5.2/tests/test-narrow-clone-nonlinear.t-61-  marked working directory as branch release-v2
mercurial-5.5.2/tests/test-narrow-clone-nonlinear.t:62:  $ for x in `$TESTDIR/seq.py 4 9`; do
mercurial-5.5.2/tests/test-narrow-clone-nonlinear.t-63-  >   echo "$x v2 hotfix" > "f$x"
##############################################
mercurial-5.5.2/tests/test-patchbomb.t-449-  >   --encoding "utf-8" \
mercurial-5.5.2/tests/test-patchbomb.t:450:  >   -m `"$PYTHON" -c 'import sys; getattr(sys.stdout, "buffer", sys.stdout).write(b"\xc3\xa7a")'`
mercurial-5.5.2/tests/test-patchbomb.t-451-  adding description
##############################################
mercurial-5.5.2/tests/helpers-testrepo.sh-53-# no warning nor error.
mercurial-5.5.2/tests/helpers-testrepo.sh:54:if [ -n "`hg id -R "$TESTDIR/.." 2>&1 >/dev/null`" ]; then
mercurial-5.5.2/tests/helpers-testrepo.sh-55-    alias testrepohg=syshg
##############################################
mercurial-5.5.2/tests/test-simple-update.t-101-  > EOF
mercurial-5.5.2/tests/test-simple-update.t:102:  $ for i in `"$PYTHON" $TESTDIR/seq.py 1 100`; do
mercurial-5.5.2/tests/test-simple-update.t-103-  >   echo $i > $i
##############################################
mercurial-5.5.2/tests/test-rebase-dest.t-121-  $ rebasewithdag() {
mercurial-5.5.2/tests/test-rebase-dest.t:122:  >   N=`"$PYTHON" -c "print($N+1)"`
mercurial-5.5.2/tests/test-rebase-dest.t-123-  >   hg init repo$N && cd repo$N
##############################################
mercurial-5.5.2/tests/test-mq-subrepo-svn.t-25-  $ SVNREPOPATH=`pwd`/svn-repo-2499/project
mercurial-5.5.2/tests/test-mq-subrepo-svn.t:26:  $ SVNREPOURL="`"$PYTHON" $TESTDIR/svnurlof.py \"$SVNREPOPATH\"`"
mercurial-5.5.2/tests/test-mq-subrepo-svn.t-27-
##############################################
mercurial-5.5.2/tests/test-diff-binary-file.t-32-  ziN#{?_j|kD%Cd|oiqds`xm@;oJ-^?NG3Gdqrs?5u*zI;{nogxsx~^|Fn^Y?Gdc6<;
mercurial-5.5.2/tests/test-diff-binary-file.t:33:  zfMJ+iF1J`LMx&A2?dEwNW8ClebzPTbIh{@$hS6*`kH@1d%Lo7fA#}N1)oN7`gm$~V
mercurial-5.5.2/tests/test-diff-binary-file.t-34-  z+wDx#)OFqMcE{s!JN0-xhG8ItAjVkJwEcb`3WWlJfU2r?;Pd%dmR+q@mSri5q9_W-
##############################################
mercurial-5.5.2/tests/test-diff-binary-file.t-57-  ziN#{?_j|kD%Cd|oiqds`xm@;oJ-^?NG3Gdqrs?5u*zI;{nogxsx~^|Fn^Y?Gdc6<;
mercurial-5.5.2/tests/test-diff-binary-file.t:58:  zfMJ+iF1J`LMx&A2?dEwNW8ClebzPTbIh{@$hS6*`kH@1d%Lo7fA#}N1)oN7`gm$~V
mercurial-5.5.2/tests/test-diff-binary-file.t-59-  z+wDx#)OFqMcE{s!JN0-xhG8ItAjVkJwEcb`3WWlJfU2r?;Pd%dmR+q@mSri5q9_W-
##############################################
mercurial-5.5.2/tests/test-narrow-share.t-18-  $ cd remote
mercurial-5.5.2/tests/test-narrow-share.t:19:  $ for x in `$TESTDIR/seq.py 0 10`
mercurial-5.5.2/tests/test-narrow-share.t-20-  > do
##############################################
mercurial-5.5.2/tests/test-mv-cp-st-diff.t-49-  >     add a $count
mercurial-5.5.2/tests/test-mv-cp-st-diff.t:50:  >     count=`expr $count + 1`
mercurial-5.5.2/tests/test-mv-cp-st-diff.t-51-  >     echo % hg ci -m "t0"
##############################################
mercurial-5.5.2/tests/test-notify.t-455-  $ hg --cwd a --encoding utf-8 commit -A -d '0 0' \
mercurial-5.5.2/tests/test-notify.t:456:  >   -m `"$PYTHON" -c 'import sys; getattr(sys.stdout, "buffer", sys.stdout).write(b"\xc3\xa0\xc3\xa1\xc3\xa2\xc3\xa3\xc3\xa4")'`
mercurial-5.5.2/tests/test-notify.t-457-  $ hg --traceback --cwd b --encoding utf-8 pull ../a | \
##############################################
mercurial-5.5.2/tests/testlib/exchange-obsmarker-util.sh-4-cat >> $TESTTMP/prune.sh << EOF
mercurial-5.5.2/tests/testlib/exchange-obsmarker-util.sh:5:rev=\`hg log --hidden --template '{node}\n' --rev "\$3"\`
mercurial-5.5.2/tests/testlib/exchange-obsmarker-util.sh-6-
##############################################
mercurial-5.5.2/tests/testlib/exchange-obsmarker-util.sh-99-        desccall="desc("\'"$target"\'")"
mercurial-5.5.2/tests/testlib/exchange-obsmarker-util.sh:100:        targetnode="`hg -R main id -qr \"$desccall\"`"
mercurial-5.5.2/tests/testlib/exchange-obsmarker-util.sh-101-        echo "# testing echange of \"$target\" ($targetnode)"
##############################################
mercurial-5.5.2/tests/test-remotefilelog-gcrepack.t-49-
mercurial-5.5.2/tests/test-remotefilelog-gcrepack.t:50:  $ hg debugdatapack `ls -ct $TESTTMP/hgcache/master/packs/*.datapack | head -n 1`
mercurial-5.5.2/tests/test-remotefilelog-gcrepack.t-51-  $TESTTMP/hgcache/master/packs/dc8f8fdc76690ce27791ce9f53a18da379e50d37:
##############################################
mercurial-5.5.2/tests/test-remotefilelog-gcrepack.t-81-
mercurial-5.5.2/tests/test-remotefilelog-gcrepack.t:82:  $ hg debugdatapack `ls -ct $TESTTMP/hgcache/master/packs/*.datapack | head -n 1`
mercurial-5.5.2/tests/test-remotefilelog-gcrepack.t-83-  $TESTTMP/hgcache/master/packs/a4e1d094ec2aee8a08a4d6d95a13c634cc7d7394:
##############################################
mercurial-5.5.2/tests/test-remotefilelog-gcrepack.t-106-
mercurial-5.5.2/tests/test-remotefilelog-gcrepack.t:107:  $ hg debugdatapack `ls -ct $TESTTMP/hgcache/master/packs/*.datapack | head -n 1`
mercurial-5.5.2/tests/test-remotefilelog-gcrepack.t-108-  $TESTTMP/hgcache/master/packs/dc8f8fdc76690ce27791ce9f53a18da379e50d37:
##############################################
mercurial-5.5.2/tests/test-remotefilelog-gcrepack.t-138-
mercurial-5.5.2/tests/test-remotefilelog-gcrepack.t:139:  $ hg debugdatapack `ls -ct $TESTTMP/hgcache/master/packs/*.datapack | head -n 1`
mercurial-5.5.2/tests/test-remotefilelog-gcrepack.t-140-  $TESTTMP/hgcache/master/packs/dc8f8fdc76690ce27791ce9f53a18da379e50d37:
##############################################
mercurial-5.5.2/tests/test-narrow.t-30-  > EOF
mercurial-5.5.2/tests/test-narrow.t:31:  $ for x in `$TESTDIR/seq.py 0 10`
mercurial-5.5.2/tests/test-narrow.t-32-  > do
##############################################
mercurial-5.5.2/tests/test-narrow.t-401-  X path:d3/f
mercurial-5.5.2/tests/test-narrow.t:402:  $ for x in `$TESTDIR/seq.py 1 15`
mercurial-5.5.2/tests/test-narrow.t-403-  > do
##############################################
mercurial-5.5.2/tests/test-convert-hg-svn.t-13-  $ SVNREPOPATH=`pwd`/svn-repo
mercurial-5.5.2/tests/test-convert-hg-svn.t:14:  $ SVNREPOURL="`"$PYTHON" $TESTDIR/svnurlof.py \"$SVNREPOPATH\"`"
mercurial-5.5.2/tests/test-convert-hg-svn.t-15-
##############################################
mercurial-5.5.2/tests/library-infinitepush.sh-2-  for node in `find ../repo/.hg/scratchbranches/index/nodemap/* | sort`; do
mercurial-5.5.2/tests/library-infinitepush.sh:3:     echo ${node##*/} `cat $node`
mercurial-5.5.2/tests/library-infinitepush.sh-4-  done
##############################################
mercurial-5.5.2/tests/library-infinitepush.sh-8-  for bookmark in `find ../repo/.hg/scratchbranches/index/bookmarkmap/* -type f | sort`; do
mercurial-5.5.2/tests/library-infinitepush.sh:9:     echo "${bookmark##*/bookmarkmap/} `cat $bookmark`"
mercurial-5.5.2/tests/library-infinitepush.sh-10-  done
##############################################
mercurial-5.5.2/tests/test-check-jshint.t-6-
mercurial-5.5.2/tests/test-check-jshint.t:7:  $ cd "`dirname "$TESTDIR"`"
mercurial-5.5.2/tests/test-check-jshint.t-8-
##############################################
mercurial-5.5.2/tests/test-pending.t-24-  >         sleep 1
mercurial-5.5.2/tests/test-pending.t:25:  >         i=`expr $i - 1`
mercurial-5.5.2/tests/test-pending.t-26-  >     done
##############################################
mercurial-5.5.2/tests/test-pending.t-70-  >     sleep 1
mercurial-5.5.2/tests/test-pending.t:71:  >     i=\`expr \$i - 1\`
mercurial-5.5.2/tests/test-pending.t-72-  > done
##############################################
mercurial-5.5.2/tests/test-revert.t-923-
mercurial-5.5.2/tests/test-revert.t:924:  $ for file in `"$PYTHON" $TESTDIR/generate-working-copy-states.py filelist 2`; do
mercurial-5.5.2/tests/test-revert.t-925-  >   echo '### revert for:' $file;
##############################################
mercurial-5.5.2/tests/test-revert.t-1016-
mercurial-5.5.2/tests/test-revert.t:1017:  $ for file in `"$PYTHON" $TESTDIR/generate-working-copy-states.py filelist 2`; do
mercurial-5.5.2/tests/test-revert.t-1018-  >   echo '### revert for:' $file;
##############################################
mercurial-5.5.2/tests/test-subrepo-svn.t-3-  $ SVNREPOPATH=`pwd`/svn-repo
mercurial-5.5.2/tests/test-subrepo-svn.t:4:  $ SVNREPOURL="`"$PYTHON" $TESTDIR/svnurlof.py \"$SVNREPOPATH\"`"
mercurial-5.5.2/tests/test-subrepo-svn.t-5-
##############################################
mercurial-5.5.2/tests/test-init.t-223-  $ echo '[paths]' >> $HGRCPATH
mercurial-5.5.2/tests/test-init.t:224:  $ echo "somewhere = `pwd`/url from paths" >> $HGRCPATH
mercurial-5.5.2/tests/test-init.t:225:  $ echo "elsewhere = `pwd`/another paths url" >> $HGRCPATH
mercurial-5.5.2/tests/test-init.t-226-
##############################################
mercurial-5.5.2/tests/test-init.t-287-  $ echo 'sparserevlog' >> .hg/requires
mercurial-5.5.2/tests/test-init.t:288:  $ for x in `$TESTDIR/seq.py 100`; do
mercurial-5.5.2/tests/test-init.t:289:  >     echo $x >> `expr $x % 5 + 1`
mercurial-5.5.2/tests/test-init.t-290-  >     hg commit -m $x
##############################################
mercurial-5.5.2/tests/test-addremove-similar.t-59-
mercurial-5.5.2/tests/test-addremove-similar.t:60:  $ for i in `"$PYTHON" $TESTDIR/seq.py 0 9`; do
mercurial-5.5.2/tests/test-addremove-similar.t-61-  >     cp small-file $i
##############################################
mercurial-5.5.2/tests/test-addremove-similar.t-90-  $ cp 0 a
mercurial-5.5.2/tests/test-addremove-similar.t:91:  $ rm `"$PYTHON" $TESTDIR/seq.py 0 9`
mercurial-5.5.2/tests/test-addremove-similar.t-92-  $ hg addremove
##############################################
mercurial-5.5.2/tests/test-addremove-similar.t-109-  $ cp 0 a
mercurial-5.5.2/tests/test-addremove-similar.t:110:  $ for i in `"$PYTHON" $TESTDIR/seq.py 0 9`; do
mercurial-5.5.2/tests/test-addremove-similar.t-111-  >     echo $i >> $i
##############################################
mercurial-5.5.2/tests/test-addremove-similar.t-113-  $ hg commit -m 'make them slightly different'
mercurial-5.5.2/tests/test-addremove-similar.t:114:  $ rm `"$PYTHON" $TESTDIR/seq.py 0 9`
mercurial-5.5.2/tests/test-addremove-similar.t-115-  $ hg addremove -s50
##############################################
mercurial-5.5.2/tests/test-rebase-partial.t-17-  $ rebasewithdag() {
mercurial-5.5.2/tests/test-rebase-partial.t:18:  >   N=`"$PYTHON" -c "print($N+1)"`
mercurial-5.5.2/tests/test-rebase-partial.t-19-  >   hg init repo$N && cd repo$N
##############################################
mercurial-5.5.2/tests/test-diffstat.t-2-  $ cd repo
mercurial-5.5.2/tests/test-diffstat.t:3:  $ i=0; while [ "$i" -lt 213 ]; do echo a >> a; i=`expr $i + 1`; done
mercurial-5.5.2/tests/test-diffstat.t-4-  $ hg add a
##############################################
mercurial-5.5.2/tests/test-check-commit.t-13-  $ mkdir "$TESTTMP/p"
mercurial-5.5.2/tests/test-check-commit.t:14:  $ REVS=`testrepohg log -r "$REVSET" -T.`
mercurial-5.5.2/tests/test-check-commit.t-15-  $ if [ -n "$REVS" ] ; then
mercurial-5.5.2/tests/test-check-commit.t-16-  >   testrepohg export --git -o "$TESTTMP/p/%n-%h" -r "$REVSET"
mercurial-5.5.2/tests/test-check-commit.t:17:  >   for f in `ls "$TESTTMP/p"`; do
mercurial-5.5.2/tests/test-check-commit.t-18-  >      contrib/check-commit < "$TESTTMP/p/$f" > "$TESTTMP/check-commit.out"
##############################################
mercurial-5.5.2/tests/test-audit-subrepo.t-533-  $ cd main
mercurial-5.5.2/tests/test-audit-subrepo.t:534:  $ ln -s "`echo "$FAKEHOME" | sed 's|\(.\)/.*|\1|'`"
mercurial-5.5.2/tests/test-audit-subrepo.t-535-  $ hg ci -qAm 'add symlink to top-level system directory'
##############################################
mercurial-5.5.2/tests/test-narrow-pull.t-8-  > EOF
mercurial-5.5.2/tests/test-narrow-pull.t:9:  $ for x in `$TESTDIR/seq.py 10`
mercurial-5.5.2/tests/test-narrow-pull.t-10-  > do
##############################################
mercurial-5.5.2/tests/test-narrow-pull.t-41-  $ cd master
mercurial-5.5.2/tests/test-narrow-pull.t:42:  $ for x in `$TESTDIR/seq.py 10`
mercurial-5.5.2/tests/test-narrow-pull.t-43-  > do
##############################################
mercurial-5.5.2/tests/test-narrow-pull.t-46-  > done
mercurial-5.5.2/tests/test-narrow-pull.t:47:  $ for x in `$TESTDIR/seq.py 10`
mercurial-5.5.2/tests/test-narrow-pull.t-48-  > do
##############################################
mercurial-5.5.2/tests/test-remotefilelog-gc.t-42-
mercurial-5.5.2/tests/test-remotefilelog-gc.t:43:  $ lastweek=`$PYTHON -c 'import datetime,time; print(datetime.datetime.fromtimestamp(time.time() - (86400 * 7)).strftime("%y%m%d%H%M"))'`
mercurial-5.5.2/tests/test-remotefilelog-gc.t-44-  $ find $CACHEDIR -type f -exec touch -t $lastweek {} \;
##############################################
mercurial-5.5.2/tests/test-remotefilelog-bgprefetch.t-146-
mercurial-5.5.2/tests/test-remotefilelog-bgprefetch.t:147:  $ hg debugdatapack `ls -ct $TESTTMP/hgcache/master/packs/*.datapack | head -n 1`
mercurial-5.5.2/tests/test-remotefilelog-bgprefetch.t-148-  $TESTTMP/hgcache/master/packs/f4d50848e0b465e9bfd2875f213044c06cfd7407:
##############################################
mercurial-5.5.2/tests/test-remotefilelog-bgprefetch.t-196-
mercurial-5.5.2/tests/test-remotefilelog-bgprefetch.t:197:  $ hg debugdatapack `ls -ct $TESTTMP/hgcache/master/packs/*.datapack | head -n 1`
mercurial-5.5.2/tests/test-remotefilelog-bgprefetch.t-198-  $TESTTMP/hgcache/master/packs/f4d50848e0b465e9bfd2875f213044c06cfd7407:
##############################################
mercurial-5.5.2/tests/test-remotefilelog-bgprefetch.t-244-
mercurial-5.5.2/tests/test-remotefilelog-bgprefetch.t:245:  $ hg debugdatapack `ls -ct $TESTTMP/hgcache/master/packs/*.datapack | head -n 1`
mercurial-5.5.2/tests/test-remotefilelog-bgprefetch.t-246-  $TESTTMP/hgcache/master/packs/f4d50848e0b465e9bfd2875f213044c06cfd7407:
##############################################
mercurial-5.5.2/tests/test-remotefilelog-bgprefetch.t-287-# Ensure that files were prefetched
mercurial-5.5.2/tests/test-remotefilelog-bgprefetch.t:288:  $ hg debugdatapack `ls -ct $TESTTMP/hgcache/master/packs/*.datapack | head -n 1`
mercurial-5.5.2/tests/test-remotefilelog-bgprefetch.t-289-  $TESTTMP/hgcache/master/packs/f4d50848e0b465e9bfd2875f213044c06cfd7407:
##############################################
mercurial-5.5.2/tests/test-remotefilelog-bgprefetch.t-328-# Ensure that files were prefetched
mercurial-5.5.2/tests/test-remotefilelog-bgprefetch.t:329:  $ hg debugdatapack `ls -ct $TESTTMP/hgcache/master/packs/*.datapack | head -n 1`
mercurial-5.5.2/tests/test-remotefilelog-bgprefetch.t-330-  $TESTTMP/hgcache/master/packs/f4d50848e0b465e9bfd2875f213044c06cfd7407:
##############################################
mercurial-5.5.2/tests/test-pull.t-117-
mercurial-5.5.2/tests/test-pull.t:118:  $ URL=`"$PYTHON" -c "from __future__ import print_function; import os; print('file://foobar' + ('/' + os.getcwd().replace(os.sep, '/')).replace('//', '/') + '/../test')"`
mercurial-5.5.2/tests/test-pull.t-119-  $ hg pull -q "$URL"
##############################################
mercurial-5.5.2/tests/test-pull.t-122-
mercurial-5.5.2/tests/test-pull.t:123:  $ URL=`"$PYTHON" -c "from __future__ import print_function; import os; print('file://localhost' + ('/' + os.getcwd().replace(os.sep, '/')).replace('//', '/') + '/../test')"`
mercurial-5.5.2/tests/test-pull.t-124-  $ hg pull -q "$URL"
##############################################
mercurial-5.5.2/tests/test-fncache.t-302-  $ rm -f "${extpath}c"
mercurial-5.5.2/tests/test-fncache.t:303:  $ rm -Rf "`dirname $extpath`/__pycache__"
mercurial-5.5.2/tests/test-fncache.t-304-
##############################################
mercurial-5.5.2/tests/test-fncache.t-349-  $ rm -f "${extpath}c"
mercurial-5.5.2/tests/test-fncache.t:350:  $ rm -Rf "`dirname $extpath`/__pycache__"
mercurial-5.5.2/tests/test-fncache.t-351-
##############################################
mercurial-5.5.2/tests/test-convert-tagsbranch-topology.t-25-  >     git "$@" >/dev/null 2>/dev/null || echo "git command error"
mercurial-5.5.2/tests/test-convert-tagsbranch-topology.t:26:  >     count=`expr $count + 1`
mercurial-5.5.2/tests/test-convert-tagsbranch-topology.t-27-  > }
##############################################
mercurial-5.5.2/tests/test-narrow-clone-non-narrow-server.t-7-
mercurial-5.5.2/tests/test-narrow-clone-non-narrow-server.t:8:  $ for x in `$TESTDIR/seq.py 10`; do
mercurial-5.5.2/tests/test-narrow-clone-non-narrow-server.t-9-  >   echo $x > "f$x"
##############################################
mercurial-5.5.2/tests/test-merge-force.t-313-  $ checkstatus() {
mercurial-5.5.2/tests/test-merge-force.t:314:  >   for f in `"$PYTHON" $TESTDIR/generate-working-copy-states.py filelist 3`
mercurial-5.5.2/tests/test-merge-force.t-315-  >   do
##############################################
mercurial-5.5.2/tests/test-merge-force.t-694-
mercurial-5.5.2/tests/test-merge-force.t:695:  $ for f in `"$PYTHON" $TESTDIR/generate-working-copy-states.py filelist 3`
mercurial-5.5.2/tests/test-merge-force.t-696-  > do
##############################################
mercurial-5.5.2/tests/test-subrepo-deep-nested-change.t-263-  $ echo 'subfolder' > sub1/sub2/folder/test.txt
mercurial-5.5.2/tests/test-subrepo-deep-nested-change.t:264:  $ hg ci -ASm "add test.txt"
mercurial-5.5.2/tests/test-subrepo-deep-nested-change.t-265-  adding sub1/sub2/folder/test.txt
##############################################
mercurial-5.5.2/tests/test-subrepo-deep-nested-change.t-509-  $ rm sub1/sub2/test.txt
mercurial-5.5.2/tests/test-subrepo-deep-nested-change.t:510:  $ hg ci -ASm "remove test.txt"
mercurial-5.5.2/tests/test-subrepo-deep-nested-change.t-511-  adding sub1/sub2/folder/bar
##############################################
mercurial-5.5.2/tests/test-copies.t-34-  >     cd $TESTTMP
mercurial-5.5.2/tests/test-copies.t:35:  >     REPONUM=`expr $REPONUM + 1`
mercurial-5.5.2/tests/test-copies.t-36-  >     hg init repo-$REPONUM
##############################################
mercurial-5.5.2/tests/test-push-warn.t-421-
mercurial-5.5.2/tests/test-push-warn.t:422:  $ for i in `"$PYTHON" $TESTDIR/seq.py 3`; do hg -R h up -q 0; echo $i > h/b; hg -R h ci -qAm$i; done
mercurial-5.5.2/tests/test-push-warn.t-423-
##############################################
mercurial-5.5.2/tests/test-debugcommands.t-349-  (branches are permanent and global, did you want a bookmark?)
mercurial-5.5.2/tests/test-debugcommands.t:350:  $ for i in `$TESTDIR/seq.py 5`; do
mercurial-5.5.2/tests/test-debugcommands.t-351-  >   printf "shorter ${i}" >> a
##############################################
mercurial-5.5.2/tests/test-debugcommands.t-426-  >         now=`date +%s`
mercurial-5.5.2/tests/test-debugcommands.t:427:  >         if [ "`expr $now - $start`" -gt $timeout ]; then
mercurial-5.5.2/tests/test-debugcommands.t-428-  >             echo "timeout: $1 was not created in $timeout seconds"
##############################################
mercurial-5.5.2/tests/test-censor.t-308-
mercurial-5.5.2/tests/test-censor.t:309:  $ for x in `"$PYTHON" $TESTDIR/seq.py 0 50000`
mercurial-5.5.2/tests/test-censor.t-310-  > do
##############################################
mercurial-5.5.2/tests/test-convert-svn-source.t-15-  $ SVNREPOPATH=`pwd`/svn-repo
mercurial-5.5.2/tests/test-convert-svn-source.t:16:  $ SVNREPOURL="`"$PYTHON" $TESTDIR/svnurlof.py \"$SVNREPOPATH\"`"
mercurial-5.5.2/tests/test-convert-svn-source.t-17-  $ INVALIDREVISIONID=svn:x2147622-4a9f-4db4-a8d3-13562ff547b2/proj%20B/mytrunk@1
##############################################
mercurial-5.5.2/tests/test-inherit-mode.t-174-  $ hg ci -qAm 'add dir/file'
mercurial-5.5.2/tests/test-inherit-mode.t:175:  $ storemode=`"$PYTHON" ../mode.py .hg/store`
mercurial-5.5.2/tests/test-inherit-mode.t:176:  $ dirmode=`"$PYTHON" ../mode.py .hg/store/data/dir`
mercurial-5.5.2/tests/test-inherit-mode.t-177-  $ if [ "$storemode" != "$dirmode" ]; then
##############################################
mercurial-5.5.2/tests/test-config.t-387-  $ mkdir configs
mercurial-5.5.2/tests/test-config.t:388:  $ for i in `$TESTDIR/seq.py 10 99`; do
mercurial-5.5.2/tests/test-config.t-389-  >    printf "[section]\nkey=$i" > configs/$i.rc
##############################################
mercurial-5.5.2/tests/test-log.t-2723----- now we are going to add 300 lines to a
mercurial-5.5.2/tests/test-log.t:2724:  $ for i in `$TESTDIR/seq.py 1 300`; do echo $i >> a; done
mercurial-5.5.2/tests/test-log.t-2725-  $ hg ci -m 'modify a'
##############################################
mercurial-5.5.2/tests/test-strip-cross.t-10-  >         for f in $i; do
mercurial-5.5.2/tests/test-strip-cross.t:11:  >             mkdir -p `dirname $f`
mercurial-5.5.2/tests/test-strip-cross.t-12-  >             echo $count > $f
mercurial-5.5.2/tests/test-strip-cross.t-13-  >         done
mercurial-5.5.2/tests/test-strip-cross.t:14:  >         count=`expr $count + 1`
mercurial-5.5.2/tests/test-strip-cross.t-15-  >     done
##############################################
mercurial-5.5.2/tests/test-bookmarks-corner-case.t-166-  $ while [ ! -f push-A-started ] && [ $clock -gt 0 ] ; do
mercurial-5.5.2/tests/test-bookmarks-corner-case.t:167:  >    clock=`expr $clock - 1`
mercurial-5.5.2/tests/test-bookmarks-corner-case.t-168-  >    sleep 1
##############################################
mercurial-5.5.2/tests/test-bookmarks-corner-case.t-193-  $ while [ ! -f push-A-done ] && [ $clock -gt 0 ] ; do
mercurial-5.5.2/tests/test-bookmarks-corner-case.t:194:  >    clock=`expr $clock - 1`
mercurial-5.5.2/tests/test-bookmarks-corner-case.t-195-  >    sleep 1
##############################################
mercurial-5.5.2/tests/test-narrow-acl.t-6-
mercurial-5.5.2/tests/test-narrow-acl.t:7:  $ for x in `$TESTDIR/seq.py 3`; do
mercurial-5.5.2/tests/test-narrow-acl.t-8-  >   echo $x > "f$x"
##############################################
mercurial-5.5.2/tests/test-merge-combination.t-17-  >   for base in `range` -; do
mercurial-5.5.2/tests/test-merge-combination.t:18:  >     for r1 in `range $base` -; do
mercurial-5.5.2/tests/test-merge-combination.t:19:  >       for r2 in `range $base $r1` -; do
mercurial-5.5.2/tests/test-merge-combination.t:20:  >         for m in `range $base $r1 $r2` -; do
mercurial-5.5.2/tests/test-merge-combination.t-21-  >           line="$base$r1$r2$m"
##############################################
mercurial-5.5.2/tests/test-merge-combination.t-80-  >   done
mercurial-5.5.2/tests/test-merge-combination.t:81:  >   $TESTDIR/seq.py `expr $max + 1`
mercurial-5.5.2/tests/test-merge-combination.t-82-  > }
##############################################
mercurial-5.5.2/tests/test-narrow-clone-stream.t-27-  $ cd dir/src
mercurial-5.5.2/tests/test-narrow-clone-stream.t:28:  $ for x in `$TESTDIR/seq.py 20`; do echo $x > "F$x"; hg add "F$x"; hg commit -m "Commit src $x"; done
mercurial-5.5.2/tests/test-narrow-clone-stream.t-29-
##############################################
mercurial-5.5.2/tests/test-narrow-clone-stream.t-32-  $ cd tests
mercurial-5.5.2/tests/test-narrow-clone-stream.t:33:  $ for x in `$TESTDIR/seq.py 20`; do echo $x > "F$x"; hg add "F$x"; hg commit -m "Commit src $x"; done
mercurial-5.5.2/tests/test-narrow-clone-stream.t-34-  $ cd ../../..
##############################################
mercurial-5.5.2/tests/test-convert-filemap.t-121-  >     echo "% $files: $msg"
mercurial-5.5.2/tests/test-convert-filemap.t:122:  >     prefix=`echo "$files" | sed -e 's/ /-/g'`
mercurial-5.5.2/tests/test-convert-filemap.t-123-  >     fmap="$prefix.fmap"
##############################################
mercurial-5.5.2/tests/test-convert-git.t-28-  >     git commit "$@" >/dev/null 2>/dev/null || echo "git commit error"
mercurial-5.5.2/tests/test-convert-git.t:29:  >     count=`expr $count + 1`
mercurial-5.5.2/tests/test-convert-git.t-30-  > }
##############################################
mercurial-5.5.2/tests/test-convert-git.t-162-  >     echo "% $files: $msg"
mercurial-5.5.2/tests/test-convert-git.t:163:  >     prefix=`echo "$files" | sed -e 's/ /-/g'`
mercurial-5.5.2/tests/test-convert-git.t-164-  >     fmap="$prefix.fmap"
##############################################
mercurial-5.5.2/tests/test-git-export.t-357-  ziN#{?_j|kD%Cd|oiqds`xm@;oJ-^?NG3Gdqrs?5u*zI;{nogxsx~^|Fn^Y?Gdc6<;
mercurial-5.5.2/tests/test-git-export.t:358:  zfMJ+iF1J`LMx&A2?dEwNW8ClebzPTbIh{@$hS6*`kH@1d%Lo7fA#}N1)oN7`gm$~V
mercurial-5.5.2/tests/test-git-export.t-359-  z+wDx#)OFqMcE{s!JN0-xhG8ItAjVkJwEcb`3WWlJfU2r?;Pd%dmR+q@mSri5q9_W-
##############################################
mercurial-5.5.2/tests/test-setdiscovery.t-1071-  $ hg init r1
mercurial-5.5.2/tests/test-setdiscovery.t:1072:  $ for i in `"$PYTHON" $TESTDIR/seq.py 101`; do hg -R r1 up -qr null && hg -R r1 branch -q b$i && hg -R r1 ci -qmb$i; done
mercurial-5.5.2/tests/test-setdiscovery.t-1073-  $ hg clone -q r1 r2
mercurial-5.5.2/tests/test-setdiscovery.t:1074:  $ for i in `"$PYTHON" $TESTDIR/seq.py 10`; do hg -R r1 up -qr null && hg -R r1 branch -q c$i && hg -R r1 ci -qmc$i; done
mercurial-5.5.2/tests/test-setdiscovery.t-1075-  $ hg -R r2 branch -q r2change && hg -R r2 ci -qmr2change
##############################################
mercurial-5.5.2/tests/test-gendoc.t-8-  $ { echo C; ls "$TESTDIR/../i18n"/*.po | sort; } | while read PO; do
mercurial-5.5.2/tests/test-gendoc.t:9:  >     LOCALE=`basename "$PO" .po`
mercurial-5.5.2/tests/test-gendoc.t-10-  >     echo "% extracting documentation from $LOCALE"
##############################################
mercurial-5.5.2/tests/test-convert-p4-filetypes.t-43-  $ for T in $TYPES ; do
mercurial-5.5.2/tests/test-convert-p4-filetypes.t:44:  >    T2=`echo $T | tr [:upper:] [:lower:]`
mercurial-5.5.2/tests/test-convert-p4-filetypes.t-45-  >    case $T in
##############################################
mercurial-5.5.2/tests/test-convert-p4-filetypes.t-178-  $ for T in $TYPES ; do
mercurial-5.5.2/tests/test-convert-p4-filetypes.t:179:  >    T2=`echo $T | tr [:upper:] [:lower:]`
mercurial-5.5.2/tests/test-convert-p4-filetypes.t-180-  >    echo '$Id$'       >>file_$T2
##############################################
mercurial-5.5.2/tests/test-narrow-clone-no-ellipsis.t-7-  $ cd dir/src
mercurial-5.5.2/tests/test-narrow-clone-no-ellipsis.t:8:  $ for x in `$TESTDIR/seq.py 20`; do echo $x > "f$x"; hg add "f$x"; hg commit -m "Commit src $x"; done
mercurial-5.5.2/tests/test-narrow-clone-no-ellipsis.t-9-  $ cd ..
##############################################
mercurial-5.5.2/tests/test-narrow-clone-no-ellipsis.t-11-  $ cd tests
mercurial-5.5.2/tests/test-narrow-clone-no-ellipsis.t:12:  $ for x in `$TESTDIR/seq.py 20`; do echo $x > "t$x"; hg add "t$x"; hg commit -m "Commit test $x"; done
mercurial-5.5.2/tests/test-narrow-clone-no-ellipsis.t-13-  $ cd ../../..
##############################################
mercurial-5.5.2/tests/test-bisect.t-11-  >     hg ci -m "msg $count" -d "$count 0"
mercurial-5.5.2/tests/test-bisect.t:12:  >     count=`expr $count + 1`
mercurial-5.5.2/tests/test-bisect.t-13-  > done
##############################################
mercurial-5.5.2/tests/test-bisect.t-505-  > test "$current" = "$HG_NODE" || (echo current is bad: $current; exit 127)
mercurial-5.5.2/tests/test-bisect.t:506:  > rev="`hg log -r $HG_NODE --template {rev}`"
mercurial-5.5.2/tests/test-bisect.t-507-  > test "$rev" -ge 6
##############################################
mercurial-5.5.2/tests/test-narrow-shallow.t-10-  > EOF
mercurial-5.5.2/tests/test-narrow-shallow.t:11:  $ for x in `$TESTDIR/seq.py 10`
mercurial-5.5.2/tests/test-narrow-shallow.t-12-  > do
##############################################
mercurial-5.5.2/tests/test-narrow-shallow.t-17-  $ mkdir d1 d2
mercurial-5.5.2/tests/test-narrow-shallow.t:18:  $ for x in `$TESTDIR/seq.py 10`
mercurial-5.5.2/tests/test-narrow-shallow.t-19-  > do
##############################################
mercurial-5.5.2/tests/test-narrow-shallow.t-25-  $ hg commit -m "Add d1 and d2"
mercurial-5.5.2/tests/test-narrow-shallow.t:26:  $ for x in `$TESTDIR/seq.py 10`
mercurial-5.5.2/tests/test-narrow-shallow.t-27-  > do
##############################################
mercurial-5.5.2/tests/test-narrow-shallow.t-62-  $ cd master
mercurial-5.5.2/tests/test-narrow-shallow.t:63:  $ for x in `$TESTDIR/seq.py 10`
mercurial-5.5.2/tests/test-narrow-shallow.t-64-  > do
##############################################
mercurial-5.5.2/tests/test-narrow-clone.t-11-  $ cd dir/src
mercurial-5.5.2/tests/test-narrow-clone.t:12:  $ for x in `$TESTDIR/seq.py 20`; do echo $x > "f$x"; hg add "f$x"; hg commit -m "Commit src $x"; done
mercurial-5.5.2/tests/test-narrow-clone.t-13-  $ cd ..
##############################################
mercurial-5.5.2/tests/test-narrow-clone.t-15-  $ cd tests
mercurial-5.5.2/tests/test-narrow-clone.t:16:  $ for x in `$TESTDIR/seq.py 20`; do echo $x > "t$x"; hg add "t$x"; hg commit -m "Commit test $x"; done
mercurial-5.5.2/tests/test-narrow-clone.t-17-  $ cd ../../..
##############################################
mercurial-5.5.2/tests/test-check-shbang.t-3-  $ . "$TESTDIR/helpers-testrepo.sh"
mercurial-5.5.2/tests/test-check-shbang.t:4:  $ cd "`dirname "$TESTDIR"`"
mercurial-5.5.2/tests/test-check-shbang.t-5-
##############################################
mercurial-5.5.2/tests/test-logtoprocess.t-103-  > #!/bin/sh
mercurial-5.5.2/tests/test-logtoprocess.t:104:  > for i in \`$TESTDIR/seq.py 50\`; do
mercurial-5.5.2/tests/test-logtoprocess.t-105-  >   if [ -f "$TESTTMP/wait-for-touched" ];
##############################################
mercurial-5.5.2/tests/test-revlog-mmapindex.t-27-  $ hg commit -qm base
mercurial-5.5.2/tests/test-revlog-mmapindex.t:28:  $ for i in `$TESTDIR/seq.py 1 100` ; do
mercurial-5.5.2/tests/test-revlog-mmapindex.t-29-  > echo $i > a
##############################################
mercurial-5.5.2/tests/test-git-interop.t-14-  >    git commit "$@" >/dev/null 2>/dev/null || echo "git commit error"
mercurial-5.5.2/tests/test-git-interop.t:15:  >    count=`expr $count + 1`
mercurial-5.5.2/tests/test-git-interop.t-16-  >  }
##############################################
mercurial-5.5.2/tests/test-import-git.t-400-  > zJd&86kq$%%907v caret tgWoQdwI`|oNK%VvU~S#C<o caret F?6c48?Cjj#-4P<>HFD%&|Ni~t
mercurial-5.5.2/tests/test-import-git.t:401:  > zKJ(|#H`$<5W+6ZkBb213rXonKZLB+X> caret L}J@W6osP3piLD_5?R!`S}*{xLBzFiL4@
mercurial-5.5.2/tests/test-import-git.t-402-  > zX+}l{`A%?f@T5tT%ztu60p;)be`fWC`tP@WpO=?cpf8Xuf1OSj6d3f@Ki(ovDYq%0
##############################################
mercurial-5.5.2/tests/test-rebase-brute-force.t-9-  $ init() {
mercurial-5.5.2/tests/test-rebase-brute-force.t:10:  >   N=`expr ${N:-0} + 1`
mercurial-5.5.2/tests/test-rebase-brute-force.t-11-  >   cd $TESTTMP && hg init repo$N && cd repo$N
##############################################
mercurial-5.5.2/tests/test-narrow-archive.t-6-
mercurial-5.5.2/tests/test-narrow-archive.t:7:  $ for x in `$TESTDIR/seq.py 3`; do
mercurial-5.5.2/tests/test-narrow-archive.t-8-  >   echo $x > "f$x"
##############################################
mercurial-5.5.2/tests/test-obsolete-bundle-strip.t-54-  >     testname=`basename \`pwd\``
mercurial-5.5.2/tests/test-obsolete-bundle-strip.t:55:  >     revsname=`hg --hidden log -T '-{desc}' --rev "${revs}"`
mercurial-5.5.2/tests/test-obsolete-bundle-strip.t-56-  >     prefix="${TESTTMP}/${testname}${revsname}"
##############################################
mercurial-5.5.2/tests/test-obsolete-bundle-strip.t-78-  >     # if the matched revs do not have children, we also check the result of strip
mercurial-5.5.2/tests/test-obsolete-bundle-strip.t:79:  >     children=`hg log --hidden --rev "((${revs})::) - (${revs})"`
mercurial-5.5.2/tests/test-obsolete-bundle-strip.t-80-  >     if [ -z "$children" ];
##############################################
mercurial-5.5.2/doc/Makefile-41-	for i in $(MAN) ; do \
mercurial-5.5.2/doc/Makefile:42:	  subdir=`echo $$i | sed -n 's/^.*\.\([0-9]\)$$/man\1/p'` ; \
mercurial-5.5.2/doc/Makefile-43-	  mkdir -p "$(DESTDIR)$(MANDIR)"/$$subdir ; \
##############################################
mercurial-5.5.2/doc/hgrc.5.html-351-happen before the command is passed to the shell.</p>
mercurial-5.5.2/doc/hgrc.5.html:352:<p>Shell aliases are executed in an environment where <tt class="docutils literal">$HG</tt> expands to
mercurial-5.5.2/doc/hgrc.5.html-353-the path of the Mercurial that was used to execute the alias. This is
##############################################
mercurial-5.5.2/hgext/zeroconf/__init__.py-66-    try:
mercurial-5.5.2/hgext/zeroconf/__init__.py:67:        dumbip = socket.gethostbyaddr(socket.gethostname())[2][0]
mercurial-5.5.2/hgext/zeroconf/__init__.py-68-        if ':' in dumbip:
##############################################
mercurial-5.5.2/hgext/notify.py-496-                self.ui,
mercurial-5.5.2/hgext/notify.py:497:                emailutils.parseaddr(msg['From'])[1],
mercurial-5.5.2/hgext/notify.py-498-                subs,
##############################################
mercurial-5.5.2/hgext/hooklib/changeset_published.py-119-        mail.sendmail(
mercurial-5.5.2/hgext/hooklib/changeset_published.py:120:            ui, emailutils.parseaddr(msg['From'])[1], subs, msgtext, mbox=n.mbox
mercurial-5.5.2/hgext/hooklib/changeset_published.py-121-        )
##############################################
mercurial-5.5.2/hgext/hooklib/changeset_obsoleted.py-120-        mail.sendmail(
mercurial-5.5.2/hgext/hooklib/changeset_obsoleted.py:121:            ui, emailutils.parseaddr(msg['From'])[1], subs, msgtext, mbox=n.mbox
mercurial-5.5.2/hgext/hooklib/changeset_obsoleted.py-122-        )
##############################################
mercurial-5.5.2/hgext/patchbomb.py-921-
mercurial-5.5.2/hgext/patchbomb.py:922:    sender_addr = eutil.parseaddr(encoding.strfromlocal(sender))[1]
mercurial-5.5.2/hgext/patchbomb.py-923-    sender = mail.addressencode(ui, sender, _charsets, opts.get(b'test'))
##############################################
mercurial-5.5.2/contrib/fuzz/Makefile-26-	$(CXX) $(CXXFLAGS) -g -O1 \
mercurial-5.5.2/contrib/fuzz/Makefile:27:	  `$(PYTHON_CONFIG) --cflags` \
mercurial-5.5.2/contrib/fuzz/Makefile-28-	  -I../../mercurial -c -o pyutil.o pyutil.cc
##############################################
mercurial-5.5.2/contrib/fuzz/Makefile-60-parsers-%.o: ../../mercurial/cext/%.c
mercurial-5.5.2/contrib/fuzz/Makefile:61:	$(CC) -I../../mercurial `$(PYTHON_CONFIG) --cflags` $(CFLAGS) -c \
mercurial-5.5.2/contrib/fuzz/Makefile-62-	  -o $@ $<
##############################################
mercurial-5.5.2/contrib/fuzz/Makefile-66-dirs_fuzzer: dirs.cc pyutil.o $(PARSERS_OBJS) $$OUT/dirs_fuzzer_seed_corpus.zip
mercurial-5.5.2/contrib/fuzz/Makefile:67:	$(CXX) $(CXXFLAGS) `$(PYTHON_CONFIG) --cflags` \
mercurial-5.5.2/contrib/fuzz/Makefile-68-	  -Wno-register -Wno-macro-redefined \
##############################################
mercurial-5.5.2/contrib/fuzz/Makefile-70-	  pyutil.o $(PARSERS_OBJS) \
mercurial-5.5.2/contrib/fuzz/Makefile:71:	  $(LIB_FUZZING_ENGINE) `$(PYTHON_CONFIG) $(PYTHON_CONFIG_FLAGS)` \
mercurial-5.5.2/contrib/fuzz/Makefile-72-	  -o $$OUT/dirs_fuzzer
##############################################
mercurial-5.5.2/contrib/fuzz/Makefile-74-fncache_fuzzer: fncache.cc 
mercurial-5.5.2/contrib/fuzz/Makefile:75:	$(CXX) $(CXXFLAGS) `$(PYTHON_CONFIG) --cflags` \
mercurial-5.5.2/contrib/fuzz/Makefile-76-	  -Wno-register -Wno-macro-redefined \
##############################################
mercurial-5.5.2/contrib/fuzz/Makefile-78-	  pyutil.o $(PARSERS_OBJS) \
mercurial-5.5.2/contrib/fuzz/Makefile:79:	  $(LIB_FUZZING_ENGINE) `$(PYTHON_CONFIG) $(PYTHON_CONFIG_FLAGS)` \
mercurial-5.5.2/contrib/fuzz/Makefile-80-	  -o $$OUT/fncache_fuzzer
##############################################
mercurial-5.5.2/contrib/fuzz/Makefile-82-jsonescapeu8fast_fuzzer: jsonescapeu8fast.cc pyutil.o $(PARSERS_OBJS)
mercurial-5.5.2/contrib/fuzz/Makefile:83:	$(CXX) $(CXXFLAGS) `$(PYTHON_CONFIG) --cflags` \
mercurial-5.5.2/contrib/fuzz/Makefile-84-	  -Wno-register -Wno-macro-redefined \
##############################################
mercurial-5.5.2/contrib/fuzz/Makefile-86-	  pyutil.o $(PARSERS_OBJS) \
mercurial-5.5.2/contrib/fuzz/Makefile:87:	  $(LIB_FUZZING_ENGINE) `$(PYTHON_CONFIG) $(PYTHON_CONFIG_FLAGS)` \
mercurial-5.5.2/contrib/fuzz/Makefile-88-	  -o $$OUT/jsonescapeu8fast_fuzzer
##############################################
mercurial-5.5.2/contrib/fuzz/Makefile-90-manifest_fuzzer: manifest.cc pyutil.o $(PARSERS_OBJS) $$OUT/manifest_fuzzer_seed_corpus.zip
mercurial-5.5.2/contrib/fuzz/Makefile:91:	$(CXX) $(CXXFLAGS) `$(PYTHON_CONFIG) --cflags` \
mercurial-5.5.2/contrib/fuzz/Makefile-92-	  -Wno-register -Wno-macro-redefined \
##############################################
mercurial-5.5.2/contrib/fuzz/Makefile-94-	  pyutil.o $(PARSERS_OBJS) \
mercurial-5.5.2/contrib/fuzz/Makefile:95:	  $(LIB_FUZZING_ENGINE) `$(PYTHON_CONFIG) $(PYTHON_CONFIG_FLAGS)` \
mercurial-5.5.2/contrib/fuzz/Makefile-96-	  -o $$OUT/manifest_fuzzer
##############################################
mercurial-5.5.2/contrib/fuzz/Makefile-98-revlog_fuzzer: revlog.cc pyutil.o $(PARSERS_OBJS) $$OUT/revlog_fuzzer_seed_corpus.zip
mercurial-5.5.2/contrib/fuzz/Makefile:99:	$(CXX) $(CXXFLAGS) `$(PYTHON_CONFIG) --cflags` \
mercurial-5.5.2/contrib/fuzz/Makefile-100-	  -Wno-register -Wno-macro-redefined \
##############################################
mercurial-5.5.2/contrib/fuzz/Makefile-102-	  pyutil.o $(PARSERS_OBJS) \
mercurial-5.5.2/contrib/fuzz/Makefile:103:	  $(LIB_FUZZING_ENGINE) `$(PYTHON_CONFIG) $(PYTHON_CONFIG_FLAGS)` \
mercurial-5.5.2/contrib/fuzz/Makefile-104-	  -o $$OUT/revlog_fuzzer
##############################################
mercurial-5.5.2/contrib/fuzz/Makefile-106-dirstate_fuzzer: dirstate.cc pyutil.o $(PARSERS_OBJS) $$OUT/dirstate_fuzzer_seed_corpus.zip
mercurial-5.5.2/contrib/fuzz/Makefile:107:	$(CXX) $(CXXFLAGS) `$(PYTHON_CONFIG) --cflags` \
mercurial-5.5.2/contrib/fuzz/Makefile-108-	  -Wno-register -Wno-macro-redefined \
##############################################
mercurial-5.5.2/contrib/fuzz/Makefile-110-	  pyutil.o $(PARSERS_OBJS) \
mercurial-5.5.2/contrib/fuzz/Makefile:111:	  $(LIB_FUZZING_ENGINE) `$(PYTHON_CONFIG) $(PYTHON_CONFIG_FLAGS)` \
mercurial-5.5.2/contrib/fuzz/Makefile-112-	  -o $$OUT/dirstate_fuzzer
##############################################
mercurial-5.5.2/contrib/fuzz/Makefile-114-fm1readmarkers_fuzzer: fm1readmarkers.cc pyutil.o $(PARSERS_OBJS) $$OUT/fm1readmarkers_fuzzer_seed_corpus.zip
mercurial-5.5.2/contrib/fuzz/Makefile:115:	$(CXX) $(CXXFLAGS) `$(PYTHON_CONFIG) --cflags` \
mercurial-5.5.2/contrib/fuzz/Makefile-116-	  -Wno-register -Wno-macro-redefined \
##############################################
mercurial-5.5.2/contrib/fuzz/Makefile-118-	  pyutil.o $(PARSERS_OBJS) \
mercurial-5.5.2/contrib/fuzz/Makefile:119:	  $(LIB_FUZZING_ENGINE) `$(PYTHON_CONFIG) $(PYTHON_CONFIG_FLAGS)` \
mercurial-5.5.2/contrib/fuzz/Makefile-120-	  -o $$OUT/fm1readmarkers_fuzzer
##############################################
mercurial-5.5.2/contrib/tcsh_completion_build.sh-51-
mercurial-5.5.2/contrib/tcsh_completion_build.sh:52:script_name=`basename $0`
mercurial-5.5.2/contrib/tcsh_completion_build.sh-53-
##############################################
mercurial-5.5.2/contrib/perf-utils/discovery-helper.sh-31-printusage () {
mercurial-5.5.2/contrib/perf-utils/discovery-helper.sh:32:     echo "usage: `basename $0` REPO NBHEADS DEPTH [left|right]" >&2
mercurial-5.5.2/contrib/perf-utils/discovery-helper.sh-33-}
##############################################
mercurial-5.5.2/contrib/automation/hgautomation/linux.py-102-
mercurial-5.5.2/contrib/automation/hgautomation/linux.py:103:DISTRO=`grep DISTRIB_ID /etc/lsb-release  | awk -F= '{{print $2}}'`
mercurial-5.5.2/contrib/automation/hgautomation/linux.py-104-DEBIAN_VERSION=`cat /etc/debian_version`
##############################################
mercurial-5.5.2/contrib/packaging/buildrpm-39-
mercurial-5.5.2/contrib/packaging/buildrpm:40:cd "`dirname $0`/../.."
mercurial-5.5.2/contrib/packaging/buildrpm-41-
##############################################
mercurial-5.5.2/contrib/packaging/buildrpm-84-
mercurial-5.5.2/contrib/packaging/buildrpm:85:    DOCUTILSVER=`sed -ne "s/^%global docutilsname docutils-//p" $specfile`
mercurial-5.5.2/contrib/packaging/buildrpm-86-    DOCUTILS_SRCFILE=docutils-$DOCUTILSVER.tar.gz
mercurial-5.5.2/contrib/packaging/buildrpm-87-    [ -f $DOCUTILS_SRCFILE ] || curl -Lo $DOCUTILS_SRCFILE http://downloads.sourceforge.net/project/docutils/docutils/$DOCUTILSVER/$DOCUTILS_SRCFILE
mercurial-5.5.2/contrib/packaging/buildrpm:88:    DOCUTILSMD5=`sed -ne "s/^%global docutilsmd5 //p" $specfile`
mercurial-5.5.2/contrib/packaging/buildrpm-89-    if [ "$DOCUTILSMD5" ]; then
##############################################
mercurial-5.5.2/contrib/packaging/buildrpm-107-if echo $version | grep '+' > /dev/null 2>&1; then
mercurial-5.5.2/contrib/packaging/buildrpm:108:    latesttag="`echo $version | sed -e 's/+.*//'`"
mercurial-5.5.2/contrib/packaging/buildrpm-109-    $HG log -r .:"$latesttag" -fM \
##############################################
mercurial-5.5.2/contrib/packaging/packagelib.sh-19-
mercurial-5.5.2/contrib/packaging/packagelib.sh:20:    hgversion=`LANGUAGE=C "$HG" version | sed -ne 's/.*(version \(.*\))$/\1/p'`
mercurial-5.5.2/contrib/packaging/packagelib.sh-21-
mercurial-5.5.2/contrib/packaging/packagelib.sh-22-    if echo $hgversion | grep + > /dev/null 2>&1 ; then
mercurial-5.5.2/contrib/packaging/packagelib.sh:23:        tmp=`echo $hgversion | cut -d+ -f 2`
mercurial-5.5.2/contrib/packaging/packagelib.sh:24:        hgversion=`echo $hgversion | cut -d+ -f 1`
mercurial-5.5.2/contrib/packaging/packagelib.sh:25:        distance=`echo $tmp | cut -d- -f 1`
mercurial-5.5.2/contrib/packaging/packagelib.sh:26:        node=`echo $tmp | cut -d- -f 2`
mercurial-5.5.2/contrib/packaging/packagelib.sh-27-    else
##############################################
mercurial-5.5.2/contrib/packaging/packagelib.sh-31-    if echo $hgversion | grep -E -- '[0-9]\.[0-9](\.[0-9])?rc' > /dev/null 2>&1; then
mercurial-5.5.2/contrib/packaging/packagelib.sh:32:        version=`echo $hgversion | cut -d'r' -f1`
mercurial-5.5.2/contrib/packaging/packagelib.sh:33:        type="rc`echo $hgversion | cut -d'c' -f2-`"
mercurial-5.5.2/contrib/packaging/packagelib.sh-34-    else
##############################################
mercurial-5.5.2/contrib/Makefile.python-32-	@echo 'To run a Mercurial test on all these Python versions:'
mercurial-5.5.2/contrib/Makefile.python:33:	@echo '  $$ for py in `cd ~/bin && ls $(PYTHONNAME)2.*`; do'
mercurial-5.5.2/contrib/Makefile.python-34-	@echo '    echo $$py; $$py run-tests.py test-http.t; echo; done'
##############################################
mercurial-5.5.2/rust/hg-cpython/src/ref_sharing.rs-31-///
mercurial-5.5.2/rust/hg-cpython/src/ref_sharing.rs:32:/// * `$name` is the identifier to give to the resulting Rust struct.
mercurial-5.5.2/rust/hg-cpython/src/ref_sharing.rs:33:/// * `$leaked` corresponds to `UnsafePyLeaked` in the matching `@shared data`
mercurial-5.5.2/rust/hg-cpython/src/ref_sharing.rs-34-/// declaration.
mercurial-5.5.2/rust/hg-cpython/src/ref_sharing.rs:35:/// * `$iterator_type` is the type of the Rust iterator.
mercurial-5.5.2/rust/hg-cpython/src/ref_sharing.rs:36:/// * `$success_func` is a function for processing the Rust `(key, value)`
mercurial-5.5.2/rust/hg-cpython/src/ref_sharing.rs-37-/// tuple on iteration success, turning it into something Python understands.
mercurial-5.5.2/rust/hg-cpython/src/ref_sharing.rs:38:/// * `$success_func` is the return type of `$success_func`
mercurial-5.5.2/rust/hg-cpython/src/ref_sharing.rs-39-///
##############################################
mercurial-5.5.2/rust/hg-cpython/src/ref_sharing.rs-41-///
mercurial-5.5.2/rust/hg-cpython/src/ref_sharing.rs:42:/// `$success_func` may take a reference, but it's lifetime may be cheated.
mercurial-5.5.2/rust/hg-cpython/src/ref_sharing.rs-43-/// Do not copy it out of the function call.
##############################################
mercurial-5.5.2/rust/chg/src/locator.rs-48-    ///
mercurial-5.5.2/rust/chg/src/locator.rs:49:    /// If no `$CHGSOCKNAME` is specified, the socket directory will be
mercurial-5.5.2/rust/chg/src/locator.rs-50-    /// created as necessary.
##############################################
mercurial-5.5.2/rust/chg/src/locator.rs-252-///
mercurial-5.5.2/rust/chg/src/locator.rs:253:/// If no `$CHGSOCKNAME` is specified, the socket directory will be created
mercurial-5.5.2/rust/chg/src/locator.rs-254-/// as necessary.
##############################################
mercurial-5.5.2/rust/chg/src/locator.rs-267-///
mercurial-5.5.2/rust/chg/src/locator.rs:268:/// 1. `$XDG_RUNTIME_DIR/chg`
mercurial-5.5.2/rust/chg/src/locator.rs:269:/// 2. `$TMPDIR/chg$UID`
mercurial-5.5.2/rust/chg/src/locator.rs:270:/// 3. `/tmp/chg$UID`
mercurial-5.5.2/rust/chg/src/locator.rs-271-pub fn default_server_socket_dir() -> PathBuf {
##############################################
mercurial-5.5.2/relnotes/5.2-18-
mercurial-5.5.2/relnotes/5.2:19: * A shell that supports `$(command)`` syntax for command substitution is now
mercurial-5.5.2/relnotes/5.2-20-   required for running the test suite. The test runner normally uses
mercurial-5.5.2/relnotes/5.2:21:   `sh`, so if that is a shell that doesn't support `$(command)` syntax,
mercurial-5.5.2/relnotes/5.2:22:   you can override it by setting `$HGTEST_SHELL` or by passing it to
mercurial-5.5.2/relnotes/5.2-23-   `run-tests.py --shell <shell>`.
##############################################
mercurial-5.5.2/mercurial/mail.py-413-            raise error.Abort(_(b'invalid local address: %s') % addr)
mercurial-5.5.2/mercurial/mail.py:414:    return email.utils.formataddr((name, encoding.strfromlocal(addr)))
mercurial-5.5.2/mercurial/mail.py-415-
##############################################
mercurial-5.5.2/mercurial/mail.py-421-        return encoding.strfromlocal(address or b'')
mercurial-5.5.2/mercurial/mail.py:422:    name, addr = email.utils.parseaddr(encoding.strfromlocal(address))
mercurial-5.5.2/mercurial/mail.py-423-    return _addressencode(ui, name, addr, charsets)
##############################################
mercurial-5.5.2/mercurial/ui.py-1936-            # exiting non-zero if you make any mistake when running an ex
mercurial-5.5.2/mercurial/ui.py:1937:            # command. Proof: `vi -c ':unknown' -c ':qa'; echo $?` produces 1,
mercurial-5.5.2/mercurial/ui.py-1938-            # while s/vi/vim/ doesn't.
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-44-
mercurial-5.5.2/mercurial/helptext/config.txt:45:  - ``$HOME/.hgrc`` (on Unix, Plan9)
mercurial-5.5.2/mercurial/helptext/config.txt-46-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-57-  - ``<repo>/.hg/hgrc`` (per-repository)
mercurial-5.5.2/mercurial/helptext/config.txt:58:  - ``$HOME/.hgrc`` (per-user)
mercurial-5.5.2/mercurial/helptext/config.txt:59:  - ``${XDG_CONFIG_HOME:-$HOME/.config}/hg/hgrc`` (per-user)
mercurial-5.5.2/mercurial/helptext/config.txt-60-  - ``<install-root>/etc/mercurial/hgrc`` (per-installation)
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-92-  - ``<repo>/.hg/hgrc`` (per-repository)
mercurial-5.5.2/mercurial/helptext/config.txt:93:  - ``$home/lib/hgrc`` (per-user)
mercurial-5.5.2/mercurial/helptext/config.txt-94-  - ``<install-root>/lib/mercurial/hgrc`` (per-installation)
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-245-commands (or aliases), optionally including arguments. Positional
mercurial-5.5.2/mercurial/helptext/config.txt:246:arguments in the form of ``$1``, ``$2``, etc. in the alias definition
mercurial-5.5.2/mercurial/helptext/config.txt-247-are expanded by Mercurial before execution. Positional arguments not
mercurial-5.5.2/mercurial/helptext/config.txt:248:already used by ``$N`` in the definition are put at the end of the
mercurial-5.5.2/mercurial/helptext/config.txt-249-command to be executed.
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-283-
mercurial-5.5.2/mercurial/helptext/config.txt:284:Positional arguments like ``$1``, ``$2``, etc. in the alias definition
mercurial-5.5.2/mercurial/helptext/config.txt-285-expand to the command arguments. Unmatched arguments are
mercurial-5.5.2/mercurial/helptext/config.txt:286:removed. ``$0`` expands to the alias name and ``$@`` expands to all
mercurial-5.5.2/mercurial/helptext/config.txt:287:arguments separated by a space. ``"$@"`` (with quotes) expands to all
mercurial-5.5.2/mercurial/helptext/config.txt-288-arguments quoted individually and separated by a space. These expansions
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-290-
mercurial-5.5.2/mercurial/helptext/config.txt:291:Shell aliases are executed in an environment where ``$HG`` expands to
mercurial-5.5.2/mercurial/helptext/config.txt-292-the path of the Mercurial that was used to execute the alias. This is
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-294-alias, as was done above for the purge alias. In addition,
mercurial-5.5.2/mercurial/helptext/config.txt:295:``$HG_ARGS`` expands to the arguments given to Mercurial. In the ``hg
mercurial-5.5.2/mercurial/helptext/config.txt:296:echo foo`` call above, ``$HG_ARGS`` would expand to ``echo foo``.
mercurial-5.5.2/mercurial/helptext/config.txt-297-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-383-    be prompted for it. Environment variables are expanded in the
mercurial-5.5.2/mercurial/helptext/config.txt:384:    username letting you do ``foo.username = $USER``. If the URI
mercurial-5.5.2/mercurial/helptext/config.txt-385-    includes a username, only ``[auth]`` entries with a matching
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-794-    first character set to which conversion from local encoding
mercurial-5.5.2/mercurial/helptext/config.txt:795:    (``$HGENCODING``, ``ui.fallbackencoding``) succeeds. If correct
mercurial-5.5.2/mercurial/helptext/config.txt-796-    conversion fails, the text in question is sent as is.
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-803-    3. ``ui.fallbackencoding``: if not in email.charsets
mercurial-5.5.2/mercurial/helptext/config.txt:804:    4. ``$HGENCODING``: if not in email.charsets
mercurial-5.5.2/mercurial/helptext/config.txt-805-    5. ``utf-8``: always last, regardless of settings
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-977-additional information. For each hook below, the environment variables
mercurial-5.5.2/mercurial/helptext/config.txt:978:it is passed are listed with names in the form ``$HG_foo``. The
mercurial-5.5.2/mercurial/helptext/config.txt:979:``$HG_HOOKTYPE`` and ``$HG_HOOKNAME`` variables are set for all hooks.
mercurial-5.5.2/mercurial/helptext/config.txt-980-They contain the type of hook which triggered the run and the full name
mercurial-5.5.2/mercurial/helptext/config.txt-981-of the hook in the config, respectively. In the example above, this will
mercurial-5.5.2/mercurial/helptext/config.txt:982:be ``$HG_HOOKTYPE=incoming`` and ``$HG_HOOKNAME=incoming.email``.
mercurial-5.5.2/mercurial/helptext/config.txt-983-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-985-
mercurial-5.5.2/mercurial/helptext/config.txt:986:  Some basic Unix syntax can be enabled for portability, including ``$VAR``
mercurial-5.5.2/mercurial/helptext/config.txt:987:  and ``${VAR}`` style variables.  A ``~`` followed by ``\`` or ``/`` will
mercurial-5.5.2/mercurial/helptext/config.txt-988-  be expanded to ``%USERPROFILE%`` to simulate a subset of tilde expansion
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1002-  Run after a changegroup has been added via push, pull or unbundle.  The ID of
mercurial-5.5.2/mercurial/helptext/config.txt:1003:  the first new changeset is in ``$HG_NODE`` and last is in ``$HG_NODE_LAST``.
mercurial-5.5.2/mercurial/helptext/config.txt:1004:  The URL from which changes came is in ``$HG_URL``.
mercurial-5.5.2/mercurial/helptext/config.txt-1005-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1007-  Run after a changeset has been created in the local repository. The ID
mercurial-5.5.2/mercurial/helptext/config.txt:1008:  of the newly created changeset is in ``$HG_NODE``. Parent changeset
mercurial-5.5.2/mercurial/helptext/config.txt:1009:  IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
mercurial-5.5.2/mercurial/helptext/config.txt-1010-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1013-  the local repository. The ID of the newly arrived changeset is in
mercurial-5.5.2/mercurial/helptext/config.txt:1014:  ``$HG_NODE``. The URL that was source of the changes is in ``$HG_URL``.
mercurial-5.5.2/mercurial/helptext/config.txt-1015-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1017-  Run after sending changes from the local repository to another. The ID of
mercurial-5.5.2/mercurial/helptext/config.txt:1018:  first changeset sent is in ``$HG_NODE``. The source of operation is in
mercurial-5.5.2/mercurial/helptext/config.txt:1019:  ``$HG_SOURCE``. Also see :hg:`help config.hooks.preoutgoing`.
mercurial-5.5.2/mercurial/helptext/config.txt-1020-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1022-  Run after successful invocations of the associated command. The
mercurial-5.5.2/mercurial/helptext/config.txt:1023:  contents of the command line are passed as ``$HG_ARGS`` and the result
mercurial-5.5.2/mercurial/helptext/config.txt:1024:  code in ``$HG_RESULT``. Parsed command line arguments are passed as
mercurial-5.5.2/mercurial/helptext/config.txt:1025:  ``$HG_PATS`` and ``$HG_OPTS``. These contain string representations of
mercurial-5.5.2/mercurial/helptext/config.txt:1026:  the python data internally passed to <command>. ``$HG_OPTS`` is a
mercurial-5.5.2/mercurial/helptext/config.txt-1027-  dictionary of options (with unspecified options set to their defaults).
mercurial-5.5.2/mercurial/helptext/config.txt:1028:  ``$HG_PATS`` is a list of arguments. Hook failure is ignored.
mercurial-5.5.2/mercurial/helptext/config.txt-1029-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1031-  Run after a failed invocation of an associated command. The contents
mercurial-5.5.2/mercurial/helptext/config.txt:1032:  of the command line are passed as ``$HG_ARGS``. Parsed command line
mercurial-5.5.2/mercurial/helptext/config.txt:1033:  arguments are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain
mercurial-5.5.2/mercurial/helptext/config.txt-1034-  string representations of the python data internally passed to
mercurial-5.5.2/mercurial/helptext/config.txt:1035:  <command>. ``$HG_OPTS`` is a dictionary of options (with unspecified
mercurial-5.5.2/mercurial/helptext/config.txt:1036:  options set to their defaults). ``$HG_PATS`` is a list of arguments.
mercurial-5.5.2/mercurial/helptext/config.txt-1037-  Hook failure is ignored.
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1040-  Run before executing the associated command. The contents of the
mercurial-5.5.2/mercurial/helptext/config.txt:1041:  command line are passed as ``$HG_ARGS``. Parsed command line arguments
mercurial-5.5.2/mercurial/helptext/config.txt:1042:  are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain string
mercurial-5.5.2/mercurial/helptext/config.txt:1043:  representations of the data internally passed to <command>. ``$HG_OPTS``
mercurial-5.5.2/mercurial/helptext/config.txt-1044-  is a dictionary of options (with unspecified options set to their
mercurial-5.5.2/mercurial/helptext/config.txt:1045:  defaults). ``$HG_PATS`` is a list of arguments. If the hook returns
mercurial-5.5.2/mercurial/helptext/config.txt-1046-  failure, the command doesn't execute and Mercurial returns the failure
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1052-  cause the push, pull or unbundle to fail. The URL from which changes
mercurial-5.5.2/mercurial/helptext/config.txt:1053:  will come is in ``$HG_URL``.
mercurial-5.5.2/mercurial/helptext/config.txt-1054-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1057-  commit to proceed. A non-zero status will cause the commit to fail.
mercurial-5.5.2/mercurial/helptext/config.txt:1058:  Parent changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
mercurial-5.5.2/mercurial/helptext/config.txt-1059-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1062-  repository. A non-zero status will cause failure. The key namespace is
mercurial-5.5.2/mercurial/helptext/config.txt:1063:  in ``$HG_NAMESPACE``.
mercurial-5.5.2/mercurial/helptext/config.txt-1064-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1070-  since you can just copy files instead. The source of operation is in
mercurial-5.5.2/mercurial/helptext/config.txt:1071:  ``$HG_SOURCE``. If "serve", the operation is happening on behalf of a remote
mercurial-5.5.2/mercurial/helptext/config.txt-1072-  SSH or HTTP repository. If "push", "pull" or "bundle", the operation
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1077-  repository. A non-zero status will cause the key to be rejected. The
mercurial-5.5.2/mercurial/helptext/config.txt:1078:  key namespace is in ``$HG_NAMESPACE``, the key is in ``$HG_KEY``,
mercurial-5.5.2/mercurial/helptext/config.txt:1079:  the old value (if any) is in ``$HG_OLD``, and the new value is in
mercurial-5.5.2/mercurial/helptext/config.txt:1080:  ``$HG_NEW``.
mercurial-5.5.2/mercurial/helptext/config.txt-1081-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1084-  created. A non-zero status will cause the tag to fail. The ID of the
mercurial-5.5.2/mercurial/helptext/config.txt:1085:  changeset to tag is in ``$HG_NODE``. The name of tag is in ``$HG_TAG``. The
mercurial-5.5.2/mercurial/helptext/config.txt:1086:  tag is local if ``$HG_LOCAL=1``, or in the repository if ``$HG_LOCAL=0``.
mercurial-5.5.2/mercurial/helptext/config.txt-1087-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1089-  Run before any new repository transaction is open. The reason for the
mercurial-5.5.2/mercurial/helptext/config.txt:1090:  transaction will be in ``$HG_TXNNAME``, and a unique identifier for the
mercurial-5.5.2/mercurial/helptext/config.txt-1091-  transaction will be in ``HG_TXNID``. A non-zero status will prevent the
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1098-  status will cause the transaction to be rolled back. The reason for the
mercurial-5.5.2/mercurial/helptext/config.txt:1099:  transaction opening will be in ``$HG_TXNNAME``, and a unique identifier for
mercurial-5.5.2/mercurial/helptext/config.txt-1100-  the transaction will be in ``HG_TXNID``. The rest of the available data will
mercurial-5.5.2/mercurial/helptext/config.txt:1101:  vary according the transaction type. New changesets will add ``$HG_NODE``
mercurial-5.5.2/mercurial/helptext/config.txt:1102:  (the ID of the first added changeset), ``$HG_NODE_LAST`` (the ID of the last
mercurial-5.5.2/mercurial/helptext/config.txt:1103:  added changeset), ``$HG_URL`` and ``$HG_SOURCE`` variables.  Bookmark and
mercurial-5.5.2/mercurial/helptext/config.txt-1104-  phase changes will set ``HG_BOOKMARK_MOVED`` and ``HG_PHASES_MOVED`` to ``1``
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1111-  proceed. A non-zero status will cause the transaction to be rolled back.
mercurial-5.5.2/mercurial/helptext/config.txt:1112:  The name of the bookmark will be available in ``$HG_BOOKMARK``, the new
mercurial-5.5.2/mercurial/helptext/config.txt:1113:  bookmark location will be available in ``$HG_NODE`` while the previous
mercurial-5.5.2/mercurial/helptext/config.txt:1114:  location will be available in ``$HG_OLDNODE``. In case of a bookmark
mercurial-5.5.2/mercurial/helptext/config.txt:1115:  creation ``$HG_OLDNODE`` will be empty. In case of deletion ``$HG_NODE``
mercurial-5.5.2/mercurial/helptext/config.txt-1116-  will be empty.
mercurial-5.5.2/mercurial/helptext/config.txt-1117-  In addition, the reason for the transaction opening will be in
mercurial-5.5.2/mercurial/helptext/config.txt:1118:  ``$HG_TXNNAME``, and a unique identifier for the transaction will be in
mercurial-5.5.2/mercurial/helptext/config.txt-1119-  ``HG_TXNID``.
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1126-  multiple times, once for each revision affected by a phase change.
mercurial-5.5.2/mercurial/helptext/config.txt:1127:  The affected node is available in ``$HG_NODE``, the phase in ``$HG_PHASE``
mercurial-5.5.2/mercurial/helptext/config.txt:1128:  while the previous ``$HG_OLDPHASE``. In case of new node, ``$HG_OLDPHASE``
mercurial-5.5.2/mercurial/helptext/config.txt-1129-  will be empty.  In addition, the reason for the transaction opening will be in
mercurial-5.5.2/mercurial/helptext/config.txt:1130:  ``$HG_TXNNAME``, and a unique identifier for the transaction will be in
mercurial-5.5.2/mercurial/helptext/config.txt-1131-  ``HG_TXNID``. The hook is also run for newly added revisions. In this case
mercurial-5.5.2/mercurial/helptext/config.txt:1132:  the ``$HG_OLDPHASE`` entry will be empty.
mercurial-5.5.2/mercurial/helptext/config.txt-1133-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1159-  program. This allows validation of incoming changes before accepting them.
mercurial-5.5.2/mercurial/helptext/config.txt:1160:  The ID of the first new changeset is in ``$HG_NODE`` and last is in
mercurial-5.5.2/mercurial/helptext/config.txt:1161:  ``$HG_NODE_LAST``. Exit status 0 allows the transaction to commit. A non-zero
mercurial-5.5.2/mercurial/helptext/config.txt-1162-  status will cause the transaction to be rolled back, and the push, pull or
mercurial-5.5.2/mercurial/helptext/config.txt:1163:  unbundle will fail. The URL that was the source of changes is in ``$HG_URL``.
mercurial-5.5.2/mercurial/helptext/config.txt-1164-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1169-  commit to proceed. A non-zero status will cause the transaction to
mercurial-5.5.2/mercurial/helptext/config.txt:1170:  be rolled back. The ID of the new changeset is in ``$HG_NODE``. The parent
mercurial-5.5.2/mercurial/helptext/config.txt:1171:  changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``.
mercurial-5.5.2/mercurial/helptext/config.txt-1172-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1175-  the update to proceed. A non-zero status will prevent the update.
mercurial-5.5.2/mercurial/helptext/config.txt:1176:  The changeset ID of first new parent is in ``$HG_PARENT1``. If updating to a
mercurial-5.5.2/mercurial/helptext/config.txt:1177:  merge, the ID of second new parent is in ``$HG_PARENT2``.
mercurial-5.5.2/mercurial/helptext/config.txt-1178-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1180-  Run after listing pushkeys (like bookmarks) in the repository. The
mercurial-5.5.2/mercurial/helptext/config.txt:1181:  key namespace is in ``$HG_NAMESPACE``. ``$HG_VALUES`` is a
mercurial-5.5.2/mercurial/helptext/config.txt-1182-  dictionary containing the keys and values.
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1185-  Run after a pushkey (like a bookmark) is added to the
mercurial-5.5.2/mercurial/helptext/config.txt:1186:  repository. The key namespace is in ``$HG_NAMESPACE``, the key is in
mercurial-5.5.2/mercurial/helptext/config.txt:1187:  ``$HG_KEY``, the old value (if any) is in ``$HG_OLD``, and the new
mercurial-5.5.2/mercurial/helptext/config.txt:1188:  value is in ``$HG_NEW``.
mercurial-5.5.2/mercurial/helptext/config.txt-1189-
mercurial-5.5.2/mercurial/helptext/config.txt-1190-``tag``
mercurial-5.5.2/mercurial/helptext/config.txt:1191:  Run after a tag is created. The ID of the tagged changeset is in ``$HG_NODE``.
mercurial-5.5.2/mercurial/helptext/config.txt:1192:  The name of tag is in ``$HG_TAG``. The tag is local if ``$HG_LOCAL=1``, or in
mercurial-5.5.2/mercurial/helptext/config.txt:1193:  the repository if ``$HG_LOCAL=0``.
mercurial-5.5.2/mercurial/helptext/config.txt-1194-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1196-  Run after updating the working directory. The changeset ID of first
mercurial-5.5.2/mercurial/helptext/config.txt:1197:  new parent is in ``$HG_PARENT1``. If updating to a merge, the ID of second new
mercurial-5.5.2/mercurial/helptext/config.txt:1198:  parent is in ``$HG_PARENT2``. If the update succeeded, ``$HG_ERROR=0``. If the
mercurial-5.5.2/mercurial/helptext/config.txt:1199:  update failed (e.g. because conflicts were not resolved), ``$HG_ERROR=1``.
mercurial-5.5.2/mercurial/helptext/config.txt-1200-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1211-   Environment variables with empty values may not be passed to
mercurial-5.5.2/mercurial/helptext/config.txt:1212:   hooks on platforms such as Windows. As an example, ``$HG_PARENT2``
mercurial-5.5.2/mercurial/helptext/config.txt-1213-   will have an empty value under Unix-like platforms for non-merge
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1495-  files being merged as well as the output file through these
mercurial-5.5.2/mercurial/helptext/config.txt:1496:  variables: ``$base``, ``$local``, ``$other``, ``$output``.
mercurial-5.5.2/mercurial/helptext/config.txt-1497-
mercurial-5.5.2/mercurial/helptext/config.txt:1498:  The meaning of ``$local`` and ``$other`` can vary depending on which action is
mercurial-5.5.2/mercurial/helptext/config.txt:1499:  being performed. During an update or merge, ``$local`` represents the original
mercurial-5.5.2/mercurial/helptext/config.txt:1500:  state of the file, while ``$other`` represents the commit you are updating to or
mercurial-5.5.2/mercurial/helptext/config.txt:1501:  the commit you are merging with. During a rebase, ``$local`` represents the
mercurial-5.5.2/mercurial/helptext/config.txt:1502:  destination of the rebase, and ``$other`` represents the commit being rebased.
mercurial-5.5.2/mercurial/helptext/config.txt-1503-
mercurial-5.5.2/mercurial/helptext/config.txt-1504-  Some operations define custom labels to assist with identifying the revisions,
mercurial-5.5.2/mercurial/helptext/config.txt:1505:  accessible via ``$labellocal``, ``$labelother``, and ``$labelbase``. If custom
mercurial-5.5.2/mercurial/helptext/config.txt-1506-  labels are not available, these will be ``local``, ``other``, and ``base``,
mercurial-5.5.2/mercurial/helptext/config.txt-1507-  respectively.
mercurial-5.5.2/mercurial/helptext/config.txt:1508:  (default: ``$local $base $other``)
mercurial-5.5.2/mercurial/helptext/config.txt-1509-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1543-``mergemarkers``
mercurial-5.5.2/mercurial/helptext/config.txt:1544:  Controls whether the labels passed via ``$labellocal``, ``$labelother``, and
mercurial-5.5.2/mercurial/helptext/config.txt:1545:  ``$labelbase`` are ``detailed`` (respecting ``mergemarkertemplate``) or
mercurial-5.5.2/mercurial/helptext/config.txt-1546-  ``basic``. If ``premerge`` is ``keep`` or ``keep-merge3``, the conflict
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-1552-  This setting can be used to override ``mergemarkertemplate`` from the ``[ui]``
mercurial-5.5.2/mercurial/helptext/config.txt:1553:  section on a per-tool basis; this applies to the ``$label``-prefixed variables
mercurial-5.5.2/mercurial/helptext/config.txt-1554-  and to the conflict markers that are generated if ``premerge`` is ``keep` or
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-2237-group with name ``*``. These settings must be placed in an
mercurial-5.5.2/mercurial/helptext/config.txt:2238:*already-trusted file* to take effect, such as ``$HOME/.hgrc`` of the
mercurial-5.5.2/mercurial/helptext/config.txt-2239-user or service running Mercurial.
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-2260-    Whether to prompt for a username when committing. If True, and
mercurial-5.5.2/mercurial/helptext/config.txt:2261:    neither ``$HGUSER`` nor ``$EMAIL`` has been specified, then the user will
mercurial-5.5.2/mercurial/helptext/config.txt-2262-    be prompted to enter a username. If no username is entered, the
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-2329-``editor``
mercurial-5.5.2/mercurial/helptext/config.txt:2330:    The editor to use during a commit. (default: ``$EDITOR`` or ``vi``)
mercurial-5.5.2/mercurial/helptext/config.txt-2331-
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-2554-
mercurial-5.5.2/mercurial/helptext/config.txt:2555:    (default: ``$EMAIL`` or ``username@hostname``. If the username in
mercurial-5.5.2/mercurial/helptext/config.txt-2556-    hgrc is empty, e.g. if the system admin set ``username =`` in the
##############################################
mercurial-5.5.2/mercurial/helptext/config.txt-2691-    Name or email address of the person in charge of the repository.
mercurial-5.5.2/mercurial/helptext/config.txt:2692:    (default: ui.username or ``$EMAIL`` or "unknown" if unset or empty)
mercurial-5.5.2/mercurial/helptext/config.txt-2693-
##############################################
mercurial-5.5.2/mercurial/helptext/hg.1.txt-52-
mercurial-5.5.2/mercurial/helptext/hg.1.txt:53:``/etc/mercurial/hgrc``, ``$HOME/.hgrc``, ``.hg/hgrc``
mercurial-5.5.2/mercurial/helptext/hg.1.txt-54-    This file contains defaults and configuration. Values in
mercurial-5.5.2/mercurial/helptext/hg.1.txt:55:    ``.hg/hgrc`` override those in ``$HOME/.hgrc``, and these override
mercurial-5.5.2/mercurial/helptext/hg.1.txt-56-    settings made in the global ``/etc/mercurial/hgrc`` configuration.
##############################################
mercurial-5.5.2/hgeditor-45-    MD5=$(which md5 2>/dev/null)
mercurial-5.5.2/hgeditor:46:[ -x "${MD5}" ] && CHECKSUM=`${MD5} "$HGTMP/msg"`
mercurial-5.5.2/hgeditor-47-if [ -s "$HGTMP/diff" ]; then
##############################################
mercurial-5.5.2/i18n/pt_BR.po-23632-
mercurial-5.5.2/i18n/pt_BR.po:23633:msgid "  - ``$HOME/.hgrc`` (on Unix, Plan9)"
mercurial-5.5.2/i18n/pt_BR.po:23634:msgstr "  - ``$HOME/.hgrc`` (em Unix, Plan9)"
mercurial-5.5.2/i18n/pt_BR.po-23635-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-23654-"  - ``<repo>/.hg/hgrc`` (per-repository)\n"
mercurial-5.5.2/i18n/pt_BR.po:23655:"  - ``$HOME/.hgrc`` (per-user)\n"
mercurial-5.5.2/i18n/pt_BR.po:23656:"  - ``${XDG_CONFIG_HOME:-$HOME/.config}/hg/hgrc`` (per-user)\n"
mercurial-5.5.2/i18n/pt_BR.po-23657-"  - ``<install-root>/etc/mercurial/hgrc`` (per-installation)\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-23663-"  - ``<repo>/.hg/hgrc`` (por repositório)\n"
mercurial-5.5.2/i18n/pt_BR.po:23664:"  - ``$HOME/.hgrc`` (por usuário)\n"
mercurial-5.5.2/i18n/pt_BR.po:23665:"  - ``${XDG_CONFIG_HOME:-$HOME/.config}/hg/hgrc`` (por usuário)\n"
mercurial-5.5.2/i18n/pt_BR.po-23666-"  - ``<install-root>/etc/mercurial/hgrc`` (por instalação)\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-23710-"  - ``<repo>/.hg/hgrc`` (per-repository)\n"
mercurial-5.5.2/i18n/pt_BR.po:23711:"  - ``$home/lib/hgrc`` (per-user)\n"
mercurial-5.5.2/i18n/pt_BR.po-23712-"  - ``<install-root>/lib/mercurial/hgrc`` (per-installation)\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-23718-"  - ``<repo>/.hg/hgrc`` (por repositório)\n"
mercurial-5.5.2/i18n/pt_BR.po:23719:"  - ``$home/lib/hgrc`` (por usuário)\n"
mercurial-5.5.2/i18n/pt_BR.po-23720-"  - ``<install-root>/lib/mercurial/hgrc`` (por instalação)\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-24045-"commands (or aliases), optionally including arguments. Positional\n"
mercurial-5.5.2/i18n/pt_BR.po:24046:"arguments in the form of ``$1``, ``$2``, etc. in the alias definition\n"
mercurial-5.5.2/i18n/pt_BR.po-24047-"are expanded by Mercurial before execution. Positional arguments not\n"
mercurial-5.5.2/i18n/pt_BR.po:24048:"already used by ``$N`` in the definition are put at the end of the\n"
mercurial-5.5.2/i18n/pt_BR.po-24049-"command to be executed."
##############################################
mercurial-5.5.2/i18n/pt_BR.po-24052-"(ou outros apelidos), opcionalmente incluindo argumentos. Argumentos\n"
mercurial-5.5.2/i18n/pt_BR.po:24053:"posicionais na forma de ``$1``, ``$2``, etc na definição do apelido\n"
mercurial-5.5.2/i18n/pt_BR.po-24054-"são expandidos pelo Mercurial antes da execução. Argumentos posicionais\n"
mercurial-5.5.2/i18n/pt_BR.po:24055:"não utilizados como ``$N`` na definição são colocados ao final do\n"
mercurial-5.5.2/i18n/pt_BR.po-24056-"comando a ser executado."
##############################################
mercurial-5.5.2/i18n/pt_BR.po-24119-msgid ""
mercurial-5.5.2/i18n/pt_BR.po:24120:"Positional arguments like ``$1``, ``$2``, etc. in the alias definition\n"
mercurial-5.5.2/i18n/pt_BR.po-24121-"expand to the command arguments. Unmatched arguments are\n"
mercurial-5.5.2/i18n/pt_BR.po:24122:"removed. ``$0`` expands to the alias name and ``$@`` expands to all\n"
mercurial-5.5.2/i18n/pt_BR.po:24123:"arguments separated by a space. ``\"$@\"`` (with quotes) expands to all\n"
mercurial-5.5.2/i18n/pt_BR.po-24124-"arguments quoted individually and separated by a space. These expansions\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-24126-msgstr ""
mercurial-5.5.2/i18n/pt_BR.po:24127:"Argumentos posicionais como ``$1``, ``$2``, etc. na definição\n"
mercurial-5.5.2/i18n/pt_BR.po-24128-"do apelido expandem para argumentos da linha de comando. Argumentos\n"
mercurial-5.5.2/i18n/pt_BR.po:24129:"em excesso são removidos. ``$0`` expande para o nome do apelido e\n"
mercurial-5.5.2/i18n/pt_BR.po:24130:"``$@`` expande para todos os argumentos, separados por espaços.\n"
mercurial-5.5.2/i18n/pt_BR.po:24131:"``\"$@\"`` (com aspas) expande para todos os argumentos,\n"
mercurial-5.5.2/i18n/pt_BR.po-24132-"com aspas individuais e separados por um espaço.\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-24136-msgid ""
mercurial-5.5.2/i18n/pt_BR.po:24137:"Shell aliases are executed in an environment where ``$HG`` expands to\n"
mercurial-5.5.2/i18n/pt_BR.po-24138-"the path of the Mercurial that was used to execute the alias. This is\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-24140-"alias, as was done above for the purge alias. In addition,\n"
mercurial-5.5.2/i18n/pt_BR.po:24141:"``$HG_ARGS`` expands to the arguments given to Mercurial. In the ``hg\n"
mercurial-5.5.2/i18n/pt_BR.po:24142:"echo foo`` call above, ``$HG_ARGS`` would expand to ``echo foo``."
mercurial-5.5.2/i18n/pt_BR.po-24143-msgstr ""
mercurial-5.5.2/i18n/pt_BR.po:24144:"Apelidos de shell são executados em um ambiente no qual ``$HG``\n"
mercurial-5.5.2/i18n/pt_BR.po-24145-"expande para o caminho do Mercurial que foi usado para executar o\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-24147-"Mercurial em um apelido de shell, como foi feito acima para o\n"
mercurial-5.5.2/i18n/pt_BR.po:24148:"apelido purge. Adicionalmente, ``$HG_ARGS`` expande para os\n"
mercurial-5.5.2/i18n/pt_BR.po-24149-"argumentos passados para o Mercurial. Na chamada ``hg echo foo``\n"
mercurial-5.5.2/i18n/pt_BR.po:24150:"acima, ``$HG_ARGS`` expandiria para ``echo foo``."
mercurial-5.5.2/i18n/pt_BR.po-24151-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-24335-"    be prompted for it. Environment variables are expanded in the\n"
mercurial-5.5.2/i18n/pt_BR.po:24336:"    username letting you do ``foo.username = $USER``. If the URI\n"
mercurial-5.5.2/i18n/pt_BR.po-24337-"    includes a username, only ``[auth]`` entries with a matching\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-24344-"    fornecê-lo. Variáveis de ambiente são expandidas no nome de usuário,\n"
mercurial-5.5.2/i18n/pt_BR.po:24345:"    de forma a suportar ``foo.username = $USER``.\n"
mercurial-5.5.2/i18n/pt_BR.po-24346-"    Se a URI incluir um nome de usuário, só serão consideradas as\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25083-"    first character set to which conversion from local encoding\n"
mercurial-5.5.2/i18n/pt_BR.po:25084:"    (``$HGENCODING``, ``ui.fallbackencoding``) succeeds. If correct\n"
mercurial-5.5.2/i18n/pt_BR.po-25085-"    conversion fails, the text in question is sent as is.\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25092-"    no primeiro conjunto de caracteres para o qual a conversão da\n"
mercurial-5.5.2/i18n/pt_BR.po:25093:"    codificação local (``$HGENCODING``, ``ui.fallbackencoding``) seja\n"
mercurial-5.5.2/i18n/pt_BR.po-25094-"    realizada com sucesso. Se a conversão correta falhar, o texto em\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25103-"    3. ``ui.fallbackencoding``: if not in email.charsets\n"
mercurial-5.5.2/i18n/pt_BR.po:25104:"    4. ``$HGENCODING``: if not in email.charsets\n"
mercurial-5.5.2/i18n/pt_BR.po-25105-"    5. ``utf-8``: always last, regardless of settings"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25109-"    3. ``ui.fallbackencoding``: se não estiver em email.charsets\n"
mercurial-5.5.2/i18n/pt_BR.po:25110:"    4. ``$HGENCODING``: se não estiver em email.charsets\n"
mercurial-5.5.2/i18n/pt_BR.po-25111-"    5. ``utf-8``: sempre por último, independente de configuração"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25383-"additional information. For each hook below, the environment variables\n"
mercurial-5.5.2/i18n/pt_BR.po:25384:"it is passed are listed with names in the form ``$HG_foo``. The\n"
mercurial-5.5.2/i18n/pt_BR.po:25385:"``$HG_HOOKTYPE`` and ``$HG_HOOKNAME`` variables are set for all hooks.\n"
mercurial-5.5.2/i18n/pt_BR.po-25386-"They contain the type of hook which triggered the run and the full name\n"
mercurial-5.5.2/i18n/pt_BR.po-25387-"of the hook in the config, respectively. In the example above, this will\n"
mercurial-5.5.2/i18n/pt_BR.po:25388:"be ``$HG_HOOKTYPE=incoming`` and ``$HG_HOOKNAME=incoming.email``."
mercurial-5.5.2/i18n/pt_BR.po-25389-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25391-"informações adicionais. Para cada gancho abaixo, as variáveis de\n"
mercurial-5.5.2/i18n/pt_BR.po:25392:"ambiente recebidas são listadas com nomes com a forma ``$HG_foo``.\n"
mercurial-5.5.2/i18n/pt_BR.po:25393:"As variáveis ``$HG_HOOKTYPE`` e ``$HG_HOOKNAME`` são definidas\n"
mercurial-5.5.2/i18n/pt_BR.po-25394-"para todos os ganchos.\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25396-"completo do hook na configuração.\n"
mercurial-5.5.2/i18n/pt_BR.po:25397:"No exemplo acima, serão ``$HG_HOOKTYPE=incoming`` e\n"
mercurial-5.5.2/i18n/pt_BR.po:25398:"``$HG_HOOKNAME=incoming.email``."
mercurial-5.5.2/i18n/pt_BR.po-25399-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25402-"  Run after a changegroup has been added via push, pull or unbundle.  The ID of\n"
mercurial-5.5.2/i18n/pt_BR.po:25403:"  the first new changeset is in ``$HG_NODE`` and last is in ``$HG_NODE_LAST``.\n"
mercurial-5.5.2/i18n/pt_BR.po:25404:"  The URL from which changes came is in ``$HG_URL``."
mercurial-5.5.2/i18n/pt_BR.po-25405-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25408-"  ou unbundle.\n"
mercurial-5.5.2/i18n/pt_BR.po:25409:"  O ID da primeira revisão nova é passado em ``$HG_NODE``,\n"
mercurial-5.5.2/i18n/pt_BR.po:25410:"  e o da última em ``$HG_NODE_LAST``.\n"
mercurial-5.5.2/i18n/pt_BR.po:25411:"  A URL de origem das mudanças é passada em ``$HG_URL``."
mercurial-5.5.2/i18n/pt_BR.po-25412-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25415-"  Run after a changeset has been created in the local repository. The ID\n"
mercurial-5.5.2/i18n/pt_BR.po:25416:"  of the newly created changeset is in ``$HG_NODE``. Parent changeset\n"
mercurial-5.5.2/i18n/pt_BR.po:25417:"  IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/pt_BR.po-25418-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25420-"  Executado após uma revisão ser criada no repositório local.\n"
mercurial-5.5.2/i18n/pt_BR.po:25421:"  O ID da nova revisão é passado em ``$HG_NODE``.\n"
mercurial-5.5.2/i18n/pt_BR.po:25422:"  Os IDs das revisões pais são passados em ``$HG_PARENT1`` e ``$HG_PARENT2``."
mercurial-5.5.2/i18n/pt_BR.po-25423-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25427-"  the local repository. The ID of the newly arrived changeset is in\n"
mercurial-5.5.2/i18n/pt_BR.po:25428:"  ``$HG_NODE``. The URL that was source of the changes is in ``$HG_URL``."
mercurial-5.5.2/i18n/pt_BR.po-25429-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25432-"  uma operação pull, push ou unbundle.\n"
mercurial-5.5.2/i18n/pt_BR.po:25433:"  O ID da nova revisão é passado em ``$HG_NODE``.\n"
mercurial-5.5.2/i18n/pt_BR.po:25434:"  A URL de origem da revisão é passada em ``$HG_URL``."
mercurial-5.5.2/i18n/pt_BR.po-25435-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25438-"  Run after sending changes from the local repository to another. The ID of\n"
mercurial-5.5.2/i18n/pt_BR.po:25439:"  first changeset sent is in ``$HG_NODE``. The source of operation is in\n"
mercurial-5.5.2/i18n/pt_BR.po:25440:"  ``$HG_SOURCE``. Also see :hg:`help config.hooks.preoutgoing`."
mercurial-5.5.2/i18n/pt_BR.po-25441-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25443-"  Executado após o envio de mudanças do repositório local para algum outro.\n"
mercurial-5.5.2/i18n/pt_BR.po:25444:"  O ID da primeira revisão enviada é passado em ``$HG_NODE``.\n"
mercurial-5.5.2/i18n/pt_BR.po:25445:"  A origem da operação é passada em ``$HG_SOURCE``. Veja também\n"
mercurial-5.5.2/i18n/pt_BR.po-25446-"  hg:`help config.hooks.preoutgoing`."
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25450-"  Run after successful invocations of the associated command. The\n"
mercurial-5.5.2/i18n/pt_BR.po:25451:"  contents of the command line are passed as ``$HG_ARGS`` and the result\n"
mercurial-5.5.2/i18n/pt_BR.po:25452:"  code in ``$HG_RESULT``. Parsed command line arguments are passed as\n"
mercurial-5.5.2/i18n/pt_BR.po:25453:"  ``$HG_PATS`` and ``$HG_OPTS``. These contain string representations of\n"
mercurial-5.5.2/i18n/pt_BR.po:25454:"  the python data internally passed to <command>. ``$HG_OPTS`` is a\n"
mercurial-5.5.2/i18n/pt_BR.po-25455-"  dictionary of options (with unspecified options set to their defaults).\n"
mercurial-5.5.2/i18n/pt_BR.po:25456:"  ``$HG_PATS`` is a list of arguments. Hook failure is ignored."
mercurial-5.5.2/i18n/pt_BR.po-25457-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25459-"  Executado após invocações do comando associado realizadas com sucesso.\n"
mercurial-5.5.2/i18n/pt_BR.po:25460:"  O conteúdo da linha de comando é passado em ``$HG_ARGS``, e o código de\n"
mercurial-5.5.2/i18n/pt_BR.po:25461:"  resultado em ``$HG_RESULT``. Argumentos de linha de comando decodificados\n"
mercurial-5.5.2/i18n/pt_BR.po:25462:"  são passados em ``$HG_PATS`` e ``$HG_OPTS``; estas contém representações\n"
mercurial-5.5.2/i18n/pt_BR.po-25463-"  em string dos dados python passados internamente para o <comando>.\n"
mercurial-5.5.2/i18n/pt_BR.po:25464:"  Em ``$HG_OPTS`` é passado um dicionário de opções (com opções não\n"
mercurial-5.5.2/i18n/pt_BR.po:25465:"  especificadas definidas para seus valores padrão). ``$HG_PATS`` é uma\n"
mercurial-5.5.2/i18n/pt_BR.po-25466-"  lista de argumentos. A falha destes ganchos é ignorada."
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25470-"  Run after a failed invocation of an associated command. The contents\n"
mercurial-5.5.2/i18n/pt_BR.po:25471:"  of the command line are passed as ``$HG_ARGS``. Parsed command line\n"
mercurial-5.5.2/i18n/pt_BR.po:25472:"  arguments are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain\n"
mercurial-5.5.2/i18n/pt_BR.po-25473-"  string representations of the python data internally passed to\n"
mercurial-5.5.2/i18n/pt_BR.po:25474:"  <command>. ``$HG_OPTS`` is a dictionary of options (with unspecified\n"
mercurial-5.5.2/i18n/pt_BR.po:25475:"  options set to their defaults). ``$HG_PATS`` is a list of arguments.\n"
mercurial-5.5.2/i18n/pt_BR.po-25476-"  Hook failure is ignored."
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25479-"  Executado após uma falha na execução do comando.\n"
mercurial-5.5.2/i18n/pt_BR.po:25480:"  O conteúdo da linha de comando é passado em ``$HG_ARGS``\n"
mercurial-5.5.2/i18n/pt_BR.po-25481-"  Argumentos de linha de comando decodificados\n"
mercurial-5.5.2/i18n/pt_BR.po:25482:"  são passados em ``$HG_PATS`` e ``$HG_OPTS``; estas contém representações\n"
mercurial-5.5.2/i18n/pt_BR.po-25483-"  em string dos dados python passados internamente para o <comando>.\n"
mercurial-5.5.2/i18n/pt_BR.po:25484:"  Em ``$HG_OPTS`` é passado um dicionário de opções (com opções não\n"
mercurial-5.5.2/i18n/pt_BR.po:25485:"  especificadas definidas para seus valores padrão). ``$HG_PATS`` é uma\n"
mercurial-5.5.2/i18n/pt_BR.po-25486-"  lista de argumentos. A falha destes ganchos é ignorada."
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25490-"  Run before executing the associated command. The contents of the\n"
mercurial-5.5.2/i18n/pt_BR.po:25491:"  command line are passed as ``$HG_ARGS``. Parsed command line arguments\n"
mercurial-5.5.2/i18n/pt_BR.po:25492:"  are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain string\n"
mercurial-5.5.2/i18n/pt_BR.po:25493:"  representations of the data internally passed to <command>. ``$HG_OPTS``\n"
mercurial-5.5.2/i18n/pt_BR.po-25494-"  is a dictionary of options (with unspecified options set to their\n"
mercurial-5.5.2/i18n/pt_BR.po:25495:"  defaults). ``$HG_PATS`` is a list of arguments. If the hook returns\n"
mercurial-5.5.2/i18n/pt_BR.po-25496-"  failure, the command doesn't execute and Mercurial returns the failure\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25500-"  Executado antes de invocações do comando associado.\n"
mercurial-5.5.2/i18n/pt_BR.po:25501:"  O conteúdo da linha de comando é passado em ``$HG_ARGS``.\n"
mercurial-5.5.2/i18n/pt_BR.po-25502-"  Argumentos de linha de comando decodificados\n"
mercurial-5.5.2/i18n/pt_BR.po:25503:"  são passados em ``$HG_PATS`` e ``$HG_OPTS``; estas contém representações\n"
mercurial-5.5.2/i18n/pt_BR.po-25504-"  em string dos dados passados internamente para o <comando>.\n"
mercurial-5.5.2/i18n/pt_BR.po:25505:"  Em ``$HG_OPTS`` é passado um dicionário de opções (com opções não\n"
mercurial-5.5.2/i18n/pt_BR.po:25506:"  especificadas definidas para seus valores padrão). ``$HG_PATS`` é uma\n"
mercurial-5.5.2/i18n/pt_BR.po-25507-"  lista de argumentos.\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25515-"  cause the push, pull or unbundle to fail. The URL from which changes\n"
mercurial-5.5.2/i18n/pt_BR.po:25516:"  will come is in ``$HG_URL``."
mercurial-5.5.2/i18n/pt_BR.po-25517-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25522-"  que a operação push, pull ou unbundle falhe.\n"
mercurial-5.5.2/i18n/pt_BR.po:25523:"  A URL de origem das mudanças é passada em ``$HG_URL``."
mercurial-5.5.2/i18n/pt_BR.po-25524-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25528-"  commit to proceed. A non-zero status will cause the commit to fail.\n"
mercurial-5.5.2/i18n/pt_BR.po:25529:"  Parent changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/pt_BR.po-25530-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25534-"  fará com que o commit falhe.\n"
mercurial-5.5.2/i18n/pt_BR.po:25535:"  Os IDs das revisões pais são passados em ``$HG_PARENT1`` e ``$HG_PARENT2``."
mercurial-5.5.2/i18n/pt_BR.po-25536-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25540-"  repository. A non-zero status will cause failure. The key namespace is\n"
mercurial-5.5.2/i18n/pt_BR.po:25541:"  in ``$HG_NAMESPACE``."
mercurial-5.5.2/i18n/pt_BR.po-25542-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25545-"  Um status de saída diferente de zero causará uma falha.\n"
mercurial-5.5.2/i18n/pt_BR.po:25546:"  O espaço de nomes de chave é passado em ``$HG_NAMESPACE``."
mercurial-5.5.2/i18n/pt_BR.po-25547-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25554-"  since you can just copy files instead. The source of operation is in\n"
mercurial-5.5.2/i18n/pt_BR.po:25555:"  ``$HG_SOURCE``. If \"serve\", the operation is happening on behalf of a remote\n"
mercurial-5.5.2/i18n/pt_BR.po-25556-"  SSH or HTTP repository. If \"push\", \"pull\" or \"bundle\", the operation\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25565-"  completa, já que os arquivos locais ainda poderão ser copiados.\n"
mercurial-5.5.2/i18n/pt_BR.po:25566:"  A operação de origem é passada em ``$HG_SOURCE``. Se esta tiver\n"
mercurial-5.5.2/i18n/pt_BR.po-25567-"  o valor \"serve\", a operação ocorre através de SSH ou HTTP\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25575-"  repository. A non-zero status will cause the key to be rejected. The\n"
mercurial-5.5.2/i18n/pt_BR.po:25576:"  key namespace is in ``$HG_NAMESPACE``, the key is in ``$HG_KEY``,\n"
mercurial-5.5.2/i18n/pt_BR.po:25577:"  the old value (if any) is in ``$HG_OLD``, and the new value is in\n"
mercurial-5.5.2/i18n/pt_BR.po:25578:"  ``$HG_NEW``."
mercurial-5.5.2/i18n/pt_BR.po-25579-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25583-"  chave seja rejeitada. O espaço de nomes de chave é passado em\n"
mercurial-5.5.2/i18n/pt_BR.po:25584:"  ``$HG_NAMESPACE``, a chave é passada em ``$HG_KEY``, o valor antigo\n"
mercurial-5.5.2/i18n/pt_BR.po:25585:"  (se houver) é passado em ``$HG_OLD``, e o novo valor é passado em\n"
mercurial-5.5.2/i18n/pt_BR.po:25586:"  ``$HG_NEW``."
mercurial-5.5.2/i18n/pt_BR.po-25587-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25591-"  created. A non-zero status will cause the tag to fail. The ID of the\n"
mercurial-5.5.2/i18n/pt_BR.po:25592:"  changeset to tag is in ``$HG_NODE``. The name of tag is in ``$HG_TAG``. The\n"
mercurial-5.5.2/i18n/pt_BR.po:25593:"  tag is local if ``$HG_LOCAL=1``, or in the repository if ``$HG_LOCAL=0``."
mercurial-5.5.2/i18n/pt_BR.po-25594-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25598-"  causará uma falha do comando. O ID da revisão a ser etiquetada é\n"
mercurial-5.5.2/i18n/pt_BR.po:25599:"  passado em ``$HG_NODE``. O nome da etiqueta é passado em ``$HG_TAG``.\n"
mercurial-5.5.2/i18n/pt_BR.po:25600:"  Uma etiqueta local é indicada por ``$HG_LOCAL=1``; uma global, por\n"
mercurial-5.5.2/i18n/pt_BR.po:25601:"  ``$HG_LOCAL=0``."
mercurial-5.5.2/i18n/pt_BR.po-25602-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25605-"  Run before any new repository transaction is open. The reason for the\n"
mercurial-5.5.2/i18n/pt_BR.po:25606:"  transaction will be in ``$HG_TXNNAME``, and a unique identifier for the\n"
mercurial-5.5.2/i18n/pt_BR.po-25607-"  transaction will be in ``HG_TXNID``. A non-zero status will prevent the\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25611-"  Executado antes da abertura de qualquer transação no repositório.\n"
mercurial-5.5.2/i18n/pt_BR.po:25612:"  A razão da transação será passada em ``$HG_TXNNAME``, e um\n"
mercurial-5.5.2/i18n/pt_BR.po-25613-"  identificador único para a transação será passado em ``HG_TXNID``.\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25622-"  status will cause the transaction to be rolled back. The reason for the\n"
mercurial-5.5.2/i18n/pt_BR.po:25623:"  transaction opening will be in ``$HG_TXNNAME``, and a unique identifier for\n"
mercurial-5.5.2/i18n/pt_BR.po-25624-"  the transaction will be in ``HG_TXNID``. The rest of the available data will\n"
mercurial-5.5.2/i18n/pt_BR.po:25625:"  vary according the transaction type. New changesets will add ``$HG_NODE``\n"
mercurial-5.5.2/i18n/pt_BR.po:25626:"  (the ID of the first added changeset), ``$HG_NODE_LAST`` (the ID of the last\n"
mercurial-5.5.2/i18n/pt_BR.po:25627:"  added changeset), ``$HG_URL`` and ``$HG_SOURCE`` variables.  Bookmark and\n"
mercurial-5.5.2/i18n/pt_BR.po-25628-"  phase changes will set ``HG_BOOKMARK_MOVED`` and ``HG_PHASES_MOVED`` to ``1``\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25636-"  de saída diferente de zero fará com que a transação seja desfeita.\n"
mercurial-5.5.2/i18n/pt_BR.po:25637:"  A razão da transação será passada em ``$HG_TXNNAME`` e um\n"
mercurial-5.5.2/i18n/pt_BR.po-25638-"  identificador único para a transação será passado em ``HG_TXNID``.\n"
mercurial-5.5.2/i18n/pt_BR.po-25639-"  Outros dados estarão disponíveis dependendo do tipo da transação.\n"
mercurial-5.5.2/i18n/pt_BR.po:25640:"  Novas revisões adicionarão ``$HG_NODE`` (id da primeira revisão\n"
mercurial-5.5.2/i18n/pt_BR.po:25641:"  adicionada), ``$HG_NODE_LAST`` (id da última revisão adicionada),\n"
mercurial-5.5.2/i18n/pt_BR.po:25642:"  ``$HG_URL`` e ``$HG_SOURCE``. Mudanças de marcadores\n"
mercurial-5.5.2/i18n/pt_BR.po-25643-"  e fases definirão ``HG_BOOKMARK_MOVED`` e ``HG_PHASES_MOVED`` como\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25651-"  proceed. A non-zero status will cause the transaction to be rolled back.\n"
mercurial-5.5.2/i18n/pt_BR.po:25652:"  The name of the bookmark will be available in ``$HG_BOOKMARK``, the new\n"
mercurial-5.5.2/i18n/pt_BR.po:25653:"  bookmark location will be available in ``$HG_NODE`` while the previous\n"
mercurial-5.5.2/i18n/pt_BR.po:25654:"  location will be available in ``$HG_OLDNODE``. In case of a bookmark\n"
mercurial-5.5.2/i18n/pt_BR.po:25655:"  creation ``$HG_OLDNODE`` will be empty. In case of deletion ``$HG_NODE``\n"
mercurial-5.5.2/i18n/pt_BR.po-25656-"  will be empty.\n"
mercurial-5.5.2/i18n/pt_BR.po-25657-"  In addition, the reason for the transaction opening will be in\n"
mercurial-5.5.2/i18n/pt_BR.po:25658:"  ``$HG_TXNNAME``, and a unique identifier for the transaction will be in\n"
mercurial-5.5.2/i18n/pt_BR.po-25659-"  ``HG_TXNID``."
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25667-"  de saída diferente de zero fará com que a transação seja desfeita.\n"
mercurial-5.5.2/i18n/pt_BR.po:25668:"  O nome do marcador será passado em ``$HG_BOOKMARK``, a nova\n"
mercurial-5.5.2/i18n/pt_BR.po:25669:"  localização do marcador será passada em ``$HG_NODE``, e a anterior\n"
mercurial-5.5.2/i18n/pt_BR.po:25670:"  em ``$HG_OLDNODE``.\n"
mercurial-5.5.2/i18n/pt_BR.po:25671:"  No caso de criação de um marcador, ``$HG_OLDNODE`` estará vazia; no\n"
mercurial-5.5.2/i18n/pt_BR.po:25672:"  caso de remoção, ``$HG_NODE`` estará vazia.\n"
mercurial-5.5.2/i18n/pt_BR.po-25673-"  Adicionalmente, a razão da abertura da transação será passada em\n"
mercurial-5.5.2/i18n/pt_BR.po:25674:"  ``$HG_TXNNAME``, e um identificador único para a transação será\n"
mercurial-5.5.2/i18n/pt_BR.po-25675-"  passado em ``HG_TXNID``."
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25683-"  multiple times, once for each revision affected by a phase change.\n"
mercurial-5.5.2/i18n/pt_BR.po:25684:"  The affected node is available in ``$HG_NODE``, the phase in ``$HG_PHASE``\n"
mercurial-5.5.2/i18n/pt_BR.po:25685:"  while the previous ``$HG_OLDPHASE``. In case of new node, ``$HG_OLDPHASE``\n"
mercurial-5.5.2/i18n/pt_BR.po-25686-"  will be empty.  In addition, the reason for the transaction opening will be in\n"
mercurial-5.5.2/i18n/pt_BR.po:25687:"  ``$HG_TXNNAME``, and a unique identifier for the transaction will be in\n"
mercurial-5.5.2/i18n/pt_BR.po-25688-"  ``HG_TXNID``. The hook is also run for newly added revisions. In this case\n"
mercurial-5.5.2/i18n/pt_BR.po:25689:"  the ``$HG_OLDPHASE`` entry will be empty."
mercurial-5.5.2/i18n/pt_BR.po-25690-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25698-"  pela mudança de fase.\n"
mercurial-5.5.2/i18n/pt_BR.po:25699:"  O nó afetado será passado em ``$HG_NODE``, a nova fase em ``$HG_PHASE``\n"
mercurial-5.5.2/i18n/pt_BR.po:25700:"  e a anterior em ``$HG_OLDPHASE``.\n"
mercurial-5.5.2/i18n/pt_BR.po:25701:"  No caso de um novo nó, ``$HG_OLDPHASE`` estará vazia.\n"
mercurial-5.5.2/i18n/pt_BR.po-25702-"  Adicionalmente, a razão da abertura da transação será passada em\n"
mercurial-5.5.2/i18n/pt_BR.po:25703:"  ``$HG_TXNNAME``, e um identificador único para a transação será\n"
mercurial-5.5.2/i18n/pt_BR.po-25704-"  passado em ``HG_TXNID``.\n"
mercurial-5.5.2/i18n/pt_BR.po-25705-"  O gancho também será executado para revisões novas; nesse caso,\n"
mercurial-5.5.2/i18n/pt_BR.po:25706:"  ``$HG_OLDPHASE`` estará vazia."
mercurial-5.5.2/i18n/pt_BR.po-25707-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25764-"  program. This allows validation of incoming changes before accepting them.\n"
mercurial-5.5.2/i18n/pt_BR.po:25765:"  The ID of the first new changeset is in ``$HG_NODE`` and last is in\n"
mercurial-5.5.2/i18n/pt_BR.po:25766:"  ``$HG_NODE_LAST``. Exit status 0 allows the transaction to commit. A non-zero\n"
mercurial-5.5.2/i18n/pt_BR.po-25767-"  status will cause the transaction to be rolled back, and the push, pull or\n"
mercurial-5.5.2/i18n/pt_BR.po:25768:"  unbundle will fail. The URL that was the source of changes is in ``$HG_URL``."
mercurial-5.5.2/i18n/pt_BR.po-25769-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25774-"  Isto permite que as novas mudanças sejam validadas antes de serem\n"
mercurial-5.5.2/i18n/pt_BR.po:25775:"  aceitas. O ID da primeira nova revisão é passado em ``$HG_NODE``\n"
mercurial-5.5.2/i18n/pt_BR.po:25776:"  e o da última em ``$HG_NODE_LAST``.\n"
mercurial-5.5.2/i18n/pt_BR.po-25777-"  O status de saída 0 permite que a transação seja completada. Um status\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25779-"  e a operação push, pull ou unbundle falhará.\n"
mercurial-5.5.2/i18n/pt_BR.po:25780:"  A URL de origem das revisões é passada em ``$HG_URL``."
mercurial-5.5.2/i18n/pt_BR.po-25781-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25787-"  commit to proceed. A non-zero status will cause the transaction to\n"
mercurial-5.5.2/i18n/pt_BR.po:25788:"  be rolled back. The ID of the new changeset is in ``$HG_NODE``. The parent\n"
mercurial-5.5.2/i18n/pt_BR.po:25789:"  changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/pt_BR.po-25790-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25797-"  de saída diferente de 0 fará com que a transação seja desfeita.\n"
mercurial-5.5.2/i18n/pt_BR.po:25798:"  O ID da revisão é passado em ``$HG_NODE``.\n"
mercurial-5.5.2/i18n/pt_BR.po:25799:"  Os IDs das revisões pais são passados em ``$HG_PARENT1`` e ``$HG_PARENT2``."
mercurial-5.5.2/i18n/pt_BR.po-25800-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25804-"  the update to proceed. A non-zero status will prevent the update.\n"
mercurial-5.5.2/i18n/pt_BR.po:25805:"  The changeset ID of first new parent is in ``$HG_PARENT1``. If updating to a\n"
mercurial-5.5.2/i18n/pt_BR.po:25806:"  merge, the ID of second new parent is in ``$HG_PARENT2``."
mercurial-5.5.2/i18n/pt_BR.po-25807-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25811-"  diferente de 0 impedirá a atualização.\n"
mercurial-5.5.2/i18n/pt_BR.po:25812:"  O ID de revisão do novo primeiro pai é passado em ``$HG_PARENT1``.\n"
mercurial-5.5.2/i18n/pt_BR.po-25813-"  No caso de uma mesclagem, o ID do novo segundo pai será passado\n"
mercurial-5.5.2/i18n/pt_BR.po:25814:"  em ``$HG_PARENT2``."
mercurial-5.5.2/i18n/pt_BR.po-25815-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25818-"  Run after listing pushkeys (like bookmarks) in the repository. The\n"
mercurial-5.5.2/i18n/pt_BR.po:25819:"  key namespace is in ``$HG_NAMESPACE``. ``$HG_VALUES`` is a\n"
mercurial-5.5.2/i18n/pt_BR.po-25820-"  dictionary containing the keys and values."
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25823-"  Executado após listar pushkeys (como marcadores) no repositório.\n"
mercurial-5.5.2/i18n/pt_BR.po:25824:"  O espaço de nomes de chave é passado em ``$HG_NAMESPACE``.\n"
mercurial-5.5.2/i18n/pt_BR.po:25825:"  ``$HG_VALUES`` é um dicionário contendo as chaves e valores."
mercurial-5.5.2/i18n/pt_BR.po-25826-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25829-"  Run after a pushkey (like a bookmark) is added to the\n"
mercurial-5.5.2/i18n/pt_BR.po:25830:"  repository. The key namespace is in ``$HG_NAMESPACE``, the key is in\n"
mercurial-5.5.2/i18n/pt_BR.po:25831:"  ``$HG_KEY``, the old value (if any) is in ``$HG_OLD``, and the new\n"
mercurial-5.5.2/i18n/pt_BR.po:25832:"  value is in ``$HG_NEW``."
mercurial-5.5.2/i18n/pt_BR.po-25833-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25835-"  Executado após uma pushkey (como um marcador) ser adicionado ao\n"
mercurial-5.5.2/i18n/pt_BR.po:25836:"  repositório. O espaço de nomes de chave é passado em ``$HG_NAMESPACE``,\n"
mercurial-5.5.2/i18n/pt_BR.po:25837:"  a chave é passada em ``$HG_KEY``, o valor antigo (se houver) é passado\n"
mercurial-5.5.2/i18n/pt_BR.po:25838:"  em ``$HG_OLD``, e o novo valor é passado em ``$HG_NEW``."
mercurial-5.5.2/i18n/pt_BR.po-25839-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25841-"``tag``\n"
mercurial-5.5.2/i18n/pt_BR.po:25842:"  Run after a tag is created. The ID of the tagged changeset is in ``$HG_NODE``.\n"
mercurial-5.5.2/i18n/pt_BR.po:25843:"  The name of tag is in ``$HG_TAG``. The tag is local if ``$HG_LOCAL=1``, or in\n"
mercurial-5.5.2/i18n/pt_BR.po:25844:"  the repository if ``$HG_LOCAL=0``."
mercurial-5.5.2/i18n/pt_BR.po-25845-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25847-"  Executado após a criação de uma etiqueta. O ID da revisão etiquetada é\n"
mercurial-5.5.2/i18n/pt_BR.po:25848:"  passado em ``$HG_NODE``. O nome da etiqueta é passado em ``$HG_TAG``.\n"
mercurial-5.5.2/i18n/pt_BR.po:25849:"  Uma etiqueta local é indicada por ``$HG_LOCAL=1``; uma global, por\n"
mercurial-5.5.2/i18n/pt_BR.po:25850:"  ``$HG_LOCAL=0``."
mercurial-5.5.2/i18n/pt_BR.po-25851-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25854-"  Run after updating the working directory. The changeset ID of first\n"
mercurial-5.5.2/i18n/pt_BR.po:25855:"  new parent is in ``$HG_PARENT1``. If updating to a merge, the ID of second new\n"
mercurial-5.5.2/i18n/pt_BR.po:25856:"  parent is in ``$HG_PARENT2``. If the update succeeded, ``$HG_ERROR=0``. If the\n"
mercurial-5.5.2/i18n/pt_BR.po:25857:"  update failed (e.g. because conflicts were not resolved), ``$HG_ERROR=1``."
mercurial-5.5.2/i18n/pt_BR.po-25858-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25860-"  Executado após uma atualização do diretório de trabalho.\n"
mercurial-5.5.2/i18n/pt_BR.po:25861:"  O ID de revisão do novo primeiro pai é passado em ``$HG_PARENT1``.\n"
mercurial-5.5.2/i18n/pt_BR.po-25862-"  No caso de atualização para uma mesclagem, o ID do novo segundo\n"
mercurial-5.5.2/i18n/pt_BR.po:25863:"  pai será passado em ``$HG_PARENT2``.\n"
mercurial-5.5.2/i18n/pt_BR.po:25864:"  Se a atualização tiver sucesso, ``$HG_ERROR=0``.\n"
mercurial-5.5.2/i18n/pt_BR.po-25865-"  Se a atualização falhar (por exemplo, por apresentar conflitos não\n"
mercurial-5.5.2/i18n/pt_BR.po:25866:"  resolvidos), ``$HG_ERROR=1``."
mercurial-5.5.2/i18n/pt_BR.po-25867-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25884-"   Environment variables with empty values may not be passed to\n"
mercurial-5.5.2/i18n/pt_BR.po:25885:"   hooks on platforms such as Windows. As an example, ``$HG_PARENT2``\n"
mercurial-5.5.2/i18n/pt_BR.po-25886-"   will have an empty value under Unix-like platforms for non-merge\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-25890-"   para os ganchos em certas plataformas, como no Windows. Por exemplo,\n"
mercurial-5.5.2/i18n/pt_BR.po:25891:"   ``$HG_PARENT2`` terá um valor vazio sob plataformas semelhantes ao\n"
mercurial-5.5.2/i18n/pt_BR.po-25892-"   Unix para revisões que não sejam mesclagens, mas não estará definida\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-26478-"  files being merged as well as the output file through these\n"
mercurial-5.5.2/i18n/pt_BR.po:26479:"  variables: ``$base``, ``$local``, ``$other``, ``$output``."
mercurial-5.5.2/i18n/pt_BR.po-26480-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-26483-"  referir aos arquivos a serem mesclados, bem como ao arquivo de saída,\n"
mercurial-5.5.2/i18n/pt_BR.po:26484:"  usando as seguintes variáveis: ``$base`` (versão base), ``$local``\n"
mercurial-5.5.2/i18n/pt_BR.po:26485:"  (versão local), ``$other`` (a outra versão), ``$output`` (o arquivo\n"
mercurial-5.5.2/i18n/pt_BR.po-26486-"  de saída)."
##############################################
mercurial-5.5.2/i18n/pt_BR.po-26488-msgid ""
mercurial-5.5.2/i18n/pt_BR.po:26489:"  The meaning of ``$local`` and ``$other`` can vary depending on which action is\n"
mercurial-5.5.2/i18n/pt_BR.po:26490:"  being performed. During an update or merge, ``$local`` represents the original\n"
mercurial-5.5.2/i18n/pt_BR.po:26491:"  state of the file, while ``$other`` represents the commit you are updating to or\n"
mercurial-5.5.2/i18n/pt_BR.po:26492:"  the commit you are merging with. During a rebase, ``$local`` represents the\n"
mercurial-5.5.2/i18n/pt_BR.po:26493:"  destination of the rebase, and ``$other`` represents the commit being rebased."
mercurial-5.5.2/i18n/pt_BR.po-26494-msgstr ""
mercurial-5.5.2/i18n/pt_BR.po:26495:"  O significado de ``$local`` e ``$other`` pode variar dependendo da\n"
mercurial-5.5.2/i18n/pt_BR.po-26496-"  ação realizada.\n"
mercurial-5.5.2/i18n/pt_BR.po:26497:"  Durante um update ou merge, ``$local`` representa o estado original\n"
mercurial-5.5.2/i18n/pt_BR.po:26498:"  do arquivo, enquanto ``$other`` representa a revisão de destino ou\n"
mercurial-5.5.2/i18n/pt_BR.po-26499-"  a revisão com a qual a mesclagem é realizada.\n"
mercurial-5.5.2/i18n/pt_BR.po:26500:"  Durante um rebase, ``$local`` representa o destino do rebaseamento,\n"
mercurial-5.5.2/i18n/pt_BR.po:26501:"  e ``$other`` representa a revisão sendo rebaseada."
mercurial-5.5.2/i18n/pt_BR.po-26502-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-26504-"  Some operations define custom labels to assist with identifying the revisions,\n"
mercurial-5.5.2/i18n/pt_BR.po:26505:"  accessible via ``$labellocal``, ``$labelother``, and ``$labelbase``. If custom\n"
mercurial-5.5.2/i18n/pt_BR.po-26506-"  labels are not available, these will be ``local``, ``other``, and ``base``,\n"
mercurial-5.5.2/i18n/pt_BR.po-26507-"  respectively.\n"
mercurial-5.5.2/i18n/pt_BR.po:26508:"  (default: ``$local $base $other``)"
mercurial-5.5.2/i18n/pt_BR.po-26509-msgstr ""
mercurial-5.5.2/i18n/pt_BR.po-26510-"  Algumas operações definem rótulos personalizados para auxiliar\n"
mercurial-5.5.2/i18n/pt_BR.po:26511:"  na identificação das revisões, acessíveis em ``$labellocal``,\n"
mercurial-5.5.2/i18n/pt_BR.po:26512:"  ``$labelother`` e ``$labelbase``.\n"
mercurial-5.5.2/i18n/pt_BR.po-26513-"  Se os rótulos personalizados não forem definidos, estes serão\n"
mercurial-5.5.2/i18n/pt_BR.po-26514-"  respecivamente ``local``, ``other`` e ``base``.\n"
mercurial-5.5.2/i18n/pt_BR.po:26515:"  (padrão: ``$local $base $other``)"
mercurial-5.5.2/i18n/pt_BR.po-26516-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-26593-"``mergemarkers``\n"
mercurial-5.5.2/i18n/pt_BR.po:26594:"  Controls whether the labels passed via ``$labellocal``, ``$labelother``, and\n"
mercurial-5.5.2/i18n/pt_BR.po:26595:"  ``$labelbase`` are ``detailed`` (respecting ``mergemarkertemplate``) or\n"
mercurial-5.5.2/i18n/pt_BR.po-26596-"  ``basic``. If ``premerge`` is ``keep`` or ``keep-merge3``, the conflict\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-26601-"``mergemarkers``\n"
mercurial-5.5.2/i18n/pt_BR.po:26602:"  Controla se os rótulos passados em ``$labellocal``, ``$labelother`` e\n"
mercurial-5.5.2/i18n/pt_BR.po:26603:"  ``$labelbase`` são ``detailed`` (respeitam ``mergemarkertemplate``) ou\n"
mercurial-5.5.2/i18n/pt_BR.po-26604-"  ``basic``. Se ``premerge`` for ``keep`` ou ``keep-merge3``, as\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-26612-"  This setting can be used to override ``mergemarkertemplate`` from the ``[ui]``\n"
mercurial-5.5.2/i18n/pt_BR.po:26613:"  section on a per-tool basis; this applies to the ``$label``-prefixed variables\n"
mercurial-5.5.2/i18n/pt_BR.po-26614-"  and to the conflict markers that are generated if ``premerge`` is ``keep` or\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-26620-"  da seção ``[ui]`` para ferramentas específicas;\n"
mercurial-5.5.2/i18n/pt_BR.po:26621:"  isto inclui as variáveis prefixadas por ``$label`` e as marcações de\n"
mercurial-5.5.2/i18n/pt_BR.po-26622-"  conflitos geradas se ``premerge`` for ``keep` ou ``keep-merge3``.\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-27923-"group with name ``*``. These settings must be placed in an\n"
mercurial-5.5.2/i18n/pt_BR.po:27924:"*already-trusted file* to take effect, such as ``$HOME/.hgrc`` of the\n"
mercurial-5.5.2/i18n/pt_BR.po-27925-"user or service running Mercurial."
##############################################
mercurial-5.5.2/i18n/pt_BR.po-27930-"configurações devem ser colocadas em um arquivo\n"
mercurial-5.5.2/i18n/pt_BR.po:27931:"*que já seja confiável*, como ``$HOME/.hgrc`` do usuário ou serviço\n"
mercurial-5.5.2/i18n/pt_BR.po-27932-"que executa o Mercurial."
##############################################
mercurial-5.5.2/i18n/pt_BR.po-27975-"    Whether to prompt for a username when committing. If True, and\n"
mercurial-5.5.2/i18n/pt_BR.po:27976:"    neither ``$HGUSER`` nor ``$EMAIL`` has been specified, then the user will\n"
mercurial-5.5.2/i18n/pt_BR.po-27977-"    be prompted to enter a username. If no username is entered, the\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-27983-"    fornecer um nome de usuário ao consolidar uma revisão. Se for True,\n"
mercurial-5.5.2/i18n/pt_BR.po:27984:"    e nem ``$HGUSER`` nem ``$EMAIL`` estiverem definidas, o usuário\n"
mercurial-5.5.2/i18n/pt_BR.po-27985-"    será consultado para fornecer um nome. Se nenhum nome for passado,\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-28127-"``editor``\n"
mercurial-5.5.2/i18n/pt_BR.po:28128:"    The editor to use during a commit. (default: ``$EDITOR`` or ``vi``)"
mercurial-5.5.2/i18n/pt_BR.po-28129-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-28131-"    O editor usado durante um commit.\n"
mercurial-5.5.2/i18n/pt_BR.po:28132:"    (padrão: ``$EDITOR`` ou ``vi``)"
mercurial-5.5.2/i18n/pt_BR.po-28133-
##############################################
mercurial-5.5.2/i18n/pt_BR.po-28574-msgid ""
mercurial-5.5.2/i18n/pt_BR.po:28575:"    (default: ``$EMAIL`` or ``username@hostname``. If the username in\n"
mercurial-5.5.2/i18n/pt_BR.po-28576-"    hgrc is empty, e.g. if the system admin set ``username =`` in the\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-28579-msgstr ""
mercurial-5.5.2/i18n/pt_BR.po:28580:"    (padrão: ``$EMAIL`` ou ``username@hostname``.\n"
mercurial-5.5.2/i18n/pt_BR.po-28581-"    Se o nome de usuário em um arquivo de configuração estiver vazio, ele\n"
mercurial-5.5.2/i18n/pt_BR.po-28582-"    deve ser especificado manualmente ou em um arquivo de configuração\n"
mercurial-5.5.2/i18n/pt_BR.po:28583:"    diferente; por exemplo, ``$HOME/.hgrc``, se o administrador definir\n"
mercurial-5.5.2/i18n/pt_BR.po-28584-"    ``username =``  no arquivo de configuração de sistema)"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-28870-"    Name or email address of the person in charge of the repository.\n"
mercurial-5.5.2/i18n/pt_BR.po:28871:"    (default: ui.username or ``$EMAIL`` or \"unknown\" if unset or empty)"
mercurial-5.5.2/i18n/pt_BR.po-28872-msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-28874-"    Nome ou endereço de email da pessoa responsável pelo repositório.\n"
mercurial-5.5.2/i18n/pt_BR.po:28875:"    (padrão: ui.username ou ``$EMAIL``, ou \"unknown\" se vazia ou\n"
mercurial-5.5.2/i18n/pt_BR.po-28876-"    não definida)"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-31482-msgid ""
mercurial-5.5.2/i18n/pt_BR.po:31483:"``/etc/mercurial/hgrc``, ``$HOME/.hgrc``, ``.hg/hgrc``\n"
mercurial-5.5.2/i18n/pt_BR.po-31484-"    This file contains defaults and configuration. Values in\n"
mercurial-5.5.2/i18n/pt_BR.po:31485:"    ``.hg/hgrc`` override those in ``$HOME/.hgrc``, and these override\n"
mercurial-5.5.2/i18n/pt_BR.po-31486-"    settings made in the global ``/etc/mercurial/hgrc`` configuration.\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-31489-msgstr ""
mercurial-5.5.2/i18n/pt_BR.po:31490:"``/etc/mercurial/hgrc``, ``$HOME/.hgrc``, ``.hg/hgrc``\n"
mercurial-5.5.2/i18n/pt_BR.po-31491-"    Estes arquivos contêm opções padrão e configurações. Os valores\n"
mercurial-5.5.2/i18n/pt_BR.po:31492:"    em ``.hg/hgrc`` sobrepõe os valores em ``$HOME/.hgrc``, e estes\n"
mercurial-5.5.2/i18n/pt_BR.po-31493-"    sobrepõe configurações feitas no arquivo ``/etc/mercurial/hgrc``\n"
##############################################
mercurial-5.5.2/i18n/pt_BR.po-41610-#~ "additional information. For each hook below, the environment\n"
mercurial-5.5.2/i18n/pt_BR.po:41611:#~ "variables it is passed are listed with names of the form ``$HG_foo``."
mercurial-5.5.2/i18n/pt_BR.po-41612-#~ msgstr ""
##############################################
mercurial-5.5.2/i18n/pt_BR.po-41614-#~ "informações adicionais. Para cada gancho abaixo, as variáveis de\n"
mercurial-5.5.2/i18n/pt_BR.po:41615:#~ "ambiente recebidas são listadas com nomes com a forma ``$HG_foo``."
mercurial-5.5.2/i18n/pt_BR.po-41616-
##############################################
mercurial-5.5.2/i18n/ru.po-16799-"the username setting is typically put into\n"
mercurial-5.5.2/i18n/ru.po:16800:"``%USERPROFILE%\\mercurial.ini`` or ``$HOME/.hgrc`` and local\n"
mercurial-5.5.2/i18n/ru.po-16801-"configuration is put into the per-repository ``<repo>/.hg/hgrc`` file."
##############################################
mercurial-5.5.2/i18n/ru.po-16806-"обычно\n"
mercurial-5.5.2/i18n/ru.po:16807:"помещают в ``%USERPROFILE%\\mercurial.ini`` или ``$HOME/.hgrc``, а\n"
mercurial-5.5.2/i18n/ru.po-16808-"локальные настройки хранятся для каждого хранилища в файле\n"
##############################################
mercurial-5.5.2/i18n/ru.po-16842-msgid ""
mercurial-5.5.2/i18n/ru.po:16843:"| (Plan 9) ``$home/lib/hgrc``\n"
mercurial-5.5.2/i18n/ru.po:16844:"| (Unix) ``$HOME/.hgrc``\n"
mercurial-5.5.2/i18n/ru.po-16845-"| (Windows) ``%USERPROFILE%\\.hgrc``\n"
##############################################
mercurial-5.5.2/i18n/ru.po-16849-msgstr ""
mercurial-5.5.2/i18n/ru.po:16850:"| (Plan 9) ``$home/lib/hgrc``\n"
mercurial-5.5.2/i18n/ru.po:16851:"| (Unix) ``$HOME/.hgrc``\n"
mercurial-5.5.2/i18n/ru.po-16852-"| (Windows) ``%USERPROFILE%\\.hgrc``\n"
##############################################
mercurial-5.5.2/i18n/ru.po-17165-"commands (or aliases), optionally including arguments. Positional\n"
mercurial-5.5.2/i18n/ru.po:17166:"arguments in the form of ``$1``, ``$2``, etc in the alias definition\n"
mercurial-5.5.2/i18n/ru.po-17167-"are expanded by Mercurial before execution. Positional arguments not\n"
mercurial-5.5.2/i18n/ru.po:17168:"already used by ``$N`` in the definition are put at the end of the\n"
mercurial-5.5.2/i18n/ru.po-17169-"command to be executed."
##############################################
mercurial-5.5.2/i18n/ru.po-17173-"других команд (или псевдонимов), возможно принимающую аргументы.\n"
mercurial-5.5.2/i18n/ru.po:17174:"Позиционные аргументы в виде ``$1``, ``$2`` ... в определении\n"
mercurial-5.5.2/i18n/ru.po-17175-"псевдонима раскрываются перед выполнением. Позиционные аргументы,\n"
mercurial-5.5.2/i18n/ru.po:17176:"еще не использованные до ``$N`` в определении, добавляются в конец\n"
mercurial-5.5.2/i18n/ru.po-17177-"выполняемой команды."
##############################################
mercurial-5.5.2/i18n/ru.po-17239-msgid ""
mercurial-5.5.2/i18n/ru.po:17240:"Positional arguments like ``$1``, ``$2``, etc. in the alias definition\n"
mercurial-5.5.2/i18n/ru.po-17241-"expand to the command arguments. Unmatched arguments are\n"
mercurial-5.5.2/i18n/ru.po:17242:"removed. ``$0`` expands to the alias name and ``$@`` expands to all\n"
mercurial-5.5.2/i18n/ru.po-17243-"arguments separated by a space. These expansions happen before the\n"
##############################################
mercurial-5.5.2/i18n/ru.po-17245-msgstr ""
mercurial-5.5.2/i18n/ru.po:17246:"Позиционные аргументы, такие как ``$1``, ``$2`` и т.п. в определении\n"
mercurial-5.5.2/i18n/ru.po-17247-"псевдонима раскрываются в аргументы команды. Аргументы, для которых\n"
mercurial-5.5.2/i18n/ru.po:17248:"нет соответсвующих параметров, удаляются. ``$0`` раскрывается в имя\n"
mercurial-5.5.2/i18n/ru.po:17249:"псевдонима, ``$@`` - в список всех аргументов, разделенных пробелами.\n"
mercurial-5.5.2/i18n/ru.po-17250-"Эти подстановки выполняются до того, как команда будет передана\n"
##############################################
mercurial-5.5.2/i18n/ru.po-17253-msgid ""
mercurial-5.5.2/i18n/ru.po:17254:"Shell aliases are executed in an environment where ``$HG`` expands to\n"
mercurial-5.5.2/i18n/ru.po-17255-"the path of the Mercurial that was used to execute the alias. This is\n"
##############################################
mercurial-5.5.2/i18n/ru.po-17257-"alias, as was done above for the purge alias. In addition,\n"
mercurial-5.5.2/i18n/ru.po:17258:"``$HG_ARGS`` expands to the arguments given to Mercurial. In the ``hg\n"
mercurial-5.5.2/i18n/ru.po:17259:"echo foo`` call above, ``$HG_ARGS`` would expand to ``echo foo``."
mercurial-5.5.2/i18n/ru.po-17260-msgstr ""
mercurial-5.5.2/i18n/ru.po:17261:"Псевдонимы оболочки выполняются в среде, в которой ``$HG`` раскрывается\n"
mercurial-5.5.2/i18n/ru.po-17262-"в путь к исполняемому в данный момент файлу Mercurial. Это полезно,\n"
mercurial-5.5.2/i18n/ru.po-17263-"если вы хотите запустить еще одну команду Mercurial из псевдонима,\n"
mercurial-5.5.2/i18n/ru.po:17264:"как это сделано в предыдущем примере для purge. Кроме того, ``$HG_ARGS``\n"
mercurial-5.5.2/i18n/ru.po-17265-"раскрывается в аргументы, переданные Mercurial. В примере с\n"
mercurial-5.5.2/i18n/ru.po:17266:"``hg echo foo``, ``$HG_ARGS`` раскроется в ``echo foo``."
mercurial-5.5.2/i18n/ru.po-17267-
##############################################
mercurial-5.5.2/i18n/ru.po-17395-"    be prompted for it. Environment variables are expanded in the\n"
mercurial-5.5.2/i18n/ru.po:17396:"    username letting you do ``foo.username = $USER``. If the URI\n"
mercurial-5.5.2/i18n/ru.po-17397-"    includes a username, only ``[auth]`` entries with a matching\n"
##############################################
mercurial-5.5.2/i18n/ru.po-17403-"    пользователь должен будет ввести имя. Переменные окружения\n"
mercurial-5.5.2/i18n/ru.po:17404:"    раскрываются, позволяя написать ``foo.username = $USER``. Если URI\n"
mercurial-5.5.2/i18n/ru.po-17405-"    включает имя пользователя, рассматриваются только параметры из \n"
##############################################
mercurial-5.5.2/i18n/ru.po-17847-"    first character set to which conversion from local encoding\n"
mercurial-5.5.2/i18n/ru.po:17848:"    (``$HGENCODING``, ``ui.fallbackencoding``) succeeds. If correct\n"
mercurial-5.5.2/i18n/ru.po-17849-"    conversion fails, the text in question is sent as is. Defaults to\n"
##############################################
mercurial-5.5.2/i18n/ru.po-17855-"    не содержащие патчи, будут закодированы первой кодировкой, для\n"
mercurial-5.5.2/i18n/ru.po:17856:"    в которую корректно переводится исходная (``$HGENCODING``,\n"
mercurial-5.5.2/i18n/ru.po-17857-"    ``ui.fallbackencoding``). Если корректно преобразовать не удаётся,\n"
##############################################
mercurial-5.5.2/i18n/ru.po-17866-"    3. ``ui.fallbackencoding``: if not in email.charsets\n"
mercurial-5.5.2/i18n/ru.po:17867:"    4. ``$HGENCODING``: if not in email.charsets\n"
mercurial-5.5.2/i18n/ru.po-17868-"    5. ``utf-8``: always last, regardless of settings"
##############################################
mercurial-5.5.2/i18n/ru.po-17872-"    3. ``ui.fallbackencoding``: если не содержится в email.charsets\n"
mercurial-5.5.2/i18n/ru.po:17873:"    4. ``$HGENCODING``: если не содержится в email.charsets\n"
mercurial-5.5.2/i18n/ru.po-17874-"    5. ``utf-8``: всегда последняя, независимо от установок"
##############################################
mercurial-5.5.2/i18n/ru.po-18120-"additional information. For each hook below, the environment\n"
mercurial-5.5.2/i18n/ru.po:18121:"variables it is passed are listed with names of the form ``$HG_foo``."
mercurial-5.5.2/i18n/ru.po-18122-msgstr ""
##############################################
mercurial-5.5.2/i18n/ru.po-18124-"полезную дополнительную информацию. Для каждого хука ниже, передаваемые\n"
mercurial-5.5.2/i18n/ru.po:18125:"ему переменные перечислены с именами вида ``$HG_foo``."
mercurial-5.5.2/i18n/ru.po-18126-
##############################################
mercurial-5.5.2/i18n/ru.po-18129-"  Run after a changegroup has been added via push, pull or unbundle.\n"
mercurial-5.5.2/i18n/ru.po:18130:"  ID of the first new changeset is in ``$HG_NODE``. URL from which\n"
mercurial-5.5.2/i18n/ru.po:18131:"  changes came is in ``$HG_URL``."
mercurial-5.5.2/i18n/ru.po-18132-msgstr ""
##############################################
mercurial-5.5.2/i18n/ru.po-18135-"  с помощью push, pull или unbundle. ID первого набора изменений\n"
mercurial-5.5.2/i18n/ru.po:18136:"  содержится в ``$HG_NODE``. URL источника изменений находится в ``$HG_URL``."
mercurial-5.5.2/i18n/ru.po-18137-
##############################################
mercurial-5.5.2/i18n/ru.po-18140-"  Run after a changeset has been created in the local repository. ID\n"
mercurial-5.5.2/i18n/ru.po:18141:"  of the newly created changeset is in ``$HG_NODE``. Parent changeset\n"
mercurial-5.5.2/i18n/ru.po:18142:"  IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/ru.po-18143-msgstr ""
##############################################
mercurial-5.5.2/i18n/ru.po-18145-"  Выполняется после создания нового набора изменений в локальном\n"
mercurial-5.5.2/i18n/ru.po:18146:"  хранилище. ID созданного набора изменений передается в ``$HG_NODE``,\n"
mercurial-5.5.2/i18n/ru.po:18147:"  ID родителей содержатся в ``$HG_PARENT1`` и ``$HG_PARENT2``."
mercurial-5.5.2/i18n/ru.po-18148-
##############################################
mercurial-5.5.2/i18n/ru.po-18152-"  the local repository. The ID of the newly arrived changeset is in\n"
mercurial-5.5.2/i18n/ru.po:18153:"  ``$HG_NODE``. URL that was source of changes came is in ``$HG_URL``."
mercurial-5.5.2/i18n/ru.po-18154-msgstr ""
##############################################
mercurial-5.5.2/i18n/ru.po-18157-"  push, pull или unbundle. ID первого набора изменений содержится\n"
mercurial-5.5.2/i18n/ru.po:18158:"  в ``$HG_NODE``. URL источника изменений находится в ``$HG_URL``."
mercurial-5.5.2/i18n/ru.po-18159-
##############################################
mercurial-5.5.2/i18n/ru.po-18162-"  Run after sending changes from local repository to another. ID of\n"
mercurial-5.5.2/i18n/ru.po:18163:"  first changeset sent is in ``$HG_NODE``. Source of operation is in\n"
mercurial-5.5.2/i18n/ru.po:18164:"  ``$HG_SOURCE``; see \"preoutgoing\" hook for description."
mercurial-5.5.2/i18n/ru.po-18165-msgstr ""
##############################################
mercurial-5.5.2/i18n/ru.po-18167-"  Выполняется после отправки изменений из локального хранилища в\n"
mercurial-5.5.2/i18n/ru.po:18168:"  другое. ID первого набора изменений содержится в ``$HG_NODE``.\n"
mercurial-5.5.2/i18n/ru.po:18169:"  Источник операции находится в ``$HG_SOURCE``; описание см. в\n"
mercurial-5.5.2/i18n/ru.po-18170-"  \"preoutgoing\""
##############################################
mercurial-5.5.2/i18n/ru.po-18174-"  Run after successful invocations of the associated command. The\n"
mercurial-5.5.2/i18n/ru.po:18175:"  contents of the command line are passed as ``$HG_ARGS`` and the result\n"
mercurial-5.5.2/i18n/ru.po:18176:"  code in ``$HG_RESULT``. Parsed command line arguments are passed as\n"
mercurial-5.5.2/i18n/ru.po:18177:"  ``$HG_PATS`` and ``$HG_OPTS``. These contain string representations of\n"
mercurial-5.5.2/i18n/ru.po:18178:"  the python data internally passed to <command>. ``$HG_OPTS`` is a\n"
mercurial-5.5.2/i18n/ru.po-18179-"  dictionary of options (with unspecified options set to their defaults).\n"
mercurial-5.5.2/i18n/ru.po:18180:"  ``$HG_PATS`` is a list of arguments. Hook failure is ignored."
mercurial-5.5.2/i18n/ru.po-18181-msgstr ""
##############################################
mercurial-5.5.2/i18n/ru.po-18183-"  Выполняется после успешного вызова соответствующей команды.\n"
mercurial-5.5.2/i18n/ru.po:18184:"  Содержимое командной строки передаётся в ``$HG_ARGS``, код\n"
mercurial-5.5.2/i18n/ru.po:18185:"  завершения - в ``$HG_RESULT``. Разобранные аргументы командной\n"
mercurial-5.5.2/i18n/ru.po:18186:"  строки передаются как ``$HG_PATS`` и ``$HG_OPTS``. Они содержат\n"
mercurial-5.5.2/i18n/ru.po-18187-"  строковое представление данных Python, передаваемых <команде>\n"
mercurial-5.5.2/i18n/ru.po:18188:"  внутренней реализацией. ``$HG_OPTS`` - это словарь опций \n"
mercurial-5.5.2/i18n/ru.po-18189-"  (опущенные опции установлены в значения по умолчанию).\n"
mercurial-5.5.2/i18n/ru.po:18190:"  ``$HG_PATS`` - список аргументов. Неудачное завершение хука\n"
mercurial-5.5.2/i18n/ru.po-18191-"  игнорируется."
##############################################
mercurial-5.5.2/i18n/ru.po-18195-"  Run before executing the associated command. The contents of the\n"
mercurial-5.5.2/i18n/ru.po:18196:"  command line are passed as ``$HG_ARGS``. Parsed command line arguments\n"
mercurial-5.5.2/i18n/ru.po:18197:"  are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain string\n"
mercurial-5.5.2/i18n/ru.po:18198:"  representations of the data internally passed to <command>. ``$HG_OPTS``\n"
mercurial-5.5.2/i18n/ru.po-18199-"  is a  dictionary of options (with unspecified options set to their\n"
mercurial-5.5.2/i18n/ru.po:18200:"  defaults). ``$HG_PATS`` is a list of arguments. If the hook returns\n"
mercurial-5.5.2/i18n/ru.po-18201-"  failure, the command doesn't execute and Mercurial returns the failure\n"
##############################################
mercurial-5.5.2/i18n/ru.po-18205-"  Выполняется перед вызовом соответствующей команды.\n"
mercurial-5.5.2/i18n/ru.po:18206:"  Содержимое командной строки передаётся в ``$HG_ARGS``.\n"
mercurial-5.5.2/i18n/ru.po:18207:"  Разобранные аргументы командной строки передаются как ``$HG_PATS``\n"
mercurial-5.5.2/i18n/ru.po:18208:"  и ``$HG_OPTS``. Они содержат строковое представление данных\n"
mercurial-5.5.2/i18n/ru.po:18209:"  Python, передаваемых <команде> внутренней реализацией. ``$HG_OPTS`` -\n"
mercurial-5.5.2/i18n/ru.po-18210-"  это словарь опций (опущенные опции установлены в значения по\n"
mercurial-5.5.2/i18n/ru.po:18211:"  умолчанию).``$HG_PATS`` - список аргументов. Если хук возвращает ошибку,\n"
mercurial-5.5.2/i18n/ru.po-18212-"  команда не выполняется, и Mercurial возвращает код ошибки."
##############################################
mercurial-5.5.2/i18n/ru.po-18218-"  cause the push, pull or unbundle to fail. URL from which changes\n"
mercurial-5.5.2/i18n/ru.po:18219:"  will come is in ``$HG_URL``."
mercurial-5.5.2/i18n/ru.po-18220-msgstr ""
##############################################
mercurial-5.5.2/i18n/ru.po-18224-"  операции, ненулевой код возврата заставляет push, pull или unbundle\n"
mercurial-5.5.2/i18n/ru.po:18225:"  завершиться с ошибкой. URL источника изменений содержится в ``$HG_URL``."
mercurial-5.5.2/i18n/ru.po-18226-
##############################################
mercurial-5.5.2/i18n/ru.po-18230-"  commit to proceed. Non-zero status will cause the commit to fail.\n"
mercurial-5.5.2/i18n/ru.po:18231:"  Parent changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/ru.po-18232-msgstr ""
##############################################
mercurial-5.5.2/i18n/ru.po-18235-"  разрешает продолжение операции, ненулевой код возврата заставляет\n"
mercurial-5.5.2/i18n/ru.po:18236:"  commit завершиться с ошибкой. ID родителей передаются в ``$HG_PARENT1``\n"
mercurial-5.5.2/i18n/ru.po:18237:"  и ``$HG_PARENT2``."
mercurial-5.5.2/i18n/ru.po-18238-
##############################################
mercurial-5.5.2/i18n/ru.po-18242-"  repository. Non-zero status will cause failure. The key namespace is\n"
mercurial-5.5.2/i18n/ru.po:18243:"  in ``$HG_NAMESPACE``."
mercurial-5.5.2/i18n/ru.po-18244-msgstr ""
##############################################
mercurial-5.5.2/i18n/ru.po-18247-"  хранилища. Ненулевой код возврата вызовет завершение с ошибкой.\n"
mercurial-5.5.2/i18n/ru.po:18248:"  Пространство имен ключа передается в ``$HG_NAMESPACE``."
mercurial-5.5.2/i18n/ru.po-18249-
##############################################
mercurial-5.5.2/i18n/ru.po-18256-"  just copy files instead then. Source of operation is in\n"
mercurial-5.5.2/i18n/ru.po:18257:"  ``$HG_SOURCE``. If \"serve\", operation is happening on behalf of remote\n"
mercurial-5.5.2/i18n/ru.po-18258-"  SSH or HTTP repository. If \"push\", \"pull\" or \"bundle\", operation\n"
##############################################
mercurial-5.5.2/i18n/ru.po-18266-"  т.к. в этом случае можно просто скопировать файлы. Источник операции\n"
mercurial-5.5.2/i18n/ru.po:18267:"  передается в ``$HG_SOURCE``. Для \"serve\" операция выполняется\n"
mercurial-5.5.2/i18n/ru.po-18268-"  на стороне отдалённого SSH или HTTP хранилища. Для \"push\", \"pull\"\n"
##############################################
mercurial-5.5.2/i18n/ru.po-18274-"  repository. Non-zero status will cause the key to be rejected. The\n"
mercurial-5.5.2/i18n/ru.po:18275:"  key namespace is in ``$HG_NAMESPACE``, the key is in ``$HG_KEY``,\n"
mercurial-5.5.2/i18n/ru.po:18276:"  the old value (if any) is in ``$HG_OLD``, and the new value is in\n"
mercurial-5.5.2/i18n/ru.po:18277:"  ``$HG_NEW``."
mercurial-5.5.2/i18n/ru.po-18278-msgstr ""
##############################################
mercurial-5.5.2/i18n/ru.po-18281-"  хранилище. Ненулевой код возврата отменит добавление ключа.\n"
mercurial-5.5.2/i18n/ru.po:18282:"  Пространство имен ключа передается в ``$HG_NAMESPACE``, ключ в\n"
mercurial-5.5.2/i18n/ru.po:18283:"  ``$HG_KEY``, предыдущее значение (если есть) в ``$HG_OLD``, новое -\n"
mercurial-5.5.2/i18n/ru.po:18284:"  в ``$HG_NEW``."
mercurial-5.5.2/i18n/ru.po-18285-
##############################################
mercurial-5.5.2/i18n/ru.po-18289-"  created. Non-zero status will cause the tag to fail. ID of\n"
mercurial-5.5.2/i18n/ru.po:18290:"  changeset to tag is in ``$HG_NODE``. Name of tag is in ``$HG_TAG``. Tag "
mercurial-5.5.2/i18n/ru.po-18291-"is\n"
mercurial-5.5.2/i18n/ru.po:18292:"  local if ``$HG_LOCAL=1``, in repository if ``$HG_LOCAL=0``."
mercurial-5.5.2/i18n/ru.po-18293-msgstr ""
##############################################
mercurial-5.5.2/i18n/ru.po-18296-"  метку, ненулевой вызовет завершение с ошибкой. ID помечаемого набора\n"
mercurial-5.5.2/i18n/ru.po:18297:"  изменений передается в ``$HG_NODE``, имя метки - в ``$HG_TAG``.\n"
mercurial-5.5.2/i18n/ru.po:18298:"  Метка является локальной, если ``$HG_LOCAL=1``, записывается в\n"
mercurial-5.5.2/i18n/ru.po:18299:"  хранилище, если ``$HG_LOCAL=0``."
mercurial-5.5.2/i18n/ru.po-18300-
##############################################
mercurial-5.5.2/i18n/ru.po-18306-"  before accepting them. Passed the ID of the first new changeset in\n"
mercurial-5.5.2/i18n/ru.po:18307:"  ``$HG_NODE``. Exit status 0 allows the transaction to commit. Non-zero\n"
mercurial-5.5.2/i18n/ru.po-18308-"  status will cause the transaction to be rolled back and the push,\n"
mercurial-5.5.2/i18n/ru.po-18309-"  pull or unbundle will fail. URL that was source of changes is in\n"
mercurial-5.5.2/i18n/ru.po:18310:"  ``$HG_URL``."
mercurial-5.5.2/i18n/ru.po-18311-msgstr ""
##############################################
mercurial-5.5.2/i18n/ru.po-18316-"  изменения, перед тем, как принять их. ID первого добавляемого\n"
mercurial-5.5.2/i18n/ru.po:18317:"  набора изменений передается в ``$HG_NODE``. Код возврата 0 разрешает\n"
mercurial-5.5.2/i18n/ru.po-18318-"  зафиксировать транзакцию, ненулевой откатывает ее и заставляет\n"
mercurial-5.5.2/i18n/ru.po-18319-"  pull, push или unbundle завершиться с ошибкой. URL источника\n"
mercurial-5.5.2/i18n/ru.po:18320:"  изменений передается в ``$HG_URL``."
mercurial-5.5.2/i18n/ru.po-18321-
##############################################
mercurial-5.5.2/i18n/ru.po-18327-"  commit to proceed. Non-zero status will cause the transaction to\n"
mercurial-5.5.2/i18n/ru.po:18328:"  be rolled back. ID of changeset is in ``$HG_NODE``. Parent changeset\n"
mercurial-5.5.2/i18n/ru.po:18329:"  IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/ru.po-18330-msgstr ""
##############################################
mercurial-5.5.2/i18n/ru.po-18335-"  возврата 0 разрешает продолжение фиксации, ненулевой код возврата\n"
mercurial-5.5.2/i18n/ru.po:18336:"  откатит транзакцию. ID набора изменений передается в ``$HG_NODE``.\n"
mercurial-5.5.2/i18n/ru.po:18337:"  ID родителей передаются в ``$HG_PARENT1`` и ``$HG_PARENT2``."
mercurial-5.5.2/i18n/ru.po-18338-
##############################################
mercurial-5.5.2/i18n/ru.po-18342-"  the update to proceed. Non-zero status will prevent the update.\n"
mercurial-5.5.2/i18n/ru.po:18343:"  Changeset ID of first new parent is in ``$HG_PARENT1``. If merge, ID\n"
mercurial-5.5.2/i18n/ru.po:18344:"  of second new parent is in ``$HG_PARENT2``."
mercurial-5.5.2/i18n/ru.po-18345-msgstr ""
##############################################
mercurial-5.5.2/i18n/ru.po-18348-"  позволяет продолжить обновление. Ненулевой код возврата отменит\n"
mercurial-5.5.2/i18n/ru.po:18349:"  обновление. ID первого нового родителя передается в ``$HG_PARENT1``.\n"
mercurial-5.5.2/i18n/ru.po-18350-"  Если выполняется слияние, ID второго нового родителя доступно в\n"
mercurial-5.5.2/i18n/ru.po:18351:"  ``$HG_PARENT2``."
mercurial-5.5.2/i18n/ru.po-18352-
##############################################
mercurial-5.5.2/i18n/ru.po-18355-"  Run after listing pushkeys (like bookmarks) in the repository. The\n"
mercurial-5.5.2/i18n/ru.po:18356:"  key namespace is in ``$HG_NAMESPACE``. ``$HG_VALUES`` is a\n"
mercurial-5.5.2/i18n/ru.po-18357-"  dictionary containing the keys and values."
##############################################
mercurial-5.5.2/i18n/ru.po-18360-"  Выполняется после вывода ключей хранилища (например, закладок).\n"
mercurial-5.5.2/i18n/ru.po:18361:"  Пространство имен ключа доступно в ``$HG_NAMESPACE``. ``$HG_VALUES`` -\n"
mercurial-5.5.2/i18n/ru.po-18362-"  словарь, содержащий ключи и значения."
##############################################
mercurial-5.5.2/i18n/ru.po-18366-"  Run after a pushkey (like a bookmark) is added to the\n"
mercurial-5.5.2/i18n/ru.po:18367:"  repository. The key namespace is in ``$HG_NAMESPACE``, the key is in\n"
mercurial-5.5.2/i18n/ru.po:18368:"  ``$HG_KEY``, the old value (if any) is in ``$HG_OLD``, and the new\n"
mercurial-5.5.2/i18n/ru.po:18369:"  value is in ``$HG_NEW``."
mercurial-5.5.2/i18n/ru.po-18370-msgstr ""
##############################################
mercurial-5.5.2/i18n/ru.po-18372-"  Выполняется после того, как ключ (например, закладка) добавлен\n"
mercurial-5.5.2/i18n/ru.po:18373:"  в хранилище. Пространство имен ключа доступно в ``$HG_NAMESPACE``,\n"
mercurial-5.5.2/i18n/ru.po:18374:"  ключ в - ``$HG_KEY``, старое значение (если есть) - в ``$HG_OLD``,\n"
mercurial-5.5.2/i18n/ru.po:18375:"  новое значение - в ``$HG_NEW``."
mercurial-5.5.2/i18n/ru.po-18376-
##############################################
mercurial-5.5.2/i18n/ru.po-18378-"``tag``\n"
mercurial-5.5.2/i18n/ru.po:18379:"  Run after a tag is created. ID of tagged changeset is in ``$HG_NODE``.\n"
mercurial-5.5.2/i18n/ru.po:18380:"  Name of tag is in ``$HG_TAG``. Tag is local if ``$HG_LOCAL=1``, in\n"
mercurial-5.5.2/i18n/ru.po:18381:"  repository if ``$HG_LOCAL=0``."
mercurial-5.5.2/i18n/ru.po-18382-msgstr ""
##############################################
mercurial-5.5.2/i18n/ru.po-18384-"  Выполняется после создания метки. ID помечаемого набора изменений\n"
mercurial-5.5.2/i18n/ru.po:18385:"  передается в ``$HG_TAG``. Метка является локальной, если\n"
mercurial-5.5.2/i18n/ru.po:18386:"  ``$HG_LOCAL=1``, но создается в хранилище если ``$HG_LOCAL=0``."
mercurial-5.5.2/i18n/ru.po-18387-
##############################################
mercurial-5.5.2/i18n/ru.po-18390-"  Run after updating the working directory. Changeset ID of first\n"
mercurial-5.5.2/i18n/ru.po:18391:"  new parent is in ``$HG_PARENT1``. If merge, ID of second new parent is\n"
mercurial-5.5.2/i18n/ru.po:18392:"  in ``$HG_PARENT2``. If the update succeeded, ``$HG_ERROR=0``. If the\n"
mercurial-5.5.2/i18n/ru.po:18393:"  update failed (e.g. because conflicts not resolved), ``$HG_ERROR=1``."
mercurial-5.5.2/i18n/ru.po-18394-msgstr ""
##############################################
mercurial-5.5.2/i18n/ru.po-18396-"  Выполняется после обновления рабочего каталога. ID первого нового\n"
mercurial-5.5.2/i18n/ru.po:18397:"  родителя передается в ``$HG_PARENT1``. Если выполняется слияние,\n"
mercurial-5.5.2/i18n/ru.po:18398:"  ID второго родителя доступен в ``$HG_PARENT2``. Если обновление\n"
mercurial-5.5.2/i18n/ru.po:18399:"  прошло успешно, ``$HG_ERROR=0``. При неудаче (например, если есть\n"
mercurial-5.5.2/i18n/ru.po:18400:"  неразрешенные конфликты) ``$HG_ERROR=1``."
mercurial-5.5.2/i18n/ru.po-18401-
##############################################
mercurial-5.5.2/i18n/ru.po-18417-"   Environment variables with empty values may not be passed to\n"
mercurial-5.5.2/i18n/ru.po:18418:"   hooks on platforms such as Windows. As an example, ``$HG_PARENT2``\n"
mercurial-5.5.2/i18n/ru.po-18419-"   will have an empty value under Unix-like platforms for non-merge\n"
##############################################
mercurial-5.5.2/i18n/ru.po-18423-"   передаться в хуки на платформах вроде Windows. Например,\n"
mercurial-5.5.2/i18n/ru.po:18424:"   ``$HG_PARENT2`` будет иметь пустое значение в Unix-подобных\n"
mercurial-5.5.2/i18n/ru.po-18425-"   ОС, а под Windows вообще будет недоступна."
##############################################
mercurial-5.5.2/i18n/ru.po-18662-"  files being merged as well as the output file through these\n"
mercurial-5.5.2/i18n/ru.po:18663:"  variables: ``$base``, ``$local``, ``$other``, ``$output``. The meaning\n"
mercurial-5.5.2/i18n/ru.po:18664:"  of ``$local`` and ``$other`` can vary depending on which action is being\n"
mercurial-5.5.2/i18n/ru.po:18665:"  performed. During and update or merge, ``$local`` represents the original\n"
mercurial-5.5.2/i18n/ru.po:18666:"  state of the file, while ``$other`` represents the commit you are "
mercurial-5.5.2/i18n/ru.po-18667-"updating\n"
mercurial-5.5.2/i18n/ru.po:18668:"  to or the commit you are merging with. During a rebase ``$local``\n"
mercurial-5.5.2/i18n/ru.po:18669:"  represents the destination of the rebase, and ``$other`` represents the\n"
mercurial-5.5.2/i18n/ru.po-18670-"  commit being rebased.\n"
mercurial-5.5.2/i18n/ru.po:18671:"  Default: ``$local $base $other``"
mercurial-5.5.2/i18n/ru.po-18672-msgstr ""
##############################################
mercurial-5.5.2/i18n/ru.po-18675-"  Следующие переменные обозначают сливаемые и выходной файлы: \n"
mercurial-5.5.2/i18n/ru.po:18676:"  ``$base``, ``$local``, ``$other``, ``$output`` \n"
mercurial-5.5.2/i18n/ru.po-18677-"  (``базовый``, ``локальный``, ``другой``, ``выход``).\n"
mercurial-5.5.2/i18n/ru.po:18678:"  Значение ``$local`` и ``$other`` может меняться в зависимости от "
mercurial-5.5.2/i18n/ru.po-18679-"действия.\n"
mercurial-5.5.2/i18n/ru.po:18680:"  Во время обновления или слияния ``$local`` представляет исходное\n"
mercurial-5.5.2/i18n/ru.po:18681:"  состояние файла, ``$other`` представляет ревизию, на которую вы\n"
mercurial-5.5.2/i18n/ru.po-18682-"  обновляетесь, или ревизию, с которой производится слияние. Во\n"
mercurial-5.5.2/i18n/ru.po:18683:"  время перебазирования, ``$local`` представляет ревизию назначения,\n"
mercurial-5.5.2/i18n/ru.po:18684:"  а ``$other`` представляет перебазируемый набор изменений.  По умолчанию: ``"
mercurial-5.5.2/i18n/ru.po-18685-"$local $base $other``"
##############################################
mercurial-5.5.2/i18n/ru.po-19364-"group with name ``*``. These settings must be placed in an\n"
mercurial-5.5.2/i18n/ru.po:19365:"*already-trusted file* to take effect, such as ``$HOME/.hgrc`` of the\n"
mercurial-5.5.2/i18n/ru.po-19366-"user or service running Mercurial."
##############################################
mercurial-5.5.2/i18n/ru.po-19370-"добавьте группу или пользователя с именем ``*``. Эти настройки должны\n"
mercurial-5.5.2/i18n/ru.po:19371:"быть в *уже доверенном файле*, например ``$HOME/.hgrc`` пользователя\n"
mercurial-5.5.2/i18n/ru.po-19372-"или службы, под которым запущен Mercurial."
##############################################
mercurial-5.5.2/i18n/ru.po-19415-"    Whether to prompt for a username when committing. If True, and\n"
mercurial-5.5.2/i18n/ru.po:19416:"    neither ``$HGUSER`` nor ``$EMAIL`` has been specified, then the user "
mercurial-5.5.2/i18n/ru.po-19417-"will\n"
##############################################
mercurial-5.5.2/i18n/ru.po-19423-"    Спрашивать или нет имя пользователя при фиксации. Если True, и не\n"
mercurial-5.5.2/i18n/ru.po:19424:"    установлены ни ``$HGUSER``, ни ``$EMAIL``, пользователю будет "
mercurial-5.5.2/i18n/ru.po-19425-"предложено\n"
##############################################
mercurial-5.5.2/i18n/ru.po-19450-"``editor``\n"
mercurial-5.5.2/i18n/ru.po:19451:"    The editor to use during a commit. Default is ``$EDITOR`` or ``vi``."
mercurial-5.5.2/i18n/ru.po-19452-msgstr ""
mercurial-5.5.2/i18n/ru.po-19453-"``editor``\n"
mercurial-5.5.2/i18n/ru.po:19454:"    Редактор, вызываемый при фиксации. По умолчанию ``$EDITOR`` or ``vi``."
mercurial-5.5.2/i18n/ru.po-19455-
##############################################
mercurial-5.5.2/i18n/ru.po-19682-"    Typically a person's name and email address, e.g. ``Fred Widget\n"
mercurial-5.5.2/i18n/ru.po:19683:"    <fred@example.com>``. Default is ``$EMAIL`` or ``username@hostname``. "
mercurial-5.5.2/i18n/ru.po-19684-"If\n"
mercurial-5.5.2/i18n/ru.po-19685-"    the username in hgrc is empty, it has to be specified manually or\n"
mercurial-5.5.2/i18n/ru.po:19686:"    in a different hgrc file (e.g. ``$HOME/.hgrc``, if the admin set\n"
mercurial-5.5.2/i18n/ru.po-19687-"    ``username =``  in the system hgrc). Environment variables in the\n"
##############################################
mercurial-5.5.2/i18n/ru.po-19692-"    состоит из имени человека и его электронной почты, например\n"
mercurial-5.5.2/i18n/ru.po:19693:"    ``Василий Пупкин <vasya@example.com>``. По умолчанию ``$EMAIL``\n"
mercurial-5.5.2/i18n/ru.po-19694-"    или ``пользователь@хост``. Если имя пользователя не задано в hgrc,\n"
mercurial-5.5.2/i18n/ru.po-19695-"    оно должно быть указано вручную или в другом файле hgrc (например,\n"
mercurial-5.5.2/i18n/ru.po:19696:"    в ``$HOME/.hgrc``, если администратор задал ``username =`` в\n"
mercurial-5.5.2/i18n/ru.po-19697-"    общесистемном файле настроек). Переменные окружения раскрываются\n"
##############################################
mercurial-5.5.2/i18n/ru.po-19991-"    Name or email address of the person in charge of the repository.\n"
mercurial-5.5.2/i18n/ru.po:19992:"    Defaults to ui.username or ``$EMAIL`` or \"unknown\" if unset or empty."
mercurial-5.5.2/i18n/ru.po-19993-msgstr ""
##############################################
mercurial-5.5.2/i18n/ru.po-19995-"    Имя или электронный адрес человека, ответственного за хранилище.\n"
mercurial-5.5.2/i18n/ru.po:19996:"    По умолчанию используется ui.username или ``$EMAIL`` или \"unknown\",\n"
mercurial-5.5.2/i18n/ru.po-19997-"    если не задан или пустой."
##############################################
mercurial-5.5.2/i18n/ru.po-21893-msgid ""
mercurial-5.5.2/i18n/ru.po:21894:"``/etc/mercurial/hgrc``, ``$HOME/.hgrc``, ``.hg/hgrc``\n"
mercurial-5.5.2/i18n/ru.po-21895-"    This file contains defaults and configuration. Values in\n"
mercurial-5.5.2/i18n/ru.po:21896:"    ``.hg/hgrc`` override those in ``$HOME/.hgrc``, and these override\n"
mercurial-5.5.2/i18n/ru.po-21897-"    settings made in the global ``/etc/mercurial/hgrc`` configuration.\n"
##############################################
mercurial-5.5.2/i18n/ru.po-21900-msgstr ""
mercurial-5.5.2/i18n/ru.po:21901:"``/etc/mercurial/hgrc``, ``$HOME/.hgrc``, ``.hg/hgrc``\n"
mercurial-5.5.2/i18n/ru.po-21902-"    Эти файлы содержат настройки Mercurial. Значения в\n"
mercurial-5.5.2/i18n/ru.po:21903:"    ``.hg/hgrc`` переопределяют настройки из ``$HOME/.hgrc``, которые в\n"
mercurial-5.5.2/i18n/ru.po-21904-"    свою очередь переопределяют настройки из ``/etc/mercurial/hgrc``.\n"
##############################################
mercurial-5.5.2/i18n/ru.po-23215-"in the ``revsetalias`` section of a Mercurial configuration file. Arguments\n"
mercurial-5.5.2/i18n/ru.po:23216:"of the form `$1`, `$2`, etc. are substituted from the alias into the\n"
mercurial-5.5.2/i18n/ru.po-23217-"definition."
mercurial-5.5.2/i18n/ru.po-23218-msgstr ""
mercurial-5.5.2/i18n/ru.po:23219:"в секции ``revsetalias`` конфига Mercurial. Аргументы вида `$1`, `$2`\n"
mercurial-5.5.2/i18n/ru.po-23220-"и т.д. передаются из псевдонима в его определение."
##############################################
mercurial-5.5.2/i18n/ru.po-27635-#~ "  files being merged as well as the output file through these\n"
mercurial-5.5.2/i18n/ru.po:27636:#~ "  variables: ``$base``, ``$local``, ``$other``, ``$output``.\n"
mercurial-5.5.2/i18n/ru.po:27637:#~ "  Default: ``$local $base $other``"
mercurial-5.5.2/i18n/ru.po-27638-#~ msgstr ""
##############################################
mercurial-5.5.2/i18n/ru.po-27641-#~ "  сливаемым файлам и результату слияния через эти переменные:\n"
mercurial-5.5.2/i18n/ru.po:27642:#~ "  ``$base``, ``$local``, ``$other``, ``$output``.\n"
mercurial-5.5.2/i18n/ru.po:27643:#~ "  По умолчанию: ``$local $base $other``"
mercurial-5.5.2/i18n/ru.po-27644-
##############################################
mercurial-5.5.2/i18n/ja.po-22908-
mercurial-5.5.2/i18n/ja.po:22909:msgid "  - ``$HOME/.hgrc`` (on Unix, Plan9)"
mercurial-5.5.2/i18n/ja.po:22910:msgstr "  - ``$HOME/.hgrc`` (on Unix, Plan9)"
mercurial-5.5.2/i18n/ja.po-22911-
##############################################
mercurial-5.5.2/i18n/ja.po-22929-"  - ``<repo>/.hg/hgrc`` (per-repository)\n"
mercurial-5.5.2/i18n/ja.po:22930:"  - ``$HOME/.hgrc`` (per-user)\n"
mercurial-5.5.2/i18n/ja.po:22931:"  - ``${XDG_CONFIG_HOME:-$HOME/.config}/hg/hgrc`` (per-user)\n"
mercurial-5.5.2/i18n/ja.po-22932-"  - ``<install-root>/etc/mercurial/hgrc`` (per-installation)\n"
##############################################
mercurial-5.5.2/i18n/ja.po-22938-"  - ``<リポジトリ>/.hg/hgrc`` (リポジトリ毎設定)\n"
mercurial-5.5.2/i18n/ja.po:22939:"  - ``$HOME/.hgrc`` (ユーザ毎設定)\n"
mercurial-5.5.2/i18n/ja.po:22940:"  - ``${XDG_CONFIG_HOME:-$HOME/.config}/hg/hgrc`` (ユーザ毎設定)\n"
mercurial-5.5.2/i18n/ja.po-22941-"  - ``<インストール先>/etc/mercurial/hgrc`` (インストール毎設定)\n"
##############################################
mercurial-5.5.2/i18n/ja.po-22988-"  - ``<repo>/.hg/hgrc`` (per-repository)\n"
mercurial-5.5.2/i18n/ja.po:22989:"  - ``$home/lib/hgrc`` (per-user)\n"
mercurial-5.5.2/i18n/ja.po-22990-"  - ``<install-root>/lib/mercurial/hgrc`` (per-installation)\n"
##############################################
mercurial-5.5.2/i18n/ja.po-22996-"  - ``<リポジトリ>/.hg/hgrc`` (リポジトリ毎設定)\n"
mercurial-5.5.2/i18n/ja.po:22997:"  - ``$home/lib/hgrc`` (ユーザ毎設定)\n"
mercurial-5.5.2/i18n/ja.po-22998-"  - ``<インストール先>/lib/mercurial/hgrc`` (インストール毎設定)\n"
##############################################
mercurial-5.5.2/i18n/ja.po-23314-"commands (or aliases), optionally including arguments. Positional\n"
mercurial-5.5.2/i18n/ja.po:23315:"arguments in the form of ``$1``, ``$2``, etc. in the alias definition\n"
mercurial-5.5.2/i18n/ja.po-23316-"are expanded by Mercurial before execution. Positional arguments not\n"
mercurial-5.5.2/i18n/ja.po:23317:"already used by ``$N`` in the definition are put at the end of the\n"
mercurial-5.5.2/i18n/ja.po-23318-"command to be executed."
##############################################
mercurial-5.5.2/i18n/ja.po-23321-"自分独自のコマンドを作成可能です。\n"
mercurial-5.5.2/i18n/ja.po:23322:"別名定義における ``$1`` や ``$2`` のような位置指定引数は、\n"
mercurial-5.5.2/i18n/ja.po-23323-"実行前に Mercurial によって置換されます。\n"
mercurial-5.5.2/i18n/ja.po:23324:"別名定義中で ``$N`` 形式による参照の無かった全ての引数は、\n"
mercurial-5.5.2/i18n/ja.po-23325-"実行されるコマンドの末尾に付与されます。"
##############################################
mercurial-5.5.2/i18n/ja.po-23386-msgid ""
mercurial-5.5.2/i18n/ja.po:23387:"Positional arguments like ``$1``, ``$2``, etc. in the alias definition\n"
mercurial-5.5.2/i18n/ja.po-23388-"expand to the command arguments. Unmatched arguments are\n"
mercurial-5.5.2/i18n/ja.po:23389:"removed. ``$0`` expands to the alias name and ``$@`` expands to all\n"
mercurial-5.5.2/i18n/ja.po:23390:"arguments separated by a space. ``\"$@\"`` (with quotes) expands to all\n"
mercurial-5.5.2/i18n/ja.po-23391-"arguments quoted individually and separated by a space. These expansions\n"
##############################################
mercurial-5.5.2/i18n/ja.po-23393-msgstr ""
mercurial-5.5.2/i18n/ja.po:23394:"別名定義での ``$1`` や ``$2`` 等の位置指定引数は、 別名コマンド実行の際に、\n"
mercurial-5.5.2/i18n/ja.po-23395-"コマンド行で指定された、 対応する引数で置換されます。 対応引数が無い場合、\n"
mercurial-5.5.2/i18n/ja.po:23396:"引数不足で処理が中断されます。 ``$0`` はコマンド別名そのもの、``$@``\n"
mercurial-5.5.2/i18n/ja.po-23397-"は全引数を空白区切りしたもので、それぞれ置換されます。 引用符で囲まれた\n"
mercurial-5.5.2/i18n/ja.po:23398:"``\"$@\"`` は、 引数が個別に引用符で囲まれる点が ``$@`` と異なります。\n"
mercurial-5.5.2/i18n/ja.po-23399-"これら引数の置換は、 シェルによるコマンド行解釈よりも、 前に実施されます。"
##############################################
mercurial-5.5.2/i18n/ja.po-23401-msgid ""
mercurial-5.5.2/i18n/ja.po:23402:"Shell aliases are executed in an environment where ``$HG`` expands to\n"
mercurial-5.5.2/i18n/ja.po-23403-"the path of the Mercurial that was used to execute the alias. This is\n"
##############################################
mercurial-5.5.2/i18n/ja.po-23405-"alias, as was done above for the purge alias. In addition,\n"
mercurial-5.5.2/i18n/ja.po:23406:"``$HG_ARGS`` expands to the arguments given to Mercurial. In the ``hg\n"
mercurial-5.5.2/i18n/ja.po:23407:"echo foo`` call above, ``$HG_ARGS`` would expand to ``echo foo``."
mercurial-5.5.2/i18n/ja.po-23408-msgstr ""
mercurial-5.5.2/i18n/ja.po:23409:"シェル別名では、 環境変数 ``$HG`` が、 別名コマンドを実行する\n"
mercurial-5.5.2/i18n/ja.po-23410-"Mercurial のパスに置換されます。\n"
##############################################
mercurial-5.5.2/i18n/ja.po-23412-"Mercurial を実行する場合に有用です。\n"
mercurial-5.5.2/i18n/ja.po:23413:"更に、 環境変数 ``$HG_ARGS`` は Mercurial への引数に置換されますので、\n"
mercurial-5.5.2/i18n/ja.po-23414-"先述した ``hg echo foo`` では、\n"
mercurial-5.5.2/i18n/ja.po:23415:"``$HG_ARGS`` は ``echo foo`` に置換されます。"
mercurial-5.5.2/i18n/ja.po-23416-
##############################################
mercurial-5.5.2/i18n/ja.po-23597-"    be prompted for it. Environment variables are expanded in the\n"
mercurial-5.5.2/i18n/ja.po:23598:"    username letting you do ``foo.username = $USER``. If the URI\n"
mercurial-5.5.2/i18n/ja.po-23599-"    includes a username, only ``[auth]`` entries with a matching\n"
##############################################
mercurial-5.5.2/i18n/ja.po-23604-"    basic または digest 認証が要求された場合、 対話的入力が要求されます。\n"
mercurial-5.5.2/i18n/ja.po:23605:"    ``foo.username = $USER`` 形式の記述では、 環境変数が置換されます。\n"
mercurial-5.5.2/i18n/ja.po-23606-"    URI がユーザ名を含む場合、 選択対象となる ``[auth]`` のエントリは、\n"
##############################################
mercurial-5.5.2/i18n/ja.po-24320-"    first character set to which conversion from local encoding\n"
mercurial-5.5.2/i18n/ja.po:24321:"    (``$HGENCODING``, ``ui.fallbackencoding``) succeeds. If correct\n"
mercurial-5.5.2/i18n/ja.po-24322-"    conversion fails, the text in question is sent as is.\n"
##############################################
mercurial-5.5.2/i18n/ja.po-24327-"    電子メールのアドレス指定、 ヘッダ群、 およびパッチ 「以外」\n"
mercurial-5.5.2/i18n/ja.po:24328:"    のマルチパート部分は、 ローカル符号化方式 (``$HGENCODING`` または\n"
mercurial-5.5.2/i18n/ja.po-24329-"    ``ui.fallbackencoding`` で指定) からの変換に成功した、\n"
##############################################
mercurial-5.5.2/i18n/ja.po-24339-"    3. ``ui.fallbackencoding``: if not in email.charsets\n"
mercurial-5.5.2/i18n/ja.po:24340:"    4. ``$HGENCODING``: if not in email.charsets\n"
mercurial-5.5.2/i18n/ja.po-24341-"    5. ``utf-8``: always last, regardless of settings"
##############################################
mercurial-5.5.2/i18n/ja.po-24345-"    3. ``ui.fallbackencoding``: email.charsets で指定されていない場合。\n"
mercurial-5.5.2/i18n/ja.po:24346:"    4. ``$HGENCODING``: email.charsets で指定されていない場合。\n"
mercurial-5.5.2/i18n/ja.po-24347-"    5. ``utf-8``: 設定に関わらず常に最後"
##############################################
mercurial-5.5.2/i18n/ja.po-24617-"additional information. For each hook below, the environment variables\n"
mercurial-5.5.2/i18n/ja.po:24618:"it is passed are listed with names in the form ``$HG_foo``. The\n"
mercurial-5.5.2/i18n/ja.po:24619:"``$HG_HOOKTYPE`` and ``$HG_HOOKNAME`` variables are set for all hooks.\n"
mercurial-5.5.2/i18n/ja.po-24620-"They contain the type of hook which triggered the run and the full name\n"
mercurial-5.5.2/i18n/ja.po-24621-"of the hook in the config, respectively. In the example above, this will\n"
mercurial-5.5.2/i18n/ja.po:24622:"be ``$HG_HOOKTYPE=incoming`` and ``$HG_HOOKNAME=incoming.email``."
mercurial-5.5.2/i18n/ja.po-24623-msgstr ""
mercurial-5.5.2/i18n/ja.po-24624-"多くのフックは、 環境変数に付加的情報が設定された上で実行されます。\n"
mercurial-5.5.2/i18n/ja.po:24625:"当該環境変数は ``$HG_foo`` 形式の名前を持ちます。 ``$HG_HOOKTYPE`` と\n"
mercurial-5.5.2/i18n/ja.po:24626:"``$HG_HOOKNAME`` はフック実行時に常に設定されます。 環境変数はそれぞれ、\n"
mercurial-5.5.2/i18n/ja.po-24627-"フックの実行契機種別と、 フック自身の設定ファイル上の名前が設定されます。\n"
mercurial-5.5.2/i18n/ja.po:24628:"例えば ``$HG_HOOKTYPE=incoming`` と ``$HG_HOOKNAME=incoming.email``\n"
mercurial-5.5.2/i18n/ja.po-24629-"といった具合です。"
##############################################
mercurial-5.5.2/i18n/ja.po-24635-"of\n"
mercurial-5.5.2/i18n/ja.po:24636:"  the first new changeset is in ``$HG_NODE`` and last is in ``"
mercurial-5.5.2/i18n/ja.po-24637-"$HG_NODE_LAST``.\n"
mercurial-5.5.2/i18n/ja.po:24638:"  The URL from which changes came is in ``$HG_URL``."
mercurial-5.5.2/i18n/ja.po-24639-msgstr ""
##############################################
mercurial-5.5.2/i18n/ja.po-24641-"  push、 pull、 unbundle によるリビジョン群の追加完了時に実行されます。\n"
mercurial-5.5.2/i18n/ja.po:24642:"  新規追加リビジョン群の最初の ID が ``$HG_NODE`` に、 最後の ID が\n"
mercurial-5.5.2/i18n/ja.po:24643:"  ``$HG_NODE_LAST`` に設定されます。 取り込み元 URL が ``$HG_URL``\n"
mercurial-5.5.2/i18n/ja.po-24644-"  に設定されます。 (※ 訳注: 複数リビジョン一括追加時の ``changegroup``\n"
##############################################
mercurial-5.5.2/i18n/ja.po-24650-"  Run after a changeset has been created in the local repository. The ID\n"
mercurial-5.5.2/i18n/ja.po:24651:"  of the newly created changeset is in ``$HG_NODE``. Parent changeset\n"
mercurial-5.5.2/i18n/ja.po:24652:"  IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/ja.po-24653-msgstr ""
##############################################
mercurial-5.5.2/i18n/ja.po-24655-"  手元のリポジトリにおける新規リビジョン作成完了時に実行されます。\n"
mercurial-5.5.2/i18n/ja.po:24656:"  新規作成リビジョンの ID が ``$HG_NODE`` に、親リビジョンの ID が\n"
mercurial-5.5.2/i18n/ja.po:24657:"  ``$HG_PARENT1`` および ``$HG_PARENT2`` に設定されます。"
mercurial-5.5.2/i18n/ja.po-24658-
##############################################
mercurial-5.5.2/i18n/ja.po-24663-"  the local repository. The ID of the newly arrived changeset is in\n"
mercurial-5.5.2/i18n/ja.po:24664:"  ``$HG_NODE``. The URL that was source of the changes is in ``$HG_URL``."
mercurial-5.5.2/i18n/ja.po-24665-msgstr ""
##############################################
mercurial-5.5.2/i18n/ja.po-24667-"  push、 pull、 unbundle によるリビジョンの追加完了時に実行されます。\n"
mercurial-5.5.2/i18n/ja.po:24668:"  新規追加リビジョンの最初の ID が ``$HG_NODE`` に、\n"
mercurial-5.5.2/i18n/ja.po:24669:"  追加リビジョンの取り込み元 URL が ``$HG_URL`` に設定されます。\n"
mercurial-5.5.2/i18n/ja.po-24670-"  (※ 訳注: 複数リビジョン一括追加時の ``changegroup``\n"
##############################################
mercurial-5.5.2/i18n/ja.po-24676-"  Run after sending changes from the local repository to another. The ID of\n"
mercurial-5.5.2/i18n/ja.po:24677:"  first changeset sent is in ``$HG_NODE``. The source of operation is in\n"
mercurial-5.5.2/i18n/ja.po:24678:"  ``$HG_SOURCE``. Also see :hg:`help config.hooks.preoutgoing`."
mercurial-5.5.2/i18n/ja.po-24679-msgstr ""
##############################################
mercurial-5.5.2/i18n/ja.po-24681-"  他リポジトリへの変更反映完了後に実行されます。\n"
mercurial-5.5.2/i18n/ja.po:24682:"  新規追加リビジョン群の最初の ID が ``$HG_NODE`` に、\n"
mercurial-5.5.2/i18n/ja.po:24683:"  操作実施契機が ``$HG_SOURCE`` に設定されます。\n"
mercurial-5.5.2/i18n/ja.po-24684-"  :hg:`help config.hooks.preoutgoing` フックの説明も参照してください。"
##############################################
mercurial-5.5.2/i18n/ja.po-24688-"  Run after successful invocations of the associated command. The\n"
mercurial-5.5.2/i18n/ja.po:24689:"  contents of the command line are passed as ``$HG_ARGS`` and the result\n"
mercurial-5.5.2/i18n/ja.po:24690:"  code in ``$HG_RESULT``. Parsed command line arguments are passed as\n"
mercurial-5.5.2/i18n/ja.po:24691:"  ``$HG_PATS`` and ``$HG_OPTS``. These contain string representations of\n"
mercurial-5.5.2/i18n/ja.po:24692:"  the python data internally passed to <command>. ``$HG_OPTS`` is a\n"
mercurial-5.5.2/i18n/ja.po-24693-"  dictionary of options (with unspecified options set to their defaults).\n"
mercurial-5.5.2/i18n/ja.po:24694:"  ``$HG_PATS`` is a list of arguments. Hook failure is ignored."
mercurial-5.5.2/i18n/ja.po-24695-msgstr ""
##############################################
mercurial-5.5.2/i18n/ja.po-24697-"  指定コマンドが正常終了した際に実行されます。\n"
mercurial-5.5.2/i18n/ja.po:24698:"  当該コマンド実行の引数が ``$HG_ARGS`` に、\n"
mercurial-5.5.2/i18n/ja.po:24699:"  終了コードが ``$HG_RESULT`` に設定されます。\n"
mercurial-5.5.2/i18n/ja.po-24700-"  当該コマンドの内部処理に渡される、 コマンド実行時引数の解析結果が、\n"
mercurial-5.5.2/i18n/ja.po:24701:"  ``$HG_PATS`` および ``$HG_OPTS`` に設定されますが、\n"
mercurial-5.5.2/i18n/ja.po-24702-"  これらに設定される値は、 内部的な Python データ形式の文字列です。\n"
mercurial-5.5.2/i18n/ja.po:24703:"  ``$HG_OPTS`` はオプションの辞書形式 (無指定オプションは、\n"
mercurial-5.5.2/i18n/ja.po:24704:"  デフォルト値が設定された状態)、 ``$HG_PATS`` は引数のリストです。\n"
mercurial-5.5.2/i18n/ja.po-24705-"  フック自身の実行失敗は無視されます。"
##############################################
mercurial-5.5.2/i18n/ja.po-24709-"  Run after a failed invocation of an associated command. The contents\n"
mercurial-5.5.2/i18n/ja.po:24710:"  of the command line are passed as ``$HG_ARGS``. Parsed command line\n"
mercurial-5.5.2/i18n/ja.po:24711:"  arguments are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain\n"
mercurial-5.5.2/i18n/ja.po-24712-"  string representations of the python data internally passed to\n"
mercurial-5.5.2/i18n/ja.po:24713:"  <command>. ``$HG_OPTS`` is a dictionary of options (with unspecified\n"
mercurial-5.5.2/i18n/ja.po:24714:"  options set to their defaults). ``$HG_PATS`` is a list of arguments.\n"
mercurial-5.5.2/i18n/ja.po-24715-"  Hook failure is ignored."
##############################################
mercurial-5.5.2/i18n/ja.po-24718-"  指定コマンドが異常終了した際に実行されます。\n"
mercurial-5.5.2/i18n/ja.po:24719:"  当該コマンド実行の引数が ``$HG_ARGS`` に設定されます、\n"
mercurial-5.5.2/i18n/ja.po-24720-"  当該コマンドの内部処理に渡される、 コマンド実行時引数の解析結果が、\n"
mercurial-5.5.2/i18n/ja.po:24721:"  ``$HG_PATS`` および ``$HG_OPTS`` に設定されますが、\n"
mercurial-5.5.2/i18n/ja.po-24722-"  これらに設定される値は、 内部的な Python データ形式の文字列です。\n"
mercurial-5.5.2/i18n/ja.po:24723:"  ``$HG_OPTS`` はオプションの辞書形式 (無指定オプションは、\n"
mercurial-5.5.2/i18n/ja.po:24724:"  デフォルト値が設定された状態)、 ``$HG_PATS`` は引数のリストです。\n"
mercurial-5.5.2/i18n/ja.po-24725-"  フック自身の実行失敗は無視されます。"
##############################################
mercurial-5.5.2/i18n/ja.po-24729-"  Run before executing the associated command. The contents of the\n"
mercurial-5.5.2/i18n/ja.po:24730:"  command line are passed as ``$HG_ARGS``. Parsed command line arguments\n"
mercurial-5.5.2/i18n/ja.po:24731:"  are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain string\n"
mercurial-5.5.2/i18n/ja.po:24732:"  representations of the data internally passed to <command>. ``$HG_OPTS``\n"
mercurial-5.5.2/i18n/ja.po-24733-"  is a dictionary of options (with unspecified options set to their\n"
mercurial-5.5.2/i18n/ja.po:24734:"  defaults). ``$HG_PATS`` is a list of arguments. If the hook returns\n"
mercurial-5.5.2/i18n/ja.po-24735-"  failure, the command doesn't execute and Mercurial returns the failure\n"
##############################################
mercurial-5.5.2/i18n/ja.po-24739-"  指定コマンドの実行前に実行されます。\n"
mercurial-5.5.2/i18n/ja.po:24740:"  当該コマンド実行の引数が ``$HG_ARGS`` に設定されます。\n"
mercurial-5.5.2/i18n/ja.po-24741-"  当該コマンドの内部処理に渡される、 コマンド実行時引数の解析結果が、\n"
mercurial-5.5.2/i18n/ja.po:24742:"  ``$HG_PATS`` および ``$HG_OPTS`` に設定されますが、\n"
mercurial-5.5.2/i18n/ja.po-24743-"  これらに設定される値は、 内部的な Python データ形式の文字列です。\n"
mercurial-5.5.2/i18n/ja.po:24744:"  ``$HG_OPTS`` はオプションの辞書形式 (無指定オプションは、\n"
mercurial-5.5.2/i18n/ja.po:24745:"  デフォルト値が設定された状態)、 ``$HG_PATS`` は引数のリストです。\n"
mercurial-5.5.2/i18n/ja.po-24746-"  フック実行が失敗した場合、 当該コマンドは実行されず、\n"
##############################################
mercurial-5.5.2/i18n/ja.po-24754-"  cause the push, pull or unbundle to fail. The URL from which changes\n"
mercurial-5.5.2/i18n/ja.po:24755:"  will come is in ``$HG_URL``."
mercurial-5.5.2/i18n/ja.po-24756-msgstr ""
##############################################
mercurial-5.5.2/i18n/ja.po-24760-"  非 0 の終了コードは、 push、 pull、 unbundle の中断を意味します。\n"
mercurial-5.5.2/i18n/ja.po:24761:"  追加リビジョン群の取り込み元 URL が ``$HG_URL`` に設定されます。"
mercurial-5.5.2/i18n/ja.po-24762-
##############################################
mercurial-5.5.2/i18n/ja.po-24767-"  commit to proceed. A non-zero status will cause the commit to fail.\n"
mercurial-5.5.2/i18n/ja.po:24768:"  Parent changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/ja.po-24769-msgstr ""
##############################################
mercurial-5.5.2/i18n/ja.po-24774-"  親リビジョンの ID が\n"
mercurial-5.5.2/i18n/ja.po:24775:"  ``$HG_PARENT1`` および ``$HG_PARENT2`` に設定されます。"
mercurial-5.5.2/i18n/ja.po-24776-
##############################################
mercurial-5.5.2/i18n/ja.po-24781-"  repository. A non-zero status will cause failure. The key namespace is\n"
mercurial-5.5.2/i18n/ja.po:24782:"  in ``$HG_NAMESPACE``."
mercurial-5.5.2/i18n/ja.po-24783-msgstr ""
##############################################
mercurial-5.5.2/i18n/ja.po-24786-"  非 0 の終了コードは、 処理の中断を意味します。\n"
mercurial-5.5.2/i18n/ja.po:24787:"  キーの名前空間が ``$HG_NAMESPACE`` に設定されます。"
mercurial-5.5.2/i18n/ja.po-24788-
##############################################
mercurial-5.5.2/i18n/ja.po-24796-"  since you can just copy files instead. The source of operation is in\n"
mercurial-5.5.2/i18n/ja.po:24797:"  ``$HG_SOURCE``. If \"serve\", the operation is happening on behalf of a "
mercurial-5.5.2/i18n/ja.po-24798-"remote\n"
##############################################
mercurial-5.5.2/i18n/ja.po-24809-"  実質的な抑止効果はありません。\n"
mercurial-5.5.2/i18n/ja.po:24810:"  操作実施契機が ``$HG_SOURCE`` に設定されます。\n"
mercurial-5.5.2/i18n/ja.po-24811-"  この環境変数に \"serve\" が設定されている場合、\n"
##############################################
mercurial-5.5.2/i18n/ja.po-24820-"  repository. A non-zero status will cause the key to be rejected. The\n"
mercurial-5.5.2/i18n/ja.po:24821:"  key namespace is in ``$HG_NAMESPACE``, the key is in ``$HG_KEY``,\n"
mercurial-5.5.2/i18n/ja.po:24822:"  the old value (if any) is in ``$HG_OLD``, and the new value is in\n"
mercurial-5.5.2/i18n/ja.po:24823:"  ``$HG_NEW``."
mercurial-5.5.2/i18n/ja.po-24824-msgstr ""
##############################################
mercurial-5.5.2/i18n/ja.po-24827-"  非 0 の終了コードは、 取り込み拒否を意味します。\n"
mercurial-5.5.2/i18n/ja.po:24828:"  キーの名前空間が ``$HG_NAMESPACE`` に、\n"
mercurial-5.5.2/i18n/ja.po:24829:"  キーが ``$HG_KEY`` に、\n"
mercurial-5.5.2/i18n/ja.po:24830:"  (更新の場合は) 旧値が ``$HG_OLD`` に、\n"
mercurial-5.5.2/i18n/ja.po:24831:"  新値が ``$HG_NEW`` に設定されます。"
mercurial-5.5.2/i18n/ja.po-24832-
##############################################
mercurial-5.5.2/i18n/ja.po-24837-"  created. A non-zero status will cause the tag to fail. The ID of the\n"
mercurial-5.5.2/i18n/ja.po:24838:"  changeset to tag is in ``$HG_NODE``. The name of tag is in ``$HG_TAG``. "
mercurial-5.5.2/i18n/ja.po-24839-"The\n"
mercurial-5.5.2/i18n/ja.po:24840:"  tag is local if ``$HG_LOCAL=1``, or in the repository if ``$HG_LOCAL=0``."
mercurial-5.5.2/i18n/ja.po-24841-msgstr ""
##############################################
mercurial-5.5.2/i18n/ja.po-24845-"  非 0 の終了コードは、 タグ生成を中断します。\n"
mercurial-5.5.2/i18n/ja.po:24846:"  タグ付け対象リビジョンの ID が  ``$HG_NODE`` に、\n"
mercurial-5.5.2/i18n/ja.po:24847:"  タグ名が ``$HG_TAG`` に設定されます。\n"
mercurial-5.5.2/i18n/ja.po:24848:"  ローカルタグの場合は ``$HG_LOCAL=1`` に、\n"
mercurial-5.5.2/i18n/ja.po:24849:"  通常のタグの場合は ``$HG_LOCAL=0`` になります。"
mercurial-5.5.2/i18n/ja.po-24850-
##############################################
mercurial-5.5.2/i18n/ja.po-24854-"  Run before any new repository transaction is open. The reason for the\n"
mercurial-5.5.2/i18n/ja.po:24855:"  transaction will be in ``$HG_TXNNAME``, and a unique identifier for the\n"
mercurial-5.5.2/i18n/ja.po-24856-"  transaction will be in ``HG_TXNID``. A non-zero status will prevent the\n"
##############################################
mercurial-5.5.2/i18n/ja.po-24860-"  トランザクション開始直前に実行されます。 トランザクションの種別が\n"
mercurial-5.5.2/i18n/ja.po:24861:"  ``$HG_TXNNAME`` に、 一意な識別子が ``HG_TXNID`` に設定されます。 \n"
mercurial-5.5.2/i18n/ja.po-24862-"  終了コードが非ゼロの場合、 トランザクションは開始されません。"
##############################################
mercurial-5.5.2/i18n/ja.po-24873-"  status will cause the transaction to be rolled back. The reason for the\n"
mercurial-5.5.2/i18n/ja.po:24874:"  transaction opening will be in ``$HG_TXNNAME``, and a unique identifier "
mercurial-5.5.2/i18n/ja.po-24875-"for\n"
##############################################
mercurial-5.5.2/i18n/ja.po-24877-"will\n"
mercurial-5.5.2/i18n/ja.po:24878:"  vary according the transaction type. New changesets will add ``$HG_NODE``\n"
mercurial-5.5.2/i18n/ja.po:24879:"  (the ID of the first added changeset), ``$HG_NODE_LAST`` (the ID of the "
mercurial-5.5.2/i18n/ja.po-24880-"last\n"
mercurial-5.5.2/i18n/ja.po:24881:"  added changeset), ``$HG_URL`` and ``$HG_SOURCE`` variables.  Bookmark and\n"
mercurial-5.5.2/i18n/ja.po-24882-"  phase changes will set ``HG_BOOKMARK_MOVED`` and ``HG_PHASES_MOVED`` to "
##############################################
mercurial-5.5.2/i18n/ja.po-24890-"  それ以外の場合、 トランザクションはロールバックされます。\n"
mercurial-5.5.2/i18n/ja.po:24891:"  トランザクション種別が ``$HG_TXNNAME`` に、 一意な識別子が ``HG_TXNID``\n"
mercurial-5.5.2/i18n/ja.po-24892-"  に設定されます。 それ以外の情報は、 トランザクション種別に依存します。\n"
mercurial-5.5.2/i18n/ja.po:24893:"  例えば、 新規リビジョン群を追加するトランザクションの場合、 ``$HG_NODE``\n"
mercurial-5.5.2/i18n/ja.po:24894:"  (追加リビジョン群の最初のものの ID)、 ``$HG_NODE_LAST`` (最後のものの\n"
mercurial-5.5.2/i18n/ja.po:24895:"  ID)、 ``$HG_URL`` および ``$HG_SOURCE`` が設定されます。\n"
mercurial-5.5.2/i18n/ja.po-24896-"  ブックマークやフェーズの変更の場合、 ``HG_BOOKMARK_MOVED`` や\n"
##############################################
mercurial-5.5.2/i18n/ja.po-24905-"  proceed. A non-zero status will cause the transaction to be rolled back.\n"
mercurial-5.5.2/i18n/ja.po:24906:"  The name of the bookmark will be available in ``$HG_BOOKMARK``, the new\n"
mercurial-5.5.2/i18n/ja.po:24907:"  bookmark location will be available in ``$HG_NODE`` while the previous\n"
mercurial-5.5.2/i18n/ja.po:24908:"  location will be available in ``$HG_OLDNODE``. In case of a bookmark\n"
mercurial-5.5.2/i18n/ja.po:24909:"  creation ``$HG_OLDNODE`` will be empty. In case of deletion ``$HG_NODE``\n"
mercurial-5.5.2/i18n/ja.po-24910-"  will be empty.\n"
mercurial-5.5.2/i18n/ja.po-24911-"  In addition, the reason for the transaction opening will be in\n"
mercurial-5.5.2/i18n/ja.po:24912:"  ``$HG_TXNNAME``, and a unique identifier for the transaction will be in\n"
mercurial-5.5.2/i18n/ja.po-24913-"  ``HG_TXNID``."
##############################################
mercurial-5.5.2/i18n/ja.po-24919-"  それ以外の場合、 トランザクションはロールバックされます。\n"
mercurial-5.5.2/i18n/ja.po:24920:"  トランザクション種別が ``$HG_TXNNAME`` に、 一意な識別子が ``HG_TXNID``\n"
mercurial-5.5.2/i18n/ja.po-24921-"  に設定されます。 それ以外の情報は、 トランザクション種別に依存します。\n"
mercurial-5.5.2/i18n/ja.po:24922:"  例えば、 新規リビジョン群を追加するトランザクションの場合、 ``$HG_NODE``\n"
mercurial-5.5.2/i18n/ja.po:24923:"  (追加リビジョン群の最初のものの ID)、 ``$HG_NODE_LAST`` (最後のものの\n"
mercurial-5.5.2/i18n/ja.po:24924:"  ID)、 ``$HG_URL`` および ``$HG_SOURCE`` が設定されます。\n"
mercurial-5.5.2/i18n/ja.po-24925-"  ブックマークやフェーズの変更の場合、 ``HG_BOOKMARK_MOVED`` や\n"
##############################################
mercurial-5.5.2/i18n/ja.po-24938-"  multiple times, once for each revision affected by a phase change.\n"
mercurial-5.5.2/i18n/ja.po:24939:"  The affected node is available in ``$HG_NODE``, the phase in ``"
mercurial-5.5.2/i18n/ja.po-24940-"$HG_PHASE``\n"
mercurial-5.5.2/i18n/ja.po:24941:"  while the previous ``$HG_OLDPHASE``. In case of new node, ``"
mercurial-5.5.2/i18n/ja.po-24942-"$HG_OLDPHASE``\n"
##############################################
mercurial-5.5.2/i18n/ja.po-24944-"be in\n"
mercurial-5.5.2/i18n/ja.po:24945:"  ``$HG_TXNNAME``, and a unique identifier for the transaction will be in\n"
mercurial-5.5.2/i18n/ja.po-24946-"  ``HG_TXNID``. The hook is also run for newly added revisions. In this "
mercurial-5.5.2/i18n/ja.po-24947-"case\n"
mercurial-5.5.2/i18n/ja.po:24948:"  the ``$HG_OLDPHASE`` entry will be empty."
mercurial-5.5.2/i18n/ja.po-24949-msgstr ""
##############################################
mercurial-5.5.2/i18n/ja.po-24954-"  それ以外の場合、 トランザクションはロールバックされます。\n"
mercurial-5.5.2/i18n/ja.po:24955:"  トランザクション種別が ``$HG_TXNNAME`` に、 一意な識別子が ``HG_TXNID``\n"
mercurial-5.5.2/i18n/ja.po-24956-"  に設定されます。 それ以外の情報は、 トランザクション種別に依存します。\n"
mercurial-5.5.2/i18n/ja.po:24957:"  例えば、 新規リビジョン群を追加するトランザクションの場合、 ``$HG_NODE``\n"
mercurial-5.5.2/i18n/ja.po:24958:"  (追加リビジョン群の最初のものの ID)、 ``$HG_NODE_LAST`` (最後のものの\n"
mercurial-5.5.2/i18n/ja.po:24959:"  ID)、 ``$HG_URL`` および ``$HG_SOURCE`` が設定されます。\n"
mercurial-5.5.2/i18n/ja.po-24960-"  ブックマークやフェーズの変更の場合、 ``HG_BOOKMARK_MOVED`` や\n"
##############################################
mercurial-5.5.2/i18n/ja.po-25027-"them.\n"
mercurial-5.5.2/i18n/ja.po:25028:"  The ID of the first new changeset is in ``$HG_NODE`` and last is in\n"
mercurial-5.5.2/i18n/ja.po:25029:"  ``$HG_NODE_LAST``. Exit status 0 allows the transaction to commit. A non-"
mercurial-5.5.2/i18n/ja.po-25030-"zero\n"
##############################################
mercurial-5.5.2/i18n/ja.po-25039-"  フックから参照できます。 トランザクション内容の検証や変更が可能です。\n"
mercurial-5.5.2/i18n/ja.po:25040:"  追加リビジョン群の最初のものの ID が ``$HG_NODE`` に、\n"
mercurial-5.5.2/i18n/ja.po:25041:"  最後のものの ID が ``$HG_NODE_LAST`` に設定されます。\n"
mercurial-5.5.2/i18n/ja.po-25042-"  終了コードが 0 の場合、 トランザクションが確定します。\n"
##############################################
mercurial-5.5.2/i18n/ja.po-25044-"  push、 pull、 unbundle は中断されます。\n"
mercurial-5.5.2/i18n/ja.po:25045:"  追加リビジョンの取り込み元 URL は ``$HG_URL`` に設定されます。"
mercurial-5.5.2/i18n/ja.po-25046-
##############################################
mercurial-5.5.2/i18n/ja.po-25053-"  commit to proceed. A non-zero status will cause the transaction to\n"
mercurial-5.5.2/i18n/ja.po:25054:"  be rolled back. The ID of the new changeset is in ``$HG_NODE``. The "
mercurial-5.5.2/i18n/ja.po-25055-"parent\n"
mercurial-5.5.2/i18n/ja.po:25056:"  changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/ja.po-25057-msgstr ""
##############################################
mercurial-5.5.2/i18n/ja.po-25064-"  非 0 の終了コードの場合、 トランザクションが巻き戻されます。\n"
mercurial-5.5.2/i18n/ja.po:25065:"  新規追加リビジョンの ID が ``$HG_NODE`` に、\n"
mercurial-5.5.2/i18n/ja.po-25066-"  親リビジョンの ID が\n"
mercurial-5.5.2/i18n/ja.po:25067:"  ``$HG_PARENT1`` および ``$HG_PARENT2`` に設定されます。"
mercurial-5.5.2/i18n/ja.po-25068-
##############################################
mercurial-5.5.2/i18n/ja.po-25073-"  the update to proceed. A non-zero status will prevent the update.\n"
mercurial-5.5.2/i18n/ja.po:25074:"  The changeset ID of first new parent is in ``$HG_PARENT1``. If updating to "
mercurial-5.5.2/i18n/ja.po-25075-"a\n"
mercurial-5.5.2/i18n/ja.po:25076:"  merge, the ID of second new parent is in ``$HG_PARENT2``."
mercurial-5.5.2/i18n/ja.po-25077-msgstr ""
##############################################
mercurial-5.5.2/i18n/ja.po-25081-"  非 0 の終了コードの場合、 更新処理は実施されません。\n"
mercurial-5.5.2/i18n/ja.po:25082:"  更新対象リビジョンの ID が ``$HG_PARENT1`` に設定されます。\n"
mercurial-5.5.2/i18n/ja.po-25083-"  マージ契機の更新処理の場合、 第2親リビジョンの ID が\n"
mercurial-5.5.2/i18n/ja.po:25084:"  ``$HG_PARENT2`` に設定されます。"
mercurial-5.5.2/i18n/ja.po-25085-
##############################################
mercurial-5.5.2/i18n/ja.po-25088-"  Run after listing pushkeys (like bookmarks) in the repository. The\n"
mercurial-5.5.2/i18n/ja.po:25089:"  key namespace is in ``$HG_NAMESPACE``. ``$HG_VALUES`` is a\n"
mercurial-5.5.2/i18n/ja.po-25090-"  dictionary containing the keys and values."
##############################################
mercurial-5.5.2/i18n/ja.po-25093-"  pushkey (bookmark のようなもの) の一覧取得後に実行されます。\n"
mercurial-5.5.2/i18n/ja.po:25094:"  キーの名前空間が ``$HG_NAMESPACE`` に設定されます。\n"
mercurial-5.5.2/i18n/ja.po:25095:"  ``$HG_VALUES`` には、 キーと値からなる辞書情報が設定されます。"
mercurial-5.5.2/i18n/ja.po-25096-
##############################################
mercurial-5.5.2/i18n/ja.po-25099-"  Run after a pushkey (like a bookmark) is added to the\n"
mercurial-5.5.2/i18n/ja.po:25100:"  repository. The key namespace is in ``$HG_NAMESPACE``, the key is in\n"
mercurial-5.5.2/i18n/ja.po:25101:"  ``$HG_KEY``, the old value (if any) is in ``$HG_OLD``, and the new\n"
mercurial-5.5.2/i18n/ja.po:25102:"  value is in ``$HG_NEW``."
mercurial-5.5.2/i18n/ja.po-25103-msgstr ""
##############################################
mercurial-5.5.2/i18n/ja.po-25105-"  pushkey (bookmark のようなもの) の取り込み後に実行されます。\n"
mercurial-5.5.2/i18n/ja.po:25106:"  キーの名前空間が ``$HG_NAMESPACE`` に、\n"
mercurial-5.5.2/i18n/ja.po:25107:"  キーが ``$HG_KEY`` に、\n"
mercurial-5.5.2/i18n/ja.po:25108:"  (更新の場合は) 旧値が ``$HG_OLD`` に、\n"
mercurial-5.5.2/i18n/ja.po:25109:"  新値が ``$HG_NEW`` に設定されます。"
mercurial-5.5.2/i18n/ja.po-25110-
##############################################
mercurial-5.5.2/i18n/ja.po-25115-"$HG_NODE``.\n"
mercurial-5.5.2/i18n/ja.po:25116:"  The name of tag is in ``$HG_TAG``. The tag is local if ``$HG_LOCAL=1``, or "
mercurial-5.5.2/i18n/ja.po-25117-"in\n"
mercurial-5.5.2/i18n/ja.po:25118:"  the repository if ``$HG_LOCAL=0``."
mercurial-5.5.2/i18n/ja.po-25119-msgstr ""
##############################################
mercurial-5.5.2/i18n/ja.po-25121-"  タグの新規生成後に実行されます。\n"
mercurial-5.5.2/i18n/ja.po:25122:"  タグ付け対象リビジョンの ID が  ``$HG_NODE`` に、\n"
mercurial-5.5.2/i18n/ja.po:25123:"  タグ名が ``$HG_TAG`` に設定されます。\n"
mercurial-5.5.2/i18n/ja.po:25124:"  ローカルタグの場合は ``$HG_LOCAL=1`` に、\n"
mercurial-5.5.2/i18n/ja.po:25125:"  通常のタグの場合は ``$HG_LOCAL=0`` になります。"
mercurial-5.5.2/i18n/ja.po-25126-
##############################################
mercurial-5.5.2/i18n/ja.po-25130-"  Run after updating the working directory. The changeset ID of first\n"
mercurial-5.5.2/i18n/ja.po:25131:"  new parent is in ``$HG_PARENT1``. If updating to a merge, the ID of second "
mercurial-5.5.2/i18n/ja.po-25132-"new\n"
mercurial-5.5.2/i18n/ja.po:25133:"  parent is in ``$HG_PARENT2``. If the update succeeded, ``$HG_ERROR=0``. If "
mercurial-5.5.2/i18n/ja.po-25134-"the\n"
mercurial-5.5.2/i18n/ja.po:25135:"  update failed (e.g. because conflicts were not resolved), ``$HG_ERROR=1``."
mercurial-5.5.2/i18n/ja.po-25136-msgstr ""
##############################################
mercurial-5.5.2/i18n/ja.po-25138-"  作業領域の更新後に実行されます。\n"
mercurial-5.5.2/i18n/ja.po:25139:"  更新対象リビジョンの ID が ``$HG_PARENT1`` に設定されます。\n"
mercurial-5.5.2/i18n/ja.po-25140-"  マージ契機の更新処理の場合、 第2親リビジョンの ID が\n"
mercurial-5.5.2/i18n/ja.po:25141:"  ``$HG_PARENT2`` に設定されます。\n"
mercurial-5.5.2/i18n/ja.po:25142:"  更新処理が成功した場合は ``$HG_ERROR=0`` に、\n"
mercurial-5.5.2/i18n/ja.po:25143:"  失敗した場合 (例: 衝突解消の失敗等) は ``$HG_ERROR=1`` が設定されます。"
mercurial-5.5.2/i18n/ja.po-25144-
##############################################
mercurial-5.5.2/i18n/ja.po-25160-"   Environment variables with empty values may not be passed to\n"
mercurial-5.5.2/i18n/ja.po:25161:"   hooks on platforms such as Windows. As an example, ``$HG_PARENT2``\n"
mercurial-5.5.2/i18n/ja.po-25162-"   will have an empty value under Unix-like platforms for non-merge\n"
##############################################
mercurial-5.5.2/i18n/ja.po-25166-"   引き渡されない場合があります。 例えば、 非マージリビジョンの場合、\n"
mercurial-5.5.2/i18n/ja.po:25167:"   Unix 系環境では空値の ``$HG_PARENT2`` が引き渡されますが、\n"
mercurial-5.5.2/i18n/ja.po-25168-"   Windows 環境では、 環境変数自身の引渡しがありません。"
##############################################
mercurial-5.5.2/i18n/ja.po-25733-"  files being merged as well as the output file through these\n"
mercurial-5.5.2/i18n/ja.po:25734:"  variables: ``$base``, ``$local``, ``$other``, ``$output``."
mercurial-5.5.2/i18n/ja.po-25735-msgstr ""
##############################################
mercurial-5.5.2/i18n/ja.po-25738-msgid ""
mercurial-5.5.2/i18n/ja.po:25739:"  The meaning of ``$local`` and ``$other`` can vary depending on which "
mercurial-5.5.2/i18n/ja.po-25740-"action is\n"
mercurial-5.5.2/i18n/ja.po:25741:"  being performed. During an update or merge, ``$local`` represents the "
mercurial-5.5.2/i18n/ja.po-25742-"original\n"
mercurial-5.5.2/i18n/ja.po:25743:"  state of the file, while ``$other`` represents the commit you are updating "
mercurial-5.5.2/i18n/ja.po-25744-"to or\n"
mercurial-5.5.2/i18n/ja.po:25745:"  the commit you are merging with. During a rebase, ``$local`` represents "
mercurial-5.5.2/i18n/ja.po-25746-"the\n"
mercurial-5.5.2/i18n/ja.po:25747:"  destination of the rebase, and ``$other`` represents the commit being "
mercurial-5.5.2/i18n/ja.po-25748-"rebased."
##############################################
mercurial-5.5.2/i18n/ja.po-25750-"``args``\n"
mercurial-5.5.2/i18n/ja.po:25751:"  実行時にツールに指定される引数。 ``$base``, ``$local``, ``$other``, \n"
mercurial-5.5.2/i18n/ja.po:25752:"  ``$output`` といった表記により、マージ対象や、 結果格納先ファイルも、\n"
mercurial-5.5.2/i18n/ja.po:25753:"  指定可能です。 ``$local`` や ``$other`` は、 実施する処理に応じて、\n"
mercurial-5.5.2/i18n/ja.po:25754:"  意味合いが変化します。 update や merge コマンドの場合、 ``$local``\n"
mercurial-5.5.2/i18n/ja.po:25755:"  はコマンド実施前時点の作業領域の、 ``$other`` は対象リビジョン時点の、\n"
mercurial-5.5.2/i18n/ja.po-25756-"  それぞれの内容を保持するファイルを指します。 一方で rebase の場合は、\n"
mercurial-5.5.2/i18n/ja.po:25757:"  ``$local`` が rebase 先、 ``$other`` が rebase 元リビジョン時点の、\n"
mercurial-5.5.2/i18n/ja.po-25758-"  それぞれの内容を保持するファイルを指します。\n"
mercurial-5.5.2/i18n/ja.po:25759:"  (デフォルト値: ``$local $base $other``)"
mercurial-5.5.2/i18n/ja.po-25760-
##############################################
mercurial-5.5.2/i18n/ja.po-25763-"revisions,\n"
mercurial-5.5.2/i18n/ja.po:25764:"  accessible via ``$labellocal``, ``$labelother``, and ``$labelbase``. If "
mercurial-5.5.2/i18n/ja.po-25765-"custom\n"
##############################################
mercurial-5.5.2/i18n/ja.po-25768-"  respectively.\n"
mercurial-5.5.2/i18n/ja.po:25769:"  (default: ``$local $base $other``)"
mercurial-5.5.2/i18n/ja.po-25770-msgstr ""
##############################################
mercurial-5.5.2/i18n/ja.po-25786-"  ``true``, ``false``, ``keep`` および ``keep-merge3`` を指定可能です。\n"
mercurial-5.5.2/i18n/ja.po:25787:"  ``keep`` 選択時に事前マージが失敗した場合、 ``$local`` 相当ファイルに、\n"
mercurial-5.5.2/i18n/ja.po-25788-"  衝突マークが残されたままになります。 衝突マークに共通祖先 (base)\n"
##############################################
mercurial-5.5.2/i18n/ja.po-25851-"``mergemarkers``\n"
mercurial-5.5.2/i18n/ja.po:25852:"  Controls whether the labels passed via ``$labellocal``, ``$labelother``, "
mercurial-5.5.2/i18n/ja.po-25853-"and\n"
mercurial-5.5.2/i18n/ja.po:25854:"  ``$labelbase`` are ``detailed`` (respecting ``mergemarkertemplate``) or\n"
mercurial-5.5.2/i18n/ja.po-25855-"  ``basic``. If ``premerge`` is ``keep`` or ``keep-merge3``, the conflict\n"
##############################################
mercurial-5.5.2/i18n/ja.po-25865-"``[ui]``\n"
mercurial-5.5.2/i18n/ja.po:25866:"  section on a per-tool basis; this applies to the ``$label``-prefixed "
mercurial-5.5.2/i18n/ja.po-25867-"variables\n"
##############################################
mercurial-5.5.2/i18n/ja.po-27018-"group with name ``*``. These settings must be placed in an\n"
mercurial-5.5.2/i18n/ja.po:27019:"*already-trusted file* to take effect, such as ``$HOME/.hgrc`` of the\n"
mercurial-5.5.2/i18n/ja.po-27020-"user or service running Mercurial."
##############################################
mercurial-5.5.2/i18n/ja.po-27030-"例えば、 Mercurial プロセスを実行しているユーザやサービスの\n"
mercurial-5.5.2/i18n/ja.po:27031:"``$HOME/.hgrc`` ファイルなどが該当します。"
mercurial-5.5.2/i18n/ja.po-27032-
##############################################
mercurial-5.5.2/i18n/ja.po-27074-"    Whether to prompt for a username when committing. If True, and\n"
mercurial-5.5.2/i18n/ja.po:27075:"    neither ``$HGUSER`` nor ``$EMAIL`` has been specified, then the user "
mercurial-5.5.2/i18n/ja.po-27076-"will\n"
##############################################
mercurial-5.5.2/i18n/ja.po-27082-"    コミットにおけるユーザ名問い合わせの有無。 True の場合、\n"
mercurial-5.5.2/i18n/ja.po:27083:"    ``$HGUSER`` も ``$EMAIL`` も設定されていなければ、\n"
mercurial-5.5.2/i18n/ja.po-27084-"    ユーザ名の問い合わせを行います。\n"
##############################################
mercurial-5.5.2/i18n/ja.po-27206-"``editor``\n"
mercurial-5.5.2/i18n/ja.po:27207:"    The editor to use during a commit. (default: ``$EDITOR`` or ``vi``)"
mercurial-5.5.2/i18n/ja.po-27208-msgstr ""
mercurial-5.5.2/i18n/ja.po-27209-"``editor``\n"
mercurial-5.5.2/i18n/ja.po:27210:"    コミットログ入力用エディタ。 (デフォルト値: ``$EDITOR`` または ``vi``)"
mercurial-5.5.2/i18n/ja.po-27211-
##############################################
mercurial-5.5.2/i18n/ja.po-27626-msgid ""
mercurial-5.5.2/i18n/ja.po:27627:"    (default: ``$EMAIL`` or ``username@hostname``. If the username in\n"
mercurial-5.5.2/i18n/ja.po-27628-"    hgrc is empty, e.g. if the system admin set ``username =`` in the\n"
##############################################
mercurial-5.5.2/i18n/ja.po-27631-msgstr ""
mercurial-5.5.2/i18n/ja.po:27632:"    (デフォルト値: ``$EMAIL`` 環境変数値、 または ``ユーザ名@ホスト名``)\n"
mercurial-5.5.2/i18n/ja.po-27633-"    例えば、 システム毎設定ファイルでの ``username =`` 記述のような、\n"
##############################################
mercurial-5.5.2/i18n/ja.po-27904-"    Name or email address of the person in charge of the repository.\n"
mercurial-5.5.2/i18n/ja.po:27905:"    (default: ui.username or ``$EMAIL`` or \"unknown\" if unset or empty)"
mercurial-5.5.2/i18n/ja.po-27906-msgstr ""
##############################################
mercurial-5.5.2/i18n/ja.po-27908-"    リポジトリ管理者の名前または電子メールアドレス。\n"
mercurial-5.5.2/i18n/ja.po:27909:"    (デフォルト値: ui.username 設定値、 ``$EMAIL`` 設定値、\n"
mercurial-5.5.2/i18n/ja.po-27910-"    あるいは \"unknown\")"
##############################################
mercurial-5.5.2/i18n/ja.po-30375-msgid ""
mercurial-5.5.2/i18n/ja.po:30376:"``/etc/mercurial/hgrc``, ``$HOME/.hgrc``, ``.hg/hgrc``\n"
mercurial-5.5.2/i18n/ja.po-30377-"    This file contains defaults and configuration. Values in\n"
mercurial-5.5.2/i18n/ja.po:30378:"    ``.hg/hgrc`` override those in ``$HOME/.hgrc``, and these override\n"
mercurial-5.5.2/i18n/ja.po-30379-"    settings made in the global ``/etc/mercurial/hgrc`` configuration.\n"
##############################################
mercurial-5.5.2/i18n/ja.po-30382-msgstr ""
mercurial-5.5.2/i18n/ja.po:30383:"``/etc/mercurial/hgrc``, ``$HOME/.hgrc``, ``.hg/hgrc``\n"
mercurial-5.5.2/i18n/ja.po-30384-"    これらのファイルには、 各種設定値を記述します。 ``.hg/hgrc``\n"
mercurial-5.5.2/i18n/ja.po:30385:"    での記述は ``$HOME/.hgrc`` での記述を、``$HOME/.hgrc`` での記述は\n"
mercurial-5.5.2/i18n/ja.po-30386-"    ``/etc/mercurial/hgrc`` での記述を、それぞれ上書きします。\n"
##############################################
mercurial-5.5.2/i18n/ro.po-10517-"the username setting is typically put into\n"
mercurial-5.5.2/i18n/ro.po:10518:"``%USERPROFILE%\\mercurial.ini`` or ``$HOME/.hgrc`` and local\n"
mercurial-5.5.2/i18n/ro.po-10519-"configuration is put into the per-repository ``<repo>/.hg/hgrc`` file."
##############################################
mercurial-5.5.2/i18n/ro.po-10543-msgid ""
mercurial-5.5.2/i18n/ro.po:10544:"| (Unix) ``$HOME/.hgrc``\n"
mercurial-5.5.2/i18n/ro.po-10545-"| (Windows) ``%USERPROFILE%\\.hgrc``\n"
##############################################
mercurial-5.5.2/i18n/ro.po-10746-"commands (or aliases), optionally including arguments. Positional\n"
mercurial-5.5.2/i18n/ro.po:10747:"arguments in the form of ``$1``, ``$2``, etc in the alias definition\n"
mercurial-5.5.2/i18n/ro.po-10748-"are expanded by Mercurial before execution. Positional arguments not\n"
mercurial-5.5.2/i18n/ro.po:10749:"already used by ``$N`` in the definition are put at the end of the\n"
mercurial-5.5.2/i18n/ro.po-10750-"command to be executed."
##############################################
mercurial-5.5.2/i18n/ro.po-10801-msgid ""
mercurial-5.5.2/i18n/ro.po:10802:"Shell aliases are executed in an environment where ``$HG`` expand to\n"
mercurial-5.5.2/i18n/ro.po-10803-"the path of the Mercurial that was used to execute the alias. This is\n"
##############################################
mercurial-5.5.2/i18n/ro.po-10805-"alias, as was done above for the purge alias. In addition,\n"
mercurial-5.5.2/i18n/ro.po:10806:"``$HG_ARGS`` expand to the arguments given to Mercurial. In the ``hg\n"
mercurial-5.5.2/i18n/ro.po:10807:"echo foo`` call above, ``$HG_ARGS`` would expand to ``echo foo``."
mercurial-5.5.2/i18n/ro.po-10808-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-10864-"    be prompted for it. Environment variables are expanded in the\n"
mercurial-5.5.2/i18n/ro.po:10865:"    username letting you do ``foo.username = $USER``."
mercurial-5.5.2/i18n/ro.po-10866-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-11104-"    first character set to which conversion from local encoding\n"
mercurial-5.5.2/i18n/ro.po:11105:"    (``$HGENCODING``, ``ui.fallbackencoding``) succeeds. If correct\n"
mercurial-5.5.2/i18n/ro.po-11106-"    conversion fails, the text in question is sent as is. Defaults to\n"
##############################################
mercurial-5.5.2/i18n/ro.po-11116-"    3. ``ui.fallbackencoding``: if not in email.charsets\n"
mercurial-5.5.2/i18n/ro.po:11117:"    4. ``$HGENCODING``: if not in email.charsets\n"
mercurial-5.5.2/i18n/ro.po-11118-"    5. ``utf-8``: always last, regardless of settings"
##############################################
mercurial-5.5.2/i18n/ro.po-11300-"  files being merged as well as the output file through these\n"
mercurial-5.5.2/i18n/ro.po:11301:"  variables: ``$base``, ``$local``, ``$other``, ``$output``.\n"
mercurial-5.5.2/i18n/ro.po:11302:"  Default: ``$local $base $other``"
mercurial-5.5.2/i18n/ro.po-11303-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-11422-"additional information. For each hook below, the environment\n"
mercurial-5.5.2/i18n/ro.po:11423:"variables it is passed are listed with names of the form ``$HG_foo``."
mercurial-5.5.2/i18n/ro.po-11424-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-11428-"  Run after a changegroup has been added via push, pull or unbundle.\n"
mercurial-5.5.2/i18n/ro.po:11429:"  ID of the first new changeset is in ``$HG_NODE``. URL from which\n"
mercurial-5.5.2/i18n/ro.po:11430:"  changes came is in ``$HG_URL``."
mercurial-5.5.2/i18n/ro.po-11431-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-11435-"  Run after a changeset has been created in the local repository. ID\n"
mercurial-5.5.2/i18n/ro.po:11436:"  of the newly created changeset is in ``$HG_NODE``. Parent changeset\n"
mercurial-5.5.2/i18n/ro.po:11437:"  IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/ro.po-11438-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-11443-"  the local repository. The ID of the newly arrived changeset is in\n"
mercurial-5.5.2/i18n/ro.po:11444:"  ``$HG_NODE``. URL that was source of changes came is in ``$HG_URL``."
mercurial-5.5.2/i18n/ro.po-11445-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-11449-"  Run after sending changes from local repository to another. ID of\n"
mercurial-5.5.2/i18n/ro.po:11450:"  first changeset sent is in ``$HG_NODE``. Source of operation is in\n"
mercurial-5.5.2/i18n/ro.po:11451:"  ``$HG_SOURCE``; see \"preoutgoing\" hook for description."
mercurial-5.5.2/i18n/ro.po-11452-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-11456-"  Run after successful invocations of the associated command. The\n"
mercurial-5.5.2/i18n/ro.po:11457:"  contents of the command line are passed as ``$HG_ARGS`` and the result\n"
mercurial-5.5.2/i18n/ro.po:11458:"  code in ``$HG_RESULT``. Parsed command line arguments are passed as \n"
mercurial-5.5.2/i18n/ro.po:11459:"  ``$HG_PATS`` and ``$HG_OPTS``. These contain string representations of\n"
mercurial-5.5.2/i18n/ro.po:11460:"  the python data internally passed to <command>. ``$HG_OPTS`` is a \n"
mercurial-5.5.2/i18n/ro.po-11461-"  dictionary of options (with unspecified options set to their defaults).\n"
mercurial-5.5.2/i18n/ro.po:11462:"  ``$HG_PATS`` is a list of arguments. Hook failure is ignored."
mercurial-5.5.2/i18n/ro.po-11463-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-11467-"  Run before executing the associated command. The contents of the\n"
mercurial-5.5.2/i18n/ro.po:11468:"  command line are passed as ``$HG_ARGS``. Parsed command line arguments\n"
mercurial-5.5.2/i18n/ro.po:11469:"  are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain string\n"
mercurial-5.5.2/i18n/ro.po:11470:"  representations of the data internally passed to <command>. ``$HG_OPTS``\n"
mercurial-5.5.2/i18n/ro.po-11471-"  is a  dictionary of options (with unspecified options set to their\n"
mercurial-5.5.2/i18n/ro.po:11472:"  defaults). ``$HG_PATS`` is a list of arguments. If the hook returns \n"
mercurial-5.5.2/i18n/ro.po-11473-"  failure, the command doesn't execute and Mercurial returns the failure\n"
##############################################
mercurial-5.5.2/i18n/ro.po-11481-"  cause the push, pull or unbundle to fail. URL from which changes\n"
mercurial-5.5.2/i18n/ro.po:11482:"  will come is in ``$HG_URL``."
mercurial-5.5.2/i18n/ro.po-11483-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-11488-"  commit to proceed. Non-zero status will cause the commit to fail.\n"
mercurial-5.5.2/i18n/ro.po:11489:"  Parent changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/ro.po-11490-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-11495-"  repository. Non-zero status will cause failure. The key namespace is\n"
mercurial-5.5.2/i18n/ro.po:11496:"  in ``$HG_NAMESPACE``."
mercurial-5.5.2/i18n/ro.po-11497-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-11505-"  just copy files instead then. Source of operation is in\n"
mercurial-5.5.2/i18n/ro.po:11506:"  ``$HG_SOURCE``. If \"serve\", operation is happening on behalf of remote\n"
mercurial-5.5.2/i18n/ro.po-11507-"  SSH or HTTP repository. If \"push\", \"pull\" or \"bundle\", operation\n"
##############################################
mercurial-5.5.2/i18n/ro.po-11514-"  repository. Non-zero status will cause the key to be rejected. The\n"
mercurial-5.5.2/i18n/ro.po:11515:"  key namespace is in ``$HG_NAMESPACE``, the key is in ``$HG_KEY``,\n"
mercurial-5.5.2/i18n/ro.po:11516:"  the old value (if any) is in ``$HG_OLD``, and the new value is in\n"
mercurial-5.5.2/i18n/ro.po:11517:"  ``$HG_NEW``."
mercurial-5.5.2/i18n/ro.po-11518-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-11523-"  created. Non-zero status will cause the tag to fail. ID of\n"
mercurial-5.5.2/i18n/ro.po:11524:"  changeset to tag is in ``$HG_NODE``. Name of tag is in ``$HG_TAG``. Tag "
mercurial-5.5.2/i18n/ro.po-11525-"is\n"
mercurial-5.5.2/i18n/ro.po:11526:"  local if ``$HG_LOCAL=1``, in repository if ``$HG_LOCAL=0``."
mercurial-5.5.2/i18n/ro.po-11527-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-11534-"  before accepting them. Passed the ID of the first new changeset in\n"
mercurial-5.5.2/i18n/ro.po:11535:"  ``$HG_NODE``. Exit status 0 allows the transaction to commit. Non-zero\n"
mercurial-5.5.2/i18n/ro.po-11536-"  status will cause the transaction to be rolled back and the push,\n"
mercurial-5.5.2/i18n/ro.po-11537-"  pull or unbundle will fail. URL that was source of changes is in\n"
mercurial-5.5.2/i18n/ro.po:11538:"  ``$HG_URL``."
mercurial-5.5.2/i18n/ro.po-11539-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-11546-"  commit to proceed. Non-zero status will cause the transaction to\n"
mercurial-5.5.2/i18n/ro.po:11547:"  be rolled back. ID of changeset is in ``$HG_NODE``. Parent changeset\n"
mercurial-5.5.2/i18n/ro.po:11548:"  IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/ro.po-11549-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-11554-"  the update to proceed. Non-zero status will prevent the update.\n"
mercurial-5.5.2/i18n/ro.po:11555:"  Changeset ID of first new parent is in ``$HG_PARENT1``. If merge, ID\n"
mercurial-5.5.2/i18n/ro.po:11556:"  of second new parent is in ``$HG_PARENT2``."
mercurial-5.5.2/i18n/ro.po-11557-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-11561-"  Run after listing pushkeys (like bookmarks) in the repository. The\n"
mercurial-5.5.2/i18n/ro.po:11562:"  key namespace is in ``$HG_NAMESPACE``. ``$HG_VALUES`` is a\n"
mercurial-5.5.2/i18n/ro.po-11563-"  dictionary containing the keys and values."
##############################################
mercurial-5.5.2/i18n/ro.po-11568-"  Run after a pushkey (like a bookmark) is added to the\n"
mercurial-5.5.2/i18n/ro.po:11569:"  repository. The key namespace is in ``$HG_NAMESPACE``, the key is in\n"
mercurial-5.5.2/i18n/ro.po:11570:"  ``$HG_KEY``, the old value (if any) is in ``$HG_OLD``, and the new\n"
mercurial-5.5.2/i18n/ro.po:11571:"  value is in ``$HG_NEW``."
mercurial-5.5.2/i18n/ro.po-11572-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-11575-"``tag``\n"
mercurial-5.5.2/i18n/ro.po:11576:"  Run after a tag is created. ID of tagged changeset is in ``$HG_NODE``.\n"
mercurial-5.5.2/i18n/ro.po:11577:"  Name of tag is in ``$HG_TAG``. Tag is local if ``$HG_LOCAL=1``, in\n"
mercurial-5.5.2/i18n/ro.po:11578:"  repository if ``$HG_LOCAL=0``."
mercurial-5.5.2/i18n/ro.po-11579-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-11583-"  Run after updating the working directory. Changeset ID of first\n"
mercurial-5.5.2/i18n/ro.po:11584:"  new parent is in ``$HG_PARENT1``. If merge, ID of second new parent is\n"
mercurial-5.5.2/i18n/ro.po:11585:"  in ``$HG_PARENT2``. If the update succeeded, ``$HG_ERROR=0``. If the\n"
mercurial-5.5.2/i18n/ro.po:11586:"  update failed (e.g. because conflicts not resolved), ``$HG_ERROR=1``."
mercurial-5.5.2/i18n/ro.po-11587-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-11598-".. note:: Environment variables with empty values may not be passed to\n"
mercurial-5.5.2/i18n/ro.po:11599:"   hooks on platforms such as Windows. As an example, ``$HG_PARENT2``\n"
mercurial-5.5.2/i18n/ro.po-11600-"   will have an empty value under Unix-like platforms for non-merge\n"
##############################################
mercurial-5.5.2/i18n/ro.po-11871-"group with name ``*``. These settings must be placed in an\n"
mercurial-5.5.2/i18n/ro.po:11872:"*already-trusted file* to take effect, such as ``$HOME/.hgrc`` of the\n"
mercurial-5.5.2/i18n/ro.po-11873-"user or service running Mercurial."
##############################################
mercurial-5.5.2/i18n/ro.po-11905-"    Whether to prompt for a username when committing. If True, and\n"
mercurial-5.5.2/i18n/ro.po:11906:"    neither ``$HGUSER`` nor ``$EMAIL`` has been specified, then the user "
mercurial-5.5.2/i18n/ro.po-11907-"will\n"
##############################################
mercurial-5.5.2/i18n/ro.po-11927-"``editor``\n"
mercurial-5.5.2/i18n/ro.po:11928:"    The editor to use during a commit. Default is ``$EDITOR`` or ``vi``."
mercurial-5.5.2/i18n/ro.po-11929-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-12038-"    Typically a person's name and email address, e.g. ``Fred Widget\n"
mercurial-5.5.2/i18n/ro.po:12039:"    <fred@example.com>``. Default is ``$EMAIL`` or ``username@hostname``. "
mercurial-5.5.2/i18n/ro.po-12040-"If\n"
mercurial-5.5.2/i18n/ro.po-12041-"    the username in hgrc is empty, it has to be specified manually or\n"
mercurial-5.5.2/i18n/ro.po:12042:"    in a different hgrc file (e.g. ``$HOME/.hgrc``, if the admin set\n"
mercurial-5.5.2/i18n/ro.po-12043-"    ``username =``  in the system hgrc). Environment variables in the\n"
##############################################
mercurial-5.5.2/i18n/ro.po-12207-"    Name or email address of the person in charge of the repository.\n"
mercurial-5.5.2/i18n/ro.po:12208:"    Defaults to ui.username or ``$EMAIL`` or \"unknown\" if unset or empty."
mercurial-5.5.2/i18n/ro.po-12209-msgstr ""
##############################################
mercurial-5.5.2/i18n/ro.po-13769-msgid ""
mercurial-5.5.2/i18n/ro.po:13770:"in the ``revsetalias`` section of ``.hgrc``. Arguments of the form `$1`, `"
mercurial-5.5.2/i18n/ro.po-13771-"$2`,\n"
##############################################
mercurial-5.5.2/i18n/it.po-10203-"- ``<repo>/.hg/hgrc``\n"
mercurial-5.5.2/i18n/it.po:10204:"- ``$HOME/.hgrc``\n"
mercurial-5.5.2/i18n/it.po-10205-"- ``/etc/mercurial/hgrc``\n"
##############################################
mercurial-5.5.2/i18n/el.po-60-"- ``<repo>/.hg/hgrc``\n"
mercurial-5.5.2/i18n/el.po:61:"- ``$HOME/.hgrc``\n"
mercurial-5.5.2/i18n/el.po-62-"- ``/etc/mercurial/hgrc``\n"
##############################################
mercurial-5.5.2/i18n/zh_TW.po-9449-"- ``<repo>/.hg/hgrc``\n"
mercurial-5.5.2/i18n/zh_TW.po:9450:"- ``$HOME/.hgrc``\n"
mercurial-5.5.2/i18n/zh_TW.po-9451-"- ``/etc/mercurial/hgrc``\n"
##############################################
mercurial-5.5.2/i18n/da.po-12081-"the username setting is typically put into\n"
mercurial-5.5.2/i18n/da.po:12082:"``%USERPROFILE%\\mercurial.ini`` or ``$HOME/.hgrc`` and local\n"
mercurial-5.5.2/i18n/da.po-12083-"configuration is put into the per-repository ``<repo>/.hg/hgrc`` file."
##############################################
mercurial-5.5.2/i18n/da.po-12107-msgid ""
mercurial-5.5.2/i18n/da.po:12108:"| (Unix) ``$HOME/.hgrc``\n"
mercurial-5.5.2/i18n/da.po-12109-"| (Windows) ``%USERPROFILE%\\.hgrc``\n"
##############################################
mercurial-5.5.2/i18n/da.po-12141-"- ``<repo>/.hg/hgrc``\n"
mercurial-5.5.2/i18n/da.po:12142:"- ``$HOME/.hgrc``\n"
mercurial-5.5.2/i18n/da.po-12143-"- ``/etc/mercurial/hgrc``\n"
##############################################
mercurial-5.5.2/i18n/da.po-12322-"commands (or aliases), optionally including arguments. Positional\n"
mercurial-5.5.2/i18n/da.po:12323:"arguments in the form of ``$1``, ``$2``, etc in the alias definition\n"
mercurial-5.5.2/i18n/da.po-12324-"are expanded by Mercurial before execution. Positional arguments not\n"
mercurial-5.5.2/i18n/da.po:12325:"already used by ``$N`` in the definition are put at the end of the\n"
mercurial-5.5.2/i18n/da.po-12326-"command to be executed."
##############################################
mercurial-5.5.2/i18n/da.po-12377-msgid ""
mercurial-5.5.2/i18n/da.po:12378:"Shell aliases are executed in an environment where ``$HG`` expand to\n"
mercurial-5.5.2/i18n/da.po-12379-"the path of the Mercurial that was used to execute the alias. This is\n"
##############################################
mercurial-5.5.2/i18n/da.po-12381-"alias, as was done above for the purge alias. In addition,\n"
mercurial-5.5.2/i18n/da.po:12382:"``$HG_ARGS`` expand to the arguments given to Mercurial. In the ``hg\n"
mercurial-5.5.2/i18n/da.po:12383:"echo foo`` call above, ``$HG_ARGS`` would expand to ``echo foo``."
mercurial-5.5.2/i18n/da.po-12384-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-12447-"    be prompted for it. Environment variables are expanded in the\n"
mercurial-5.5.2/i18n/da.po:12448:"    username letting you do ``foo.username = $USER``. If the URI\n"
mercurial-5.5.2/i18n/da.po-12449-"    includes a username, only ``[auth]`` entries with a matching\n"
##############################################
mercurial-5.5.2/i18n/da.po-12684-"    first character set to which conversion from local encoding\n"
mercurial-5.5.2/i18n/da.po:12685:"    (``$HGENCODING``, ``ui.fallbackencoding``) succeeds. If correct\n"
mercurial-5.5.2/i18n/da.po-12686-"    conversion fails, the text in question is sent as is. Defaults to\n"
##############################################
mercurial-5.5.2/i18n/da.po-12696-"    3. ``ui.fallbackencoding``: if not in email.charsets\n"
mercurial-5.5.2/i18n/da.po:12697:"    4. ``$HGENCODING``: if not in email.charsets\n"
mercurial-5.5.2/i18n/da.po-12698-"    5. ``utf-8``: always last, regardless of settings"
##############################################
mercurial-5.5.2/i18n/da.po-12888-"  files being merged as well as the output file through these\n"
mercurial-5.5.2/i18n/da.po:12889:"  variables: ``$base``, ``$local``, ``$other``, ``$output``.\n"
mercurial-5.5.2/i18n/da.po:12890:"  Default: ``$local $base $other``"
mercurial-5.5.2/i18n/da.po-12891-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-13010-"additional information. For each hook below, the environment\n"
mercurial-5.5.2/i18n/da.po:13011:"variables it is passed are listed with names of the form ``$HG_foo``."
mercurial-5.5.2/i18n/da.po-13012-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-13016-"  Run after a changegroup has been added via push, pull or unbundle.\n"
mercurial-5.5.2/i18n/da.po:13017:"  ID of the first new changeset is in ``$HG_NODE``. URL from which\n"
mercurial-5.5.2/i18n/da.po:13018:"  changes came is in ``$HG_URL``."
mercurial-5.5.2/i18n/da.po-13019-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-13023-"  Run after a changeset has been created in the local repository. ID\n"
mercurial-5.5.2/i18n/da.po:13024:"  of the newly created changeset is in ``$HG_NODE``. Parent changeset\n"
mercurial-5.5.2/i18n/da.po:13025:"  IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/da.po-13026-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-13031-"  the local repository. The ID of the newly arrived changeset is in\n"
mercurial-5.5.2/i18n/da.po:13032:"  ``$HG_NODE``. URL that was source of changes came is in ``$HG_URL``."
mercurial-5.5.2/i18n/da.po-13033-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-13037-"  Run after sending changes from local repository to another. ID of\n"
mercurial-5.5.2/i18n/da.po:13038:"  first changeset sent is in ``$HG_NODE``. Source of operation is in\n"
mercurial-5.5.2/i18n/da.po:13039:"  ``$HG_SOURCE``; see \"preoutgoing\" hook for description."
mercurial-5.5.2/i18n/da.po-13040-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-13044-"  Run after successful invocations of the associated command. The\n"
mercurial-5.5.2/i18n/da.po:13045:"  contents of the command line are passed as ``$HG_ARGS`` and the result\n"
mercurial-5.5.2/i18n/da.po:13046:"  code in ``$HG_RESULT``. Parsed command line arguments are passed as \n"
mercurial-5.5.2/i18n/da.po:13047:"  ``$HG_PATS`` and ``$HG_OPTS``. These contain string representations of\n"
mercurial-5.5.2/i18n/da.po:13048:"  the python data internally passed to <command>. ``$HG_OPTS`` is a \n"
mercurial-5.5.2/i18n/da.po-13049-"  dictionary of options (with unspecified options set to their defaults).\n"
mercurial-5.5.2/i18n/da.po:13050:"  ``$HG_PATS`` is a list of arguments. Hook failure is ignored."
mercurial-5.5.2/i18n/da.po-13051-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-13055-"  Run before executing the associated command. The contents of the\n"
mercurial-5.5.2/i18n/da.po:13056:"  command line are passed as ``$HG_ARGS``. Parsed command line arguments\n"
mercurial-5.5.2/i18n/da.po:13057:"  are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain string\n"
mercurial-5.5.2/i18n/da.po:13058:"  representations of the data internally passed to <command>. ``$HG_OPTS``\n"
mercurial-5.5.2/i18n/da.po-13059-"  is a  dictionary of options (with unspecified options set to their\n"
mercurial-5.5.2/i18n/da.po:13060:"  defaults). ``$HG_PATS`` is a list of arguments. If the hook returns \n"
mercurial-5.5.2/i18n/da.po-13061-"  failure, the command doesn't execute and Mercurial returns the failure\n"
##############################################
mercurial-5.5.2/i18n/da.po-13069-"  cause the push, pull or unbundle to fail. URL from which changes\n"
mercurial-5.5.2/i18n/da.po:13070:"  will come is in ``$HG_URL``."
mercurial-5.5.2/i18n/da.po-13071-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-13076-"  commit to proceed. Non-zero status will cause the commit to fail.\n"
mercurial-5.5.2/i18n/da.po:13077:"  Parent changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/da.po-13078-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-13083-"  repository. Non-zero status will cause failure. The key namespace is\n"
mercurial-5.5.2/i18n/da.po:13084:"  in ``$HG_NAMESPACE``."
mercurial-5.5.2/i18n/da.po-13085-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-13093-"  just copy files instead then. Source of operation is in\n"
mercurial-5.5.2/i18n/da.po:13094:"  ``$HG_SOURCE``. If \"serve\", operation is happening on behalf of remote\n"
mercurial-5.5.2/i18n/da.po-13095-"  SSH or HTTP repository. If \"push\", \"pull\" or \"bundle\", operation\n"
##############################################
mercurial-5.5.2/i18n/da.po-13102-"  repository. Non-zero status will cause the key to be rejected. The\n"
mercurial-5.5.2/i18n/da.po:13103:"  key namespace is in ``$HG_NAMESPACE``, the key is in ``$HG_KEY``,\n"
mercurial-5.5.2/i18n/da.po:13104:"  the old value (if any) is in ``$HG_OLD``, and the new value is in\n"
mercurial-5.5.2/i18n/da.po:13105:"  ``$HG_NEW``."
mercurial-5.5.2/i18n/da.po-13106-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-13111-"  created. Non-zero status will cause the tag to fail. ID of\n"
mercurial-5.5.2/i18n/da.po:13112:"  changeset to tag is in ``$HG_NODE``. Name of tag is in ``$HG_TAG``. Tag "
mercurial-5.5.2/i18n/da.po-13113-"is\n"
mercurial-5.5.2/i18n/da.po:13114:"  local if ``$HG_LOCAL=1``, in repository if ``$HG_LOCAL=0``."
mercurial-5.5.2/i18n/da.po-13115-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-13122-"  before accepting them. Passed the ID of the first new changeset in\n"
mercurial-5.5.2/i18n/da.po:13123:"  ``$HG_NODE``. Exit status 0 allows the transaction to commit. Non-zero\n"
mercurial-5.5.2/i18n/da.po-13124-"  status will cause the transaction to be rolled back and the push,\n"
mercurial-5.5.2/i18n/da.po-13125-"  pull or unbundle will fail. URL that was source of changes is in\n"
mercurial-5.5.2/i18n/da.po:13126:"  ``$HG_URL``."
mercurial-5.5.2/i18n/da.po-13127-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-13134-"  commit to proceed. Non-zero status will cause the transaction to\n"
mercurial-5.5.2/i18n/da.po:13135:"  be rolled back. ID of changeset is in ``$HG_NODE``. Parent changeset\n"
mercurial-5.5.2/i18n/da.po:13136:"  IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/da.po-13137-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-13142-"  the update to proceed. Non-zero status will prevent the update.\n"
mercurial-5.5.2/i18n/da.po:13143:"  Changeset ID of first new parent is in ``$HG_PARENT1``. If merge, ID\n"
mercurial-5.5.2/i18n/da.po:13144:"  of second new parent is in ``$HG_PARENT2``."
mercurial-5.5.2/i18n/da.po-13145-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-13149-"  Run after listing pushkeys (like bookmarks) in the repository. The\n"
mercurial-5.5.2/i18n/da.po:13150:"  key namespace is in ``$HG_NAMESPACE``. ``$HG_VALUES`` is a\n"
mercurial-5.5.2/i18n/da.po-13151-"  dictionary containing the keys and values."
##############################################
mercurial-5.5.2/i18n/da.po-13156-"  Run after a pushkey (like a bookmark) is added to the\n"
mercurial-5.5.2/i18n/da.po:13157:"  repository. The key namespace is in ``$HG_NAMESPACE``, the key is in\n"
mercurial-5.5.2/i18n/da.po:13158:"  ``$HG_KEY``, the old value (if any) is in ``$HG_OLD``, and the new\n"
mercurial-5.5.2/i18n/da.po:13159:"  value is in ``$HG_NEW``."
mercurial-5.5.2/i18n/da.po-13160-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-13163-"``tag``\n"
mercurial-5.5.2/i18n/da.po:13164:"  Run after a tag is created. ID of tagged changeset is in ``$HG_NODE``.\n"
mercurial-5.5.2/i18n/da.po:13165:"  Name of tag is in ``$HG_TAG``. Tag is local if ``$HG_LOCAL=1``, in\n"
mercurial-5.5.2/i18n/da.po:13166:"  repository if ``$HG_LOCAL=0``."
mercurial-5.5.2/i18n/da.po-13167-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-13171-"  Run after updating the working directory. Changeset ID of first\n"
mercurial-5.5.2/i18n/da.po:13172:"  new parent is in ``$HG_PARENT1``. If merge, ID of second new parent is\n"
mercurial-5.5.2/i18n/da.po:13173:"  in ``$HG_PARENT2``. If the update succeeded, ``$HG_ERROR=0``. If the\n"
mercurial-5.5.2/i18n/da.po:13174:"  update failed (e.g. because conflicts not resolved), ``$HG_ERROR=1``."
mercurial-5.5.2/i18n/da.po-13175-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-13186-".. note:: Environment variables with empty values may not be passed to\n"
mercurial-5.5.2/i18n/da.po:13187:"   hooks on platforms such as Windows. As an example, ``$HG_PARENT2``\n"
mercurial-5.5.2/i18n/da.po-13188-"   will have an empty value under Unix-like platforms for non-merge\n"
##############################################
mercurial-5.5.2/i18n/da.po-13467-"group with name ``*``. These settings must be placed in an\n"
mercurial-5.5.2/i18n/da.po:13468:"*already-trusted file* to take effect, such as ``$HOME/.hgrc`` of the\n"
mercurial-5.5.2/i18n/da.po-13469-"user or service running Mercurial."
##############################################
mercurial-5.5.2/i18n/da.po-13501-"    Whether to prompt for a username when committing. If True, and\n"
mercurial-5.5.2/i18n/da.po:13502:"    neither ``$HGUSER`` nor ``$EMAIL`` has been specified, then the user "
mercurial-5.5.2/i18n/da.po-13503-"will\n"
##############################################
mercurial-5.5.2/i18n/da.po-13523-"``editor``\n"
mercurial-5.5.2/i18n/da.po:13524:"    The editor to use during a commit. Default is ``$EDITOR`` or ``vi``."
mercurial-5.5.2/i18n/da.po-13525-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-13634-"    Typically a person's name and email address, e.g. ``Fred Widget\n"
mercurial-5.5.2/i18n/da.po:13635:"    <fred@example.com>``. Default is ``$EMAIL`` or ``username@hostname``. "
mercurial-5.5.2/i18n/da.po-13636-"If\n"
mercurial-5.5.2/i18n/da.po-13637-"    the username in hgrc is empty, it has to be specified manually or\n"
mercurial-5.5.2/i18n/da.po:13638:"    in a different hgrc file (e.g. ``$HOME/.hgrc``, if the admin set\n"
mercurial-5.5.2/i18n/da.po-13639-"    ``username =``  in the system hgrc). Environment variables in the\n"
##############################################
mercurial-5.5.2/i18n/da.po-13813-"    Name or email address of the person in charge of the repository.\n"
mercurial-5.5.2/i18n/da.po:13814:"    Defaults to ui.username or ``$EMAIL`` or \"unknown\" if unset or empty."
mercurial-5.5.2/i18n/da.po-13815-msgstr ""
##############################################
mercurial-5.5.2/i18n/da.po-15560-"in the ``revsetalias`` section of a Mercurial configuration file. Arguments\n"
mercurial-5.5.2/i18n/da.po:15561:"of the form `$1`, `$2`, etc. are substituted from the alias into the\n"
mercurial-5.5.2/i18n/da.po-15562-"definition."
##############################################
mercurial-5.5.2/i18n/sv.po-13225-"the username setting is typically put into\n"
mercurial-5.5.2/i18n/sv.po:13226:"``%USERPROFILE%\\mercurial.ini`` or ``$HOME/.hgrc`` and local\n"
mercurial-5.5.2/i18n/sv.po-13227-"configuration is put into the per-repository ``<repo>/.hg/hgrc`` file."
##############################################
mercurial-5.5.2/i18n/sv.po-13251-msgid ""
mercurial-5.5.2/i18n/sv.po:13252:"| (Plan 9) ``$home/lib/hgrc``\n"
mercurial-5.5.2/i18n/sv.po:13253:"| (Unix) ``$HOME/.hgrc``\n"
mercurial-5.5.2/i18n/sv.po-13254-"| (Windows) ``%USERPROFILE%\\.hgrc``\n"
##############################################
mercurial-5.5.2/i18n/sv.po-13464-"commands (or aliases), optionally including arguments. Positional\n"
mercurial-5.5.2/i18n/sv.po:13465:"arguments in the form of ``$1``, ``$2``, etc in the alias definition\n"
mercurial-5.5.2/i18n/sv.po-13466-"are expanded by Mercurial before execution. Positional arguments not\n"
mercurial-5.5.2/i18n/sv.po:13467:"already used by ``$N`` in the definition are put at the end of the\n"
mercurial-5.5.2/i18n/sv.po-13468-"command to be executed."
##############################################
mercurial-5.5.2/i18n/sv.po-13519-msgid ""
mercurial-5.5.2/i18n/sv.po:13520:"Positional arguments like ``$1``, ``$2``, etc. in the alias definition\n"
mercurial-5.5.2/i18n/sv.po-13521-"expand to the command arguments. Unmatched arguments are\n"
mercurial-5.5.2/i18n/sv.po:13522:"removed. ``$0`` expands to the alias name and ``$@`` expands to all\n"
mercurial-5.5.2/i18n/sv.po-13523-"arguments separated by a space. These expansions happen before the\n"
##############################################
mercurial-5.5.2/i18n/sv.po-13527-msgid ""
mercurial-5.5.2/i18n/sv.po:13528:"Shell aliases are executed in an environment where ``$HG`` expands to\n"
mercurial-5.5.2/i18n/sv.po-13529-"the path of the Mercurial that was used to execute the alias. This is\n"
##############################################
mercurial-5.5.2/i18n/sv.po-13531-"alias, as was done above for the purge alias. In addition,\n"
mercurial-5.5.2/i18n/sv.po:13532:"``$HG_ARGS`` expands to the arguments given to Mercurial. In the ``hg\n"
mercurial-5.5.2/i18n/sv.po:13533:"echo foo`` call above, ``$HG_ARGS`` would expand to ``echo foo``."
mercurial-5.5.2/i18n/sv.po-13534-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-13636-"    be prompted for it. Environment variables are expanded in the\n"
mercurial-5.5.2/i18n/sv.po:13637:"    username letting you do ``foo.username = $USER``. If the URI\n"
mercurial-5.5.2/i18n/sv.po-13638-"    includes a username, only ``[auth]`` entries with a matching\n"
##############################################
mercurial-5.5.2/i18n/sv.po-13869-"    first character set to which conversion from local encoding\n"
mercurial-5.5.2/i18n/sv.po:13870:"    (``$HGENCODING``, ``ui.fallbackencoding``) succeeds. If correct\n"
mercurial-5.5.2/i18n/sv.po-13871-"    conversion fails, the text in question is sent as is. Defaults to\n"
##############################################
mercurial-5.5.2/i18n/sv.po-13881-"    3. ``ui.fallbackencoding``: if not in email.charsets\n"
mercurial-5.5.2/i18n/sv.po:13882:"    4. ``$HGENCODING``: if not in email.charsets\n"
mercurial-5.5.2/i18n/sv.po-13883-"    5. ``utf-8``: always last, regardless of settings"
##############################################
mercurial-5.5.2/i18n/sv.po-14057-"additional information. For each hook below, the environment\n"
mercurial-5.5.2/i18n/sv.po:14058:"variables it is passed are listed with names of the form ``$HG_foo``."
mercurial-5.5.2/i18n/sv.po-14059-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-14063-"  Run after a changegroup has been added via push, pull or unbundle.\n"
mercurial-5.5.2/i18n/sv.po:14064:"  ID of the first new changeset is in ``$HG_NODE``. URL from which\n"
mercurial-5.5.2/i18n/sv.po:14065:"  changes came is in ``$HG_URL``."
mercurial-5.5.2/i18n/sv.po-14066-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-14070-"  Run after a changeset has been created in the local repository. ID\n"
mercurial-5.5.2/i18n/sv.po:14071:"  of the newly created changeset is in ``$HG_NODE``. Parent changeset\n"
mercurial-5.5.2/i18n/sv.po:14072:"  IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/sv.po-14073-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-14078-"  the local repository. The ID of the newly arrived changeset is in\n"
mercurial-5.5.2/i18n/sv.po:14079:"  ``$HG_NODE``. URL that was source of changes came is in ``$HG_URL``."
mercurial-5.5.2/i18n/sv.po-14080-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-14084-"  Run after sending changes from local repository to another. ID of\n"
mercurial-5.5.2/i18n/sv.po:14085:"  first changeset sent is in ``$HG_NODE``. Source of operation is in\n"
mercurial-5.5.2/i18n/sv.po:14086:"  ``$HG_SOURCE``; see \"preoutgoing\" hook for description."
mercurial-5.5.2/i18n/sv.po-14087-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-14091-"  Run after successful invocations of the associated command. The\n"
mercurial-5.5.2/i18n/sv.po:14092:"  contents of the command line are passed as ``$HG_ARGS`` and the result\n"
mercurial-5.5.2/i18n/sv.po:14093:"  code in ``$HG_RESULT``. Parsed command line arguments are passed as \n"
mercurial-5.5.2/i18n/sv.po:14094:"  ``$HG_PATS`` and ``$HG_OPTS``. These contain string representations of\n"
mercurial-5.5.2/i18n/sv.po:14095:"  the python data internally passed to <command>. ``$HG_OPTS`` is a \n"
mercurial-5.5.2/i18n/sv.po-14096-"  dictionary of options (with unspecified options set to their defaults).\n"
mercurial-5.5.2/i18n/sv.po:14097:"  ``$HG_PATS`` is a list of arguments. Hook failure is ignored."
mercurial-5.5.2/i18n/sv.po-14098-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-14102-"  Run before executing the associated command. The contents of the\n"
mercurial-5.5.2/i18n/sv.po:14103:"  command line are passed as ``$HG_ARGS``. Parsed command line arguments\n"
mercurial-5.5.2/i18n/sv.po:14104:"  are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain string\n"
mercurial-5.5.2/i18n/sv.po:14105:"  representations of the data internally passed to <command>. ``$HG_OPTS``\n"
mercurial-5.5.2/i18n/sv.po-14106-"  is a  dictionary of options (with unspecified options set to their\n"
mercurial-5.5.2/i18n/sv.po:14107:"  defaults). ``$HG_PATS`` is a list of arguments. If the hook returns \n"
mercurial-5.5.2/i18n/sv.po-14108-"  failure, the command doesn't execute and Mercurial returns the failure\n"
##############################################
mercurial-5.5.2/i18n/sv.po-14116-"  cause the push, pull or unbundle to fail. URL from which changes\n"
mercurial-5.5.2/i18n/sv.po:14117:"  will come is in ``$HG_URL``."
mercurial-5.5.2/i18n/sv.po-14118-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-14123-"  commit to proceed. Non-zero status will cause the commit to fail.\n"
mercurial-5.5.2/i18n/sv.po:14124:"  Parent changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/sv.po-14125-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-14130-"  repository. Non-zero status will cause failure. The key namespace is\n"
mercurial-5.5.2/i18n/sv.po:14131:"  in ``$HG_NAMESPACE``."
mercurial-5.5.2/i18n/sv.po-14132-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-14140-"  just copy files instead then. Source of operation is in\n"
mercurial-5.5.2/i18n/sv.po:14141:"  ``$HG_SOURCE``. If \"serve\", operation is happening on behalf of remote\n"
mercurial-5.5.2/i18n/sv.po-14142-"  SSH or HTTP repository. If \"push\", \"pull\" or \"bundle\", operation\n"
##############################################
mercurial-5.5.2/i18n/sv.po-14149-"  repository. Non-zero status will cause the key to be rejected. The\n"
mercurial-5.5.2/i18n/sv.po:14150:"  key namespace is in ``$HG_NAMESPACE``, the key is in ``$HG_KEY``,\n"
mercurial-5.5.2/i18n/sv.po:14151:"  the old value (if any) is in ``$HG_OLD``, and the new value is in\n"
mercurial-5.5.2/i18n/sv.po:14152:"  ``$HG_NEW``."
mercurial-5.5.2/i18n/sv.po-14153-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-14158-"  created. Non-zero status will cause the tag to fail. ID of\n"
mercurial-5.5.2/i18n/sv.po:14159:"  changeset to tag is in ``$HG_NODE``. Name of tag is in ``$HG_TAG``. Tag "
mercurial-5.5.2/i18n/sv.po-14160-"is\n"
mercurial-5.5.2/i18n/sv.po:14161:"  local if ``$HG_LOCAL=1``, in repository if ``$HG_LOCAL=0``."
mercurial-5.5.2/i18n/sv.po-14162-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-14169-"  before accepting them. Passed the ID of the first new changeset in\n"
mercurial-5.5.2/i18n/sv.po:14170:"  ``$HG_NODE``. Exit status 0 allows the transaction to commit. Non-zero\n"
mercurial-5.5.2/i18n/sv.po-14171-"  status will cause the transaction to be rolled back and the push,\n"
mercurial-5.5.2/i18n/sv.po-14172-"  pull or unbundle will fail. URL that was source of changes is in\n"
mercurial-5.5.2/i18n/sv.po:14173:"  ``$HG_URL``."
mercurial-5.5.2/i18n/sv.po-14174-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-14181-"  commit to proceed. Non-zero status will cause the transaction to\n"
mercurial-5.5.2/i18n/sv.po:14182:"  be rolled back. ID of changeset is in ``$HG_NODE``. Parent changeset\n"
mercurial-5.5.2/i18n/sv.po:14183:"  IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/sv.po-14184-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-14189-"  the update to proceed. Non-zero status will prevent the update.\n"
mercurial-5.5.2/i18n/sv.po:14190:"  Changeset ID of first new parent is in ``$HG_PARENT1``. If merge, ID\n"
mercurial-5.5.2/i18n/sv.po:14191:"  of second new parent is in ``$HG_PARENT2``."
mercurial-5.5.2/i18n/sv.po-14192-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-14196-"  Run after listing pushkeys (like bookmarks) in the repository. The\n"
mercurial-5.5.2/i18n/sv.po:14197:"  key namespace is in ``$HG_NAMESPACE``. ``$HG_VALUES`` is a\n"
mercurial-5.5.2/i18n/sv.po-14198-"  dictionary containing the keys and values."
##############################################
mercurial-5.5.2/i18n/sv.po-14203-"  Run after a pushkey (like a bookmark) is added to the\n"
mercurial-5.5.2/i18n/sv.po:14204:"  repository. The key namespace is in ``$HG_NAMESPACE``, the key is in\n"
mercurial-5.5.2/i18n/sv.po:14205:"  ``$HG_KEY``, the old value (if any) is in ``$HG_OLD``, and the new\n"
mercurial-5.5.2/i18n/sv.po:14206:"  value is in ``$HG_NEW``."
mercurial-5.5.2/i18n/sv.po-14207-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-14210-"``tag``\n"
mercurial-5.5.2/i18n/sv.po:14211:"  Run after a tag is created. ID of tagged changeset is in ``$HG_NODE``.\n"
mercurial-5.5.2/i18n/sv.po:14212:"  Name of tag is in ``$HG_TAG``. Tag is local if ``$HG_LOCAL=1``, in\n"
mercurial-5.5.2/i18n/sv.po:14213:"  repository if ``$HG_LOCAL=0``."
mercurial-5.5.2/i18n/sv.po-14214-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-14218-"  Run after updating the working directory. Changeset ID of first\n"
mercurial-5.5.2/i18n/sv.po:14219:"  new parent is in ``$HG_PARENT1``. If merge, ID of second new parent is\n"
mercurial-5.5.2/i18n/sv.po:14220:"  in ``$HG_PARENT2``. If the update succeeded, ``$HG_ERROR=0``. If the\n"
mercurial-5.5.2/i18n/sv.po:14221:"  update failed (e.g. because conflicts not resolved), ``$HG_ERROR=1``."
mercurial-5.5.2/i18n/sv.po-14222-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-14233-".. note:: Environment variables with empty values may not be passed to\n"
mercurial-5.5.2/i18n/sv.po:14234:"   hooks on platforms such as Windows. As an example, ``$HG_PARENT2``\n"
mercurial-5.5.2/i18n/sv.po-14235-"   will have an empty value under Unix-like platforms for non-merge\n"
##############################################
mercurial-5.5.2/i18n/sv.po-14401-"  files being merged as well as the output file through these\n"
mercurial-5.5.2/i18n/sv.po:14402:"  variables: ``$base``, ``$local``, ``$other``, ``$output``.\n"
mercurial-5.5.2/i18n/sv.po:14403:"  Default: ``$local $base $other``"
mercurial-5.5.2/i18n/sv.po-14404-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-14794-"group with name ``*``. These settings must be placed in an\n"
mercurial-5.5.2/i18n/sv.po:14795:"*already-trusted file* to take effect, such as ``$HOME/.hgrc`` of the\n"
mercurial-5.5.2/i18n/sv.po-14796-"user or service running Mercurial."
##############################################
mercurial-5.5.2/i18n/sv.po-14831-"    Whether to prompt for a username when committing. If True, and\n"
mercurial-5.5.2/i18n/sv.po:14832:"    neither ``$HGUSER`` nor ``$EMAIL`` has been specified, then the user "
mercurial-5.5.2/i18n/sv.po-14833-"will\n"
##############################################
mercurial-5.5.2/i18n/sv.po-14853-"``editor``\n"
mercurial-5.5.2/i18n/sv.po:14854:"    The editor to use during a commit. Default is ``$EDITOR`` or ``vi``."
mercurial-5.5.2/i18n/sv.po-14855-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-14970-"    Typically a person's name and email address, e.g. ``Fred Widget\n"
mercurial-5.5.2/i18n/sv.po:14971:"    <fred@example.com>``. Default is ``$EMAIL`` or ``username@hostname``. "
mercurial-5.5.2/i18n/sv.po-14972-"If\n"
mercurial-5.5.2/i18n/sv.po-14973-"    the username in hgrc is empty, it has to be specified manually or\n"
mercurial-5.5.2/i18n/sv.po:14974:"    in a different hgrc file (e.g. ``$HOME/.hgrc``, if the admin set\n"
mercurial-5.5.2/i18n/sv.po-14975-"    ``username =``  in the system hgrc). Environment variables in the\n"
##############################################
mercurial-5.5.2/i18n/sv.po-15162-"    Name or email address of the person in charge of the repository.\n"
mercurial-5.5.2/i18n/sv.po:15163:"    Defaults to ui.username or ``$EMAIL`` or \"unknown\" if unset or empty."
mercurial-5.5.2/i18n/sv.po-15164-msgstr ""
##############################################
mercurial-5.5.2/i18n/sv.po-17155-"in the ``revsetalias`` section of a Mercurial configuration file. Arguments\n"
mercurial-5.5.2/i18n/sv.po:17156:"of the form `$1`, `$2`, etc. are substituted from the alias into the\n"
mercurial-5.5.2/i18n/sv.po-17157-"definition."
##############################################
mercurial-5.5.2/i18n/de.po-15529-"the username setting is typically put into\n"
mercurial-5.5.2/i18n/de.po:15530:"``%USERPROFILE%\\mercurial.ini`` or ``$HOME/.hgrc`` and local\n"
mercurial-5.5.2/i18n/de.po-15531-"configuration is put into the per-repository ``<repo>/.hg/hgrc`` file."
##############################################
mercurial-5.5.2/i18n/de.po-15555-msgid ""
mercurial-5.5.2/i18n/de.po:15556:"| (Plan 9) ``$home/lib/hgrc``\n"
mercurial-5.5.2/i18n/de.po:15557:"| (Unix) ``$HOME/.hgrc``\n"
mercurial-5.5.2/i18n/de.po-15558-"| (Windows) ``%USERPROFILE%\\.hgrc``\n"
##############################################
mercurial-5.5.2/i18n/de.po-15776-"commands (or aliases), optionally including arguments. Positional\n"
mercurial-5.5.2/i18n/de.po:15777:"arguments in the form of ``$1``, ``$2``, etc in the alias definition\n"
mercurial-5.5.2/i18n/de.po-15778-"are expanded by Mercurial before execution. Positional arguments not\n"
mercurial-5.5.2/i18n/de.po:15779:"already used by ``$N`` in the definition are put at the end of the\n"
mercurial-5.5.2/i18n/de.po-15780-"command to be executed."
##############################################
mercurial-5.5.2/i18n/de.po-15832-msgid ""
mercurial-5.5.2/i18n/de.po:15833:"Positional arguments like ``$1``, ``$2``, etc. in the alias definition\n"
mercurial-5.5.2/i18n/de.po-15834-"expand to the command arguments. Unmatched arguments are\n"
mercurial-5.5.2/i18n/de.po:15835:"removed. ``$0`` expands to the alias name and ``$@`` expands to all\n"
mercurial-5.5.2/i18n/de.po-15836-"arguments separated by a space. These expansions happen before the\n"
##############################################
mercurial-5.5.2/i18n/de.po-15840-msgid ""
mercurial-5.5.2/i18n/de.po:15841:"Shell aliases are executed in an environment where ``$HG`` expands to\n"
mercurial-5.5.2/i18n/de.po-15842-"the path of the Mercurial that was used to execute the alias. This is\n"
##############################################
mercurial-5.5.2/i18n/de.po-15844-"alias, as was done above for the purge alias. In addition,\n"
mercurial-5.5.2/i18n/de.po:15845:"``$HG_ARGS`` expands to the arguments given to Mercurial. In the ``hg\n"
mercurial-5.5.2/i18n/de.po:15846:"echo foo`` call above, ``$HG_ARGS`` would expand to ``echo foo``."
mercurial-5.5.2/i18n/de.po-15847-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-15938-"    be prompted for it. Environment variables are expanded in the\n"
mercurial-5.5.2/i18n/de.po:15939:"    username letting you do ``foo.username = $USER``. If the URI\n"
mercurial-5.5.2/i18n/de.po-15940-"    includes a username, only ``[auth]`` entries with a matching\n"
##############################################
mercurial-5.5.2/i18n/de.po-16161-"    first character set to which conversion from local encoding\n"
mercurial-5.5.2/i18n/de.po:16162:"    (``$HGENCODING``, ``ui.fallbackencoding``) succeeds. If correct\n"
mercurial-5.5.2/i18n/de.po-16163-"    conversion fails, the text in question is sent as is. Defaults to\n"
##############################################
mercurial-5.5.2/i18n/de.po-16173-"    3. ``ui.fallbackencoding``: if not in email.charsets\n"
mercurial-5.5.2/i18n/de.po:16174:"    4. ``$HGENCODING``: if not in email.charsets\n"
mercurial-5.5.2/i18n/de.po-16175-"    5. ``utf-8``: always last, regardless of settings"
##############################################
mercurial-5.5.2/i18n/de.po-16338-"additional information. For each hook below, the environment\n"
mercurial-5.5.2/i18n/de.po:16339:"variables it is passed are listed with names of the form ``$HG_foo``."
mercurial-5.5.2/i18n/de.po-16340-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-16344-"  Run after a changegroup has been added via push, pull or unbundle.\n"
mercurial-5.5.2/i18n/de.po:16345:"  ID of the first new changeset is in ``$HG_NODE``. URL from which\n"
mercurial-5.5.2/i18n/de.po:16346:"  changes came is in ``$HG_URL``."
mercurial-5.5.2/i18n/de.po-16347-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-16351-"  Run after a changeset has been created in the local repository. ID\n"
mercurial-5.5.2/i18n/de.po:16352:"  of the newly created changeset is in ``$HG_NODE``. Parent changeset\n"
mercurial-5.5.2/i18n/de.po:16353:"  IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/de.po-16354-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-16359-"  the local repository. The ID of the newly arrived changeset is in\n"
mercurial-5.5.2/i18n/de.po:16360:"  ``$HG_NODE``. URL that was source of changes came is in ``$HG_URL``."
mercurial-5.5.2/i18n/de.po-16361-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-16365-"  Run after sending changes from local repository to another. ID of\n"
mercurial-5.5.2/i18n/de.po:16366:"  first changeset sent is in ``$HG_NODE``. Source of operation is in\n"
mercurial-5.5.2/i18n/de.po:16367:"  ``$HG_SOURCE``; see \"preoutgoing\" hook for description."
mercurial-5.5.2/i18n/de.po-16368-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-16372-"  Run after successful invocations of the associated command. The\n"
mercurial-5.5.2/i18n/de.po:16373:"  contents of the command line are passed as ``$HG_ARGS`` and the result\n"
mercurial-5.5.2/i18n/de.po:16374:"  code in ``$HG_RESULT``. Parsed command line arguments are passed as\n"
mercurial-5.5.2/i18n/de.po:16375:"  ``$HG_PATS`` and ``$HG_OPTS``. These contain string representations of\n"
mercurial-5.5.2/i18n/de.po:16376:"  the python data internally passed to <command>. ``$HG_OPTS`` is a\n"
mercurial-5.5.2/i18n/de.po-16377-"  dictionary of options (with unspecified options set to their defaults).\n"
mercurial-5.5.2/i18n/de.po:16378:"  ``$HG_PATS`` is a list of arguments. Hook failure is ignored."
mercurial-5.5.2/i18n/de.po-16379-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-16383-"  Run before executing the associated command. The contents of the\n"
mercurial-5.5.2/i18n/de.po:16384:"  command line are passed as ``$HG_ARGS``. Parsed command line arguments\n"
mercurial-5.5.2/i18n/de.po:16385:"  are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain string\n"
mercurial-5.5.2/i18n/de.po:16386:"  representations of the data internally passed to <command>. ``$HG_OPTS``\n"
mercurial-5.5.2/i18n/de.po-16387-"  is a  dictionary of options (with unspecified options set to their\n"
mercurial-5.5.2/i18n/de.po:16388:"  defaults). ``$HG_PATS`` is a list of arguments. If the hook returns\n"
mercurial-5.5.2/i18n/de.po-16389-"  failure, the command doesn't execute and Mercurial returns the failure\n"
##############################################
mercurial-5.5.2/i18n/de.po-16397-"  cause the push, pull or unbundle to fail. URL from which changes\n"
mercurial-5.5.2/i18n/de.po:16398:"  will come is in ``$HG_URL``."
mercurial-5.5.2/i18n/de.po-16399-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-16404-"  commit to proceed. Non-zero status will cause the commit to fail.\n"
mercurial-5.5.2/i18n/de.po:16405:"  Parent changeset IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/de.po-16406-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-16411-"  repository. Non-zero status will cause failure. The key namespace is\n"
mercurial-5.5.2/i18n/de.po:16412:"  in ``$HG_NAMESPACE``."
mercurial-5.5.2/i18n/de.po-16413-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-16421-"  just copy files instead then. Source of operation is in\n"
mercurial-5.5.2/i18n/de.po:16422:"  ``$HG_SOURCE``. If \"serve\", operation is happening on behalf of remote\n"
mercurial-5.5.2/i18n/de.po-16423-"  SSH or HTTP repository. If \"push\", \"pull\" or \"bundle\", operation\n"
##############################################
mercurial-5.5.2/i18n/de.po-16430-"  repository. Non-zero status will cause the key to be rejected. The\n"
mercurial-5.5.2/i18n/de.po:16431:"  key namespace is in ``$HG_NAMESPACE``, the key is in ``$HG_KEY``,\n"
mercurial-5.5.2/i18n/de.po:16432:"  the old value (if any) is in ``$HG_OLD``, and the new value is in\n"
mercurial-5.5.2/i18n/de.po:16433:"  ``$HG_NEW``."
mercurial-5.5.2/i18n/de.po-16434-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-16439-"  created. Non-zero status will cause the tag to fail. ID of\n"
mercurial-5.5.2/i18n/de.po:16440:"  changeset to tag is in ``$HG_NODE``. Name of tag is in ``$HG_TAG``. Tag "
mercurial-5.5.2/i18n/de.po-16441-"is\n"
mercurial-5.5.2/i18n/de.po:16442:"  local if ``$HG_LOCAL=1``, in repository if ``$HG_LOCAL=0``."
mercurial-5.5.2/i18n/de.po-16443-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-16450-"  before accepting them. Passed the ID of the first new changeset in\n"
mercurial-5.5.2/i18n/de.po:16451:"  ``$HG_NODE``. Exit status 0 allows the transaction to commit. Non-zero\n"
mercurial-5.5.2/i18n/de.po-16452-"  status will cause the transaction to be rolled back and the push,\n"
mercurial-5.5.2/i18n/de.po-16453-"  pull or unbundle will fail. URL that was source of changes is in\n"
mercurial-5.5.2/i18n/de.po:16454:"  ``$HG_URL``."
mercurial-5.5.2/i18n/de.po-16455-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-16462-"  commit to proceed. Non-zero status will cause the transaction to\n"
mercurial-5.5.2/i18n/de.po:16463:"  be rolled back. ID of changeset is in ``$HG_NODE``. Parent changeset\n"
mercurial-5.5.2/i18n/de.po:16464:"  IDs are in ``$HG_PARENT1`` and ``$HG_PARENT2``."
mercurial-5.5.2/i18n/de.po-16465-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-16470-"  the update to proceed. Non-zero status will prevent the update.\n"
mercurial-5.5.2/i18n/de.po:16471:"  Changeset ID of first new parent is in ``$HG_PARENT1``. If merge, ID\n"
mercurial-5.5.2/i18n/de.po:16472:"  of second new parent is in ``$HG_PARENT2``."
mercurial-5.5.2/i18n/de.po-16473-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-16477-"  Run after listing pushkeys (like bookmarks) in the repository. The\n"
mercurial-5.5.2/i18n/de.po:16478:"  key namespace is in ``$HG_NAMESPACE``. ``$HG_VALUES`` is a\n"
mercurial-5.5.2/i18n/de.po-16479-"  dictionary containing the keys and values."
##############################################
mercurial-5.5.2/i18n/de.po-16484-"  Run after a pushkey (like a bookmark) is added to the\n"
mercurial-5.5.2/i18n/de.po:16485:"  repository. The key namespace is in ``$HG_NAMESPACE``, the key is in\n"
mercurial-5.5.2/i18n/de.po:16486:"  ``$HG_KEY``, the old value (if any) is in ``$HG_OLD``, and the new\n"
mercurial-5.5.2/i18n/de.po:16487:"  value is in ``$HG_NEW``."
mercurial-5.5.2/i18n/de.po-16488-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-16491-"``tag``\n"
mercurial-5.5.2/i18n/de.po:16492:"  Run after a tag is created. ID of tagged changeset is in ``$HG_NODE``.\n"
mercurial-5.5.2/i18n/de.po:16493:"  Name of tag is in ``$HG_TAG``. Tag is local if ``$HG_LOCAL=1``, in\n"
mercurial-5.5.2/i18n/de.po:16494:"  repository if ``$HG_LOCAL=0``."
mercurial-5.5.2/i18n/de.po-16495-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-16499-"  Run after updating the working directory. Changeset ID of first\n"
mercurial-5.5.2/i18n/de.po:16500:"  new parent is in ``$HG_PARENT1``. If merge, ID of second new parent is\n"
mercurial-5.5.2/i18n/de.po:16501:"  in ``$HG_PARENT2``. If the update succeeded, ``$HG_ERROR=0``. If the\n"
mercurial-5.5.2/i18n/de.po:16502:"  update failed (e.g. because conflicts not resolved), ``$HG_ERROR=1``."
mercurial-5.5.2/i18n/de.po-16503-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-16516-".. note:: Environment variables with empty values may not be passed to\n"
mercurial-5.5.2/i18n/de.po:16517:"   hooks on platforms such as Windows. As an example, ``$HG_PARENT2``\n"
mercurial-5.5.2/i18n/de.po-16518-"   will have an empty value under Unix-like platforms for non-merge\n"
##############################################
mercurial-5.5.2/i18n/de.po-16676-"  files being merged as well as the output file through these\n"
mercurial-5.5.2/i18n/de.po:16677:"  variables: ``$base``, ``$local``, ``$other``, ``$output``.\n"
mercurial-5.5.2/i18n/de.po:16678:"  Default: ``$local $base $other``"
mercurial-5.5.2/i18n/de.po-16679-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-17104-"group with name ``*``. These settings must be placed in an\n"
mercurial-5.5.2/i18n/de.po:17105:"*already-trusted file* to take effect, such as ``$HOME/.hgrc`` of the\n"
mercurial-5.5.2/i18n/de.po-17106-"user or service running Mercurial."
##############################################
mercurial-5.5.2/i18n/de.po-17138-"    Whether to prompt for a username when committing. If True, and\n"
mercurial-5.5.2/i18n/de.po:17139:"    neither ``$HGUSER`` nor ``$EMAIL`` has been specified, then the user "
mercurial-5.5.2/i18n/de.po-17140-"will\n"
##############################################
mercurial-5.5.2/i18n/de.po-17167-"``editor``\n"
mercurial-5.5.2/i18n/de.po:17168:"    The editor to use during a commit. Default is ``$EDITOR`` or ``vi``."
mercurial-5.5.2/i18n/de.po-17169-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-17286-"    Typically a person's name and email address, e.g. ``Fred Widget\n"
mercurial-5.5.2/i18n/de.po:17287:"    <fred@example.com>``. Default is ``$EMAIL`` or ``username@hostname``. "
mercurial-5.5.2/i18n/de.po-17288-"If\n"
mercurial-5.5.2/i18n/de.po-17289-"    the username in hgrc is empty, it has to be specified manually or\n"
mercurial-5.5.2/i18n/de.po:17290:"    in a different hgrc file (e.g. ``$HOME/.hgrc``, if the admin set\n"
mercurial-5.5.2/i18n/de.po-17291-"    ``username =``  in the system hgrc). Environment variables in the\n"
##############################################
mercurial-5.5.2/i18n/de.po-17481-"    Name or email address of the person in charge of the repository.\n"
mercurial-5.5.2/i18n/de.po:17482:"    Defaults to ui.username or ``$EMAIL`` or \"unknown\" if unset or empty."
mercurial-5.5.2/i18n/de.po-17483-msgstr ""
##############################################
mercurial-5.5.2/i18n/de.po-18962-msgid ""
mercurial-5.5.2/i18n/de.po:18963:"``/etc/mercurial/hgrc``, ``$HOME/.hgrc``, ``.hg/hgrc``\n"
mercurial-5.5.2/i18n/de.po-18964-"    This file contains defaults and configuration. Values in\n"
mercurial-5.5.2/i18n/de.po:18965:"    ``.hg/hgrc`` override those in ``$HOME/.hgrc``, and these override\n"
mercurial-5.5.2/i18n/de.po-18966-"    settings made in the global ``/etc/mercurial/hgrc`` configuration.\n"
##############################################
mercurial-5.5.2/i18n/de.po-20014-"in the ``revsetalias`` section of a Mercurial configuration file. Arguments\n"
mercurial-5.5.2/i18n/de.po:20015:"of the form `$1`, `$2`, etc. are substituted from the alias into the\n"
mercurial-5.5.2/i18n/de.po-20016-"definition."