merge with stable
authorAugie Fackler <augie@google.com>
Thu, 01 Feb 2018 14:28:45 -0500
changeset 35861 34287c2e3fc4
parent 35793 4fb2bb61597c (current diff)
parent 35820 1d60ad093792 (diff)
child 35862 4269971b0d26
merge with stable
--- a/.hgsigs	Sat Jan 20 22:55:42 2018 -0800
+++ b/.hgsigs	Thu Feb 01 14:28:45 2018 -0500
@@ -156,3 +156,5 @@
 0ccb43d4cf01d013ae05917ec4f305509f851b2d 0 iQJVBAABCAA/FiEEOoFVFj0OIKUw/LeGR6Z/+qNGqs4FAln6Qp8hHGtidWxsb2NrK21lcmN1cmlhbEByaW5nd29ybGQub3JnAAoJEEemf/qjRqrOJ8MP/2ufm/dbrFoE0F8hewhztG1vS4stus13lZ9lmM9kza8OKeOgY/MDH8GaV3O8GnRiCNUFsVD8JEIexE31c84H2Ie7VQO0GQSUHSyMCRrbED6IvfrWp6EZ6RDNPk4LHBfxCuPmuVHGRoGZtsLKJBPIxIHJKWMlEJlj9BZuUxZp/8kurQ6CXwblVbFzXdOaZQlioOBH27Bk3S0+gXfJ+wA2ed5XOQvT9jwjqC8y/1t8obaoPTpzyAvb9NArG+9RT9vfNN42aWISZNwg6RW5oLJISqoGrAes6EoG7dZfOC0UoKMVYXoNvZzJvVlMHyjugIoid+WI+V8y9bPrRTfbPCmocCzEzCOLEHQta8roNijB0bKcq8hmQPHcMyXlj1Srnqlco49jbhftgJoPTwzb10wQyU0VFvaZDPW/EQUT3M/k4j3sVESjANdyG1iu6EDV080LK1LgAdhjpKMBbf6mcgAe06/07XFMbKNrZMEislOcVFp98BSKjdioUNpy91rCeSmkEsASJ3yMArRnSkuVgpyrtJaGWl79VUcmOwKhUOA/8MXMz/Oqu7hvve/sgv71xlnim460nnLw6YHPyeeCsz6KSoUK3knFXAbTk/0jvU1ixUZbI122aMzX04UgPGeTukCOUw49XfaOdN+x0YXlkl4PsrnRQhIoixY2gosPpK4YO73G
 cabc840ffdee8a72f3689fb77dd74d04fdc2bc04 0 iQJEBAABCAAuFiEEK8zhT1xnJaouqK63ucncgkqlvdUFAloB+EYQHHJhZkBkdXJpbjQyLmNvbQAKCRC5ydyCSqW91TfwEAC/pYW7TC8mQnqSJzde4yiv2+zgflfJzRlg5rbvlUQl1gSBla3sFADZcic0ebAc+8XUu8eIzyPX+oa4wjsHvL13silUCkUzTEEQLqfKPX1bhA4mwfSDb5A7v2VZ5q8qhRGnlhTsB79ML8uBOhR/Bigdm2ixURPEZ37pWljiMp9XWBMtxPxXn/m0n5CDViibX6QqQCR4k3orcsIGd72YXU6B8NGbBN8qlqMSd0pGvSF4vM2cgVhz7D71+zU4XL/HVP97aU9GsOwN9QWW029DOJu6KG6x51WWtfD/tzyNDu7+lZ5/IKyqHX4tyqCIXEGAsQ3XypeHgCq5hV3E6LJLRqPcLpUNDiQlCg6tNPRaOuMC878MRIlffKqMH+sWo8Z7zHrut+LfRh5/k1aCh4J+FIlE6Hgbvbvv2Z8JxDpUKl0Tr+i0oHNTapbGXIecq1ZFR4kcdchodUHXBC2E6HWR50/ek5YKPddzw8WPGsBtzXMfkhFr3WkvyP2Gbe2XJnkuYptTJA+u2CfhrvgmWsYlvt/myTaMZQEzZ+uir4Xoo5NvzqTL30SFqPrP4Nh0n9G6vpVJl/eZxoYK9jL3VC0vDhnZXitkvDpjXZuJqw/HgExXWKZFfiQ3X2HY48v1gvJiSegZ5rX+uGGJtW2/Mp5FidePEgnFIqZW/yhBfs2Hzj1D2A==
 a92b9f8e11ba330614cdfd6af0e03b15c1ff3797 0 iQJVBAABCAA/FiEEOoFVFj0OIKUw/LeGR6Z/+qNGqs4FAlohslshHGtidWxsb2NrK21lcmN1cmlhbEByaW5nd29ybGQub3JnAAoJEEemf/qjRqrO7P8P/1qGts96acEdB9BZbK/Eesalb1wUByLXZoP8j+1wWwqh/Kq/q7V4Qe0z1jw/92oZbmnLy2C8sDhWv/XKxACKv69oPrcqQix1E8M+07u88ZXqHJMSxkOmvA2Vimp9EG1qgje+qchgOVgvhEhysA96bRpEnc6V0RnBqI5UdfbKtlfBmX5mUE/qsoBZhly1FTmzV1bhYlGgNLyqtJQpcbA34wyPoywsp8DRBiHWrIzz5XNR+DJFTOe4Kqio1i5r8R4QSIM5vtTbj5pbsmtGcP2CsFC9S3xTSAU6AEJKxGpubPk3ckNj3P9zolvR7krU5Jt8LIgXSVaKLt9rPhmxCbPrLtORgXkUupJcrwzQl+oYz5bkl9kowFa959waIPYoCuuW402mOTDq/L3xwDH9AKK5rELPl3fNo+5OIDKAKRIu6zRSAzBtyGT6kkfb1NSghumP4scR7cgUmLaNibZBa8eJj92gwf+ucSGoB/dF/YHWNe0jY09LFK3nyCoftmyLzxcRk1JLGNngw8MCIuisHTskhxSm/qlX7qjunoZnA3yy9behhy/YaFt4YzYZbMTivt2gszX5ktToaDqfxWDYdIa79kp8G68rYPeybelTS74LwbK3blXPI3I1nddkW52znHYLvW6BYyi+QQ5jPZLkiOC+AF0q+c4gYmPaLVN/mpMZjjmB
+27b6df1b5adbdf647cf5c6675b40575e1b197c60 0 iQJEBAABCAAuFiEEK8zhT1xnJaouqK63ucncgkqlvdUFAlpmbwIQHHJhZkBkdXJpbjQyLmNvbQAKCRC5ydyCSqW91W4BD/4h+y7QH7FkNcueOBrmdci7w1apkPX7KuknKxf8+FmA1QDGWYATnqD6IcAk3+f4reO4n9qc0y2BGrIz/pyTSIHvJW+ORrbPCKVrXlfUgkUK3TumtRObt8B75BVBBNaJ93r1yOALpo/K8wSwRrBF+Yl6aCoFiibUEbfcfaOAHVqZXKC1ZPtLRwq5NHIw0wWB0qNoAXj+FJV1EHO7SEjj2lXqw/r0HriQMdObWLgAb6QVUq7oVMpAumUeuQtZ169qHdqYfF1OLdCnsVBcwYEz/cBLC43bvYiwFxSkbAFyl656caWiwA3PISFSzP9Co0zWU/Qf8f7dTdAdT/orzCfUq8YoXqryfRSxi+8L8/EMxankzdW73Rx5X+0539pSq+gDDtTOyNuW6+CZwa5D84b31rsd+jTx8zVm3SRHRKsoGF2EEMQkWmDbhIFjX5W1fE84Ul3umypv+lPSvCPlQpIqv2hZmcTR12sgjdBjU8z+Zcq22SHFybqiYNmWpkVUtiMvTlHMoJfi5PI6xF8D2dxV4ErG+NflqdjaXydgnbO6D3/A1FCASig0wL4jMxSeRqnRRqLihN3VaGG2QH6MLJ+Ty6YuoonKtopw9JNOZydr/XN7K5LcjX1T3+31qmnHZyBXRSejWl9XN93IDbQcnMBWHkz/cJLN0kKu4pvnV8UGUcyXfA==
+d334afc585e29577f271c5eda03378736a16ca6b 0 iQJEBAABCAAuFiEEK8zhT1xnJaouqK63ucncgkqlvdUFAlpzZuUQHHJhZkBkdXJpbjQyLmNvbQAKCRC5ydyCSqW91TiDEADDD6Tn04UjgrZ36nAqOcHaG1ZT2Cm1/sbTw+6duAhf3+uKWFqi2bgcdCBkdfRH7KfEU0GNsPpiC6mzWw3PDWmGhnLJAkR+9FTBU0edK01hkNW8RelDTL5J9IzIGwrP4KFfcUue6yrxU8GnSxnf5Vy/N5ZZzLV/P3hdBte5We9PD5KHPAwTzzcZ9Wiog700rFDDChyFq7hNQ3H0GpknF6+Ck5XmJ3DOqt1MFHk9V4Z/ASU59cQXKOeaMChlBpTb1gIIWjOE99v5aY06dc1WlwttuHtCZvZgtAduRAB6XYWyniS/7nXBv0MXD3EWbpH1pkOaWUxw217HpNP4g9Yo3u/i8UW+NkSJOeXtC1CFjWmUNj138IhS1pogaiPPnIs+H6eOJsmnGhN2KbOMjA5Dn9vSTi6s/98TarfUSiwxA4L7fJy5qowFETftuBO0fJpbB8+ZtpnjNp0MMKed27OUSv69i6BmLrP+eqk+MVO6PovvIySlWAP9/REM/I5/mFkqoI+ruT4a9osNGDZ4Jqb382b7EmpEMDdgb7+ezsybgDfizuaTs/LBae7h79o1m30DxZ/EZ5C+2LY8twbGSORvZN4ViMVhIhWBTlOE/iVBOj807Y2OaUURcuLfHRmaCcfF1uIzg0uNB/aM/WSE0+AXh2IX+mipoTS3eh/V2EKldBHcOQ==
--- a/.hgtags	Sat Jan 20 22:55:42 2018 -0800
+++ b/.hgtags	Thu Feb 01 14:28:45 2018 -0500
@@ -169,3 +169,5 @@
 0ccb43d4cf01d013ae05917ec4f305509f851b2d 4.4
 cabc840ffdee8a72f3689fb77dd74d04fdc2bc04 4.4.1
 a92b9f8e11ba330614cdfd6af0e03b15c1ff3797 4.4.2
+27b6df1b5adbdf647cf5c6675b40575e1b197c60 4.5-rc
+d334afc585e29577f271c5eda03378736a16ca6b 4.5
--- a/Makefile	Sat Jan 20 22:55:42 2018 -0800
+++ b/Makefile	Thu Feb 01 14:28:45 2018 -0500
@@ -246,6 +246,12 @@
 docker-ubuntu-zesty-ppa: contrib/docker/ubuntu-zesty
 	contrib/dockerdeb ubuntu zesty --source-only
 
+docker-ubuntu-artful: contrib/docker/ubuntu-artful
+	contrib/dockerdeb ubuntu artful
+
+docker-ubuntu-artful-ppa: contrib/docker/ubuntu-artful
+	contrib/dockerdeb ubuntu artful --source-only
+
 fedora20:
 	mkdir -p packages/fedora20
 	contrib/buildrpm
@@ -314,6 +320,7 @@
 	docker-ubuntu-xenial docker-ubuntu-xenial-ppa \
 	docker-ubuntu-yakkety docker-ubuntu-yakkety-ppa \
 	docker-ubuntu-zesty docker-ubuntu-zesty-ppa \
+	docker-ubuntu-artful docker-ubuntu-artful-ppa \
 	fedora20 docker-fedora20 fedora21 docker-fedora21 \
 	centos5 docker-centos5 centos6 docker-centos6 centos7 docker-centos7 \
 	linux-wheels
--- a/hgext/lfs/__init__.py	Sat Jan 20 22:55:42 2018 -0800
+++ b/hgext/lfs/__init__.py	Thu Feb 01 14:28:45 2018 -0500
@@ -25,14 +25,15 @@
 not be able to communicate with each other unless the extension is
 enabled on both.
 
-To start a new repository, or add new LFS files, just create and add
-an ``.hglfs`` file as described below.  Because the file is tracked in
-the repository, all clones will use the same selection policy.  During
-subsequent commits, Mercurial will consult this file to determine if
-an added or modified file should be stored externally.  The type of
-storage depends on the characteristics of the file at each commit.  A
-file that is near a size threshold may switch back and forth between
-LFS and normal storage, as needed.
+To start a new repository, or to add LFS files to an existing one, just
+create an ``.hglfs`` file as described below in the root directory of
+the repository.  Typically, this file should be put under version
+control, so that the settings will propagate to other repositories with
+push and pull.  During any commit, Mercurial will consult this file to
+determine if an added or modified file should be stored externally.  The
+type of storage depends on the characteristics of the file at each
+commit.  A file that is near a size threshold may switch back and forth
+between LFS and normal storage, as needed.
 
 Alternately, both normal repositories and largefile controlled
 repositories can be converted to LFS by using :hg:`convert` and the
@@ -240,29 +241,19 @@
 def _trackedmatcher(repo, ctx):
     """Return a function (path, size) -> bool indicating whether or not to
     track a given file with lfs."""
-    data = ''
-
-    if '.hglfs' in ctx.added() or '.hglfs' in ctx.modified():
-        data = ctx['.hglfs'].data()
-    elif '.hglfs' not in ctx.removed():
-        p1 = repo['.']
-
-        if '.hglfs' not in p1:
-            # No '.hglfs' in wdir or in parent.  Fallback to config
-            # for now.
-            trackspec = repo.ui.config('lfs', 'track')
+    if not repo.wvfs.exists('.hglfs'):
+        # No '.hglfs' in wdir.  Fallback to config for now.
+        trackspec = repo.ui.config('lfs', 'track')
 
-            # deprecated config: lfs.threshold
-            threshold = repo.ui.configbytes('lfs', 'threshold')
-            if threshold:
-                fileset.parse(trackspec)  # make sure syntax errors are confined
-                trackspec = "(%s) | size('>%d')" % (trackspec, threshold)
+        # deprecated config: lfs.threshold
+        threshold = repo.ui.configbytes('lfs', 'threshold')
+        if threshold:
+            fileset.parse(trackspec)  # make sure syntax errors are confined
+            trackspec = "(%s) | size('>%d')" % (trackspec, threshold)
 
-            return minifileset.compile(trackspec)
+        return minifileset.compile(trackspec)
 
-        data = p1['.hglfs'].data()
-
-    # In removed, or not in parent
+    data = repo.wvfs.tryread('.hglfs')
     if not data:
         return lambda p, s: False
 
@@ -370,8 +361,8 @@
 
     makemap = lambda v: {
         'file': v,
-        'oid': pointers[v].oid(),
-        'pointer': templatekw.hybriddict(pointer(v)),
+        'lfsoid': pointers[v].oid(),
+        'lfspointer': templatekw.hybriddict(pointer(v)),
     }
 
     # TODO: make the separator ', '?
--- a/hgext/lfs/wrapper.py	Sat Jan 20 22:55:42 2018 -0800
+++ b/hgext/lfs/wrapper.py	Thu Feb 01 14:28:45 2018 -0500
@@ -131,8 +131,7 @@
 
     lfstrack = self.opener.options['lfstrack']
 
-    # Always exclude hg owned files
-    if not self.filename.startswith('.hg') and lfstrack(self.filename, textlen):
+    if lfstrack(self.filename, textlen):
         flags |= revlog.REVIDX_EXTSTORED
 
     return orig(self, text, transaction, link, p1, p2, cachedelta=cachedelta,
--- a/hgext/uncommit.py	Sat Jan 20 22:55:42 2018 -0800
+++ b/hgext/uncommit.py	Thu Feb 01 14:28:45 2018 -0500
@@ -193,8 +193,7 @@
 
 @command('^unamend', [])
 def unamend(ui, repo, **opts):
-    """
-    undo the most recent amend operation on a current changeset
+    """undo the most recent amend operation on a current changeset
 
     This command will roll back to the previous version of a changeset,
     leaving working directory in state in which it was before running
--- a/i18n/pt_BR.po	Sat Jan 20 22:55:42 2018 -0800
+++ b/i18n/pt_BR.po	Thu Feb 01 14:28:45 2018 -0500
@@ -4329,6 +4329,171 @@
 msgid "warning: unable to write out fsmonitor state\n"
 msgstr "aviso: incapaz de escrever o estado da fsmonitor\n"
 
+msgid "try mapping git commands to Mercurial commands"
+msgstr ""
+
+msgid "Tries to map a given git command to a Mercurial command:"
+msgstr ""
+
+msgid ""
+"  $ hg githelp -- git checkout master\n"
+"  hg update master"
+msgstr ""
+
+msgid ""
+"If an unknown command or parameter combination is detected, an error is\n"
+"produced.\n"
+msgstr ""
+
+msgid "hg githelp"
+msgstr ""
+
+msgid "suggests the Mercurial equivalent of the given git command"
+msgstr ""
+
+msgid ""
+"    Usage: hg githelp -- <git command>\n"
+"    "
+msgstr ""
+
+msgid "missing git command - usage: hg githelp -- <git command>"
+msgstr ""
+
+#, python-format
+msgid "ignoring unknown option %s\n"
+msgstr ""
+
+msgid ""
+"note: Mercurial will commit when complete, as there is no staging area in "
+"Mercurial"
+msgstr ""
+
+msgid "note: use hg addremove to remove files that have been deleted."
+msgstr ""
+
+msgid "See 'hg help bisect' for how to use bisect."
+msgstr ""
+
+msgid "Mercurial has no concept of upstream branches\n"
+msgstr ""
+
+msgid "note: use --no-backup to avoid creating .orig files"
+msgstr ""
+
+msgid "note: hg graft does not have --abort."
+msgstr ""
+
+msgid ""
+"note: Mercurial does not have bare clones. -U will clone the repo without "
+"checking out a commit"
+msgstr ""
+
+msgid ""
+"note: Mercurial doesn't have a staging area, so there is no --all. -A will "
+"add and remove files for you though."
+msgstr ""
+
+msgid ""
+"This command has been deprecated in the git project, thus isn't supported by"
+" this tool."
+msgstr ""
+
+msgid ""
+"note: Mercurial has no concept of a staging area, so --cached does nothing."
+msgstr ""
+
+msgid ""
+"Mercurial does not enable external difftool by default. You need to enable the extdiff extension in your .hgrc file by adding\n"
+"extdiff =\n"
+"to the [extensions] section and then running"
+msgstr ""
+
+msgid "hg extdiff -p <program>"
+msgstr ""
+
+msgid "See 'hg help extdiff' and 'hg help -e extdiff' for more information.\n"
+msgstr ""
+
+msgid ""
+"note: Mercurial doesn't have refspecs. -r can be used to specify which "
+"commits you want to pull. -B can be used to specify which bookmark you want "
+"to pull."
+msgstr ""
+
+msgid ""
+"note: -v prints the entire commit message like Git does. To print just the "
+"first line, drop the -v."
+msgstr ""
+
+msgid "note: see hg help revset for information on how to filter log output."
+msgstr ""
+
+msgid ""
+"note: --format format:??? equates to Mercurial's --template. See hg help "
+"templates for more info."
+msgstr ""
+
+msgid ""
+"note: --pretty/format/oneline equate to Mercurial's --style or --template. "
+"See hg help templates for more info."
+msgstr ""
+
+msgid "note: Mercurial doesn't have a staging area, ignoring --stage\n"
+msgstr ""
+
+msgid "NOTE: ancestors() is part of the revset language.\n"
+msgstr ""
+
+msgid "Learn more about revsets with 'hg help revsets'"
+msgstr ""
+
+msgid ""
+"note: Mercurial doesn't have refspecs. -r can be used to specify which "
+"commits you want to push. -B can be used to specify which bookmark you want "
+"to push."
+msgstr ""
+
+msgid "note: hg histedit does not perform a rebase. It just edits history."
+msgstr ""
+
+msgid ""
+"also note: 'hg histedit' will automatically detect your stack, so no second "
+"argument is necessary."
+msgstr ""
+
+msgid ""
+"note: if you're trying to lift a commit off one branch, try hg rebase -d "
+"<destination commit> -s <commit to be lifted>"
+msgstr ""
+
+msgid ""
+"note: in hg commits can be deleted from repo but we always have backups.\n"
+msgstr ""
+
+msgid "NOTE: --mixed has no meaning since Mercurial has no staging area"
+msgstr ""
+
+msgid "NOTE: --soft has no meaning since Mercurial has no staging area"
+msgstr ""
+
+msgid "note: hg backout doesn't support multiple commits at once"
+msgstr ""
+
+msgid "note: hg root prints the root of the repository"
+msgstr ""
+
+msgid "note: see hg help revset for how to refer to commits\n"
+msgstr ""
+
+msgid ""
+"note: Mercurial doesn't have equivalents to the git stash branch, show, "
+"clear, or create actions."
+msgstr ""
+
+#, python-format
+msgid "error: unknown git svn command %s\n"
+msgstr ""
+
 msgid "commands to sign and verify changesets"
 msgstr "comando para assinar e verificar revisões"
 
@@ -6645,6 +6810,268 @@
 msgid "download all versions of all largefiles"
 msgstr "baixa todas as versões de todos os largefiles"
 
+msgid "lfs - large file support (EXPERIMENTAL)"
+msgstr ""
+
+msgid ""
+"This extension allows large files to be tracked outside of the normal\n"
+"repository storage and stored on a centralized server, similar to the\n"
+"``largefiles`` extension.  The ``git-lfs`` protocol is used when\n"
+"communicating with the server, so existing git infrastructure can be\n"
+"harnessed.  Even though the files are stored outside of the repository,\n"
+"they are still integrity checked in the same manner as normal files."
+msgstr ""
+
+msgid ""
+"The files stored outside of the repository are downloaded on demand,\n"
+"which reduces the time to clone, and possibly the local disk usage.\n"
+"This changes fundamental workflows in a DVCS, so careful thought\n"
+"should be given before deploying it.  :hg:`convert` can be used to\n"
+"convert LFS repositories to normal repositories that no longer\n"
+"require this extension, and do so without changing the commit hashes.\n"
+"This allows the extension to be disabled if the centralized workflow\n"
+"becomes burdensome.  However, the pre and post convert clones will\n"
+"not be able to communicate with each other unless the extension is\n"
+"enabled on both."
+msgstr ""
+
+msgid ""
+"To start a new repository, or add new LFS files, just create and add\n"
+"an ``.hglfs`` file as described below.  Because the file is tracked in\n"
+"the repository, all clones will use the same selection policy.  During\n"
+"subsequent commits, Mercurial will consult this file to determine if\n"
+"an added or modified file should be stored externally.  The type of\n"
+"storage depends on the characteristics of the file at each commit.  A\n"
+"file that is near a size threshold may switch back and forth between\n"
+"LFS and normal storage, as needed."
+msgstr ""
+
+msgid ""
+"Alternately, both normal repositories and largefile controlled\n"
+"repositories can be converted to LFS by using :hg:`convert` and the\n"
+"``lfs.track`` config option described below.  The ``.hglfs`` file\n"
+"should then be created and added, to control subsequent LFS selection.\n"
+"The hashes are also unchanged in this case.  The LFS and non-LFS\n"
+"repositories can be distinguished because the LFS repository will\n"
+"abort any command if this extension is disabled."
+msgstr ""
+
+msgid ""
+"Committed LFS files are held locally, until the repository is pushed.\n"
+"Prior to pushing the normal repository data, the LFS files that are\n"
+"tracked by the outgoing commits are automatically uploaded to the\n"
+"configured central server.  No LFS files are transferred on\n"
+":hg:`pull` or :hg:`clone`.  Instead, the files are downloaded on\n"
+"demand as they need to be read, if a cached copy cannot be found\n"
+"locally.  Both committing and downloading an LFS file will link the\n"
+"file to a usercache, to speed up future access.  See the `usercache`\n"
+"config setting described below."
+msgstr ""
+
+msgid ".hglfs::"
+msgstr ""
+
+msgid ""
+"    The extension reads its configuration from a versioned ``.hglfs``\n"
+"    configuration file found in the root of the working directory. The\n"
+"    ``.hglfs`` file uses the same syntax as all other Mercurial\n"
+"    configuration files. It uses a single section, ``[track]``."
+msgstr ""
+"    A extensão lê sua configuração de um arquivo versionado chamado\n"
+"    ``.hglfs`` localizado no raiz do diretório de trabalho. O arquivo\n"
+"    ``.hglfs`` usa a mesma sintaxe que outros arquivos de configuração\n"
+"    do Mercurial. Ele usa uma única seção, ``[track]``."
+
+msgid ""
+"    The ``[track]`` section specifies which files are stored as LFS (or\n"
+"    not). Each line is keyed by a file pattern, with a predicate value.\n"
+"    The first file pattern match is used, so put more specific patterns\n"
+"    first.  The available predicates are ``all()``, ``none()``, and\n"
+"    ``size()``. See \"hg help filesets.size\" for the latter."
+msgstr ""
+
+msgid "    Example versioned ``.hglfs`` file::"
+msgstr "    Um exemplo do arquivo versionado ``.hglfs``::"
+
+msgid ""
+"      [track]\n"
+"      # No Makefile or python file, anywhere, will be LFS\n"
+"      **Makefile = none()\n"
+"      **.py = none()"
+msgstr ""
+
+msgid ""
+"      **.zip = all()\n"
+"      **.exe = size(\">1MB\")"
+msgstr ""
+
+msgid ""
+"      # Catchall for everything not matched above\n"
+"      ** = size(\">10MB\")"
+msgstr ""
+
+msgid "Configs::"
+msgstr ""
+
+msgid ""
+"    [lfs]\n"
+"    # Remote endpoint. Multiple protocols are supported:\n"
+"    # - http(s)://user:pass@example.com/path\n"
+"    #   git-lfs endpoint\n"
+"    # - file:///tmp/path\n"
+"    #   local filesystem, usually for testing\n"
+"    # if unset, lfs will prompt setting this when it must use this value.\n"
+"    # (default: unset)\n"
+"    url = https://example.com/repo.git/info/lfs"
+msgstr ""
+
+msgid ""
+"    # Which files to track in LFS.  Path tests are \"**.extname\" for file\n"
+"    # extensions, and \"path:under/some/directory\" for path prefix.  Both\n"
+"    # are relative to the repository root.\n"
+"    # File size can be tested with the \"size()\" fileset, and tests can be\n"
+"    # joined with fileset operators.  (See \"hg help filesets.operators\".)\n"
+"    #\n"
+"    # Some examples:\n"
+"    # - all()                       # everything\n"
+"    # - none()                      # nothing\n"
+"    # - size(\">20MB\")               # larger than 20MB\n"
+"    # - !**.txt                     # anything not a *.txt file\n"
+"    # - **.zip | **.tar.gz | **.7z  # some types of compressed files\n"
+"    # - path:bin                    # files under \"bin\" in the project root\n"
+"    # - (**.php & size(\">2MB\")) | (**.js & size(\">5MB\")) | **.tar.gz\n"
+"    #     | (path:bin & !path:/bin/README) | size(\">1GB\")\n"
+"    # (default: none())\n"
+"    #\n"
+"    # This is ignored if there is a tracked '.hglfs' file, and this setting\n"
+"    # will eventually be deprecated and removed.\n"
+"    track = size(\">10M\")"
+msgstr ""
+
+msgid ""
+"    # how many times to retry before giving up on transferring an object\n"
+"    retry = 5"
+msgstr ""
+
+msgid ""
+"    # the local directory to store lfs files for sharing across local clones.\n"
+"    # If not set, the cache is located in an OS specific cache location.\n"
+"    usercache = /path/to/global/cache\n"
+msgstr ""
+
+#, python-format
+msgid "parse error in .hglfs: %s"
+msgstr ""
+
+msgid "upload large files introduced by REV"
+msgstr ""
+
+msgid "upload lfs blobs added by the working copy parent or given revisions"
+msgstr ""
+
+#, python-format
+msgid "corrupt remote lfs object: %s"
+msgstr ""
+
+#, python-format
+msgid "lfs: adding %s to the usercache\n"
+msgstr ""
+
+#, python-format
+msgid "lfs: found %s in the usercache\n"
+msgstr ""
+
+#, python-format
+msgid "lfs: found %s in the local lfs store\n"
+msgstr ""
+
+#, python-format
+msgid "LFS HTTP error: %s (action=%s)"
+msgstr ""
+
+#, python-format
+msgid "LFS server returns invalid JSON: %s"
+msgstr ""
+
+#, python-format
+msgid "LFS server error. Unsolicited response for oid %s"
+msgstr ""
+
+#, python-format
+msgid "LFS server error: %r"
+msgstr ""
+
+#, python-format
+msgid "HTTP error: %s (oid=%s, action=%s)"
+msgstr "erro HTTP: %s (oid=%s, ação=%s)"
+
+msgid "lfs uploading"
+msgstr ""
+
+msgid "lfs downloading"
+msgstr ""
+
+#, python-format
+msgid "lfs: need to transfer %d objects (%s)\n"
+msgstr ""
+
+#, python-format
+msgid "lfs: downloading %s (%s)\n"
+msgstr ""
+
+#, python-format
+msgid "lfs: uploading %s (%s)\n"
+msgstr ""
+
+#, python-format
+msgid "lfs: failed: %r (remaining retry %d)\n"
+msgstr ""
+
+#, python-format
+msgid "lfs: processed: %s\n"
+msgstr ""
+
+msgid "lfs.url needs to be configured"
+msgstr ""
+
+#, python-format
+msgid "detected corrupt lfs object: %s"
+msgstr ""
+
+msgid "run hg verify"
+msgstr ""
+
+#, python-format
+msgid "lfs: unknown url scheme: %s"
+msgstr ""
+
+#, python-format
+msgid "cannot parse git-lfs text: %r"
+msgstr ""
+
+#, python-format
+msgid "unexpected value: %s=%r"
+msgstr "valor inesperado: %s=%r"
+
+#, python-format
+msgid "unexpected key: %s"
+msgstr "chave inesperada: %s"
+
+#, python-format
+msgid "missed keys: %s"
+msgstr "chaves faltando: %s"
+
+msgid "enable the lfs extension on the server"
+msgstr ""
+
+#, python-format
+msgid "lfs: corrupted pointer (%s@%s): %s\n"
+msgstr ""
+
+#, python-format
+msgid "copying lfs blob %s\n"
+msgstr ""
+
 msgid "send ui.log() data to a subprocess (EXPERIMENTAL)"
 msgstr "envia dados de ui.log() para um subprocesso (EXPERIMENTAL)"
 
@@ -9345,6 +9772,13 @@
 msgstr "revisão %s já rebaseada\n"
 
 #, python-format
+msgid ""
+"note: not rebasing %s and its descendants as this would cause divergence\n"
+msgstr ""
+"nota: omitindo rebaseamento de %s e seus descendentes, pois causaria uma "
+"divergência\n"
+
+#, python-format
 msgid "note: not rebasing %s, it has no successor\n"
 msgstr "nota: omitindo rebaseamento de %s, que não possui sucessor\n"
 
@@ -9382,50 +9816,6 @@
 msgid "%d revisions have been skipped\n"
 msgstr "%d revisões foram omitidas\n"
 
-msgid "rebase the specified changeset and descendants"
-msgstr "rebaseia a revisão especificada e seus descendentes"
-
-msgid "rebase everything from branching point of specified changeset"
-msgstr ""
-"rebaseia tudo a partir do ponto de ramificação da revisão especificada"
-
-msgid "rebase these revisions"
-msgstr "rebaseia estas revisões"
-
-msgid "rebase onto the specified changeset"
-msgstr "rebaseia sobre a revisão especificada"
-
-msgid "collapse the rebased changesets"
-msgstr "colapsa as revisões rebaseadas"
-
-msgid "use text as collapse commit message"
-msgstr "usa o texto como mensagem de consolidação da revisão colapsada"
-
-msgid "read collapse commit message from file"
-msgstr "lê de um arquivo a mensagem de consolidação da revisão colapsada"
-
-msgid "keep original changesets"
-msgstr "mantém revisões originais"
-
-msgid "keep original branch names"
-msgstr "mantém nomes de ramos originais"
-
-#. i18n: "(DEPRECATED)" is a keyword, must be translated consistently
-msgid "(DEPRECATED)"
-msgstr "(OBSOLETO)"
-
-msgid "specify merge tool"
-msgstr "especifica o utilitário de mesclagem"
-
-msgid "continue an interrupted rebase"
-msgstr "continua um rebaseamento interrompido"
-
-msgid "abort an interrupted rebase"
-msgstr "aborta um rebaseamento interrompido"
-
-msgid "[-s REV | -b REV] [-d REV] [OPTION]"
-msgstr "[-s REV | -b REV] [-d REV] [OPÇÃO]"
-
 msgid "move changeset (and descendants) to a different branch"
 msgstr "move a revisão (e descendentes) para um ramo diferente"
 
@@ -9494,6 +9884,17 @@
 "         rebase usará ``--base .`` como acima."
 
 msgid ""
+"    If ``--source`` or ``--rev`` is used, special names ``SRC`` and ``ALLSRC``\n"
+"    can be used in ``--dest``. Destination would be calculated per source\n"
+"    revision with ``SRC`` substituted by that single source revision and\n"
+"    ``ALLSRC`` substituted by all source revisions."
+msgstr ""
+"    Se ``--source`` ou ``--rev`` forem usadas, os nomes especiais ``SRC``\n"
+"    e ``ALLSRC`` podem ser usados em ``--dest``. O destino seria calculado\n"
+"    por revisão de origem substituindo ``SRC`` por essa revisão de origem\n"
+"    específica, e ``ALLSRC`` por todas as revisões de origem."
+
+msgid ""
 "    Rebase will destroy original changesets unless you use ``--keep``.\n"
 "    It will also move your bookmarks (even if you do)."
 msgstr ""
@@ -9590,6 +9991,18 @@
 msgid "          hg rebase -r \"branch(featureX)\" -d 1.3 --keepbranches"
 msgstr "          hg rebase -r \"branch(featureX)\" -d 1.3 --keepbranches"
 
+msgid "      - stabilize orphaned changesets so history looks linear::"
+msgstr "      - estabiliza revisões órfãs para que o histórico fique linear::"
+
+msgid ""
+"          hg rebase -r 'orphan()-obsolete()' -d "
+"'first(max((successors(max(roots(ALLSRC) & ::SRC)^)-obsolete())::) + "
+"max(::((roots(ALLSRC) & ::SRC)^)-obsolete()))'"
+msgstr ""
+"          hg rebase -r 'orphan()-obsolete()' -d "
+"'first(max((successors(max(roots(ALLSRC) & ::SRC)^)-obsolete())::) + "
+"max(::((roots(ALLSRC) & ::SRC)^)-obsolete()))'"
+
 msgid "    Configuration Options:"
 msgstr "    Opções de Configuração:"
 
@@ -9629,6 +10042,23 @@
 "      [rebase]\n"
 "      singletransaction = True"
 
+msgid ""
+"    By default, rebase writes to the working copy, but you can configure it to\n"
+"    run in-memory for for better performance, and to allow it to run if the\n"
+"    working copy is dirty::"
+msgstr ""
+"    Por padrão, o rebase escreve na cópia de trabalho, mas ele\n"
+"    pode ser configurado para operar na memória, para melhor\n"
+"    desempenho e possibilidade de execução mesmo que a cópia de\n"
+"    trabalho esteja suja::"
+
+msgid ""
+"      [rebase]\n"
+"      experimental.inmemory = True"
+msgstr ""
+"      [rebase]\n"
+"      experimental.inmemory = True"
+
 msgid "    Return Values:"
 msgstr "    Valores Retornados:"
 
@@ -9639,6 +10069,55 @@
 "    Devolve 0 para indicar sucesso, 1 se não houver nada para rebasear\n"
 "    ou se houverem conflitos não resolvidos."
 
+msgid "rebase the specified changeset and descendants"
+msgstr "rebaseia a revisão especificada e seus descendentes"
+
+msgid "rebase everything from branching point of specified changeset"
+msgstr ""
+"rebaseia tudo a partir do ponto de ramificação da revisão especificada"
+
+msgid "rebase these revisions"
+msgstr "rebaseia estas revisões"
+
+msgid "rebase onto the specified changeset"
+msgstr "rebaseia sobre a revisão especificada"
+
+msgid "collapse the rebased changesets"
+msgstr "colapsa as revisões rebaseadas"
+
+msgid "use text as collapse commit message"
+msgstr "usa o texto como mensagem de consolidação da revisão colapsada"
+
+msgid "read collapse commit message from file"
+msgstr "lê de um arquivo a mensagem de consolidação da revisão colapsada"
+
+msgid "keep original changesets"
+msgstr "mantém revisões originais"
+
+msgid "keep original branch names"
+msgstr "mantém nomes de ramos originais"
+
+#. i18n: "(DEPRECATED)" is a keyword, must be translated consistently
+msgid "(DEPRECATED)"
+msgstr "(OBSOLETO)"
+
+msgid "specify merge tool"
+msgstr "especifica o utilitário de mesclagem"
+
+msgid "continue an interrupted rebase"
+msgstr "continua um rebaseamento interrompido"
+
+msgid "abort an interrupted rebase"
+msgstr "aborta um rebaseamento interrompido"
+
+msgid "[-s REV | -b REV] [-d REV] [OPTION]"
+msgstr "[-s REV | -b REV] [-d REV] [OPÇÃO]"
+
+msgid "hit merge conflicts; re-running rebase without in-memory merge\n"
+msgstr ""
+"conflitos de mesclagem encontrados; executando rebase novamente sem "
+"mesclagem em memória\n"
+
 #, python-format
 msgid ""
 "interactive history editing is supported by the 'histedit' extension (see "
@@ -11300,6 +11779,82 @@
 msgid "repo is not sparse\n"
 msgstr "o repositório não é esparso\n"
 
+msgid "command to split a changeset into smaller ones (EXPERIMENTAL)"
+msgstr "command para dividir uma revisão em revisões menores (EXPERIMENTAL)"
+
+msgid "revision to split"
+msgstr "revisão a ser dividida"
+
+msgid "rebase descendants after split"
+msgstr "rebaseia os descendentes após dividir"
+
+msgid "hg split [--no-rebase] [[-r] REV]"
+msgstr "hg split [--no-rebase] [[-r] REV]"
+
+msgid "split a changeset into smaller ones"
+msgstr "divide uma revisão em revisões menores"
+
+msgid ""
+"    Repeatedly prompt changes and commit message for new changesets until there\n"
+"    is nothing left in the original changeset."
+msgstr ""
+"    Solicita repetidamente mudanças e mensagem de consolidação\n"
+"    para novas revisões até que não haja mais mudanças da revisão\n"
+"    original a serem aplicadas."
+
+msgid "    If --rev was not given, split the working directory parent."
+msgstr "    Se --rev não for passado, divide o pai do diretório de trabalho."
+
+msgid ""
+"    By default, rebase connected non-obsoleted descendants onto the new\n"
+"    changeset. Use --no-rebase to avoid the rebase.\n"
+"    "
+msgstr ""
+"    Por padrão, rebaseia descendentes conexos não-obsoletos sobre\n"
+"    a nova revisão. Use --no-rebase para evitar esse rebaseamento.\n"
+"    "
+
+msgid "cannot split multiple revisions"
+msgstr "não é possível dividir múltiplas revisões"
+
+msgid "nothing to split\n"
+msgstr "nada para dividir\n"
+
+msgid "cannot split working directory"
+msgstr "não é possível dividir o diretório de trabalho"
+
+msgid "cannot split public changeset"
+msgstr "não é possível dividir uma revisão pública"
+
+msgid "split would leave orphaned changesets behind"
+msgstr "split deixaria para trás revisões órfãs"
+
+msgid "cannot split changeset with children without rebase"
+msgstr "não é possível dividir uma revisão com filhas sem um rebase"
+
+msgid "cannot split a merge changeset"
+msgstr "não é possível dividir uma mesclagem"
+
+#, python-format
+msgid "HG: Splitting %s. So far it has been split into:\n"
+msgstr "HG: Dividindo %s. Até aqui essa revisão foi dividida em:\n"
+
+#, python-format
+msgid "HG: - %s: %s\n"
+msgstr "HG: - %s: %s\n"
+
+msgid "HG: Write commit message for the next split changeset.\n"
+msgstr ""
+"HG: Escreva a mensagem de consolidação para a próxima parte da revisão.\n"
+
+#, python-format
+msgid "HG: Splitting %s. Write commit message for the first split changeset.\n"
+msgstr ""
+"HG: Dividindo %s. Escreva a mensagem para a primeira parte da revisão.\n"
+
+msgid "cannot split an empty revision"
+msgstr "não é possível dividir uma revisão vazia"
+
 msgid "strip changesets and their descendants from history"
 msgstr "remove do histórico revisões e seus descendentes"
 
@@ -11720,24 +12275,37 @@
 "    adicionados ou removidos no diretório de trabalho.\n"
 "    "
 
-msgid "cannot uncommit null changeset"
-msgstr "não é possível desfazer a consolidação da revisão nula"
-
-msgid "cannot uncommit while merging"
-msgstr "não é possível desfazer a consolidação durante uma mesclagem"
-
-msgid "cannot uncommit public changesets"
-msgstr "não é possível desfazer a consolidação de revisões públicas"
-
 msgid "cannot uncommit merge changeset"
 msgstr "não é possível desfazer a consolidação de mesclagens"
 
-msgid "cannot uncommit changeset with children"
-msgstr "não é possível desfazer a consolidação de revisões com filhas"
-
 msgid "nothing to uncommit\n"
 msgstr "nada para desfazer na consolidação\n"
 
+msgid ""
+"\n"
+"    undo the most recent amend operation on a current changeset"
+msgstr ""
+"\n"
+"    desfaz a operação amend mais recente na revisão atual"
+
+msgid ""
+"    This command will roll back to the previous version of a changeset,\n"
+"    leaving working directory in state in which it was before running\n"
+"    `hg amend` (e.g. files modified as part of an amend will be\n"
+"    marked as modified `hg status`)\n"
+"    "
+msgstr ""
+"    Este comando voltará para a versão anterior de uma revisão,\n"
+"    deixando o diretório de trabalho no estado em que se encontrava\n"
+"    antes de executar `hg amend` (isto é, os arquivos modificados\n"
+"    como parte da emenda estarão marcados como modificados em\n"
+"    `hg status`)\n"
+"    "
+
+#, python-format
+msgid "changeset must have one predecessor, found %i predecessors"
+msgstr "a revisão deve ter um predecessor, encontrados %i predecessores"
+
 msgid "allow the use of MBCS paths with problematic encodings"
 msgstr "permite o uso de caminhos MBCS com codificação problemática."
 
@@ -12042,6 +12610,9 @@
 msgid "updating to active bookmark %s\n"
 msgstr "atualizando para o marcador ativo %s\n"
 
+msgid "bad bookmark stream"
+msgstr ""
+
 #, python-format
 msgid "adding remote bookmark %s\n"
 msgstr "adicionando marcador remoto %s\n"
@@ -12100,6 +12671,10 @@
 msgid "bookmark '%s' does not exist"
 msgstr "o marcador '%s' não existe"
 
+#, python-format
+msgid "bookmarking hidden changeset %s\n"
+msgstr "adicionando marcador para revisão oculta %s\n"
+
 msgid "no bookmarks set\n"
 msgstr "nenhum marcador definido\n"
 
@@ -12110,6 +12685,11 @@
 msgid "unknown bundle version %s"
 msgstr "versão de bundle %s desconhecida"
 
+#, python-format
+msgid "stream ended unexpectedly  (got %d bytes, expected %d)"
+msgstr ""
+"dados recebidos terminaram inesperadamente (%d bytes obtidos, %d esperados)"
+
 msgid "Seek failed\n"
 msgstr "Seek falhou\n"
 
@@ -12166,6 +12746,9 @@
 msgid "%i new obsolescence markers\n"
 msgstr "%i novas marcações de obsolescência\n"
 
+msgid "cannot apply stream clone to non empty repository"
+msgstr "impossível aplicar um clone stream em um repositório não vazio"
+
 msgid "unknown parent"
 msgstr "pai desconhecido"
 
@@ -12176,6 +12759,10 @@
 msgstr "nenhum changegroup encontrado"
 
 #, python-format
+msgid "bundle type %s cannot be read"
+msgstr "o tipo de bundle %s não pode ser lido"
+
+#, python-format
 msgid "Unsupported changegroup version: %s"
 msgstr "Versão de changegroup não suportada: %s"
 
@@ -12187,11 +12774,6 @@
 msgstr "não é possível criar novo repositório de bundle"
 
 #, python-format
-msgid "stream ended unexpectedly (got %d bytes, expected %d)"
-msgstr ""
-"dados recebidos terminaram inesperadamente (%d bytes obtidos, %d esperados)"
-
-#, python-format
 msgid "invalid chunk length %d"
 msgstr "comprimento de trecho inválido %d"
 
@@ -12441,6 +13023,25 @@
 msgid "The repository is in an unfinished *%s* state."
 msgstr "O repositório está em um estado não concluído *%s*."
 
+msgid "cannot change branch of non-linear revisions"
+msgstr "não é possível mudar o ramo de revisões não lineares"
+
+msgid "a branch of the same name already exists"
+msgstr "já existe um ramo com o mesmo nome"
+
+msgid "cannot change branch of a merge commit"
+msgstr "não é possível mudar o ramo de uma mesclagem"
+
+msgid "cannot change branch of a obsolete changeset"
+msgstr "não é possível mudar o ramo de uma revisão obsoleta"
+
+msgid "cannot change branch in middle of a stack"
+msgstr "não é possível mudar o ramo no meio de uma pilha"
+
+#, python-format
+msgid "changed branch on %d changesets\n"
+msgstr "alterado o ramo em %d revisões\n"
+
 msgid "options --message and --logfile are mutually exclusive"
 msgstr "opções --message e --logfile são mutuamente exclusivas"
 
@@ -12589,85 +13190,9 @@
 msgid "warning: %s not inside relative root %s\n"
 msgstr "aviso: %s não está dentro do raiz relativo %s\n"
 
-#. i18n: column positioning for "hg log"
-#, python-format
-msgid "changeset:   %s\n"
-msgstr "revisão:       %s\n"
-
-#. i18n: column positioning for "hg log"
-#, python-format
-msgid "branch:      %s\n"
-msgstr "ramo:          %s\n"
-
-#. i18n: column positioning for "hg log"
-#, python-format
-msgid "phase:       %s\n"
-msgstr "fase:          %s\n"
-
-#. i18n: column positioning for "hg log"
-#, python-format
-msgid "parent:      %s\n"
-msgstr "pai:           %s\n"
-
-#. i18n: column positioning for "hg log"
-#, python-format
-msgid "manifest:    %s\n"
-msgstr "manifesto:     %s\n"
-
-#. i18n: column positioning for "hg log"
-#, python-format
-msgid "user:        %s\n"
-msgstr "usuário:       %s\n"
-
-#. i18n: column positioning for "hg log"
-#, python-format
-msgid "date:        %s\n"
-msgstr "data:          %s\n"
-
-#, python-format
-msgid "instability: %s\n"
-msgstr "instabilidade: %s\n"
-
-#. i18n: column positioning for "hg log"
-msgid "files:"
-msgstr "arquivos:"
-
-#. i18n: column positioning for "hg log"
-msgid "files+:"
-msgstr "arquivos+:"
-
-#. i18n: column positioning for "hg log"
-msgid "files-:"
-msgstr "arquivos-:"
-
-#. i18n: column positioning for "hg log"
-#, python-format
-msgid "files:       %s\n"
-msgstr "arquivos:      %s\n"
-
-#. i18n: column positioning for "hg log"
-#, python-format
-msgid "copies:      %s\n"
-msgstr "cópias:        %s\n"
-
-#. i18n: column positioning for "hg log"
-#, python-format
-msgid "extra:       %s=%s\n"
-msgstr "extra:         %s=%s\n"
-
 msgid "description:\n"
 msgstr "descrição:\n"
 
-#. i18n: column positioning for "hg log"
-#, python-format
-msgid "summary:     %s\n"
-msgstr "sumário:       %s\n"
-
-#. i18n: column positioning for "hg log"
-#, python-format
-msgid "obsolete:    %s\n"
-msgstr "obsoleta:      %s\n"
-
 #, python-format
 msgid "found revision %s from %s\n"
 msgstr "encontrada revisão %s de %s\n"
@@ -13845,6 +14370,9 @@
 msgid "reset branch name to parent branch name"
 msgstr "especifica o nome do ramo como o nome do ramo do pai"
 
+msgid "change branches of the given revs (EXPERIMENTAL)"
+msgstr "muda o ramo das revisões pedidas (EXPERIMENTAL)"
+
 msgid "[-fC] [NAME]"
 msgstr "[-fC] [NOME]"
 
@@ -13900,13 +14428,13 @@
 "    Um ramo será considerado fechado se todas as suas cabeças estiverem\n"
 "    fechadas."
 
+msgid "no branch name specified for the revisions"
+msgstr "nenhum nome de ramo especificado para as revisões"
+
 #, python-format
 msgid "reset working directory to branch %s\n"
 msgstr "redefine o diretório de trabalho para o ramo %s\n"
 
-msgid "a branch of the same name already exists"
-msgstr "já existe um ramo com o mesmo nome"
-
 #. i18n: "it" refers to an existing branch
 msgid "use 'hg update' to switch to it"
 msgstr "use 'hg update' para mudar para ele"
@@ -14474,15 +15002,6 @@
 msgid "cannot amend with ui.commitsubrepos enabled"
 msgstr "não é possível usar amend com ui.commitsubrepos habilitada"
 
-msgid "cannot amend public changesets"
-msgstr "não é possível emendar revisões públicas"
-
-msgid "cannot amend while merging"
-msgstr "não é possível emendar durante uma mesclagem"
-
-msgid "cannot amend changeset with children"
-msgstr "não é possível emendar revisões com filhas"
-
 msgid "show untrusted configuration options"
 msgstr "mostra opções de configuração não confiáveis"
 
@@ -15380,10 +15899,13 @@
 
 msgid ""
 "    When REV is not given, print a summary of the current state of the\n"
-"    repository."
-msgstr ""
-"    Se a revisão não for passada, imprime um sumário do estado atual\n"
-"    do repositório."
+"    repository including the working directory. Specify -r. to get information\n"
+"    of the working directory parent without scanning uncommitted changes."
+msgstr ""
+"    Se REV não for passada, imprime um resumo do estado atual do\n"
+"    repositório, incluindo o diretório de trabalho.\n"
+"    Especifique -r. para obter informações sobre o pai do diretório\n"
+"    de trabalho sem buscar por mudanças não consolidadas."
 
 msgid ""
 "    Specifying a path to a repository root or Mercurial bundle will\n"
@@ -15908,12 +16430,12 @@
 "    File history is shown without following rename or copy history of\n"
 "    files. Use -f/--follow with a filename to follow history across\n"
 "    renames and copies. --follow without a filename will only show\n"
-"    ancestors or descendants of the starting revision."
+"    ancestors of the starting revision."
 msgstr ""
 "    O histórico de arquivos é mostrado sem que informações de cópia e\n"
 "    renomeação sejam seguidas. Use -f/--follow para seguir o\n"
 "    histórico através de renomeações e cópias. --follow sem um nome\n"
-"    de arquivo irá mostrar apenas ancestrais ou descendentes da\n"
+"    de arquivo irá mostrar apenas ancestrais da\n"
 "    revisão de início."
 
 msgid ""
@@ -16165,6 +16687,9 @@
 msgid "review revisions to merge (no merge is performed)"
 msgstr "avalia revisões a serem mescladas (a mesclagem não é executada)"
 
+msgid "abort the ongoing merge"
+msgstr "aborta uma mesclagem em andamento"
+
 msgid "[-P] [[-r] REV]"
 msgstr "[-P] [[-r] REV]"
 
@@ -16217,12 +16742,12 @@
 "conflitos de arquivo."
 
 msgid ""
-"    To undo an uncommitted merge, use :hg:`update --clean .` which\n"
+"    To undo an uncommitted merge, use :hg:`merge --abort` which\n"
 "    will check out a clean copy of the original merge parent, losing\n"
 "    all changes."
 msgstr ""
 "    Para desfazer uma mesclagem antes de sua consolidação, use\n"
-"    :hg:`update --clean .`, que obterá uma cópia limpa do primeiro pai\n"
+"    :hg:`merge --abort`, que obterá uma cópia limpa do primeiro pai\n"
 "    original, descartando todas as mudanças."
 
 msgid ""
@@ -16232,6 +16757,18 @@
 "    Devolve 0 para indicar sucesso, 1 se houver arquivos não resolvidos.\n"
 "    "
 
+msgid "merge"
+msgstr "mesclagem"
+
+msgid "cannot specify a node with --abort"
+msgstr "você não pode especificar um nó com --abort"
+
+msgid "cannot specify both --rev and --abort"
+msgstr "não se pode especificar ao mesmo tempo --rev e --abort"
+
+msgid "cannot specify --preview with --abort"
+msgstr "você não pode especificar --preview com --abort"
+
 msgid "a changeset intended to be included in the destination"
 msgstr "uma revisão que se deva incluir no destino"
 
@@ -16495,8 +17032,9 @@
 msgid "(run 'hg update' to get a working copy)\n"
 msgstr "(execute 'hg update' para obter uma cópia de trabalho)\n"
 
-msgid "update to new branch head if changesets were pulled"
-msgstr "atualiza para nova cabeça de ramo se revisões forem trazidas"
+msgid "update to new branch head if new descendants were pulled"
+msgstr ""
+"atualiza para a nova cabeça de ramo se novos descendentes forem trazidos"
 
 msgid "run even when remote repository is unrelated"
 msgstr "execute mesmo se o repositório remoto não for relacionado"
@@ -17004,8 +17542,8 @@
 msgid "revert to the specified revision"
 msgstr "reverte para a revisão especificada"
 
-msgid "interactively select the changes (EXPERIMENTAL)"
-msgstr "seleção interativa de alterações (EXPERIMENTAL)"
+msgid "interactively select the changes"
+msgstr "seleção interativa de alterações"
 
 msgid "[OPTION]... [-r REV] [NAME]..."
 msgstr "[OPÇÃO]... [-r REV] [NOME]..."
@@ -17017,11 +17555,11 @@
 msgid ""
 "       To check out earlier revisions, you should use :hg:`update REV`.\n"
 "       To cancel an uncommitted merge (and lose your changes),\n"
-"       use :hg:`update --clean .`."
+"       use :hg:`merge --abort`."
 msgstr ""
 "       Para obter revisões anteriores, você deve usar :hg:`update REV`.\n"
 "       Para cancelar uma mesclagem não consolidada (e descartar suas\n"
-"       modificações), use :hg:`update --clean .`."
+"       modificações), use :hg:`merge --abort`."
 
 msgid ""
 "    With no revision specified, revert the specified files or directories\n"
@@ -17293,14 +17831,14 @@
 msgid ""
 "    Please note that the server does not implement access control.\n"
 "    This means that, by default, anybody can read from the server and\n"
-"    nobody can write to it by default. Set the ``web.allow_push``\n"
+"    nobody can write to it by default. Set the ``web.allow-push``\n"
 "    option to ``*`` to allow everybody to push to the server. You\n"
 "    should use a real web server if you need to authenticate users."
 msgstr ""
 "    Em particular, este serviço não implementa controle de acesso por\n"
 "    usuário. Na configuração padrão, o acesso de leitura é permitido a\n"
 "    qualquer usuário, e o acesso de escrita é restrito. Defina a opção\n"
-"    ``web.allow_push`` como ``*`` para permitir que qualquer um envie\n"
+"    ``web.allow-push`` como ``*`` para permitir que qualquer um envie\n"
 "    revisões através deste serviço. Se você precisar autenticar usuários,\n"
 "    você deve usar um servidor web de verdade."
 
@@ -17987,10 +18525,10 @@
 
 msgid ""
 "    To cancel an uncommitted merge (and lose your changes), use\n"
-"    :hg:`update --clean .`."
+"    :hg:`merge --abort`."
 msgstr ""
 "    Para cancelar uma mesclagem não consolidada (e perder suas\n"
-"    modificações), use :hg:`update --clean .`."
+"    modificações), use :hg:`merge --abort`."
 
 msgid ""
 "    Use null as the changeset to remove the working directory (like\n"
@@ -18013,6 +18551,10 @@
 msgstr ""
 "só se pode especificar uma opção dentre -C/--clean, -c/--check ou -m/--merge"
 
+#, python-format
+msgid "updating to a hidden changeset %s\n"
+msgstr "atualizando para a revisão oculta %s\n"
+
 msgid "verify the integrity of the repository"
 msgstr "verifica a integridade do repositório"
 
@@ -18049,11 +18591,11 @@
 msgstr "(veja https://mercurial-scm.org para mais informações)"
 
 msgid ""
-"Copyright (C) 2005-2017 Matt Mackall and others\n"
+"Copyright (C) 2005-2018 Matt Mackall and others\n"
 "This is free software; see the source for copying conditions. There is NO\n"
 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
 msgstr ""
-"Copyright (C) 2005-2017 Matt Mackall e outros\n"
+"Copyright (C) 2005-2018 Matt Mackall e outros\n"
 "Este software é livre; veja os fontes para condições de cópia. Não\n"
 "há garantias, nem mesmo de adequação para qualquer propósito em\n"
 "particular.\n"
@@ -18220,8 +18762,8 @@
 msgid "starting interactive selection\n"
 msgstr "iniciando seleção interativa\n"
 
-msgid "Select hunks to revert"
-msgstr "Selecione trechos para reverter"
+msgid "Select hunks to apply"
+msgstr "Selecione trechos para aplicar"
 
 msgid "Select hunks to discard"
 msgstr "Selecione trechos para descartar"
@@ -18505,6 +19047,9 @@
 msgid "lists the contents of a bundle"
 msgstr "lista o conteúdo de um bundle"
 
+msgid "lists the capabilities of a remote peer"
+msgstr "lista as capacidades (\"capabilities\") de um parceiro remoto"
+
 msgid "validate the correctness of the current dirstate"
 msgstr "valida a exatidão do dirstate atual"
 
@@ -18639,8 +19184,7 @@
 "                    of how much extra data we need to read/seek across to read\n"
 "                    the delta chain for this revision\n"
 "    :``extraratio``: extradist divided by chainsize; another representation of\n"
-"                    how much unrelated data is needed to load this delta chain\n"
-"    "
+"                    how much unrelated data is needed to load this delta chain"
 msgstr ""
 "    :``rev``:       número da revisão\n"
 "    :``chainid``:   identificador de cadeia de deltas (numerado por base única)\n"
@@ -18662,7 +19206,28 @@
 "                    para ler a cadeia de deltas para esta revisão\n"
 "    :``extraratio``: extradist dividido por chainsize; outra representação\n"
 "                    de quantos dados não relacionados são necessários para\n"
-"                    carregar esta cadeia de deltas\n"
+"                    carregar esta cadeia de deltas"
+
+msgid ""
+"    If the repository is configured to use the sparse read, additional keywords\n"
+"    are available:"
+msgstr ""
+"    Se o repositório estiver configurado para usar leitura esparsa,\n"
+"    chaves adicionais estarão disponíveis:"
+
+msgid ""
+"    :``readsize``:     total size of data read from the disk for a revision\n"
+"                       (sum of the sizes of all the blocks)\n"
+"    :``largestblock``: size of the largest block of data read from the disk\n"
+"    :``readdensity``:  density of useful bytes in the data read from the disk\n"
+"    :``srchunks``:  in how many data hunks the whole revision would be read"
+msgstr ""
+
+msgid ""
+"    The sparse read can be enabled with experimental.sparse-read = True\n"
+"    "
+msgstr ""
+"    A leitura esparsa pode ser habilitada com a opção experimental.sparse-read = True\n"
 "    "
 
 msgid "do not display the saved mtime"
@@ -18684,12 +19249,22 @@
 msgid "use old-style discovery with non-heads included"
 msgstr "usa descoberta de nós antiga com não-cabeças incluídas"
 
-msgid "[-l REV] [-r REV] [-b BRANCH]... [OTHER]"
-msgstr "[-l REV] [-r REV] [-b RAMO]... [OUTRO]"
+msgid "[--rev REV] [OTHER]"
+msgstr "[-r REV] [OUTRA]"
 
 msgid "runs the changeset discovery protocol in isolation"
 msgstr "executa o protocolo discovery isoladamente"
 
+msgid "path"
+msgstr "caminho"
+
+msgid ""
+"download a resource using Mercurial logic and config\n"
+"    "
+msgstr ""
+"baixa um recurso usando a lógica e configuração do Mercurial\n"
+"    "
+
 msgid "show information about active extensions"
 msgstr "mostra informações sobre extensões ativas"
 
@@ -18721,6 +19296,16 @@
 msgid "parse and apply a fileset specification"
 msgstr "interpreta e aplica uma especificação de fileset"
 
+msgid "display format information about the current repository"
+msgstr "mostra informações de formato do repositório atual"
+
+msgid ""
+"    Use --verbose to get extra information about current config value and\n"
+"    Mercurial default."
+msgstr ""
+"    Use --verbose para obter informações extras sobre valores atuais\n"
+"    de configuração e os valores padrão do Mercurial."
+
 msgid "[PATH]"
 msgstr "[CAMINHO]"
 
@@ -18876,6 +19461,10 @@
 msgstr ""
 "verificando motores de compressão disponíveis para protocolo de rede (%s)\n"
 
+#, python-format
+msgid "checking \"re2\" regexp engine (%s)\n"
+msgstr "verificando motor de expressão regular \"re2\" (%s)\n"
+
 msgid " no template directories found\n"
 msgstr " nenhum diretório de modelos foi encontrado\n"
 
@@ -18961,6 +19550,12 @@
 msgid "free the working state lock (DANGEROUS)"
 msgstr "libera o lock do working state (PERIGOSO)"
 
+msgid "set the store lock until stopped"
+msgstr ""
+
+msgid "set the working state lock until stopped"
+msgstr ""
+
 msgid "show or modify state of locks"
 msgstr "mostra ou modifica o estado dos locks"
 
@@ -18997,9 +19592,24 @@
 "    locks também pode ser bloqueada por permissões do sistema de\n"
 "    arquivos."
 
+msgid ""
+"    Setting a lock will prevent other commands from changing the data.\n"
+"    The command will wait until an interruption (SIGINT, SIGTERM, ...) occurs.\n"
+"    The set locks are removed when the command exits."
+msgstr ""
+
 msgid "    Returns 0 if no locks are held."
 msgstr "    Devolve 0 se se nenhum lock estiver bloqueado."
 
+msgid "wlock is already held"
+msgstr ""
+
+msgid "lock is already held"
+msgstr ""
+
+msgid "ready to release the lock (y)? $$ &Yes"
+msgstr ""
+
 msgid "print merge state"
 msgstr "imprime o estado da mesclagem"
 
@@ -19414,6 +20024,9 @@
 msgstr ""
 "não há um repositório do Mercurial aqui, e um servidor não foi especificado"
 
+msgid "malformed port number in URL"
+msgstr "número de porta malformado na URL"
+
 msgid "only https and ssh connections are supported"
 msgstr "apenas conexões https e ssh são suportadas"
 
@@ -19766,10 +20379,6 @@
 msgid "use 'hg push --new-branch' to create new remote branches"
 msgstr "use 'hg push --new-branch' para criar novos ramos remotos"
 
-#, python-format
-msgid "and %s others"
-msgstr "e %s outras"
-
 msgid "remote has heads that are not known locally\n"
 msgstr "o repositório remoto possui cabeças que não são conhecidas localmente\n"
 
@@ -19931,6 +20540,9 @@
 "a opção -R deve ser separada de outras opções (por exemplo, não usar -qR) e "
 "--repository pode ser abreviada apenas como --repo!"
 
+msgid "option --debugger may not be abbreviated!"
+msgstr "a opção --debugger não pode ser abreviada!"
+
 #, python-format
 msgid "time: real %.3f secs (user %.3f+%.3f sys %.3f+%.3f)\n"
 msgstr "tempo: real %.3f segs (user %.3f+%.3f sys %.3f+%.3f)\n"
@@ -20166,6 +20778,20 @@
 msgid "unsupported getbundle arguments: %s"
 msgstr "argumentos de getbundle não suportados: %s"
 
+msgid "stream data requested but server does not allow this feature"
+msgstr ""
+"clone por stream requisitado, mas o servidor não permite essa funcionalidade"
+
+msgid ""
+"well-behaved clients should not be requesting stream data from servers not "
+"advertising it; the client may be buggy"
+msgstr ""
+"clientes bem comportados não deveriam pedir dados por stream para servidores"
+" que não anunciam esse suporte; pode haver erros no código do cliente"
+
+msgid "no common bookmarks exchange method"
+msgstr "nenhum método de troca de marcadores em comum"
+
 msgid "no common phases exchange method"
 msgstr "nenhum método de troca de fases em comum"
 
@@ -20503,9 +21129,22 @@
 msgid "invalid token"
 msgstr "token inválido"
 
+msgid "not a symbol"
+msgstr "não é um símbolo"
+
+#, python-format
+msgid "invalid pattern kind: %s"
+msgstr "tipo de padrão inválido: %s"
+
 msgid "missing argument"
 msgstr "argumento faltando"
 
+msgid "pattern must be a string"
+msgstr "o padrão deve ser uma string"
+
+msgid "can't use negate operator in this context"
+msgstr "não se pode usar o operador de negação nesse contexto"
+
 msgid "can't use a list in this context"
 msgstr "não se pode usar uma lista nesse contexto"
 
@@ -20704,6 +21343,10 @@
 msgid "couldn't parse size: %s"
 msgstr "não foi possível decodificar o tamanho: %s"
 
+#. i18n: "size" is a keyword
+msgid "size requires an expression"
+msgstr "size requer uma expressão"
+
 msgid ""
 "``size(expression)``\n"
 "    File size matches the given expression. Examples:"
@@ -20722,10 +21365,6 @@
 "    - size('>= .5MB') - arquivos com pelo menos 524288 bytes\n"
 "    - size('4k - 1MB') - arquivos com tamanho entre 4096 bytes e 1048576 bytes"
 
-#. i18n: "size" is a keyword
-msgid "size requires an expression"
-msgstr "size requer uma expressão"
-
 msgid ""
 "``encoding(name)``\n"
 "    File can be successfully decoded with the given character\n"
@@ -20961,6 +21600,9 @@
 msgid "Date Formats"
 msgstr "Formatos de Datas"
 
+msgid "Command-line flags"
+msgstr "Opções de linha de comando"
+
 msgid "File Name Patterns"
 msgstr "Padrões de Nomes de Arquivo"
 
@@ -25456,6 +26098,24 @@
 msgstr "Controla configurações genéricas de servidores."
 
 msgid ""
+"``bookmarks-pushkey-compat``\n"
+"    Trigger pushkey hook when being pushed bookmark updates. This config exist\n"
+"    for compatibility purpose (default to True)"
+msgstr ""
+"``bookmarks-pushkey-compat``\n"
+"    Dispara o gancho pushkey ao enviar atualizações de marcadores.\n"
+"    Esta configuração existe por razões de compatibilidade (padrão True)"
+
+msgid ""
+"    If you use ``pushkey`` and ``pre-pushkey`` hooks to control bookmark\n"
+"    movement we recommend you migrate them to ``txnclose-bookmark`` and\n"
+"    ``pretxnclose-bookmark``."
+msgstr ""
+"    Se você usar ganchos ``pushkey`` e ``pre-pushkey`` para controlar\n"
+"    o movimento de marcadores, recomenda-se migrar para os ganchos\n"
+"    ``txnclose-bookmark`` e ``pretxnclose-bookmark``."
+
+msgid ""
 "``compressionengines``\n"
 "    List of compression engines and their relative priority to advertise\n"
 "    to clients."
@@ -26487,13 +27147,18 @@
 
 msgid ""
 "``slash``\n"
+"    (Deprecated. Use ``slashpath`` template filter instead.)"
+msgstr ""
+"``slash``\n"
+"    (Obsoleta. Use o filtro ``slashpath`` em seu lugar.)"
+
+msgid ""
 "    Display paths using a slash (``/``) as the path separator. This\n"
 "    only makes a difference on systems where the default path\n"
 "    separator is not the slash character (e.g. Windows uses the\n"
 "    backslash character (``\\``)).\n"
 "    (default: False)"
 msgstr ""
-"``slash``\n"
 "    Exibe caminhos usando uma barra ``/`` como separador de caminhos.\n"
 "    Isto faz diferença apenas em sistemas nos quais o separador de\n"
 "    caminhos padrão não for esse caractere (por exemplo, o Windows\n"
@@ -26515,6 +27180,15 @@
 "    comando a ser usado para conexões SSH. (padrão: ``ssh``)"
 
 msgid ""
+"``ssherrorhint``\n"
+"    A hint shown to the user in the case of SSH error (e.g.\n"
+"    ``Please see http://company/internalwiki/ssh.html``)"
+msgstr ""
+"``ssherrorhint``\n"
+"    Uma dica mostrada para o usuário no caso de erro SSH\n"
+"    (por exemplo ``Por favor veja http://companhia/wiki_interno/ssh.html``)"
+
+msgid ""
 "``strict``\n"
 "    Require exact command names, instead of allowing unambiguous\n"
 "    abbreviations. (default: False)"
@@ -26569,6 +27243,16 @@
 "    (padrão: 600)"
 
 msgid ""
+"``timeout.warn``\n"
+"    Time (in seconds) before a warning is printed about held lock. A negative\n"
+"    value means no warning. (default: 0)"
+msgstr ""
+"``timeout.warn``\n"
+"    O tempo (em segundos) para emitir um aviso sobre espera por um lock.\n"
+"    Um valor negativo desabilita o aviso.\n"
+"    (padrão: 0)"
+
+msgid ""
 "``traceback``\n"
 "    Mercurial always prints a traceback when an unknown exception\n"
 "    occurs. Setting this to True will make Mercurial print a traceback\n"
@@ -26678,8 +27362,8 @@
 "por exemplo uma LAN privada, na qual você deseja aceitar operações\n"
 "push de qualquer um, você pode usar a seguinte linha de comando::"
 
-msgid "    $ hg --config web.allow_push=* --config web.push_ssl=False serve"
-msgstr "    $ hg --config web.allow_push=* --config web.push_ssl=False serve"
+msgid "    $ hg --config web.allow-push=* --config web.push_ssl=False serve"
+msgstr "    $ hg --config web.allow-push=* --config web.push_ssl=False serve"
 
 msgid ""
 "Note that this will allow anybody to push anything to the server and\n"
@@ -26738,23 +27422,23 @@
 "    (padrão: False)"
 
 msgid ""
-"``allowpull``\n"
+"``allow-pull``\n"
 "    Whether to allow pulling from the repository. (default: True)"
 msgstr ""
-"``allowpull``\n"
+"``allow-pull``\n"
 "    Se este repositório pode fornecer revisões em uma operação pull.\n"
 "    (padrão: True)"
 
 msgid ""
-"``allow_push``\n"
+"``allow-push``\n"
 "    Whether to allow pushing to the repository. If empty or not set,\n"
 "    pushing is not allowed. If the special value ``*``, any remote\n"
 "    user can push, including unauthenticated users. Otherwise, the\n"
 "    remote user must have been authenticated, and the authenticated\n"
 "    user name must be present in this list. The contents of the\n"
-"    allow_push list are examined after the deny_push list."
-msgstr ""
-"``allow_push``\n"
+"    allow-push list are examined after the deny_push list."
+msgstr ""
+"``allow-push``\n"
 "    Se este repositório pode receber revisões em uma operação push.\n"
 "    Se vazio ou não definido, o push não é permitido. Com o valor\n"
 "    especial ``*``, qualquer usuário remoto poderá fazer push,\n"
@@ -26762,7 +27446,7 @@
 "    conteúdo desta opção será uma lista de usuários. Se o usuário\n"
 "    remoto estiver autenticado, e se o nome do usuário remoto estiver\n"
 "    presente nesta lista, o push será autorizado. O conteúdo da lista\n"
-"    allow_push é examinado após a lista deny_push."
+"    allow-push é examinado após a lista deny_push."
 
 msgid ""
 "``allow_read``\n"
@@ -26957,7 +27641,7 @@
 "    push is not denied. If the special value ``*``, all remote users are\n"
 "    denied push. Otherwise, unauthenticated users are all denied, and\n"
 "    any authenticated user name present in this list is also denied. The\n"
-"    contents of the deny_push list are examined before the allow_push list."
+"    contents of the deny_push list are examined before the allow-push list."
 msgstr ""
 "``deny_push``\n"
 "    Determina se operações push que têm como destino este repositório\n"
@@ -26967,7 +27651,7 @@
 "    uma lista de usuários, e todos os usuários autenticados presentes\n"
 "    nesta lista, bem como todos os usuários não autenticados, serão\n"
 "    recusados. O conteúdo da lista deny_push é examinado antes da\n"
-"    lista allow_push."
+"    lista allow-push."
 
 msgid ""
 "``deny_read``\n"
@@ -27331,6 +28015,15 @@
 "paralelos, o que melhora consideravelmente o desempenho."
 
 msgid ""
+"``enabled``\n"
+"    Whether to enable workers code to be used.\n"
+"    (default: true)"
+msgstr ""
+"``enabled``\n"
+"    Habilita a funcionalidade \"workers\".\n"
+"    (padrão: true)"
+
+msgid ""
 "``numcpus``\n"
 "    Number of CPUs to use for parallel operations. A zero or\n"
 "    negative value is treated as ``use the default``.\n"
@@ -27672,12 +28365,32 @@
 "    scripts para compensar mudanças de configuração feitas pelo usuário."
 
 msgid ""
+"    In addition to the features disabled by ``HGPLAIN=``, the following\n"
+"    values can be specified to adjust behavior:"
+msgstr ""
+"    Além das funcionalidades desabilitadas por ``HGPLAIN=``, os\n"
+"    seguintes valores podem ser especificados para ajustar o\n"
+"    comportamento:"
+
+msgid ""
+"    ``+strictflags``\n"
+"        Restrict parsing of command line flags."
+msgstr ""
+"    ``+strictflags``\n"
+"        Restringe a interpretação de opções de linha de comando."
+
+msgid ""
 "    Equivalent options set via command line flags or environment\n"
 "    variables are not overridden."
 msgstr ""
 "    Opções equivalentes definidas pela linha de comando ou variáveis de\n"
 "    ambiente não serão sobrepostas."
 
+msgid "    See :hg:`help scripting` for details."
+msgstr ""
+"    Veja :hg:`help scripting` para mais detalhes.\n"
+"    "
+
 msgid ""
 "HGPLAINEXCEPT\n"
 "    This is a comma-separated list of features to preserve when\n"
@@ -27691,6 +28404,8 @@
 msgid ""
 "    ``alias``\n"
 "        Don't remove aliases.\n"
+"    ``color``\n"
+"        Don't disable colored output.\n"
 "    ``i18n``\n"
 "        Preserve internationalization.\n"
 "    ``revsetalias``\n"
@@ -27702,6 +28417,8 @@
 msgstr ""
 "    ``alias``\n"
 "        Não remove apelidos.\n"
+"    ``color``\n"
+"        Não desabilita saída colorida.\n"
 "    ``i18n``\n"
 "        Preserva internacionalização.\n"
 "    ``revsetalias``\n"
@@ -27897,14 +28614,17 @@
 "or double quotes if they contain characters outside of\n"
 "``[.*{}[]?/\\_a-zA-Z0-9\\x80-\\xff]`` or if they match one of the\n"
 "predefined predicates. This generally applies to file patterns other\n"
-"than globs and arguments for predicates."
+"than globs and arguments for predicates. Pattern prefixes such as\n"
+"``path:`` may be specified without quoting."
 msgstr ""
 "Identificadores, tais como nomes de arquivo ou padrões, devem ser\n"
 "passados entre aspas simples ou duplas se contiverem caracteres\n"
 "fora do conjunto ``[.*{}[]?/\\_a-zA-Z0-9\\x80-\\xff]`` ou se forem\n"
 "iguais a um dos predicados pré-definidos. Isto geralmente se\n"
 "aplica a padrões de arquivo diferentes de glob e argumentos para\n"
-"predicados."
+"predicados.\n"
+"Prefixos de padrões como ``path:`` podem ser especificados\n"
+"sem aspas."
 
 msgid ""
 "Special characters can be used in quoted identifiers by escaping them,\n"
@@ -28021,8 +28741,245 @@
 msgid "- Remove files listed in foo.lst that contain the letter a or b::"
 msgstr "- Remove arquivos listados em foo.lst que contêm as letras a ou b::"
 
-msgid "    hg remove \"set: 'listfile:foo.lst' and (**a* or **b*)\"\n"
-msgstr "    hg remove \"set: 'listfile:foo.lst' and (**a* or **b*)\"\n"
+msgid "    hg remove \"set: listfile:foo.lst and (**a* or **b*)\"\n"
+msgstr "    hg remove \"set: listfile:foo.lst and (**a* or **b*)\"\n"
+
+msgid "Most Mercurial commands accept various flags."
+msgstr "Muitos comandos do Mercurial aceitam diversas opções."
+
+msgid ""
+"Flag names\n"
+"=========="
+msgstr ""
+"Nomes de opções\n"
+"==============="
+
+msgid ""
+"Flags for each command are listed in :hg:`help` for that command.\n"
+"Additionally, some flags, such as --repository, are global and can be used with\n"
+"any command - those are seen in :hg:`help -v`, and can be specified before or\n"
+"after the command."
+msgstr ""
+"As opções para cada comando são listadas em :hg:`help` para\n"
+"tais comandos.\n"
+"Adicionalmente, algumas opções, como --repository, são globais\n"
+"e podem ser usadas com qualquer comando; elas são listadas em\n"
+":hg:`help -v`, e podem ser especificadas antes ou depois dos\n"
+"comandos."
+
+msgid ""
+"Every flag has at least a long name, such as --repository. Some flags may also\n"
+"have a short one-letter name, such as the equivalent -R. Using the short or long\n"
+"name is equivalent and has the same effect."
+msgstr ""
+"Todas as opções possuem ao menos um nome longo, como em --repository.\n"
+"Algumas opções podem também ter um nome curto de uma letra, como a\n"
+"equivalente -R.\n"
+"Os usos dos nomes curtos ou longos são equivalentes, e têm o mesmo\n"
+"efeito."
+
+msgid ""
+"Flags that have a short name can also be bundled together - for instance, to\n"
+"specify both --edit (short -e) and --interactive (short -i), one could use::"
+msgstr ""
+"Opções que possuem um nome curto podem ser especificadas juntas; por\n"
+"exemplo, para especificar tanto --edit (-e) e --interactive (-i),\n"
+"você poderia usar::"
+
+msgid "    hg commit -ei"
+msgstr "    hg commit -ei"
+
+msgid ""
+"If any of the bundled flags takes a value (i.e. is not a boolean), it must be\n"
+"last, followed by the value::"
+msgstr ""
+"Se alguma das opções agrupadas receber um valor (ou seja, se não for\n"
+"booleana), deve ser passada por último, seguida pelo valor::"
+
+msgid "    hg commit -im 'Message'"
+msgstr "    hg commit -im 'Mensagem'"
+
+msgid ""
+"Flag types\n"
+"=========="
+msgstr ""
+"Tipos de opção\n"
+"=============="
+
+msgid ""
+"Mercurial command-line flags can be strings, numbers, booleans, or lists of\n"
+"strings."
+msgstr ""
+"As opções de linha de comando do Mercurial podem ser strings,\n"
+"números, booleanas ou listas de strings."
+
+msgid ""
+"Specifying flag values\n"
+"======================"
+msgstr ""
+"Especificação de valores de opções\n"
+"=================================="
+
+msgid ""
+"The following syntaxes are allowed, assuming a flag 'flagname' with short name\n"
+"'f'::"
+msgstr ""
+"Assumindo uma opção 'flagname' com nome curto 'f', as seguintes\n"
+"sintaxes são suportadas::"
+
+msgid ""
+"    --flagname=foo\n"
+"    --flagname foo\n"
+"    -f foo\n"
+"    -ffoo"
+msgstr ""
+"    --flagname=foo\n"
+"    --flagname foo\n"
+"    -f foo\n"
+"    -ffoo"
+
+msgid ""
+"This syntax applies to all non-boolean flags (strings, numbers or lists)."
+msgstr ""
+"Esta sintaxe se aplica a todas as opções não booleanas (strings, números ou "
+"listas)."
+
+msgid ""
+"Specifying boolean flags\n"
+"========================"
+msgstr ""
+"Especificação de opções booleanas\n"
+"================================="
+
+msgid ""
+"Boolean flags do not take a value parameter. To specify a boolean, use the flag\n"
+"name to set it to true, or the same name prefixed with 'no-' to set it to\n"
+"false::"
+msgstr ""
+"Opções booleanas não recebem um valor. Para especificar uma booleana,\n"
+"use o nome da opção para ativá-la, ou o mesmo nome prefixado por\n"
+"'no-' para desativá-la::"
+
+msgid ""
+"    hg commit --interactive\n"
+"    hg commit --no-interactive"
+msgstr ""
+"    hg commit --interactive\n"
+"    hg commit --no-interactive"
+
+msgid ""
+"Specifying list flags\n"
+"====================="
+msgstr ""
+"Especificação de opções de lista\n"
+"================================"
+
+msgid ""
+"List flags take multiple values. To specify them, pass the flag multiple "
+"times::"
+msgstr ""
+"Opções de lista recebem múltiplos valores. Para especificá-las,\n"
+"passe a opção diversas vezes::"
+
+msgid "    hg files --include mercurial --include tests"
+msgstr "    hg files --include mercurial --include tests"
+
+msgid ""
+"Setting flag defaults\n"
+"====================="
+msgstr ""
+"Definindo padrões de opções\n"
+"==========================="
+
+msgid ""
+"In order to set a default value for a flag in an hgrc file, it is recommended to\n"
+"use aliases::"
+msgstr ""
+"Para definir um valor padrão para uma opção em um arquivo hgrc,\n"
+"recomenda-se o uso de apelidos::"
+
+msgid ""
+"    [alias]\n"
+"    commit = commit --interactive"
+msgstr ""
+"    [alias]\n"
+"    commit = commit --interactive"
+
+msgid "For more information on hgrc files, see :hg:`help config`."
+msgstr "Para mais informações sobre arquivos hgrc, veja :hg:`help config`."
+
+msgid ""
+"Overriding flags on the command line\n"
+"===================================="
+msgstr ""
+"Sobrepondo opções na linha de comando\n"
+"====================================="
+
+msgid ""
+"If the same non-list flag is specified multiple times on the command line, the\n"
+"latest specification is used::"
+msgstr ""
+"Se uma mesma opção que não seja de lista for especificada diversas\n"
+"vezes na linha de comando, a última especificação será usada::"
+
+msgid "    hg commit -m \"Ignored value\" -m \"Used value\""
+msgstr "    hg commit -m \"Valor ignorado\" -m \"Valor usado\""
+
+msgid "This includes the use of aliases - e.g., if one has::"
+msgstr "Isso inclui o uso de apelidos - por exemplo, no caso de::"
+
+msgid ""
+"    [alias]\n"
+"    committemp = commit -m \"Ignored value\""
+msgstr ""
+"    [alias]\n"
+"    committemp = commit -m \"Valor ignorado\""
+
+msgid "then the following command will override that -m::"
+msgstr "o seguinte comando irá sobrepor aquela opção -m::"
+
+msgid "    hg committemp -m \"Used value\""
+msgstr "    hg committemp -m \"Valor usado\""
+
+msgid ""
+"Overriding flag defaults\n"
+"========================"
+msgstr ""
+"Sobrepondo padrões de opções\n"
+"============================"
+
+msgid ""
+"Every flag has a default value, and you may also set your own defaults in hgrc\n"
+"as described above.\n"
+"Except for list flags, defaults can be overridden on the command line simply by\n"
+"specifying the flag in that location."
+msgstr ""
+"Toda opção possui um valor padrão, e você pode definir os seus\n"
+"próprios valores padrão no arquivo hgrc, como descrito acima.\n"
+"À exceção de opções de lista, padrões podem ser sobrepostos\n"
+"na linha de comando simplesmente especificando a opção nesse\n"
+"local."
+
+msgid ""
+"Hidden flags\n"
+"============"
+msgstr ""
+"Opções ocultas\n"
+"=============="
+
+msgid ""
+"Some flags are not shown in a command's help by default - specifically, those\n"
+"that are deemed to be experimental, deprecated or advanced. To show all flags,\n"
+"add the --verbose flag for the help command::"
+msgstr ""
+"Algumas opções por padrão não são exibidas no texto de ajuda de\n"
+"um comando - especificamente, opções consideradas experimentais,\n"
+"obsoletas ou avançadas.\n"
+"Para mostrar todas as opções, use a opção --verbose com o comando\n"
+"help::"
+
+msgid "    hg help --verbose commit\n"
+msgstr "    hg help --verbose commit\n"
 
 msgid ""
 "Ancestor\n"
@@ -29345,13 +30302,13 @@
 msgid ""
 "Copying\n"
 "\"\"\"\"\"\"\"\n"
-"Copyright (C) 2005-2017 Matt Mackall.\n"
+"Copyright (C) 2005-2018 Matt Mackall.\n"
 "Free use of this software is granted under the terms of the GNU General\n"
 "Public License version 2 or any later version."
 msgstr ""
 "Cópia\n"
 "\"\"\"\"\"\n"
-"Copyright (C) 2005-2017 Matt Mackall.\n"
+"Copyright (C) 2005-2018 Matt Mackall.\n"
 "Garante-se livre uso deste software nos termos da licença\n"
 "GNU General Public License, versão 2 ou qualquer versão posterior."
 
@@ -29409,14 +30366,14 @@
 "Copying\n"
 "=======\n"
 "This manual page is copyright 2006 Vadim Gelfer.\n"
-"Mercurial is copyright 2005-2017 Matt Mackall.\n"
+"Mercurial is copyright 2005-2018 Matt Mackall.\n"
 "Free use of this software is granted under the terms of the GNU General\n"
 "Public License version 2 or any later version."
 msgstr ""
 "Cópia\n"
 "=====\n"
 "Esta página de manual: copyright 2006 Vadim Gelfer.\n"
-"Mercurial: copyright 2005-2017 Matt Mackall.\n"
+"Mercurial: copyright 2005-2018 Matt Mackall.\n"
 "Garante-se livre uso deste software nos termos da licença\n"
 "GNU General Public License, versão 2 ou qualquer versão posterior."
 
@@ -29692,14 +30649,14 @@
 "Copying\n"
 "=======\n"
 "This manual page is copyright 2005 Bryan O'Sullivan.\n"
-"Mercurial is copyright 2005-2017 Matt Mackall.\n"
+"Mercurial is copyright 2005-2018 Matt Mackall.\n"
 "Free use of this software is granted under the terms of the GNU General\n"
 "Public License version 2 or any later version."
 msgstr ""
 "Cópia\n"
 "=====\n"
 "Esta página de manual: copyright 2005 Bryan O'Sullivan.\n"
-"Mercurial: copyright 2005-2017 Matt Mackall.\n"
+"Mercurial: copyright 2005-2018 Matt Mackall.\n"
 "Garante-se livre uso deste software nos termos da licença\n"
 "GNU General Public License, versão 2 ou qualquer versão posterior."
 
@@ -31187,6 +32144,64 @@
 "    podem ser necessárias para interagir com um repositório.."
 
 msgid ""
+"Command-line Flags\n"
+"=================="
+msgstr ""
+"Opções de linha de comando\n"
+"=========================="
+
+msgid ""
+"Mercurial's default command-line parser is designed for humans, and is not\n"
+"robust against malicious input. For instance, you can start a debugger by\n"
+"passing ``--debugger`` as an option value::"
+msgstr ""
+"O decodificador de linha de comando do Mercurial foi desenhado\n"
+"para humanos, e não é robusto em relação a entrada maliciosa.\n"
+"Por exemplo, você pode iniciar um depurador passando a opção\n"
+"``--debugger``::"
+
+msgid "    $ REV=--debugger sh -c 'hg log -r \"$REV\"'"
+msgstr "    $ REV=--debugger sh -c 'hg log -r \"$REV\"'"
+
+msgid ""
+"This happens because several command-line flags need to be scanned without\n"
+"using a concrete command table, which may be modified while loading repository\n"
+"settings and extensions."
+msgstr ""
+"Isso ocorre porque diversas opções de linha de comando precisam\n"
+"ser varridas sem usar uma tabela de comandos concreta, que pode\n"
+"ser modificada enquanto extensões e configurações de repositório\n"
+"são carregadas."
+
+msgid ""
+"Since Mercurial 4.4.2, the parsing of such flags may be restricted by setting\n"
+"``HGPLAIN=+strictflags``. When this feature is enabled, all early options\n"
+"(e.g. ``-R/--repository``, ``--cwd``, ``--config``) must be specified first\n"
+"amongst the other global options, and cannot be injected to an arbitrary\n"
+"location::"
+msgstr ""
+"A partir do Mercurial 4.4.2, a interpretação de tais opções pode ser\n"
+"restringida definido a variável de ambiente ``HGPLAIN=+strictflags``.\n"
+"Ao habilitar esta funcionalidade, todas as opções antecipadas (por\n"
+"exemplo ``-R/--repository``, ``--cwd``, ``--config``) devem ser\n"
+"especificadas primeiro dentre as outras opções globais, e não podem\n"
+"ser injetadas em locais arbitrários::"
+
+msgid "    $ HGPLAIN=+strictflags hg -R \"$REPO\" log -r \"$REV\""
+msgstr "    $ HGPLAIN=+strictflags hg -R \"$REPO\" log -r \"$REV\""
+
+msgid ""
+"In earlier Mercurial versions where ``+strictflags`` isn't available, you\n"
+"can mitigate the issue by concatenating an option value with its flag::"
+msgstr ""
+"Em versões mais antigas do Mercurial que não possuem a funcionalidade\n"
+"``+strictflags``, você pode mitigar esse risco concatenando as opções\n"
+"e seus valores::"
+
+msgid "    $ hg log -r\"$REV\" --keyword=\"$KEYWORD\""
+msgstr "    $ hg log -r\"$REV\" --keyword=\"$KEYWORD\""
+
+msgid ""
 "Consuming Command Output\n"
 "========================"
 msgstr ""
@@ -31615,11 +32630,11 @@
 "    ser que -S/--subrepos seja especificado."
 
 msgid ""
-":cat: cat currently only handles exact file matches in subrepos.\n"
+":cat: Git subrepositories only support exact file matches.\n"
 "    Subversion subrepositories are currently ignored."
 msgstr ""
-":cat: cat no momento considera apenas especificações exatas de\n"
-"    arquivos em sub-repositórios.\n"
+":cat: sub-repositórios Git suportam apenas especificações\n"
+"    exatas de arquivos.\n"
 "    Sub-repositórios do Subversion são no momento\n"
 "    ignorados."
 
@@ -32451,12 +33466,16 @@
 msgid "(activating bookmark %s)\n"
 msgstr "(ativando marcador %s)\n"
 
-msgid ""
-"use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to "
+#, python-format
+msgid "aborting the merge, updating back to %s\n"
+msgstr "abortando a mesclagem, e atualizando de volta para %s\n"
+
+msgid ""
+"use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to "
 "abandon\n"
 msgstr ""
-"use 'hg resolve' para mesclar novamente arquivos não resolvidos ou 'hg "
-"update -C .' para abandonar\n"
+"use 'hg resolve' para mesclar novamente arquivos não resolvidos ou 'hg merge"
+" --abort' para abandonar\n"
 
 msgid "(branch merge, don't forget to commit)\n"
 msgstr "(mesclagem de ramo, não esqueça de consolidar)\n"
@@ -32953,8 +33972,12 @@
 "    usadas para criar representações visuais da topologia\n"
 "    do repositório."
 
-msgid "    The ``revision`` URL parameter controls the starting changeset."
-msgstr "    O parâmetro URL ``revisão`` controla a revisão inicial."
+msgid ""
+"    The ``revision`` URL parameter controls the starting changeset. If it's\n"
+"    absent, the default is ``tip``."
+msgstr ""
+"    O parâmetro URL ``revisão`` controla a revisão inicial.\n"
+"    Se não estiver presente, o padrão é ``tip``."
 
 msgid ""
 "    The ``revcount`` query string argument can define the number of changesets\n"
@@ -32963,6 +33986,16 @@
 "    O argumento da string de consulta ``revcount`` pode ser usado\n"
 "    para definir o número de revisões exibidas."
 
+msgid ""
+"    The ``graphtop`` query string argument can specify the starting changeset\n"
+"    for producing ``jsdata`` variable that is used for rendering graph in\n"
+"    JavaScript. By default it has the same value as ``revision``."
+msgstr ""
+"    O argumento de consulta ``graphtop`` pode especificar a revisão\n"
+"    inicial para produzir a variável ``jsdata`` usada para renderizar\n"
+"    o grafo em JavaScript.\n"
+"    Por padrão possui o mesmo valor que ``revision``."
+
 msgid "    This handler will render the ``graph`` template."
 msgstr "    Renderiza usando o modelo ``graph``."
 
@@ -33229,10 +34262,6 @@
 msgstr "o diretório de trabalho está agora baseado na revisão %d\n"
 
 #, python-format
-msgid "waiting for lock on %s held by process %r on host %r\n"
-msgstr "esperando pelo bloqueio em %s feito pelo processo %r no host %r\n"
-
-#, python-format
 msgid "repository %s"
 msgstr "repositório %s"
 
@@ -33260,16 +34289,6 @@
 "não é possível consolidar parcialmente uma mesclagem (não especifique "
 "arquivos ou padrões)"
 
-#, python-format
-msgid "commit with new subrepo %s excluded"
-msgstr "consolidação com novo sub-repositório %s excluída"
-
-msgid "use --subrepos for recursive commit"
-msgstr "use --subrepos para um commit recursivo"
-
-msgid "can't commit subrepos without .hgsub"
-msgstr "não é possível consolidar sub-repositórios sem o arquivo .hgsub"
-
 msgid "cannot commit merge with missing files"
 msgstr "não se pode consolidar uma mesclagem com arquivos ausentes"
 
@@ -33310,6 +34329,10 @@
 msgstr ""
 "execute \"hg debuginstall\" para listar os motores de compressão disponíveis"
 
+#, python-format
+msgid "waiting for lock on %s held by process %r on host %r\n"
+msgstr "esperando pelo bloqueio em %s feito pelo processo %r no host %r\n"
+
 msgid "can't use TLS: Python SSL support not installed"
 msgstr "impossível usar TLS: suporte Python a SSL não instalado"
 
@@ -33610,6 +34633,20 @@
 msgid "run \"hg resolve --all\" to resolve"
 msgstr "execute \"hg resolve --all\" para resolver"
 
+msgid "invalid file pattern"
+msgstr "padrão de arquivos inválido"
+
+#, python-format
+msgid "reserved character: %s"
+msgstr "caractere reservado: %s"
+
+#, python-format
+msgid "unsupported file pattern: %s"
+msgstr "padrão de arquivos não suportado: %s"
+
+msgid "paths must be prefixed with \"path:\""
+msgstr "caminhos devem ser prefixados por \"path:\""
+
 msgid "Attention:"
 msgstr "Atenção:"
 
@@ -33637,16 +34674,6 @@
 msgid "Warning!"
 msgstr "Aviso!"
 
-#. i18n: column positioning for "hg log"
-#, python-format
-msgid "bookmark:    %s\n"
-msgstr "marcador:      %s\n"
-
-#. i18n: column positioning for "hg log"
-#, python-format
-msgid "tag:         %s\n"
-msgstr "etiqueta:      %s\n"
-
 #, python-format
 msgid "no such name: %s"
 msgstr "não existe tal nome: %s"
@@ -33708,6 +34735,26 @@
 msgstr "a revisão %s não pode tornar a si mesma obsoleta"
 
 #, python-format
+msgid "hidden revision '%s' is pruned"
+msgstr "a revisão oculta '%s' foi podada"
+
+#, python-format
+msgid "hidden revision '%s' has diverged"
+msgstr "a revisão oculta '%s' divergiu"
+
+#, python-format
+msgid "hidden revision '%s' was rewritten as: %s"
+msgstr "a revisão oculta '%s' foi reescrita como: %s"
+
+#, python-format
+msgid "hidden revision '%s' was split as: %s"
+msgstr "a revisão oculta '%s' foi dividida em: %s"
+
+#, python-format
+msgid "hidden revision '%s' was split as: %s and %d more"
+msgstr "a revisão oculta '%s' foi dividida em: %s e %d mais"
+
+#, python-format
 msgid "unexpected token: %s"
 msgstr "token inesperado: %s"
 
@@ -33834,6 +34881,10 @@
 msgstr "%d trechos, %d linhas modificadas\n"
 
 #, python-format
+msgid "apply change %d/%d to '%s'?"
+msgstr "aplicar mudança %d/%d em '%s'?"
+
+#, python-format
 msgid "discard change %d/%d to '%s'?"
 msgstr "descartar mudança %d/%d em '%s'?"
 
@@ -33842,8 +34893,8 @@
 msgstr "gravar mudança %d/%d em '%s'?"
 
 #, python-format
-msgid "revert change %d/%d to '%s'?"
-msgstr "reverter mudança %d/%d em '%s'?"
+msgid "apply this change to '%s'?"
+msgstr "aplicar esta mudança em '%s'?"
 
 #, python-format
 msgid "discard this change to '%s'?"
@@ -33853,9 +34904,19 @@
 msgid "record this change to '%s'?"
 msgstr "gravar esta mudança em '%s'?"
 
-#, python-format
-msgid "revert this change to '%s'?"
-msgstr "reverter esta mudança em '%s'?"
+msgid ""
+"[Ynesfdaq?]$$ &Yes, apply this change$$ &No, skip this change$$ &Edit this "
+"change manually$$ &Skip remaining changes to this file$$ Apply remaining "
+"changes to this &file$$ &Done, skip remaining changes and files$$ Apply &all"
+" changes to all remaining files$$ &Quit, applying no changes$$ &? (display "
+"help)"
+msgstr ""
+"[Ynesfdaq?]$$ (&Y) sim, aplique esta mudança$$ &Não, desconsidere esta "
+"mudança$$ &Edite esta mudança manualmente$$ De&Sconsidere as mudanças "
+"restantes neste arquivo$$ (&f) aplique as mudanças restantes neste arquivo$$"
+" Termina&Do, desconsidere as mudanças e arquivos restantes$$ Aplique tod&As "
+"as mudanças em todos os arquivos restantes$$ (&Q) encerra, sem aplicar "
+"nenhuma mudança$$ &? (exibe a ajuda)"
 
 msgid ""
 "[Ynesfdaq?]$$ &Yes, discard this change$$ &No, skip this change$$ &Edit this"
@@ -33886,20 +34947,6 @@
 "mudança$$ &? (exibe a ajuda)"
 
 msgid ""
-"[Ynesfdaq?]$$ &Yes, revert this change$$ &No, skip this change$$ &Edit this "
-"change manually$$ &Skip remaining changes to this file$$ Revert remaining "
-"changes to this &file$$ &Done, skip remaining changes and files$$ Revert "
-"&all changes to all remaining files$$ &Quit, reverting no changes$$ &? "
-"(display help)"
-msgstr ""
-"[Ynesfdaq?]$$ (&Y) sim, reverta esta mudança$$ &Não, desconsidere esta "
-"mudança$$ &Edite esta mudança manualmente$$ De&Sconsidere as mudanças "
-"restantes neste arquivo$$ (&F) reverta as mudanças restantes deste arquivo$$"
-" Termina&Do, descarte as mudanças e arquivos restantes$$ Reverta tod&As as "
-"mudanças de todos os arquivos restantes$$ (&Q) encerra, sem reverter nenhuma"
-" mudança$$ &? (exibe a ajuda)"
-
-msgid ""
 "\n"
 "To remove '-' lines, make them ' ' lines (context).\n"
 "To remove '+' lines, delete them.\n"
@@ -34176,6 +35223,10 @@
 msgid "cannot register multiple processors on flag '%#x'."
 msgstr "não é possível registrar múltiplos processadores para a flag '%#x'."
 
+#, python-format
+msgid "node %s is not censored"
+msgstr "o nó %s não é censurado"
+
 msgid "index entry flags need revlog version 1"
 msgstr "flags de entrada de índice exigem revlog versão 1"
 
@@ -34251,10 +35302,6 @@
 msgstr "%s: tentativa de adicionar a revisão wdir"
 
 #, python-format
-msgid "node %s is not censored"
-msgstr "o nó %s não é censurado"
-
-#, python-format
 msgid "value for deltareuse invalid: %s"
 msgstr "valor inválido para deltareuse: %s"
 
@@ -34677,28 +35724,21 @@
 "    Um apelido para limit()."
 
 #, python-format
-msgid "%s takes no arguments or a pattern and an optional revset"
-msgstr "%s requer nenhum argumento ou um padrão e um revset opcional"
-
-#, python-format
 msgid "%s expected a pattern"
 msgstr "%s espera um padrão"
 
-#, python-format
-msgid "%s expected one starting revision"
-msgstr "%s espera uma revisão inicial"
-
-msgid ""
-"``follow([pattern[, startrev]])``\n"
+msgid ""
+"``follow([file[, startrev]])``\n"
 "    An alias for ``::.`` (ancestors of the working directory's first parent).\n"
-"    If pattern is specified, the histories of files matching given\n"
+"    If file pattern is specified, the histories of files matching given\n"
 "    pattern in the revision given by startrev are followed, including copies."
 msgstr ""
-"``follow([padrão[, revinicial]])``\n"
+"``follow([arquivo[, revinicial]])``\n"
 "    Um apelido para ``::.`` (ancestrais do primeiro pai do diretório\n"
 "    de trabalho).\n"
-"    Se um padrão for especificado, o histórico dos arquivos correspondentes\n"
-"    ao padrão na revisão dada por revinicial serão seguidos, incluindo cópias."
+"    Se um padrão de arquivos for especificado, o histórico dos\n"
+"    arquivos correspondentes ao padrão na revisão dada por\n"
+"    revinicial serão seguidos, incluindo cópias."
 
 msgid ""
 "``followlines(file, fromline:toline[, startrev=., descend=False])``\n"
@@ -35395,8 +36435,8 @@
 msgid "syntax error in revset '%s'"
 msgstr "erro de sintaxe no revset '%s'"
 
-msgid "not a symbol"
-msgstr "não é um símbolo"
+msgid "can't use '::' in this context"
+msgstr "não se pode usar '::' nesse contexto"
 
 msgid "can't negate that"
 msgstr "não é possível negar essa expressão"
@@ -35412,6 +36452,37 @@
 msgid "unexpected revspec format character %s"
 msgstr "caractere de formato de revspec %s inesperado"
 
+msgid "incomplete revspec format character"
+msgstr "caractere de formato de revspec incompleto"
+
+msgid "missing argument for revspec"
+msgstr "argumento faltando para revspec"
+
+msgid "invalid argument for revspec"
+msgstr "argumento inválido para revspec"
+
+msgid "too many revspec arguments specified"
+msgstr "opções demais de revspec especificadas"
+
+#, python-format
+msgid "cannot %s null changeset"
+msgstr "não é possível realizar \"%s\" da revisão nula"
+
+msgid "no changeset checked out"
+msgstr "nenhuma revisão no diretório de trabalho"
+
+#, python-format
+msgid "cannot %s while merging"
+msgstr "não é possível realizar \"%s\" durante uma mesclagem"
+
+#, python-format
+msgid "cannot %s public changesets"
+msgstr "não é possível realizar \"%s\" de revisões públicas"
+
+#, python-format
+msgid "cannot %s changeset with children"
+msgstr "não é possível realizar \"%s\" em revisões com filhas"
+
 #, python-format
 msgid "no changes found (ignored %d secret changesets)\n"
 msgstr "nenhuma mudança encontrada (%d revisões secretas ignoradas)\n"
@@ -35538,6 +36609,10 @@
 msgid "unknown extdata source '%s'"
 msgstr "origem extsource desconhecida '%s'"
 
+#, python-format
+msgid "extdata command '%s' failed: %s"
+msgstr "falha no comando extdata '%s' : %s"
+
 msgid "empty simplekeyvalue file"
 msgstr "arquivo simplekeyvalue vazio"
 
@@ -35550,9 +36625,29 @@
 msgstr "%i revisões tornadas obsoletas\n"
 
 #, python-format
+msgid "%i new %s changesets\n"
+msgstr "%i novas revisões %s\n"
+
+#, python-format
 msgid "new changesets %s\n"
 msgstr "novas revisões %s\n"
 
+#, python-format
+msgid "%s and %d others"
+msgstr "%s e %d outras"
+
+#, python-format
+msgid "rejecting multiple heads on branch \"%s\""
+msgstr "rejeitando cabeças múltiplas no ramo \"%s\""
+
+#, python-format
+msgid "%d heads: %s"
+msgstr "%d cabeças: %s"
+
+#, python-format
+msgid "warning: accessing hidden changesets for write operation: %s\n"
+msgstr "aviso: acessando revisões ocultas para operação de escrita: %s\n"
+
 msgid "child process failed to start"
 msgstr "processo filho falhou ao iniciar"
 
@@ -36118,6 +37213,16 @@
 "use (c) a versão alterada ou (d) apague?$$ (&C) alterada $$ (&D) apague"
 
 #, python-format
+msgid "commit with new subrepo %s excluded"
+msgstr "consolidação com novo sub-repositório %s excluída"
+
+msgid "use --subrepos for recursive commit"
+msgstr "use --subrepos para um commit recursivo"
+
+msgid "can't commit subrepos without .hgsub"
+msgstr "não é possível consolidar sub-repositórios sem o arquivo .hgsub"
+
+#, python-format
 msgid ""
 " subrepository sources for %s differ\n"
 "use (l)ocal source (%s) or (r)emote source (%s)?$$ &Local $$ &Remote"
@@ -36356,15 +37461,14 @@
 
 msgid ""
 ":basename: Any text. Treats the text as a path, and returns the last\n"
-"    component of the path after splitting by the path separator\n"
-"    (ignoring trailing separators). For example, \"foo/bar/baz\" becomes\n"
-"    \"baz\" and \"foo/bar//\" becomes \"bar\"."
+"    component of the path after splitting by the path separator.\n"
+"    For example, \"foo/bar/baz\" becomes \"baz\" and \"foo/bar//\" becomes \"\"."
 msgstr ""
 ":basename: Qualquer texto. Trata o texto como um caminho, e\n"
 "    devolve o último componente do caminho após quebrá-lo\n"
-"    usando o separador de caminhos (ignorando separadores à\n"
-"    direita). Por exemple, \"foo/bar/baz\" se torna \"baz\"\n"
-"    e \"foo/bar//\" se torna \"bar\"."
+"    usando o separador de caminhos.\n"
+"    Por exemplo, \"foo/bar/baz\" se torna \"baz\"\n"
+"    e \"foo/bar//\" se torna \"\"."
 
 msgid ":count: List or text. Returns the length as an integer."
 msgstr ":count: Lista ou texto. Retorna o comprimento como um inteiro."
@@ -36475,6 +37579,20 @@
 "    >>> person(b'\"Foo Bar <foo@bar>')\n"
 "    'Foo Bar'"
 msgstr ""
+"    >>> person(b'foo@bar')\n"
+"    'foo'\n"
+"    >>> person(b'Foo Bar <foo@bar>')\n"
+"    'Foo Bar'\n"
+"    >>> person(b'\"Foo Bar\" <foo@bar>')\n"
+"    'Foo Bar'\n"
+"    >>> person(b'\"Foo \"buz\" Bar\" <foo@bar>')\n"
+"    'Foo \"buz\" Bar'\n"
+"    >>> # The following are invalid, but do exist in real-life\n"
+"    ...\n"
+"    >>> person(b'Foo \"buz\" Bar <foo@bar>')\n"
+"    'Foo \"buz\" Bar'\n"
+"    >>> person(b'\"Foo Bar <foo@bar>')\n"
+"    'Foo Bar'"
 
 msgid ""
 ":revescape: Any text. Escapes all \"special\" characters, except @.\n"
@@ -36524,6 +37642,11 @@
 msgid ":shortdate: Date. Returns a date like \"2006-09-18\"."
 msgstr ":shortdate: Data. Devolve uma data como \"2006-09-18\"."
 
+msgid ":slashpath: Any text. Replaces the native path separator with slash."
+msgstr ""
+":slashpath: Qualquer texto. Substitui o separador de caminhos nativo por uma"
+" barra '/'."
+
 msgid ":splitlines: Any text. Split text into a list of lines."
 msgstr ":splitlines: Qualquer texto. Quebra o texto em uma lista de linhas."
 
@@ -36577,6 +37700,45 @@
 ":utf8: Qualquer texto. Converte da codificação de caracteres local para "
 "UTF-8."
 
+#. i18n: column positioning for "hg log"
+#, python-format
+msgid ""
+"bookmark:    %s\n"
+"branch:      %s\n"
+"changeset:   %s\n"
+"copies:      %s\n"
+"date:        %s\n"
+"extra:       %s=%s\n"
+"files+:      %s\n"
+"files-:      %s\n"
+"files:       %s\n"
+"instability: %s\n"
+"manifest:    %s\n"
+"obsolete:    %s\n"
+"parent:      %s\n"
+"phase:       %s\n"
+"summary:     %s\n"
+"tag:         %s\n"
+"user:        %s\n"
+msgstr ""
+"marcador:      %s\n"
+"ramo:          %s\n"
+"revisão:       %s\n"
+"cópias:        %s\n"
+"data:          %s\n"
+"extra:         %s=%s\n"
+"arquivos+:     %s\n"
+"arquivos-:     %s\n"
+"arquivos:      %s\n"
+"instabilidade: %s\n"
+"manifesto:     %s\n"
+"obsolescência: %s\n"
+"pai:           %s\n"
+"fase:          %s\n"
+"sumário:       %s\n"
+"etiqueta:      %s\n"
+"usuário:       %s\n"
+
 msgid ":author: String. The unmodified author of the changeset."
 msgstr ":author: String. O autor da revisão, sem modificações."
 
@@ -36808,8 +37970,8 @@
 msgid ":phase: String. The changeset phase name."
 msgstr ":phase: String. O nome da fase da revisão."
 
-msgid ":phaseidx: Integer. The changeset phase index."
-msgstr ":phaseidx: Inteiro. O índice da fase da revisão."
+msgid ":phaseidx: Integer. The changeset phase index. (ADVANCED)"
+msgstr ":phaseidx: Inteiro. O índice da fase da revisão. (AVANÇADO)"
 
 msgid ":rev: Integer. The repository-local changeset revision number."
 msgstr ":rev: Inteiro. O número de ordem da revisão no repositório local."
@@ -36837,6 +37999,13 @@
 ":instabilities: Lista de strings. Problemas de evolução que afetam a\n"
 "    revisão. (EXPERIMENTAL)"
 
+msgid ""
+":verbosity: String. The current output verbosity in 'debug', 'quiet', 'verbose',\n"
+"    or ''."
+msgstr ""
+":verbosity: String. O nível de verbosidade atual em 'debug',\n"
+"    'quiet', 'verbose' ou ''."
+
 msgid "unterminated template expansion"
 msgstr "expansão de modelo não terminada"
 
@@ -37136,7 +38305,7 @@
 msgstr ":max(iterável): Retorna o máximo de um iterável"
 
 #. i18n: "max" is a keyword
-msgid "max expects one arguments"
+msgid "max expects one argument"
 msgstr "max espera um argumento"
 
 #. i18n: "max" is a keyword
@@ -37147,7 +38316,7 @@
 msgstr ":min(iterável): Retorna o mínimo de um iterável"
 
 #. i18n: "min" is a keyword
-msgid "min expects one arguments"
+msgid "min expects one argument"
 msgstr "min espera um argumento"
 
 #. i18n: "min" is a keyword
@@ -37167,7 +38336,7 @@
 msgstr ""
 
 #. i18n: "obsfateoperations" is a keyword
-msgid "obsfateoperations expects one arguments"
+msgid "obsfateoperations expects one argument"
 msgstr "obsfateoperations espera um argumento"
 
 #. i18n: "obsfateoperations" is a keyword
@@ -37180,7 +38349,7 @@
 msgstr ""
 
 #. i18n: "obsfatedate" is a keyword
-msgid "obsfatedate expects one arguments"
+msgid "obsfatedate expects one argument"
 msgstr "obsfatedate espera um argumento"
 
 #. i18n: "obsfatedate" is a keyword
@@ -37193,7 +38362,7 @@
 msgstr ""
 
 #. i18n: "obsfateusers" is a keyword
-msgid "obsfateusers expects one arguments"
+msgid "obsfateusers expects one argument"
 msgstr "obsfateusers espera um argumento"
 
 #. i18n: "obsfateusers" is a keyword
@@ -37202,13 +38371,13 @@
 "o primeiro argumento de obsfateusers deve ser um iterável de obsmarkers"
 
 msgid ""
-":obsfateverb(successors): Compute obsfate related information based on "
-"successors (EXPERIMENTAL)"
+":obsfateverb(successors, markers): Compute obsfate related information based"
+" on successors (EXPERIMENTAL)"
 msgstr ""
 
 #. i18n: "obsfateverb" is a keyword
-msgid "obsfateverb expects one arguments"
-msgstr "obsfateverb espera um argumento"
+msgid "obsfateverb expects two arguments"
+msgstr "obsfateverb espera dois argumentos"
 
 #. i18n: "obsfateverb" is a keyword
 msgid "obsfateverb first argument should be countable"
@@ -37326,6 +38495,10 @@
 msgid "template alias"
 msgstr "apelido de modelo"
 
+#, python-format
+msgid "template resource not available: %s"
+msgstr "recurso de modelo não disponível: %s"
+
 msgid "no templates found, try `hg debuginstall` for more info"
 msgstr ""
 "nenhum modelo encontrado, tente `hg debuginstall` para mais informação"
@@ -37531,6 +38704,14 @@
 "diminuir"
 
 msgid ""
+"Compresion algorithm used to compress data. Some engine are faster than "
+"other"
+msgstr ""
+
+msgid "revlog content will be recompressed with the new algorithm."
+msgstr ""
+
+msgid ""
 "deltas within internal storage will be recalculated to choose an optimal "
 "base revision where this was not already done; the size of the repository "
 "may shrink and various operations may become faster; the first time this "
@@ -37591,6 +38772,19 @@
 "deltas no armazenamento interno serão completamente recalculados; isto "
 "provavelmente aumentará o tempo de execução drasticamente"
 
+msgid ""
+"every revision will be re-added as if it was new content. It will go through"
+" the full storage mechanism giving extensions a chance to process it (eg. "
+"lfs). This is similar to \"redeltaall\" but even slower since more logic is "
+"involved."
+msgstr ""
+
+msgid ""
+"each revision will be added as new content to the internal storage; this "
+"will likely drastically slow down execution time, but some extensions might "
+"need it"
+msgstr ""
+
 #, python-format
 msgid ""
 "migrating %d total revisions (%d in filelogs, %d in manifests, %d in "
@@ -38153,6 +39347,11 @@
 "        será o melhor motor disponível."
 
 #, python-format
+msgid "stream ended unexpectedly (got %d bytes, expected %d)"
+msgstr ""
+"dados recebidos terminaram inesperadamente (%d bytes obtidos, %d esperados)"
+
+#, python-format
 msgid "empty or missing %s"
 msgstr "%s vazio ou faltando"
 
@@ -38403,6 +39602,124 @@
 msgid "number of cpus must be an integer"
 msgstr "o número de cpus deve ser um inteiro"
 
+msgid "failed to kill worker threads while handling an exception\n"
+msgstr "falha ao matar threads trabalhadoras ao tratar uma exceção\n"
+
+#~ msgid "cannot uncommit while merging"
+#~ msgstr "não é possível desfazer a consolidação durante uma mesclagem"
+
+#~ msgid "cannot uncommit public changesets"
+#~ msgstr "não é possível desfazer a consolidação de revisões públicas"
+
+#~ msgid "changeset:   %s\n"
+#~ msgstr "revisão:       %s\n"
+
+#~ msgid "branch:      %s\n"
+#~ msgstr "ramo:          %s\n"
+
+#~ msgid "phase:       %s\n"
+#~ msgstr "fase:          %s\n"
+
+#~ msgid "parent:      %s\n"
+#~ msgstr "pai:           %s\n"
+
+#~ msgid "manifest:    %s\n"
+#~ msgstr "manifesto:     %s\n"
+
+#~ msgid "user:        %s\n"
+#~ msgstr "usuário:       %s\n"
+
+#~ msgid "date:        %s\n"
+#~ msgstr "data:          %s\n"
+
+#~ msgid "instability: %s\n"
+#~ msgstr "instabilidade: %s\n"
+
+#~ msgid "files:"
+#~ msgstr "arquivos:"
+
+#~ msgid "files+:"
+#~ msgstr "arquivos+:"
+
+#~ msgid "files-:"
+#~ msgstr "arquivos-:"
+
+#~ msgid "files:       %s\n"
+#~ msgstr "arquivos:      %s\n"
+
+#~ msgid "copies:      %s\n"
+#~ msgstr "cópias:        %s\n"
+
+#~ msgid "extra:       %s=%s\n"
+#~ msgstr "extra:         %s=%s\n"
+
+#~ msgid "summary:     %s\n"
+#~ msgstr "sumário:       %s\n"
+
+#~ msgid "obsolete:    %s\n"
+#~ msgstr "obsoleta:      %s\n"
+
+#~ msgid "cannot amend while merging"
+#~ msgstr "não é possível emendar durante uma mesclagem"
+
+#~ msgid ""
+#~ "    When REV is not given, print a summary of the current state of the\n"
+#~ "    repository."
+#~ msgstr ""
+#~ "    Se a revisão não for passada, imprime um sumário do estado atual\n"
+#~ "    do repositório."
+
+#~ msgid "Select hunks to revert"
+#~ msgstr "Selecione trechos para reverter"
+
+#~ msgid "[-l REV] [-r REV] [-b BRANCH]... [OTHER]"
+#~ msgstr "[-l REV] [-r REV] [-b RAMO]... [OUTRO]"
+
+#~ msgid ""
+#~ "Copying\n"
+#~ "\"\"\"\"\"\"\"\n"
+#~ "Copyright (C) 2005-2017 Matt Mackall.\n"
+#~ "Free use of this software is granted under the terms of the GNU General\n"
+#~ "Public License version 2 or any later version."
+#~ msgstr ""
+#~ "Cópia\n"
+#~ "\"\"\"\"\"\n"
+#~ "Copyright (C) 2005-2017 Matt Mackall.\n"
+#~ "Garante-se livre uso deste software nos termos da licença\n"
+#~ "GNU General Public License, versão 2 ou qualquer versão posterior."
+
+#~ msgid "bookmark:    %s\n"
+#~ msgstr "marcador:      %s\n"
+
+#~ msgid "tag:         %s\n"
+#~ msgstr "etiqueta:      %s\n"
+
+#~ msgid "revert change %d/%d to '%s'?"
+#~ msgstr "reverter mudança %d/%d em '%s'?"
+
+#~ msgid "revert this change to '%s'?"
+#~ msgstr "reverter esta mudança em '%s'?"
+
+#~ msgid ""
+#~ "[Ynesfdaq?]$$ &Yes, revert this change$$ &No, skip this change$$ &Edit this "
+#~ "change manually$$ &Skip remaining changes to this file$$ Revert remaining "
+#~ "changes to this &file$$ &Done, skip remaining changes and files$$ Revert "
+#~ "&all changes to all remaining files$$ &Quit, reverting no changes$$ &? "
+#~ "(display help)"
+#~ msgstr ""
+#~ "[Ynesfdaq?]$$ (&Y) sim, reverta esta mudança$$ &Não, desconsidere esta "
+#~ "mudança$$ &Edite esta mudança manualmente$$ De&Sconsidere as mudanças "
+#~ "restantes neste arquivo$$ (&F) reverta as mudanças restantes deste arquivo$$"
+#~ " Termina&Do, descarte as mudanças e arquivos restantes$$ Reverta tod&As as "
+#~ "mudanças de todos os arquivos restantes$$ (&Q) encerra, sem reverter nenhuma"
+#~ " mudança$$ &? (exibe a ajuda)"
+
+#~ msgid "%s takes no arguments or a pattern and an optional revset"
+#~ msgstr "%s requer nenhum argumento ou um padrão e um revset opcional"
+
+#~ msgid "%s expected one starting revision"
+#~ msgstr "%s espera uma revisão inicial"
+
 #~ msgid "not rebasing ignored %s\n"
 #~ msgstr "não rebaseando revisão ignorada %s\n"
 
@@ -39102,9 +40419,6 @@
 #~ msgid "%s, line %s: %s\n"
 #~ msgstr "%s, linha %s: %s\n"
 
-#~ msgid "cannot parse entry"
-#~ msgstr "não é possível decodificar entrada"
-
 #~ msgid "node '%s' is not well formed"
 #~ msgstr "nó '%s' não é bem formado"
 
@@ -39489,9 +40803,6 @@
 #~ msgid "The default is 'colorful'.\n"
 #~ msgstr "O padrão é 'colorful'.\n"
 
-#~ msgid "HG: user: %s"
-#~ msgstr "HG: usuário: %s"
-
 #~ msgid "broken pipe\n"
 #~ msgstr "pipe quebrado\n"
 
--- a/mercurial/bundle2.py	Sat Jan 20 22:55:42 2018 -0800
+++ b/mercurial/bundle2.py	Thu Feb 01 14:28:45 2018 -0500
@@ -2033,7 +2033,7 @@
             for book, node in changes:
                 hookargs = tr.hookargs.copy()
                 hookargs['pushkeycompat'] = '1'
-                hookargs['namespace'] = 'bookmark'
+                hookargs['namespace'] = 'bookmarks'
                 hookargs['key'] = book
                 hookargs['old'] = nodemod.hex(bookstore.get(book, ''))
                 hookargs['new'] = nodemod.hex(node if node is not None else '')
@@ -2143,7 +2143,7 @@
 @parthandler('stream2', ('requirements', 'filecount', 'bytecount'))
 def handlestreamv2bundle(op, part):
 
-    requirements = part.params['requirements'].split()
+    requirements = urlreq.unquote(part.params['requirements']).split(',')
     filecount = int(part.params['filecount'])
     bytecount = int(part.params['bytecount'])
 
@@ -2155,11 +2155,3 @@
     repo.ui.debug('applying stream bundle\n')
     streamclone.applybundlev2(repo, part, filecount, bytecount,
                               requirements)
-
-    # new requirements = old non-format requirements +
-    #                    new format-related remote requirements
-    # requirements from the streamed-in repository
-    repo.requirements = set(requirements) | (
-            repo.requirements - repo.supportedformats)
-    repo._applyopenerreqs()
-    repo._writerequirements()
--- a/mercurial/cext/manifest.c	Sat Jan 20 22:55:42 2018 -0800
+++ b/mercurial/cext/manifest.c	Thu Feb 01 14:28:45 2018 -0500
@@ -778,11 +778,11 @@
 		PyObject *outer;
 		/* If we're looking at a deleted entry and it's not
 		 * the end of the manifest, just skip it. */
-		if (left->deleted && sneedle < self->numlines) {
+		if (sneedle < self->numlines && left->deleted) {
 			sneedle++;
 			continue;
 		}
-		if (right->deleted && oneedle < other->numlines) {
+		if (oneedle < other->numlines && right->deleted) {
 			oneedle++;
 			continue;
 		}
--- a/mercurial/commands.py	Sat Jan 20 22:55:42 2018 -0800
+++ b/mercurial/commands.py	Thu Feb 01 14:28:45 2018 -0500
@@ -4560,7 +4560,7 @@
 
        To check out earlier revisions, you should use :hg:`update REV`.
        To cancel an uncommitted merge (and lose your changes),
-       use :hg:`update --clean .`.
+       use :hg:`merge --abort`.
 
     With no revision specified, revert the specified files or directories
     to the contents they had in the parent of the working directory.
@@ -5501,7 +5501,7 @@
          the working directory is updated to the requested changeset.
 
     To cancel an uncommitted merge (and lose your changes), use
-    :hg:`update --clean .`.
+    :hg:`merge --abort`.
 
     Use null as the changeset to remove the working directory (like
     :hg:`clone -U`).
--- a/mercurial/configitems.py	Sat Jan 20 22:55:42 2018 -0800
+++ b/mercurial/configitems.py	Thu Feb 01 14:28:45 2018 -0500
@@ -17,7 +17,7 @@
 
 def loadconfigtable(ui, extname, configtable):
     """update config item known to the ui with the extension ones"""
-    for section, items in configtable.items():
+    for section, items in sorted(configtable.items()):
         knownitems = ui._knownconfig.setdefault(section, itemregister())
         knownkeys = set(knownitems)
         newkeys = set(items)
--- a/mercurial/exchange.py	Sat Jan 20 22:55:42 2018 -0800
+++ b/mercurial/exchange.py	Thu Feb 01 14:28:45 2018 -0500
@@ -199,6 +199,14 @@
     else:
         raise error.Abort(_('%s: unknown bundle version %s') % (fname, version))
 
+def _formatrequirementsspec(requirements):
+    return urlreq.quote(','.join(sorted(requirements)))
+
+def _formatrequirementsparams(requirements):
+    requirements = _formatrequirementsspec(requirements)
+    params = "%s%s" % (urlreq.quote("requirements="), requirements)
+    return params
+
 def getbundlespec(ui, fh):
     """Infer the bundlespec from a bundle file handle.
 
@@ -247,8 +255,7 @@
         return '%s-%s' % (comp, version)
     elif isinstance(b, streamclone.streamcloneapplier):
         requirements = streamclone.readbundle1header(fh)[2]
-        params = 'requirements=%s' % ','.join(sorted(requirements))
-        return 'none-packed1;%s' % urlreq.quote(params)
+        return 'none-packed1;%s' % _formatrequirementsparams(requirements)
     else:
         raise error.Abort(_('unknown bundle type: %s') % b)
 
@@ -1786,7 +1793,7 @@
     bundler.prefercompressed = False
 
     filecount, bytecount, it = streamclone.generatev2(repo)
-    requirements = ' '.join(sorted(repo.requirements))
+    requirements = _formatrequirementsspec(repo.requirements)
     part = bundler.newpart('stream2', data=it)
     part.addparam('bytecount', '%d' % bytecount, mandatory=True)
     part.addparam('filecount', '%d' % filecount, mandatory=True)
--- a/mercurial/minifileset.py	Sat Jan 20 22:55:42 2018 -0800
+++ b/mercurial/minifileset.py	Thu Feb 01 14:28:45 2018 -0500
@@ -30,7 +30,7 @@
             pl = len(p)
             f = lambda n, s: n.startswith(p) and (len(n) == pl or n[pl] == '/')
             return f
-        raise error.ParseError(_("unsupported file pattern"),
+        raise error.ParseError(_("unsupported file pattern: %s") % name,
                                hint=_('paths must be prefixed with "path:"'))
     elif op == 'or':
         func1 = _compile(tree[1])
--- a/mercurial/revset.py	Sat Jan 20 22:55:42 2018 -0800
+++ b/mercurial/revset.py	Thu Feb 01 14:28:45 2018 -0500
@@ -1065,7 +1065,9 @@
             if rev is not None:
                 raise error.ParseError('_matchfiles expected at most one '
                                        'revision')
-            if value != '': # empty means working directory; leave rev as None
+            if value == '': # empty means working directory
+                rev = node.wdirrev
+            else:
                 rev = value
         elif prefix == 'd:':
             if default is not None:
@@ -1076,9 +1078,9 @@
             raise error.ParseError('invalid _matchfiles prefix: %s' % prefix)
     if not default:
         default = 'glob'
+    hasset = any(matchmod.patkind(p) == 'set' for p in pats + inc + exc)
 
-    m = matchmod.match(repo.root, repo.getcwd(), pats, include=inc,
-                       exclude=exc, ctx=repo[rev], default=default)
+    mcache = [None]
 
     # This directly read the changelog data as creating changectx for all
     # revisions is quite expensive.
@@ -1089,6 +1091,14 @@
             files = repo[x].files()
         else:
             files = getfiles(x)
+
+        if not mcache[0] or (hasset and rev is None):
+            r = x if rev is None else rev
+            mcache[0] = matchmod.match(repo.root, repo.getcwd(), pats,
+                                       include=inc, exclude=exc, ctx=repo[r],
+                                       default=default)
+        m = mcache[0]
+
         for f in files:
             if m(f):
                 return True
--- a/mercurial/streamclone.py	Sat Jan 20 22:55:42 2018 -0800
+++ b/mercurial/streamclone.py	Thu Feb 01 14:28:45 2018 -0500
@@ -484,7 +484,7 @@
 
     return vfsmap
 
-def _emit(repo, entries, totalfilesize):
+def _emit2(repo, entries, totalfilesize):
     """actually emit the stream bundle"""
     vfsmap = _makemap(repo)
     progress = repo.ui.progress
@@ -555,7 +555,7 @@
                 totalfilesize += repo.cachevfs.lstat(name).st_size
                 entries.append((_srccache, name, _filefull, None))
 
-        chunks = _emit(repo, entries, totalfilesize)
+        chunks = _emit2(repo, entries, totalfilesize)
         first = next(chunks)
         assert first is None
 
@@ -594,12 +594,12 @@
                     for vfs in vfsmap.values())
             with nested(*ctxs):
                 for i in range(filecount):
-                    src = fp.read(1)
+                    src = util.readexactly(fp, 1)
                     vfs = vfsmap[src]
                     namelen = util.uvarintdecodestream(fp)
                     datalen = util.uvarintdecodestream(fp)
 
-                    name = fp.read(namelen)
+                    name = util.readexactly(fp, namelen)
 
                     if repo.ui.debugflag:
                         repo.ui.debug('adding [%s] %s (%s)\n' %
@@ -632,3 +632,11 @@
                           ', '.join(sorted(missingreqs)))
 
     consumev2(repo, fp, filecount, filesize)
+
+    # new requirements = old non-format requirements +
+    #                    new format-related remote requirements
+    # requirements from the streamed-in repository
+    repo.requirements = set(requirements) | (
+            repo.requirements - repo.supportedformats)
+    repo._applyopenerreqs()
+    repo._writerequirements()
--- a/tests/common-pattern.py	Sat Jan 20 22:55:42 2018 -0800
+++ b/tests/common-pattern.py	Thu Feb 01 14:28:45 2018 -0500
@@ -8,6 +8,9 @@
     (br'(zstd,)?zlib,none,bzip2',
      br'$USUAL_COMPRESSIONS$'
     ),
+    (br'=(zstd,)?zlib',
+     br'=$BUNDLE2_COMPRESSIONS$'
+    ),
     # capabilities sent through http
     (br'bundlecaps=HG20%2Cbundle2%3DHG20%250A'
      br'bookmarks%250A'
--- a/tests/test-bookmarks-pushpull.t	Sat Jan 20 22:55:42 2018 -0800
+++ b/tests/test-bookmarks-pushpull.t	Thu Feb 01 14:28:45 2018 -0500
@@ -1173,3 +1173,76 @@
 
   $ hg -R ../issue4455-dest/ bookmarks
   no bookmarks set
+
+  $ cd ..
+
+Test that pre-pushkey compat for bookmark works as expected (issue5777)
+
+  $ cat << EOF >> $HGRCPATH
+  > [ui]
+  > ssh="$PYTHON" "$TESTDIR/dummyssh"
+  > [server]
+  > bookmarks-pushkey-compat = yes
+  > EOF
+
+  $ hg init server
+  $ echo foo > server/a
+  $ hg -R server book foo
+  $ hg -R server commit -Am a
+  adding a
+  $ hg clone ssh://user@dummy/server client
+  requesting all changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files
+  new changesets 79513d0d7716
+  updating to branch default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+Forbid bookmark move on the server
+
+  $ cat << EOF >> $TESTDIR/no-bm-move.sh
+  > #!/bin/sh
+  > echo \$HG_NAMESPACE | grep -v bookmarks
+  > EOF
+  $ cat << EOF >> server/.hg/hgrc
+  > [hooks]
+  > prepushkey.no-bm-move= sh $TESTDIR/no-bm-move.sh
+  > EOF
+
+pushing changeset is okay
+
+  $ echo bar >> client/a
+  $ hg -R client commit -m b
+  $ hg -R client push
+  pushing to ssh://user@dummy/server
+  searching for changes
+  remote: adding changesets
+  remote: adding manifests
+  remote: adding file changes
+  remote: added 1 changesets with 1 changes to 1 files
+
+attempt to move the bookmark is rejected
+
+  $ hg -R client book foo -r .
+  moving bookmark 'foo' forward from 79513d0d7716
+
+#if b2-pushkey
+  $ hg -R client push
+  pushing to ssh://user@dummy/server
+  searching for changes
+  no changes found
+  remote: pushkey-abort: prepushkey.no-bm-move hook exited with status 1
+  abort: updating bookmark foo failed!
+  [255]
+#endif
+#if b2-binary
+  $ hg -R client push
+  pushing to ssh://user@dummy/server
+  searching for changes
+  no changes found
+  remote: prepushkey.no-bm-move hook exited with status 1
+  abort: push failed on remote
+  [255]
+#endif
--- a/tests/test-bundle2-exchange.t	Sat Jan 20 22:55:42 2018 -0800
+++ b/tests/test-bundle2-exchange.t	Thu Feb 01 14:28:45 2018 -0500
@@ -253,7 +253,7 @@
   remote: added 1 changesets with 0 changes to 0 files (-1 heads)
   remote: 1 new obsolescence markers
   remote: pre-close-tip:eea13746799a public book_eea1
-  remote: pushkey: lock state after "bookmark"
+  remote: pushkey: lock state after "bookmarks"
   remote: lock:  free
   remote: wlock: free
   remote: postclose-tip:eea13746799a public book_eea1
@@ -339,7 +339,7 @@
   remote: added 1 changesets with 1 changes to 1 files
   remote: 1 new obsolescence markers
   remote: pre-close-tip:5fddd98957c8 draft book_5fdd
-  remote: pushkey: lock state after "bookmark"
+  remote: pushkey: lock state after "bookmarks"
   remote: lock:  free
   remote: wlock: free
   remote: postclose-tip:5fddd98957c8 draft book_5fdd
@@ -390,7 +390,7 @@
   remote: added 1 changesets with 1 changes to 1 files
   remote: 1 new obsolescence markers
   remote: pre-close-tip:32af7686d403 public book_32af
-  remote: pushkey: lock state after "bookmark"
+  remote: pushkey: lock state after "bookmarks"
   remote: lock:  free
   remote: wlock: free
   remote: postclose-tip:32af7686d403 public book_32af
--- a/tests/test-clone-uncompressed.t	Sat Jan 20 22:55:42 2018 -0800
+++ b/tests/test-clone-uncompressed.t	Thu Feb 01 14:28:45 2018 -0500
@@ -39,7 +39,7 @@
     branchmap
     $USUAL_BUNDLE2_CAPS_SERVER$
     changegroupsubset
-    compression=zstd,zlib
+    compression=$BUNDLE2_COMPRESSIONS$
     getbundle
     httpheader=1024
     httpmediatype=0.1rx,0.1tx,0.2tx
@@ -104,7 +104,7 @@
     branchmap
     $USUAL_BUNDLE2_CAPS_SERVER$
     changegroupsubset
-    compression=zstd,zlib
+    compression=$BUNDLE2_COMPRESSIONS$
     getbundle
     httpheader=1024
     httpmediatype=0.1rx,0.1tx,0.2tx
@@ -199,23 +199,23 @@
   
 
   $ f --size --hex --bytes 256 body
-  body: size=112222
+  body: size=112230
   0000: 04 6e 6f 6e 65 48 47 32 30 00 00 00 00 00 00 00 |.noneHG20.......|
-  0010: 68 07 53 54 52 45 41 4d 32 00 00 00 00 03 00 09 |h.STREAM2.......|
-  0020: 05 09 04 0c 2d 62 79 74 65 63 6f 75 6e 74 39 38 |....-bytecount98|
+  0010: 70 07 53 54 52 45 41 4d 32 00 00 00 00 03 00 09 |p.STREAM2.......|
+  0020: 05 09 04 0c 35 62 79 74 65 63 6f 75 6e 74 39 38 |....5bytecount98|
   0030: 37 35 38 66 69 6c 65 63 6f 75 6e 74 31 30 33 30 |758filecount1030|
   0040: 72 65 71 75 69 72 65 6d 65 6e 74 73 64 6f 74 65 |requirementsdote|
-  0050: 6e 63 6f 64 65 20 66 6e 63 61 63 68 65 20 67 65 |ncode fncache ge|
-  0060: 6e 65 72 61 6c 64 65 6c 74 61 20 72 65 76 6c 6f |neraldelta revlo|
-  0070: 67 76 31 20 73 74 6f 72 65 00 00 80 00 73 08 42 |gv1 store....s.B|
-  0080: 64 61 74 61 2f 30 2e 69 00 03 00 01 00 00 00 00 |data/0.i........|
-  0090: 00 00 00 02 00 00 00 01 00 00 00 00 00 00 00 01 |................|
-  00a0: ff ff ff ff ff ff ff ff 80 29 63 a0 49 d3 23 87 |.........)c.I.#.|
-  00b0: bf ce fe 56 67 92 67 2c 69 d1 ec 39 00 00 00 00 |...Vg.g,i..9....|
-  00c0: 00 00 00 00 00 00 00 00 75 30 73 08 42 64 61 74 |........u0s.Bdat|
-  00d0: 61 2f 31 2e 69 00 03 00 01 00 00 00 00 00 00 00 |a/1.i...........|
-  00e0: 02 00 00 00 01 00 00 00 00 00 00 00 01 ff ff ff |................|
-  00f0: ff ff ff ff ff f9 76 da 1d 0d f2 25 6c de 08 db |......v....%l...|
+  0050: 6e 63 6f 64 65 25 32 43 66 6e 63 61 63 68 65 25 |ncode%2Cfncache%|
+  0060: 32 43 67 65 6e 65 72 61 6c 64 65 6c 74 61 25 32 |2Cgeneraldelta%2|
+  0070: 43 72 65 76 6c 6f 67 76 31 25 32 43 73 74 6f 72 |Crevlogv1%2Cstor|
+  0080: 65 00 00 80 00 73 08 42 64 61 74 61 2f 30 2e 69 |e....s.Bdata/0.i|
+  0090: 00 03 00 01 00 00 00 00 00 00 00 02 00 00 00 01 |................|
+  00a0: 00 00 00 00 00 00 00 01 ff ff ff ff ff ff ff ff |................|
+  00b0: 80 29 63 a0 49 d3 23 87 bf ce fe 56 67 92 67 2c |.)c.I.#....Vg.g,|
+  00c0: 69 d1 ec 39 00 00 00 00 00 00 00 00 00 00 00 00 |i..9............|
+  00d0: 75 30 73 08 42 64 61 74 61 2f 31 2e 69 00 03 00 |u0s.Bdata/1.i...|
+  00e0: 01 00 00 00 00 00 00 00 02 00 00 00 01 00 00 00 |................|
+  00f0: 00 00 00 00 01 ff ff ff ff ff ff ff ff f9 76 da |..............v.|
 
 --uncompressed is an alias to --stream
 
@@ -479,6 +479,10 @@
   $ cat hg.pid > $DAEMON_PIDS
 
 #if stream-legacy
+
+With v1 of the stream protocol, changeset are always cloned as public. It make
+stream v1 unsuitable for non-publishing repository.
+
   $ hg clone --stream http://localhost:$HGPORT phase-no-publish
   streaming all changes
   1027 files to transfer, 96.3 KB of data
--- a/tests/test-glog.t	Sat Jan 20 22:55:42 2018 -0800
+++ b/tests/test-glog.t	Thu Feb 01 14:28:45 2018 -0500
@@ -1675,7 +1675,7 @@
       (string 'p:c')))
   <filteredset
     <spanset- 0:5>,
-    <matchfiles patterns=['a', 'c'], include=[] exclude=[], default='relpath', rev=None>>
+    <matchfiles patterns=['a', 'c'], include=[] exclude=[], default='relpath', rev=2147483647>>
 
 Test multiple --include/--exclude/paths
 
@@ -1694,7 +1694,7 @@
       (string 'x:e')))
   <filteredset
     <spanset- 0:5>,
-    <matchfiles patterns=['a', 'e'], include=['a', 'e'] exclude=['b', 'e'], default='relpath', rev=None>>
+    <matchfiles patterns=['a', 'e'], include=['a', 'e'] exclude=['b', 'e'], default='relpath', rev=2147483647>>
 
 Test glob expansion of pats
 
@@ -1732,7 +1732,7 @@
       (string 'p:dir')))
   <filteredset
     <generatorsetdesc->,
-    <matchfiles patterns=['dir'], include=[] exclude=[], default='relpath', rev=None>>
+    <matchfiles patterns=['dir'], include=[] exclude=[], default='relpath', rev=2147483647>>
   $ hg up -q tip
 
 Test --follow on file not in parent revision
@@ -1754,7 +1754,7 @@
       (string 'p:glob:*')))
   <filteredset
     <generatorsetdesc->,
-    <matchfiles patterns=['glob:*'], include=[] exclude=[], default='relpath', rev=None>>
+    <matchfiles patterns=['glob:*'], include=[] exclude=[], default='relpath', rev=2147483647>>
 
 Test --follow on a single rename
 
@@ -1875,7 +1875,7 @@
       (string 'p:set:copied()')))
   <filteredset
     <spanset- 0:7>,
-    <matchfiles patterns=['set:copied()'], include=[] exclude=[], default='relpath', rev=None>>
+    <matchfiles patterns=['set:copied()'], include=[] exclude=[], default='relpath', rev=2147483647>>
   $ testlog --include "set:copied()"
   []
   (func
@@ -1886,11 +1886,13 @@
       (string 'i:set:copied()')))
   <filteredset
     <spanset- 0:7>,
-    <matchfiles patterns=[], include=['set:copied()'] exclude=[], default='relpath', rev=None>>
+    <matchfiles patterns=[], include=['set:copied()'] exclude=[], default='relpath', rev=2147483647>>
   $ testlog -r "sort(file('set:copied()'), -rev)"
   ["sort(file('set:copied()'), -rev)"]
   []
-  <baseset []>
+  <filteredset
+    <fullreposet- 0:7>,
+    <matchfiles patterns=['set:copied()'], include=[] exclude=[], default='glob', rev=None>>
 
 Test --removed
 
@@ -1908,7 +1910,7 @@
       (string 'p:a')))
   <filteredset
     <spanset- 0:7>,
-    <matchfiles patterns=['a'], include=[] exclude=[], default='relpath', rev=None>>
+    <matchfiles patterns=['a'], include=[] exclude=[], default='relpath', rev=2147483647>>
   $ testlog --removed --follow a
   []
   (func
@@ -1919,7 +1921,7 @@
       (string 'p:a')))
   <filteredset
     <generatorsetdesc->,
-    <matchfiles patterns=['a'], include=[] exclude=[], default='relpath', rev=None>>
+    <matchfiles patterns=['a'], include=[] exclude=[], default='relpath', rev=2147483647>>
 
 Test --patch and --stat with --follow and --follow-first
 
@@ -2290,7 +2292,7 @@
       (string 'p:.')))
   <filteredset
     <spanset- 0:9>,
-    <matchfiles patterns=['.'], include=[] exclude=[], default='relpath', rev=None>>
+    <matchfiles patterns=['.'], include=[] exclude=[], default='relpath', rev=2147483647>>
   $ testlog ../b
   []
   (func
--- a/tests/test-hgweb-commands.t	Sat Jan 20 22:55:42 2018 -0800
+++ b/tests/test-hgweb-commands.t	Thu Feb 01 14:28:45 2018 -0500
@@ -1914,7 +1914,7 @@
   $ get-with-headers.py $LOCALIP:$HGPORT '?cmd=capabilities'; echo
   200 Script output follows
   
-  lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx compression=*zlib (glob)
+  lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 httpmediatype=0.1rx,0.1tx,0.2tx compression=$BUNDLE2_COMPRESSIONS$
 
 heads
 
@@ -2140,7 +2140,7 @@
   unbundle=HG10GZ,HG10BZ,HG10UN
   httpheader=1024
   httpmediatype=0.1rx,0.1tx,0.2tx
-  compression=*zlib (glob)
+  compression=$BUNDLE2_COMPRESSIONS$
 
 heads
 
--- a/tests/test-hook.t	Sat Jan 20 22:55:42 2018 -0800
+++ b/tests/test-hook.t	Thu Feb 01 14:28:45 2018 -0500
@@ -244,7 +244,7 @@
   no changes found
   pretxnopen hook: HG_HOOKNAME=pretxnopen HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=push
   pretxnclose hook: HG_BOOKMARK_MOVED=1 HG_BUNDLE2=1 HG_HOOKNAME=pretxnclose HG_HOOKTYPE=pretxnclose HG_PENDING=$TESTTMP/a HG_SOURCE=push HG_TXNID=TXN:$ID$ HG_TXNNAME=push HG_URL=file:$TESTTMP/a
-  pushkey hook: HG_BUNDLE2=1 HG_HOOKNAME=pushkey HG_HOOKTYPE=pushkey HG_KEY=foo HG_NAMESPACE=bookmark HG_NEW=0000000000000000000000000000000000000000 HG_PUSHKEYCOMPAT=1 HG_SOURCE=push HG_TXNID=TXN:$ID$ HG_URL=file:$TESTTMP/a
+  pushkey hook: HG_BUNDLE2=1 HG_HOOKNAME=pushkey HG_HOOKTYPE=pushkey HG_KEY=foo HG_NAMESPACE=bookmarks HG_NEW=0000000000000000000000000000000000000000 HG_PUSHKEYCOMPAT=1 HG_SOURCE=push HG_TXNID=TXN:$ID$ HG_URL=file:$TESTTMP/a
   txnclose hook: HG_BOOKMARK_MOVED=1 HG_BUNDLE2=1 HG_HOOKNAME=txnclose HG_HOOKTYPE=txnclose HG_SOURCE=push HG_TXNID=TXN:$ID$ HG_TXNNAME=push HG_URL=file:$TESTTMP/a
   exporting bookmark foo
   [1]
@@ -281,7 +281,7 @@
   listkeys hook: HG_HOOKNAME=listkeys HG_HOOKTYPE=listkeys HG_NAMESPACE=bookmarks HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'}
   no changes found
   pretxnopen hook: HG_HOOKNAME=pretxnopen HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=push
-  prepushkey.forbid hook: HG_BUNDLE2=1 HG_HOOKNAME=prepushkey HG_HOOKTYPE=prepushkey HG_KEY=baz HG_NAMESPACE=bookmark HG_NEW=0000000000000000000000000000000000000000 HG_PUSHKEYCOMPAT=1 HG_SOURCE=push HG_TXNID=TXN:$ID$ HG_URL=file:$TESTTMP/a
+  prepushkey.forbid hook: HG_BUNDLE2=1 HG_HOOKNAME=prepushkey HG_HOOKTYPE=prepushkey HG_KEY=baz HG_NAMESPACE=bookmarks HG_NEW=0000000000000000000000000000000000000000 HG_PUSHKEYCOMPAT=1 HG_SOURCE=push HG_TXNID=TXN:$ID$ HG_URL=file:$TESTTMP/a
   abort: prepushkey hook exited with status 1
   [255]
   $ cd ../a
--- a/tests/test-largefiles-update.t	Sat Jan 20 22:55:42 2018 -0800
+++ b/tests/test-largefiles-update.t	Thu Feb 01 14:28:45 2018 -0500
@@ -726,6 +726,20 @@
 
 #endif
 
+The fileset revset is evaluated for each revision, instead of once on wdir(),
+and then patterns matched on each revision.  Here, no exec bits are set in
+wdir(), but a matching revision is detected.
+
+(Teach large2 is not an executable. Maybe this is a bug of largefiles.)
+#if execbit
+  $ chmod -x .hglf/large2
+#endif
+
+  $ hg files 'set:exec()'
+  [1]
+  $ hg log -qr 'file("set:exec()")'
+  9:be1b433a65b1
+
 Test a fatal error interrupting an update. Verify that status report dirty
 files correctly after an interrupted update. Also verify that checking all
 hashes reveals it isn't clean.
--- a/tests/test-lfs.t	Sat Jan 20 22:55:42 2018 -0800
+++ b/tests/test-lfs.t	Thu Feb 01 14:28:45 2018 -0500
@@ -18,9 +18,11 @@
 # Commit small file
   $ echo s > smallfile
   $ echo '**.py = LF' > .hgeol
-  $ hg --config lfs.track='size(">1000B") | "path:.hgeol"' commit -Aqm "add small file"
-  $ hg debugdata .hgeol 0
-  **.py = LF
+  $ hg --config lfs.track='"size(\">1000B\")"' commit -Aqm "add small file"
+  hg: parse error: unsupported file pattern: size(">1000B")
+  (paths must be prefixed with "path:")
+  [255]
+  $ hg --config lfs.track='size(">1000B")' commit -Aqm "add small file"
 
 # Commit large file
   $ echo $LONG > largefile
@@ -865,19 +867,19 @@
   oid sha256:5bb8341bee63b3649f222b2215bde37322bea075a30575aa685d8f8d21c77024
   size 29
   x-is-binary 0
-  $ hg --cwd convert_lfs log -r 0 -T "{lfs_files % '{pointer % '{key}={value}\n'}'}"
+  $ hg --cwd convert_lfs log -r 0 -T "{lfs_files % '{lfspointer % '{key}={value}\n'}'}"
   version=https://git-lfs.github.com/spec/v1
   oid=sha256:5bb8341bee63b3649f222b2215bde37322bea075a30575aa685d8f8d21c77024
   size=29
   x-is-binary=0
   $ hg --cwd convert_lfs log -r 0 \
-  >    -T '{lfs_files % "{get(pointer, "oid")}\n"}{lfs_files % "{pointer.oid}\n"}'
+  >    -T '{lfs_files % "{get(lfspointer, "oid")}\n"}{lfs_files % "{lfspointer.oid}\n"}'
   sha256:5bb8341bee63b3649f222b2215bde37322bea075a30575aa685d8f8d21c77024
   sha256:5bb8341bee63b3649f222b2215bde37322bea075a30575aa685d8f8d21c77024
-  $ hg --cwd convert_lfs log -r 0 -T '{lfs_files % "{pointer}\n"}'
+  $ hg --cwd convert_lfs log -r 0 -T '{lfs_files % "{lfspointer}\n"}'
   version=https://git-lfs.github.com/spec/v1 oid=sha256:5bb8341bee63b3649f222b2215bde37322bea075a30575aa685d8f8d21c77024 size=29 x-is-binary=0
   $ hg --cwd convert_lfs \
-  >     log -r 'all()' -T '{rev}: {lfs_files % "{file}: {oid}\n"}'
+  >     log -r 'all()' -T '{rev}: {lfs_files % "{file}: {lfsoid}\n"}'
   0: a1: 5bb8341bee63b3649f222b2215bde37322bea075a30575aa685d8f8d21c77024
   1: a2: 5bb8341bee63b3649f222b2215bde37322bea075a30575aa685d8f8d21c77024
   2: a2: 876dadc86a8542f9798048f2c47f51dbf8e4359aed883e8ec80c5db825f0d943
@@ -976,50 +978,42 @@
 
   $ cat > .hglfs << EOF
   > [track]
+  > path:.hglfs = none()
   > **.test = size(">5B")
   > **.exclude = none()
   > ** = size(">10B")
   > EOF
 
-The LFS policy takes effect as the .hglfs file is committed
+The LFS policy takes effect without tracking the .hglfs file
 
   $ echo 'largefile' > lfs.test
   $ echo '012345678901234567890' > nolfs.exclude
   $ echo '01234567890123456' > lfs.catchall
-  $ hg ci -Aqm 'added .hglfs'
-  $ hg log -r . -T '{rev}: {lfs_files % "{file}: {oid}\n"}\n'
+  $ hg add *
+  $ hg ci -qm 'before add .hglfs'
+  $ hg log -r . -T '{rev}: {lfs_files % "{file}: {lfsoid}\n"}\n'
   2: lfs.catchall: d4ec46c2869ba22eceb42a729377432052d9dd75d82fc40390ebaadecee87ee9
   lfs.test: 5489e6ced8c36a7b267292bde9fd5242a5f80a7482e8f23fa0477393dfaa4d6c
   
-The existing .hglfs file is used even when it is not in the 'A' or 'M' states
+The .hglfs file works when tracked
 
   $ echo 'largefile2' > lfs.test
   $ echo '012345678901234567890a' > nolfs.exclude
   $ echo '01234567890123456a' > lfs.catchall
-  $ hg ci -qm 'unmodified .hglfs'
-  $ hg log -r . -T '{rev}: {lfs_files % "{file}: {oid}\n"}\n'
+  $ hg ci -Aqm 'after adding .hglfs'
+  $ hg log -r . -T '{rev}: {lfs_files % "{file}: {lfsoid}\n"}\n'
   3: lfs.catchall: 31f43b9c62b540126b0ad5884dc013d21a61c9329b77de1fceeae2fc58511573
   lfs.test: 8acd23467967bc7b8cc5a280056589b0ba0b17ff21dbd88a7b6474d6290378a6
   
-Excluding the .hglfs file from the commit postpones the policy change
+The LFS policy stops when the .hglfs is gone
 
   $ hg rm .hglfs
   $ echo 'largefile3' > lfs.test
   $ echo '012345678901234567890abc' > nolfs.exclude
   $ echo '01234567890123456abc' > lfs.catchall
   $ hg ci -qm 'file test' -X .hglfs
-  $ hg log -r . -T '{rev}: {lfs_files % "{file}: {oid}\n"}\n'
-  4: lfs.catchall: 6747cfb1b83965b4a884e7a6061813ae31e4122028bc6a88d2ac5e5f9e05c5af
-  lfs.test: 3f40b70c2294e91e0fa789ebcf73c5a1d1c7aef270f83e477e40cb0513237e8c
-  
-The policy change takes effect when the .hglfs is committed
-
-  $ echo 'largefile4' > lfs.test
-  $ echo '012345678901234567890abcdef' > nolfs.exclude
-  $ echo '01234567890123456abcdef' > lfs.catchall
-  $ hg ci -qm 'file test'
-  $ hg log -r . -T '{rev}: {lfs_files % "{file}: {oid}\n"}\n'
-  5: 
+  $ hg log -r . -T '{rev}: {lfs_files % "{file}: {lfsoid}\n"}\n'
+  4: 
 
   $ cd ..