changeset 23990:a8dc5a3f4f4c

merge with stable
author Matt Mackall <mpm@selenic.com>
date Mon, 02 Feb 2015 12:50:48 -0600
parents 3cbb5bf4035d (current diff) 3667bc21b877 (diff)
children 07c1a7d1ef69
files
diffstat 60 files changed, 1874 insertions(+), 569 deletions(-) [+]
line wrap: on
line diff
--- a/.hgsigs	Sat Jan 17 22:01:14 2015 -0200
+++ b/.hgsigs	Mon Feb 02 12:50:48 2015 -0600
@@ -100,3 +100,5 @@
 902554884335e5ca3661d63be9978eb4aec3f68a 0 iQIVAwUAVH0KMyBXgaxoKi1yAQLUKxAAjgyYpmqD0Ji5OQ3995yX0dmwHOaaSuYpq71VUsOMYBskjH4xE2UgcTrX8RWUf0E+Ya91Nw3veTf+IZlYLaWuOYuJPRzw+zD1sVY8xprwqBOXNaA7n8SsTqZPSh6qgw4S0pUm0xJUOZzUP1l9S7BtIdJP7KwZ7hs9YZev4r9M3G15xOIPn5qJqBAtIeE6f5+ezoyOpSPZFtLFc4qKQ/YWzOT5uuSaYogXgVByXRFaO84+1TD93LR0PyVWxhwU9JrDU5d7P/bUTW1BXdjsxTbBnigWswKHC71EHpgz/HCYxivVL30qNdOm4Fow1Ec2GdUzGunSqTPrq18ScZDYW1x87f3JuqPM+ce/lxRWBBqP1yE30/8l/Us67m6enWXdGER8aL1lYTGOIWAhvJpfzv9KebaUq1gMFLo6j+OfwR3rYPiCHgi20nTNBa+LOceWFjCGzFa3T9UQWHW/MBElfAxK65uecbGRRYY9V1/+wxtTUiS6ixpmzL8S7uUd5n6oMaeeMiD82NLgPIbMyUHQv6eFEcCj0U9NT2uKbFRmclMs5V+8D+RTCsLJ55R9PD5OoRw/6K/coqqPShYmJvgYsFQPzXVpQdCRae31xdfGFmd5KUetqyrT+4GUdJWzSm0giSgovpEJNxXglrvNdvSO7fX3R1oahhwOwtGqMwNilcK+iDw=
 6dad422ecc5adb63d9fa649eeb8e05a5f9bc4900 0 iQIVAwUAVJNALCBXgaxoKi1yAQKgmw/+OFbHHOMmN2zs2lI2Y0SoMALPNQBInMBq2E6RMCMbfcS9Cn75iD29DnvBwAYNWaWsYEGyheJ7JjGBiuNKPOrLaHkdjG+5ypbhAfNDyHDiteMsXfH7D1L+cTOAB8yvhimZHOTTVF0zb/uRyVIPNowAyervUVRjDptzdfcvjUS+X+/Ufgwms6Y4CcuzFLFCxpmryJhLtOpwUPLlzIqeNkFOYWkHanCgtZX03PNIWhorH3AWOc9yztwWPQ+kcKl3FMlyuNMPhS/ElxSF6GHGtreRbtP+ZLoSIOMb2QBKpGDpZLgJ3JQEHDcZ0h5CLZWL9dDUJR3M8pg1qglqMFSWMgRPTzxPS4QntPgT/Ewd3+U5oCZUh052fG41OeCZ0CnVCpqi5PjUIDhzQkONxRCN2zbjQ2GZY7glbXoqytissihEIVP9m7RmBVq1rbjOKr+yUetJ9gOZcsMtZiCEq4Uj2cbA1x32MQv7rxwAgQP1kgQ62b0sN08HTjQpI7/IkNALLIDHoQWWr45H97i34qK1dd5uCOnYk7juvhGNX5XispxNnC01/CUVNnqChfDHpgnDjgT+1H618LiTgUAD3zo4IVAhCqF5XWsS4pQEENOB3Msffi62fYowvJx7f/htWeRLZ2OA+B85hhDiD4QBdHCRoz3spVp0asNqDxX4f4ndj8RlzfM=
 1265a3a71d75396f5d4cf6935ae7d9ba5407a547 0 iQIVAwUAVKXKYCBXgaxoKi1yAQIfsA/+PFfaWuZ6Jna12Y3MpKMnBCXYLWEJgMNlWHWzwU8lD26SKSlvMyHQsVZlkld2JmFugUCn1OV3OA4YWT6BA7VALq6Zsdcu5Dc8LRbyajBUkzGRpOUyWuFzjkCpGVbrQzbCR/bel/BBXzSqL4ipdtWgJ4y+WpZIhWkNXclBkR52b5hUTjN9vzhyhVVI7eURGwIEf7vVs1fDOcEGtaGY/ynzMTzyxIDsEEygCZau86wpKlYlqhCgxKDyzyGfpH3B1UlNGFt1afW8AWe1eHjdqC7TJZpMqmQ/Ju8vco8Xht6OXw4ZLHj7y39lpccfKTBLiK/cAKSg+xgyaH/BLhzoEkNAwYSFAB4i4IoV0KUC8nFxHfsoswBxJnMqU751ziMrpZ/XHZ1xQoEOdXgz2I04vlRn8xtynOVhcgjoAXwtbia7oNh/qCH/hl5/CdAtaawuCxJBf237F+cwur4PMAAvsGefRfZco/DInpr3qegr8rwInTxlO48ZG+o5xA4TPwT0QQTUjMdNfC146ZSbp65wG7VxJDocMZ8KJN/lqPaOvX+FVYWq4YnJhlldiV9DGgmym1AAaP0D3te2GcfHXpt/f6NYUPpgiBHy0GnOlNcQyGnnONg1A6oKVWB3k7WP28+PQbQEiCIFk2nkf5VZmye7OdHRGKOFfuprYFP1WwTWnVoNX9c=
+db8e3f7948b1fdeb9ad12d448fc3525759908b9f 0 iQIVAwUAVLsaciBXgaxoKi1yAQKMIA//a90/GvySL9UID+iYvzV2oDaAPDD0T+4Xs43I7DT5NIoDz+3yq2VV54XevQe5lYiURmsb/Q9nX2VR/Qq1J9c/R6Gy+CIfmJ3HzMZ0aAX8ZlZgQPYZKh/2kY5Ojl++k6MTqbqcrICNs4+UE/4IAxPyOfu5gy7TpdJmRZo2J3lWVC2Jbhd02Mzb+tjtfbOM+QcQxPwt9PpqmQszJceyVYOSm3jvD1uJdSOC04tBQrQwrxktQ09Om0LUMMaB5zFXpJtqUzfw7l4U4AaddEmkd3vUfLtHxc21RB01c3cpe2dJnjifDfwseLsI8rS4jmi/91c74TeBatSOhvbqzEkm/p8xZFXE4Uh+EpWjTsVqmfQaRq6NfNCR7I/kvGv8Ps6w8mg8uX8fd8lx+GJbodj+Uy0X3oqHyqPMky/df5i79zADBDuz+yuxFfDD9i22DJPIYcilfGgwpIUuO2lER5nSMVmReuWTVBnT6SEN66Q4KR8zLtIRr+t1qUUCy6wYbgwrdHVCbgMF8RPOVZPjbs17RIqcHjch0Xc7bShKGhQg4WHDjXHK61w4tOa1Yp7jT6COkl01XC9BLcGxJYKFvNCbeDZQGvVgJNoEvHxBxD9rGMVRjfuxeJawc2fGzZJn0ySyLDW0pfd4EJNgTh9bLdPjWz2VlXqn4A6bgaLgTPqjmN0VBXw=
+fbdd5195528fae4f41feebc1838215c110b25d6a 0 iQIVAwUAVM7fBCBXgaxoKi1yAQKoYw/+LeIGcjQmHIVFQULsiBtPDf+eGAADQoP3mKBy+eX/3Fa0qqUNfES2Q3Y6RRApyZ1maPRMt8BvvhZMgQsu9QIrmf3zsFxZGFwoyrIj4hM3xvAbEZXqmWiR85/Ywd4ImeLaZ0c7mkO1/HGF1n2Mv47bfM4hhNe7VGJSSrTY4srFHDfk4IG9f18DukJVzRD9/dZeBw6eUN1ukuLEgQAD5Sl47bUdKSetglOSR1PjXfZ1hjtz5ywUyBc5P9p3LC4wSvlcJKl22zEvB3L0hkoDcPsdIPEnJAeXxKlR1rQpoA3fEgrstGiSNUW/9Tj0VekAHLO95SExmQyoG/AhbjRRzIj4uQ0aevCJyiAhkv+ffOSf99PMW9L1k3tVjLhpMWEz9BOAWyX7cDFWj5t/iktI046O9HGN9SGVx18e9xM6pEgRcLA2TyjEmtkA4jX0JeN7WeCweMLiSxyGP7pSPSJdpJeXaFtRpSF62p/G0Z5wN9s05LHqDyqNVtCvg4WjkuV5LZSdLbMcYBWGBxQzCG6qowXFXIawmbaFiBZwTfOgNls9ndz5RGupAaxY317prxPFv/pXoesc1P8bdK09ZvjhbmmD66Q/BmS2dOMQ8rXRjuVdlR8j2QBtFZxekMcRD02nBAVnwHg1VWQMIRaGjdgmW4wOkirWVn7me177FnBxrxW1tG4=
--- a/.hgtags	Sat Jan 17 22:01:14 2015 -0200
+++ b/.hgtags	Mon Feb 02 12:50:48 2015 -0600
@@ -113,3 +113,5 @@
 902554884335e5ca3661d63be9978eb4aec3f68a 3.2.2
 6dad422ecc5adb63d9fa649eeb8e05a5f9bc4900 3.2.3
 1265a3a71d75396f5d4cf6935ae7d9ba5407a547 3.2.4
+db8e3f7948b1fdeb9ad12d448fc3525759908b9f 3.3-rc
+fbdd5195528fae4f41feebc1838215c110b25d6a 3.3
--- a/Makefile	Sat Jan 17 22:01:14 2015 -0200
+++ b/Makefile	Mon Feb 02 12:50:48 2015 -0600
@@ -136,10 +136,11 @@
 # Packaging targets
 
 osx:
-	@which bdist_mpkg >/dev/null || \
+	python -c 'import bdist_mpkg.script_bdist_mpkg' || \
 	   (echo "Missing bdist_mpkg (easy_install bdist_mpkg)"; false)
 	rm -rf dist/mercurial-*.mpkg
-	bdist_mpkg setup.py
+	python -m bdist_mpkg.script_bdist_mpkg setup.py --
+	python contrib/fixpax.py dist/mercurial-*.mpkg/Contents/Packages/*.pkg/Contents/Archive.pax.gz
 	mkdir -p packages/osx
 	N=`cd dist && echo mercurial-*.mpkg | sed 's,\.mpkg$$,,'` && hdiutil create -srcfolder dist/$$N.mpkg/ -scrub -volname "$$N" -ov packages/osx/$$N.dmg
 	rm -rf dist/mercurial-*.mpkg
--- a/contrib/check-code.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/contrib/check-code.py	Mon Feb 02 12:50:48 2015 -0600
@@ -159,7 +159,7 @@
      winglobmsg),
     (r'^  pulling from \$TESTTMP/.*[^)]$', winglobmsg,
      '\$TESTTMP/unix-repo$'), # in test-issue1802.t which skipped on windows
-    (r'^  reverting .*/.*[^)]$', winglobmsg),
+    (r'^  reverting (?!subrepo ).*/.*[^)]$', winglobmsg),
     (r'^  cloning subrepo \S+/.*[^)]$', winglobmsg),
     (r'^  pushing to \$TESTTMP/.*[^)]$', winglobmsg),
     (r'^  pushing subrepo \S+/\S+ to.*[^)]$', winglobmsg),
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/fixpax.py	Mon Feb 02 12:50:48 2015 -0600
@@ -0,0 +1,60 @@
+# fixpax - fix ownership in bdist_mpkg output
+#
+# Copyright 2015 Matt Mackall <mpm@selenic.com>
+#
+# This software may be used and distributed according to the terms of the
+# MIT license (http://opensource.org/licenses/MIT)
+
+"""Set file ownership to 0 in an Archive.pax.gz.
+Suitable for fixing files bdist_mpkg output:
+*.mpkg/Contents/Packages/*.pkg/Contents/Archive.pax.gz
+"""
+
+import sys, os, gzip
+
+def fixpax(iname, oname):
+    i = gzip.GzipFile(iname)
+    o = gzip.GzipFile(oname, "w")
+
+    while True:
+        magic = i.read(6)
+        dev = i.read(6)
+        ino = i.read(6)
+        mode = i.read(6)
+        i.read(6) # uid
+        i.read(6) # gid
+        nlink = i.read(6)
+        rdev = i.read(6)
+        mtime = i.read(11)
+        namesize = i.read(6)
+        filesize = i.read(11)
+        name = i.read(int(namesize, 8))
+        data = i.read(int(filesize, 8))
+
+        o.write(magic)
+        o.write(dev)
+        o.write(ino)
+        o.write(mode)
+        o.write("000000")
+        o.write("000000")
+        o.write(nlink)
+        o.write(rdev)
+        o.write(mtime)
+        o.write(namesize)
+        o.write(filesize)
+        o.write(name)
+        o.write(data)
+
+        if name.startswith("TRAILER!!!"):
+            o.write(i.read())
+            break
+
+    o.close()
+    i.close()
+
+if __name__ == '__main__':
+    for iname in sys.argv[1:]:
+        print 'fixing file ownership in %s' % iname
+        oname = sys.argv[1] + '.tmp'
+        fixpax(iname, oname)
+        os.rename(oname, iname)
--- a/contrib/macosx/Readme.html	Sat Jan 17 22:01:14 2015 -0200
+++ b/contrib/macosx/Readme.html	Mon Feb 02 12:50:48 2015 -0600
@@ -4,7 +4,7 @@
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   <meta http-equiv="Content-Style-Type" content="text/css">
-  <title></title>
+  <title>Read Me - Important Information</title>
   <style type="text/css">
     p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica}
     p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
@@ -17,11 +17,11 @@
 <body>
 <p class="p1"><b>Before you install</b></p>
 <p class="p2"><br></p>
-<p class="p3">This is an OS X 10.6 version of Mercurial that depends on the default Python 2.6 installation.</p>
+<p class="p3">This is an OS X version of Mercurial that depends on the default Python installation.</p>
 <p class="p2"><br></p>
 <p class="p1"><b>After you install</b></p>
 <p class="p2"><br></p>
-<p class="p3">This package installs the <span class="s2">hg</span> executable in <span class="s2">/usr/local/bin</span> and the Mercurial files in <span class="s2">/Library/Python/2.6/site-packages/mercurial.</span></p>
+<p class="p3">This package installs the <span class="s2">hg</span> executable as <span class="s2">/usr/local/bin/hg</span>. See <span class="s2">hg debuginstall</span> for more info on file locations.</p>
 <p class="p2"><br></p>
 <p class="p1"><b>Documentation</b></p>
 <p class="p2"><br></p>
@@ -32,6 +32,6 @@
 <p class="p1"><b>Reporting problems</b></p>
 <p class="p2"><br></p>
 <p class="p3">If you run into any problems, please file a bug online:</p>
-<p class="p3"><a href="http://mercurial.selenic.com/bts/">http://mercurial.selenic.com/bts/</a></p>
+<p class="p3"><a href="http://bz.selenic.com/">http://bz.selenic.com/</a></p>
 </body>
 </html>
--- a/contrib/win32/hg.bat	Sat Jan 17 22:01:14 2015 -0200
+++ b/contrib/win32/hg.bat	Mon Feb 02 12:50:48 2015 -0600
@@ -15,3 +15,5 @@
     python "%~dp0hg" %*
 )
 endlocal
+
+exit /b %ERRORLEVEL%
--- a/hgext/color.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/hgext/color.py	Mon Feb 02 12:50:48 2015 -0600
@@ -156,7 +156,7 @@
 # start and stop parameters for effects
 _effects = {'none': 0, 'black': 30, 'red': 31, 'green': 32, 'yellow': 33,
             'blue': 34, 'magenta': 35, 'cyan': 36, 'white': 37, 'bold': 1,
-            'italic': 3, 'underline': 4, 'inverse': 7,
+            'italic': 3, 'underline': 4, 'inverse': 7, 'dim': 2,
             'black_background': 40, 'red_background': 41,
             'green_background': 42, 'yellow_background': 43,
             'blue_background': 44, 'purple_background': 45,
--- a/hgext/convert/hg.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/hgext/convert/hg.py	Mon Feb 02 12:50:48 2015 -0600
@@ -26,7 +26,7 @@
 from common import NoRepo, commit, converter_source, converter_sink
 
 import re
-sha1re = re.compile(r'\b[0-9a-f]{6,40}\b')
+sha1re = re.compile(r'\b[0-9a-f]{12,40}\b')
 
 class mercurial_sink(converter_sink):
     def __init__(self, ui, path):
@@ -467,7 +467,7 @@
     def lookuprev(self, rev):
         try:
             return hex(self.repo.lookup(rev))
-        except error.RepoError:
+        except (error.RepoError, error.LookupError):
             return None
 
     def getbookmarks(self):
--- a/hgext/extdiff.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/hgext/extdiff.py	Mon Feb 02 12:50:48 2015 -0600
@@ -212,13 +212,15 @@
                    'clabel': label2, 'child': dir2,
                    'root': repo.root}
         def quote(match):
-            key = match.group()[1:]
+            pre = match.group(2)
+            key = match.group(3)
             if not do3way and key == 'parent2':
-                return ''
-            return util.shellquote(replace[key])
+                return pre
+            return pre + util.shellquote(replace[key])
 
         # Match parent2 first, so 'parent1?' will match both parent1 and parent
-        regex = '\$(parent2|parent1?|child|plabel1|plabel2|clabel|root)'
+        regex = (r'''(['"]?)([^\s'"$]*)'''
+                 r'\$(parent2|parent1?|child|plabel1|plabel2|clabel|root)\1')
         if not do3way and not re.search(regex, cmdline):
             cmdline += ' $parent1 $child'
         cmdline = re.sub(regex, quote, cmdline)
--- a/hgext/largefiles/basestore.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/hgext/largefiles/basestore.py	Mon Feb 02 12:50:48 2015 -0600
@@ -181,8 +181,10 @@
         lfpullsource = getattr(repo, 'lfpullsource', None)
         if lfpullsource:
             path = ui.expandpath(lfpullsource)
+        elif put:
+            path = ui.expandpath('default-push', 'default')
         else:
-            path = ui.expandpath('default-push', 'default')
+            path = ui.expandpath('default')
 
         # ui.expandpath() leaves 'default-push' and 'default' alone if
         # they cannot be expanded: fallback to the empty string,
--- a/hgext/largefiles/overrides.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/hgext/largefiles/overrides.py	Mon Feb 02 12:50:48 2015 -0600
@@ -316,9 +316,14 @@
 
         for i in range(0, len(m._files)):
             standin = lfutil.standin(m._files[i])
+            # If the "standin" is a directory, append instead of replace to
+            # support naming a directory on the command line with only
+            # largefiles.  The original directory is kept to support normal
+            # files.
             if standin in repo[ctx.node()]:
                 m._files[i] = standin
-            elif m._files[i] not in repo[ctx.node()]:
+            elif m._files[i] not in repo[ctx.node()] \
+                    and repo.wvfs.isdir(standin):
                 m._files.append(standin)
             pats.add(standin)
 
--- a/hgext/largefiles/reposetup.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/hgext/largefiles/reposetup.py	Mon Feb 02 12:50:48 2015 -0600
@@ -12,7 +12,7 @@
 
 from mercurial import error, manifest, match as match_, util
 from mercurial.i18n import _
-from mercurial import scmutil
+from mercurial import scmutil, localrepo
 
 import lfcommands
 import lfutil
@@ -34,7 +34,7 @@
         # their actual contents.
         def __getitem__(self, changeid):
             ctx = super(lfilesrepo, self).__getitem__(changeid)
-            if self.unfiltered().lfstatus:
+            if self.lfstatus:
                 class lfilesmanifestdict(manifest.manifestdict):
                     def __contains__(self, filename):
                         orig = super(lfilesmanifestdict, self).__contains__
@@ -72,20 +72,19 @@
         # appropriate list in the result. Also removes standin files
         # from the listing. Revert to the original status if
         # self.lfstatus is False.
+        # XXX large file status is buggy when used on repo proxy.
+        # XXX this needs to be investigated.
+        @localrepo.unfilteredmethod
         def status(self, node1='.', node2=None, match=None, ignored=False,
                 clean=False, unknown=False, listsubrepos=False):
             listignored, listclean, listunknown = ignored, clean, unknown
             orig = super(lfilesrepo, self).status
-
-            # When various overrides set repo.lfstatus, the change is redirected
-            # to the unfiltered repo, and self.lfstatus is always false when
-            # this repo is filtered.
-            if not self.unfiltered().lfstatus:
+            if not self.lfstatus:
                 return orig(node1, node2, match, listignored, listclean,
                             listunknown, listsubrepos)
 
             # some calls in this function rely on the old version of status
-            self.unfiltered().lfstatus = False
+            self.lfstatus = False
             ctx1 = self[node1]
             ctx2 = self[node2]
             working = ctx2.rev() is None
@@ -241,7 +240,7 @@
                 if wlock:
                     wlock.release()
 
-            self.unfiltered().lfstatus = True
+            self.lfstatus = True
             return scmutil.status(*result)
 
         def commitctx(self, ctx, *args, **kwargs):
@@ -326,7 +325,12 @@
                         if self.dirstate.normalize(lf).startswith(d):
                             actualfiles.append(lf)
                             if not matcheddir:
-                                actualfiles.append(lfutil.standin(f))
+                                # There may still be normal files in the dir, so
+                                # make sure a directory is in the list, which
+                                # forces status to walk and call the match
+                                # function on the matcher.  Windows does NOT
+                                # require this.
+                                actualfiles.append('.')
                                 matcheddir = True
                 # Nothing in dir, so readd it
                 # and let commit reject it
--- a/hgext/rebase.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/hgext/rebase.py	Mon Feb 02 12:50:48 2015 -0600
@@ -16,7 +16,7 @@
 
 from mercurial import hg, util, repair, merge, cmdutil, commands, bookmarks
 from mercurial import extensions, patch, scmutil, phases, obsolete, error
-from mercurial import copies
+from mercurial import copies, repoview
 from mercurial.commands import templateopts
 from mercurial.node import nullrev, nullid, hex, short
 from mercurial.lock import release
@@ -778,6 +778,7 @@
 
 def clearstatus(repo):
     'Remove the status files'
+    _clearrebasesetvisibiliy(repo)
     util.unlinkpath(repo.join("rebasestate"), ignoremissing=True)
 
 def restorestatus(repo):
@@ -831,6 +832,7 @@
         repo.ui.debug('computed skipped revs: %s\n' %
                       (' '.join(str(r) for r in sorted(skipped)) or None))
         repo.ui.debug('rebase status resumed\n')
+        _setrebasesetvisibility(repo, state.keys())
         return (originalwd, target, state, skipped,
                 collapse, keep, keepbranches, external, activebookmark)
     except IOError, err:
@@ -892,6 +894,7 @@
     dest: context
     rebaseset: set of rev
     '''
+    _setrebasesetvisibility(repo, rebaseset)
 
     # This check isn't strictly necessary, since mq detects commits over an
     # applied patch. But it prevents messing up the working directory when
@@ -1044,6 +1047,31 @@
             raise util.Abort(_('--tool can only be used with --rebase'))
         orig(ui, repo, *args, **opts)
 
+def _setrebasesetvisibility(repo, revs):
+    """store the currently rebased set on the repo object
+
+    This is used by another function to prevent rebased revision to because
+    hidden (see issue4505)"""
+    repo = repo.unfiltered()
+    revs = set(revs)
+    repo._rebaseset = revs
+    # invalidate cache if visibility changes
+    hiddens = repo.filteredrevcache.get('visible', set())
+    if revs & hiddens:
+        repo.invalidatevolatilesets()
+
+def _clearrebasesetvisibiliy(repo):
+    """remove rebaseset data from the repo"""
+    repo = repo.unfiltered()
+    if '_rebaseset' in vars(repo):
+        del repo._rebaseset
+
+def _rebasedvisible(orig, repo):
+    """ensure rebased revs stay visible (see issue4505)"""
+    blockers = orig(repo)
+    blockers.update(getattr(repo, '_rebaseset', ()))
+    return blockers
+
 def summaryhook(ui, repo):
     if not os.path.exists(repo.join('rebasestate')):
         return
@@ -1062,7 +1090,7 @@
               (len(state) - numrebased)))
 
 def uisetup(ui):
-    'Replace pull with a decorator to provide --rebase option'
+    #Replace pull with a decorator to provide --rebase option
     entry = extensions.wrapcommand(commands.table, 'pull', pullrebase)
     entry[1].append(('', 'rebase', None,
                      _("rebase working directory to branch head")))
@@ -1072,3 +1100,6 @@
     cmdutil.unfinishedstates.append(
         ['rebasestate', False, False, _('rebase in progress'),
          _("use 'hg rebase --continue' or 'hg rebase --abort'")])
+    # ensure rebased rev are not hidden
+    extensions.wrapfunction(repoview, '_getdynamicblockers', _rebasedvisible)
+
--- a/i18n/ja.po	Sat Jan 17 22:01:14 2015 -0200
+++ b/i18n/ja.po	Mon Feb 02 12:50:48 2015 -0600
@@ -1,7 +1,7 @@
 # Japanese translation for Mercurial
 # Mercurial 日本語翻訳
 #
-# Copyright (C) 2009-2014 the Mercurial team
+# Copyright (C) 2009-2015 the Mercurial team
 #
 # ========================================
 # 【翻訳用語集】
@@ -149,8 +149,8 @@
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
-"POT-Creation-Date: 2014-12-29 15:28+0900\n"
-"PO-Revision-Date: 2014-12-29 15:55+0900\n"
+"POT-Creation-Date: 2015-01-31 23:43+0900\n"
+"PO-Revision-Date: 2015-02-01 08:15+0900\n"
 "Last-Translator: Japanese translation team <mercurial-ja@googlegroups.com>\n"
 "Language-Team: Japanese\n"
 "Language: ja\n"
@@ -3038,6 +3038,10 @@
 msgstr "Subversion python バインディングは 1.4 以上が必要です"
 
 #, python-format
+msgid "%s does not look like a Subversion repository to libsvn version %s"
+msgstr "%s は subversion 形式ではないと思われます (libsvn バージョン %s)"
+
+#, python-format
 msgid "svn: revision %s is not an integer"
 msgstr "svn: リビジョン %s が数字ではありません"
 
@@ -3374,17 +3378,14 @@
 "  #opts.cdiff = -Nprc5"
 
 msgid ""
-"  # add new command called vdiff, runs kdiff3\n"
-"  vdiff = kdiff3"
-msgstr ""
-"  # kdiff3 を起動する vdiff 設定の追加\n"
-"  vdiff = kdiff3"
-
-msgid ""
-"  # add new command called meld, runs meld (no need to name twice)\n"
+"  # add new command called meld, runs meld (no need to name twice).  If\n"
+"  # the meld executable is not available, the meld tool in [merge-tools]\n"
+"  # will be used, if available\n"
 "  meld ="
 msgstr ""
-"  # meld を起動する設定の追加 (同名の場合は設定右辺を省略可能)\n"
+"  # meld コマンドを起動する同名定義の追加 (同名の場合は設定右辺を省略可能)\n"
+"  # meld という名前の実行ファイルが見つからない場合、[merge-tools] 設定に\n"
+"  # meld 向け定義があれば、そちらの定義を使用します\n"
 "  meld ="
 
 msgid ""
@@ -3600,6 +3601,9 @@
 msgid "factotum not interactive"
 msgstr "factotum が対話的に実行されていません"
 
+msgid "malformed password string"
+msgstr "不正なパスワード文字列"
+
 msgid "factotum not responding"
 msgstr "factotum が応答しません"
 
@@ -5390,6 +5394,9 @@
 msgid "found %s in system cache\n"
 msgstr "%s はシステムキャッシュに取得済み\n"
 
+msgid "finding outgoing largefiles"
+msgstr "転送対象大容量ファイルの検出中"
+
 msgid "can't get file locally"
 msgstr "ファイルが手元にありません"
 
@@ -5409,9 +5416,6 @@
 msgid "adding %s as a largefile\n"
 msgstr "%s を大容量ファイルとして追加登録中\n"
 
-msgid "no files specified"
-msgstr "ファイル名指定がありません"
-
 #, python-format
 msgid "not removing %s: file still exists\n"
 msgstr "%s は削除されません: ファイルは維持されます\n"
@@ -7653,14 +7657,66 @@
 "to be a sendmail compatible mailer or fill out the [smtp] section so\n"
 "that the patchbomb extension can automatically send patchbombs\n"
 "directly from the commandline. See the [email] and [smtp] sections in\n"
-"hgrc(5) for details.\n"
+"hgrc(5) for details."
 msgstr ""
 "設定ファイルの [email] セクションで method 指定を行うことで、 sendmail\n"
 "互換のメール送信プログラムを指定することもできれば、 [smtp] セクションに\n"
 "必要な情報を記述することで、 外部プログラムの助けを借りずに Mercurial から\n"
 "直接パッチ爆弾を送信することも可能です。 これらのセクションに関する詳細は\n"
-"設定ファイルに関するドキュメント (hgrc(5)) を参照してください。\n"
-"(※ 訳注: :hg:`help config` でも参照可能)\n"
+"設定ファイルに関するドキュメント hgrc(5) を参照してください。\n"
+"(※ 訳注: :hg:`help config` でも参照可能)"
+
+msgid ""
+"You can control the default inclusion of an introduction message with the\n"
+"``patchbomb.intro`` configuration option. The configuration is always\n"
+"overwritten by command line flags like --intro and --desc::"
+msgstr ""
+"メール投函の際の、 導入メッセージメールの有無は ``patchbomb.intro``\n"
+"設定項目で指定できます。 この設定項目の値は、 コマンドラインにおける\n"
+"--intro や --desc といったフラグで上書きされます::"
+
+msgid ""
+"  [patchbomb]\n"
+"  intro=auto   # include introduction message if more than 1 patch "
+"(default)\n"
+"  intro=never  # never include an introduction message\n"
+"  intro=always # always include an introduction message"
+msgstr ""
+"  [patchbomb]\n"
+"  intro=auto   # 1つ以上メールする場合に導入メッセージを含める (デフォルト)\n"
+"  intro=never  # 導入メッセージを含めない\n"
+"  intro=always # 導入メッセージを常に含める"
+
+msgid ""
+"You can set patchbomb to always ask for confirmation by setting\n"
+"``patchbomb.confirm`` to true.\n"
+msgstr ""
+"``patchbomb.confirm`` へ真値を設定することより、 パッチ送信の際に、\n"
+"常に確認の問い合わせを行わせることができます。\n"
+
+#, python-format
+msgid "warning: invalid patchbomb.intro value \"%s\"\n"
+msgstr "警告: \"%s\" は不正な patchbomb.intro 設定値です\n"
+
+msgid "(should be one of always, never, auto)\n"
+msgstr "(always, never, auto のいずれかを設定してください)\n"
+
+msgid "warning: working directory has uncommitted changes\n"
+msgstr "警告: 作業領域には未コミットの変更があります\n"
+
+msgid ""
+"\n"
+"Write the introductory message for the patch series."
+msgstr ""
+"\n"
+"一連のパッチのための説明文を記述してください。"
+
+#, python-format
+msgid "this patch series consists of %d patches."
+msgstr "一連のパッチは %d 個のパッチから構成されています。"
+
+msgid "no changes found\n"
+msgstr "差分はありません\n"
 
 msgid "send patches as inline message text (default)"
 msgstr "インラインメッセージとしてパッチを送信 (デフォルト)"
@@ -7850,6 +7906,13 @@
 "    導入メッセージは ``.hg/last-email.txt`` に保存されます。"
 
 msgid ""
+"    The default behavior of this command can be customized through\n"
+"    configuration. (See :hg:`help patchbomb` for details)"
+msgstr ""
+"    本コマンドのデフォルト挙動は、 設定により変更可能です (詳細は\n"
+"    :hg:`help patchbomb` を参照してください)。"
+
+msgid ""
 "      hg email -r 3000          # send patch 3000 only\n"
 "      hg email -r 3000 -r 3001  # send patches 3000 and 3001\n"
 "      hg email -r 3000:3005     # send patches 3000 through 3005\n"
@@ -7878,7 +7941,7 @@
 "default\n"
 "      hg email -b -r 3000 DEST  # bundle of all ancestors of 3000 not in DEST"
 msgstr ""
-"      # ※ 以下、すべて bundle 形式\n"
+"      # ※ 以下、全て bundle 形式\n"
 "      hg email -b               # default 側に無いリビジョン\n"
 "      hg email -b DEST          # DEST 側に無いリビジョン\n"
 "      hg email -b -r 3000       # 3000 以前で default 側に無いリビジョン\n"
@@ -7908,12 +7971,6 @@
 "    を参照してください。 (※ 訳注: :hg:`help config` でも参照可能)\n"
 "    "
 
-msgid "no changes found\n"
-msgstr "差分はありません\n"
-
-msgid "warning: working directory has uncommitted changes\n"
-msgstr "警告: 作業領域には未コミットの変更があります\n"
-
 msgid "specify at least one changeset with -r or -o"
 msgstr "-r 又は -o を使用してリビジョンを指定してください"
 
@@ -7926,17 +7983,6 @@
 msgid "use only one form to specify the revision"
 msgstr "リビジョン指定は単一の形式で行ってください"
 
-msgid ""
-"\n"
-"Write the introductory message for the patch series."
-msgstr ""
-"\n"
-"一連のパッチのための説明文を記述してください。"
-
-#, python-format
-msgid "this patch series consists of %d patches."
-msgstr "一連のパッチは %d 個のパッチから構成されています。"
-
 msgid "no recipient addresses provided"
 msgstr "宛先アドレスが指定されていません"
 
@@ -8395,10 +8441,10 @@
 
 msgid ""
 "interactive history editing is supported by the 'histedit' extension (see "
-"'hg help histedit')"
-msgstr ""
-"対話的な履歴の改変は histedit エクステンションを使用します('hg help "
-"histeidt' 参照)"
+"\"hg help histedit\")"
+msgstr ""
+"対話的な履歴の改変は histedit エクステンションを使用します (\"hg help "
+"histeidt\" 参照)"
 
 msgid "message can only be specified with collapse"
 msgstr "--collapse 指定との併用時のみメッセージ指定が可能です"
@@ -8477,9 +8523,6 @@
 msgid "can't rebase immutable changeset %s"
 msgstr "改変不能なリビジョン %s は移動できません"
 
-msgid "see hg help phases for details"
-msgstr "詳細は \"hg help phases\" を参照"
-
 #, python-format
 msgid "reopening closed branch head %s\n"
 msgstr "閉鎖済みブランチヘッド %s の閉鎖状態を解除中\n"
@@ -8487,8 +8530,12 @@
 msgid "cannot collapse multiple named branches"
 msgstr "複数の名前付きブランチの単一化はできません"
 
+#, python-format
+msgid "rebasing %s\n"
+msgstr "リビジョン '%s' を移動中\n"
+
 msgid "rebasing"
-msgstr "移動実施中"
+msgstr "移動中"
 
 msgid "changesets"
 msgstr "リビジョン"
@@ -8499,8 +8546,16 @@
 "行してください)"
 
 #, python-format
-msgid "no changes, revision %d skipped\n"
-msgstr "変更がないので、 リビジョン %d をスキップ\n"
+msgid "note: rebase of %d:%s created no changes to commit\n"
+msgstr "備考: リビジョン %d:%s は移動先で空になるため無視されます\n"
+
+#, python-format
+msgid "not rebasing ignored %s\n"
+msgstr "無視対象のリビジョン '%s' は移動されません\n"
+
+#, python-format
+msgid "already rebased %s as %s\n"
+msgstr "%s は %s として移動済みです\n"
 
 msgid "rebase merging completed\n"
 msgstr "移動のマージ処理が完了\n"
@@ -8525,6 +8580,10 @@
 msgid "cannot use revision %d as base, result would have 3 parents"
 msgstr "親リビジョンが 3 つになるので、 リビジョン %d をベースにできません"
 
+#, python-format
+msgid "updating mq patch %s to %s:%s\n"
+msgstr "mq パッチ %s をリビジョン %s:%s に移動中\n"
+
 msgid ".hg/rebasestate is incomplete"
 msgstr "管理情報 (.hg/rebasestate) が破損しています"
 
@@ -8936,18 +8995,21 @@
 msgid "do not create a working copy"
 msgstr "作業領域の更新を抑止します"
 
-msgid "[-U] SOURCE [DEST]"
-msgstr "[-U] SOURCE [DEST]"
+msgid "also share bookmarks"
+msgstr "ブックマークも共有"
+
+msgid "[-U] [-B] SOURCE [DEST]"
+msgstr "[-U] [-B] SOURCE [DEST]"
 
 msgid "create a new shared repository"
 msgstr "共有リポジトリの新規作成"
 
 msgid ""
 "    Initialize a new repository and working directory that shares its\n"
-"    history with another repository."
-msgstr ""
-"    他のリポジトリと履歴情報を共有する、 リポジトリ/作業領域を、\n"
-"    新規に作成します。"
+"    history (and optionally bookmarks) with another repository."
+msgstr ""
+"    他のリポジトリと履歴情報 (オプション指定でブックマークも) を共有する、\n"
+"    リポジトリ/作業領域を、 新規に作成します。"
 
 msgid ""
 "       using rollback or extensions that destroy/modify history (mq,\n"
@@ -9256,7 +9318,7 @@
 msgid "use 'hg unshelve --continue' or 'hg unshelve --abort'"
 msgstr "'hg unshelve --continue' か 'hg unshelve --abort' を実施してください"
 
-msgid "strip changesets and their descendents from history"
+msgid "strip changesets and their descendants from history"
 msgstr "指定リビジョンと子孫の履歴からの破棄"
 
 msgid ""
@@ -9430,6 +9492,10 @@
 msgid "%s transplanted as %s\n"
 msgstr "%s が %s として移植されました\n"
 
+#, python-format
+msgid "%s skipped due to empty diff\n"
+msgstr "変更内容が空になるため %s を無視します\n"
+
 msgid "transplant log file is corrupt"
 msgstr "移植ログファイルが破損しています"
 
@@ -9979,17 +10045,35 @@
 msgid "invalid chunk length %d"
 msgstr "不正なデータ長: %d"
 
+msgid "Bundle1 only supports v1 changegroups\n"
+msgstr "bundle1 形式で使用可能なバンドルファイルは v1 バージョンのみです\n"
+
 msgid "bundling"
 msgstr "バンドル生成中"
 
+msgid "uncompressed size of bundle content:\n"
+msgstr "バンドルファイル内容の非圧縮サイズ:\n"
+
+#, python-format
+msgid "%8.i (changelog)\n"
+msgstr "%8.i (履歴情報)\n"
+
 msgid "manifests"
 msgstr "マニフェスト"
 
 #, python-format
+msgid "%8.i (manifests)\n"
+msgstr "%8.i (マニフェスト)\n"
+
+#, python-format
 msgid "empty or missing revlog for %s"
 msgstr "%s に対するリビジョンログが空または不在です"
 
 #, python-format
+msgid "%8.i  %s\n"
+msgstr "%8.i  %s\n"
+
+#, python-format
 msgid "%d changesets found\n"
 msgstr "%d 個のリビジョンがあります\n"
 
@@ -10176,16 +10260,6 @@
 
 #. i18n: column positioning for "hg log"
 #, python-format
-msgid "bookmark:    %s\n"
-msgstr "ブックマーク: %s\n"
-
-#. i18n: column positioning for "hg log"
-#, python-format
-msgid "tag:         %s\n"
-msgstr "タグ:         %s\n"
-
-#. i18n: column positioning for "hg log"
-#, python-format
 msgid "phase:       %s\n"
 msgstr "フェーズ:     %s\n"
 
@@ -10286,6 +10360,17 @@
 msgstr "存在しないサブリポジトリへの処理を省略: %s\n"
 
 #, python-format
+msgid "not removing %s: no tracked files\n"
+msgstr "%s は削除されません: 登録済みファイルはありません\n"
+
+#, python-format
+msgid "not removing %s: file is untracked\n"
+msgstr "%s は削除されません: 未登録ファイルです\n"
+
+msgid "failed to mark all new/missing files as added/removed"
+msgstr "新規ファイルの追加/不在ファイルの除外が失敗しました"
+
+#, python-format
 msgid "amending changeset %s\n"
 msgstr "リビジョン %s を改変中\n"
 
@@ -10510,6 +10595,9 @@
 msgid "ignore changes whose lines are all blank"
 msgstr "差分判定の際に空白行を無視"
 
+msgid "omit a/ and b/ prefixes from filenames"
+msgstr "ファイル名の接頭辞 a/ と b/ の省略"
+
 msgid "show which function each change is in"
 msgstr "差分表示の際に関数名情報を表示"
 
@@ -10786,6 +10874,9 @@
 msgid "merge with old dirstate parent after backout"
 msgstr "打ち消しリビジョンを現親リビジョンとマージ"
 
+msgid "commit if no conflicts were encountered"
+msgstr "衝突が検出されない場合のコミット実施"
+
 msgid "parent to choose when backing out merge (DEPRECATED)"
 msgstr "打ち消しリビジョンとのマージ対象 (非推奨)"
 
@@ -11292,10 +11383,9 @@
 
 msgid ""
 "    Unless -f/--force is specified, branch will not let you set a\n"
-"    branch name that already exists, even if it's inactive."
-msgstr ""
-"    -f/--force 指定が無い場合、 例えそれが非アクティブなものであっても、\n"
-"    既存ブランチと同じ名前は設定できません。"
+"    branch name that already exists."
+msgstr ""
+"    -f/--force 指定が無い場合、 既存ブランチと同じ名前は設定できません。"
 
 msgid ""
 "    Use -C/--clean to reset the working directory branch to that of\n"
@@ -11331,8 +11421,8 @@
 msgid "(branches are permanent and global, did you want a bookmark?)\n"
 msgstr "(ブランチは永続的且つ共有されます。ブックマークはいかがですか?)\n"
 
-msgid "show only branches that have unmerged heads"
-msgstr "未マージなヘッドを持つブランチのみを表示"
+msgid "show only branches that have unmerged heads (DEPRECATED)"
+msgstr "未マージなヘッドを持つブランチのみを表示 (非推奨)"
 
 msgid "show normal and closed branches"
 msgstr "閉鎖済みヘッドも表示"
@@ -11352,13 +11442,6 @@
 "    か否かと共に一覧表示します。 -c/--closed 指定時には、\n"
 "    閉鎖済みのブランチ (:hg:`commit --close-branch` 参照) も表示されます。"
 
-msgid ""
-"    If -a/--active is specified, only show active branches. A branch\n"
-"    is considered active if it contains repository heads."
-msgstr ""
-"    -a/--active 指定時には、 アクティブなブランチのみが表示されます。\n"
-"    リポジトリ中にヘッドを持つものがアクティブなブランチとみなされます。"
-
 msgid "    Use the command :hg:`update` to switch to an existing branch."
 msgstr ""
 "    作業領域の内容を既存ブランチのもので更新する場合は :hg:`update` を\n"
@@ -12025,6 +12108,12 @@
 msgid "lists the contents of a bundle"
 msgstr "バンドルファイルの内容表示"
 
+msgid "use debugbundle2 for this file"
+msgstr "このファイルには debugbundle2 コマンドを使用してください"
+
+msgid "not a bundle2 file"
+msgstr "bundle2 形式のファイルではありません"
+
 msgid "validate the correctness of the current dirstate"
 msgstr "現時点の dirstate の整合性検証"
 
@@ -12283,8 +12372,14 @@
 msgid "LABEL..."
 msgstr "LABEL..."
 
-msgid "complete \"labels\" - tags, open branch names, bookmark names"
-msgstr "タグ、未閉鎖ブランチ名、ブックマーク等の『ラベル』の補完"
+msgid "backwards compatibility with old bash completion scripts (DEPRECATED)"
+msgstr "既存の bash 補完スクリプト向けの後方互換用コマンド (非推奨)"
+
+msgid "NAME..."
+msgstr "NAME..."
+
+msgid "complete \"names\" - tags, open branch names, bookmark names"
+msgstr "タグ、ブランチ名、ブックマーク名といった『名前』の補完"
 
 msgid "free the store lock (DANGEROUS)"
 msgstr "管理領域の排他の解放 (危険)"
@@ -12914,6 +13009,9 @@
 msgid "          hg forget \"set:hgignore()\""
 msgstr "          hg forget \"set:hgignore()\""
 
+msgid "no files specified"
+msgstr "ファイル名指定がありません"
+
 msgid "revisions to graft"
 msgstr "移植対象リビジョン"
 
@@ -13043,35 +13141,36 @@
 msgstr "移植できないマージリビジョン %s を無視\n"
 
 #, python-format
-msgid "skipping ancestor revision %s\n"
-msgstr "祖先リビジョン %s を無視\n"
-
-#, python-format
-msgid "skipping revision %s (already grafted to %s)\n"
-msgstr "リビジョン %s を無視 (%s に移植済み)\n"
-
-#, python-format
-msgid "skipping already grafted revision %s (%s also has unknown origin %s)\n"
-msgstr "移植済みリビジョン %s を無視 (%s も未知のリビジョン %s 由来)\n"
-
-#, python-format
-msgid "skipping already grafted revision %s (%s also has origin %d)\n"
-msgstr "移植済みリビジョン %s を無視 (%s も同じリビジョン %d 由来)\n"
-
-#, python-format
-msgid "skipping already grafted revision %s (was grafted from %d)\n"
-msgstr "移植済みリビジョン %s を無視 (移植元: %d)\n"
-
-#, python-format
-msgid "grafting revision %s\n"
-msgstr "リビジョン %s の移植中\n"
+msgid "skipping ancestor revision %d:%s\n"
+msgstr "祖先リビジョン %d:%s を無視\n"
+
+#, python-format
+msgid "skipping revision %d:%s (already grafted to %d:%s)\n"
+msgstr "リビジョン %d:%s を無視 (%d:%s に移植済み)\n"
+
+#, python-format
+msgid ""
+"skipping already grafted revision %d:%s (%d:%s also has unknown origin %s)\n"
+msgstr "移植済みリビジョン %d:%s を無視 (%d:%s も未知のリビジョン %s 由来)\n"
+
+#, python-format
+msgid "skipping already grafted revision %d:%s (%d:%s also has origin %d:%s)\n"
+msgstr "移植済みリビジョン %d:%s を無視 (%d:%s も同じリビジョン %d:%s 由来)\n"
+
+#, python-format
+msgid "skipping already grafted revision %d:%s (was grafted from %d:%s)\n"
+msgstr "移植済みリビジョン %d:%s を無視 (移植元: %d:%s)\n"
+
+#, python-format
+msgid "grafting %s\n"
+msgstr "%s を移植中\n"
 
 msgid "use hg resolve and hg graft --continue"
 msgstr "'hg resolve' での衝突解消後に、'hg graft --continue'を実行してください"
 
 #, python-format
-msgid "graft for revision %s is empty\n"
-msgstr "リビジョン %s の移植は空です\n"
+msgid "note: graft of %d:%s created no changes to commit\n"
+msgstr "備考: リビジョン %d:%s は移植先で空になるため無視されます\n"
 
 msgid "end fields with NUL"
 msgstr "各フィールドの区切りにNUL文字(0x00)を使用"
@@ -14416,14 +14515,6 @@
 "    成功時のコマンド終了値は 0、 警告検出時は 1 です。\n"
 "    "
 
-#, python-format
-msgid "not removing %s: no tracked files\n"
-msgstr "%s は削除されません: 登録済みファイルはありません\n"
-
-#, python-format
-msgid "not removing %s: file is untracked\n"
-msgstr "%s は削除されません: 未登録ファイルです\n"
-
 msgid "record a rename that has already occurred"
 msgstr "手動で改名済みのファイルに対して、 改名の旨を記録"
 
@@ -15930,6 +16021,9 @@
 msgid "push includes divergent changeset: %s!"
 msgstr "履歴反映対象に分岐 (divergent) した後継リビジョンが含まれます!: %s"
 
+msgid "no common changegroup version"
+msgstr "利用可能な共通のバンドル形式バージョンがありません"
+
 #, python-format
 msgid "server ignored update of %s to public!\n"
 msgstr "連携先で、%s の public 化が無視されました!\n"
@@ -16605,6 +16699,14 @@
 #, python-format
 msgid ""
 "\n"
+"(use \"hg help -v -e %s\" to show built-in aliases and global options)\n"
+msgstr ""
+"\n"
+"(組み込み別名およびグローバルオプションの表示は \"hg help -v -e %s\")\n"
+
+#, python-format
+msgid ""
+"\n"
 "(use \"hg help -v%s\" to show built-in aliases and global options)\n"
 msgstr ""
 "\n"
@@ -16755,14 +16857,16 @@
 "  - ``<install-root>/etc/mercurial/hgrc`` (per-installation)\n"
 "  - ``<install-root>/etc/mercurial/hgrc.d/*.rc`` (per-installation)\n"
 "  - ``/etc/mercurial/hgrc`` (per-system)\n"
-"  - ``/etc/mercurial/hgrc.d/*.rc`` (per-system)"
+"  - ``/etc/mercurial/hgrc.d/*.rc`` (per-system)\n"
+"  - ``<internal>/default.d/*.rc`` (defaults)"
 msgstr ""
 "  - ``<リポジトリ>/.hg/hgrc`` (リポジトリ毎設定)\n"
 "  - ``$HOME/.hgrc`` (ユーザ毎設定)\n"
 "  - ``<インストール先>/etc/mercurial/hgrc`` (インストール毎設定)\n"
 "  - ``<インストール先>/etc/mercurial/hgrc.d/*.rc`` (インストール毎設定)\n"
 "  - ``/etc/mercurial/hgrc`` (システム毎設定)\n"
-"  - ``/etc/mercurial/hgrc.d/*.rc`` (システム毎設定)"
+"  - ``/etc/mercurial/hgrc.d/*.rc`` (システム毎設定)\n"
+"  - ``<パッケージ固有>/default.d/*.rc`` (デフォルト)"
 
 msgid "  On Windows, the following files are consulted:"
 msgstr "  Windows 環境では、 以下のファイルが読み込まれます:"
@@ -16775,7 +16879,8 @@
 "  - ``%HOME%\\Mercurial.ini`` (per-user)\n"
 "  - ``<install-dir>\\Mercurial.ini`` (per-installation)\n"
 "  - ``<install-dir>\\hgrc.d\\*.rc`` (per-installation)\n"
-"  - ``HKEY_LOCAL_MACHINE\\SOFTWARE\\Mercurial`` (per-installation)"
+"  - ``HKEY_LOCAL_MACHINE\\SOFTWARE\\Mercurial`` (per-installation)\n"
+"  - ``<internal>/default.d/*.rc`` (defaults)"
 msgstr ""
 "  - ``<リポジトリ>/.hg/hgrc`` (リポジトリ毎設定)\n"
 "  - ``%USERPROFILE%\\.hgrc`` (ユーザ毎設定)\n"
@@ -16784,7 +16889,8 @@
 "  - ``%HOME%\\Mercurial.ini`` (ユーザ毎設定)\n"
 "  - ``<インストール先>\\Mercurial.ini`` (インストール毎設定)\n"
 "  - ``<インストール先>\\hgrc.d\\*.rc`` (インストール毎設定)\n"
-"  - ``HKEY_LOCAL_MACHINE\\SOFTWARE\\Mercurial`` (インストール毎設定)"
+"  - ``HKEY_LOCAL_MACHINE\\SOFTWARE\\Mercurial`` (インストール毎設定)\n"
+"  - ``<パッケージ固有>/default.d/*.rc`` (デフォルト)"
 
 msgid ""
 "   The registry key ``HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node"
@@ -16804,14 +16910,16 @@
 "  - ``<install-root>/lib/mercurial/hgrc`` (per-installation)\n"
 "  - ``<install-root>/lib/mercurial/hgrc.d/*.rc`` (per-installation)\n"
 "  - ``/lib/mercurial/hgrc`` (per-system)\n"
-"  - ``/lib/mercurial/hgrc.d/*.rc`` (per-system)"
+"  - ``/lib/mercurial/hgrc.d/*.rc`` (per-system)\n"
+"  - ``<internal>/default.d/*.rc`` (defaults)"
 msgstr ""
 "  - ``<リポジトリ>/.hg/hgrc`` (リポジトリ毎設定)\n"
 "  - ``$home/lib/hgrc`` (ユーザ毎設定)\n"
 "  - ``<インストール先>/lib/mercurial/hgrc`` (インストール毎設定)\n"
 "  - ``<インストール先>/lib/mercurial/hgrc.d/*.rc`` (インストール毎設定)\n"
 "  - ``/lib/mercurial/hgrc`` (システム毎設定)\n"
-"  - ``/lib/mercurial/hgrc.d/*.rc`` (システム毎設定)"
+"  - ``/lib/mercurial/hgrc.d/*.rc`` (システム毎設定)\n"
+"  - ``<パッケージ固有>/default.d/*.rc`` (デフォルト)"
 
 msgid ""
 "Per-repository configuration options only apply in a\n"
@@ -16883,6 +16991,26 @@
 "システム毎設定は、 インストール毎設定より優先されます。"
 
 msgid ""
+"Mercurial comes with some default configuration. The default configuration\n"
+"files are installed with Mercurial and will be overwritten on upgrades. "
+"Default\n"
+"configuration files should never be edited by users or administrators but "
+"can\n"
+"be overridden in other configuration files. So far the directory only "
+"contains\n"
+"merge tool configuration but packagers can also put other default "
+"configuration\n"
+"there."
+msgstr ""
+"mercurial のリリースには、 いくつかのデフォルト設定ファイルが含まれます。\n"
+"mercurial のインストールやバージョンアップは、 これらを上書きします。\n"
+"設定変更の際には、デフォルト設定以外の設定ファイルを編集してください。\n"
+"開発元が提供するデフォルト設定は、 現状ではマージツール設定のみですが、\n"
+"パッケージ作成者によって、 他の設定が追加されている可能性があります。\n"
+"(※ 訳注: デフォルト設定ファイルの格納先は、 パッケージ形態依存なので、\n"
+"格納先説明では「パッケージ固有」と表記しています)"
+
+msgid ""
 "Syntax\n"
 "======"
 msgstr ""
@@ -17804,6 +17932,13 @@
 "    差分ヘッダ部分からの日付情報除外の有無。"
 
 msgid ""
+"``noprefix``\n"
+"    Omit 'a/' and 'b/' prefixes from filenames. Ignored in plain mode."
+msgstr ""
+"``noprefix``\n"
+"    ファイル名の接頭辞 'a/' と 'b/' の省略 (plain モードでは無視)"
+
+msgid ""
 "``showfunc``\n"
 "    Show which function each change is in."
 msgstr ""
@@ -19510,20 +19645,19 @@
 msgid ""
 "``ignore``\n"
 "    A file to read per-user ignore patterns from. This file should be\n"
-"    in the same format as a repository-wide .hgignore file. This\n"
-"    option supports hook syntax, so if you want to specify multiple\n"
-"    ignore files, you can do so by setting something like\n"
-"    ``ignore.other = ~/.hgignore2``. For details of the ignore file\n"
-"    format, see the ``hgignore(5)`` man page."
+"    in the same format as a repository-wide .hgignore file. Filenames\n"
+"    are relative to the repository root. This option supports hook syntax,\n"
+"    so if you want to specify multiple ignore files, you can do so by\n"
+"    setting something like ``ignore.other = ~/.hgignore2``. For details\n"
+"    of the ignore file format, see the ``hgignore(5)`` man page."
 msgstr ""
 "``ignore``\n"
-"    ユーザ毎の無視対象パターンファイルの読み込み設定。\n"
-"    対象ファイルの形式は、 リポジトリ毎の .hgignore ファイルと同じです。\n"
-"    本指定には、 フック指定の文法が適用可能です。\n"
-"    複数の無視指定ファイルの読み込みは、 ``ignore.other = ~/.hgignore2``\n"
-"    のように記述します。 無視指定ファイル記述の詳細は、\n"
-"    ``hgignore(5)`` マニュアルを参照してください。\n"
-"    (※ 訳注: :hg:`help ignore` でも参照可能)"
+"    無視対象パターンファイルの読み込み設定。 対象ファイルの形式は、\n"
+"    リポジトリ毎の .hgignore と同じです。 指定されたファイル名は、\n"
+"    リポジトリ相対とみなされます。 フック指定と同様の ``ignore.other =\n"
+"    ~/.hgignore2`` 形式の記述により、 複数のファイルを読み込めます。\n"
+"    無視指定ファイルの詳細は ``hgignore(5)`` マニュアルを参照してください\n"
+"    (※ 訳注: :hg:`help ignore` でも参照可能)。"
 
 msgid ""
 "``interactive``\n"
@@ -23304,6 +23438,40 @@
 "上記の記述で、 3つの別名 ``h``、 ``d`` および ``rs`` が定義されます。\n"
 "``rs(0:tip, author)`` は ``reverse(sort(0:tip, author))`` と同一です。"
 
+msgid ""
+"An infix operator ``##`` can concatenate strings and identifiers into\n"
+"one string. For example::"
+msgstr ""
+"二項演算子 ``##`` は、 文字列やシンボル名を、 単一文字列に結合します。\n"
+"例えば::"
+
+msgid ""
+"  [revsetalias]\n"
+"  issue($1) = grep(r'\\bissue[ :]?' ## $1 ## r'\\b|\\bbug\\(' ## $1 ## "
+"r'\\)')"
+msgstr ""
+"  [revsetalias]\n"
+"  issue($1) = grep(r'\\bissue[ :]?' ## $1 ## r'\\b|\\bbug\\(' ## $1 ## "
+"r'\\)')"
+
+msgid ""
+"``issue(1234)`` is equivalent to ``grep(r'\\bissue[ :]?1234\\b|\\bbug"
+"\\(1234\\)')``\n"
+"in this case. This matches against all of \"issue 1234\", \"issue:1234\",\n"
+"\"issue1234\" and \"bug(1234)\"."
+msgstr ""
+"上記エイリアスが定義されている場合、 ``issue(1234)`` という記述は\n"
+"``grep(r'\\bissue[ :]?1234\\b|\\bbug\\(1234\\)')`` と等価です。\n"
+"このパターンは \"issue 1234\", \"issue:1234\", \"issue1234\" および\n"
+"\"bug(1234)\" の全てに合致します。"
+
+msgid ""
+"All other prefix, infix and postfix operators have lower priority than\n"
+"``##``. For example, ``$1 ## $2~2`` is equivalent to ``($1 ## $2)~2``."
+msgstr ""
+"他の全ての演算子は ``##`` よりも結合優先順位が低くなります。 例えば\n"
+"``$1 ## $2~2`` は ``($1 ## $2)~2`` と等価です。"
+
 msgid "Command line equivalents for :hg:`log`::"
 msgstr ":hg:`log` のコマンド行オプション指定に対する等価な記述::"
 
@@ -23551,6 +23719,19 @@
 "    登録要求を無視します。"
 
 msgid ""
+":addremove: addremove does not recurse into subrepos unless\n"
+"    -S/--subrepos is specified.  However, if you specify the full\n"
+"    path of a directory in a subrepo, addremove will be performed on\n"
+"    it even without -S/--subrepos being specified.  Git and\n"
+"    Subversion subrepositories will print a warning and continue."
+msgstr ""
+":addremove: -S/--subrepos 指定が無い限り、 addremove による登録/除外は、\n"
+"    再帰的には実施されません。 但し、 -S/--subrepos 指定が無くても、\n"
+"    サブリポジトリ中のファイルへのパスが、 直接指定された場合は、\n"
+"    対象ファイルの登録/除外が実施されます。 なお、 サブリポジトリが\n"
+"    Git または Subversion 形式の場合、 警告表示の後、 処理が続行されます。"
+
+msgid ""
 ":archive: archive does not recurse in subrepositories unless\n"
 "    -S/--subrepos is specified."
 msgstr ""
@@ -23572,7 +23753,9 @@
 "    -S/--subrepos, or setting \"ui.commitsubrepos=True\" in a\n"
 "    configuration file (see :hg:`help config`).  After there are no\n"
 "    longer any modified subrepositories, it records their state and\n"
-"    finally commits it in the parent repository."
+"    finally commits it in the parent repository.  The --addremove\n"
+"    option also honors the -S/--subrepos option.  However, Git and\n"
+"    Subversion subrepositories will print a warning and abort."
 msgstr ""
 ":commit: コミットの実施により、 親リポジトリと配下のサブリポジトリ間の、\n"
 "    整合性の取れた対応関係が、 (親リポジトリ側に) 記録されます。\n"
@@ -23581,19 +23764,22 @@
 "    での \"ui.commitsubrepos=True\" 設定により、 コミット実施の際に、\n"
 "    サブリポジトリ中の未コミット変更が、 再帰的にコミットされます。\n"
 "    全てのサブリポジトリから、 未コミット変更が無くなった後で、\n"
-"    各サブリポジトリの状態記録が、 親リポジトリにおいてコミットされます。"
+"    各サブリポジトリの状態記録が、 親リポジトリにおいてコミットされます。\n"
+"    --addremove オプションも  -S/--subrepos 指定に従いますが、\n"
+"    サブリポジトリが Git または Subversion 形式の場合は、 警告表示の後、\n"
+"    処理を中断します。"
 
 msgid ""
 ":diff: diff does not recurse in subrepos unless -S/--subrepos is\n"
 "    specified. Changes are displayed as usual, on the subrepositories\n"
-"    elements. Git and Subversion subrepositories are currently\n"
-"    silently ignored."
+"    elements. Git subrepositories do not support --include/--exclude.\n"
+"    Subversion subrepositories are currently silently ignored."
 msgstr ""
 ":diff: -S/--subrepos 指定が無い限り、 差分表示は、 \n"
 "    再帰的には実施されません。\n"
 "    サブリポジトリのファイルの差分表示は、 通常の差分表示形式と同じです。\n"
-"    なお、 サブリポジトリが Git または Subversion 形式の場合、 現状では、\n"
-"    何の表示も無しに、 差分表示要求を無視します。"
+"    サブリポジトリが Git 形式の場合、 --include/--exclude は機能しません。\n"
+"    Subversion 形式の場合は、 何の表示も無しに、 差分表示要求を無視します。"
 
 msgid ""
 ":forget: forget currently only handles exact file matches in subrepos.\n"
@@ -23662,6 +23848,20 @@
 "    何の表示も無しに、 状態表示要求を無視します。"
 
 msgid ""
+":remove: remove does not recurse into subrepositories unless\n"
+"    -S/--subrepos is specified.  However, if you specify a file or\n"
+"    directory path in a subrepo, it will be removed even without\n"
+"    -S/--subrepos.  Git and Subversion subrepositories are currently\n"
+"    silently ignored."
+msgstr ""
+":remove: -S/--subrepos 指定が無い限り、 構成管理対象からのファイル除外は、\n"
+"    再帰的には実施されません。 但し、 -S/--subrepos 指定が無くても、\n"
+"    サブリポジトリ中のファイルへのパスが、 直接指定された場合は、\n"
+"    対象ファイルを構成管理対象として登録します。 なお、 サブリポジトリが\n"
+"    Git または Subversion 形式の場合、 現状では、 何の表示も無しに、\n"
+"    登録除外要求を無視します。"
+
+msgid ""
 ":update: update restores the subrepos in the state they were\n"
 "    originally committed in target changeset. If the recorded\n"
 "    changeset is not available in the current subrepository, Mercurial\n"
@@ -24436,7 +24636,7 @@
 msgid "cannot commit merge with missing files"
 msgstr "管理対象ファイルが不在の状況では、マージ結果をコミットできません"
 
-msgid "unresolved merge conflicts (see hg help resolve)"
+msgid "unresolved merge conflicts (see \"hg help resolve\")"
 msgstr "未解消の衝突が残っています (\"hg help resolve\" を参照)"
 
 #, python-format
@@ -24447,10 +24647,19 @@
 msgid "note: commit message saved in %s\n"
 msgstr "備考: コミットログを %s に保存しました\n"
 
+msgid "committing files:\n"
+msgstr "ファイル内容の記録中:\n"
+
 #, python-format
 msgid "trouble committing %s!\n"
 msgstr "%s のコミットに失敗しました!\n"
 
+msgid "committing manifest\n"
+msgstr "管理ファイル一覧の記録中\n"
+
+msgid "committing changelog\n"
+msgstr "変更履歴の記録中\n"
+
 msgid "unexpected response from remote server:"
 msgstr "連携先のサーバから予期しない返信:"
 
@@ -24581,29 +24790,6 @@
 msgstr "管理ファイル一覧の解決中\n"
 
 #, python-format
-msgid "update failed to remove %s: %s!\n"
-msgstr "%s の削除に失敗: %s!\n"
-
-#, python-format
-msgid "getting %s\n"
-msgstr "%s の取得中\n"
-
-msgid "updating"
-msgstr "更新中"
-
-#, python-format
-msgid "getting %s to %s\n"
-msgstr "%s から %s に複製中\n"
-
-#, python-format
-msgid "note: possible conflict - %s was renamed multiple times to:\n"
-msgstr "備考: 衝突の可能性 - %s が複数のファイルに改名されました:\n"
-
-#, python-format
-msgid "note: possible conflict - %s was deleted and renamed to:\n"
-msgstr "備考: 衝突の可能性 - 削除と平行して %s への改名があります:\n"
-
-#, python-format
 msgid "note: merging %s and %s using bids from ancestors %s\n"
 msgstr "備考: 以下の祖先の評価選考を元に %s と %s をマージ中: %s\n"
 
@@ -24634,22 +24820,19 @@
 msgstr "選考終了"
 
 #, python-format
-msgid ""
-"local changed %s which remote deleted\n"
-"use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
-msgstr ""
-"変更したファイル %s が、マージ対象リビジョンで登録除外されています。\n"
-"変更:(c)hanged と登録除外:(d)elete のどちらを採用しますか?$$ &Changed $$ "
-"&Delete"
-
-#, python-format
-msgid ""
-"remote changed %s which local deleted\n"
-"use (c)hanged version or leave (d)eleted?$$ &Changed $$ &Deleted"
-msgstr ""
-"登録除外済みのファイル %s が、マージ対象リビジョンで変更されています。\n"
-"変更:(c)hanged と登録除外:(d)elete のどちらを採用しますか?$$ &Changed $$ "
-"&Deleted"
+msgid "update failed to remove %s: %s!\n"
+msgstr "%s の削除に失敗: %s!\n"
+
+#, python-format
+msgid "getting %s\n"
+msgstr "%s の取得中\n"
+
+msgid "updating"
+msgstr "更新中"
+
+#, python-format
+msgid "getting %s to %s\n"
+msgstr "%s から %s に複製中\n"
 
 msgid "merging with a working directory ancestor has no effect"
 msgstr "作業領域の祖先とのマージは意味がありません"
@@ -24676,6 +24859,32 @@
 msgid "merge or update --check to force update"
 msgstr "マージするか、変更有無の確認付きで更新 (update --check) してください"
 
+#, python-format
+msgid ""
+"local changed %s which remote deleted\n"
+"use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
+msgstr ""
+"変更したファイル %s が、マージ対象リビジョンで登録除外されています。\n"
+"変更:(c)hanged と登録除外:(d)elete のどちらを採用しますか?$$ &Changed $$ "
+"&Delete"
+
+#, python-format
+msgid ""
+"remote changed %s which local deleted\n"
+"use (c)hanged version or leave (d)eleted?$$ &Changed $$ &Deleted"
+msgstr ""
+"登録除外済みのファイル %s が、マージ対象リビジョンで変更されています。\n"
+"変更:(c)hanged と登録除外:(d)elete のどちらを採用しますか?$$ &Changed $$ "
+"&Deleted"
+
+#, python-format
+msgid "note: possible conflict - %s was renamed multiple times to:\n"
+msgstr "備考: 衝突の可能性 - %s が複数のファイルに改名されました:\n"
+
+#, python-format
+msgid "note: possible conflict - %s was deleted and renamed to:\n"
+msgstr "備考: 衝突の可能性 - 削除と平行して %s への改名があります:\n"
+
 msgid "Attention:"
 msgstr "注意:"
 
@@ -24703,6 +24912,20 @@
 msgid "Warning!"
 msgstr "警告!"
 
+#. i18n: column positioning for "hg log"
+#, python-format
+msgid "bookmark:    %s\n"
+msgstr "ブックマーク: %s\n"
+
+#. i18n: column positioning for "hg log"
+#, python-format
+msgid "tag:         %s\n"
+msgstr "タグ:         %s\n"
+
+#, python-format
+msgid "no such name: %s"
+msgstr "指定の名前は存在しません: %s"
+
 #, python-format
 msgid ""
 "parsing obsolete marker: metadata is too short, %d bytes expected, got %d"
@@ -24892,6 +25115,10 @@
 msgstr "シグナル %d で強制終了されました"
 
 #, python-format
+msgid "unknown strip-bundle2-version value %r; "
+msgstr ""
+
+#, python-format
 msgid "saved backup bundle to %s\n"
 msgstr "バックアップのバンドルを %s に保存\n"
 
@@ -24971,6 +25198,14 @@
 msgstr "linkrev -1 なリビジョンを %s に追加しようとしています"
 
 #, python-format
+msgid "node %s is not censored"
+msgstr ""
+
+#, python-format
+msgid "at %s: %s"
+msgstr "文字位置: %s: %s"
+
+#, python-format
 msgid "can't use %s here"
 msgstr "ここでは %s を使用できません"
 
@@ -25032,23 +25267,6 @@
 msgstr "author には文字列を指定してください"
 
 msgid ""
-"``only(set, [set])``\n"
-"    Changesets that are ancestors of the first set that are not ancestors\n"
-"    of any other head in the repo. If a second set is specified, the result\n"
-"    is ancestors of the first set that are not ancestors of the second set\n"
-"    (i.e. ::<set1> - ::<set2>)."
-msgstr ""
-"``only(set1, [set2])``\n"
-"    第1引数リビジョン群の祖先で、 且つ第2引数リビジョン群の祖先でないもの\n"
-"    (::<set1> - ::<set2> と等価)。 第2引数省略時は、 構造的ヘッドの中で、\n"
-"    第1引数とその子孫群に含まれないヘッドが、 比較対象として使用されます。\n"
-"    (※ 訳注: ::<set1> - ::(heads() - heads(<set2>::)) と等価)"
-
-#. i18n: "only" is a keyword
-msgid "only takes one or two arguments"
-msgstr "only の引数は1つまたは2つです"
-
-msgid ""
 "``bisect(string)``\n"
 "    Changesets marked in the specified bisect status:"
 msgstr ""
@@ -25336,6 +25554,12 @@
 "    同一変更の複数実施などは、 検出できません)。  実行性能の高さよりも、\n"
 "    正確な結果が必要な場合は ``file()`` を使用してください。"
 
+msgid ""
+"    If some linkrev points to revisions filtered by the current repoview, "
+"we'll\n"
+"    work around it to return a non-filtered value."
+msgstr ""
+
 #. i18n: "filelog" is a keyword
 msgid "filelog requires a pattern"
 msgstr "filelog にはパターンを指定してください"
@@ -25564,6 +25788,40 @@
 msgstr "modifies にはパターンを指定してください"
 
 msgid ""
+"``named(namespace)``\n"
+"    The changesets in a given namespace."
+msgstr ""
+"``named(namespace)``\n"
+"    指定名前空間に属するリビジョン群。"
+
+msgid ""
+"    If `namespace` starts with `re:`, the remainder of the string is treated "
+"as\n"
+"    a regular expression. To match a namespace that actually starts with `re:"
+"`,\n"
+"    use the prefix `literal:`."
+msgstr ""
+"    `namespace` が `re:` で始まる場合、 残りは正規表現として扱われます。\n"
+"    名前空間名そのものが `re:` で始まる場合は、 名前の先頭に `literal:`\n"
+"    を付けて指定してください。"
+
+#. i18n: "named" is a keyword
+msgid "named requires a namespace argument"
+msgstr "named には名前空間名の引数指定が必要です"
+
+#. i18n: "named" is a keyword
+msgid "the argument to named must be a string"
+msgstr "named には文字列を指定してください"
+
+#, python-format
+msgid "namespace '%s' does not exist"
+msgstr "名前空間 '%s' は存在しません"
+
+#, python-format
+msgid "no namespace exists that match '%s'"
+msgstr "'%s' に合致する名前空間はありません"
+
+msgid ""
 "``id(string)``\n"
 "    Revision non-ambiguously specified by the given hex string prefix."
 msgstr ""
@@ -25591,6 +25849,23 @@
 msgstr "obsolete には引数が指定できません"
 
 msgid ""
+"``only(set, [set])``\n"
+"    Changesets that are ancestors of the first set that are not ancestors\n"
+"    of any other head in the repo. If a second set is specified, the result\n"
+"    is ancestors of the first set that are not ancestors of the second set\n"
+"    (i.e. ::<set1> - ::<set2>)."
+msgstr ""
+"``only(set1, [set2])``\n"
+"    第1引数リビジョン群の祖先で、 且つ第2引数リビジョン群の祖先でないもの\n"
+"    (::<set1> - ::<set2> と等価)。 第2引数省略時は、 構造的ヘッドの中で、\n"
+"    第1引数とその子孫群に含まれないヘッドが、 比較対象として使用されます。\n"
+"    (※ 訳注: ::<set1> - ::(heads() - heads(<set2>::)) と等価)"
+
+#. i18n: "only" is a keyword
+msgid "only takes one or two arguments"
+msgstr "only の引数は1つまたは2つです"
+
+msgid ""
 "``origin([set])``\n"
 "    Changesets that were specified as a source for the grafts, transplants "
 "or\n"
@@ -25923,6 +26198,26 @@
 msgid "not a symbol"
 msgstr "シンボル以外が指定されました"
 
+msgid "'$' not for alias arguments"
+msgstr "エイリアス引数以外での '$' の使用"
+
+msgid "invalid argument list"
+msgstr "引数列指定が不正です"
+
+msgid "argument names collide with each other"
+msgstr "引数名が重複しています"
+
+msgid "invalid format"
+msgstr "不正な記述です"
+
+#, python-format
+msgid "failed to parse the declaration of revset alias \"%s\": %s"
+msgstr "revset 別名 \"%s\" の宣言部分の解析に失敗しました: %s"
+
+#, python-format
+msgid "failed to parse the definition of revset alias \"%s\": %s"
+msgstr "revset 別名 \"%s\" の定義部分の解析に失敗しました: %s"
+
 #, python-format
 msgid "infinite expansion of revset alias \"%s\" detected"
 msgstr "revset 別名定義 \"%s\" は無限に展開されてしまいます"
@@ -25931,6 +26226,10 @@
 msgid "invalid number of arguments: %s"
 msgstr "引数の数が不正です: %s"
 
+#, python-format
+msgid "\"##\" can't concatenate \"%s\" element"
+msgstr "\"##\" 演算子は \"%s\" 要素を結合できません"
+
 msgid "empty query"
 msgstr "問い合わせが空です"
 
@@ -26216,6 +26515,9 @@
 msgid "warning: changes are committed in %s phase from subrepository %s\n"
 msgstr "警告: %s フェーズでコミットします(サブリポジトリ %s に追従)\n"
 
+msgid "addremove is not supported"
+msgstr "addremove はサポートされていません"
+
 #, python-format
 msgid "archiving (%s)"
 msgstr "アーカイブ中 (%s)"
@@ -26688,9 +26990,6 @@
 msgid ":subrepos: List of strings. Updated subrepositories in the changeset."
 msgstr ":subrepos: 文字列挙。 当該リビジョンで更新されたサブリポジトリ名。"
 
-msgid ":tags: List of strings. Any tags associated with the changeset."
-msgstr ":tags: 文字列列挙。 当該リビジョンに付与されたタグの一覧。"
-
 msgid ""
 ":parents: List of strings. The parents of the changeset in \"rev:node\"\n"
 "    format. If the changeset has only one \"natural\" parent (the "
@@ -26846,8 +27145,8 @@
 msgid "couldn't read journal entry %r!\n"
 msgstr "ジャーナルファイル中のエントリ %r の解析に失敗\n"
 
-msgid "journal was created by a newer version of Mercurial"
-msgstr "ジャーナルファイルは新しい Mercurial で作成されたものです"
+msgid "journal was created by a different version of Mercurial"
+msgstr "ジャーナルファイルは異なる版の mercurial で作成されたものです"
 
 msgid "already have changeset "
 msgstr "既にあるリビジョンです "
@@ -27009,8 +27308,8 @@
 msgstr "不正な日付の指定です: %s"
 
 #, python-format
-msgid "%s must be nonnegative (see 'hg help dates')"
-msgstr "%s には正の値を指定してください ('hg help dates' 参照)"
+msgid "%s must be nonnegative (see \"hg help dates\")"
+msgstr "%s には正の値を指定してください (\"hg help dates\" 参照)"
 
 #, python-format
 msgid "%.0f GB"
@@ -27235,7 +27534,7 @@
 msgstr "展開後サイズ %s は想定外です(期待値:%s)"
 
 msgid "censored file data"
-msgstr "検閲されたファイルデータ"
+msgstr ""
 
 #, python-format
 msgid "unpacking %s"
@@ -27292,3 +27591,6 @@
 
 msgid "number of cpus must be an integer"
 msgstr "CPU 数には数値を指定してください"
+
+msgid ":tags: List of strings. Any tags associated with the changeset."
+msgstr ":tags: 文字列列挙。 当該リビジョンに付与されたタグの一覧。"
--- a/i18n/pt_BR.po	Sat Jan 17 22:01:14 2015 -0200
+++ b/i18n/pt_BR.po	Mon Feb 02 12:50:48 2015 -0600
@@ -31,17 +31,17 @@
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
-"POT-Creation-Date: 2014-07-20 13:25-0300\n"
-"PO-Revision-Date: 2014-01-25 23:15-0200\n"
-"Last-Translator: Leonardo Bueno Postacchini <notivago@gmail.com>\n"
-"Language-Team: Brazilian Portuguese\n"
+"POT-Creation-Date: 2015-01-18 11:13-0200\n"
+"PO-Revision-Date: 2015-01-18 11:15-0200\n"
+"Last-Translator: Wagner Bruna <wbruna@softwareexpress.com.br>\n"
+"Language-Team: en_US <>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Generated-By: pygettext.py 1.5\n"
 "Language: pt_BR\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 1.6.3\n"
+"X-Generator: Lokalize 1.5\n"
 
 msgid "VALUE"
 msgstr "VALOR"
@@ -2991,6 +2991,11 @@
 "ou posterior"
 
 #, python-format
+msgid "%s does not look like a Subversion repository to libsvn version %s"
+msgstr ""
+"%s não parece ser um repositório do Subversion para a libsvn versão %s"
+
+#, python-format
 msgid "svn: revision %s is not an integer"
 msgstr "svn: revisão %s não é um inteiro"
 
@@ -3338,18 +3343,15 @@
 "  #opts.cdiff = -Nprc5"
 
 msgid ""
-"  # add new command called vdiff, runs kdiff3\n"
-"  vdiff = kdiff3"
-msgstr ""
-"  # adiciona um novo comando chamado vdiff, executa o kdiff3\n"
-"  vdiff = kdiff3"
-
-msgid ""
-"  # add new command called meld, runs meld (no need to name twice)\n"
+"  # add new command called meld, runs meld (no need to name twice).  If\n"
+"  # the meld executable is not available, the meld tool in [merge-tools]\n"
+"  # will be used, if available\n"
 "  meld ="
 msgstr ""
-"  # adiciona um novo comando chamado meld, executa o meld\n"
-"  # (não é necessário nomeá-lo duas vezes)\n"
+"  # adiciona um novo comando chamado meld, que executa meld (não\n"
+"  # é necessário repetir o nome). Se o executável meld não estiver\n"
+"  # disponível, será usada a ferramenta de mesclagem meld em\n"
+"  # [merge-tools], se disponível\n"
 "  meld ="
 
 msgid ""
@@ -3571,6 +3573,9 @@
 msgid "factotum not interactive"
 msgstr "factotum não é interativo"
 
+msgid "malformed password string"
+msgstr "string de senha malformada"
+
 msgid "factotum not responding"
 msgstr "factotum não está respondendo"
 
@@ -5397,6 +5402,9 @@
 msgid "found %s in system cache\n"
 msgstr "encontrado %s no cache do sistema\n"
 
+msgid "finding outgoing largefiles"
+msgstr "encontrando largefiles a serem enviados"
+
 msgid "can't get file locally"
 msgstr "não é possível obter o arquivo localmente"
 
@@ -5416,9 +5424,6 @@
 msgid "adding %s as a largefile\n"
 msgstr "adicionando %s como largefile\n"
 
-msgid "no files specified"
-msgstr "nenhum arquivo especificado"
-
 #, python-format
 msgid "not removing %s: file still exists\n"
 msgstr "arquivo %s não removido: o arquivo ainda existe\n"
@@ -7696,14 +7701,65 @@
 "to be a sendmail compatible mailer or fill out the [smtp] section so\n"
 "that the patchbomb extension can automatically send patchbombs\n"
 "directly from the commandline. See the [email] and [smtp] sections in\n"
-"hgrc(5) for details.\n"
+"hgrc(5) for details."
 msgstr ""
 "Você também pode tanto configurar a opção method na seção email\n"
 "para um programa de envio de e-mails compatível com o sendmail\n"
 "como preencher a seção [smtp] para que a extensão patchbomb possa\n"
 "automaticamente enviar patchbombs diretamente da linha de comando.\n"
 "Veja as seções [email] e [smtp] na página de manual hgrc(5) para\n"
-"mais detalhes.\n"
+"mais detalhes."
+
+msgid ""
+"You can control the default inclusion of an introduction message with the\n"
+"``patchbomb.intro`` configuration option. The configuration is always\n"
+"overwritten by command line flags like --intro and --desc::"
+msgstr ""
+"Você pode controlar a inclusão da mensagem introdutória com a opção de "
+"configuração ``patchbomb.intro``. A configuração é sempre sobreposta por "
+"opções de linha de comando como --intro e --desc::"
+
+msgid ""
+"  [patchbomb]\n"
+"  intro=auto   # include introduction message if more than 1 patch (default)\n"
+"  intro=never  # never include an introduction message\n"
+"  intro=always # always include an introduction message"
+msgstr ""
+"  [patchbomb]\n"
+"  intro=auto   # inclua uma mensagem introdutória se houver mais                # de 1 patch (padrão)\n"
+"  intro=never  # nunca inclua uma mensagem introdutória\n"
+"  intro=always # sempre inclua uma mensagem introdutória"
+
+msgid ""
+"You can set patchbomb to always ask for confirmation by setting\n"
+"``patchbomb.confirm`` to true.\n"
+msgstr ""
+"Você pode configurar a patchbomb para sempre pedir confirmação\n"
+"definindo ``patchbomb.confirm`` como \"true\".\n"
+
+#, python-format
+msgid "warning: invalid patchbomb.intro value \"%s\"\n"
+msgstr "aviso: valor inválido para patchbomb.intro: \"%s\"\n"
+
+msgid "(should be one of always, never, auto)\n"
+msgstr "(deve ser \"always\", \"never\" ou \"auto\")\n"
+
+msgid "warning: working directory has uncommitted changes\n"
+msgstr "aviso: o diretório de trabalho contém mudanças não consolidadas\n"
+
+msgid ""
+"\n"
+"Write the introductory message for the patch series."
+msgstr ""
+"\n"
+"Escreva a mensagem introdutória para a série de patches."
+
+#, python-format
+msgid "this patch series consists of %d patches."
+msgstr "esta série de patches consiste de %d patches."
+
+msgid "no changes found\n"
+msgstr "nenhuma alteração encontrada\n"
 
 msgid "send patches as inline message text (default)"
 msgstr "envia patches como texto no corpo da mensagem (padrão)"
@@ -7900,6 +7956,13 @@
 "    mensagem introdutória da séria será gravada em ``.hg/last-email.txt``."
 
 msgid ""
+"    The default behavior of this command can be customized through\n"
+"    configuration. (See :hg:`help patchbomb` for details)"
+msgstr ""
+"    O comportamento padrão deste comando pode ser personalizado\n"
+"    através de opções de configuração.     (Veja :hg:`help patchbomb` para mais detalhes)"
+
+msgid ""
 "      hg email -r 3000          # send patch 3000 only\n"
 "      hg email -r 3000 -r 3001  # send patches 3000 and 3001\n"
 "      hg email -r 3000:3005     # send patches 3000 through 3005\n"
@@ -7962,12 +8025,6 @@
 "    seu hgrc. Veja a seção [email] em hgrc(5) para mais detalhes.\n"
 "    "
 
-msgid "no changes found\n"
-msgstr "nenhuma alteração encontrada\n"
-
-msgid "warning: working directory has uncommitted changes\n"
-msgstr "aviso: o diretório de trabalho contém mudanças não consolidadas\n"
-
 msgid "specify at least one changeset with -r or -o"
 msgstr "especifique ao menos uma revisão com -r ou -o"
 
@@ -7981,17 +8038,6 @@
 msgid "use only one form to specify the revision"
 msgstr "use apenas uma forma de especificar a revisão"
 
-msgid ""
-"\n"
-"Write the introductory message for the patch series."
-msgstr ""
-"\n"
-"Escreva a mensagem introdutória para a série de patches."
-
-#, python-format
-msgid "this patch series consists of %d patches."
-msgstr "esta série de patches consiste de %d patches."
-
 msgid "no recipient addresses provided"
 msgstr "nenhum endereço de destinatário fornecido"
 
@@ -8466,10 +8512,10 @@
 
 msgid ""
 "interactive history editing is supported by the 'histedit' extension (see "
-"'hg help histedit')"
+"\"hg help histedit\")"
 msgstr ""
 "a edição interativa de histórico é suportada pela extensão histedit (veja "
-"'hg help histedit')"
+"\"hg help histedit\")"
 
 msgid "message can only be specified with collapse"
 msgstr "a mensagem só pode ser especificada ao usar --collapse"
@@ -8556,9 +8602,6 @@
 msgid "can't rebase immutable changeset %s"
 msgstr "não é possível rebasear a revisão imutável %s"
 
-msgid "see hg help phases for details"
-msgstr "veja hg help phases para mais detalhes"
-
 #, python-format
 msgid "reopening closed branch head %s\n"
 msgstr "reabrindo cabeça de ramo fechada %s\n"
@@ -8566,6 +8609,10 @@
 msgid "cannot collapse multiple named branches"
 msgstr "não é possível colapsar múltiplos ramos nomeados"
 
+#, python-format
+msgid "rebasing %s\n"
+msgstr "rebaseando %s\n"
+
 msgid "rebasing"
 msgstr "rebaseando"
 
@@ -8578,8 +8625,16 @@
 "--continue)"
 
 #, python-format
-msgid "no changes, revision %d skipped\n"
-msgstr "nenhuma mudança, revisão %d omitida\n"
+msgid "note: rebase of %d:%s created no changes to commit\n"
+msgstr "nota: o rebaseamento de %d:%s não criou mudanças a serem consolidadas\n"
+
+#, python-format
+msgid "not rebasing ignored %s\n"
+msgstr "não rebaseando revisão ignorada %s\n"
+
+#, python-format
+msgid "already rebased %s as %s\n"
+msgstr "revisão %s já rebaseada como %s\n"
 
 msgid "rebase merging completed\n"
 msgstr "mesclagem de rebaseamento completada\n"
@@ -8603,6 +8658,10 @@
 msgid "cannot use revision %d as base, result would have 3 parents"
 msgstr "não se pode usar a revisão %d como base, o resultado teria 3 pais"
 
+#, python-format
+msgid "updating mq patch %s to %s:%s\n"
+msgstr "atualizando patch mq %s para %s:%s\n"
+
 msgid ".hg/rebasestate is incomplete"
 msgstr ".hg/rebasestate está incompleto"
 
@@ -9028,18 +9087,22 @@
 msgid "do not create a working copy"
 msgstr "não cria uma cópia de trabalho"
 
-msgid "[-U] SOURCE [DEST]"
-msgstr "[-U] ORIGEM [DEST]"
+msgid "also share bookmarks"
+msgstr "compartilha também marcadores"
+
+msgid "[-U] [-B] SOURCE [DEST]"
+msgstr "[-U] [-B] ORIGEM [DEST]"
 
 msgid "create a new shared repository"
 msgstr "cria um novo repositório compartilhado"
 
 msgid ""
 "    Initialize a new repository and working directory that shares its\n"
-"    history with another repository."
+"    history (and optionally bookmarks) with another repository."
 msgstr ""
 "    Inicializa um novo repositório e diretório de trabalho que\n"
-"    compartilha seu histórico com outro repositório."
+"    compartilha seu histórico (e opcionalmente marcadores) com\n"
+"    outro repositório."
 
 msgid ""
 "       using rollback or extensions that destroy/modify history (mq,\n"
@@ -9371,7 +9434,7 @@
 msgid "use 'hg unshelve --continue' or 'hg unshelve --abort'"
 msgstr "use 'hg unshelve --continue' ou 'hg unshelve --abort'"
 
-msgid "strip changesets and their descendents from history"
+msgid "strip changesets and their descendants from history"
 msgstr "remove do histórico revisões e seus descendentes"
 
 msgid ""
@@ -9550,6 +9613,10 @@
 msgid "%s transplanted as %s\n"
 msgstr "%s transplantado em %s\n"
 
+#, python-format
+msgid "%s skipped due to empty diff\n"
+msgstr "%s omitida por um diff vazio\n"
+
 msgid "transplant log file is corrupt"
 msgstr "arquivo de log de transplante corrompido"
 
@@ -10117,17 +10184,35 @@
 msgid "invalid chunk length %d"
 msgstr "comprimento de trecho inválido %d"
 
+msgid "Bundle1 only supports v1 changegroups\n"
+msgstr "Bundle1 suporta apenas changegroups v1\n"
+
 msgid "bundling"
 msgstr "criando bundle"
 
+msgid "uncompressed size of bundle content:\n"
+msgstr "tamanho não comprimido do conteúdo do bundle:\n"
+
+#, python-format
+msgid "%8.i (changelog)\n"
+msgstr "%8.i (changelog)\n"
+
 msgid "manifests"
 msgstr "manifestos"
 
 #, python-format
+msgid "%8.i (manifests)\n"
+msgstr "%8.i (manifestos)\n"
+
+#, python-format
 msgid "empty or missing revlog for %s"
 msgstr "revlog vazio ou não encontrado para %s"
 
 #, python-format
+msgid "%8.i  %s\n"
+msgstr "%8.i  %s\n"
+
+#, python-format
 msgid "%d changesets found\n"
 msgstr "%d revisões encontradas\n"
 
@@ -10316,16 +10401,6 @@
 
 #. 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"
-
-#. i18n: column positioning for "hg log"
-#, python-format
 msgid "phase:       %s\n"
 msgstr "fase:         %s\n"
 
@@ -10428,6 +10503,18 @@
 msgstr "desconsiderando sub-repositório faltando: %s\n"
 
 #, python-format
+msgid "not removing %s: no tracked files\n"
+msgstr "%s não removido: nenhum arquivo rastreado\n"
+
+#, python-format
+msgid "not removing %s: file is untracked\n"
+msgstr "arquivo %s não removido: arquivo não rastreado\n"
+
+msgid "failed to mark all new/missing files as added/removed"
+msgstr ""
+"falha ao marcar todos os arquivos novos/ausentes como adicionados/removidos"
+
+#, python-format
 msgid "amending changeset %s\n"
 msgstr "emendando revisão %s\n"
 
@@ -10659,6 +10746,9 @@
 msgid "ignore changes whose lines are all blank"
 msgstr "ignora mudanças cujas linhas sejam todas brancas"
 
+msgid "omit a/ and b/ prefixes from filenames"
+msgstr "omite prefixos a/ e b/ dos nomes dos arquivos"
+
 msgid "show which function each change is in"
 msgstr "mostra em qual função está cada mudança"
 
@@ -10947,6 +11037,9 @@
 msgid "merge with old dirstate parent after backout"
 msgstr "mesclar com pai do dirstate anterior após o backout"
 
+msgid "commit if no conflicts were encountered"
+msgstr "consolida se conflitos não forem encontrados"
+
 msgid "parent to choose when backing out merge (DEPRECATED)"
 msgstr "pai a ser escolhido ao fazer o backout de mesclagem (OBSOLETO)"
 
@@ -11470,11 +11563,10 @@
 
 msgid ""
 "    Unless -f/--force is specified, branch will not let you set a\n"
-"    branch name that already exists, even if it's inactive."
+"    branch name that already exists."
 msgstr ""
 "    A não ser que -f/--force seja especificado, o comando branch não\n"
-"    deixará você definir um nome de ramo que já existe, mesmo que\n"
-"    tal ramo esteja inativo."
+"    deixará você definir um nome de ramo que já existe."
 
 msgid ""
 "    Use -C/--clean to reset the working directory branch to that of\n"
@@ -11514,8 +11606,8 @@
 "(ramos nomeados são permanentes e globais, use um bookmark para um marcador "
 "não permanente)\n"
 
-msgid "show only branches that have unmerged heads"
-msgstr "mostra apenas ramos que possuem cabeças não mescladas"
+msgid "show only branches that have unmerged heads (DEPRECATED)"
+msgstr "mostra apenas ramos que possuem cabeças não mescladas (OBSOLETO)"
 
 msgid "show normal and closed branches"
 msgstr "mostra ramos normais e fechados"
@@ -11535,13 +11627,6 @@
 "    inativos. Se -c/--closed for especificado, exibe também ramos\n"
 "    marcados como fechados (veja :hg:`commit --close-branch`)."
 
-msgid ""
-"    If -a/--active is specified, only show active branches. A branch\n"
-"    is considered active if it contains repository heads."
-msgstr ""
-"    Se -a/--active for especificado, mostra apenas ramos ativos. Um\n"
-"    ramo é considerado ativo se contém cabeças de repositório."
-
 msgid "    Use the command :hg:`update` to switch to an existing branch."
 msgstr "    Use o comando :hg:`update` para trocar para um ramo existente."
 
@@ -12224,6 +12309,12 @@
 msgid "lists the contents of a bundle"
 msgstr "lista o conteúdo de um bundle"
 
+msgid "use debugbundle2 for this file"
+msgstr "usa debugbundle2 para este arquivo"
+
+msgid "not a bundle2 file"
+msgstr "não é um arquivo bundle2"
+
 msgid "validate the correctness of the current dirstate"
 msgstr "valida a exatidão do dirstate atual"
 
@@ -12486,10 +12577,17 @@
 msgid "LABEL..."
 msgstr "RÓTULO..."
 
-msgid "complete \"labels\" - tags, open branch names, bookmark names"
-msgstr ""
-"completa \"rótulos\" - etiquetas, nomes de ramos abertos, nomes de "
-"marcadores"
+msgid "backwards compatibility with old bash completion scripts (DEPRECATED)"
+msgstr ""
+"compatibilidade retroativa com antigos scripts bash de completação "
+"(OBSOLETA)"
+
+msgid "NAME..."
+msgstr "NOME..."
+
+msgid "complete \"names\" - tags, open branch names, bookmark names"
+msgstr ""
+"completa \"nomes\" - etiquetas, nomes de ramos abertos, nomes de marcadores"
 
 msgid "free the store lock (DANGEROUS)"
 msgstr "libera o lock do store (PERIGOSO)"
@@ -13146,6 +13244,9 @@
 msgid "          hg forget \"set:hgignore()\""
 msgstr "          hg forget \"set:hgignore()\""
 
+msgid "no files specified"
+msgstr "nenhum arquivo especificado"
+
 msgid "revisions to graft"
 msgstr "revisões a serem enxertadas"
 
@@ -13281,36 +13382,39 @@
 msgstr "omitindo revisão de mesclagem %s que não pode ser enxertada\n"
 
 #, python-format
-msgid "skipping ancestor revision %s\n"
-msgstr "omitindo revisão ancestral %s\n"
-
-#, python-format
-msgid "skipping revision %s (already grafted to %s)\n"
-msgstr "omitindo revisão %s (já enxertada em %s)\n"
-
-#, python-format
-msgid "skipping already grafted revision %s (%s also has unknown origin %s)\n"
-msgstr ""
-"omitindo revisão %s já enxertada (%s também tem origem desconhecida %s)\n"
-
-#, python-format
-msgid "skipping already grafted revision %s (%s also has origin %d)\n"
-msgstr "omitindo revisão %s já enxertada (%s também tem como origem %d)\n"
-
-#, python-format
-msgid "skipping already grafted revision %s (was grafted from %d)\n"
-msgstr "omitindo revisão %s já enxertada (foi enxertada de %d)\n"
-
-#, python-format
-msgid "grafting revision %s\n"
-msgstr "enxertando revisão %s\n"
+msgid "skipping ancestor revision %d:%s\n"
+msgstr "omitindo revisão ancestral %d:%s\n"
+
+#, python-format
+msgid "skipping revision %d:%s (already grafted to %d:%s)\n"
+msgstr "omitindo revisão %d:%s (já enxertada em %d:%s)\n"
+
+#, python-format
+msgid ""
+"skipping already grafted revision %d:%s (%d:%s also has unknown origin %s)\n"
+msgstr ""
+"omitindo revisão %d:%s já enxertada (%d:%s também tem origem desconhecida "
+"%s)\n"
+
+#, python-format
+msgid "skipping already grafted revision %d:%s (%d:%s also has origin %d:%s)\n"
+msgstr ""
+"omitindo revisão %d:%s já enxertada (%d:%s também tem como origem %d:%s)\n"
+
+#, python-format
+msgid "skipping already grafted revision %d:%s (was grafted from %d:%s)\n"
+msgstr "omitindo revisão %d:%s já enxertada (foi enxertada de %d:%s)\n"
+
+#, python-format
+msgid "grafting %s\n"
+msgstr "enxertando %s\n"
 
 msgid "use hg resolve and hg graft --continue"
 msgstr "use hg resolve e hg graft --continue"
 
 #, python-format
-msgid "graft for revision %s is empty\n"
-msgstr "o enxerto para a revisão %s é vazio\n"
+msgid "note: graft of %d:%s created no changes to commit\n"
+msgstr "nota: o enxerto de %d:%s não gerou mudanças a serem consolidadas\n"
 
 msgid "end fields with NUL"
 msgstr "termina campos com NUL"
@@ -14707,14 +14811,6 @@
 "    Devolve 0 para indicar sucesso, 1 se algum aviso for encontrado.\n"
 "    "
 
-#, python-format
-msgid "not removing %s: no tracked files\n"
-msgstr "%s não removido: nenhum arquivo rastreado\n"
-
-#, python-format
-msgid "not removing %s: file is untracked\n"
-msgstr "arquivo %s não removido: arquivo não rastreado\n"
-
 msgid "record a rename that has already occurred"
 msgstr "grava uma renomeação que já ocorreu"
 
@@ -16270,6 +16366,9 @@
 msgid "push includes divergent changeset: %s!"
 msgstr "push inclui uma revisão divergente: %s!"
 
+msgid "no common changegroup version"
+msgstr "nenhuma versão de changegroup em comum"
+
 #, python-format
 msgid "server ignored update of %s to public!\n"
 msgstr "o servidor ignorou a atualização de %s para a fase 'public'!\n"
@@ -16948,6 +17047,14 @@
 #, python-format
 msgid ""
 "\n"
+"(use \"hg help -v -e %s\" to show built-in aliases and global options)\n"
+msgstr ""
+"\n"
+"(use \"hg help -v -e %s\" para mostrar apelidos pré-definidos de comandos e opções globais)\n"
+
+#, python-format
+msgid ""
+"\n"
 "(use \"hg help -v%s\" to show built-in aliases and global options)\n"
 msgstr ""
 "\n"
@@ -17101,14 +17208,16 @@
 "  - ``<install-root>/etc/mercurial/hgrc`` (per-installation)\n"
 "  - ``<install-root>/etc/mercurial/hgrc.d/*.rc`` (per-installation)\n"
 "  - ``/etc/mercurial/hgrc`` (per-system)\n"
-"  - ``/etc/mercurial/hgrc.d/*.rc`` (per-system)"
+"  - ``/etc/mercurial/hgrc.d/*.rc`` (per-system)\n"
+"  - ``<internal>/default.d/*.rc`` (defaults)"
 msgstr ""
 "  - ``<repo>/.hg/hgrc`` (por repositório)\n"
 "  - ``$HOME/.hgrc`` (por usuário)\n"
 "  - ``<install-root>/etc/mercurial/hgrc`` (por instalação)\n"
 "  - ``<install-root>/etc/mercurial/hgrc.d/*.rc`` (por instalação)\n"
 "  - ``/etc/mercurial/hgrc`` (por sistema)\n"
-"  - ``/etc/mercurial/hgrc.d/*.rc`` (por sistema)"
+"  - ``/etc/mercurial/hgrc.d/*.rc`` (por sistema)\n"
+"  - ``<interno>/default.d/*.rc`` (padrões)"
 
 msgid "  On Windows, the following files are consulted:"
 msgstr "  Em Windows, os seguintes arquivos são consultados:"
@@ -17121,7 +17230,8 @@
 "  - ``%HOME%\\Mercurial.ini`` (per-user)\n"
 "  - ``<install-dir>\\Mercurial.ini`` (per-installation)\n"
 "  - ``<install-dir>\\hgrc.d\\*.rc`` (per-installation)\n"
-"  - ``HKEY_LOCAL_MACHINE\\SOFTWARE\\Mercurial`` (per-installation)"
+"  - ``HKEY_LOCAL_MACHINE\\SOFTWARE\\Mercurial`` (per-installation)\n"
+"  - ``<internal>/default.d/*.rc`` (defaults)"
 msgstr ""
 "  - ``<repo>/.hg/hgrc`` (por repositório)\n"
 "  - ``%USERPROFILE%\\.hgrc`` (por usuário)\n"
@@ -17130,7 +17240,8 @@
 "  - ``%HOME%\\Mercurial.ini`` (por usuário)\n"
 "  - ``<install-dir>\\Mercurial.ini`` (por instalação)\n"
 "  - ``<install-dir>\\hgrc.d\\*.rc`` (por instalação)\n"
-"  - ``HKEY_LOCAL_MACHINE\\SOFTWARE\\Mercurial`` (por instalação)"
+"  - ``HKEY_LOCAL_MACHINE\\SOFTWARE\\Mercurial`` (por instalação)\n"
+"  - ``<interno>/default.d/*.rc`` (padrões)"
 
 msgid ""
 "   The registry key ``HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Mercurial``\n"
@@ -17148,14 +17259,16 @@
 "  - ``<install-root>/lib/mercurial/hgrc`` (per-installation)\n"
 "  - ``<install-root>/lib/mercurial/hgrc.d/*.rc`` (per-installation)\n"
 "  - ``/lib/mercurial/hgrc`` (per-system)\n"
-"  - ``/lib/mercurial/hgrc.d/*.rc`` (per-system)"
+"  - ``/lib/mercurial/hgrc.d/*.rc`` (per-system)\n"
+"  - ``<internal>/default.d/*.rc`` (defaults)"
 msgstr ""
 "  - ``<repo>/.hg/hgrc`` (por repositório)\n"
 "  - ``$home/lib/hgrc`` (por usuário)\n"
 "  - ``<install-root>/lib/mercurial/hgrc`` (por instalação)\n"
 "  - ``<install-root>/lib/mercurial/hgrc.d/*.rc`` (por instalação)\n"
 "  - ``/lib/mercurial/hgrc`` (por sistema)\n"
-"  - ``/lib/mercurial/hgrc.d/*.rc`` (por sistema)"
+"  - ``/lib/mercurial/hgrc.d/*.rc`` (por sistema)\n"
+"  - ``<interno>/default.d/*.rc`` (padrões)"
 
 msgid ""
 "Per-repository configuration options only apply in a\n"
@@ -17237,6 +17350,22 @@
 "diretório. Opções nestes arquivos sobrepõe opções por instalação."
 
 msgid ""
+"Mercurial comes with some default configuration. The default configuration\n"
+"files are installed with Mercurial and will be overwritten on upgrades. Default\n"
+"configuration files should never be edited by users or administrators but can\n"
+"be overridden in other configuration files. So far the directory only contains\n"
+"merge tool configuration but packagers can also put other default configuration\n"
+"there."
+msgstr ""
+"O Mercurial é instalado com alguns arquivos de configuração padrão,\n"
+"que são substituídos em atualizações. Esses arquivos não devem ser\n"
+"editados por usuários ou administradores, mas podem ser sobrepostos\n"
+"por outros arquivos de configuração. Por enquanto, o diretório contém\n"
+"apenas configurações para ferramentas de mesclagem, mas outros\n"
+"arquivos para configuração padrão podem ser acrescentados por\n"
+"distribuidores."
+
+msgid ""
 "Syntax\n"
 "======"
 msgstr ""
@@ -18183,6 +18312,13 @@
 "    Não inclui datas nos cabeçalhos de diff."
 
 msgid ""
+"``noprefix``\n"
+"    Omit 'a/' and 'b/' prefixes from filenames. Ignored in plain mode."
+msgstr ""
+"``noprefix``\n"
+"    Omite os prefixos 'a/' e 'b/' dos nomes de arquivo. Ignorada em modo plain."
+
+msgid ""
 "``showfunc``\n"
 "    Show which function each change is in."
 msgstr ""
@@ -19906,16 +20042,18 @@
 msgid ""
 "``ignore``\n"
 "    A file to read per-user ignore patterns from. This file should be\n"
-"    in the same format as a repository-wide .hgignore file. This\n"
-"    option supports hook syntax, so if you want to specify multiple\n"
-"    ignore files, you can do so by setting something like\n"
-"    ``ignore.other = ~/.hgignore2``. For details of the ignore file\n"
-"    format, see the ``hgignore(5)`` man page."
+"    in the same format as a repository-wide .hgignore file. Filenames\n"
+"    are relative to the repository root. This option supports hook syntax,\n"
+"    so if you want to specify multiple ignore files, you can do so by\n"
+"    setting something like ``ignore.other = ~/.hgignore2``. For details\n"
+"    of the ignore file format, see the ``hgignore(5)`` man page."
 msgstr ""
 "``ignore``\n"
 "    Um arquivo contendo listas de padrões de arquivos a serem ignorados\n"
 "    para o usuário. Este arquivo deve estar no mesmo formato de um\n"
-"    arquivo .hgignore de um repositório. Esta opção suporta sintaxe\n"
+"    arquivo .hgignore de um repositório.\n"
+"    Nomes de arquivo são relativos ao raiz do repositório.\n"
+"    Esta opção suporta sintaxe\n"
 "    semelhante a ganchos, de modo que múltiplos arquivos hgignore podem\n"
 "    ser especificados de modo semelhante a\n"
 "    ``ignore.other = ~/.hgignore2``. Para detalhes do formato de arquivo\n"
@@ -23823,6 +23961,37 @@
 "defines três apelidos, ``h``, ``d`` e ``rs``. ``rs(0:tip, author)`` é\n"
 "exatamente equivalente a ``reverse(sort(0:tip, author))``."
 
+msgid ""
+"An infix operator ``##`` can concatenate strings and identifiers into\n"
+"one string. For example::"
+msgstr ""
+"Um operador infixo ``##`` pode concatenar strings e identificadores\n"
+"para formar outra string. Por exemplo::"
+
+msgid ""
+"  [revsetalias]\n"
+"  issue($1) = grep(r'\\bissue[ :]?' ## $1 ## r'\\b|\\bbug\\(' ## $1 ## r'\\)')"
+msgstr ""
+"  [revsetalias]\n"
+"  issue($1) = grep(r'\\bissue[ :]?' ## $1 ## r'\\b|\\bbug\\(' ## $1 ## r'\\)')"
+
+msgid ""
+"``issue(1234)`` is equivalent to ``grep(r'\\bissue[ :]?1234\\b|\\bbug\\(1234\\)')``\n"
+"in this case. This matches against all of \"issue 1234\", \"issue:1234\",\n"
+"\"issue1234\" and \"bug(1234)\"."
+msgstr ""
+"``issue(1234)`` é equivalente a ``grep(r'\\bissue[ :]?1234\\b|\\bbug\\(1234\\)')``\n"
+"nesse caso. Essa expressão corresponde a \"issue 1234\", \"issue:1234\",\n"
+"\"issue1234\" e \"bug(1234)\"."
+
+msgid ""
+"All other prefix, infix and postfix operators have lower priority than\n"
+"``##``. For example, ``$1 ## $2~2`` is equivalent to ``($1 ## $2)~2``."
+msgstr ""
+"Todos os outros operadores prefixos, infixos e posfixos têm menor\n"
+"prioridade que ``##``. Por exemplo, ``$1 ## $2~2`` é equivalente\n"
+"a ``($1 ## $2)~2``."
+
 msgid "Command line equivalents for :hg:`log`::"
 msgstr "Opções de linha de comando equivalentes para :hg:`log`::"
 
@@ -24081,6 +24250,22 @@
 "    silenciosamente ignorados."
 
 msgid ""
+":addremove: addremove does not recurse into subrepos unless\n"
+"    -S/--subrepos is specified.  However, if you specify the full\n"
+"    path of a directory in a subrepo, addremove will be performed on\n"
+"    it even without -S/--subrepos being specified.  Git and\n"
+"    Subversion subrepositories will print a warning and continue."
+msgstr ""
+":addremove: addremove não é executado recursivamente em\n"
+"    sub-repositórios, a não ser que -S/--subrepos seja\n"
+"    especificado. No entanto, se for especificado o caminho\n"
+"    completo de um diretório em um sub-repositório, addremove\n"
+"    será realizado nele mesmo que -S/--subrepos não seja\n"
+"    passado.\n"
+"    Sub-repositórios do Subversion e do Git não suportam essa\n"
+"    opção: um aviso será emitido, e o comando continuará."
+
+msgid ""
 ":archive: archive does not recurse in subrepositories unless\n"
 "    -S/--subrepos is specified."
 msgstr ""
@@ -24104,7 +24289,9 @@
 "    -S/--subrepos, or setting \"ui.commitsubrepos=True\" in a\n"
 "    configuration file (see :hg:`help config`).  After there are no\n"
 "    longer any modified subrepositories, it records their state and\n"
-"    finally commits it in the parent repository."
+"    finally commits it in the parent repository.  The --addremove\n"
+"    option also honors the -S/--subrepos option.  However, Git and\n"
+"    Subversion subrepositories will print a warning and abort."
 msgstr ""
 ":commit: commit cria uma referência consistente do estado do\n"
 "    projeto e seus sub-repositórios como um todo. O Mercurial\n"
@@ -24115,18 +24302,24 @@
 "    configuração (veja :hg:`help config`).\n"
 "    Assim que não houver mais sub-repositórios modificados,\n"
 "    seus estados serão gravados, e finalmente o commit será\n"
-"    realizado no repositório pai."
+"    realizado no repositório pai.\n"
+"    A opção --addremove leva em conta a opção -S/--subrepos.\n"
+"    No entanto, sub-repositórios do Git e Subversion\n"
+"    não suportam essa opção: um aviso será emitido, e o\n"
+"    comando será abortado."
 
 msgid ""
 ":diff: diff does not recurse in subrepos unless -S/--subrepos is\n"
 "    specified. Changes are displayed as usual, on the subrepositories\n"
-"    elements. Git and Subversion subrepositories are currently\n"
-"    silently ignored."
+"    elements. Git subrepositories do not support --include/--exclude.\n"
+"    Subversion subrepositories are currently silently ignored."
 msgstr ""
 ":diff: diff não é executado recursivamente em sub-repositórios, a não\n"
 "    ser que -S/--subrepos seja especificado. As mudanças são exibidas\n"
 "    normalmente nos sub-repositórios do Mercurial. Sub-repositórios do\n"
-"    Subversion e do Git são no momento silenciosamente ignorados."
+"    Git não suportam --include/--exclude.\n"
+"    Sub-repositórios do Subversion são no momento silenciosamente\n"
+"    ignorados."
 
 msgid ""
 ":forget: forget currently only handles exact file matches in subrepos.\n"
@@ -24202,6 +24395,21 @@
 "    silenciosamente ignorados."
 
 msgid ""
+":remove: remove does not recurse into subrepositories unless\n"
+"    -S/--subrepos is specified.  However, if you specify a file or\n"
+"    directory path in a subrepo, it will be removed even without\n"
+"    -S/--subrepos.  Git and Subversion subrepositories are currently\n"
+"    silently ignored."
+msgstr ""
+":remove: remove não é executado recursivamente em sub-repositórios,\n"
+"    a não ser que -S/--subrepos seja especificado. No entanto, se\n"
+"    for especificado o caminho completo de um arquivo ou\n"
+"    diretório em um sub-repositório, ele será removido mesmo que\n"
+"    -S/--subrepos não seja passado.\n"
+"    Sub-repositórios do Subversion e do Git são no momento\n"
+"    silenciosamente ignorados."
+
+msgid ""
 ":update: update restores the subrepos in the state they were\n"
 "    originally committed in target changeset. If the recorded\n"
 "    changeset is not available in the current subrepository, Mercurial\n"
@@ -24993,8 +25201,8 @@
 msgid "cannot commit merge with missing files"
 msgstr "não se pode consolidar uma mesclagem com arquivos ausentes"
 
-msgid "unresolved merge conflicts (see hg help resolve)"
-msgstr "conflitos de mesclagem não resolvidos (veja hg help resolve)"
+msgid "unresolved merge conflicts (see \"hg help resolve\")"
+msgstr "conflitos de mesclagem não resolvidos (veja \"hg help resolve\")"
 
 #, python-format
 msgid "committing subrepository %s\n"
@@ -25004,10 +25212,19 @@
 msgid "note: commit message saved in %s\n"
 msgstr "nota: mensagem de consolidação gravada em %s\n"
 
+msgid "committing files:\n"
+msgstr "consolidando arquivos:\n"
+
 #, python-format
 msgid "trouble committing %s!\n"
 msgstr "problemas ao consolidar %s!\n"
 
+msgid "committing manifest\n"
+msgstr "consolidando manifesto\n"
+
+msgid "committing changelog\n"
+msgstr "consolidando changelog\n"
+
 msgid "unexpected response from remote server:"
 msgstr "resposta inesperada do servidor remoto:"
 
@@ -25143,29 +25360,6 @@
 msgstr "examinando manifestos\n"
 
 #, python-format
-msgid "update failed to remove %s: %s!\n"
-msgstr "update falhou ao remover %s: %s!\n"
-
-#, python-format
-msgid "getting %s\n"
-msgstr "obtendo %s\n"
-
-msgid "updating"
-msgstr "atualizando"
-
-#, python-format
-msgid "getting %s to %s\n"
-msgstr "obtendo %s para %s\n"
-
-#, python-format
-msgid "note: possible conflict - %s was renamed multiple times to:\n"
-msgstr "nota: possível conflito - %s foi renomeado múltiplas vezes para:\n"
-
-#, python-format
-msgid "note: possible conflict - %s was deleted and renamed to:\n"
-msgstr "nota: possível conflito - %s foi apagado e renomeado para:\n"
-
-#, python-format
 msgid "note: merging %s and %s using bids from ancestors %s\n"
 msgstr "nota: mesclando %s e %s usando lances dos ancestrais %s\n"
 
@@ -25196,20 +25390,19 @@
 msgstr "fim do leilão"
 
 #, python-format
-msgid ""
-"local changed %s which remote deleted\n"
-"use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
-msgstr ""
-"local alterou %s, que a remota removeu\n"
-"use (c) a versão alterada, ou (d) apague?$$ (&C) alterada $$ (&D) apague"
-
-#, python-format
-msgid ""
-"remote changed %s which local deleted\n"
-"use (c)hanged version or leave (d)eleted?$$ &Changed $$ &Deleted"
-msgstr ""
-"remota mudou %s, apagada pela local\n"
-"use (c) a versão alterada, ou (d) deixe apagada?$$ (&C) alterada $$ (&D) deixe apagada"
+msgid "update failed to remove %s: %s!\n"
+msgstr "update falhou ao remover %s: %s!\n"
+
+#, python-format
+msgid "getting %s\n"
+msgstr "obtendo %s\n"
+
+msgid "updating"
+msgstr "atualizando"
+
+#, python-format
+msgid "getting %s to %s\n"
+msgstr "obtendo %s para %s\n"
 
 msgid "merging with a working directory ancestor has no effect"
 msgstr ""
@@ -25237,6 +25430,30 @@
 msgid "merge or update --check to force update"
 msgstr "execute merge, ou update --check para forçar a atualização"
 
+#, python-format
+msgid ""
+"local changed %s which remote deleted\n"
+"use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
+msgstr ""
+"local alterou %s, que a remota removeu\n"
+"use (c) a versão alterada, ou (d) apague?$$ (&C) alterada $$ (&D) apague"
+
+#, python-format
+msgid ""
+"remote changed %s which local deleted\n"
+"use (c)hanged version or leave (d)eleted?$$ &Changed $$ &Deleted"
+msgstr ""
+"remota mudou %s, apagada pela local\n"
+"use (c) a versão alterada, ou (d) deixe apagada?$$ (&C) alterada $$ (&D) deixe apagada"
+
+#, python-format
+msgid "note: possible conflict - %s was renamed multiple times to:\n"
+msgstr "nota: possível conflito - %s foi renomeado múltiplas vezes para:\n"
+
+#, python-format
+msgid "note: possible conflict - %s was deleted and renamed to:\n"
+msgstr "nota: possível conflito - %s foi apagado e renomeado para:\n"
+
 msgid "Attention:"
 msgstr "Atenção:"
 
@@ -25264,6 +25481,20 @@
 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"
+
 #, python-format
 msgid ""
 "parsing obsolete marker: metadata is too short, %d bytes expected, got %d"
@@ -25459,6 +25690,10 @@
 msgstr "morto pelo sinal %d"
 
 #, python-format
+msgid "unknown strip-bundle2-version value %r; "
+msgstr "valor desconhecido de strip-bundle2-version %r; "
+
+#, python-format
 msgid "saved backup bundle to %s\n"
 msgstr "salvando bundle de segurança em %s\n"
 
@@ -25538,6 +25773,14 @@
 msgstr "tentativa de adicionar linkrev -1 a %s"
 
 #, python-format
+msgid "node %s is not censored"
+msgstr "o nó %s não é censurado"
+
+#, python-format
+msgid "at %s: %s"
+msgstr "em %s: %s"
+
+#, python-format
 msgid "can't use %s here"
 msgstr "não se pode usar %s aqui"
 
@@ -25598,24 +25841,6 @@
 msgstr "author requer uma string"
 
 msgid ""
-"``only(set, [set])``\n"
-"    Changesets that are ancestors of the first set that are not ancestors\n"
-"    of any other head in the repo. If a second set is specified, the result\n"
-"    is ancestors of the first set that are not ancestors of the second set\n"
-"    (i.e. ::<set1> - ::<set2>)."
-msgstr ""
-"``only(conjunto1, [conjunto2])``\n"
-"    Revisões que são ancestrais do primeiro conjunto que não\n"
-"    são ancestrais de nenhuma outra cabeça no repositório. Se um\n"
-"    segundo conjunto for especificado, seleciona os ancestrais\n"
-"    do primeiro conjunto que não são ancestrais do segundo conjunto\n"
-"    (ou seja, ::<conjunto1> - ::<conjunto2>)."
-
-#. i18n: "only" is a keyword
-msgid "only takes one or two arguments"
-msgstr "only recebe um ou dois argumentos"
-
-msgid ""
 "``bisect(string)``\n"
 "    Changesets marked in the specified bisect status:"
 msgstr ""
@@ -25900,6 +26125,13 @@
 "    rápido, mas não inclui remoções nem mudanças duplicadas). Para um\n"
 "    resultado mais lento e mais preciso, use ``file()``."
 
+msgid ""
+"    If some linkrev points to revisions filtered by the current repoview, we'll\n"
+"    work around it to return a non-filtered value."
+msgstr ""
+"    Se algum linkrev apontar para revisões filtradas pelo repoview\n"
+"    atual, será retornado um valor não filtrado."
+
 #. i18n: "filelog" is a keyword
 msgid "filelog requires a pattern"
 msgstr "filelog requer um padrão"
@@ -26130,6 +26362,38 @@
 msgstr "modifies requer um padrão"
 
 msgid ""
+"``named(namespace)``\n"
+"    The changesets in a given namespace."
+msgstr ""
+"``named(namespace)``\n"
+"    Revisões em um namespace determinado."
+
+msgid ""
+"    If `namespace` starts with `re:`, the remainder of the string is treated as\n"
+"    a regular expression. To match a namespace that actually starts with `re:`,\n"
+"    use the prefix `literal:`."
+msgstr ""
+"    Se `namespace` começar com `re:`, o restante da string é tratado\n"
+"    como uma expressão regular. Para combinar com um namespace que\n"
+"    comece com `re:` literalmente, use o prefixo `literal:`."
+
+#. i18n: "named" is a keyword
+msgid "named requires a namespace argument"
+msgstr "named exige um namespace como argumento"
+
+#. i18n: "named" is a keyword
+msgid "the argument to named must be a string"
+msgstr "o argumento de named deve ser uma string"
+
+#, python-format
+msgid "namespace '%s' does not exist"
+msgstr "o namespace '%s' não existe"
+
+#, python-format
+msgid "no namespace exists that match '%s'"
+msgstr "não existe nenhum namespace que corresponda a '%s'"
+
+msgid ""
 "``id(string)``\n"
 "    Revision non-ambiguously specified by the given hex string prefix."
 msgstr ""
@@ -26157,6 +26421,24 @@
 msgstr "obsolete não tem argumentos"
 
 msgid ""
+"``only(set, [set])``\n"
+"    Changesets that are ancestors of the first set that are not ancestors\n"
+"    of any other head in the repo. If a second set is specified, the result\n"
+"    is ancestors of the first set that are not ancestors of the second set\n"
+"    (i.e. ::<set1> - ::<set2>)."
+msgstr ""
+"``only(conjunto1, [conjunto2])``\n"
+"    Revisões que são ancestrais do primeiro conjunto que não\n"
+"    são ancestrais de nenhuma outra cabeça no repositório. Se um\n"
+"    segundo conjunto for especificado, seleciona os ancestrais\n"
+"    do primeiro conjunto que não são ancestrais do segundo conjunto\n"
+"    (ou seja, ::<conjunto1> - ::<conjunto2>)."
+
+#. i18n: "only" is a keyword
+msgid "only takes one or two arguments"
+msgstr "only recebe um ou dois argumentos"
+
+msgid ""
 "``origin([set])``\n"
 "    Changesets that were specified as a source for the grafts, transplants or\n"
 "    rebases that created the given revisions.  Omitting the optional set is the\n"
@@ -26491,6 +26773,26 @@
 msgid "not a symbol"
 msgstr "não é um símbolo"
 
+msgid "'$' not for alias arguments"
+msgstr "'$' só deve ser usado em argumentos de apelidos"
+
+msgid "invalid argument list"
+msgstr "lista de argumentos inválida"
+
+msgid "argument names collide with each other"
+msgstr "nomes de argumentos colidem um com o outro"
+
+msgid "invalid format"
+msgstr "formato inválido"
+
+#, python-format
+msgid "failed to parse the declaration of revset alias \"%s\": %s"
+msgstr "falha ao decodificar a declaração do apelido de revset \"%s\": %s"
+
+#, python-format
+msgid "failed to parse the definition of revset alias \"%s\": %s"
+msgstr "falha ao decodificar a definição do apelido de revset \"%s\": %s"
+
 #, python-format
 msgid "infinite expansion of revset alias \"%s\" detected"
 msgstr "detectada expansão infinita no apelido de revset \"%s\""
@@ -26499,6 +26801,10 @@
 msgid "invalid number of arguments: %s"
 msgstr "número de argumentos inválido: %s"
 
+#, python-format
+msgid "\"##\" can't concatenate \"%s\" element"
+msgstr "\"##\" incapaz de concatenar elemento \"%s\""
+
 msgid "empty query"
 msgstr "consulta vazia"
 
@@ -26796,6 +27102,9 @@
 msgid "warning: changes are committed in %s phase from subrepository %s\n"
 msgstr "aviso: mudanças consolidadas na fase \"%s\" do sub-repositório %s\n"
 
+msgid "addremove is not supported"
+msgstr "addremove não é suportado"
+
 #, python-format
 msgid "archiving (%s)"
 msgstr "empacotando (%s)"
@@ -27301,9 +27610,6 @@
 msgid ":subrepos: List of strings. Updated subrepositories in the changeset."
 msgstr ":subrepos: Lista de strings. Sub-repositórios atualizados na revisão."
 
-msgid ":tags: List of strings. Any tags associated with the changeset."
-msgstr ":tags: Lista de strings. Quaisquer etiquetas associadas à revisão."
-
 msgid ""
 ":parents: List of strings. The parents of the changeset in \"rev:node\"\n"
 "    format. If the changeset has only one \"natural\" parent (the predecessor\n"
@@ -27460,8 +27766,8 @@
 msgid "couldn't read journal entry %r!\n"
 msgstr "não foi possível ler a entrada do jornal %r!\n"
 
-msgid "journal was created by a newer version of Mercurial"
-msgstr "o journal foi criado por uma versão mais nova do Mercurial"
+msgid "journal was created by a different version of Mercurial"
+msgstr "o journal foi criado por uma versão diferente do Mercurial"
 
 msgid "already have changeset "
 msgstr "já possui a revisão "
@@ -27623,8 +27929,8 @@
 msgstr "especificação de dia inválida: %s"
 
 #, python-format
-msgid "%s must be nonnegative (see 'hg help dates')"
-msgstr "%s não pode ser negativo (veja 'hg help dates')"
+msgid "%s must be nonnegative (see \"hg help dates\")"
+msgstr "%s não pode ser negativo (veja \"hg help dates\")"
 
 #, python-format
 msgid "%.0f GB"
@@ -27906,3 +28212,43 @@
 
 msgid "number of cpus must be an integer"
 msgstr "o número de cpus deve ser um inteiro"
+
+#~ msgid "%s\n"
+#~ msgstr "%s\n"
+
+#~ msgid "see hg help phases for details"
+#~ msgstr "veja hg help phases para mais detalhes"
+
+#~ msgid ""
+#~ "  # add new command called vdiff, runs kdiff3\n"
+#~ "  vdiff = kdiff3"
+#~ msgstr ""
+#~ "  # adiciona um novo comando chamado vdiff, executa o kdiff3\n"
+#~ "  vdiff = kdiff3"
+
+#~ msgid ""
+#~ "  # add new command called meld, runs meld (no need to name twice)\n"
+#~ "  meld ="
+#~ msgstr ""
+#~ "  # adiciona um novo comando chamado meld, executa o meld\n"
+#~ "  # (não é necessário nomeá-lo duas vezes)\n"
+#~ "  meld ="
+
+#~ msgid "no changes, revision %d skipped\n"
+#~ msgstr "nenhuma mudança, revisão %d omitida\n"
+
+#~ msgid ""
+#~ "    If -a/--active is specified, only show active branches. A branch\n"
+#~ "    is considered active if it contains repository heads."
+#~ msgstr ""
+#~ "    Se -a/--active for especificado, mostra apenas ramos ativos. Um\n"
+#~ "    ramo é considerado ativo se contém cabeças de repositório."
+
+#~ msgid "grafting revision %s\n"
+#~ msgstr "enxertando revisão %s\n"
+
+#~ msgid "graft for revision %s is empty\n"
+#~ msgstr "o enxerto para a revisão %s é vazio\n"
+
+#~ msgid ":tags: List of strings. Any tags associated with the changeset."
+#~ msgstr ":tags: Lista de strings. Quaisquer etiquetas associadas à revisão."
--- a/mercurial/cmdutil.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/mercurial/cmdutil.py	Mon Feb 02 12:50:48 2015 -0600
@@ -919,9 +919,8 @@
             # we will use the templatename as the color name since those two
             # should be the same
             for name in ns.names(self.repo, changenode):
-                # i18n: column positioning for "hg log"
-                name = _(("%s:" % ns.logname).ljust(13) + "%s\n") % name
-                self.ui.write("%s" % name, label='log.%s' % ns.colorname)
+                self.ui.write(ns.logfmt % name,
+                              label='log.%s' % ns.colorname)
         if self.ui.debugflag:
             # i18n: column positioning for "hg log"
             self.ui.write(_("phase:       %s\n") % _(ctx.phasestr()),
@@ -1781,7 +1780,8 @@
                 # manifest entry, so use match.files(), not pats.
                 opts[fpats[followfirst]] = list(match.files())
             else:
-                opts[fnopats[followdescendants][followfirst]] = str(startrev)
+                op = fnopats[followdescendants][followfirst]
+                opts[op] = 'rev(%d)' % startrev
         else:
             opts['_patslog'] = list(pats)
 
@@ -2764,9 +2764,6 @@
             (unknown,       actions['unknown'],  discard),
             )
 
-        needdata = ('revert', 'add', 'undelete')
-        _revertprefetch(repo, ctx, *[actions[name][0] for name in needdata])
-
         wctx = repo[None]
         for abs, (rel, exact) in sorted(names.items()):
             # target file to be touch on disk (relative to cwd)
@@ -2796,6 +2793,9 @@
 
 
         if not opts.get('dry_run'):
+            needdata = ('revert', 'add', 'undelete')
+            _revertprefetch(repo, ctx, *[actions[name][0] for name in needdata])
+
             _performrevert(repo, parents, ctx, actions)
 
             # get the list of subrepos that must be reverted
--- a/mercurial/context.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/mercurial/context.py	Mon Feb 02 12:50:48 2015 -0600
@@ -22,41 +22,6 @@
 # dirty in the working copy.
 _newnode = '!' * 21
 
-def _adjustlinkrev(repo, path, filelog, fnode, srcrev, inclusive=False):
-    """return the first ancestor of <srcrev> introducting <fnode>
-
-    If the linkrev of the file revision does not point to an ancestor of
-    srcrev, we'll walk down the ancestors until we find one introducing this
-    file revision.
-
-    :repo: a localrepository object (used to access changelog and manifest)
-    :path: the file path
-    :fnode: the nodeid of the file revision
-    :filelog: the filelog of this path
-    :srcrev: the changeset revision we search ancestors from
-    :inclusive: if true, the src revision will also be checked
-    """
-    cl = repo.unfiltered().changelog
-    ma = repo.manifest
-    # fetch the linkrev
-    fr = filelog.rev(fnode)
-    lkr = filelog.linkrev(fr)
-    # check if this linkrev is an ancestor of srcrev
-    anc = cl.ancestors([srcrev], lkr, inclusive=inclusive)
-    if lkr not in anc:
-        for a in anc:
-            ac = cl.read(a) # get changeset data (we avoid object creation).
-            if path in ac[3]: # checking the 'files' field.
-                # The file has been touched, check if the content is similar
-                # to the one we search for.
-                if fnode == ma.readfast(ac[0]).get(path):
-                    return a
-        # In theory, we should never get out of that loop without a result. But
-        # if manifest uses a buggy file revision (not children of the one it
-        # replaces) we could. Such a buggy situation will likely result is crash
-        # somewhere else at to some point.
-    return lkr
-
 class basectx(object):
     """A basectx object represents the common logic for its children:
     changectx: read-only context that is already present in the repo,
@@ -668,6 +633,11 @@
             return self._changeid
         elif '_changectx' in self.__dict__:
             return self._changectx.rev()
+        elif '_descendantrev' in self.__dict__:
+            # this file context was created from a revision with a known
+            # descendant, we can (lazily) correct for linkrev aliases
+            return self._adjustlinkrev(self._path, self._filelog,
+                                       self._filenode, self._descendantrev)
         else:
             return self._filelog.linkrev(self._filerev)
 
@@ -781,6 +751,49 @@
 
         return True
 
+    def _adjustlinkrev(self, path, filelog, fnode, srcrev, inclusive=False):
+        """return the first ancestor of <srcrev> introducting <fnode>
+
+        If the linkrev of the file revision does not point to an ancestor of
+        srcrev, we'll walk down the ancestors until we find one introducing
+        this file revision.
+
+        :repo: a localrepository object (used to access changelog and manifest)
+        :path: the file path
+        :fnode: the nodeid of the file revision
+        :filelog: the filelog of this path
+        :srcrev: the changeset revision we search ancestors from
+        :inclusive: if true, the src revision will also be checked
+        """
+        repo = self._repo
+        cl = repo.unfiltered().changelog
+        ma = repo.manifest
+        # fetch the linkrev
+        fr = filelog.rev(fnode)
+        lkr = filelog.linkrev(fr)
+        # hack to reuse ancestor computation when searching for renames
+        memberanc = getattr(self, '_ancestrycontext', None)
+        iteranc = None
+        if memberanc is None:
+            memberanc = iteranc = cl.ancestors([srcrev], lkr,
+                                               inclusive=inclusive)
+        # check if this linkrev is an ancestor of srcrev
+        if lkr not in memberanc:
+            if iteranc is None:
+                iteranc = cl.ancestors([srcrev], lkr, inclusive=inclusive)
+            for a in iteranc:
+                ac = cl.read(a) # get changeset data (we avoid object creation)
+                if path in ac[3]: # checking the 'files' field.
+                    # The file has been touched, check if the content is
+                    # similar to the one we search for.
+                    if fnode == ma.readfast(ac[0]).get(path):
+                        return a
+            # In theory, we should never get out of that loop without a result.
+            # But if manifest uses a buggy file revision (not children of the
+            # one it replaces) we could. Such a buggy situation will likely
+            # result is crash somewhere else at to some point.
+        return lkr
+
     def introrev(self):
         """return the rev of the changeset which introduced this file revision
 
@@ -795,8 +808,8 @@
         noctx = not ('_changeid' in attrs or '_changectx' in attrs)
         if noctx or self.rev() == lkr:
             return self.linkrev()
-        return _adjustlinkrev(self._repo, self._path, self._filelog,
-                              self._filenode, self.rev(), inclusive=True)
+        return self._adjustlinkrev(self._path, self._filelog, self._filenode,
+                                   self.rev(), inclusive=True)
 
     def parents(self):
         _path = self._path
@@ -822,9 +835,15 @@
                 # If self is associated with a changeset (probably explicitly
                 # fed), ensure the created filectx is associated with a
                 # changeset that is an ancestor of self.changectx.
-                rev = _adjustlinkrev(self._repo, path, l, fnode, self.rev())
-                fctx = filectx(self._repo, path, fileid=fnode, filelog=l,
-                               changeid=rev)
+                # This lets us later use _adjustlinkrev to get a correct link.
+                fctx = filectx(self._repo, path, fileid=fnode, filelog=l)
+                fctx._descendantrev = self.rev()
+                fctx._ancestrycontext = getattr(self, '_ancestrycontext', None)
+            elif '_descendantrev' in vars(self):
+                # Otherwise propagate _descendantrev if we have one associated.
+                fctx = filectx(self._repo, path, fileid=fnode, filelog=l)
+                fctx._descendantrev = self._descendantrev
+                fctx._ancestrycontext = getattr(self, '_ancestrycontext', None)
             else:
                 fctx = filectx(self._repo, path, fileid=fnode, filelog=l)
             ret.append(fctx)
@@ -944,7 +963,7 @@
         cut = followfirst and 1 or None
         while True:
             for parent in c.parents()[:cut]:
-                visit[(parent.rev(), parent.node())] = parent
+                visit[(parent.linkrev(), parent.filenode())] = parent
             if not visit:
                 break
             c = visit.pop(max(visit))
--- a/mercurial/copies.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/mercurial/copies.py	Mon Feb 02 12:50:48 2015 -0600
@@ -133,7 +133,7 @@
     for f in fctx.ancestors():
         if am.get(f.path(), None) == f.filenode():
             return f
-        if f.rev() < limit:
+        if limit >= 0 and f.linkrev() < limit and f.rev() < limit:
             return None
 
 def _dirstatecopies(d):
@@ -170,8 +170,11 @@
     missing = set(b.manifest().iterkeys())
     missing.difference_update(a.manifest().iterkeys())
 
+    ancestrycontext = a._repo.changelog.ancestors([b.rev()], inclusive=True)
     for f in missing:
-        ofctx = _tracefile(b[f], am, limit)
+        fctx = b[f]
+        fctx._ancestrycontext = ancestrycontext
+        ofctx = _tracefile(fctx, am, limit)
         if ofctx:
             cm[f] = ofctx.path()
 
--- a/mercurial/default.d/mergetools.rc	Sat Jan 17 22:01:14 2015 -0200
+++ b/mercurial/default.d/mergetools.rc	Mon Feb 02 12:50:48 2015 -0600
@@ -7,7 +7,7 @@
 kdiff3.regappend=\kdiff3.exe
 kdiff3.fixeol=True
 kdiff3.gui=True
-kdiff3.diffargs=--L1 '$plabel1' --L2 '$clabel' $parent $child
+kdiff3.diffargs=--L1 $plabel1 --L2 $clabel $parent $child
 
 gvimdiff.args=--nofork -d -g -O $local $other $base
 gvimdiff.regkey=Software\Vim\GVim
@@ -28,17 +28,17 @@
 meld.gui=True
 meld.args=--label='local' $local --label='merged' $base --label='other' $other -o $output
 meld.check=changed
-meld.diffargs=-a --label='$plabel1' $parent --label='$clabel' $child
+meld.diffargs=-a --label=$plabel1 $parent --label=$clabel $child
 
 tkdiff.args=$local $other -a $base -o $output
 tkdiff.gui=True
 tkdiff.priority=-8
-tkdiff.diffargs=-L '$plabel1' $parent -L '$clabel' $child
+tkdiff.diffargs=-L $plabel1 $parent -L $clabel $child
 
 xxdiff.args=--show-merged-pane --exit-with-merge-status --title1 local --title2 base --title3 other --merged-filename $output --merge $local $base $other
 xxdiff.gui=True
 xxdiff.priority=-8
-xxdiff.diffargs=--title1 '$plabel1' $parent --title2 '$clabel' $child
+xxdiff.diffargs=--title1 $plabel1 $parent --title2 $clabel $child
 
 diffmerge.regkey=Software\SourceGear\SourceGear DiffMerge\
 diffmerge.regkeyalt=Software\Wow6432Node\SourceGear\SourceGear DiffMerge\
@@ -47,7 +47,7 @@
 diffmerge.args=-nosplash -merge -title1=local -title2=merged -title3=other $local $base $other -result=$output
 diffmerge.check=changed
 diffmerge.gui=True
-diffmerge.diffargs=--nosplash --title1='$plabel1' --title2='$clabel' $parent $child
+diffmerge.diffargs=--nosplash --title1=$plabel1 --title2=$clabel $parent $child
 
 p4merge.args=$base $local $other $output
 p4merge.regkey=Software\Perforce\Environment
@@ -70,13 +70,13 @@
 tortoisemerge.check=changed
 tortoisemerge.gui=True
 tortoisemerge.priority=-8
-tortoisemerge.diffargs=/base:$parent /mine:$child /basename:'$plabel1' /minename:'$clabel'
+tortoisemerge.diffargs=/base:$parent /mine:$child /basename:$plabel1 /minename:$clabel
 
 ecmerge.args=$base $local $other --mode=merge3 --title0=base --title1=local --title2=other --to=$output
 ecmerge.regkey=Software\Elli\xc3\xa9 Computing\Merge
 ecmerge.regkeyalt=Software\Wow6432Node\Elli\xc3\xa9 Computing\Merge
 ecmerge.gui=True
-ecmerge.diffargs=$parent $child --mode=diff2 --title1='$plabel1' --title2='$clabel'
+ecmerge.diffargs=$parent $child --mode=diff2 --title1=$plabel1 --title2=$clabel
 
 # editmerge is a small script shipped in contrib.
 # It needs this config otherwise it behaves the same as internal:local
@@ -94,13 +94,13 @@
 beyondcompare3.regname=ExePath
 beyondcompare3.gui=True
 beyondcompare3.priority=-2
-beyondcompare3.diffargs=/lro /lefttitle='$plabel1' /righttitle='$clabel' /solo /expandall $parent $child
+beyondcompare3.diffargs=/lro /lefttitle=$plabel1 /righttitle=$clabel /solo /expandall $parent $child
 
 ; Linux version of Beyond Compare
 bcompare.args=$local $other $base -mergeoutput=$output -ro -lefttitle=parent1 -centertitle=base -righttitle=parent2 -outputtitle=merged -automerge -reviewconflicts -solo
 bcompare.gui=True
 bcompare.priority=-1
-bcompare.diffargs=-lro -lefttitle='$plabel1' -righttitle='$clabel' -solo -expandall $parent $child
+bcompare.diffargs=-lro -lefttitle=$plabel1 -righttitle=$clabel -solo -expandall $parent $child
 
 winmerge.args=/e /x /wl /ub /dl other /dr local $other $local $output
 winmerge.regkey=Software\Thingamahoochie\WinMerge
@@ -109,7 +109,7 @@
 winmerge.check=changed
 winmerge.gui=True
 winmerge.priority=-10
-winmerge.diffargs=/r /e /x /ub /wl /dl '$plabel1' /dr '$clabel' $parent $child
+winmerge.diffargs=/r /e /x /ub /wl /dl $plabel1 /dr $clabel $parent $child
 
 araxis.regkey=SOFTWARE\Classes\TypeLib\{46799e0a-7bd1-4330-911c-9660bb964ea2}\7.0\HELPDIR
 araxis.regappend=\ConsoleCompare.exe
@@ -118,7 +118,7 @@
 araxis.checkconflict=True
 araxis.binary=True
 araxis.gui=True
-araxis.diffargs=/2 /wait /title1:"$plabel1" /title2:"$clabel" $parent $child
+araxis.diffargs=/2 /wait /title1:$plabel1 /title2:$clabel $parent $child
 
 diffuse.priority=-3
 diffuse.args=$local $base $other
--- a/mercurial/diffhelpers.c	Sat Jan 17 22:01:14 2015 -0200
+++ b/mercurial/diffhelpers.c	Mon Feb 02 12:50:48 2015 -0600
@@ -34,6 +34,9 @@
 		sz -= 1;
 
 	hline = PyBytes_FromStringAndSize(l, sz-1);
+	if (!hline) {
+		return;
+	}
 
 	if (c == ' ' || c == '+') {
 		PyObject *rline = PyBytes_FromStringAndSize(l + 1, sz - 2);
@@ -194,4 +197,3 @@
 	                                        NULL, NULL);
 }
 #endif
-
--- a/mercurial/dirs.c	Sat Jan 17 22:01:14 2015 -0200
+++ b/mercurial/dirs.c	Mon Feb 02 12:50:48 2015 -0600
@@ -175,6 +175,7 @@
 	}
 
 	ret = PyErr_Occurred() ? -1 : 0;
+	Py_DECREF(iter);
 	Py_XDECREF(item);
 	return ret;
 }
--- a/mercurial/exchange.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/mercurial/exchange.py	Mon Feb 02 12:50:48 2015 -0600
@@ -946,8 +946,9 @@
         scommon = set(common)
         filteredrheads = []
         for n in rheads:
-            if n in nm and n not in scommon:
-                common.append(n)
+            if n in nm:
+                if n not in scommon:
+                    common.append(n)
             else:
                 filteredrheads.append(n)
         if not filteredrheads:
--- a/mercurial/extensions.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/mercurial/extensions.py	Mon Feb 02 12:50:48 2015 -0600
@@ -107,8 +107,6 @@
             else:
                 ui.warn(_("*** failed to import extension %s: %s\n")
                         % (name, inst))
-            if ui.traceback():
-                return 1
 
     for name in _order[newindex:]:
         uisetup = getattr(_extensions[name], 'uisetup', None)
--- a/mercurial/localrepo.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/mercurial/localrepo.py	Mon Feb 02 12:50:48 2015 -0600
@@ -1206,14 +1206,14 @@
                         crev = manifest2[cfname]
                         newfparent = fparent1
 
-            # find source in nearest ancestor if we've lost track
-            if not crev:
-                self.ui.debug(" %s: searching for copy revision for %s\n" %
-                              (fname, cfname))
-                for ancestor in self[None].ancestors():
-                    if cfname in ancestor:
-                        crev = ancestor[cfname].filenode()
-                        break
+            # Here, we used to search backwards through history to try to find
+            # where the file copy came from if the source of a copy was not in
+            # the parent diretory. However, this doesn't actually make sense to
+            # do (what does a copy from something not in your working copy even
+            # mean?) and it causes bugs (eg, issue4476). Instead, we will warn
+            # the user that copy information was dropped, so if they didn't
+            # expect this outcome it can be fixed, but this is the correct
+            # behavior in this circumstance.
 
             if crev:
                 self.ui.debug(" %s: copy %s:%s\n" % (fname, cfname, hex(crev)))
--- a/mercurial/merge.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/mercurial/merge.py	Mon Feb 02 12:50:48 2015 -0600
@@ -741,7 +741,15 @@
 
     numupdates = sum(len(l) for m, l in actions.items() if m != 'k')
 
+    def dirtysubstate():
+        # mark '.hgsubstate' as possibly dirty forcibly, because
+        # modified '.hgsubstate' is misunderstood as clean,
+        # when both st_size/st_mtime of '.hgsubstate' aren't changed,
+        # even if "submerge" fails and '.hgsubstate' is inconsistent
+        repo.dirstate.normallookup('.hgsubstate')
+
     if [a for a in actions['r'] if a[0] == '.hgsubstate']:
+        dirtysubstate()
         subrepo.submerge(repo, wctx, mctx, wctx, overwrite)
 
     # remove in parallel (must come first)
@@ -760,6 +768,7 @@
     updated = len(actions['g'])
 
     if [a for a in actions['g'] if a[0] == '.hgsubstate']:
+        dirtysubstate()
         subrepo.submerge(repo, wctx, mctx, wctx, overwrite)
 
     # forget (manifest only, just log it) (must come first)
@@ -785,6 +794,7 @@
         z += 1
         progress(_updating, z, item=f, total=numupdates, unit=_files)
         if f == '.hgsubstate': # subrepo states need updating
+            dirtysubstate()
             subrepo.submerge(repo, wctx, mctx, wctx.ancestor(mctx),
                              overwrite)
             continue
--- a/mercurial/namespaces.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/mercurial/namespaces.py	Mon Feb 02 12:50:48 2015 -0600
@@ -27,21 +27,30 @@
         bmknames = lambda repo: repo._bookmarks.keys()
         bmknamemap = lambda repo, name: tolist(repo._bookmarks.get(name))
         bmknodemap = lambda repo, name: repo.nodebookmarks(name)
-        n = namespace("bookmarks", templatename="bookmark", listnames=bmknames,
+        n = namespace("bookmarks", templatename="bookmark",
+                      # i18n: column positioning for "hg log"
+                      logfmt=_("bookmark:    %s\n"),
+                      listnames=bmknames,
                       namemap=bmknamemap, nodemap=bmknodemap)
         self.addnamespace(n)
 
         tagnames = lambda repo: [t for t, n in repo.tagslist()]
         tagnamemap = lambda repo, name: tolist(repo._tagscache.tags.get(name))
         tagnodemap = lambda repo, name: repo.nodetags(name)
-        n = namespace("tags", templatename="tag", listnames=tagnames,
+        n = namespace("tags", templatename="tag",
+                      # i18n: column positioning for "hg log"
+                      logfmt=_("tag:         %s\n"),
+                      listnames=tagnames,
                       namemap=tagnamemap, nodemap=tagnodemap)
         self.addnamespace(n)
 
         bnames = lambda repo: repo.branchmap().keys()
         bnamemap = lambda repo, name: tolist(repo.branchtip(name, True))
         bnodemap = lambda repo, node: [repo[node].branch()]
-        n = namespace("branches", templatename="branch", listnames=bnames,
+        n = namespace("branches", templatename="branch",
+                      # i18n: column positioning for "hg log"
+                      logfmt=_("branch:      %s\n"),
+                      listnames=bnames,
                       namemap=bnamemap, nodemap=bnodemap)
         self.addnamespace(n)
 
@@ -121,7 +130,7 @@
     """
 
     def __init__(self, name, templatename=None, logname=None, colorname=None,
-                 listnames=None, namemap=None, nodemap=None):
+                 logfmt=None, listnames=None, namemap=None, nodemap=None):
         """create a namespace
 
         name: the namespace to be registered (in plural form)
@@ -130,6 +139,8 @@
                  is used
         colorname: the name to use for colored log output; if not specified
                    logname is used
+        logfmt: the format to use for (l10n-ed) log output; if not specified
+                it is composed from logname
         listnames: function to list all names
         namemap: function that inputs a node, output name(s)
         nodemap: function that inputs a name, output node(s)
@@ -139,6 +150,7 @@
         self.templatename = templatename
         self.logname = logname
         self.colorname = colorname
+        self.logfmt = logfmt
         self.listnames = listnames
         self.namemap = namemap
         self.nodemap = nodemap
@@ -151,6 +163,11 @@
         if self.colorname is None:
             self.colorname = self.logname
 
+        # if logfmt is not specified, compose it from logname as backup
+        if self.logfmt is None:
+            # i18n: column positioning for "hg log"
+            self.logfmt = ("%s:" % self.logname).ljust(13) + "%s\n"
+
     def names(self, repo, node):
         """method that returns a (sorted) list of names in a namespace that
         match a given node"""
--- a/mercurial/obsolete.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/mercurial/obsolete.py	Mon Feb 02 12:50:48 2015 -0600
@@ -462,6 +462,16 @@
         """The flags field of the marker"""
         return self._data[2]
 
+def _checkinvalidmarkers(obsstore):
+    """search for marker with invalid data and raise error if needed
+
+    Exist as a separated function to allow the evolve extension for a more
+    subtle handling.
+    """
+    if node.nullid in obsstore.precursors:
+        raise util.Abort(_('bad obsolescence marker detected: '
+                           'invalid successors nullid'))
+
 class obsstore(object):
     """Store obsolete markers
 
@@ -598,9 +608,8 @@
             if parents is not None:
                 for p in parents:
                     self.children.setdefault(p, set()).add(mark)
-        if node.nullid in self.precursors:
-            raise util.Abort(_('bad obsolescence marker detected: '
-                               'invalid successors nullid'))
+        _checkinvalidmarkers(self)
+
     def relevantmarkers(self, nodes):
         """return a set of all obsolescence markers relevant to a set of nodes.
 
--- a/mercurial/osutil.c	Sat Jan 17 22:01:14 2015 -0200
+++ b/mercurial/osutil.c	Mon Feb 02 12:50:48 2015 -0600
@@ -288,7 +288,7 @@
 
 static PyObject *_listdir(char *path, int pathlen, int keepstat, char *skip)
 {
-	PyObject *list, *elem, *stat, *ret = NULL;
+	PyObject *list, *elem, *stat = NULL, *ret = NULL;
 	char fullpath[PATH_MAX + 10];
 	int kind, err;
 	struct stat st;
@@ -319,7 +319,7 @@
 	if (!dir) {
 		PyErr_SetFromErrnoWithFilename(PyExc_OSError, path);
 		goto error_dir;
- 	}
+	}
 
 	list = PyList_New(0);
 	if (!list)
@@ -369,6 +369,7 @@
 			elem = Py_BuildValue("si", ent->d_name, kind);
 		if (!elem)
 			goto error;
+		stat = NULL;
 
 		PyList_Append(list, elem);
 		Py_DECREF(elem);
@@ -379,6 +380,7 @@
 
 error:
 	Py_DECREF(list);
+	Py_XDECREF(stat);
 error_list:
 	closedir(dir);
 error_dir:
@@ -408,17 +410,22 @@
 		return NULL;
 
 	for (i = 0; i < count; i++) {
-		PyObject *stat;
+		PyObject *stat, *pypath;
 		struct stat st;
 		int ret, kind;
 		char *path;
 
-		path = PyString_AsString(PySequence_GetItem(names, i));
+		pypath = PySequence_GetItem(names, i);
+		if (!pypath)
+			return NULL;
+		path = PyString_AsString(pypath);
 		if (path == NULL) {
+			Py_DECREF(pypath);
 			PyErr_SetString(PyExc_TypeError, "not a string");
 			goto bail;
 		}
 		ret = lstat(path, &st);
+		Py_DECREF(pypath);
 		kind = st.st_mode & S_IFMT;
 		if (ret != -1 && (kind == S_IFREG || kind == S_IFLNK)) {
 			stat = makestat(&st);
--- a/mercurial/parsers.c	Sat Jan 17 22:01:14 2015 -0200
+++ b/mercurial/parsers.c	Mon Feb 02 12:50:48 2015 -0600
@@ -115,6 +115,7 @@
 				"ascii", str, len, i, (i + 1),
 				"unexpected code byte");
 			PyErr_SetObject(PyExc_UnicodeDecodeError, err);
+			Py_XDECREF(err);
 			goto quit;
 		}
 		newstr[i] = lowertable[(unsigned char)c];
@@ -409,7 +410,7 @@
 	PyObject *packobj = NULL;
 	PyObject *map, *copymap, *pl, *mtime_unset = NULL;
 	Py_ssize_t nbytes, pos, l;
-	PyObject *k, *v, *pn;
+	PyObject *k, *v = NULL, *pn;
 	char *p, *s;
 	double now;
 
@@ -526,6 +527,7 @@
 bail:
 	Py_XDECREF(mtime_unset);
 	Py_XDECREF(packobj);
+	Py_XDECREF(v);
 	return NULL;
 }
 
@@ -816,19 +818,27 @@
 static PyObject *index_stats(indexObject *self)
 {
 	PyObject *obj = PyDict_New();
+	PyObject *t = NULL;
 
 	if (obj == NULL)
 		return NULL;
 
 #define istat(__n, __d) \
-	if (PyDict_SetItemString(obj, __d, PyInt_FromSsize_t(self->__n)) == -1) \
-		goto bail;
+	t = PyInt_FromSsize_t(self->__n); \
+	if (!t) \
+		goto bail; \
+	if (PyDict_SetItemString(obj, __d, t) == -1) \
+		goto bail; \
+	Py_DECREF(t);
 
 	if (self->added) {
 		Py_ssize_t len = PyList_GET_SIZE(self->added);
-		if (PyDict_SetItemString(obj, "index entries added",
-					 PyInt_FromSsize_t(len)) == -1)
+		t = PyInt_FromSsize_t(len);
+		if (!t)
 			goto bail;
+		if (PyDict_SetItemString(obj, "index entries added", t) == -1)
+			goto bail;
+		Py_DECREF(t);
 	}
 
 	if (self->raw_length != self->length - 1)
@@ -848,6 +858,7 @@
 
 bail:
 	Py_XDECREF(obj);
+	Py_XDECREF(t);
 	return NULL;
 }
 
@@ -1260,6 +1271,7 @@
 			goto classfail;
 		}
 		Py_INCREF(errclass);
+		Py_DECREF(mod);
 	}
 
 	errobj = PyObject_CallFunction(errclass, NULL);
@@ -1690,9 +1702,11 @@
 		if (!PyInt_Check(obj)) {
 			PyErr_SetString(PyExc_TypeError,
 					"arguments must all be ints");
+			Py_DECREF(obj);
 			goto bail;
 		}
 		val = PyInt_AsLong(obj);
+		Py_DECREF(obj);
 		if (val == -1) {
 			ret = PyList_New(0);
 			goto done;
@@ -1790,9 +1804,11 @@
 		if (!PyInt_Check(obj)) {
 			PyErr_SetString(PyExc_TypeError,
 					"arguments must all be ints");
+			Py_DECREF(obj);
 			goto bail;
 		}
 		val = PyInt_AsLong(obj);
+		Py_DECREF(obj);
 		if (val == -1) {
 			ret = PyList_New(0);
 			goto done;
@@ -2266,8 +2282,16 @@
 
 static int check_python_version(void)
 {
-	PyObject *sys = PyImport_ImportModule("sys");
-	long hexversion = PyInt_AsLong(PyObject_GetAttrString(sys, "hexversion"));
+	PyObject *sys = PyImport_ImportModule("sys"), *ver;
+	long hexversion;
+	if (!sys)
+		return -1;
+	ver = PyObject_GetAttrString(sys, "hexversion");
+	Py_DECREF(sys);
+	if (!ver)
+		return -1;
+	hexversion = PyInt_AsLong(ver);
+	Py_DECREF(ver);
 	/* sys.hexversion is a 32-bit number by default, so the -1 case
 	 * should only occur in unusual circumstances (e.g. if sys.hexversion
 	 * is manually set to an invalid value). */
--- a/mercurial/patch.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/mercurial/patch.py	Mon Feb 02 12:50:48 2015 -0600
@@ -1831,10 +1831,7 @@
                         header.append('new file mode %s\n' % mode)
                     elif ctx2.flags(f):
                         losedatafn(f)
-                # In theory, if tn was copied or renamed we should check
-                # if the source is binary too but the copy record already
-                # forces git mode.
-                if util.binary(tn):
+                if util.binary(to) or util.binary(tn):
                     if opts.git:
                         binarydiff = True
                     else:
--- a/mercurial/repair.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/mercurial/repair.py	Mon Feb 02 12:50:48 2015 -0600
@@ -17,6 +17,12 @@
                   repo.ui.config('experimental', 'strip-bundle2-version'))
     if usebundle2:
         cgversion = repo.ui.config('experimental', 'strip-bundle2-version')
+        if cgversion not in changegroup.packermap:
+            repo.ui.warn(_('unknown strip-bundle2-version value %r; ' +
+                            'should be one of %r\n') %
+                         (cgversion, sorted(changegroup.packermap.keys()),))
+            cgversion = '01'
+            usebundle2 = False
     else:
         cgversion = '01'
 
--- a/mercurial/revset.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/mercurial/revset.py	Mon Feb 02 12:50:48 2015 -0600
@@ -31,7 +31,7 @@
             revsnode = revqueue.popleft()
             heapq.heappush(h, -revsnode)
 
-        seen = set([node.nullrev])
+        seen = set()
         while h:
             current = -heapq.heappop(h)
             if current not in seen:
@@ -496,7 +496,8 @@
         if kind == 'literal':
             bmrev = repo._bookmarks.get(pattern, None)
             if not bmrev:
-                raise util.Abort(_("bookmark '%s' does not exist") % bm)
+                raise error.RepoLookupError(_("bookmark '%s' does not exist")
+                                            % bm)
             bms.add(repo[bmrev].rev())
         else:
             matchrevs = set()
@@ -504,8 +505,8 @@
                 if matcher(name):
                     matchrevs.add(bmrev)
             if not matchrevs:
-                raise util.Abort(_("no bookmarks exist that match '%s'")
-                                 % pattern)
+                raise error.RepoLookupError(_("no bookmarks exist"
+                                              " that match '%s'") % pattern)
             for bmrev in matchrevs:
                 bms.add(repo[bmrev].rev())
     else:
@@ -1048,7 +1049,8 @@
                 # i18n: "_matchfiles" is a keyword
                 raise error.ParseError(_('_matchfiles expected at most one '
                                          'revision'))
-            rev = value
+            if value != '': # empty means working directory; leave rev as None
+                rev = value
         elif prefix == 'd:':
             if default is not None:
                 # i18n: "_matchfiles" is a keyword
@@ -1261,15 +1263,16 @@
     namespaces = set()
     if kind == 'literal':
         if pattern not in repo.names:
-            raise util.Abort(_("namespace '%s' does not exist") % ns)
+            raise error.RepoLookupError(_("namespace '%s' does not exist")
+                                        % ns)
         namespaces.add(repo.names[pattern])
     else:
         for name, ns in repo.names.iteritems():
             if matcher(name):
                 namespaces.add(ns)
         if not namespaces:
-            raise util.Abort(_("no namespace exists that match '%s'")
-                             % pattern)
+            raise error.RepoLookupError(_("no namespace exists"
+                                          " that match '%s'") % pattern)
 
     names = set()
     for ns in namespaces:
@@ -1544,7 +1547,7 @@
     except (TypeError, ValueError):
         # i18n: "rev" is a keyword
         raise error.ParseError(_("rev expects a number"))
-    if l not in fullreposet(repo):
+    if l not in fullreposet(repo) and l != node.nullrev:
         return baseset()
     return subset & baseset([l])
 
@@ -1815,7 +1818,8 @@
             # avoid resolving all tags
             tn = repo._tagscache.tags.get(pattern, None)
             if tn is None:
-                raise util.Abort(_("tag '%s' does not exist") % pattern)
+                raise error.RepoLookupError(_("tag '%s' does not exist")
+                                            % pattern)
             s = set([repo[tn].rev()])
         else:
             s = set([cl.rev(n) for t, n in repo.tagslist() if matcher(t)])
--- a/mercurial/subrepo.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/mercurial/subrepo.py	Mon Feb 02 12:50:48 2015 -0600
@@ -435,7 +435,7 @@
         """
         raise NotImplementedError
 
-    def add(self, ui, match, dryrun, listsubrepos, prefix, explicitonly):
+    def add(self, ui, match, prefix, explicitonly, **opts):
         return []
 
     def addremove(self, matcher, prefix, opts, dry_run, similarity):
@@ -1648,13 +1648,17 @@
         if match.anypats():
             return #No support for include/exclude yet
 
+        output = ""
         if match.always():
-            ui.write(self._gitcommand(cmd))
+            output += self._gitcommand(cmd) + '\n'
         elif match.files():
             for f in match.files():
-                ui.write(self._gitcommand(cmd + [f]))
+                output += self._gitcommand(cmd + [f]) + '\n'
         elif match(gitprefix): #Subrepo is matched
-            ui.write(self._gitcommand(cmd))
+            output += self._gitcommand(cmd) + '\n'
+
+        if output.strip():
+            ui.write(output)
 
     @annotatesubrepoerror
     def revert(self, substate, *pats, **opts):
--- a/mercurial/templatekw.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/mercurial/templatekw.py	Mon Feb 02 12:50:48 2015 -0600
@@ -382,6 +382,13 @@
     names = ns.names(repo, ctx.node())
     return showlist(ns.templatename, names, plural=namespace, **args)
 
+# don't remove "showtags" definition, even though namespaces will put
+# a helper function for "tags" keyword into "keywords" map automatically,
+# because online help text is built without namespaces initialization
+def showtags(**args):
+    """:tags: List of strings. Any tags associated with the changeset."""
+    return shownames('tags', **args)
+
 # keywords are callables like:
 # fn(repo, ctx, templ, cache, revcache, **args)
 # with:
@@ -420,6 +427,7 @@
     'phaseidx': showphaseidx,
     'rev': showrev,
     'subrepos': showsubrepos,
+    'tags': showtags,
 }
 
 def _showparents(**args):
--- a/tests/run-tests.py	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/run-tests.py	Mon Feb 02 12:50:48 2015 -0600
@@ -786,7 +786,7 @@
         tdir = self._testdir.replace('\\', '/')
         proc = Popen4('%s -c "%s/hghave %s"' %
                       (self._shell, tdir, ' '.join(reqs)),
-                      self._testtmp, 0)
+                      self._testtmp, 0, self._getenv())
         stdout, stderr = proc.communicate()
         ret = proc.wait()
         if wifexited(ret):
@@ -1664,6 +1664,9 @@
             pypath.append(oldpypath)
         os.environ[IMPL_PATH] = os.pathsep.join(pypath)
 
+        if self.options.pure:
+            os.environ["HGTEST_RUN_TESTS_PURE"] = "--pure"
+
         self._coveragefile = os.path.join(self._testdir, '.coverage')
 
         vlog("# Using TESTDIR", self._testdir)
--- a/tests/test-alias.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-alias.t	Mon Feb 02 12:50:48 2015 -0600
@@ -525,3 +525,12 @@
   [1]
   $ hg exit1
   [1]
+
+#if no-outer-repo
+  $ hg root
+  abort: no repository found in '$TESTTMP' (.hg not found)!
+  [255]
+  $ hg --config alias.hgroot='!hg root' hgroot
+  abort: no repository found in '$TESTTMP' (.hg not found)!
+  [255]
+#endif
--- a/tests/test-bookmarks.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-bookmarks.t	Mon Feb 02 12:50:48 2015 -0600
@@ -133,8 +133,13 @@
   
 
   $ hg log -r 'bookmark(unknown)'
-  abort: bookmark 'unknown' does not exist
+  abort: bookmark 'unknown' does not exist!
   [255]
+  $ hg log -r 'bookmark("re:unknown")'
+  abort: no bookmarks exist that match 'unknown'!
+  [255]
+  $ hg log -r 'present(bookmark("literal:unknown"))'
+  $ hg log -r 'present(bookmark("re:unknown"))'
 
   $ hg help revsets | grep 'bookmark('
       "bookmark([name])"
--- a/tests/test-copy.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-copy.t	Mon Feb 02 12:50:48 2015 -0600
@@ -180,6 +180,13 @@
   $ hg st -C
   M bar
     foo
+
+XXX: filtering lfilesrepo.status() in 3.3-rc causes the copy source to not be
+displayed.
+  $ hg st -C --config extensions.largefiles=
+  M bar
+    foo
+
   $ hg commit -m3
 
 should show no parents for tip
--- a/tests/test-diff-binary-file.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-diff-binary-file.t	Mon Feb 02 12:50:48 2015 -0600
@@ -9,6 +9,9 @@
 
   $ hg revert -r 0 binfile.bin
   $ hg ci -m 'revert binfile.bin'
+  $ hg cp binfile.bin nonbinfile
+  $ echo text > nonbinfile
+  $ hg ci -m 'make non-binary copy of binary file'
 
   $ hg diff --nodates -r 0 -r 1
   diff -r 48b371597640 -r acea2ab458c8 binfile.bin
@@ -41,4 +44,14 @@
   diff --git a/binfile.bin b/binfile.bin
   Binary file binfile.bin has changed
 
+  $ hg diff --git -r 2 -r 3
+  diff --git a/binfile.bin b/nonbinfile
+  copy from binfile.bin
+  copy to nonbinfile
+  index 37ba3d1c6f17137d9c5f5776fa040caf5fe73ff9..8e27be7d6154a1f68ea9160ef0e18691d20560dc
+  GIT binary patch
+  literal 5
+  Mc$_OqttjCF00uV!&;S4c
+  
+
   $ cd ..
--- a/tests/test-extdiff.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-extdiff.t	Mon Feb 02 12:50:48 2015 -0600
@@ -160,6 +160,28 @@
   running "echo echo-naked 'being quoted' */a $TESTTMP/a/a" in */extdiff.* (glob)
 #endif
 
+  $ touch 'sp ace'
+  $ hg add 'sp ace'
+  $ hg ci -m 'sp ace'
+  created new head
+  $ echo > 'sp ace'
+
+Test pre-72a89cf86fcd backward compatibility with half-baked manual quoting
+
+  $ cat <<EOF >> $HGRCPATH
+  > [extdiff]
+  > odd =
+  > [merge-tools]
+  > odd.diffargs = --foo='\$clabel' '\$clabel' "--bar=\$clabel" "\$clabel"
+  > odd.executable = echo
+  > EOF
+#if windows
+TODO
+#else
+  $ hg --debug odd | grep '^running'
+  running "*/bin/echo --foo='sp ace' 'sp ace' --bar='sp ace' 'sp ace'" in * (glob)
+#endif
+
 #if execbit
 
 Test extdiff of multiple files in tmp dir:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-fileset-generated.t	Mon Feb 02 12:50:48 2015 -0600
@@ -0,0 +1,181 @@
+  $ hg init
+
+Set up history and working copy
+
+  $ python $TESTDIR/generate-working-copy-states.py state 2 1
+  $ hg addremove -q --similarity 0
+  $ hg commit -m first
+
+  $ python $TESTDIR/generate-working-copy-states.py state 2 2
+  $ hg addremove -q --similarity 0
+  $ hg commit -m second
+
+  $ python $TESTDIR/generate-working-copy-states.py state 2 wc
+  $ hg addremove -q --similarity 0
+  $ hg forget *_*_*-untracked
+  $ rm *_*_missing-*
+
+Test status
+
+  $ hg st -A 'set:modified()'
+  M content1_content1_content3-tracked
+  M content1_content2_content1-tracked
+  M content1_content2_content3-tracked
+  M missing_content2_content3-tracked
+
+  $ hg st -A 'set:added()'
+  A content1_missing_content1-tracked
+  A content1_missing_content3-tracked
+  A missing_missing_content3-tracked
+
+  $ hg st -A 'set:removed()'
+  R content1_content1_content1-untracked
+  R content1_content1_content3-untracked
+  R content1_content1_missing-untracked
+  R content1_content2_content1-untracked
+  R content1_content2_content2-untracked
+  R content1_content2_content3-untracked
+  R content1_content2_missing-untracked
+  R missing_content2_content2-untracked
+  R missing_content2_content3-untracked
+  R missing_content2_missing-untracked
+
+  $ hg st -A 'set:deleted()'
+  ! content1_content1_missing-tracked
+  ! content1_content2_missing-tracked
+  ! content1_missing_missing-tracked
+  ! missing_content2_missing-tracked
+  ! missing_missing_missing-tracked
+
+  $ hg st -A 'set:unknown()'
+  ? content1_missing_content1-untracked
+  ? content1_missing_content3-untracked
+  ? missing_missing_content3-untracked
+
+  $ hg st -A 'set:clean()'
+  C content1_content1_content1-tracked
+  C content1_content2_content2-tracked
+  C missing_content2_content2-tracked
+
+Test log
+
+  $ hg log -T '{rev}\n' --stat 'set:modified()'
+  1
+   content1_content2_content1-tracked |  2 +-
+   content1_content2_content3-tracked |  2 +-
+   missing_content2_content3-tracked  |  1 +
+   3 files changed, 3 insertions(+), 2 deletions(-)
+  
+  0
+   content1_content1_content3-tracked |  1 +
+   content1_content2_content1-tracked |  1 +
+   content1_content2_content3-tracked |  1 +
+   3 files changed, 3 insertions(+), 0 deletions(-)
+  
+  $ hg log -T '{rev}\n' --stat 'set:added()'
+  1
+   content1_missing_content1-tracked |  1 -
+   content1_missing_content3-tracked |  1 -
+   2 files changed, 0 insertions(+), 2 deletions(-)
+  
+  0
+   content1_missing_content1-tracked |  1 +
+   content1_missing_content3-tracked |  1 +
+   2 files changed, 2 insertions(+), 0 deletions(-)
+  
+  $ hg log -T '{rev}\n' --stat 'set:removed()'
+  1
+   content1_content2_content1-untracked |  2 +-
+   content1_content2_content2-untracked |  2 +-
+   content1_content2_content3-untracked |  2 +-
+   content1_content2_missing-untracked  |  2 +-
+   missing_content2_content2-untracked  |  1 +
+   missing_content2_content3-untracked  |  1 +
+   missing_content2_missing-untracked   |  1 +
+   7 files changed, 7 insertions(+), 4 deletions(-)
+  
+  0
+   content1_content1_content1-untracked |  1 +
+   content1_content1_content3-untracked |  1 +
+   content1_content1_missing-untracked  |  1 +
+   content1_content2_content1-untracked |  1 +
+   content1_content2_content2-untracked |  1 +
+   content1_content2_content3-untracked |  1 +
+   content1_content2_missing-untracked  |  1 +
+   7 files changed, 7 insertions(+), 0 deletions(-)
+  
+  $ hg log -T '{rev}\n' --stat 'set:deleted()'
+  1
+   content1_content2_missing-tracked |  2 +-
+   content1_missing_missing-tracked  |  1 -
+   missing_content2_missing-tracked  |  1 +
+   3 files changed, 2 insertions(+), 2 deletions(-)
+  
+  0
+   content1_content1_missing-tracked |  1 +
+   content1_content2_missing-tracked |  1 +
+   content1_missing_missing-tracked  |  1 +
+   3 files changed, 3 insertions(+), 0 deletions(-)
+  
+  $ hg log -T '{rev}\n' --stat 'set:unknown()'
+  1
+   content1_missing_content1-untracked |  1 -
+   content1_missing_content3-untracked |  1 -
+   2 files changed, 0 insertions(+), 2 deletions(-)
+  
+  0
+   content1_missing_content1-untracked |  1 +
+   content1_missing_content3-untracked |  1 +
+   2 files changed, 2 insertions(+), 0 deletions(-)
+  
+  $ hg log -T '{rev}\n' --stat 'set:clean()'
+  1
+   content1_content2_content2-tracked |  2 +-
+   missing_content2_content2-tracked  |  1 +
+   2 files changed, 2 insertions(+), 1 deletions(-)
+  
+  0
+   content1_content1_content1-tracked |  1 +
+   content1_content2_content2-tracked |  1 +
+   2 files changed, 2 insertions(+), 0 deletions(-)
+  
+Test revert
+
+BROKEN: the files that get undeleted were not modified, they were removed,
+and content1_content2_missing-tracked was also not modified, it was deleted
+
+  $ hg revert 'set:modified()'
+  reverting content1_content1_content3-tracked
+  reverting content1_content2_content1-tracked
+  undeleting content1_content2_content1-untracked
+  undeleting content1_content2_content2-untracked
+  reverting content1_content2_content3-tracked
+  undeleting content1_content2_content3-untracked
+  reverting content1_content2_missing-tracked
+  undeleting content1_content2_missing-untracked
+  reverting missing_content2_content3-tracked
+
+BROKEN: only the files that get forgotten are correct
+
+  $ hg revert 'set:added()'
+  forgetting content1_missing_content1-tracked
+  forgetting content1_missing_content3-tracked
+  undeleting missing_content2_content2-untracked
+  undeleting missing_content2_content3-untracked
+  reverting missing_content2_missing-tracked
+  undeleting missing_content2_missing-untracked
+  forgetting missing_missing_content3-tracked
+
+  $ hg revert 'set:removed()'
+  undeleting content1_content1_content1-untracked
+  undeleting content1_content1_content3-untracked
+  undeleting content1_content1_missing-untracked
+
+  $ hg revert 'set:deleted()'
+  reverting content1_content1_missing-tracked
+  forgetting content1_missing_missing-tracked
+  forgetting missing_missing_missing-tracked
+
+  $ hg revert 'set:unknown()'
+
+  $ hg revert 'set:clean()'
--- a/tests/test-glog.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-glog.t	Mon Feb 02 12:50:48 2015 -0600
@@ -1780,7 +1780,9 @@
   (group
     (func
       ('symbol', '_firstancestors')
-      ('symbol', '6')))
+      (func
+        ('symbol', 'rev')
+        ('symbol', '6'))))
 
 Cannot compare with log --follow-first FILE as it never worked
 
@@ -2187,7 +2189,9 @@
   (group
     (func
       ('symbol', 'descendants')
-      ('symbol', '6')))
+      (func
+        ('symbol', 'rev')
+        ('symbol', '6'))))
   --- log.nodes	* (glob)
   +++ glog.nodes	* (glob)
   @@ -1,3 +1,3 @@
@@ -2203,7 +2207,9 @@
   (group
     (func
       ('symbol', '_firstdescendants')
-      ('symbol', '6')))
+      (func
+        ('symbol', 'rev')
+        ('symbol', '6'))))
   --- log.nodes	* (glob)
   +++ glog.nodes	* (glob)
   @@ -1,3 +1,3 @@
@@ -2219,7 +2225,9 @@
   (group
     (func
       ('symbol', 'ancestors')
-      ('symbol', '6')))
+      (func
+        ('symbol', 'rev')
+        ('symbol', '6'))))
 
 Test --follow-first and backward --rev
 
@@ -2228,7 +2236,9 @@
   (group
     (func
       ('symbol', '_firstancestors')
-      ('symbol', '6')))
+      (func
+        ('symbol', 'rev')
+        ('symbol', '6'))))
 
 Test subdir
 
--- a/tests/test-graft.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-graft.t	Mon Feb 02 12:50:48 2015 -0600
@@ -606,6 +606,7 @@
   
 ... grafts of grafts unfortunately can't
   $ hg graft -q 13
+  warning: can't find ancestor for 'b' copied from 'a'!
   $ hg log -r 'destination(13)'
 All copies of a cset
   $ hg log -r 'origin(13) or destination(origin(13))'
@@ -636,7 +637,7 @@
   date:        Thu Jan 01 00:00:00 1970 +0000
   summary:     2
   
-  changeset:   22:1313d0a825e2
+  changeset:   22:e95864da75a0
   branch:      dev
   tag:         tip
   user:        foo
@@ -648,24 +649,28 @@
 
   $ hg graft 'origin(13) or destination(origin(13))'
   skipping ancestor revision 21:7e61b508e709
-  skipping ancestor revision 22:1313d0a825e2
-  skipping revision 2:5c095ad7e90f (already grafted to 22:1313d0a825e2)
+  skipping ancestor revision 22:e95864da75a0
+  skipping revision 2:5c095ad7e90f (already grafted to 22:e95864da75a0)
   grafting 7:ef0ef43d49e7 "2"
+  warning: can't find ancestor for 'b' copied from 'a'!
   grafting 13:9db0f28fd374 "2"
+  warning: can't find ancestor for 'b' copied from 'a'!
   grafting 19:9627f653b421 "2"
   merging b
+  warning: can't find ancestor for 'b' copied from 'a'!
 
 graft with --force (still doesn't graft merges)
 
   $ hg graft 19 0 6
   skipping ungraftable merge revision 6
   skipping ancestor revision 0:68795b066622
-  skipping already grafted revision 19:9627f653b421 (22:1313d0a825e2 also has origin 2:5c095ad7e90f)
+  skipping already grafted revision 19:9627f653b421 (22:e95864da75a0 also has origin 2:5c095ad7e90f)
   [255]
   $ hg graft 19 0 6 --force
   skipping ungraftable merge revision 6
   grafting 19:9627f653b421 "2"
   merging b
+  warning: can't find ancestor for 'b' copied from 'a'!
   grafting 0:68795b066622 "0"
 
 graft --force after backout
@@ -674,12 +679,12 @@
   $ hg ci -m 28
   $ hg backout 28
   reverting a
-  changeset 29:484c03b8dfa4 backs out changeset 28:6c56f0f7f033
+  changeset 29:8389853bba65 backs out changeset 28:cd42a33e1848
   $ hg graft 28
-  skipping ancestor revision 28:6c56f0f7f033
+  skipping ancestor revision 28:cd42a33e1848
   [255]
   $ hg graft 28 --force
-  grafting 28:6c56f0f7f033 "28"
+  grafting 28:cd42a33e1848 "28"
   merging a
   $ cat a
   abc
@@ -689,7 +694,7 @@
   $ echo def > a
   $ hg ci -m 31
   $ hg graft 28 --force --tool internal:fail
-  grafting 28:6c56f0f7f033 "28"
+  grafting 28:cd42a33e1848 "28"
   abort: unresolved conflicts, can't continue
   (use hg resolve and hg graft --continue)
   [255]
@@ -702,7 +707,7 @@
   $ hg resolve -m a
   (no more unresolved files)
   $ hg graft -c
-  grafting 28:6c56f0f7f033 "28"
+  grafting 28:cd42a33e1848 "28"
   $ cat a
   abc
 
@@ -723,5 +728,5 @@
   $ hg tag -f something
   $ hg graft -qr 27
   $ hg graft -f 27
-  grafting 27:3aaa8b6725f0 "28"
-  note: graft of 27:3aaa8b6725f0 created no changes to commit
+  grafting 27:3d35c4c79e5a "28"
+  note: graft of 27:3d35c4c79e5a created no changes to commit
--- a/tests/test-hgweb.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-hgweb.t	Mon Feb 02 12:50:48 2015 -0600
@@ -595,11 +595,14 @@
   Internal Server Error (no-eol)
   [1]
 
+  $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
   $ head -1 errors.log
   .* Exception happened during processing request '/raiseerror': (re)
 
 Uncaught exception after partial content sent
 
+  $ hg --config extensions.hgweberror=$TESTDIR/hgweberror.py serve -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
+  $ cat hg.pid >> $DAEMON_PIDS
   $ $TESTDIR/get-with-headers.py localhost:$HGPORT 'raiseerror?partialresponse=1' transfer-encoding content-type
   200 Script output follows
   transfer-encoding: chunked
@@ -608,4 +611,5 @@
   partial content
   Internal Server Error (no-eol)
 
+  $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
   $ cd ..
--- a/tests/test-histedit-commute.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-histedit-commute.t	Mon Feb 02 12:50:48 2015 -0600
@@ -417,8 +417,8 @@
 
   $ HGEDITOR="sh ./editor.sh" hg histedit 0
   1 files updated, 0 files merged, 1 files removed, 0 files unresolved
-  adding another-dir/initial-file
-  removing initial-dir/initial-file
+  adding another-dir/initial-file (glob)
+  removing initial-dir/initial-file (glob)
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
--- a/tests/test-issue1175.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-issue1175.t	Mon Feb 02 12:50:48 2015 -0600
@@ -30,11 +30,10 @@
   $ hg ci --debug --traceback -Am5 b
   committing files:
   b
-   b: searching for copy revision for a
-   b: copy a:b80de5d138758541c5f05265ad144ab9fa86d1db
+  warning: can't find ancestor for 'b' copied from 'a'!
   committing manifest
   committing changelog
-  committed changeset 5:732aafbecb501a198b3cc9323ad3899ff04ccf95
+  committed changeset 5:83a687e8a97c80992ba385bbfd766be181bfb1d1
 
   $ hg verify
   checking changesets
@@ -48,10 +47,50 @@
   # User test
   # Date 0 0
   #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID 732aafbecb501a198b3cc9323ad3899ff04ccf95
+  # Node ID 83a687e8a97c80992ba385bbfd766be181bfb1d1
   # Parent  1d1625283f71954f21d14c3d44d0ad3c019c597f
   5
   
   diff --git a/b b/b
   new file mode 100644
 
+http://bz.selenic.com/show_bug.cgi?id=4476
+
+  $ hg init foo
+  $ cd foo
+  $ touch a && hg ci -Aqm a
+  $ hg mv a b
+  $ echo b1 >> b
+  $ hg ci -Aqm b1
+  $ hg up 0
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg mv a b
+  $ echo b2 >> b
+  $ hg ci -Aqm b2
+  $ hg graft 1
+  grafting 1:5974126fad84 "b1"
+  merging b
+  warning: conflicts during merge.
+  merging b incomplete! (edit conflicts, then use 'hg resolve --mark')
+  abort: unresolved conflicts, can't continue
+  (use hg resolve and hg graft --continue)
+  [255]
+  $ echo a > b
+  $ echo b3 >> b
+  $ hg resolve --mark b
+  (no more unresolved files)
+  $ hg graft --continue
+  grafting 1:5974126fad84 "b1"
+  warning: can't find ancestor for 'b' copied from 'a'!
+  $ hg log -f b -T 'changeset:   {rev}:{node|short}\nsummary:     {desc}\n\n'
+  changeset:   3:376d30ccffc0
+  summary:     b1
+  
+  changeset:   2:416baaa2e5e4
+  summary:     b2
+  
+  changeset:   0:3903775176ed
+  summary:     a
+  
+
+
--- a/tests/test-log.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-log.t	Mon Feb 02 12:50:48 2015 -0600
@@ -45,6 +45,13 @@
   $ hg mv dir/b e
   $ hg ci -me -d '5 0'
 
+Make sure largefiles doesn't interfere with logging a regular file
+  $ hg log a --config extensions.largefiles=
+  changeset:   0:9161b9aeaf16
+  user:        test
+  date:        Thu Jan 01 00:00:01 1970 +0000
+  summary:     a
+  
   $ hg log a
   changeset:   0:9161b9aeaf16
   user:        test
@@ -635,6 +642,20 @@
   
 
 
+log -f -r null
+
+  $ hg log -f -r null
+  changeset:   -1:000000000000
+  user:        
+  date:        Thu Jan 01 00:00:00 1970 +0000
+  
+  $ hg log -f -r null -G
+  o  changeset:   -1:000000000000
+     user:
+     date:        Thu Jan 01 00:00:00 1970 +0000
+  
+
+
 log -r .  with two parents
 
   $ hg up -C 3
@@ -1615,6 +1636,12 @@
   |
   o  a
   
+Ensure that largefiles doesn't intefere with following a normal file
+  $ hg  --config extensions.largefiles= log -f d -T '{desc}' -G
+  @  c
+  |
+  o  a
+  
   $ hg log -f d/a -T '{desc}' -G
   @  c
   |
--- a/tests/test-rebase-obsolete.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-rebase-obsolete.t	Mon Feb 02 12:50:48 2015 -0600
@@ -498,3 +498,45 @@
   |/
   o  0:cd010b8cd998 A
   
+
+Test hidden changesets in the rebase set (issue4504)
+
+  $ hg up --hidden 9
+  3 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ echo J > J
+  $ hg add J
+  $ hg commit -m J
+  $ hg debugobsolete `hg log --rev . -T '{node}'`
+
+  $ hg rebase --rev .~1::. --dest 'max(desc(D))' --traceback
+  rebasing 9:4bde274eefcf "I"
+  rebasing 13:06edfc82198f "J" (tip)
+  $ hg log -G
+  @  15:5ae8a643467b J
+  |
+  o  14:9ad579b4a5de I
+  |
+  | o  12:acd174b7ab39 I
+  | |
+  | o  11:6c11a6218c97 H
+  | |
+  o |  10:b5313c85b22e D
+  |/
+  | o    8:53a6a128b2b7 M
+  | |\
+  | | x  7:02de42196ebe H
+  | | |
+  o---+  6:eea13746799a G
+  | | |
+  | | o  5:24b6387c8c8c F
+  | | |
+  o---+  4:9520eea781bc E
+   / /
+  x |  3:32af7686d403 D
+  | |
+  o |  2:5fddd98957c8 C
+  | |
+  o |  1:42ccdea3bb16 B
+  |/
+  o  0:cd010b8cd998 A
+  
--- a/tests/test-revset.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-revset.t	Mon Feb 02 12:50:48 2015 -0600
@@ -465,7 +465,9 @@
   9
 
 Test explicit numeric revision
+  $ log 'rev(-2)'
   $ log 'rev(-1)'
+  -1
   $ log 'rev(0)'
   0
   $ log 'rev(9)'
@@ -475,6 +477,10 @@
   hg: parse error: rev expects a number
   [255]
 
+Test null revision
+  $ log 'ancestors(null)'
+  -1
+
   $ log 'outgoing()'
   8
   9
@@ -703,7 +709,7 @@
 we can use patterns when searching for tags
 
   $ log 'tag("1..*")'
-  abort: tag '1..*' does not exist
+  abort: tag '1..*' does not exist!
   [255]
   $ log 'tag("re:1..*")'
   6
@@ -714,11 +720,17 @@
   $ log 'tag("re:0..*")'
 
   $ log 'tag(unknown)'
-  abort: tag 'unknown' does not exist
+  abort: tag 'unknown' does not exist!
   [255]
+  $ log 'tag("re:unknown")'
+  $ log 'present(tag("unknown"))'
+  $ log 'present(tag("re:unknown"))'
   $ log 'branch(unknown)'
   abort: unknown revision 'unknown'!
   [255]
+  $ log 'branch("re:unknown")'
+  $ log 'present(branch("unknown"))'
+  $ log 'present(branch("re:unknown"))'
   $ log 'user(bob)'
   2
 
@@ -766,6 +778,15 @@
   3
   1
 
+  $ log 'named("unknown")'
+  abort: namespace 'unknown' does not exist!
+  [255]
+  $ log 'named("re:unknown")'
+  abort: no namespace exists that match 'unknown'!
+  [255]
+  $ log 'present(named("unknown"))'
+  $ log 'present(named("re:unknown"))'
+
 issue2437
 
   $ log '3 and p1(5)'
--- a/tests/test-run-tests.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-run-tests.t	Mon Feb 02 12:50:48 2015 -0600
@@ -3,7 +3,7 @@
 Smoke test
 ============
 
-  $ $TESTDIR/run-tests.py
+  $ $TESTDIR/run-tests.py $HGTEST_RUN_TESTS_PURE
   
   # Ran 0 tests, 0 skipped, 0 warned, 0 failed.
 
--- a/tests/test-strip.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-strip.t	Mon Feb 02 12:50:48 2015 -0600
@@ -197,6 +197,16 @@
   date:        Thu Jan 01 00:00:00 1970 +0000
   summary:     c
   
+  $ hg --config experimental.bundle2-exp=True --config experimental.strip-bundle2-version=INVALID strip 4
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  unknown strip-bundle2-version value 'INVALID'; should be one of ['01', '02']
+  saved backup bundle to $TESTTMP/test/.hg/strip-backup/264128213d29-0b39d6bf-backup.hg (glob)
+  $ hg debugbundle .hg/strip-backup/*
+  264128213d290d868c54642d13aeaa3675551a78
+  $ restore
+
+  $ hg up -C 4
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg --config experimental.bundle2-exp=True --config experimental.strip-bundle2-version=02 --traceback strip 4
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   saved backup bundle to $TESTTMP/test/.hg/strip-backup/264128213d29-0b39d6bf-backup.hg (glob)
--- a/tests/test-subrepo-deep-nested-change.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-subrepo-deep-nested-change.t	Mon Feb 02 12:50:48 2015 -0600
@@ -351,5 +351,30 @@
   R sub1/sub2/test.txt
   ? foo/bar/abc
   ? sub1/sub2/untracked.txt
+  $ hg add sub1/sub2
+  $ hg ci -Sqm 'forget testing'
+
+Test issue4330: commit a directory where only normal files have changed
+  $ touch foo/bar/large.dat
+  $ hg add --large foo/bar/large.dat
+  $ hg ci -m 'add foo/bar/large.dat'
+  $ touch a.txt
+  $ touch a.dat
+  $ hg add -v foo/bar/abc a.txt a.dat
+  adding a.dat as a largefile
+  adding a.txt
+  adding foo/bar/abc (glob)
+  $ hg ci -m 'dir commit with only normal file deltas' foo/bar
+  $ hg status
+  A a.dat
+  A a.txt
+
+Test a directory commit with a changed largefile and a changed normal file
+  $ echo changed > foo/bar/large.dat
+  $ echo changed > foo/bar/abc
+  $ hg ci -m 'dir commit with normal and lf file deltas' foo
+  $ hg status
+  A a.dat
+  A a.txt
 
   $ cd ..
--- a/tests/test-subrepo-git.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-subrepo-git.t	Mon Feb 02 12:50:48 2015 -0600
@@ -112,7 +112,7 @@
   @@ -1,2 +1,3 @@
    g
    gg
-  +ggg (no-eol)
+  +ggg
   $ hg commit --subrepos -m ggg
   committing subrepository s
   $ hg debugsub
@@ -133,6 +133,7 @@
   $ echo f > f
   $ hg status --subrepos
   ? s/f
+  $ hg add .
   $ git add f
   $ cd ..
 
@@ -695,7 +696,7 @@
   +woopwoop
   +
   +foo
-  +bar (no-eol)
+  +bar
 
   $ hg commit --subrepos -m "Added foobar"
   committing subrepository s
@@ -717,7 +718,7 @@
   +woopwoop
   +
   +foo
-  +bar (no-eol)
+  +bar
 
 check output when only diffing the subrepository
   $ hg diff -c . --subrepos s
@@ -730,7 +731,7 @@
   +woopwoop
   +
   +foo
-  +bar (no-eol)
+  +bar
 
 check output when diffing something else
   $ hg diff -c . --subrepos .hgsubstate --nodates
@@ -760,7 +761,7 @@
   --- /dev/null
   +++ b/s/barfoo
   @@ -0,0 +1 @@
-  +foo (no-eol)
+  +foo
   $ hg diff --subrepos s/foobar
   diff --git a/s/foobar b/s/foobar
   index 8a5a5e2..bd5812a 100644
@@ -771,7 +772,7 @@
   +woop    woop
    
    foo
-   bar (no-eol)
+   bar
 
 execute a diffstat
 the output contains a regex, because git 1.7.10 and 1.7.11
@@ -779,7 +780,7 @@
   $ hg diff --subrepos --stat
   \s*barfoo |\s*1 + (re)
   \s*foobar |\s*2 +- (re)
-   2 files changed, 2 insertions\(\+\), 1 deletions?\(-\) \(no-eol\) (re)
+   2 files changed, 2 insertions\(\+\), 1 deletions?\(-\) (re)
 
 ensure adding include/exclude ignores the subrepo
   $ hg diff --subrepos -I s/foobar
@@ -787,7 +788,7 @@
 
 revert the subrepository
   $ hg revert --all
-  reverting subrepo ../gitroot (glob)
+  reverting subrepo ../gitroot
 
   $ hg status --subrepos
   ? s/barfoo
@@ -796,7 +797,7 @@
   $ mv s/foobar.orig s/foobar
 
   $ hg revert --no-backup s
-  reverting subrepo ../gitroot (glob)
+  reverting subrepo ../gitroot
 
   $ hg status --subrepos
   ? s/barfoo
--- a/tests/test-subrepo-recursion.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-subrepo-recursion.t	Mon Feb 02 12:50:48 2015 -0600
@@ -162,6 +162,14 @@
   M ../foo/bar/z.txt
   M ../foo/y.txt
   ? a.txt
+
+XXX: filtering lfilesrepo.status() in 3.3-rc causes these files to be listed as
+added instead of modified.
+  $ hg status -S .. --config extensions.largefiles=
+  M ../foo/bar/z.txt
+  M ../foo/y.txt
+  ? a.txt
+
   $ hg diff --nodates -S ..
   diff -r d254738c5f5e foo/y.txt
   --- a/foo/y.txt
--- a/tests/test-subrepo-svn.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-subrepo-svn.t	Mon Feb 02 12:50:48 2015 -0600
@@ -439,8 +439,9 @@
   $ hg add .hgsub
   $ hg ci -m addsub
   $ echo a > a
-  $ hg ci -Am adda
+  $ hg add .
   adding a
+  $ hg ci -m adda
   $ hg up 0
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   $ svn up -qr6 s
--- a/tests/test-subrepo.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-subrepo.t	Mon Feb 02 12:50:48 2015 -0600
@@ -758,6 +758,8 @@
 
   $ echo issue3276_ok > repo/s/b
   $ hg -R repo2 push -f -q
+  $ touch -t 200001010000 repo/.hgsubstate
+  $ hg -R repo status --config debug.dirstate.delaywrite=2 repo/.hgsubstate
   $ hg -R repo update
   b: untracked file differs
   abort: untracked files in working directory differ from files in requested revision (in subrepo s)
@@ -766,6 +768,7 @@
   $ cat repo/s/b
   issue3276_ok
   $ rm repo/s/b
+  $ touch -t 200001010000 repo/.hgsubstate
   $ hg -R repo revert --all
   reverting repo/.hgsubstate (glob)
   reverting subrepo s
--- a/tests/test-tag.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-tag.t	Mon Feb 02 12:50:48 2015 -0600
@@ -395,7 +395,10 @@
   $ hg -R repo-tag commit -A -m "test"
   adding test
   $ hg init repo-tag-target
-  $ hg -R repo-tag --config hooks.commit="\"hg\" push \"`pwd`/repo-tag-target\"" tag tag
+  $ cat > "$TESTTMP/issue3344.sh" <<EOF
+  > hg push "$TESTTMP/repo-tag-target"
+  > EOF
+  $ hg -R repo-tag --config hooks.commit="sh ../issue3344.sh" tag tag
   pushing to $TESTTMP/repo-tag-target (glob)
   searching for changes
   adding changesets
--- a/tests/test-tools.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-tools.t	Mon Feb 02 12:50:48 2015 -0600
@@ -94,13 +94,10 @@
   0000: 79 61 64 64 61                                  |yadda|
 #else
   $ f -qr dir -HB 17
-  dir: directory with 3 files
+  dir: directory with 2 files (esc)
   dir/bar: (glob)
   0000: 31 0a 32 0a 33 0a 34 0a 35 0a 36 0a 37 0a 38 0a |1.2.3.4.5.6.7.8.|
   0010: 39                                              |9|
-  dir/baz: (glob)
-  0000: 31 0a 32 0a 33 0a 34 0a 35 0a 36 0a 37 0a 38 0a |1.2.3.4.5.6.7.8.|
-  0010: 39                                              |9|
   dir/foo: (glob)
   0000: 66 6f 6f 0a                                     |foo.|
 #endif
--- a/tests/test-treediscovery.t	Sat Jan 17 22:01:14 2015 -0200
+++ b/tests/test-treediscovery.t	Mon Feb 02 12:50:48 2015 -0600
@@ -520,7 +520,7 @@
   "GET /?cmd=heads HTTP/1.1" 200 -
   "GET /?cmd=branches HTTP/1.1" 200 - x-hgarg-1:nodes=d8f638ac69e9ae8dea4f09f11d696546a912d961
   "GET /?cmd=between HTTP/1.1" 200 - x-hgarg-1:pairs=d8f638ac69e9ae8dea4f09f11d696546a912d961-d57206cc072a18317c1e381fb60aa31bd3401785
-  "GET /?cmd=changegroupsubset HTTP/1.1" 200 - x-hgarg-1:bases=d8f638ac69e9ae8dea4f09f11d696546a912d961&heads=d8f638ac69e9ae8dea4f09f11d696546a912d961+2c8d5d5ec612be65cdfdeac78b7662ab1696324a
+  "GET /?cmd=changegroupsubset HTTP/1.1" 200 - x-hgarg-1:bases=d8f638ac69e9ae8dea4f09f11d696546a912d961&heads=d8f638ac69e9ae8dea4f09f11d696546a912d961
   "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=phases
   "GET /?cmd=capabilities HTTP/1.1" 200 -
   "GET /?cmd=heads HTTP/1.1" 200 -