Merge with stable.
authorAugie Fackler <raf@durin42.com>
Tue, 05 Nov 2013 13:25:45 -0500
changeset 19983 e1317d3e59e1
parent 19982 3e1e4a8aec1e (current diff)
parent 19980 0151b61fed97 (diff)
child 19985 aa80446aacc3
Merge with stable.
contrib/check-code.py
--- a/.hgsigs	Sat Nov 02 11:25:04 2013 +0100
+++ b/.hgsigs	Tue Nov 05 13:25:45 2013 -0500
@@ -78,3 +78,5 @@
 f37b5a17e6a0ee17afde2cdde5393dd74715fb58 0 iD8DBQBR+ymFywK+sNU5EO8RAuSdAJkBMcd9DAZ3rWE9WGKPm2YZ8LBoXACfXn/wbEsVy7ZgJoUwiWmHSnQaWCI=
 335a558f81dc73afeab4d7be63617392b130117f 0 iQIVAwUAUiZrIyBXgaxoKi1yAQK2iw//cquNqqSkc8Re5/TZT9I6NH+lh6DbOKjJP0Xl1Wqq0K+KSIUgZG4G32ovaEb2l5X0uY+3unRPiZ0ebl0YSw4Fb2ZiPIADXLBTOYRrY2Wwd3tpJeGI6wEgZt3SfcITV/g7NJrCjT3FlYoSOIayrExM80InSdcEM0Q3Rx6HKzY2acyxzgZeAtAW5ohFvHilSvY6p5Gcm4+QptMxvw45GPdreUmjeXZxNXNXZ8P+MjMz/QJbai/N7PjmK8lqnhkBsT48Ng/KhhmOkGntNJ2/ImBWLFGcWngSvJ7sfWwnyhndvGhe0Hq1NcCf7I8TjNDxU5TR+m+uW7xjXdLoDbUjBdX4sKXnh8ZjbYiODKBOrrDq25cf8nA/tnpKyE/qsVy60kOk6loY4XKiYmn1V49Ta0emmDx0hqo3HgxHHsHX0NDnGdWGol7cPRET0RzVobKq1A0jnrhPooWidvLh9bPzLonrWDo+ib+DuySoRkuYUK4pgZJ2mbg6daFOBEZygkSyRB8bo1UQUP7EgQDrWe4khb/5GHEfDkrQz3qu/sXvc0Ir1mOUWBFPHC2DjjCn/oMJuUkG1SwM8l2Bfv7h67ssES6YQ2+RjOix4yid7EXS/Ogl45PzCIPSI5+BbNs10JhE0w5uErBHlF53EDTe/TSLc+GU6DB6PP6dH912Njdr3jpNSUQ=
 e7fa36d2ad3a7944a52dca126458d6f482db3524 0 iQIVAwUAUktg4yBXgaxoKi1yAQLO0g//du/2ypYYUfmM/yZ4zztNKIvgMSGTDVbCCGB2y2/wk2EcolpjpGTkcgnJT413ksYtw78ZU+mvv0RjgrFCm8DQ8kroJaQZ2qHmtSUb42hPBPvtg6kL9YaA4yvp87uUBpFRavGS5uX4hhEIyvZKzhXUBvqtL3TfwR7ld21bj8j00wudqELyyU9IrojIY9jkJ3XL/4shBGgP7u6OK5g8yJ6zTnWgysUetxHBPrYjG25lziiiZQFvZqK1B3PUqAOaFPltQs0PB8ipOCAHQgJsjaREj8VmC3+rskmSSy66NHm6gAB9+E8oAgOcU7FzWbdYgnz4kR3M7TQvHX9U61NinPXC6Q9d1VPhO3E6sIGvqJ4YeQOn65V9ezYuIpFSlgQzCHMmLVnOV96Uv1R/Z39I4w7D3S5qoZcQT/siQwGbsZoPMGFYmqOK1da5TZWrrJWkYzc9xvzT9m3q3Wds5pmCmo4b/dIqDifWwYEcNAZ0/YLHwCN5SEZWuunkEwtU5o7TZAv3bvDDA6WxUrrHI/y9/qvvhXxsJnY8IueNhshdmWZfXKz+lJi2Dvk7DUlEQ1zZWSsozi1E+3biMPJO47jsxjoT/jmE5+GHLCgcnXXDVBeaVal99IOaTRFukiz2EMsry1s8fnwEE5XKDKRlU/dOPfsje0gc7bgE0QD/u3E4NJ99g9A=
+1596f2d8f2421314b1ddead8f7d0c91009358994 0 iQIVAwUAUmRq+yBXgaxoKi1yAQLolhAAi+l4ZFdQTu9yJDv22YmkmHH4fI3d5VBYgvfJPufpyaj7pX626QNW18UNcGSw2BBpYHIJzWPkk/4XznLVKr4Ciw2N3/yqloEFV0V2SSrTbMWiR9qXI4KJH+Df3KZnKs3FgiYpXkErL4GWkc1jLVR50xQ5RnkMljjtCd0NTeV2PHZ6gP2qbu6CS+5sm3AFhTDGnx8GicbMw76ZNw5M2G+T48yH9jn5KQi2SBThfi4H9Bpr8FDuR7PzQLgw9SbtYxtdQxNkK55k0nG4oLDxduNakU6SH9t8n8tdCfMt58kTzlQVrPFiTFjKu2n2JioDTz2HEivbZ5H757cu7SvpX8gW3paeBc57e+GOLMisMZABXLICq59c3QnrMwFY4FG+5cpiHVXoaZz/0bYCJx+IhU4QLWqZuzb18KSyHUCqQRzXlzS6QV5O7dY5YNQXFC44j/dS5zdgWMYo2mc6mVP2OaPUn7F6aQh5MCDYorPIOkcNjOg7ytajo7DXbzWt5Al8qt6386BJksyR3GAonc09+l8IFeNxk8HZNP4ETQ8aWj0dC9jgBDPK43T2Bju/i84s+U/bRe4tGSQalZUEv06mkIH/VRJp5w2izYTsdIjA4FT9d36OhaxlfoO1X6tHR9AyA3bF/g/ozvBwuo3kTRUUqo+Ggvx/DmcPQdDiZZQIqDBXch0=
+d825e4025e39d1c39db943cdc89818abd0a87c27 0 iQIVAwUAUnQlXiBXgaxoKi1yAQJd3BAAi7LjMSpXmdR7B8K98C3/By4YHsCOAocMl3JXiLd7SXwKmlta1zxtkgWwWJnNYE3lVJvGCl+l4YsGKmFu755MGXlyORh1x4ohckoC1a8cqnbNAgD6CSvjSaZfnINLGZQP1wIP4yWj0FftKVANQBjj/xkkxO530mjBYnUvyA4PeDd5A1AOUUu6qHzX6S5LcprEt7iktLI+Ae1dYTkiCpckDtyYUKIk3RK/4AGWwGCPddVWeV5bDxLs8GHyMbqdBwx+2EAMtyZfXT+z6MDRsL/gEBVOXHb/UR0qpYED+qFnbtTlxqQkRE/wBhwDoRzUgcSuukQ9iPn79WNDSdT5b6Jd393uEO5BNF/DB6rrOiWmlpoooWgTY9kcwGB02v0hhLrH5r1wkv8baaPl+qjCjBxf4CNKm/83KN5/umGbZlORqPSN5JVxK6vDNwFFmHLaZbMT1g27GsGOWm84VH+dgolgk4nmRNSO37eTNM5Y1C3Zf2amiqDSRcAxCgseg0Jh10G7i52SSTcZPI2MqrwT9eIyg8PTIxT1D5bPcCzkg5nTTL6S7bet7OSwynRnHslhvVUBly8aIj4eY/5cQqAucUUa5sq6xLD8N27Tl+sQi+kE6KtWu2c0ZhpouflYp55XNMHgU4KeFcVcDtHfJRF6THT6tFcHFNauCHbhfN2F33ANMP4=
--- a/.hgtags	Sat Nov 02 11:25:04 2013 +0100
+++ b/.hgtags	Tue Nov 05 13:25:45 2013 -0500
@@ -91,3 +91,5 @@
 f37b5a17e6a0ee17afde2cdde5393dd74715fb58 2.7
 335a558f81dc73afeab4d7be63617392b130117f 2.7.1
 e7fa36d2ad3a7944a52dca126458d6f482db3524 2.7.2
+1596f2d8f2421314b1ddead8f7d0c91009358994 2.8-rc
+d825e4025e39d1c39db943cdc89818abd0a87c27 2.8
--- a/contrib/check-code.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/contrib/check-code.py	Tue Nov 05 13:25:45 2013 -0500
@@ -426,7 +426,7 @@
         fp.close()
         if "no-" "check-code" in pre:
             if debug:
-                print "Skipping %s for %s it has no-" " check-code" % (
+                print "Skipping %s for %s it has no-" "check-code" % (
                        name, f)
             break
         for p, r in filters:
--- a/contrib/win32/mercurial.ini	Sat Nov 02 11:25:04 2013 +0100
+++ b/contrib/win32/mercurial.ini	Tue Nov 05 13:25:45 2013 -0500
@@ -65,6 +65,7 @@
 ;relink =
 ;schemes =
 ;share =
+;shelve =
 ;transplant =
 ;win32mbcs =
 ;zeroconf =
--- a/hgext/churn.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/hgext/churn.py	Tue Nov 05 13:25:45 2013 -0500
@@ -103,16 +103,16 @@
     Examples::
 
       # display count of changed lines for every committer
-      hg churn -t '{author|email}'
+      hg churn -t "{author|email}"
 
       # display daily activity graph
-      hg churn -f '%H' -s -c
+      hg churn -f "%H" -s -c
 
       # display activity of developers by month
-      hg churn -f '%Y-%m' -s -c
+      hg churn -f "%Y-%m" -s -c
 
       # display count of lines changed in every year
-      hg churn -f '%Y' -s
+      hg churn -f "%Y" -s
 
     It is possible to map alternate email addresses to a main address
     by providing a file using the following format::
--- a/hgext/histedit.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/hgext/histedit.py	Tue Nov 05 13:25:45 2013 -0500
@@ -471,6 +471,10 @@
     instead of --outgoing to specify edit target revision exactly in
     such ambiguous situation. See :hg:`help revsets` for detail about
     selecting revisions.
+
+    Returns 0 on success, 1 if user intervention is required (not only
+    for intentional "edit" command, but also for resolving unexpected
+    conflicts).
     """
     # TODO only abort if we try and histedit mq patches, not just
     # blanket if mq patches are applied somewhere
--- a/hgext/largefiles/basestore.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/hgext/largefiles/basestore.py	Tue Nov 05 13:25:45 2013 -0500
@@ -26,10 +26,11 @@
 
     def longmessage(self):
         return (_("error getting id %s from url %s for file %s: %s\n") %
-                 (self.hash, self.url, self.filename, self.detail))
+                 (self.hash, util.hidepassword(self.url), self.filename,
+                  self.detail))
 
     def __str__(self):
-        return "%s: %s" % (self.url, self.detail)
+        return "%s: %s" % (util.hidepassword(self.url), self.detail)
 
 class basestore(object):
     def __init__(self, ui, repo, url):
@@ -69,7 +70,7 @@
 
             if not available.get(hash):
                 ui.warn(_('%s: largefile %s not available from %s\n')
-                        % (filename, hash, self.url))
+                        % (filename, hash, util.hidepassword(self.url)))
                 missing.append(filename)
                 continue
 
@@ -214,4 +215,5 @@
         except lfutil.storeprotonotcapable:
             pass
 
-    raise util.Abort(_('%s does not appear to be a largefile store') % path)
+    raise util.Abort(_('%s does not appear to be a largefile store') %
+                     util.hidepassword(path))
--- a/hgext/largefiles/overrides.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/hgext/largefiles/overrides.py	Tue Nov 05 13:25:45 2013 -0500
@@ -370,36 +370,39 @@
     overwrite = force and not branchmerge
     actions = origfn(repo, p1, p2, pa, branchmerge, force, partial,
                      acceptremote)
+
+    if overwrite:
+        return actions
+
+    removes = set(a[0] for a in actions if a[1] == 'r')
     processed = []
 
     for action in actions:
-        if overwrite:
-            processed.append(action)
-            continue
         f, m, args, msg = action
 
         splitstandin = lfutil.splitstandin(f)
         if (m == "g" and splitstandin is not None and
-            splitstandin in p1 and f in p2):
+            splitstandin in p1 and splitstandin not in removes):
             # Case 1: normal file in the working copy, largefile in
             # the second parent
             lfile = splitstandin
             standin = f
-            msg = _('%s has been turned into a largefile\n'
-                    'use (l)argefile or keep as (n)ormal file?'
+            msg = _('remote turned local normal file %s into a largefile\n'
+                    'use (l)argefile or keep (n)ormal file?'
                     '$$ &Largefile $$ &Normal file') % lfile
             if repo.ui.promptchoice(msg, 0) == 0:
                 processed.append((lfile, "r", None, msg))
                 processed.append((standin, "g", (p2.flags(standin),), msg))
             else:
                 processed.append((standin, "r", None, msg))
-        elif m == "g" and lfutil.standin(f) in p1 and f in p2:
+        elif (m == "g" and
+            lfutil.standin(f) in p1 and lfutil.standin(f) not in removes):
             # Case 2: largefile in the working copy, normal file in
             # the second parent
             standin = lfutil.standin(f)
             lfile = f
-            msg = _('%s has been turned into a normal file\n'
-                    'keep as (l)argefile or use (n)ormal file?'
+            msg = _('remote turned local largefile %s into a normal file\n'
+                    'keep (l)argefile or use (n)ormal file?'
                     '$$ &Largefile $$ &Normal file') % lfile
             if repo.ui.promptchoice(msg, 0) == 0:
                 processed.append((lfile, "r", None, msg))
--- a/hgext/largefiles/proto.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/hgext/largefiles/proto.py	Tue Nov 05 13:25:45 2013 -0500
@@ -40,7 +40,7 @@
             tmpfp.close()
             lfutil.linktousercache(repo, sha)
         except IOError, e:
-            repo.ui.warn(_('largefiles: failed to put %s into store: %s') %
+            repo.ui.warn(_('largefiles: failed to put %s into store: %s\n') %
                          (sha, e.strerror))
             return wireproto.pushres(1)
     finally:
@@ -93,10 +93,10 @@
                         headers={'content-type':'application/mercurial-0.1'})
                     d, output = res.split('\n', 1)
                     for l in output.splitlines(True):
-                        self.ui.warn(_('remote: '), l, '\n')
+                        self.ui.warn(_('remote: '), l) # assume l ends with \n
                     return int(d)
                 except (ValueError, urllib2.HTTPError):
-                    self.ui.warn(_('unexpected putlfile response: %s') % res)
+                    self.ui.warn(_('unexpected putlfile response: %r\n') % res)
                     return 1
             # ... but we can't use sshrepository._call because the data=
             # argument won't get sent, and _callpush does exactly what we want
--- a/hgext/largefiles/remotestore.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/hgext/largefiles/remotestore.py	Tue Nov 05 13:25:45 2013 -0500
@@ -24,9 +24,10 @@
         if self.sendfile(source, hash):
             raise util.Abort(
                 _('remotestore: could not put %s to remote store %s')
-                % (source, self.url))
+                % (source, util.hidepassword(self.url)))
         self.ui.debug(
-            _('remotestore: put %s to remote store %s') % (source, self.url))
+            _('remotestore: put %s to remote store %s\n')
+            % (source, util.hidepassword(self.url)))
 
     def exists(self, hashes):
         return dict((h, s == 0) for (h, s) in self._stat(hashes).iteritems())
@@ -57,7 +58,8 @@
             # This usually indicates a connection problem, so don't
             # keep trying with the other files... they will probably
             # all fail too.
-            raise util.Abort('%s: %s' % (self.url, e.reason))
+            raise util.Abort('%s: %s' %
+                             (util.hidepassword(self.url), e.reason))
         except IOError, e:
             raise basestore.StoreError(filename, hash, self.url, str(e))
 
--- a/hgext/mq.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/hgext/mq.py	Tue Nov 05 13:25:45 2013 -0500
@@ -80,12 +80,12 @@
 command = cmdutil.command(cmdtable)
 testedwith = 'internal'
 
-# force load strip extension formely included in mq and import some utility
+# force load strip extension formerly included in mq and import some utility
 try:
     stripext = extensions.find('strip')
 except KeyError:
     # note: load is lazy so we could avoid the try-except,
-    # but I (marmoute) prefer this explicite code.
+    # but I (marmoute) prefer this explicit code.
     class dummyui(object):
         def debug(self, msg):
             pass
@@ -651,7 +651,7 @@
         """return the mq handled parent or p1
 
         In some case where mq get himself in being the parent of a merge the
-        paappropriate parent may be p2.
+        appropriate parent may be p2.
         (eg: an in progress merge started with mq disabled)
 
         If no parent are managed by mq, p1 is returned.
--- a/hgext/pager.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/hgext/pager.py	Tue Nov 05 13:25:45 2013 -0500
@@ -48,7 +48,7 @@
 '''
 
 import atexit, sys, os, signal, subprocess, errno, shlex
-from mercurial import commands, dispatch, util, extensions
+from mercurial import commands, dispatch, util, extensions, cmdutil
 from mercurial.i18n import _
 
 testedwith = 'internal'
@@ -121,14 +121,20 @@
             attend = ui.configlist('pager', 'attend', attended)
             auto = options['pager'] == 'auto'
             always = util.parsebool(options['pager'])
-            if (always or auto and
-                (cmd in attend or
-                 (cmd not in ui.configlist('pager', 'ignore') and not attend))):
-                ui.setconfig('ui', 'formatted', ui.formatted())
-                ui.setconfig('ui', 'interactive', False)
-                if util.safehasattr(signal, "SIGPIPE"):
-                    signal.signal(signal.SIGPIPE, signal.SIG_DFL)
-                _runpager(ui, p)
+
+            cmds, _ = cmdutil.findcmd(cmd, commands.table)
+
+            ignore = ui.configlist('pager', 'ignore')
+            for cmd in cmds:
+                if (always or auto and
+                    (cmd in attend or
+                     (cmd not in ignore and not attend))):
+                    ui.setconfig('ui', 'formatted', ui.formatted())
+                    ui.setconfig('ui', 'interactive', False)
+                    if util.safehasattr(signal, "SIGPIPE"):
+                        signal.signal(signal.SIGPIPE, signal.SIG_DFL)
+                    _runpager(ui, p)
+                    break
         return orig(ui, options, cmd, cmdfunc)
 
     extensions.wrapfunction(dispatch, '_runcommand', pagecmd)
--- a/hgext/rebase.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/hgext/rebase.py	Tue Nov 05 13:25:45 2013 -0500
@@ -128,7 +128,8 @@
     If a rebase is interrupted to manually resolve a merge, it can be
     continued with --continue/-c or aborted with --abort/-a.
 
-    Returns 0 on success, 1 if nothing to rebase.
+    Returns 0 on success, 1 if nothing to rebase or there are
+    unresolved conflicts.
     """
     originalwd = target = None
     activebookmark = None
@@ -259,7 +260,7 @@
                 if collapsef:
                     targetancestors = repo.changelog.ancestors([target],
                                                                inclusive=True)
-                    external = checkexternal(repo, state, targetancestors)
+                    external = externalparent(repo, state, targetancestors)
 
         if keepbranchesf:
             # insert _savebranch at the start of extrafns so if
@@ -388,24 +389,28 @@
     finally:
         release(lock, wlock)
 
-def checkexternal(repo, state, targetancestors):
-    """Check whether one or more external revisions need to be taken in
-    consideration. In the latter case, abort.
+def externalparent(repo, state, targetancestors):
+    """Return the revision that should be used as the second parent
+    when the revisions in state is collapsed on top of targetancestors.
+    Abort if there is more than one parent.
     """
-    external = nullrev
+    parents = set()
     source = min(state)
     for rev in state:
         if rev == source:
             continue
-        # Check externals and fail if there are more than one
         for p in repo[rev].parents():
             if (p.rev() not in state
                         and p.rev() not in targetancestors):
-                if external != nullrev:
-                    raise util.Abort(_('unable to collapse, there is more '
-                            'than one external parent'))
-                external = p.rev()
-    return external
+                parents.add(p.rev())
+    if not parents:
+        return nullrev
+    if len(parents) == 1:
+        return parents.pop()
+    raise util.Abort(_('unable to collapse on top of %s, there is more '
+                       'than one external parent: %s') %
+                     (max(targetancestors),
+                      ', '.join(str(p) for p in sorted(parents))))
 
 def concludenode(repo, rev, p1, p2, commitmsg=None, editor=None, extrafn=None):
     'Commit the changes and store useful information in extra'
@@ -443,9 +448,44 @@
         repo.ui.debug(" already in target\n")
     repo.dirstate.write()
     repo.ui.debug(" merge against %d:%s\n" % (repo[rev].rev(), repo[rev]))
-    base = None
-    if repo[rev].rev() != repo[min(state)].rev():
+    if repo[rev].rev() == repo[min(state)].rev():
+        # Case (1) initial changeset of a non-detaching rebase.
+        # Let the merge mechanism find the base itself.
+        base = None
+    elif not repo[rev].p2():
+        # Case (2) detaching the node with a single parent, use this parent
         base = repo[rev].p1().node()
+    else:
+        # In case of merge, we need to pick the right parent as merge base.
+        #
+        # Imagine we have:
+        # - M: currently rebase revision in this step
+        # - A: one parent of M
+        # - B: second parent of M
+        # - D: destination of this merge step (p1 var)
+        #
+        # If we are rebasing on D, D is the successors of A or B. The right
+        # merge base is the one D succeed to. We pretend it is B for the rest
+        # of this comment
+        #
+        # If we pick B as the base, the merge involves:
+        # - changes from B to M (actual changeset payload)
+        # - changes from B to D (induced by rebase) as D is a rebased
+        #   version of B)
+        # Which exactly represent the rebase operation.
+        #
+        # If we pick the A as the base, the merge involves
+        # - changes from A to M (actual changeset payload)
+        # - changes from A to D (with include changes between unrelated A and B
+        #   plus changes induced by rebase)
+        # Which does not represent anything sensible and creates a lot of
+        # conflicts.
+        for p in repo[rev].parents():
+            if state.get(p.rev()) == repo[p1].rev():
+                base = p.node()
+                break
+    if base is not None:
+        repo.ui.debug("   detach base %d:%s\n" % (repo[base].rev(), repo[base]))
     # When collapsing in-place, the parent is the common ancestor, we
     # have to allow merging with it.
     return merge.update(repo, rev, True, True, False, base, collapse)
@@ -636,7 +676,7 @@
         raise util.Abort(_('no rebase in progress'))
 
 def inrebase(repo, originalwd, state):
-    '''check whether the workdir is in an interrupted rebase'''
+    '''check whether the working dir is in an interrupted rebase'''
     parents = [p.rev() for p in repo.parents()]
     if originalwd in parents:
         return True
--- a/hgext/shelve.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/hgext/shelve.py	Tue Nov 05 13:25:45 2013 -0500
@@ -27,6 +27,7 @@
 from mercurial import error, hg, mdiff, merge, patch, repair, util
 from mercurial import templatefilters
 from mercurial import lock as lockmod
+from hgext import rebase
 import errno
 
 cmdtable = {}
@@ -65,16 +66,7 @@
         except IOError, err:
             if err.errno != errno.ENOENT:
                 raise
-            if mode[0] in 'wa':
-                try:
-                    self.vfs.mkdir()
-                    return self.vfs(self.fname, mode)
-                except IOError, err:
-                    if err.errno != errno.EEXIST:
-                        raise
-            elif mode[0] == 'r':
-                raise util.Abort(_("shelved change '%s' not found") %
-                                 self.name)
+            raise util.Abort(_("shelved change '%s' not found") % self.name)
 
 class shelvedstate(object):
     """Handle persistence during unshelving operations.
@@ -95,25 +87,35 @@
                 raise util.Abort(_('this version of shelve is incompatible '
                                    'with the version used in this repo'))
             name = fp.readline().strip()
+            wctx = fp.readline().strip()
+            pendingctx = fp.readline().strip()
             parents = [bin(h) for h in fp.readline().split()]
             stripnodes = [bin(h) for h in fp.readline().split()]
+            unknownfiles = fp.readline()[:-1].split('\0')
         finally:
             fp.close()
 
         obj = cls()
         obj.name = name
+        obj.wctx = repo[bin(wctx)]
+        obj.pendingctx = repo[bin(pendingctx)]
         obj.parents = parents
         obj.stripnodes = stripnodes
+        obj.unknownfiles = unknownfiles
 
         return obj
 
     @classmethod
-    def save(cls, repo, name, stripnodes):
+    def save(cls, repo, name, originalwctx, pendingctx, stripnodes,
+             unknownfiles):
         fp = repo.opener(cls._filename, 'wb')
         fp.write('%i\n' % cls._version)
         fp.write('%s\n' % name)
+        fp.write('%s\n' % hex(originalwctx.node()))
+        fp.write('%s\n' % hex(pendingctx.node()))
         fp.write('%s\n' % ' '.join([hex(p) for p in repo.dirstate.parents()]))
         fp.write('%s\n' % ' '.join([hex(n) for n in stripnodes]))
+        fp.write('%s\n' % '\0'.join(unknownfiles))
         fp.close()
 
     @classmethod
@@ -190,7 +192,7 @@
         lock = repo.lock()
 
         bms = repo._bookmarks.copy()
-        # use an uncommited transaction to generate the bundle to avoid
+        # use an uncommitted transaction to generate the bundle to avoid
         # pull races. ensure we don't print the abort message to stderr.
         tr = repo.transaction('commit', report=lambda x: None)
 
@@ -347,60 +349,71 @@
         finally:
             fp.close()
 
-def readshelvedfiles(repo, basename):
-    """return the list of files touched in a shelve"""
-    fp = shelvedfile(repo, basename, 'files').opener()
-    return fp.read().split('\0')
-
 def checkparents(repo, state):
     """check parent while resuming an unshelve"""
     if state.parents != repo.dirstate.parents():
         raise util.Abort(_('working directory parents do not match unshelve '
                            'state'))
 
+def pathtofiles(repo, files):
+    cwd = repo.getcwd()
+    return [repo.pathto(f, cwd) for f in files]
+
 def unshelveabort(ui, repo, state, opts):
     """subcommand that abort an in-progress unshelve"""
     wlock = repo.wlock()
     lock = None
     try:
         checkparents(repo, state)
+
+        util.rename(repo.join('unshelverebasestate'),
+                    repo.join('rebasestate'))
+        try:
+            rebase.rebase(ui, repo, **{
+                'abort' : True
+            })
+        except Exception:
+            util.rename(repo.join('rebasestate'),
+                        repo.join('unshelverebasestate'))
+            raise
+
         lock = repo.lock()
-        merge.mergestate(repo).reset()
-        if opts['keep']:
-            repo.setparents(repo.dirstate.parents()[0])
-        else:
-            revertfiles = readshelvedfiles(repo, state.name)
-            wctx = repo.parents()[0]
-            cmdutil.revert(ui, repo, wctx, [wctx.node(), nullid],
-                           *revertfiles, **{'no_backup': True})
-            # fix up the weird dirstate states the merge left behind
-            mf = wctx.manifest()
-            dirstate = repo.dirstate
-            for f in revertfiles:
-                if f in mf:
-                    dirstate.normallookup(f)
-                else:
-                    dirstate.drop(f)
-            dirstate._pl = (wctx.node(), nullid)
-            dirstate._dirty = True
+
+        mergefiles(ui, repo, state.wctx, state.pendingctx, state.unknownfiles)
+
         repair.strip(ui, repo, state.stripnodes, backup='none', topic='shelve')
         shelvedstate.clear(repo)
         ui.warn(_("unshelve of '%s' aborted\n") % state.name)
     finally:
         lockmod.release(lock, wlock)
 
+def mergefiles(ui, repo, wctx, shelvectx, unknownfiles):
+    """updates to wctx and merges the changes from shelvectx into the
+    dirstate. drops any files in unknownfiles from the dirstate."""
+    oldquiet = ui.quiet
+    try:
+        ui.quiet = True
+        hg.update(repo, wctx.node())
+        files = []
+        files.extend(shelvectx.files())
+        files.extend(shelvectx.parents()[0].files())
+        cmdutil.revert(ui, repo, shelvectx, repo.dirstate.parents(),
+                       *pathtofiles(repo, files),
+                       **{'no_backup': True})
+    finally:
+        ui.quiet = oldquiet
+
+    # Send untracked files back to being untracked
+    dirstate = repo.dirstate
+    for f in unknownfiles:
+        dirstate.drop(f)
+
 def unshelvecleanup(ui, repo, name, opts):
     """remove related files after an unshelve"""
     if not opts['keep']:
         for filetype in 'hg files patch'.split():
             shelvedfile(repo, name, filetype).unlink()
 
-def finishmerge(ui, repo, ms, stripnodes, name, opts):
-    # Reset the working dir so it's no longer in a merge state.
-    dirstate = repo.dirstate
-    dirstate.setparents(dirstate._pl[0])
-    shelvedstate.clear(repo)
-
 def unshelvecontinue(ui, repo, state, opts):
     """subcommand to continue an in-progress unshelve"""
     # We're finishing off a merge. First parent is our original
@@ -414,9 +427,30 @@
             raise util.Abort(
                 _("unresolved conflicts, can't continue"),
                 hint=_("see 'hg resolve', then 'hg unshelve --continue'"))
-        finishmerge(ui, repo, ms, state.stripnodes, state.name, opts)
+
         lock = repo.lock()
+
+        util.rename(repo.join('unshelverebasestate'),
+                    repo.join('rebasestate'))
+        try:
+            rebase.rebase(ui, repo, **{
+                'continue' : True
+            })
+        except Exception:
+            util.rename(repo.join('rebasestate'),
+                        repo.join('unshelverebasestate'))
+            raise
+
+        shelvectx = repo['tip']
+        if not shelvectx in state.pendingctx.children():
+            # rebase was a no-op, so it produced no child commit
+            shelvectx = state.pendingctx
+
+        mergefiles(ui, repo, state.wctx, shelvectx, state.unknownfiles)
+
+        state.stripnodes.append(shelvectx.node())
         repair.strip(ui, repo, state.stripnodes, backup='none', topic='shelve')
+        shelvedstate.clear(repo)
         unshelvecleanup(ui, repo, state.name, opts)
         ui.status(_("unshelve of '%s' complete\n") % state.name)
     finally:
@@ -484,71 +518,99 @@
     else:
         basename = shelved[0]
 
-    shelvedfiles = readshelvedfiles(repo, basename)
-
-    m, a, r, d = repo.status()[:4]
-    unsafe = set(m + a + r + d).intersection(shelvedfiles)
-    if unsafe:
-        ui.warn(_('the following shelved files have been modified:\n'))
-        for f in sorted(unsafe):
-            ui.warn('  %s\n' % f)
-        ui.warn(_('you must commit, revert, or shelve your changes before you '
-                  'can proceed\n'))
-        raise util.Abort(_('cannot unshelve due to local changes\n'))
+    if not shelvedfile(repo, basename, 'files').exists():
+        raise util.Abort(_("shelved change '%s' not found") % basename)
 
     wlock = lock = tr = None
     try:
         lock = repo.lock()
+        wlock = repo.wlock()
 
         tr = repo.transaction('unshelve', report=lambda x: None)
         oldtiprev = len(repo)
+
+        wctx = repo['.']
+        tmpwctx = wctx
+        # The goal is to have a commit structure like so:
+        # ...-> wctx -> tmpwctx -> shelvectx
+        # where tmpwctx is an optional commit with the user's pending changes
+        # and shelvectx is the unshelved changes. Then we merge it all down
+        # to the original wctx.
+
+        # Store pending changes in a commit
+        m, a, r, d, u = repo.status(unknown=True)[:5]
+        if m or a or r or d or u:
+            def commitfunc(ui, repo, message, match, opts):
+                hasmq = util.safehasattr(repo, 'mq')
+                if hasmq:
+                    saved, repo.mq.checkapplied = repo.mq.checkapplied, False
+
+                try:
+                    return repo.commit(message, 'shelve@localhost',
+                                       opts.get('date'), match)
+                finally:
+                    if hasmq:
+                        repo.mq.checkapplied = saved
+
+            tempopts = {}
+            tempopts['message'] = "pending changes temporary commit"
+            tempopts['addremove'] = True
+            oldquiet = ui.quiet
+            try:
+                ui.quiet = True
+                node = cmdutil.commit(ui, repo, commitfunc, None, tempopts)
+            finally:
+                ui.quiet = oldquiet
+            tmpwctx = repo[node]
+
         try:
             fp = shelvedfile(repo, basename, 'hg').opener()
             gen = changegroup.readbundle(fp, fp.name)
             repo.addchangegroup(gen, 'unshelve', 'bundle:' + fp.name)
             nodes = [ctx.node() for ctx in repo.set('%d:', oldtiprev)]
             phases.retractboundary(repo, phases.secret, nodes)
-            tr.close()
         finally:
             fp.close()
 
-        tip = repo['tip']
-        wctx = repo['.']
-        ancestor = tip.ancestor(wctx)
-
-        wlock = repo.wlock()
+        shelvectx = repo['tip']
 
-        if ancestor.node() != wctx.node():
-            conflicts = hg.merge(repo, tip.node(), force=True, remind=False)
-            ms = merge.mergestate(repo)
-            stripnodes = [repo.changelog.node(rev)
-                          for rev in xrange(oldtiprev, len(repo))]
-            if conflicts:
-                shelvedstate.save(repo, basename, stripnodes)
-                # Fix up the dirstate entries of files from the second
-                # parent as if we were not merging, except for those
-                # with unresolved conflicts.
-                parents = repo.parents()
-                revertfiles = set(parents[1].files()).difference(ms)
-                cmdutil.revert(ui, repo, parents[1],
-                               (parents[0].node(), nullid),
-                               *revertfiles, **{'no_backup': True})
+        # If the shelve is not immediately on top of the commit
+        # we'll be merging with, rebase it to be on top.
+        if tmpwctx.node() != shelvectx.parents()[0].node():
+            try:
+                rebase.rebase(ui, repo, **{
+                    'rev' : [shelvectx.rev()],
+                    'dest' : str(tmpwctx.rev()),
+                    'keep' : True,
+                })
+            except error.InterventionRequired:
+                tr.close()
+
+                stripnodes = [repo.changelog.node(rev)
+                              for rev in xrange(oldtiprev, len(repo))]
+                shelvedstate.save(repo, basename, wctx, tmpwctx, stripnodes, u)
+
+                util.rename(repo.join('rebasestate'),
+                            repo.join('unshelverebasestate'))
                 raise error.InterventionRequired(
                     _("unresolved conflicts (see 'hg resolve', then "
                       "'hg unshelve --continue')"))
-            finishmerge(ui, repo, ms, stripnodes, basename, opts)
-        else:
-            parent = tip.parents()[0]
-            hg.update(repo, parent.node())
-            cmdutil.revert(ui, repo, tip, repo.dirstate.parents(), *tip.files(),
-                           **{'no_backup': True})
+
+            # refresh ctx after rebase completes
+            shelvectx = repo['tip']
+
+            if not shelvectx in tmpwctx.children():
+                # rebase was a no-op, so it produced no child commit
+                shelvectx = tmpwctx
 
-        prevquiet = ui.quiet
-        ui.quiet = True
-        try:
-            repo.rollback(force=True)
-        finally:
-            ui.quiet = prevquiet
+        mergefiles(ui, repo, wctx, shelvectx, u)
+        shelvedstate.clear(repo)
+
+        # The transaction aborting will strip all the commits for us,
+        # but it doesn't update the inmemory structures, so addchangegroup
+        # hooks still fire and try to operate on the missing commits.
+        # Clean up manually to prevent this.
+        repo.changelog.strip(oldtiprev, tr)
 
         unshelvecleanup(ui, repo, basename, opts)
     finally:
@@ -629,5 +691,6 @@
 
 def extsetup(ui):
     cmdutil.unfinishedstates.append(
-        [shelvedstate._filename, False, True, _('unshelve already in progress'),
+        [shelvedstate._filename, False, False,
+         _('unshelve already in progress'),
          _("use 'hg unshelve --continue' or 'hg unshelve --abort'")])
--- a/hgext/strip.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/hgext/strip.py	Tue Nov 05 13:25:45 2013 -0500
@@ -1,6 +1,6 @@
 """strip changesets and their descendents from history
 
-This extension allows to strip changesets and all their descendants from the
+This extension allows you to strip changesets and all their descendants from the
 repository. See the command help for details.
 """
 from mercurial.i18n import _
--- a/hgext/transplant.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/hgext/transplant.py	Tue Nov 05 13:25:45 2013 -0500
@@ -533,7 +533,7 @@
     --source/-s specifies another repository to use for selecting changesets,
     just as if it temporarily had been pulled.
     If --branch/-b is specified, these revisions will be used as
-    heads when deciding which changsets to transplant, just as if only
+    heads when deciding which changesets to transplant, just as if only
     these revisions had been pulled.
     If --all/-a is specified, all the revisions up to the heads specified
     with --branch will be transplanted.
--- a/i18n/ja.po	Sat Nov 02 11:25:04 2013 +0100
+++ b/i18n/ja.po	Tue Nov 05 13:25:45 2013 -0500
@@ -123,6 +123,7 @@
 # schedule              (add/remove の)予約
 # search                探索
 # server                サーバ
+# shelved change        退避内容(for 処理視点) or 退避情報(for 管理視点)
 # source url (of subrepo) (サブリポジトリの)参照先 URL
 # stop                  中断(再開可能な場合)/中止(再開不可能な場合)
 # subrepo               サブリポジトリ
@@ -146,8 +147,8 @@
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
-"POT-Creation-Date: 2013-07-31 16:07+0900\n"
-"PO-Revision-Date: 2009-11-16 21:24+0100\n"
+"POT-Creation-Date: 2013-10-29 20:29+0900\n"
+"PO-Revision-Date: 2013-10-31 03:00+0900\n"
 "Last-Translator: Japanese translation team <mercurial-ja@googlegroups.com>\n"
 "Language-Team: Japanese\n"
 "Language: ja\n"
@@ -813,7 +814,7 @@
 "bugzilla.regexp\n"
 "  状態更新対象のバグID群を、 コミットログから抽出するための正規表現。\n"
 "  非数値文字で区切られたバグID群に合致する ``<ids>`` 名のグループ記述\n"
-"  ( \"()\") が必須です。 バグに対する作業時間を表す、 少数点数に合致する\n"
+"  ( \"()\") が必須です。 バグに対する作業時間を表す、 小数点数に合致する\n"
 "  ``<hours>`` 名グループも記述可能です。 名前付きグループ記述が無い場合、\n"
 "  最初の \"()\" グループがバグID群に、 作業時間の更新は無し、\n"
 "  とみなされます。 デフォルトの正規表現は ``Bug 1234``、 ``Bug no.\n"
@@ -840,7 +841,7 @@
 "bugzilla.fixregexp\n"
 "  「解決済み」化するバグID群を、 コミットログから抽出するための正規表現。\n"
 "  非数値文字で区切られたバグID群に合致する ``<ids>`` 名のグループ記述\n"
-"  ( \"()\") が必須です。 バグに対する作業時間を表す、 少数点数に合致する\n"
+"  ( \"()\") が必須です。 バグに対する作業時間を表す、 小数点数に合致する\n"
 "  ``<hours>`` 名グループも記述可能です。 名前付きグループ記述が無い場合、\n"
 "  最初の \"()\" グループがバグID群に、 作業時間の更新は無し、\n"
 "  とみなされます。 デフォルトの正規表現は、 ``Fixes 1234``、 ``Fixes bug\n"
@@ -1413,31 +1414,31 @@
 
 msgid ""
 "      # display count of changed lines for every committer\n"
-"      hg churn -t '{author|email}'"
+"      hg churn -t \"{author|email}\""
 msgstr ""
 "      # ユーザ毎の変更行数の表示\n"
-"      hg churn -t '{author|email}'"
+"      hg churn -t \"{author|email}\""
 
 msgid ""
 "      # display daily activity graph\n"
-"      hg churn -f '%H' -s -c"
+"      hg churn -f \"%H\" -s -c"
 msgstr ""
 "      # 日毎の活発度(コミット実施数)を表示\n"
-"      hg churn -f '%H' -s -c"
+"      hg churn -f \"%H\" -s -c"
 
 msgid ""
 "      # display activity of developers by month\n"
-"      hg churn -f '%Y-%m' -s -c"
+"      hg churn -f \"%Y-%m\" -s -c"
 msgstr ""
 "      # 月毎の活発度を表示\n"
-"      hg churn -f '%Y-%m' -s -c"
+"      hg churn -f \"%Y-%m\" -s -c"
 
 msgid ""
 "      # display count of lines changed in every year\n"
-"      hg churn -f '%Y' -s"
+"      hg churn -f \"%Y\" -s"
 msgstr ""
 "      # 年毎の変更行数を表示\n"
-"      hg churn -f '%Y' -s"
+"      hg churn -f \"%Y\" -s"
 
 msgid ""
 "    It is possible to map alternate email addresses to a main address\n"
@@ -1626,6 +1627,15 @@
 "  rebase.rebased = blue\n"
 "  rebase.remaining = red bold"
 
+msgid ""
+"  shelve.age = cyan\n"
+"  shelve.newest = green bold\n"
+"  shelve.name = blue bold"
+msgstr ""
+"  shelve.age = cyan\n"
+"  shelve.newest = green bold\n"
+"  shelve.name = blue bold"
+
 msgid "  histedit.remaining = red bold"
 msgstr "  histedit.remaining = red bold"
 
@@ -2027,11 +2037,8 @@
 "        ID 埋め込みで変化するため)。 デフォルト値は False。"
 
 msgid ""
-"    :convert.hg.startrev: convert start revision and its descendants.\n"
-"        It takes a hg revision identifier and defaults to 0."
-msgstr ""
-"    :convert.hg.startrev: 指定リビジョンとその子孫を変換します。\n"
-"        Mercurial のリビジョン ID が指定可能です。 デフォルト値は 0"
+"    :convert.hg.revs: revset specifying the source revisions to convert."
+msgstr "    :convert.hg.revs: 変換元における変換対象リビジョンの revset 表記。"
 
 msgid ""
 "    CVS Source\n"
@@ -2315,8 +2322,8 @@
 msgid "destination repository type"
 msgstr "変換先のリポジトリ種別"
 
-msgid "import up to target revision REV"
-msgstr "指定リビジョンまでの取り込み"
+msgid "import up to source revision REV"
+msgstr "変換元の指定リビジョンまでの取り込み"
 
 msgid "remap usernames using this file"
 msgstr "変換時のユーザ名変換用ファイル"
@@ -2690,6 +2697,10 @@
 msgstr "変換元リポジトリは  --filemap をサポートしていません"
 
 #, python-format
+msgid "warning: %s parent %s is missing\n"
+msgstr "警告: リビジョン %s の親リビジョン %s が不在です\n"
+
+#, python-format
 msgid "%s does not look like a Git repository"
 msgstr "%s は Git 形式ではないと思われます"
 
@@ -2769,6 +2780,9 @@
 msgid "%s is not a valid start revision"
 msgstr "%s は正しい開始リビジョンではありません"
 
+msgid "hg.revs cannot be combined with hg.startrev or --rev"
+msgstr "hg.revs は hg.startrev や --rev と併用できません"
+
 #, python-format
 msgid "ignoring: %s\n"
 msgstr "例外を無視します: %s\n"
@@ -4289,6 +4303,12 @@
 msgid "no outgoing ancestors"
 msgstr "反映候補リビジョンがありません"
 
+msgid "there are ambiguous outgoing revisions"
+msgstr "紛らわしい反映候補リビジョンが存在します"
+
+msgid "see \"hg help histedit\" for more detail"
+msgstr "詳細は \"hg help histedit\" を参照"
+
 msgid "Read history edits from the specified file."
 msgstr "履歴改変手順を指定ファイルから読み込み"
 
@@ -4302,22 +4322,56 @@
 msgstr "未完了の履歴改変を中止"
 
 msgid "changesets not found in destination"
-msgstr "連携先リポジトリに、 含まれないリビジョンを、 改変対象化"
+msgstr "連携先リポジトリに含まれないリビジョンを選択"
 
 msgid "force outgoing even for unrelated repositories"
-msgstr "連携先が無関係なリポジトリでも、 比較を実施"
+msgstr "連携先が無関係なリポジトリでも比較を実施"
 
 msgid "first revision to be edited"
 msgstr "改変対象の最初のリビジョン"
 
-msgid "[PARENT]"
-msgstr "[PARENT]"
-
-msgid ""
-"interactively edit changeset history\n"
-"    "
-msgstr ""
-"対話的な履歴の改変\n"
+msgid "ANCESTOR | --outgoing [URL]"
+msgstr "ANCESTOR | --outgoing [URL]"
+
+msgid "interactively edit changeset history"
+msgstr "対話的な履歴の改変"
+
+msgid ""
+"    This command edits changesets between ANCESTOR and the parent of\n"
+"    the working directory."
+msgstr ""
+"    本コマンドは、 作業領域の親リビジョンと、指定した祖先 (ANCESTOR)\n"
+"    との間のリビジョン群を改変します。"
+
+msgid ""
+"    With --outgoing, this edits changesets not found in the\n"
+"    destination repository. If URL of the destination is omitted, the\n"
+"    'default-push' (or 'default') path will be used."
+msgstr ""
+"    --outgoing 指定のある場合、 連携先リポジトリへの反映候補リビジョンが、\n"
+"    改変対象として選択されます。 連携先 URL が省略された場合、\n"
+"    'default-push' (または 'default') 指定のパスが参照されます。"
+
+msgid ""
+"    For safety, this command is aborted, also if there are ambiguous\n"
+"    outgoing revisions which may confuse users: for example, there are\n"
+"    multiple branches containing outgoing revisions."
+msgstr ""
+"    反映候補リビジョンが、 利用者にとって紛らわしい場合、 安全性の点から、\n"
+"    履歴改変は中止されます。 紛らわしい例としては、 反映候補リビジョンが、\n"
+"    複数のブランチ上に存在するケースなどがあります。"
+
+msgid ""
+"    Use \"min(outgoing() and ::.)\" or similar revset specification\n"
+"    instead of --outgoing to specify edit target revision exactly in\n"
+"    such ambiguous situation. See :hg:`help revsets` for detail about\n"
+"    selecting revisions.\n"
+"    "
+msgstr ""
+"    紛らわしさのために --outgoing が使用できない場合、 \"min(outgoing()\n"
+"    and ::.)\" または同等の revset 表記を使って、 改変対象リビジョンを、\n"
+"    厳密に指定してください。 リビジョン指定の詳細は :hg:`help revsets`\n"
+"    を参照してください。\n"
 "    "
 
 msgid "source has mq patches applied"
@@ -4333,8 +4387,7 @@
 msgstr "--abort 指定時は引数を指定できません"
 
 msgid "history edit already in progress, try --continue or --abort"
-msgstr ""
-"以前の履歴改変が未完了です。 --continue または --abortを指定してください"
+msgstr "履歴改変が未完了です。 --continue または --abortを指定してください"
 
 msgid "no revisions allowed with --outgoing"
 msgstr "--outgoing とリビジョン指定は併用できません"
@@ -4342,16 +4395,15 @@
 msgid "only one repo argument allowed with --outgoing"
 msgstr "--outgoing 指定時には、引数は1つしか指定できません"
 
-msgid "histedit requires exactly one parent revision"
-msgstr "履歴改変には単一の親リビジョンを指定してください"
+msgid "histedit requires exactly one ancestor revision"
+msgstr "履歴改変には単一の祖先リビジョンを指定してください"
 
 #, python-format
 msgid "%s is not an ancestor of working directory"
 msgstr "%s は作業領域の祖先ではありません"
 
-#, python-format
-msgid "update to %s or descendant and run \"hg histedit --continue\" again"
-msgstr "%s 又はその子孫で作業領域更新後に、再度 histedit を実行してください"
+msgid "use \"histedit --abort\" to clear broken state"
+msgstr "不整合な状態のクリアは \"histedit --abort\""
 
 msgid "cannot edit history that would orphan nodes"
 msgstr "履歴ツリーが分断されるような履歴改変はできません"
@@ -4406,9 +4458,7 @@
 msgstr "histedit による履歴改変が未完了です"
 
 msgid "use 'hg histedit --continue' or 'hg histedit --abort'"
-msgstr ""
-"未完了の histedit は、'hg histedit --continue' で再開するか、'hg histedit --"
-"abort' で中止してください"
+msgstr "'hg histedit --continue' か 'hg histedit --abort' を実施してください"
 
 msgid "accelerate status report using Linux's inotify service"
 msgstr "Linux の inoitfy サービスによる状態報告の高速化"
@@ -5400,7 +5450,7 @@
 msgid "--normal cannot be used with --large"
 msgstr "--normal と --large は併用できません"
 
-msgid "uncommitted local changes"
+msgid "uncommitted changes"
 msgstr "作業領域の変更が未コミットです"
 
 #, python-format
@@ -5496,8 +5546,8 @@
 msgstr "大容量ファイルの内容が想定ハッシュ値と一致しません"
 
 #, python-format
-msgid "largefiles: failed to put %s into store: %s"
-msgstr "largefiles: ファイル %s の格納に失敗: %s"
+msgid "largefiles: failed to put %s into store: %s\n"
+msgstr "largefiles: ファイル %s の格納に失敗: %s\n"
 
 #, python-format
 msgid "requested largefile %s not present in cache"
@@ -5507,8 +5557,8 @@
 msgstr "連携先: "
 
 #, python-format
-msgid "unexpected putlfile response: %s"
-msgstr "想定外の putlfile 応答: %s"
+msgid "unexpected putlfile response: %r\n"
+msgstr "想定外の putlfile 応答: %r\n"
 
 msgid "putlfile failed:"
 msgstr "大容量ファイルの転送に失敗:"
@@ -5524,8 +5574,8 @@
 msgstr "remotestore: %s を連携先 %s に格納できません"
 
 #, python-format
-msgid "remotestore: put %s to remote store %s"
-msgstr "remotestore: %s を連携先 %s に格納"
+msgid "remotestore: put %s to remote store %s\n"
+msgstr "remotestore: %s を連携先 %s に格納\n"
 
 #, python-format
 msgid "remotestore: could not open file %s: %s"
@@ -5540,6 +5590,10 @@
 msgstr "リビジョン %s: ファイル %s が不在です\n"
 
 #, python-format
+msgid "required features are not supported in the destination: %s"
+msgstr "連携先リポジトリでは必要な機能が未サポートです: %s"
+
+#, python-format
 msgid "file \"%s\" is a largefile standin"
 msgstr "\"%s\" は大容量ファイルの代理ファイルです"
 
@@ -5693,11 +5747,18 @@
 msgid ""
 "make them behave as if --keep-changes were passed, and non-conflicting\n"
 "local changes will be tolerated and preserved. If incompatible options\n"
-"such as -f/--force or --exact are passed, this setting is ignored.\n"
+"such as -f/--force or --exact are passed, this setting is ignored."
 msgstr ""
 "--keep-changes 指定時と同じになるため、 作業領域中の変更は、\n"
 "衝突が無い限り、 そのまま維持されます。 -f/--force や --exact のような、\n"
-"併用できないオプションが指定された場合、 この設定は無視されます。\n"
+"併用できないオプションが指定された場合、 この設定は無視されます。"
+
+msgid ""
+"This extension used to provide a strip command. This command now lives\n"
+"in the strip extension.\n"
+msgstr ""
+"以前は本エクステンションが strip コマンドを提供していましたが、\n"
+"現在は strip エクステンションが strip コマンドを提供しています。\n"
 
 msgid "print first line of patch header"
 msgstr "パッチヘッダの最初の行を表示"
@@ -5800,7 +5861,7 @@
 msgstr "ファイル %s が読み込めません\n"
 
 msgid "local changes found, refresh first"
-msgstr "作業領域の内容は変更されていますので qrefresh を実施してください"
+msgstr "作業領域に変更がありますので qrefresh を実施してください"
 
 #, python-format
 msgid "patch %s is empty\n"
@@ -5855,12 +5916,8 @@
 msgid "working directory revision is not qtip"
 msgstr "作業領域の親リビジョンは qtip ではありません"
 
-#, python-format
-msgid "uncommitted changes in subrepository %s"
-msgstr "サブリポジトリ %s の変更が未コミットです"
-
-msgid "local changes found"
-msgstr "作業領域の内容は変更されています"
+msgid "local changed subrepos found, refresh first"
+msgstr "サブリポジトリに変更がありますので qrefresh を実施してください"
 
 #, python-format
 msgid "\"%s\" cannot be used as the name of a patch"
@@ -6829,105 +6886,6 @@
 msgid "copy %s to %s\n"
 msgstr "%s から %s に複製します\n"
 
-msgid ""
-"strip specified revision (optional, can specify revisions without this "
-"option)"
-msgstr "指定リビジョンの削除 (本オプション無しでもリビジョン指定可能)"
-
-msgid "force removal of changesets, discard uncommitted changes (no backup)"
-msgstr "リビジョンを強制的に削除し、 未コミット変更内容を破棄(保存無し)"
-
-msgid ""
-"bundle only changesets with local revision number greater than REV which are "
-"not descendants of REV (DEPRECATED)"
-msgstr ""
-"指定リビジョンよりリビジョン番号が大きく子孫以外のものを bundle 化(非推奨)"
-
-msgid "no backups"
-msgstr "バックアップ作成の抑止"
-
-msgid "no backups (DEPRECATED)"
-msgstr "バックアップ作成の抑止(非推奨)"
-
-msgid "ignored  (DEPRECATED)"
-msgstr "※ このオプションは無視されます (非推奨)"
-
-msgid "do not modify working copy during strip"
-msgstr "処理中の作業領域変更を抑止"
-
-msgid "remove revs only reachable from given bookmark"
-msgstr "指定ブックマークから、 到達可能なリビジョンのみを除外"
-
-msgid "hg strip [-k] [-f] [-n] [-B bookmark] [-r] REV..."
-msgstr "hg strip [-k] [-f] [-n] [-B bookmark] [-r] REV..."
-
-msgid "strip changesets and all their descendants from the repository"
-msgstr "リポジトリからの、 特定リビジョンおよびその子孫の除外"
-
-msgid ""
-"    The strip command removes the specified changesets and all their\n"
-"    descendants. If the working directory has uncommitted changes, the\n"
-"    operation is aborted unless the --force flag is supplied, in which\n"
-"    case changes will be discarded."
-msgstr ""
-"    :hg:`strip` は指定のリビジョンおよび、 指定リビジョンの子孫を\n"
-"    取り除きます。 作業領域の変更が未コミットの場合、\n"
-"    --force が指定されない限りは処理を中止します。\n"
-"    --force が指定された場合、 変更内容は破棄されます。"
-
-msgid ""
-"    If a parent of the working directory is stripped, then the working\n"
-"    directory will automatically be updated to the most recent\n"
-"    available ancestor of the stripped parent after the operation\n"
-"    completes."
-msgstr ""
-"    作業領域の親リビジョンが除外対象になった場合、 除外操作の完了後に、\n"
-"    除外された親リビジョンの祖先の中で、 最も近い有効なリビジョンで、\n"
-"    作業領域を更新します。"
-
-msgid ""
-"    Any stripped changesets are stored in ``.hg/strip-backup`` as a\n"
-"    bundle (see :hg:`help bundle` and :hg:`help unbundle`). They can\n"
-"    be restored by running :hg:`unbundle .hg/strip-backup/BUNDLE`,\n"
-"    where BUNDLE is the bundle file created by the strip. Note that\n"
-"    the local revision numbers will in general be different after the\n"
-"    restore."
-msgstr ""
-"    除外されたリビジョンは、 bundle 形式で ``.hg/strip-backup`` 配下に\n"
-"    退避されます(bundle 形式に関しては :hg:`help bundle` および\n"
-"    :hg:`help unbundle` 参照)。 除外の際に作成された BUNDLE ファイルで\n"
-"    :hg:`unbundle .hg/strip-backup/BUNDLE` を実施することで\n"
-"    除外されたリビジョンを復旧させることができます。 通常、 復旧の際には\n"
-"    リビジョン番号が変更されますので注意してください。"
-
-msgid ""
-"    Use the --no-backup option to discard the backup bundle once the\n"
-"    operation completes."
-msgstr ""
-"    除外処理完了時点で bundle ファイルを破棄する場合は\n"
-"    --no-backup を指定してください。"
-
-msgid ""
-"    Strip is not a history-rewriting operation and can be used on\n"
-"    changesets in the public phase. But if the stripped changesets have\n"
-"    been pushed to a remote repository you will likely pull them again."
-msgstr ""
-"    本コマンドでの操作は、 履歴の書き換えではないので、 対象リビジョンが\n"
-"    public フェーズでも、 実行可能です。 但し、 除外対象リビジョンが、\n"
-"    他リポジトリに反映済みである場合、 そのリビジョンは pull 操作により、\n"
-"    再び手元のリポジトリに出現することでしょう。"
-
-#, python-format
-msgid "bookmark '%s' not found"
-msgstr "ブックマーク '%s' がありません"
-
-#, python-format
-msgid "bookmark '%s' deleted\n"
-msgstr "ブックマーク '%s' が破棄されました\n"
-
-msgid "empty revision set"
-msgstr "指定に該当するリビジョンはありません"
-
 msgid "disable all guards"
 msgstr "全てのガード設定を破棄"
 
@@ -8051,7 +8009,7 @@
 "                     # disable is given"
 msgstr ""
 "  [progress]\n"
-"  delay = 3 # 進捗率表示までの猶予秒数 (浮動少数指定)\n"
+"  delay = 3 # 進捗率表示までの猶予秒数 (浮動小数指定)\n"
 "  changedelay = 1 # 新規トピック表示までの最小猶予時間。\n"
 "                  # 3 * refresh よりも小さい値の場合は、\n"
 "                  # この設定は無視されます。\n"
@@ -8399,6 +8357,15 @@
 msgid "tool option will be ignored\n"
 msgstr "--tool 指定は無視されます\n"
 
+msgid "rebase aborted (no revision is removed, only broken state is cleared)\n"
+msgstr "移動を中止しました (リビジョンは破棄せず、不整合な状態のみをクリア)\n"
+
+msgid "cannot continue inconsistent rebase"
+msgstr "整合性がないため、移動を継続できません"
+
+msgid "use \"hg rebase --abort\" to clear borken state"
+msgstr "不整合な状態のクリアは \"hg rebase --abort\""
+
 msgid "cannot specify both a source and a base"
 msgstr "--soruce と --base は併用できません"
 
@@ -8422,7 +8389,7 @@
 msgstr "改変不能なリビジョン %s は移動できません"
 
 msgid "see hg help phases for details"
-msgstr "詳細は \"hg help phases\" を参照してください"
+msgstr "詳細は \"hg help phases\" を参照"
 
 msgid "cannot collapse multiple named branches"
 msgstr "複数の名前付きブランチの単一化はできません"
@@ -8445,6 +8412,9 @@
 msgid "rebase merging completed\n"
 msgstr "移動のマージ処理が完了\n"
 
+msgid "update back to initial working directory parent\n"
+msgstr "移動先の親リビジョンで作業領域を更新\n"
+
 msgid "rebase completed\n"
 msgstr "移動完了\n"
 
@@ -8452,8 +8422,11 @@
 msgid "%d revisions have been skipped\n"
 msgstr "%d 個のリビジョンをスキップ\n"
 
-msgid "unable to collapse, there is more than one external parent"
-msgstr "複数の親との関係から、 --collapse は指定できません"
+#, python-format
+msgid ""
+"unable to collapse on top of %s, there is more than one external parent: %s"
+msgstr ""
+"%s への移動で単一化できません。移動対象外の複数の祖先が内容に影響します: %s"
 
 #, python-format
 msgid "cannot use revision %d as base, result would have 3 parents"
@@ -8463,11 +8436,11 @@
 msgstr "未完了な rebase による移動はありません"
 
 #, python-format
-msgid "can't abort rebase due to immutable changesets %s"
-msgstr "改変不能リビジョンがあるため rebase 前の状態に復旧できません: %s"
-
-msgid "warning: new changesets detected on target branch, can't abort\n"
-msgstr "警告: 新規リビジョンが対象ブランチに検出されたので中止できません\n"
+msgid "warning: can't clean up immutable changesets %s\n"
+msgstr "警告: 改変不能なリビジョン %s は破棄できません\n"
+
+msgid "warning: new changesets detected on target branch, can't strip\n"
+msgstr "警告: 想定外の新規リビジョン追加により、対象ブランチを破棄できません\n"
 
 msgid "rebase aborted\n"
 msgstr "移動が中止されました\n"
@@ -8492,6 +8465,10 @@
 msgstr "--tool は --rebase 指定時にしか使用できません"
 
 #. i18n: column positioning for "hg summary"
+msgid "rebase: (use \"hg rebase --abort\" to clear broken state)\n"
+msgstr "rebase:       (不整合な状態は \"hg rebase --abort\" でクリア)\n"
+
+#. i18n: column positioning for "hg summary"
 #, python-format
 msgid "rebase: %s, %s (rebase --continue)\n"
 msgstr "rebase:       %s, %s (rebase --continue)\n"
@@ -8510,9 +8487,7 @@
 msgstr "rebase による移動が未完了です"
 
 msgid "use 'hg rebase --continue' or 'hg rebase --abort'"
-msgstr ""
-"未完了の rebase は、'hg rebase --continue' で再開するか、'hg rebase --abort' "
-"で中止してください"
+msgstr "'hg rebase --continue' か 'hg rebase --abort' を実施してください"
 
 msgid "commands to interactively select changes for commit/qrefresh"
 msgstr "commit や qrefresh における対話的な変更取り込みの選択"
@@ -8542,6 +8517,10 @@
 "changes to this &file$$ &Done, skip remaining changes and files$$ Record "
 "&all changes to all remaining files$$ &Quit, recording no changes$$ &?"
 msgstr ""
+"[Ynesfdaq?]$$ この変更を記録(&yes)$$ この変更を無視(&no)$$ この変更を手動で編"
+"集(&edit)$$ 同一ファイルの以後の全ての変更を無視(&skip)$$ 同一ファイル(&file)"
+"の以後の全ての変更を記録$$ 以後の全ての変更を無視=記録作業を完了(&done)$$ 以"
+"後の全て(&all)の変更を記録$$ 変更の記録自体を中止(&quit)$$ ヘルプ表示(&?)"
 
 msgid "cannot edit patch for whole file"
 msgstr "ファイル全体に対するパッチは編集できません"
@@ -8620,28 +8599,28 @@
 "      n - skip this change\n"
 "      e - edit this change manually"
 msgstr ""
-"      y - この変更を記録します\n"
-"      n - この変更をスキップします\n"
-"      e - この変更を手動で編集します"
+"      y - この変更を記録(yes)\n"
+"      n - この変更を無視(no)\n"
+"      e - この変更を手動で編集(edit)"
 
 msgid ""
 "      s - skip remaining changes to this file\n"
 "      f - record remaining changes to this file"
 msgstr ""
-"      s - このファイルの残りの変更を全てスキップします\n"
-"      f - このファイルの残りの変更を全て記録します"
+"      s - 同一ファイルの以後の全ての変更を無視(skip)\n"
+"      f - 同一ファイル(file)の以後の全ての変更を記録"
 
 msgid ""
 "      d - done, skip remaining changes and files\n"
 "      a - record all changes to all remaining files\n"
 "      q - quit, recording no changes"
 msgstr ""
-"      d - 残りの変更およびファイルをスキップして終了します\n"
-"      a - 残り全てのファイルの変更を記録します\n"
-"      q - 変更を記録しないで終了します"
+"      d - 以後の全ての変更を無視=記録作業を完了(done)\n"
+"      a - 以後の全て(all)の変更を記録\n"
+"      q - 変更の記録自体を中止(quit)"
 
 msgid "      ? - display help"
-msgstr "      ? - ヘルプを表示します"
+msgstr "      ? - ヘルプ表示(?)"
 
 msgid "    This command is not available when committing a merge."
 msgstr "    本コマンドをマージのコミットに使用することはできません。"
@@ -8919,6 +8898,388 @@
 msgid "[-U] SOURCE [DEST]"
 msgstr "[-U] SOURCE [DEST]"
 
+msgid "save and restore changes to the working directory"
+msgstr "作業領域中の変更内容の退避および復旧"
+
+msgid ""
+"The \"hg shelve\" command saves changes made to the working directory\n"
+"and reverts those changes, resetting the working directory to a clean\n"
+"state."
+msgstr ""
+":hg:`shelve` は、 作業領域中の変更内容を、 退避した上で破棄することで、\n"
+"作業領域を変更が無かった状態に戻します。"
+
+msgid ""
+"Later on, the \"hg unshelve\" command restores the changes saved by \"hg\n"
+"shelve\". Changes can be restored even after updating to a different\n"
+"parent, in which case Mercurial's merge machinery will resolve any\n"
+"conflicts if necessary."
+msgstr ""
+"退避された変更内容は、 :hg:`unshelve` で作業領域に復旧されます。\n"
+"作業領域の親リビジョンが、 変更退避時点と異なる場合でも復旧可能です。\n"
+"変更の衝突解消が必要な場合、 自動的に Mercurial のマージ機能を使用します。"
+
+msgid ""
+"You can have more than one shelved change outstanding at a time; each\n"
+"shelved change has a distinct name. For details, see the help for \"hg\n"
+"shelve\".\n"
+msgstr ""
+"変更内容の退避は、 複数保持することが可能です。 退避された変更内容は、\n"
+"一意な名前で管理されます。 詳細は :hg:`help shelve` を参照してください\n"
+
+#, python-format
+msgid "shelved change '%s' not found"
+msgstr "'%s' という名前の退避情報は存在しません"
+
+msgid ""
+"this version of shelve is incompatible with the version used in this repo"
+msgstr "非互換なバージョンの shelve エクステンションによる復旧処理中です"
+
+msgid "cannot shelve while merging"
+msgstr "マージ実施中は変更の退避ができません"
+
+#, python-format
+msgid "a shelved change named '%s' already exists"
+msgstr "'%s' という名前の退避情報はすでに存在します"
+
+#, python-format
+msgid "too many shelved changes named '%s'"
+msgstr "名前のベースに '%s' を使用する退避情報が多過ぎます"
+
+msgid "shelved change names may not contain slashes"
+msgstr "退避情報の名称にスラッシュやバックスラッシュは使用できません"
+
+msgid "shelved change names may not start with '.'"
+msgstr "退避情報の名称の先頭に '.' は使用できません"
+
+#, python-format
+msgid "nothing changed (%d missing files, see 'hg status')\n"
+msgstr "変更はありません (%d 個のファイルが不在。 'hg status' で確認を)\n"
+
+msgid "nothing changed\n"
+msgstr "変更なし\n"
+
+#, python-format
+msgid "shelved as %s\n"
+msgstr "変更内容を %s という名前で退避\n"
+
+msgid "no shelved changes specified!"
+msgstr "退避情報名が無指定です!"
+
+msgid "working directory parents do not match unshelve state"
+msgstr "作業領域の親リビジョンが、復旧開始時点と異なります"
+
+#, python-format
+msgid "unshelve of '%s' aborted\n"
+msgstr "退避情報 '%s' の復旧を中止\n"
+
+msgid "unresolved conflicts, can't continue"
+msgstr "衝突が未解消のため、継続できません"
+
+msgid "see 'hg resolve', then 'hg unshelve --continue'"
+msgstr "'hg resolve' で衝突解消後に 'hg unshelve --continue'を実行してください"
+
+#, python-format
+msgid "unshelve of '%s' complete\n"
+msgstr "退避情報 '%s' の復旧を完了\n"
+
+msgid "abort an incomplete unshelve operation"
+msgstr "未完了の復旧処理を中止"
+
+msgid "continue an incomplete unshelve operation"
+msgstr "未完了の復旧処理を継続"
+
+msgid "keep shelve after unshelving"
+msgstr "復旧後も退避情報を維持"
+
+msgid "hg unshelve [SHELVED]"
+msgstr "hg unshelve [SHELVED]"
+
+msgid "restore a shelved change to the working directory"
+msgstr "作業領域への退避内容の復旧"
+
+msgid ""
+"    This command accepts an optional name of a shelved change to\n"
+"    restore. If none is given, the most recent shelved change is used."
+msgstr ""
+"    本コマンドは、 退避された変更内容を、 作業領域に復旧します。\n"
+"    退避情報名が無指定の場合、 一番最後に退避した変更内容を復旧します。"
+
+msgid ""
+"    If a shelved change is applied successfully, the bundle that\n"
+"    contains the shelved changes is deleted afterwards."
+msgstr "    退避内容の復旧が完了したなら、 対応する退避情報は破棄されます。"
+
+msgid ""
+"    Since you can restore a shelved change on top of an arbitrary\n"
+"    commit, it is possible that unshelving will result in a conflict\n"
+"    between your changes and the commits you are unshelving onto. If\n"
+"    this occurs, you must resolve the conflict, then use\n"
+"    ``--continue`` to complete the unshelve operation. (The bundle\n"
+"    will not be deleted until you successfully complete the unshelve.)"
+msgstr ""
+"    任意の時点で退避内容を復旧できるため、 作業領域の親リビジョンと、\n"
+"    退避内容の組み合わせ次第では、 変更内容が衝突するかもしれません。\n"
+"    その場合は、 衝突解消後に :hg:`unshelve --continue` を実行して、\n"
+"    復旧処理を完了させてください。 (復旧処理が完了するまでは、\n"
+"    退避情報は破棄されません)"
+
+msgid ""
+"    (Alternatively, you can use ``--abort`` to abandon an unshelve\n"
+"    that causes a conflict. This reverts the unshelved changes, and\n"
+"    does not delete the bundle.)\n"
+"    "
+msgstr ""
+"    (:hg:`unshelve --abort` 実行により、 衝突が発生した復旧処理を、\n"
+"    中止することもできます。 その場合、 作業領域中の変更は破棄されますが、\n"
+"    退避情報は保持されます)\n"
+"    "
+
+msgid "cannot combine abort/continue with naming a shelved change"
+msgstr "--abort および --continue は退避情報名指定と併用できません"
+
+msgid "no unshelve operation underway"
+msgstr "未完了の復旧処理はありません"
+
+msgid "can only unshelve one change at a time"
+msgstr "一度に復旧できる退避情報は一つだけです"
+
+msgid "no shelved changes to apply!"
+msgstr "退避情報がありません"
+
+#, python-format
+msgid "unshelving change '%s'\n"
+msgstr "退避情報 '%s' を復旧中\n"
+
+msgid "unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')"
+msgstr ""
+"衝突が未解消です ('hg resolve' で衝突解消後に 'hg unshelve --continue' を実行"
+"してください)"
+
+msgid "mark new/missing files as added/removed before shelving"
+msgstr "新規/不在ファイルを、退避前に登録/除外対象化"
+
+msgid "delete all shelved changes"
+msgstr "退避情報を全て破棄"
+
+msgid "shelve with the specified commit date"
+msgstr "指定日時を退避情報に記録"
+
+msgid "delete the named shelved change(s)"
+msgstr "指定名称の退避情報を破棄"
+
+msgid "list current shelves"
+msgstr "退避情報の一覧表示"
+
+msgid "use text as shelve message"
+msgstr "指定の説明文を退避情報に記録"
+
+msgid "use the given name for the shelved commit"
+msgstr "指定ユーザ名を退避情報に記録"
+
+msgid "show patch"
+msgstr "パッチ形式での表示"
+
+msgid "output diffstat-style summary of changes"
+msgstr "diffstat 形式の変更概要を出力"
+
+msgid "hg shelve"
+msgstr "hg shelve"
+
+msgid "save and set aside changes from the working directory"
+msgstr "作業領域中の変更内容を退避した上で破棄"
+
+msgid ""
+"    Shelving takes files that \"hg status\" reports as not clean, saves\n"
+"    the modifications to a bundle (a shelved change), and reverts the\n"
+"    files so that their state in the working directory becomes clean."
+msgstr ""
+"    『変更なし』(:hg:`status` 参照) 以外の管理対象ファイルの変更内容を、\n"
+"    バンドルファイルとして退避した上で、 作業領域から破棄することで、\n"
+"    作業領域を『変更なし』状態に戻します。"
+
+msgid ""
+"    To restore these changes to the working directory, using \"hg\n"
+"    unshelve\"; this will work even if you switch to a different\n"
+"    commit."
+msgstr ""
+"    退避した変更内容は :hg:`unshelve` で作業領域に復旧できます。\n"
+"    作業領域の親リビジョンが、 変更退避時点と異なる場合でも復旧可能です。"
+
+msgid ""
+"    When no files are specified, \"hg shelve\" saves all not-clean\n"
+"    files. If specific files or directories are named, only changes to\n"
+"    those files are shelved."
+msgstr ""
+"    対象が無指定の場合、 『変更なし』以外の全ての管理対象ファイルが、\n"
+"    変更退避の対象になります。 対象ファイル/ディレクトリ指定がある場合、\n"
+"    指定対象の変更のみが退避されます。"
+
+msgid ""
+"    Each shelved change has a name that makes it easier to find later.\n"
+"    The name of a shelved change defaults to being based on the active\n"
+"    bookmark, or if there is no active bookmark, the current named\n"
+"    branch.  To specify a different name, use ``--name``."
+msgstr ""
+"    退避内容を識別するために、 変更退避の情報は名前を付けて管理されます。\n"
+"    ``--name`` での名前指定が無い場合、 アクティブなブックマーク名、\n"
+"    または作業領域の名前付きブランチ名が、 退避情報の名前に使用されます。"
+
+msgid ""
+"    To see a list of existing shelved changes, use the ``--list``\n"
+"    option. For each shelved change, this will print its name, age,\n"
+"    and description; use ``--patch`` or ``--stat`` for more details."
+msgstr ""
+"    退避情報の一覧は ``--list`` オプションで表示されます。 退避情報毎に、\n"
+"    名前、 日時情報、 説明文を表示します。 より詳細な表示には ``--patch``\n"
+"    や ``--stat`` を指定してください。"
+
+msgid ""
+"    To delete specific shelved changes, use ``--delete``. To delete\n"
+"    all shelved changes, use ``--cleanup``.\n"
+"    "
+msgstr ""
+"    特定の退避情報を破棄する場合は ``--delete`` を指定します。\n"
+"    全ての退避情報を破棄する場合は ``--cleanup`` を指定します。\n"
+"    "
+
+#, python-format
+msgid "options '--%s' and '--%s' may not be used together"
+msgstr "オプション '--%s' と '--%s' は併用できません"
+
+msgid "cannot specify names when using '--cleanup'"
+msgstr "退避情報の名前指定は '--cleanup' と併用できません"
+
+#, python-format
+msgid "option '--%s' may not be used when shelving a change"
+msgstr "オプション '--%s' は変更退避時には指定できません"
+
+msgid "unshelve already in progress"
+msgstr "unshelve による退避情報復旧が未完了です"
+
+msgid "use 'hg unshelve --continue' or 'hg unshelve --abort'"
+msgstr "'hg unshelve --continue' か 'hg unshelve --abort' を実施してください"
+
+msgid "strip changesets and their descendents from history"
+msgstr "指定リビジョンと子孫の履歴からの破棄"
+
+msgid ""
+"This extension allows you to strip changesets and all their descendants from "
+"the\n"
+"repository. See the command help for details.\n"
+msgstr ""
+"本エクステンションは、 指定リビジョンとその子孫を、 履歴から破棄します。\n"
+"詳細は :hg:`help strip` を参照してください。\n"
+
+#, python-format
+msgid "uncommitted changes in subrepository %s"
+msgstr "サブリポジトリ %s の変更が未コミットです"
+
+msgid "local changes found"
+msgstr "作業領域に変更があります"
+
+msgid "local changed subrepos found"
+msgstr "サブリポジトリに変更があります"
+
+msgid ""
+"strip specified revision (optional, can specify revisions without this "
+"option)"
+msgstr "指定リビジョンの削除 (本オプション無しでもリビジョン指定可能)"
+
+msgid "force removal of changesets, discard uncommitted changes (no backup)"
+msgstr "リビジョンを強制的に削除し、 未コミット変更内容を破棄(保存無し)"
+
+msgid ""
+"bundle only changesets with local revision number greater than REV which are "
+"not descendants of REV (DEPRECATED)"
+msgstr ""
+"指定リビジョンよりリビジョン番号が大きく子孫以外のものを bundle 化(非推奨)"
+
+msgid "no backups"
+msgstr "バックアップ作成の抑止"
+
+msgid "no backups (DEPRECATED)"
+msgstr "バックアップ作成の抑止(非推奨)"
+
+msgid "ignored  (DEPRECATED)"
+msgstr "※ このオプションは無視されます (非推奨)"
+
+msgid "do not modify working copy during strip"
+msgstr "処理中の作業領域変更を抑止"
+
+msgid "remove revs only reachable from given bookmark"
+msgstr "指定ブックマークから、 到達可能なリビジョンのみを除外"
+
+msgid "hg strip [-k] [-f] [-n] [-B bookmark] [-r] REV..."
+msgstr "hg strip [-k] [-f] [-n] [-B bookmark] [-r] REV..."
+
+msgid "strip changesets and all their descendants from the repository"
+msgstr "リポジトリからの、 特定リビジョンおよびその子孫の除外"
+
+msgid ""
+"    The strip command removes the specified changesets and all their\n"
+"    descendants. If the working directory has uncommitted changes, the\n"
+"    operation is aborted unless the --force flag is supplied, in which\n"
+"    case changes will be discarded."
+msgstr ""
+"    :hg:`strip` は指定のリビジョンおよび、 指定リビジョンの子孫を\n"
+"    取り除きます。 作業領域の変更が未コミットの場合、\n"
+"    --force が指定されない限りは処理を中止します。\n"
+"    --force が指定された場合、 変更内容は破棄されます。"
+
+msgid ""
+"    If a parent of the working directory is stripped, then the working\n"
+"    directory will automatically be updated to the most recent\n"
+"    available ancestor of the stripped parent after the operation\n"
+"    completes."
+msgstr ""
+"    作業領域の親リビジョンが除外対象になった場合、 除外操作の完了後に、\n"
+"    除外された親リビジョンの祖先の中で、 最も近い有効なリビジョンで、\n"
+"    作業領域を更新します。"
+
+msgid ""
+"    Any stripped changesets are stored in ``.hg/strip-backup`` as a\n"
+"    bundle (see :hg:`help bundle` and :hg:`help unbundle`). They can\n"
+"    be restored by running :hg:`unbundle .hg/strip-backup/BUNDLE`,\n"
+"    where BUNDLE is the bundle file created by the strip. Note that\n"
+"    the local revision numbers will in general be different after the\n"
+"    restore."
+msgstr ""
+"    除外されたリビジョンは、 bundle 形式で ``.hg/strip-backup`` 配下に\n"
+"    退避されます(bundle 形式に関しては :hg:`help bundle` および\n"
+"    :hg:`help unbundle` 参照)。 除外の際に作成された BUNDLE ファイルで\n"
+"    :hg:`unbundle .hg/strip-backup/BUNDLE` を実施することで\n"
+"    除外されたリビジョンを復旧させることができます。 通常、 復旧の際には\n"
+"    リビジョン番号が変更されますので注意してください。"
+
+msgid ""
+"    Use the --no-backup option to discard the backup bundle once the\n"
+"    operation completes."
+msgstr ""
+"    除外処理完了時点で bundle ファイルを破棄する場合は\n"
+"    --no-backup を指定してください。"
+
+msgid ""
+"    Strip is not a history-rewriting operation and can be used on\n"
+"    changesets in the public phase. But if the stripped changesets have\n"
+"    been pushed to a remote repository you will likely pull them again."
+msgstr ""
+"    本コマンドでの操作は、 履歴の書き換えではないので、 対象リビジョンが\n"
+"    public フェーズでも、 実行可能です。 但し、 除外対象リビジョンが、\n"
+"    他リポジトリに反映済みである場合、 そのリビジョンは pull 操作により、\n"
+"    再び手元のリポジトリに出現することでしょう。"
+
+#, python-format
+msgid "bookmark '%s' not found"
+msgstr "ブックマーク '%s' がありません"
+
+#, python-format
+msgid "bookmark '%s' deleted\n"
+msgstr "ブックマーク '%s' が破棄されました\n"
+
+msgid "empty revision set"
+msgstr "指定に該当するリビジョンはありません"
+
 msgid "command to transplant changesets from another branch"
 msgstr "別ブランチからのリビジョンの移植"
 
@@ -9093,14 +9454,14 @@
 "changesets,\n"
 "    just as if it temporarily had been pulled.\n"
 "    If --branch/-b is specified, these revisions will be used as\n"
-"    heads when deciding which changsets to transplant, just as if only\n"
+"    heads when deciding which changesets to transplant, just as if only\n"
 "    these revisions had been pulled.\n"
 "    If --all/-a is specified, all the revisions up to the heads specified\n"
 "    with --branch will be transplanted."
 msgstr ""
 "    移植対象リビジョンは --source/-s で指定したリポジトリから、\n"
 "    移植時に取り込むことが可能です。 --branch/-b が指定された場合、\n"
-"    指定ブランチのみの取り込みを仮定して、 移植対象が決定されます。\n"
+"    指定ブランチのみの履歴取り込みを仮定して、 移植対象が決定されます。\n"
 "    --all/-a が指定された場合は、 指定リビジョンに至る全リビジョンが、\n"
 "    移植対象とみなされます。"
 
@@ -9191,9 +9552,7 @@
 msgstr "transplant による移植が未完了です"
 
 msgid "use 'hg transplant --continue' or 'hg update' to abort"
-msgstr ""
-"未完了の transplant は、'hg transplant --continue' で再開するか、'hg update' "
-"で中止してください"
+msgstr "'hg transplant --continue' か 'hg update' (移植中止)を実施してください"
 
 msgid "allow the use of MBCS paths with problematic encodings"
 msgstr "問題ある文字コードをパス名に使用する場合の対処"
@@ -9467,6 +9826,10 @@
 msgstr "ブランチ %s が見つかりません"
 
 #, python-format
+msgid "updating to active bookmark %s\n"
+msgstr "アクティブなブックマーク %s への更新中\n"
+
+#, python-format
 msgid "divergent bookmark %s stored as %s\n"
 msgstr "分岐するブックマーク %s を %s として保存\n"
 
@@ -9837,15 +10200,13 @@
 msgstr "graft による移植が未完了です"
 
 msgid "use 'hg graft --continue' or 'hg update' to abort"
-msgstr ""
-"未完了の graft は、'hg graft --continue' で再開するか、'hg update' で中止して"
-"ください"
+msgstr "'hg graft --continue' か 'hg update' (移植中止)を実施してください"
 
 msgid "last update was interrupted"
 msgstr "直前の作業領域更新は中断されました"
 
 msgid "use 'hg update' to get a consistent checkout"
-msgstr "作業領域内容の整合性を取るために、'hg update' を実行してください"
+msgstr "作業領域内容の整合性を取るには 'hg update' を実行してください"
 
 msgid "repository root directory or name of overlay bundle file"
 msgstr "リポジトリのルート位置、 ないしバンドルファイルのパス"
@@ -9949,15 +10310,9 @@
 msgid "display with template"
 msgstr "当該テンプレートで表示をカスタマイズ"
 
-msgid "show patch"
-msgstr "パッチ形式での表示"
-
 msgid "do not show merges"
 msgstr "マージ実施リビジョンの表示抑止"
 
-msgid "output diffstat-style summary of changes"
-msgstr "diffstat 形式の変更概要を生成"
-
 msgid "show the revision DAG"
 msgstr "履歴ツリーの表示"
 
@@ -10448,13 +10803,12 @@
 "          hg bisect --skip 23"
 
 msgid ""
-"      - skip all revisions that do not touch directories ``foo`` or ``bar``"
+"      - skip all revisions that do not touch directories ``foo`` or ``bar``::"
 msgstr "      - ``foo`` と ``bar`` の両方を変更したリビジョン以外をスキップ::"
 
-msgid ""
-"          hg bisect --skip '!( file(\"path:foo\") & file(\"path:bar\") )'"
-msgstr ""
-"          hg bisect --skip '!( file(\"path:foo\") & file(\"path:bar\") )'"
+msgid "          hg bisect --skip \"!( file('path:foo') & file('path:bar') )\""
+msgstr ""
+"          hg bisect --skip \"!( file('path:foo') & file('path:bar') )\""
 
 msgid "      - forget the current bisection::"
 msgstr "      - 現行の探索状態をクリア::"
@@ -10472,12 +10826,12 @@
 "          hg bisect --reset\n"
 "          hg bisect --bad 34\n"
 "          hg bisect --good 12\n"
-"          hg bisect --command 'make && make tests'"
+"          hg bisect --command \"make && make tests\""
 msgstr ""
 "          hg bisect --reset\n"
 "          hg bisect --bad 34\n"
 "          hg bisect --good 12\n"
-"          hg bisect --command 'make && make tests'"
+"          hg bisect --command \"make && make tests\""
 
 msgid ""
 "      - see all changesets whose states are already known in the current\n"
@@ -10656,7 +11010,7 @@
 "    "
 
 msgid "bookmark names cannot consist entirely of whitespace"
-msgstr "空白文字だけで構成されたタグ名は不正です"
+msgstr "空白文字だけで構成されたブックマーク名は不正です"
 
 #, python-format
 msgid "moving bookmark '%s' forward from %s\n"
@@ -11139,7 +11493,7 @@
 msgstr "--noupdate と --updaterev は併用できません"
 
 msgid "mark new/missing files as added/removed before committing"
-msgstr "コミット前に、 新規/不在ファイルを登録/除外"
+msgstr "新規/不在ファイルを、コミット前に登録/除外対象化"
 
 msgid "mark a branch as closed, hiding it from the branch list"
 msgstr "ブランチを閉鎖し、 ブランチ一覧での表示から除外"
@@ -11247,13 +11601,6 @@
 msgid "cannot amend changeset with children"
 msgstr "子リビジョンを持つリビジョンは改変できません"
 
-msgid "nothing changed\n"
-msgstr "変更なし\n"
-
-#, python-format
-msgid "nothing changed (%d missing files, see 'hg status')\n"
-msgstr "変更はありません (%d 個のファイルが不在。 'hg status' で確認を)\n"
-
 msgid "record a copy that has already occurred"
 msgstr "手動で複製済みのファイルに対して、 複製の旨を記録"
 
@@ -12265,12 +12612,12 @@
 msgstr "祖先リビジョン %s を飛ばしています\n"
 
 #, python-format
-msgid "skipping already grafted revision %s\n"
-msgstr "移植済みリビジョン %s を飛ばしています\n"
-
-#, python-format
-msgid "skipping already grafted revision %s (same origin %d)\n"
-msgstr "移植済みリビジョン %s を飛ばしています (由来元: %d)\n"
+msgid "skipping revision %s (already grafted to %s)\n"
+msgstr "リビジョン %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"
@@ -12280,9 +12627,6 @@
 msgid "grafting revision %s\n"
 msgstr "リビジョン %s の移植中\n"
 
-msgid "unresolved conflicts, can't continue"
-msgstr "衝突が未解消のため、継続できません"
-
 msgid "use hg resolve and hg graft --continue"
 msgstr "'hg resolve' での衝突解消後に、'hg graft --continue'を実行してください"
 
@@ -13310,6 +13654,10 @@
 msgid "not updating: %s\n"
 msgstr "更新中断: %s\n"
 
+#, python-format
+msgid "(%s)\n"
+msgstr "(%s)\n"
+
 msgid "(run 'hg heads' to see heads, 'hg merge' to merge)\n"
 msgstr "(ヘッド一覧表示は 'hg heads'、 マージ実施は 'hg merge')\n"
 
@@ -13427,11 +13775,15 @@
 "    を使用します。 このオプションは、 新規ブランチの作成のみを許可します。"
 
 msgid ""
-"    Use -f/--force to override the default behavior and push all\n"
-"    changesets on all branches."
-msgstr ""
-"    通常挙動における制約を無視して、 全てのブランチにおける全ての変更を\n"
-"    反映する場合は、 -f/--force を使用します。"
+"    .. note::\n"
+"      Extra care should be taken with the -f/--force option,\n"
+"      which will push all new heads on all branches, an action which will\n"
+"      almost always cause confusion for collaborators."
+msgstr ""
+"    .. note::\n"
+"      -f/--force を指定した場合、 対象ブランチ上の全ヘッドリビジョンが、\n"
+"      連携先に反映されます。 この挙動は多くの場合、 共同作業者の間で、\n"
+"      無用な混乱の原因となりますので、 指定の際には十分な注意が必要です。"
 
 msgid ""
 "    If -r/--rev is used, the specified revision and all its ancestors\n"
@@ -13551,14 +13903,14 @@
 "      および作業領域からの削除 (Delete) [D] で表します:"
 
 msgid ""
-"      ======= == == == ==\n"
-"              A  C  M  !\n"
-"      ======= == == == ==\n"
-"      none    W  RD W  R\n"
-"      -f      R  RD RD R\n"
-"      -A      W  W  W  R\n"
-"      -Af     R  R  R  R\n"
-"      ======= == == == =="
+"      ========= == == == ==\n"
+"      opt/state A  C  M  !\n"
+"      ========= == == == ==\n"
+"      none      W  RD W  R\n"
+"      -f        R  RD RD R\n"
+"      -A        W  W  W  R\n"
+"      -Af       R  R  R  R\n"
+"      ========= == == == =="
 msgstr ""
 "      =============== == == == ==\n"
 "      オプション/状態 A  C  M  !\n"
@@ -13792,7 +14144,7 @@
 msgstr "マージが未コミットな上に、対象リビジョンが明示されていません"
 
 msgid "use \"hg update\" or see \"hg help revert\""
-msgstr "\"hg update\" 実施を検討するか、\"hg help revert\" を参照して下さい"
+msgstr "\"hg update\" 実施を検討するか、\"hg help revert\" を参照"
 
 msgid "no files or directories specified"
 msgstr "ファイル/ディレクトリ指定がありません"
@@ -14442,9 +14794,8 @@
 "    most recently added to the repository (and therefore the most\n"
 "    recently changed head)."
 msgstr ""
-"    tip リビジョン(一般には単に tip と表記)とは、 リポジトリおいて最も\n"
-"    新しく追加されたリビジョンであると同時に、 最も新しく変更されたヘッド\n"
-"    のことでもあります。"
+"    tip リビジョン (一般には単に tip と表記) とは、 リポジトリにおける、\n"
+"    最新の追加リビジョンです (最新の変更されたヘッドでもあります)"
 
 msgid ""
 "    If you have just made a commit, that commit will be the tip. If\n"
@@ -14582,10 +14933,6 @@
 "    特定のファイルだけを以前の状態に戻す場合は、\n"
 "    :hg:`revert [-r リビジョン] ファイル名` を使用してください。"
 
-#, python-format
-msgid "updating to active bookmark %s\n"
-msgstr "アクティブなブックマーク %s への更新中\n"
-
 msgid "cannot specify both -c/--check and -C/--clean"
 msgstr "-c/--check と -C/--clean は併用できません"
 
@@ -14622,7 +14969,7 @@
 msgstr "Mercurial - 分散構成管理ツール(バージョン %s)\n"
 
 msgid "(see http://mercurial.selenic.com for more information)"
-msgstr "(詳細は http://mercurial.selenic.com を参照してください)"
+msgstr "(詳細は http://mercurial.selenic.com を参照)"
 
 msgid ""
 "Copyright (C) 2005-2013 Matt Mackall and others\n"
@@ -14646,6 +14993,9 @@
 msgid "cannot include %s (%s)"
 msgstr "%s を読み込めません(%s)"
 
+msgid "not found in manifest"
+msgstr "マニフェストにありません"
+
 #, python-format
 msgid "unknown revision '%s'"
 msgstr "'%s' は未知のリビジョンです"
@@ -14654,9 +15004,6 @@
 msgid "working directory has unknown parent '%s'!"
 msgstr "作業領域の親 '%s' が未知のリビジョンです!"
 
-msgid "not found in manifest"
-msgstr "マニフェストにありません"
-
 #, python-format
 msgid "no such file in rev %s"
 msgstr "リビジョン %s に当該ファイルは存在しません"
@@ -14760,6 +15107,13 @@
 msgstr "連携先への新規ブランチ作成は 'hg push --new-branch'"
 
 #, python-format
+msgid "push creates multiple headed new branch '%s'"
+msgstr "連携先に複数ヘッドのブランチ '%s' が作成されます"
+
+msgid "merge or see \"hg help push\" for details about pushing new heads"
+msgstr "マージするか、新規ヘッドの反映に関して \"hg help push\" を参照"
+
+#, python-format
 msgid "push creates new remote head %s on branch '%s'!"
 msgstr "新しいヘッド %s が連携先のブランチ '%s' に作成されます!"
 
@@ -14767,11 +15121,9 @@
 msgid "push creates new remote head %s!"
 msgstr "新しいヘッド %s が連携先に作成されます!"
 
-msgid "you should pull and merge or use push -f to force"
-msgstr "pull と merge を実施するか、 push -f で強制実行してください"
-
-msgid "did you forget to merge? use push -f to force"
-msgstr "マージは済んでいますか? push -f で強制実行できます"
+msgid ""
+"pull and merge or see \"hg help push\" for details about pushing new heads"
+msgstr "取り込み+マージするか、新規ヘッド反映に関して \"hg help push\" を参照"
 
 #, python-format
 msgid "new remote heads on branch '%s'\n"
@@ -14789,10 +15141,6 @@
 msgstr "中止: %s\n"
 
 #, python-format
-msgid "(%s)\n"
-msgstr "(%s)\n"
-
-#, python-format
 msgid "hg: parse error at %s: %s\n"
 msgstr "hg: %s での解析エラー: %s\n"
 
@@ -14804,6 +15152,10 @@
 msgstr "デバッガ動作開始 - 継続なら c 、 ヘルプなら h を入力してください\n"
 
 #, python-format
+msgid "%s debugger specified but its module was not found\n"
+msgstr "指定された %s デバッガのモジュールが読み込めません\n"
+
+#, python-format
 msgid ""
 "hg: command '%s' is ambiguous:\n"
 "    %s\n"
@@ -14925,7 +15277,7 @@
 
 #, python-format
 msgid "no definition for alias '%s'\n"
-msgstr "'%s' を別名に持つコマンドはありません\n"
+msgstr "別名コマンド '%s' には実行対象の記述がありません\n"
 
 #, python-format
 msgid ""
@@ -18554,7 +18906,7 @@
 "    PEM 符号化形式の証明書認証局証明書一覧格納ファイルへのパス。\n"
 "    ファイル名記述における環境変数および ``~user`` 記述は置換されます。\n"
 "    本項目が、 クライアント側で記述された場合、 指定された証明書により、\n"
-"    HTTPS サーバが認証されます。 ファイルの形式例を以下に示します。"
+"    HTTPS サーバが認証されます。"
 
 msgid ""
 "    This feature is only supported when using Python 2.6 or later. If you "
@@ -21578,7 +21930,7 @@
 "if needed. See :hg:`help -v phase` for examples."
 msgstr ""
 "予期せぬ類似リビジョン生成回避のため、 mq/rebase 等のエクステンションは、\n"
-"一旦 public 化されたリビジョンを処理対処にできません。\n"
+"一旦 public 化されたリビジョンを、 変更/破棄の対象にできません。\n"
 "必要であれば :hg:`phase` コマンドによる手動でのフェーズ変更も可能です。\n"
 "実行例に関しては :hg:`help -v phase` を参照してください。"
 
@@ -21680,8 +22032,8 @@
 msgid " - resynchronize draft changesets relative to a remote repository::"
 msgstr " - 連携先リポジトリに応じて、リビジョンを draft フェーズ化::"
 
-msgid "     hg phase -fd 'outgoing(URL)'"
-msgstr "     hg phase -fd 'outgoing(URL)'"
+msgid "     hg phase -fd \"outgoing(URL)\""
+msgstr "     hg phase -fd \"outgoing(URL)\""
 
 msgid ""
 "See :hg:`help phase` for more information on manually manipulating phases.\n"
@@ -22728,6 +23080,15 @@
 msgid "cannot start server at '%s:%d': %s"
 msgstr "'%s:%d' でのサーバ起動に失敗: %s"
 
+msgid "exact revision search"
+msgstr "リビジョン識別子による検索"
+
+msgid "literal keyword search"
+msgstr "キーワードによる検索"
+
+msgid "revset expression search"
+msgstr "revset 記述による検索"
+
 #, python-format
 msgid "(binary file %s, hash: %s)"
 msgstr "(バイナリファイル %s, ハッシュ値: %s)"
@@ -22880,7 +23241,7 @@
 msgstr "警告: タグ %s が既存のブランチ名と衝突します\n"
 
 msgid "working copy of .hgtags is changed (please commit .hgtags manually)"
-msgstr "作業領域の .hgtags が変更されています(手動でコミットしてください)"
+msgstr "作業領域の .hgtags が変更されています (手動でコミットしてください)"
 
 msgid "abandoned transaction found - run hg recover"
 msgstr "中断トランザクションを検出 - 'hg recover' を実施してください"
@@ -22965,7 +23326,7 @@
 msgstr "管理対象ファイルが不在の状況では、マージ結果をコミットできません"
 
 msgid "unresolved merge conflicts (see hg help resolve)"
-msgstr "未解消の衝突が残っています (hg help resolveを参照してください)"
+msgstr "未解消の衝突が残っています (\"hg help resolve\" を参照)"
 
 #, python-format
 msgid "committing subrepository %s\n"
@@ -23035,7 +23396,7 @@
 
 #, python-format
 msgid " (%+d heads)"
-msgstr "(%+d個のヘッド)"
+msgstr " (%+d個のヘッド)"
 
 #, python-format
 msgid "added %d changesets with %d changes to %d files%s\n"
@@ -23075,7 +23436,7 @@
 
 #, python-format
 msgid "transferred %s in %.1f seconds (%s/sec)\n"
-msgstr "%s を %.1f 秒で送信しました(%s/秒)\n"
+msgstr "%s を %.1f 秒で送信しました (%s/秒)\n"
 
 msgid "SMTPS requires Python 2.6 or later"
 msgstr "SMTPS の利用には Python 2.6 以降が必要です"
@@ -23223,15 +23584,20 @@
 msgstr "変更一覧は 'hg status' で確認できます"
 
 #, python-format
-msgid "outstanding uncommitted changes in subrepository '%s'"
-msgstr "サブリポジトリ %s の変更が未コミットです"
-
-msgid "crosses branches (merge branches or use --clean to discard changes)"
-msgstr ""
-"ブランチ横断の更新 (マージするか、 --clean 指定で変更を破棄してください)"
-
-msgid "crosses branches (merge branches or update --check to force update)"
-msgstr "ブランチ横断の更新 (マージか、 update --check で強制更新してください)"
+msgid "uncommitted changes in subrepository '%s'"
+msgstr "サブリポジトリ '%s' の変更が未コミットです"
+
+msgid "commit and merge, or update --clean to discard changes"
+msgstr "コミット後にマージするか、変更を破棄 (update --clean) してください"
+
+msgid "commit or update --clean to discard changes"
+msgstr "変更をコミットするか、変更を破棄 (update --clean) してください"
+
+msgid "not a linear update"
+msgstr "ブランチを横断する更新です"
+
+msgid "merge or update --check to force update"
+msgstr "マージするか、変更有無の確認付きで更新 (update --check) してください"
 
 msgid "Attention:"
 msgstr "注意:"
@@ -23468,8 +23834,8 @@
 msgstr "%x は互換性のないリビジョンフラグです"
 
 #, python-format
-msgid "integrity check failed on %s:%d"
-msgstr "%s:%d の一貫性チェックに失敗"
+msgid "integrity check failed on %s:%s"
+msgstr "%s:%s の一貫性チェックに失敗"
 
 #, python-format
 msgid "%s not found in the transaction"
@@ -23479,9 +23845,6 @@
 msgid "attempted to add linkrev -1 to %s"
 msgstr "linkrev -1 なリビジョンを %s に追加しようとしています"
 
-msgid "consistency error in delta"
-msgstr "差分情報の不整合"
-
 #, python-format
 msgid "can't use %s here"
 msgstr "ここでは %s を使用できません"
@@ -24639,6 +25002,15 @@
 
 #, python-format
 msgid ""
+" subrepository %s diverged (local revision: %s, remote revision: %s)\n"
+"(M)erge, keep (l)ocal or keep (r)emote?$$ &Merge $$ &Local $$ &Remote"
+msgstr ""
+" サブリポジトリ %s で分岐が検出されました (手元: %s 分岐先: %s)\n"
+"マージ実施:(m)erge 手元の内容:(l)ocal 分岐先の内容:(r)emote のどれを採用しま"
+"すか?$$ &Merge $$ &Local $$ &Remote"
+
+#, python-format
+msgid ""
 " local changed subrepository %s which remote removed\n"
 "use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
 msgstr ""
--- a/i18n/pt_BR.po	Sat Nov 02 11:25:04 2013 +0100
+++ b/i18n/pt_BR.po	Tue Nov 05 13:25:45 2013 -0500
@@ -31,7 +31,7 @@
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
-"POT-Creation-Date: 2013-07-23 09:37-0300\n"
+"POT-Creation-Date: 2013-10-19 11:01-0300\n"
 "PO-Revision-Date: 2011-06-28 09:55+0200\n"
 "Last-Translator: Wagner Bruna <wbruna@yahoo.com>\n"
 "Language-Team: Brazilian Portuguese\n"
@@ -794,8 +794,8 @@
 "  Default ``changeset {node|short} in repo {root} refers to bug\n"
 "  {bug}.\\ndetails:\\n\\t{desc|tabindent}``"
 msgstr ""
-"  O valor padrão é ``changeset {node|short} in repo {root} refers\n"
-"  to bug {bug}.\\ndetails:\\n\\t{desc|tabindent}``"
+"  O valor padrão é ``changeset {node|short} in repo {root} refers to bug\n"
+"  {bug}.\\ndetails:\\n\\t{desc|tabindent}``"
 
 msgid ""
 "bugzilla.strip\n"
@@ -1314,31 +1314,31 @@
 
 msgid ""
 "      # display count of changed lines for every committer\n"
-"      hg churn -t '{author|email}'"
+"      hg churn -t \"{author|email}\""
 msgstr ""
 "      # exibe a contagem de linhas modificadas para cada autor\n"
-"      hg churn -t '{author|email}'"
+"      hg churn -t \"{author|email}\""
 
 msgid ""
 "      # display daily activity graph\n"
-"      hg churn -f '%H' -s -c"
+"      hg churn -f \"%H\" -s -c"
 msgstr ""
 "      # exibe o gráfico de atividades diárias\n"
-"      hg churn -f '%H' -s -c"
+"      hg churn -f \"%H\" -s -c"
 
 msgid ""
 "      # display activity of developers by month\n"
-"      hg churn -f '%Y-%m' -s -c"
+"      hg churn -f \"%Y-%m\" -s -c"
 msgstr ""
 "      # exibe atividades dos desenvolvedores por mês\n"
-"      hg churn -f '%Y-%m' -s -c"
+"      hg churn -f \"%Y-%m\" -s -c"
 
 msgid ""
 "      # display count of lines changed in every year\n"
-"      hg churn -f '%Y' -s"
+"      hg churn -f \"%Y\" -s"
 msgstr ""
 "      # exibe a contagem de linhas modificadas a cada ano\n"
-"      hg churn -f '%Y' -s"
+"      hg churn -f \"%Y\" -s"
 
 msgid ""
 "    It is possible to map alternate email addresses to a main address\n"
@@ -1532,6 +1532,15 @@
 "  rebase.rebased = blue\n"
 "  rebase.remaining = red bold"
 
+msgid ""
+"  shelve.age = cyan\n"
+"  shelve.newest = green bold\n"
+"  shelve.name = blue bold"
+msgstr ""
+"  shelve.age = cyan\n"
+"  shelve.newest = green bold\n"
+"  shelve.name = blue bold"
+
 msgid "  histedit.remaining = red bold"
 msgstr "  histedit.remaining = red bold"
 
@@ -1945,12 +1954,10 @@
 "        argumento booleano, e seu valor padrão é False."
 
 msgid ""
-"    :convert.hg.startrev: convert start revision and its descendants.\n"
-"        It takes a hg revision identifier and defaults to 0."
-msgstr ""
-"    :convert.hg.startrev: converte a revisão inicial especificada e seus\n"
-"        descendentes. Recebe um identificador de revisão do Mercurial; seu\n"
-"        valor padrão é 0."
+"    :convert.hg.revs: revset specifying the source revisions to convert."
+msgstr ""
+"    :convert.hg.revs: revset especificando as revisões de origem a serem "
+"convertidas."
 
 msgid ""
 "    CVS Source\n"
@@ -2247,8 +2254,8 @@
 msgid "destination repository type"
 msgstr "tipo de repositório de destino"
 
-msgid "import up to target revision REV"
-msgstr "importa até a revisão REV do alvo"
+msgid "import up to source revision REV"
+msgstr "importa até a revisão REV da origem"
 
 msgid "remap usernames using this file"
 msgstr "arquivo de mapeamento de nomes de usuário"
@@ -2629,6 +2636,10 @@
 msgstr "repositório de origem não suporta --filemap"
 
 #, python-format
+msgid "warning: %s parent %s is missing\n"
+msgstr "aviso: a revisão %s tem um pai %s faltando\n"
+
+#, python-format
 msgid "%s does not look like a Git repository"
 msgstr "%s não parece ser um repositório do Git"
 
@@ -2710,6 +2721,9 @@
 msgid "%s is not a valid start revision"
 msgstr "%s não é uma revisão inicial válida"
 
+msgid "hg.revs cannot be combined with hg.startrev or --rev"
+msgstr "hg.revs não pode ser combinado com hg.startrev ou --rev"
+
 #, python-format
 msgid "ignoring: %s\n"
 msgstr "ignorando: %s\n"
@@ -4363,11 +4377,8 @@
 msgid "%s is not an ancestor of working directory"
 msgstr "%s não é um ancestral do diretório de trabalho"
 
-#, python-format
-msgid "update to %s or descendant and run \"hg histedit --continue\" again"
-msgstr ""
-"atualize para %s ou um descendente e execute \"hg histedit --continue\" "
-"novamente"
+msgid "use \"histedit --abort\" to clear broken state"
+msgstr "use \"histedit --abort\" para limpar o estado quebrado"
 
 msgid "cannot edit history that would orphan nodes"
 msgstr "não é possível editar histórico de forma a produzir nós órfãos"
@@ -5444,8 +5455,8 @@
 msgid "--normal cannot be used with --large"
 msgstr "--normal não pode ser usado com --large"
 
-msgid "uncommitted local changes"
-msgstr "alterações locais pendentes"
+msgid "uncommitted changes"
+msgstr "alterações não consolidadas"
 
 #, python-format
 msgid ""
@@ -5539,8 +5550,8 @@
 msgstr "o conteúdo do largefile não combina com o hash"
 
 #, python-format
-msgid "largefiles: failed to put %s into store: %s"
-msgstr "largefiles: não foi possível colocar %s no armazenamento: %s"
+msgid "largefiles: failed to put %s into store: %s\n"
+msgstr "largefiles: não foi possível colocar %s no armazenamento: %s\n"
 
 #, python-format
 msgid "requested largefile %s not present in cache"
@@ -5550,8 +5561,8 @@
 msgstr "remoto: "
 
 #, python-format
-msgid "unexpected putlfile response: %s"
-msgstr "resposta inesperada de putlfile: %s"
+msgid "unexpected putlfile response: %r\n"
+msgstr "resposta inesperada de putlfile: %r\n"
 
 msgid "putlfile failed:"
 msgstr "putlfile falhou:"
@@ -5567,8 +5578,8 @@
 msgstr "remotestore: não foi possível colocar %s no armazenamento remoto %s"
 
 #, python-format
-msgid "remotestore: put %s to remote store %s"
-msgstr "remotestore: %s foi colocado no armazenamento remoto %s"
+msgid "remotestore: put %s to remote store %s\n"
+msgstr "remotestore: %s foi colocado no armazenamento remoto %s\n"
 
 #, python-format
 msgid "remotestore: could not open file %s: %s"
@@ -5583,6 +5594,10 @@
 msgstr "revisão %s: %s faltando\n"
 
 #, python-format
+msgid "required features are not supported in the destination: %s"
+msgstr "funcionalidades necessárias não são suportadas pelo destino: %s"
+
+#, python-format
 msgid "file \"%s\" is a largefile standin"
 msgstr "o arquivo \"%s\" é um standin largefile"
 
@@ -5740,12 +5755,19 @@
 msgid ""
 "make them behave as if --keep-changes were passed, and non-conflicting\n"
 "local changes will be tolerated and preserved. If incompatible options\n"
-"such as -f/--force or --exact are passed, this setting is ignored.\n"
+"such as -f/--force or --exact are passed, this setting is ignored."
 msgstr ""
 "faz com que esses comandos se comportem como se --keep-changes\n"
 "tivesse sido passada, e mudanças locais não conflitantes serão\n"
 "toleradas e preservadas. Se forem passadas mudanças incompatíveis\n"
-"como -f/--force ou --exact, esta configuração será ignorada.\n"
+"como -f/--force ou --exact, esta configuração será ignorada."
+
+msgid ""
+"This extension used to provide a strip command. This command now lives\n"
+"in the strip extension.\n"
+msgstr ""
+"Esta extensão antigamente fornecia o comando strip. Este comando\n"
+"passou a ser fornecido pela extensão strip.\n"
 
 msgid "print first line of patch header"
 msgstr "imprime a primeira linha do cabeçalho do patch"
@@ -5848,7 +5870,7 @@
 msgstr "impossível ler %s\n"
 
 msgid "local changes found, refresh first"
-msgstr "mudanças locais encontradas, você deve primeiro renovar"
+msgstr "mudanças locais encontradas, você deve executar qrefresh primeiro"
 
 #, python-format
 msgid "patch %s is empty\n"
@@ -5903,12 +5925,10 @@
 msgid "working directory revision is not qtip"
 msgstr "a revisão do diretório de trabalho não é a qtip"
 
-#, python-format
-msgid "uncommitted changes in subrepository %s"
-msgstr "mudanças não consolidadas no sub-repositório %s"
-
-msgid "local changes found"
-msgstr "mudanças locais encontradas"
+msgid "local changed subrepos found, refresh first"
+msgstr ""
+"encontrados sub-repositórios modificados localmente, você deve executar "
+"qrefresh primeiro"
 
 #, python-format
 msgid "\"%s\" cannot be used as the name of a patch"
@@ -6893,111 +6913,6 @@
 msgid "copy %s to %s\n"
 msgstr "copia %s para %s\n"
 
-msgid ""
-"strip specified revision (optional, can specify revisions without this "
-"option)"
-msgstr ""
-"remove a revisão especificada (opcional, não é necessário especificar "
-"explicitamente esta opção para remover revisões)"
-
-msgid "force removal of changesets, discard uncommitted changes (no backup)"
-msgstr ""
-"força a remoção de revisões, descarta mudanças não consolidadas (sem backup)"
-
-msgid ""
-"bundle only changesets with local revision number greater than REV which are"
-" not descendants of REV (DEPRECATED)"
-msgstr ""
-"adiciona ao bundle apenas revisões cujo número local de revisão for maior "
-"que REV e que não forem seus descendentes (OBSOLETA)"
-
-msgid "no backups"
-msgstr "nenhuma cópia de segurança"
-
-msgid "no backups (DEPRECATED)"
-msgstr "sem cópias de segurança (OBSOLETO)"
-
-msgid "ignored  (DEPRECATED)"
-msgstr "ignorado (OBSOLETO)"
-
-msgid "do not modify working copy during strip"
-msgstr "não modifica a cópia de trabalho durante o strip"
-
-msgid "remove revs only reachable from given bookmark"
-msgstr "remove revisões alcançáveis apenas pelo marcador dado"
-
-msgid "hg strip [-k] [-f] [-n] [-B bookmark] [-r] REV..."
-msgstr "hg strip [-k] [-f] [-n] [-B marcador] [-r] REV..."
-
-msgid "strip changesets and all their descendants from the repository"
-msgstr "remove do repositório revisões e todos os seus descendentes"
-
-msgid ""
-"    The strip command removes the specified changesets and all their\n"
-"    descendants. If the working directory has uncommitted changes, the\n"
-"    operation is aborted unless the --force flag is supplied, in which\n"
-"    case changes will be discarded."
-msgstr ""
-"    O comando strip remove as revisões pedidas e todos os seus\n"
-"    descendentes. Se o diretório de trabalho tiver mudanças\n"
-"    pendentes, essa operação será abortada, a não ser que seja\n"
-"    usada a opção --force; nesse caso, as mudanças serão\n"
-"    descartadas."
-
-msgid ""
-"    If a parent of the working directory is stripped, then the working\n"
-"    directory will automatically be updated to the most recent\n"
-"    available ancestor of the stripped parent after the operation\n"
-"    completes."
-msgstr ""
-"    Se o pai do diretório de trabalho for removido, após o término\n"
-"    da operação o diretório de trabalho será automaticamente\n"
-"    atualizado para o ancestral disponível mais recente do pai\n"
-"    removido."
-
-msgid ""
-"    Any stripped changesets are stored in ``.hg/strip-backup`` as a\n"
-"    bundle (see :hg:`help bundle` and :hg:`help unbundle`). They can\n"
-"    be restored by running :hg:`unbundle .hg/strip-backup/BUNDLE`,\n"
-"    where BUNDLE is the bundle file created by the strip. Note that\n"
-"    the local revision numbers will in general be different after the\n"
-"    restore."
-msgstr ""
-"    Qualquer revisão removida será armazenada em ``.hg/strip-backup``\n"
-"    em um arquivo bundle (veja :hg:`help bundle` e :hg:`help bundle`).\n"
-"    Elas podem ser restauradas com o comando\n"
-"    :hg:`unbundle .hg/strip-backup/BUNDLE`, onde BUNDLE é o arquivo\n"
-"    bundle criado pelo comando strip. Note que os números locais das\n"
-"    revisões serão em geral diferentes após a restauração."
-
-msgid ""
-"    Use the --no-backup option to discard the backup bundle once the\n"
-"    operation completes."
-msgstr ""
-"    Use a opção --no-backup para descartar o bundle de backup assim\n"
-"    que a operação terminar."
-
-msgid ""
-"    Strip is not a history-rewriting operation and can be used on\n"
-"    changesets in the public phase. But if the stripped changesets have\n"
-"    been pushed to a remote repository you will likely pull them again."
-msgstr ""
-"    A operação strip não reescreve o histórico, e pode ser usada em\n"
-"    revisões na fase pública. Mas se revisões removidas por strip\n"
-"    tiverem sido enviadas para um repositório remoto, um comando pull\n"
-"    subsequente poderá trazê-las de volta."
-
-#, python-format
-msgid "bookmark '%s' not found"
-msgstr "marcador '%s' não encontrado"
-
-#, python-format
-msgid "bookmark '%s' deleted\n"
-msgstr "marcador '%s' apagado\n"
-
-msgid "empty revision set"
-msgstr "conjunto vazio de revisões"
-
 msgid "disable all guards"
 msgstr "desabilita todas as guardas"
 
@@ -8505,6 +8420,17 @@
 msgid "tool option will be ignored\n"
 msgstr "a opção tool será ignorada\n"
 
+msgid "rebase aborted (no revision is removed, only broken state is cleared)\n"
+msgstr ""
+"rebase abortado (nenhuma revisão foi removida, apenas o estado quebrado foi "
+"limpo)\n"
+
+msgid "cannot continue inconsistent rebase"
+msgstr "não é possível continuar um rebaseamento inconsistente"
+
+msgid "use \"hg rebase --abort\" to clear borken state"
+msgstr "use \"hg rebase --abort\" para limpar o estado quebrado"
+
 msgid "cannot specify both a source and a base"
 msgstr "não se pode especificar ao mesmo tempo uma origem e uma base"
 
@@ -8553,6 +8479,9 @@
 msgid "rebase merging completed\n"
 msgstr "mesclagem de rebaseamento completada\n"
 
+msgid "update back to initial working directory parent\n"
+msgstr "atualizando de volta para o pai do diretório de trabalho original\n"
+
 msgid "rebase completed\n"
 msgstr "rebaseamento completado\n"
 
@@ -8560,8 +8489,10 @@
 msgid "%d revisions have been skipped\n"
 msgstr "%d revisões foram omitidas\n"
 
-msgid "unable to collapse, there is more than one external parent"
-msgstr "incapaz de colapsar, há mais de um pai externo"
+#, python-format
+msgid ""
+"unable to collapse on top of %s, there is more than one external parent: %s"
+msgstr "incapaz de colapsar sobre %s, há mais de um pai externo: %s"
 
 #, python-format
 msgid "cannot use revision %d as base, result would have 3 parents"
@@ -8603,6 +8534,10 @@
 msgstr "--tool só pode ser usada em conjunto com --rebase"
 
 #. i18n: column positioning for "hg summary"
+msgid "rebase: (use \"hg rebase --abort\" to clear broken state)\n"
+msgstr "rebase: (use \"hg rebase --abort\" para limpar o estado quebrado)\n"
+
+#. i18n: column positioning for "hg summary"
 #, python-format
 msgid "rebase: %s, %s (rebase --continue)\n"
 msgstr "rebase:       %s, %s (rebase --continue)\n"
@@ -9044,6 +8979,412 @@
 msgid "[-U] SOURCE [DEST]"
 msgstr "[-U] ORIGEM [DEST]"
 
+msgid "save and restore changes to the working directory"
+msgstr "salva e restaura mudanças do diretório de trabalho"
+
+msgid ""
+"The \"hg shelve\" command saves changes made to the working directory\n"
+"and reverts those changes, resetting the working directory to a clean\n"
+"state."
+msgstr ""
+"O comando \"hg shelve\" salva (\"engaveta\") mudanças locais em uma\n"
+"área separada, para em seguida reverter essas mudanças, limpando o\n"
+"diretório de trabalho."
+
+msgid ""
+"Later on, the \"hg unshelve\" command restores the changes saved by \"hg\n"
+"shelve\". Changes can be restored even after updating to a different\n"
+"parent, in which case Mercurial's merge machinery will resolve any\n"
+"conflicts if necessary."
+msgstr ""
+"Posteriormente, o comando \"hg unshelve\" restaura as mudanças gravadas\n"
+"por \"hg shelve\". Mudanças podem ser restauradas mesmo sobre um pai\n"
+"diferente; nesse caso, se houver conflitos, o Mercurial usará o sistema\n"
+"de mesclagem para resolvê-los."
+
+msgid ""
+"You can have more than one shelved change outstanding at a time; each\n"
+"shelved change has a distinct name. For details, see the help for \"hg\n"
+"shelve\".\n"
+msgstr ""
+"Você pode ter mais de uma mudança \"engavetada\" ao mesmo tempo:\n"
+"cada mudança engavetada possui um nome distinto. Para mais detalhes,\n"
+"veja o texto de ajuda de \"hg shelve\".\n"
+
+#, python-format
+msgid "shelved change '%s' not found"
+msgstr "mudança engavetada '%s' não encontrada"
+
+msgid ""
+"this version of shelve is incompatible with the version used in this repo"
+msgstr ""
+"esta versão da extensão shelve é incompatível com a versão usada neste "
+"repositório"
+
+msgid "cannot shelve while merging"
+msgstr "não é possível engavetar uma mudança durante uma mesclagem"
+
+#, python-format
+msgid "a shelved change named '%s' already exists"
+msgstr "já existe uma mudança engavetada com o nome '%s'"
+
+#, python-format
+msgid "too many shelved changes named '%s'"
+msgstr "excesso de mudanças engavetadas de nome '%s'"
+
+msgid "shelved change names may not contain slashes"
+msgstr "nomes de mudanças engavetadas não podem conter '/'"
+
+msgid "shelved change names may not start with '.'"
+msgstr "nomes de mudanças engavetadas não podem começar com '.'"
+
+#, python-format
+msgid "nothing changed (%d missing files, see 'hg status')\n"
+msgstr "nada mudou (%d arquivos faltando, veja 'hg status')\n"
+
+msgid "nothing changed\n"
+msgstr "nada mudou\n"
+
+#, python-format
+msgid "shelved as %s\n"
+msgstr "engavetada como %s\n"
+
+msgid "no shelved changes specified!"
+msgstr "nenhuma mudança engavetada foi especificada!"
+
+msgid "working directory parents do not match unshelve state"
+msgstr ""
+"os pais do diretório de trabalho não combinam com o estado do unshelve"
+
+#, python-format
+msgid "unshelve of '%s' aborted\n"
+msgstr "unshelve de '%s' abortado\n"
+
+msgid "unresolved conflicts, can't continue"
+msgstr "conflitos não resolvidos, não é possível continuar"
+
+msgid "see 'hg resolve', then 'hg unshelve --continue'"
+msgstr "veja 'hg resolve', e em seguida 'hg unshelve --continue'"
+
+#, python-format
+msgid "unshelve of '%s' complete\n"
+msgstr "unshelve de '%s' completado\n"
+
+msgid "abort an incomplete unshelve operation"
+msgstr "aborta uma operação unshelve incompleta"
+
+msgid "continue an incomplete unshelve operation"
+msgstr "continua uma operação unshelve incompleta"
+
+msgid "keep shelve after unshelving"
+msgstr "mantém a mudança na gaveta após o unshelve"
+
+msgid "hg unshelve [SHELVED]"
+msgstr "hg unshelve [MUDANÇA]"
+
+msgid "restore a shelved change to the working directory"
+msgstr "restaura uma mudança \"engavetada\" para o diretório de trabalho"
+
+msgid ""
+"    This command accepts an optional name of a shelved change to\n"
+"    restore. If none is given, the most recent shelved change is used."
+msgstr ""
+"    Este comando opcionalmente aceita o nome de uma mudança engavetada a\n"
+"    ser restaurada. Se o nome não for fornecido, a mudança mais recente\n"
+"    será usada."
+
+msgid ""
+"    If a shelved change is applied successfully, the bundle that\n"
+"    contains the shelved changes is deleted afterwards."
+msgstr ""
+"    Se uma mudança engavetada for restaurada com sucesso, o arquivo\n"
+"    bundle que contém essa mudança será removido em seguida."
+
+msgid ""
+"    Since you can restore a shelved change on top of an arbitrary\n"
+"    commit, it is possible that unshelving will result in a conflict\n"
+"    between your changes and the commits you are unshelving onto. If\n"
+"    this occurs, you must resolve the conflict, then use\n"
+"    ``--continue`` to complete the unshelve operation. (The bundle\n"
+"    will not be deleted until you successfully complete the unshelve.)"
+msgstr ""
+"    Por ser possível restaurar uma mudança engavetada sobre uma\n"
+"    revisão qualquer, uma operação unshelve pode resultar em um\n"
+"    conflito entre as mudanças restauradas e as revisões de\n"
+"    destino. Se isso ocorrer, você deve resolver os conflitos,\n"
+"    e em seguida usar ``--continue`` para completar a operação\n"
+"    unshelve. (O bundle não será removido até que você complete\n"
+"    a operação unshelve com sucesso.)"
+
+msgid ""
+"    (Alternatively, you can use ``--abort`` to abandon an unshelve\n"
+"    that causes a conflict. This reverts the unshelved changes, and\n"
+"    does not delete the bundle.)\n"
+"    "
+msgstr ""
+"    (Alternativamente, vocẽ pode usar ``--abort`` para abandonar\n"
+"    uma operação unshelve que causou um conflito. Isto reverte\n"
+"    as mudanças engavetadas sem remover o bundle.)\n"
+"    "
+
+msgid "cannot combine abort/continue with naming a shelved change"
+msgstr ""
+"não é possível combinar abort/continue com um nome de mudança engavetada"
+
+msgid "no unshelve operation underway"
+msgstr "nenhuma operação unshelve em andamento"
+
+msgid "can only unshelve one change at a time"
+msgstr "só é possível realizar unshelve de uma mudança de cada vez"
+
+msgid "no shelved changes to apply!"
+msgstr "nenhuma mudança engavetada para ser aplicada!"
+
+#, python-format
+msgid "unshelving change '%s'\n"
+msgstr "executando unshelve da mudança '%s'\n"
+
+msgid "unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')"
+msgstr ""
+"conflitos não resolvidos (veja hg 'resolve', e em seguida 'hg unshelve "
+"--continue')"
+
+msgid "mark new/missing files as added/removed before shelving"
+msgstr ""
+"marca arquivos novos/ausentes como adicionados/removidos antes da operação "
+"shelve"
+
+msgid "delete all shelved changes"
+msgstr "remove todas as mudanças engavetadas"
+
+msgid "shelve with the specified commit date"
+msgstr "grava na shelve com a data de consolidação especificada"
+
+msgid "delete the named shelved change(s)"
+msgstr "remove da shelve as mudanças pedidas"
+
+msgid "list current shelves"
+msgstr "lista mudanças na shelve"
+
+msgid "use text as shelve message"
+msgstr "usa o texto como mensagem da shelve"
+
+msgid "use the given name for the shelved commit"
+msgstr "usa o nome fornecido para a revisão da shelve"
+
+msgid "show patch"
+msgstr "mostra o patch"
+
+msgid "output diffstat-style summary of changes"
+msgstr "imprime sumário de mudanças no estilo diffstat"
+
+msgid "hg shelve"
+msgstr "hg shelve"
+
+msgid "save and set aside changes from the working directory"
+msgstr "salva e separa mudanças do diretório de trabalho"
+
+msgid ""
+"    Shelving takes files that \"hg status\" reports as not clean, saves\n"
+"    the modifications to a bundle (a shelved change), and reverts the\n"
+"    files so that their state in the working directory becomes clean."
+msgstr ""
+"    A operação shelve \"engaveta\" as modificações dos arquivos\n"
+"    informados por \"hg status\" em um arquivo bundle, para em\n"
+"    seguida reverter tais mudanças, deixando o diretório de\n"
+"    trabalho limpo."
+
+msgid ""
+"    To restore these changes to the working directory, using \"hg\n"
+"    unshelve\"; this will work even if you switch to a different\n"
+"    commit."
+msgstr ""
+"    Para restaurar essas mudanças para o diretório de trabalho,\n"
+"    use \"hg unshelve\"; isto é suportado mesmo se o pai do\n"
+"    diretório de trabalho não for mais a revisão original."
+
+msgid ""
+"    When no files are specified, \"hg shelve\" saves all not-clean\n"
+"    files. If specific files or directories are named, only changes to\n"
+"    those files are shelved."
+msgstr ""
+"    Se arquivos não forem especificados, \"hg shelve\" engaveta\n"
+"    todos os arquivos não limpos. Se arquivos ou diretórios forem\n"
+"    especificados, apenas as mudanças em tais arquivos serão\n"
+"    engavetadas."
+
+msgid ""
+"    Each shelved change has a name that makes it easier to find later.\n"
+"    The name of a shelved change defaults to being based on the active\n"
+"    bookmark, or if there is no active bookmark, the current named\n"
+"    branch.  To specify a different name, use ``--name``."
+msgstr ""
+"    Cada mudança engavetada possui um nome, que é por padrão baseado\n"
+"    no marcador ativo ou (se não houver marcador ativo) no nome do\n"
+"    ramo atual. Para especificar um nome diferente, use ``--name``."
+
+msgid ""
+"    To see a list of existing shelved changes, use the ``--list``\n"
+"    option. For each shelved change, this will print its name, age,\n"
+"    and description; use ``--patch`` or ``--stat`` for more details."
+msgstr ""
+"    Para exibir uma lista das mudanças engavetadas, use a opção\n"
+"    ``--list``. Para cada mudança engavetada, isto irá imprimir\n"
+"    seu nome, idade e descrição; use ``--patch`` ou ``--stat``\n"
+"    para mais detalhes."
+
+msgid ""
+"    To delete specific shelved changes, use ``--delete``. To delete\n"
+"    all shelved changes, use ``--cleanup``.\n"
+"    "
+msgstr ""
+"    Para remover mudanças engavetadas específicas, use ``--delete``.\n"
+"    Para remover todas as mudanças engavetadas, use ``--cleanup``.\n"
+"    "
+
+#, python-format
+msgid "options '--%s' and '--%s' may not be used together"
+msgstr "as opções '--%s' e '--%s' não podem ser usadas ao mesmo tempo"
+
+msgid "cannot specify names when using '--cleanup'"
+msgstr "não se pode especificar nomes ao usar --cleanup"
+
+#, python-format
+msgid "option '--%s' may not be used when shelving a change"
+msgstr "a opção '--%s' não pode ser usada ao engavetar uma mudança"
+
+msgid "unshelve already in progress"
+msgstr "unshelve já está em andamento"
+
+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"
+msgstr "remove do histórico revisões e seus descendentes"
+
+msgid ""
+"This extension allows you to strip changesets and all their descendants from the\n"
+"repository. See the command help for details.\n"
+msgstr ""
+"Esta extensão possibilita a remoção de revisões e todos os seus\n"
+"descendentes do histórico do repositório. Veja a ajuda do\n"
+"comando para mais detalhes.\n"
+
+#, python-format
+msgid "uncommitted changes in subrepository %s"
+msgstr "mudanças não consolidadas no sub-repositório %s"
+
+msgid "local changes found"
+msgstr "mudanças locais encontradas"
+
+msgid "local changed subrepos found"
+msgstr "encontrados sub-repositórios locais modificados"
+
+msgid ""
+"strip specified revision (optional, can specify revisions without this "
+"option)"
+msgstr ""
+"remove a revisão especificada (opcional, não é necessário especificar "
+"explicitamente esta opção para remover revisões)"
+
+msgid "force removal of changesets, discard uncommitted changes (no backup)"
+msgstr ""
+"força a remoção de revisões, descarta mudanças não consolidadas (sem backup)"
+
+msgid ""
+"bundle only changesets with local revision number greater than REV which are"
+" not descendants of REV (DEPRECATED)"
+msgstr ""
+"adiciona ao bundle apenas revisões cujo número local de revisão for maior "
+"que REV e que não forem seus descendentes (OBSOLETA)"
+
+msgid "no backups"
+msgstr "nenhuma cópia de segurança"
+
+msgid "no backups (DEPRECATED)"
+msgstr "sem cópias de segurança (OBSOLETO)"
+
+msgid "ignored  (DEPRECATED)"
+msgstr "ignorado (OBSOLETO)"
+
+msgid "do not modify working copy during strip"
+msgstr "não modifica a cópia de trabalho durante o strip"
+
+msgid "remove revs only reachable from given bookmark"
+msgstr "remove revisões alcançáveis apenas pelo marcador dado"
+
+msgid "hg strip [-k] [-f] [-n] [-B bookmark] [-r] REV..."
+msgstr "hg strip [-k] [-f] [-n] [-B marcador] [-r] REV..."
+
+msgid "strip changesets and all their descendants from the repository"
+msgstr "remove do repositório revisões e todos os seus descendentes"
+
+msgid ""
+"    The strip command removes the specified changesets and all their\n"
+"    descendants. If the working directory has uncommitted changes, the\n"
+"    operation is aborted unless the --force flag is supplied, in which\n"
+"    case changes will be discarded."
+msgstr ""
+"    O comando strip remove as revisões pedidas e todos os seus\n"
+"    descendentes. Se o diretório de trabalho tiver mudanças\n"
+"    pendentes, essa operação será abortada, a não ser que seja\n"
+"    usada a opção --force; nesse caso, as mudanças serão\n"
+"    descartadas."
+
+msgid ""
+"    If a parent of the working directory is stripped, then the working\n"
+"    directory will automatically be updated to the most recent\n"
+"    available ancestor of the stripped parent after the operation\n"
+"    completes."
+msgstr ""
+"    Se o pai do diretório de trabalho for removido, após o término\n"
+"    da operação o diretório de trabalho será automaticamente\n"
+"    atualizado para o ancestral disponível mais recente do pai\n"
+"    removido."
+
+msgid ""
+"    Any stripped changesets are stored in ``.hg/strip-backup`` as a\n"
+"    bundle (see :hg:`help bundle` and :hg:`help unbundle`). They can\n"
+"    be restored by running :hg:`unbundle .hg/strip-backup/BUNDLE`,\n"
+"    where BUNDLE is the bundle file created by the strip. Note that\n"
+"    the local revision numbers will in general be different after the\n"
+"    restore."
+msgstr ""
+"    Qualquer revisão removida será armazenada em ``.hg/strip-backup``\n"
+"    em um arquivo bundle (veja :hg:`help bundle` e :hg:`help bundle`).\n"
+"    Elas podem ser restauradas com o comando\n"
+"    :hg:`unbundle .hg/strip-backup/BUNDLE`, onde BUNDLE é o arquivo\n"
+"    bundle criado pelo comando strip. Note que os números locais das\n"
+"    revisões serão em geral diferentes após a restauração."
+
+msgid ""
+"    Use the --no-backup option to discard the backup bundle once the\n"
+"    operation completes."
+msgstr ""
+"    Use a opção --no-backup para descartar o bundle de backup assim\n"
+"    que a operação terminar."
+
+msgid ""
+"    Strip is not a history-rewriting operation and can be used on\n"
+"    changesets in the public phase. But if the stripped changesets have\n"
+"    been pushed to a remote repository you will likely pull them again."
+msgstr ""
+"    A operação strip não reescreve o histórico, e pode ser usada em\n"
+"    revisões na fase pública. Mas se revisões removidas por strip\n"
+"    tiverem sido enviadas para um repositório remoto, um comando pull\n"
+"    subsequente poderá trazê-las de volta."
+
+#, python-format
+msgid "bookmark '%s' not found"
+msgstr "marcador '%s' não encontrado"
+
+#, python-format
+msgid "bookmark '%s' deleted\n"
+msgstr "marcador '%s' apagado\n"
+
+msgid "empty revision set"
+msgstr "conjunto vazio de revisões"
+
 msgid "command to transplant changesets from another branch"
 msgstr "comando para transplantar revisões de um outro ramo"
 
@@ -9220,7 +9561,7 @@
 "    --source/-s specifies another repository to use for selecting changesets,\n"
 "    just as if it temporarily had been pulled.\n"
 "    If --branch/-b is specified, these revisions will be used as\n"
-"    heads when deciding which changsets to transplant, just as if only\n"
+"    heads when deciding which changesets to transplant, just as if only\n"
 "    these revisions had been pulled.\n"
 "    If --all/-a is specified, all the revisions up to the heads specified\n"
 "    with --branch will be transplanted."
@@ -10103,15 +10444,9 @@
 msgid "display with template"
 msgstr "exibe usando modelo"
 
-msgid "show patch"
-msgstr "mostra o patch"
-
 msgid "do not show merges"
 msgstr "não mostra mesclagens"
 
-msgid "output diffstat-style summary of changes"
-msgstr "imprime sumário de mudanças no estilo diffstat"
-
 msgid "show the revision DAG"
 msgstr "mostra o grafo de revisões"
 
@@ -10614,13 +10949,14 @@
 "          hg bisect --skip 23"
 
 msgid ""
-"      - skip all revisions that do not touch directories ``foo`` or ``bar``"
+"      - skip all revisions that do not touch directories ``foo`` or "
+"``bar``::"
 msgstr ""
 "      - omite todas as revisões que não mexerem nos diretórios ``foo`` ou "
-"``bar``"
-
-msgid "          hg bisect --skip '!( file(\"path:foo\") & file(\"path:bar\") )'"
-msgstr "          hg bisect --skip '!( file(\"path:foo\") & file(\"path:bar\") )'"
+"``bar``::"
+
+msgid "          hg bisect --skip \"!( file('path:foo') & file('path:bar') )\""
+msgstr "          hg bisect --skip \"!( file('path:foo') & file('path:bar') )\""
 
 msgid "      - forget the current bisection::"
 msgstr "      - esquece a bissecção atual::"
@@ -10639,12 +10975,12 @@
 "          hg bisect --reset\n"
 "          hg bisect --bad 34\n"
 "          hg bisect --good 12\n"
-"          hg bisect --command 'make && make tests'"
+"          hg bisect --command \"make && make tests\""
 msgstr ""
 "          hg bisect --reset\n"
 "          hg bisect --bad 34\n"
 "          hg bisect --good 12\n"
-"          hg bisect --command 'make && make tests'"
+"          hg bisect --command \"make && make tests\""
 
 msgid ""
 "      - see all changesets whose states are already known in the current\n"
@@ -11434,13 +11770,6 @@
 msgid "cannot amend changeset with children"
 msgstr "não é possível emendar revisões com filhas"
 
-msgid "nothing changed\n"
-msgstr "nada mudou\n"
-
-#, python-format
-msgid "nothing changed (%d missing files, see 'hg status')\n"
-msgstr "nada mudou (%d arquivos faltando, veja 'hg status')\n"
-
 msgid "record a copy that has already occurred"
 msgstr "grava uma cópia que já ocorreu"
 
@@ -12483,12 +12812,12 @@
 msgstr "omitindo revisão ancestral %s\n"
 
 #, python-format
-msgid "skipping already grafted revision %s\n"
-msgstr "omitindo revisão %s já enxertada\n"
-
-#, python-format
-msgid "skipping already grafted revision %s (same origin %d)\n"
-msgstr "omitindo revisão %s já enxertada (mesma origem %d)\n"
+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 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"
@@ -12498,9 +12827,6 @@
 msgid "grafting revision %s\n"
 msgstr "enxertando revisão %s\n"
 
-msgid "unresolved conflicts, can't continue"
-msgstr "conflitos não resolvidos, não é possível continuar"
-
 msgid "use hg resolve and hg graft --continue"
 msgstr "use hg resolve e hg graft --continue"
 
@@ -13572,6 +13898,10 @@
 msgid "not updating: %s\n"
 msgstr "atualização não realizada: %s\n"
 
+#, python-format
+msgid "(%s)\n"
+msgstr "(%s)\n"
+
 msgid "(run 'hg heads' to see heads, 'hg merge' to merge)\n"
 msgstr "(execute 'hg heads' para ver cabeças, 'hg merge' para mesclar)\n"
 
@@ -13692,12 +14022,15 @@
 "    forçar outras mudanças."
 
 msgid ""
-"    Use -f/--force to override the default behavior and push all\n"
-"    changesets on all branches."
-msgstr ""
-"    Você pode usar a opção -f/--force para mudar o comportamento padrão,\n"
-"    fazendo com que as revisões sejam enviadas ao repositório remoto\n"
-"    mesmo que acrescentem novas cabeças ou ramos."
+"    .. note::\n"
+"      Extra care should be taken with the -f/--force option,\n"
+"      which will push all new heads on all branches, an action which will\n"
+"      almost always cause confusion for collaborators."
+msgstr ""
+"    .. note::\n"
+"      Cuidado extra deve ser tomado ao usar a opção -f/--force,\n"
+"      que enviará todas as novas cabeças em todos os ramos, o que\n"
+"      quase sempre confunde os outros colaboradores."
 
 msgid ""
 "    If -r/--rev is used, the specified revision and all its ancestors\n"
@@ -13823,23 +14156,23 @@
 "      (remove do diretório de trabalho):"
 
 msgid ""
-"      ======= == == == ==\n"
-"              A  C  M  !\n"
-"      ======= == == == ==\n"
-"      none    W  RD W  R\n"
-"      -f      R  RD RD R\n"
-"      -A      W  W  W  R\n"
-"      -Af     R  R  R  R\n"
-"      ======= == == == =="
-msgstr ""
-"      ======= == == == ==\n"
-"              A  C  M  !\n"
-"      ======= == == == ==\n"
-"      nenhum  W  RD W  R\n"
-"      -f      R  RD RD R\n"
-"      -A      W  W  W  R\n"
-"      -Af     R  R  R  R\n"
-"      ======= == == == =="
+"      ========= == == == ==\n"
+"      opt/state A  C  M  !\n"
+"      ========= == == == ==\n"
+"      none      W  RD W  R\n"
+"      -f        R  RD RD R\n"
+"      -A        W  W  W  R\n"
+"      -Af       R  R  R  R\n"
+"      ========= == == == =="
+msgstr ""
+"      ========= == == == ==\n"
+"      op/estado A  C  M  !\n"
+"      ========= == == == ==\n"
+"      nenhum    W  RD W  R\n"
+"      -f        R  RD RD R\n"
+"      -A        W  W  W  R\n"
+"      -Af       R  R  R  R\n"
+"      ========= == == == =="
 
 msgid ""
 "      Note that remove never deletes files in Added [A] state from the\n"
@@ -14948,6 +15281,9 @@
 msgid "cannot include %s (%s)"
 msgstr "não é possível incluir %s (%s)"
 
+msgid "not found in manifest"
+msgstr "não encontrado no manifesto"
+
 #, python-format
 msgid "unknown revision '%s'"
 msgstr "revisão desconhecida '%s'"
@@ -14956,9 +15292,6 @@
 msgid "working directory has unknown parent '%s'!"
 msgstr "diretório de trabalho tem pai desconhecido '%s'!"
 
-msgid "not found in manifest"
-msgstr "não encontrado no manifesto"
-
 #, python-format
 msgid "no such file in rev %s"
 msgstr "não há tal arquivo na revisão %s"
@@ -15064,6 +15397,15 @@
 msgstr "use 'hg push --new-branch' para criar novos ramos remotos"
 
 #, python-format
+msgid "push creates multiple headed new branch '%s'"
+msgstr "push cria um ramo '%s' de múltiplas cabeças"
+
+msgid "merge or see \"hg help push\" for details about pushing new heads"
+msgstr ""
+"use \"hg merge\" ou veja \"hg help push\" para detalhes sobre como enviar "
+"novas cabeças"
+
+#, python-format
 msgid "push creates new remote head %s on branch '%s'!"
 msgstr "push cria uma nova cabeça remota %s no ramo '%s'!"
 
@@ -15071,11 +15413,10 @@
 msgid "push creates new remote head %s!"
 msgstr "push cria uma nova cabeça remota %s!"
 
-msgid "you should pull and merge or use push -f to force"
-msgstr "você deve fazer o pull e mesclar ou usar push -f para forçar"
-
-msgid "did you forget to merge? use push -f to force"
-msgstr "você esqueceu de mesclar? Use push -f para forçar"
+msgid "pull and merge or see \"hg help push\" for details about pushing new heads"
+msgstr ""
+"use \"hg pull\" e \"hg merge\" ou veja \"hg help push\" para detalhes sobre "
+"como enviar novas cabeças"
 
 #, python-format
 msgid "new remote heads on branch '%s'\n"
@@ -15093,10 +15434,6 @@
 msgstr "abortado: %s\n"
 
 #, python-format
-msgid "(%s)\n"
-msgstr "(%s)\n"
-
-#, python-format
 msgid "hg: parse error at %s: %s\n"
 msgstr "hg: erro de análise da entrada em %s: %s\n"
 
@@ -15110,6 +15447,10 @@
 "ajuda\n"
 
 #, python-format
+msgid "%s debugger specified but its module was not found\n"
+msgstr "depurador %s especificado, mas seu módulo não foi encontrado\n"
+
+#, python-format
 msgid ""
 "hg: command '%s' is ambiguous:\n"
 "    %s\n"
@@ -22143,8 +22484,8 @@
 " - sincroniza novamente revisões de rascunho relativas a um repositório "
 "remoto::"
 
-msgid "     hg phase -fd 'outgoing(URL)'"
-msgstr "     hg phase -fd 'outgoing(URL)'"
+msgid "     hg phase -fd \"outgoing(URL)\""
+msgstr "     hg phase -fd \"outgoing(URL)\""
 
 msgid ""
 "See :hg:`help phase` for more information on manually manipulating phases.\n"
@@ -23234,6 +23575,15 @@
 msgid "cannot start server at '%s:%d': %s"
 msgstr "não é possível iniciar o servidor em '%s:%d': %s"
 
+msgid "exact revision search"
+msgstr "busca exata por revisões"
+
+msgid "literal keyword search"
+msgstr "busca por palavra chave literal"
+
+msgid "revset expression search"
+msgstr "busca por expressão revset"
+
 #, python-format
 msgid "(binary file %s, hash: %s)"
 msgstr "(arquivo binário %s, hash: %s)"
@@ -23712,7 +24062,7 @@
 "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"
+"use (c) a versão alterada, ou (d) deixe apagada?$$ (&C) alterada $$ (&D) deixe apagada"
 
 #, python-format
 msgid "update failed to remove %s: %s!\n"
@@ -23748,17 +24098,20 @@
 msgstr "use 'hg status' para listar as mudanças"
 
 #, python-format
-msgid "outstanding uncommitted changes in subrepository '%s'"
-msgstr "mudanças não consolidadas pendentes no sub-repositório '%s'"
-
-msgid "crosses branches (merge branches or use --clean to discard changes)"
-msgstr ""
-"atravessa ramos (mescle os ramos ou use --clean para descartar mudanças)"
-
-msgid "crosses branches (merge branches or update --check to force update)"
-msgstr ""
-"atravessa ramos (mescle os ramos ou use update --check para forçar a "
-"atualização)"
+msgid "uncommitted changes in subrepository '%s'"
+msgstr "mudanças não consolidadas no sub-repositório '%s'"
+
+msgid "commit and merge, or update --clean to discard changes"
+msgstr "execute commit e merge, ou update --clean para descartar mudanças"
+
+msgid "commit or update --clean to discard changes"
+msgstr "execute commit, ou update --clean para descartar mudanças"
+
+msgid "not a linear update"
+msgstr "não é uma atualização linear"
+
+msgid "merge or update --check to force update"
+msgstr "execute merge, ou update --check para forçar a atualização"
 
 msgid "Attention:"
 msgstr "Atenção:"
@@ -24000,8 +24353,8 @@
 msgstr "marcação de revisão incompatível %x"
 
 #, python-format
-msgid "integrity check failed on %s:%d"
-msgstr "checagem de integridade falhou em %s:%d"
+msgid "integrity check failed on %s:%s"
+msgstr "checagem de integridade falhou em %s:%s"
 
 #, python-format
 msgid "%s not found in the transaction"
@@ -24011,9 +24364,6 @@
 msgid "attempted to add linkrev -1 to %s"
 msgstr "tentativa de adicionar linkrev -1 a %s"
 
-msgid "consistency error in delta"
-msgstr "erro de consistência no delta"
-
 #, python-format
 msgid "can't use %s here"
 msgstr "não se pode usar %s aqui"
@@ -25180,6 +25530,14 @@
 
 #, python-format
 msgid ""
+" subrepository %s diverged (local revision: %s, remote revision: %s)\n"
+"(M)erge, keep (l)ocal or keep (r)emote?$$ &Merge $$ &Local $$ &Remote"
+msgstr ""
+" o sub-repositório %s divergiu (revisão local: %s, remota: %s)\n"
+"(M)esclar, manter (l)ocal o usar (r)emota?$$ &Mesclar $$ &Local $$ &Remota"
+
+#, python-format
+msgid ""
 " local changed subrepository %s which remote removed\n"
 "use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
 msgstr ""
--- a/mercurial/bdiff.c	Sat Nov 02 11:25:04 2013 +0100
+++ b/mercurial/bdiff.c	Tue Nov 05 13:25:45 2013 -0500
@@ -303,6 +303,8 @@
 	struct hunk l, *h;
 	int an, bn, count, pos = 0;
 
+	l.next = NULL;
+
 	if (!PyArg_ParseTuple(args, "SS:bdiff", &sa, &sb))
 		return NULL;
 
@@ -312,7 +314,6 @@
 	if (!a || !b)
 		goto nomem;
 
-	l.next = NULL;
 	count = diff(a, an, b, bn, &l);
 	if (count < 0)
 		goto nomem;
@@ -344,6 +345,8 @@
 	Py_ssize_t len = 0, la, lb;
 	PyThreadState *_save;
 
+	l.next = NULL;
+
 	if (!PyArg_ParseTuple(args, "s#s#:bdiff", &sa, &la, &sb, &lb))
 		return NULL;
 
@@ -358,7 +361,6 @@
 	if (!al || !bl)
 		goto nomem;
 
-	l.next = NULL;
 	count = diff(al, an, bl, bn, &l);
 	if (count < 0)
 		goto nomem;
--- a/mercurial/bookmarks.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/mercurial/bookmarks.py	Tue Nov 05 13:25:45 2013 -0500
@@ -312,5 +312,5 @@
     elif repo.obsstore:
         return new.node() in obsolete.foreground(repo, [old.node()])
     else:
-        # still an independant clause as it is lazyer (and therefore faster)
+        # still an independent clause as it is lazyer (and therefore faster)
         return old.descendant(new)
--- a/mercurial/cmdutil.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/mercurial/cmdutil.py	Tue Nov 05 13:25:45 2013 -0500
@@ -170,7 +170,7 @@
                          inst.args[0])
 
 def makefileobj(repo, pat, node=None, desc=None, total=None,
-                seqno=None, revwidth=None, mode='wb', modemap={},
+                seqno=None, revwidth=None, mode='wb', modemap=None,
                 pathname=None):
 
     writable = mode not in ('r', 'rb')
@@ -198,9 +198,10 @@
     if util.safehasattr(pat, 'read') and 'r' in mode:
         return pat
     fn = makefilename(repo, pat, node, desc, total, seqno, revwidth, pathname)
-    mode = modemap.get(fn, mode)
-    if mode == 'wb':
-        modemap[fn] = 'ab'
+    if modemap is not None:
+        mode = modemap.get(fn, mode)
+        if mode == 'wb':
+            modemap[fn] = 'ab'
     return open(fn, mode)
 
 def openrevlog(repo, cmd, file_, opts):
--- a/mercurial/commands.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/mercurial/commands.py	Tue Nov 05 13:25:45 2013 -0500
@@ -554,9 +554,9 @@
           hg bisect --skip
           hg bisect --skip 23
 
-      - skip all revisions that do not touch directories ``foo`` or ``bar``
-
-          hg bisect --skip '!( file("path:foo") & file("path:bar") )'
+      - skip all revisions that do not touch directories ``foo`` or ``bar``::
+
+          hg bisect --skip "!( file('path:foo') & file('path:bar') )"
 
       - forget the current bisection::
 
@@ -568,7 +568,7 @@
           hg bisect --reset
           hg bisect --bad 34
           hg bisect --good 12
-          hg bisect --command 'make && make tests'
+          hg bisect --command "make && make tests"
 
       - see all changesets whose states are already known in the current
         bisection::
@@ -4652,7 +4652,7 @@
     only create a new branch without forcing other changes.
 
     .. note::
-      Extra care should be used with the -f/--force option,
+      Extra care should be taken with the -f/--force option,
       which will push all new heads on all branches, an action which will
       almost always cause confusion for collaborators.
 
@@ -4769,14 +4769,14 @@
       (as reported by :hg:`status`). The actions are Warn, Remove
       (from branch) and Delete (from disk):
 
-      ======= == == == ==
-              A  C  M  !
-      ======= == == == ==
-      none    W  RD W  R
-      -f      R  RD RD R
-      -A      W  W  W  R
-      -Af     R  R  R  R
-      ======= == == == ==
+      ========= == == == ==
+      opt/state A  C  M  !
+      ========= == == == ==
+      none      W  RD W  R
+      -f        R  RD RD R
+      -A        W  W  W  R
+      -Af       R  R  R  R
+      ========= == == == ==
 
       Note that remove never deletes files in Added [A] state from the
       working directory, not even if option --force is specified.
--- a/mercurial/context.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/mercurial/context.py	Tue Nov 05 13:25:45 2013 -0500
@@ -197,7 +197,7 @@
 
 class changectx(basectx):
     """A changecontext object makes access to data related to a particular
-    changeset convenient. It represents a read-only context already presnt in
+    changeset convenient. It represents a read-only context already present in
     the repo."""
     def __init__(self, repo, changeid=''):
         """changeid is a revision number, node, or tag"""
--- a/mercurial/help/dates.txt	Sat Nov 02 11:25:04 2013 +0100
+++ b/mercurial/help/dates.txt	Tue Nov 05 13:25:45 2013 -0500
@@ -24,7 +24,7 @@
 
 Lastly, there is Mercurial's internal format:
 
-- ``1165432709 0`` (Wed Dec 6 13:18:29 2006 UTC)
+- ``1165411109 0`` (Wed Dec 6 13:18:29 2006 UTC)
 
 This is the internal representation format for dates. The first number
 is the number of seconds since the epoch (1970-01-01 00:00 UTC). The
--- a/mercurial/help/phases.txt	Sat Nov 02 11:25:04 2013 +0100
+++ b/mercurial/help/phases.txt	Tue Nov 05 13:25:45 2013 -0500
@@ -79,6 +79,6 @@
 
  - resynchronize draft changesets relative to a remote repository::
 
-     hg phase -fd 'outgoing(URL)'
+     hg phase -fd "outgoing(URL)"
 
 See :hg:`help phase` for more information on manually manipulating phases.
--- a/mercurial/hgweb/common.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/mercurial/hgweb/common.py	Tue Nov 05 13:25:45 2013 -0500
@@ -22,7 +22,7 @@
     """Check if username is a member of userlist.
 
     If userlist has a single '*' member, all users are considered members.
-    Can be overriden by extensions to provide more complex authorization
+    Can be overridden by extensions to provide more complex authorization
     schemes.
     """
     return userlist == ['*'] or username in userlist
--- a/mercurial/hgweb/webcommands.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/mercurial/hgweb/webcommands.py	Tue Nov 05 13:25:45 2013 -0500
@@ -161,7 +161,7 @@
             ctx = web.repo[query]
         except (error.RepoError, error.LookupError):
             # query is not an exact revision pointer, need to
-            # decide if it's a revset expession or keywords
+            # decide if it's a revset expression or keywords
             pass
         else:
             return MODE_REVISION, ctx
--- a/mercurial/merge.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/mercurial/merge.py	Tue Nov 05 13:25:45 2013 -0500
@@ -725,7 +725,7 @@
                 repo.hook('update', parent1=xp2, parent2='', error=0)
                 return 0, 0, 0, 0
 
-            if pa not in (p1, p2):  # nolinear
+            if pa not in (p1, p2):  # nonlinear
                 dirty = wc.dirty(missing=True)
                 if dirty or onode is None:
                     # Branching is a bit strange to ensure we do the minimal
--- a/mercurial/obsolete.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/mercurial/obsolete.py	Tue Nov 05 13:25:45 2013 -0500
@@ -373,7 +373,7 @@
 def syncpush(repo, remote):
     """utility function to push obsolete markers to a remote
 
-    Exist mostly to allow overridding for experimentation purpose"""
+    Exist mostly to allow overriding for experimentation purpose"""
     if (_enabled and repo.obsstore and
         'obsolete' in remote.listkeys('namespaces')):
         rslts = []
@@ -393,7 +393,7 @@
     one if necessary. We return the transaction to inform the calling code that
     a new transaction have been created (when applicable).
 
-    Exists mostly to allow overridding for experimentation purpose"""
+    Exists mostly to allow overriding for experimentation purpose"""
     tr = None
     if _enabled:
         repo.ui.debug('fetching remote obsolete markers\n')
@@ -446,10 +446,10 @@
     """return all nodes in the "foreground" of other node
 
     The foreground of a revision is anything reachable using parent -> children
-    or precursor -> sucessor relation. It is very similars to "descendant" but
+    or precursor -> successor relation. It is very similar to "descendant" but
     augmented with obsolescence information.
 
-    Beware that possible obsolescence cycle may result if complexe situation.
+    Beware that possible obsolescence cycle may result if complex situation.
     """
     repo = repo.unfiltered()
     foreground = set(repo.set('%ln::', nodes))
--- a/mercurial/patch.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/mercurial/patch.py	Tue Nov 05 13:25:45 2013 -0500
@@ -1703,7 +1703,7 @@
             tn = getfilectx(f, ctx2).data()
         a, b = f, f
         if opts.git or losedatafn:
-            if f in added:
+            if f in added or (f in modified and to is None):
                 mode = gitmode[ctx2.flags(f)]
                 if f in copy or f in copyto:
                     if opts.git:
@@ -1739,7 +1739,7 @@
                 if not opts.git and not tn:
                     # regular diffs cannot represent new empty file
                     losedatafn(f)
-            elif f in removed:
+            elif f in removed or (f in modified and tn is None):
                 if opts.git:
                     # have we already reported a copy above?
                     if ((f in copy and copy[f] in added
--- a/mercurial/phases.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/mercurial/phases.py	Tue Nov 05 13:25:45 2013 -0500
@@ -267,12 +267,12 @@
         if filtered:
             self.dirty = True
         # filterunknown is called by repo.destroyed, we may have no changes in
-        # root but phaserevs contents is certainly invalide (or at least we
-        # have not proper way to check that. related to issue 3858.
+        # root but phaserevs contents is certainly invalid (or at least we
+        # have not proper way to check that). related to issue 3858.
         #
         # The other caller is __init__ that have no _phaserevs initialized
         # anyway. If this change we should consider adding a dedicated
-        # "destroyed" function to phasecache or a proper cache key mechanisme
+        # "destroyed" function to phasecache or a proper cache key mechanism
         # (see branchmap one)
         self._phaserevs = None
 
--- a/mercurial/templates/static/mercurial.js	Sat Nov 02 11:25:04 2013 +0100
+++ b/mercurial/templates/static/mercurial.js	Tue Nov 05 13:25:45 2013 -0500
@@ -399,7 +399,7 @@
                         graph.canvas.height = addHeight;
 
                         var dataStr = htmlText.match(/^\s*var data = (.*);$/m)[1];
-                        var data = JSON.parse(dataStr)
+                        var data = JSON.parse(dataStr);
                         if (data.length < nextPageVar) {
                             nextPageVar = undefined;
                         }
--- a/mercurial/util.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/mercurial/util.py	Tue Nov 05 13:25:45 2013 -0500
@@ -283,7 +283,7 @@
         return result
 
     def cachevalue(self, obj, value):
-        # __dict__ assigment required to bypass __setattr__ (eg: repoview)
+        # __dict__ assignment required to bypass __setattr__ (eg: repoview)
         obj.__dict__[self.name] = value
 
 def pipefilter(s, cmd):
Binary file tests/bundles/issue4041.hg has changed
--- a/tests/test-commit-amend.t	Sat Nov 02 11:25:04 2013 +0100
+++ b/tests/test-commit-amend.t	Tue Nov 05 13:25:45 2013 -0500
@@ -750,10 +750,8 @@
   $ hg branch closewithamend
   marked working directory as branch closewithamend
   (branches are permanent and global, did you want a bookmark?)
-  $ hg ci -Am..
-  adding cc.orig
-  adding obs.py
-  adding obs.pyc
+  $ hg add obs.py
+  $ hg ci -m..
   $ hg ci --amend --close-branch -m 'closing'
   abort: can only close branch heads
   [255]
--- a/tests/test-generaldelta.t	Sat Nov 02 11:25:04 2013 +0100
+++ b/tests/test-generaldelta.t	Tue Nov 05 13:25:45 2013 -0500
@@ -15,9 +15,10 @@
   >   hg up -q -r 0
   >   hg pull . -q -r $r -R ../gdrepo
   > done
+
   $ cd ..
-  $ regsize=`du -s -b repo/.hg/store/00manifest.i | cut -f 1`
-  $ gdsize=`du -s -b gdrepo/.hg/store/00manifest.i | cut -f 1`
-  $ if [ $regsize -lt $gdsize ]; then
-  >   echo 'generaldelta increased size of a revlog!'
-  > fi
+  >>> import os
+  >>> regsize = os.stat("repo/.hg/store/00manifest.i").st_size
+  >>> gdsize = os.stat("gdrepo/.hg/store/00manifest.i").st_size
+  >>> if regsize < gdsize:
+  ...     print 'generaldata increased size of manifest'
--- a/tests/test-git-export.t	Sat Nov 02 11:25:04 2013 +0100
+++ b/tests/test-git-export.t	Tue Nov 05 13:25:45 2013 -0500
@@ -360,3 +360,23 @@
   +foo
   $ hg ci -m 'add filename with spaces'
 
+Additions should be properly marked even in the middle of a merge
+
+  $ hg up -r -2
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ echo "New File" >> inmerge
+  $ hg add inmerge
+  $ hg ci -m "file in merge"
+  created new head
+  $ hg up 23
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg merge
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  $ hg diff -g
+  diff --git a/inmerge b/inmerge
+  new file mode 100644
+  --- /dev/null
+  +++ b/inmerge
+  @@ -0,0 +1,1 @@
+  +New File
--- a/tests/test-help.t	Sat Nov 02 11:25:04 2013 +0100
+++ b/tests/test-help.t	Tue Nov 05 13:25:45 2013 -0500
@@ -1691,7 +1691,7 @@
   (from branch) and Delete (from disk):
   </p>
   <table>
-  <tr><td></td>
+  <tr><td>opt/state</td>
   <td>A</td>
   <td>C</td>
   <td>M</td>
--- a/tests/test-issue3084.t	Sat Nov 02 11:25:04 2013 +0100
+++ b/tests/test-issue3084.t	Tue Nov 05 13:25:45 2013 -0500
@@ -28,8 +28,8 @@
 Normal file in the working copy, keeping the normal version:
 
   $ echo "n" | hg merge --config ui.interactive=Yes
-  foo has been turned into a largefile
-  use (l)argefile or keep as (n)ormal file? 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  remote turned local normal file foo into a largefile
+  use (l)argefile or keep (n)ormal file? 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   (branch merge, don't forget to commit)
   getting changed largefiles
   0 largefiles updated, 0 removed
@@ -42,8 +42,8 @@
 
   $ hg update -q -C
   $ echo "l" | hg merge --config ui.interactive=Yes
-  foo has been turned into a largefile
-  use (l)argefile or keep as (n)ormal file? 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  remote turned local normal file foo into a largefile
+  use (l)argefile or keep (n)ormal file? 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
   (branch merge, don't forget to commit)
   getting changed largefiles
   1 largefiles updated, 0 removed
@@ -70,8 +70,8 @@
 
   $ hg update -q -C -r 1
   $ echo "n" | hg merge --config ui.interactive=Yes
-  foo has been turned into a normal file
-  keep as (l)argefile or use (n)ormal file? 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  remote turned local largefile foo into a normal file
+  keep (l)argefile or use (n)ormal file? 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
   (branch merge, don't forget to commit)
   getting changed largefiles
   0 largefiles updated, 0 removed
@@ -98,8 +98,8 @@
 
   $ hg update -q -C -r 1
   $ echo "l" | hg merge --config ui.interactive=Yes
-  foo has been turned into a normal file
-  keep as (l)argefile or use (n)ormal file? 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  remote turned local largefile foo into a normal file
+  keep (l)argefile or use (n)ormal file? 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   (branch merge, don't forget to commit)
   getting changed largefiles
   1 largefiles updated, 0 removed
@@ -109,4 +109,249 @@
   $ cat foo
   large
 
+Whatever ... commit something so we can invoke merge when updating
+
+  $ hg commit -m '3: Merge'
+
+Updating from largefile to normal - no reason to prompt
+
+  $ hg up -r 2
+  getting changed largefiles
+  0 largefiles updated, 0 removed
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ cat foo
+  normal
+
+(the update above used to leave the working dir in a very weird state - clean it
+  $ hg up -qr null
+  $ hg up -qr 2
+)
+
+Updating from normal to largefile - no reason to prompt
+
+  $ hg up -r 3
+  getting changed largefiles
+  1 largefiles updated, 0 removed
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ cat foo
+  large
+
   $ cd ..
+
+
+Systematic testing of merges involving largefiles:
+
+Ancestor: normal  Parent: normal=  Parent: large   result: large
+Ancestor: normal  Parent: normal2  Parent: large   result: ?
+Ancestor: large   Parent: large=   Parent: normal  result: normal
+Ancestor: large   Parent: large2   Parent: normal  result: ?
+
+All cases should try merging both ways.
+"=" means same file content.
+
+Prepare test repo:
+
+  $ hg init merges
+  $ cd merges
+  $ touch f1
+  $ hg ci -Aqm "0-root"
+
+ancestor is "normal":
+  $ echo normal > f
+  $ hg ci -Aqm "1-normal-ancestor"
+  $ touch f2
+  $ hg ci -Aqm "2-normal-unchanged"
+  $ hg tag -l "normal="
+  $ echo normal2 > f
+  $ hg ci -m "3-normal2"
+  $ hg tag -l "normal2"
+  $ hg up -qr 1
+  $ hg rm f
+  $ echo large > f
+  $ hg add --large f
+  $ hg ci -qm "4-normal-to-large"
+  $ hg tag -l "large"
+
+  $ hg up -qr null
+
+ancestor is "large":
+  $ echo large > f
+  $ hg add --large f
+  $ hg ci -qm "5-large-ancestor"
+  $ touch f2
+  $ hg ci -Aqm "6-large-unchanged"
+  $ hg tag -l "large="
+  $ echo large2 > f
+  $ hg ci -m "7-large2"
+  $ hg tag -l "large2"
+  $ hg up -qr 5
+  $ hg rm f
+  $ echo normal > f
+  $ hg ci -qAm "8-large-to-normal"
+  $ hg tag -l "normal"
+
+Ancestor: normal  Parent: normal=  Parent: large   result: large
+
+  $ hg up -Cqr normal=
+  $ hg merge -r large
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  1 largefiles updated, 0 removed
+  $ cat f
+  large
+
+swap
+
+  $ hg up -Cqr large
+  $ hg merge -r normal=
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  0 largefiles updated, 0 removed
+  $ cat f
+  large
+
+Ancestor: normal  Parent: normal2  Parent: large   result: ?
+(annoying extra prompt ... but it do not do any serious harm)
+
+  $ hg up -Cqr normal2
+  $ hg merge -r large
+  local changed f which remote deleted
+  use (c)hanged version or (d)elete? c
+  remote turned local normal file f into a largefile
+  use (l)argefile or keep (n)ormal file? l
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  1 largefiles updated, 0 removed
+  $ cat f
+  large
+
+  $ hg up -Cqr normal2
+  $ ( echo c; echo n ) | hg merge -r large --config ui.interactive=Yes
+  local changed f which remote deleted
+  use (c)hanged version or (d)elete? remote turned local normal file f into a largefile
+  use (l)argefile or keep (n)ormal file? 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  0 largefiles updated, 0 removed
+  $ cat f
+  normal2
+
+  $ hg up -Cqr normal2
+  $ echo d | hg merge -r large --config ui.interactive=Yes
+  local changed f which remote deleted
+  use (c)hanged version or (d)elete? 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  1 largefiles updated, 0 removed
+  $ cat f
+  large
+
+swap
+
+  $ hg up -Cqr large
+  $ hg merge -r normal2
+  remote changed f which local deleted
+  use (c)hanged version or leave (d)eleted? c
+  remote turned local largefile f into a normal file
+  keep (l)argefile or use (n)ormal file? l
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  1 largefiles updated, 0 removed
+  $ cat f
+  large
+
+  $ hg up -Cqr large
+  $ ( echo c; echo n ) | hg merge -r normal2 --config ui.interactive=Yes
+  remote changed f which local deleted
+  use (c)hanged version or leave (d)eleted? remote turned local largefile f into a normal file
+  keep (l)argefile or use (n)ormal file? 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  0 largefiles updated, 0 removed
+  $ cat f
+  normal2
+
+  $ hg up -Cqr large
+  $ echo d | hg merge -r normal2 --config ui.interactive=Yes
+  remote changed f which local deleted
+  use (c)hanged version or leave (d)eleted? 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  0 largefiles updated, 0 removed
+  $ cat f
+  large
+
+Ancestor: large   Parent: large=   Parent: normal  result: normal
+
+  $ hg up -Cqr large=
+  $ hg merge -r normal
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  0 largefiles updated, 0 removed
+  $ cat f
+  normal
+
+swap
+
+  $ hg up -Cqr normal
+  $ hg merge -r large=
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  $ cat f
+  normal
+
+Ancestor: large   Parent: large2   Parent: normal  result: ?
+(annoying extra prompt ... but it do not do any serious harm)
+
+  $ hg up -Cqr large2
+  $ hg merge -r normal
+  local changed .hglf/f which remote deleted
+  use (c)hanged version or (d)elete? c
+  remote turned local largefile f into a normal file
+  keep (l)argefile or use (n)ormal file? l
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  1 largefiles updated, 0 removed
+  $ cat f
+  large2
+
+  $ hg up -Cqr large2
+  $ echo d | hg merge -r normal --config ui.interactive=Yes
+  local changed .hglf/f which remote deleted
+  use (c)hanged version or (d)elete? 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  0 largefiles updated, 0 removed
+  $ cat f
+  normal
+
+swap
+
+  $ hg up -Cqr normal
+  $ hg merge -r large2
+  remote changed .hglf/f which local deleted
+  use (c)hanged version or leave (d)eleted? c
+  remote turned local normal file f into a largefile
+  use (l)argefile or keep (n)ormal file? l
+  2 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  1 largefiles updated, 0 removed
+  $ cat f
+  large2
+
+  $ hg up -Cqr normal
+  $ echo d | hg merge -r large2 --config ui.interactive=Yes
+  remote changed .hglf/f which local deleted
+  use (c)hanged version or leave (d)eleted? 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  $ cat f
+  normal
+
+  $ cd ..
--- a/tests/test-largefiles-cache.t	Sat Nov 02 11:25:04 2013 +0100
+++ b/tests/test-largefiles-cache.t	Tue Nov 05 13:25:45 2013 -0500
@@ -47,7 +47,7 @@
 
   $ hg update -r0
   getting changed largefiles
-  large: largefile 7f7097b041ccf68cc5561e9600da4655d21c6d18 not available from file:$TESTTMP/mirror (glob)
+  large: largefile 7f7097b041ccf68cc5561e9600da4655d21c6d18 not available from file://$TESTTMP/mirror (glob)
   0 largefiles updated, 0 removed
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg status
@@ -64,7 +64,7 @@
 
   $ hg update -r0
   getting changed largefiles
-  large: largefile 7f7097b041ccf68cc5561e9600da4655d21c6d18 not available from file:$TESTTMP/mirror (glob)
+  large: largefile 7f7097b041ccf68cc5561e9600da4655d21c6d18 not available from file://$TESTTMP/mirror (glob)
   0 largefiles updated, 0 removed
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg status
--- a/tests/test-largefiles.t	Sat Nov 02 11:25:04 2013 +0100
+++ b/tests/test-largefiles.t	Tue Nov 05 13:25:45 2013 -0500
@@ -1280,7 +1280,7 @@
   $ rm ${USERCACHE}/7838695e10da2bb75ac1156565f40a2595fa2fa0
   $ hg up -r 6
   getting changed largefiles
-  large3: largefile 7838695e10da2bb75ac1156565f40a2595fa2fa0 not available from file:$TESTTMP/d (glob)
+  large3: largefile 7838695e10da2bb75ac1156565f40a2595fa2fa0 not available from file://$TESTTMP/d (glob)
   1 largefiles updated, 2 removed
   4 files updated, 0 files merged, 2 files removed, 0 files unresolved
   $ rm normal3
@@ -1301,7 +1301,7 @@
   ! normal3
   $ hg up -Cr.
   getting changed largefiles
-  large3: largefile 7838695e10da2bb75ac1156565f40a2595fa2fa0 not available from file:$TESTTMP/d (glob)
+  large3: largefile 7838695e10da2bb75ac1156565f40a2595fa2fa0 not available from file://$TESTTMP/d (glob)
   0 largefiles updated, 0 removed
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg st
@@ -1323,7 +1323,7 @@
   4 files updated, 0 files merged, 0 files removed, 0 files unresolved
   (branch merge, don't forget to commit)
   getting changed largefiles
-  large3: largefile 7838695e10da2bb75ac1156565f40a2595fa2fa0 not available from file:$TESTTMP/d (glob)
+  large3: largefile 7838695e10da2bb75ac1156565f40a2595fa2fa0 not available from file://$TESTTMP/d (glob)
   1 largefiles updated, 0 removed
 
   $ hg rollback -q
--- a/tests/test-lfconvert.t	Sat Nov 02 11:25:04 2013 +0100
+++ b/tests/test-lfconvert.t	Tue Nov 05 13:25:45 2013 -0500
@@ -343,7 +343,7 @@
   $ rm largefiles-repo/.hg/largefiles/*
   $ hg lfconvert --to-normal issue3519 normalized3519
   initializing destination normalized3519
-  large: largefile 2e000fa7e85759c7f4c254d4d9c33ef481e459a7 not available from file:$TESTTMP/largefiles-repo (glob)
+  large: largefile 2e000fa7e85759c7f4c254d4d9c33ef481e459a7 not available from file://$TESTTMP/largefiles-repo (glob)
   abort: missing largefile 'large' from revision d4892ec57ce212905215fad1d9018f56b99202ad
   [255]
 
--- a/tests/test-propertycache.py	Sat Nov 02 11:25:04 2013 +0100
+++ b/tests/test-propertycache.py	Tue Nov 05 13:25:45 2013 -0500
@@ -1,6 +1,6 @@
 """test behavior of propertycache and unfiltered propertycache
 
-The repoview overlay is quite complexe. We test the behavior of
+The repoview overlay is quite complex. We test the behavior of
 property cache of both localrepo and repoview to prevent
 regression."""
 
--- a/tests/test-rebase-collapse.t	Sat Nov 02 11:25:04 2013 +0100
+++ b/tests/test-rebase-collapse.t	Tue Nov 05 13:25:45 2013 -0500
@@ -226,7 +226,7 @@
   $ cd b1
 
   $ hg rebase -s 2 --collapse
-  abort: unable to collapse, there is more than one external parent
+  abort: unable to collapse on top of 7, there is more than one external parent: 1, 5
   [255]
 
 Rebase and collapse - E onto H:
--- a/tests/test-rebase-conflicts.t	Sat Nov 02 11:25:04 2013 +0100
+++ b/tests/test-rebase-conflicts.t	Tue Nov 05 13:25:45 2013 -0500
@@ -124,3 +124,184 @@
    * mybook                    5:d67b21408fc0
 
   $ cd ..
+
+Check that the right ancestors is used while rebasing a merge (issue4041)
+
+  $ hg clone "$TESTDIR/bundles/issue4041.hg" issue4041
+  requesting all changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 11 changesets with 8 changes to 3 files (+1 heads)
+  updating to branch default
+  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ cd issue4041
+  $ hg phase --draft --force 9
+  $ hg log -G
+  o    changeset:   10:2f2496ddf49d
+  |\   branch:      f1
+  | |  tag:         tip
+  | |  parent:      7:4c9fbe56a16f
+  | |  parent:      9:e31216eec445
+  | |  user:        szhang
+  | |  date:        Thu Sep 05 12:59:39 2013 -0400
+  | |  summary:     merge
+  | |
+  | o  changeset:   9:e31216eec445
+  | |  branch:      f1
+  | |  user:        szhang
+  | |  date:        Thu Sep 05 12:59:10 2013 -0400
+  | |  summary:     more changes to f1
+  | |
+  | o    changeset:   8:8e4e2c1a07ae
+  | |\   branch:      f1
+  | | |  parent:      2:4bc80088dc6b
+  | | |  parent:      6:400110238667
+  | | |  user:        szhang
+  | | |  date:        Thu Sep 05 12:57:59 2013 -0400
+  | | |  summary:     bad merge
+  | | |
+  o | |  changeset:   7:4c9fbe56a16f
+  |/ /   branch:      f1
+  | |    parent:      2:4bc80088dc6b
+  | |    user:        szhang
+  | |    date:        Thu Sep 05 12:54:00 2013 -0400
+  | |    summary:     changed f1
+  | |
+  | o  changeset:   6:400110238667
+  | |  branch:      f2
+  | |  parent:      4:12e8ec6bb010
+  | |  user:        szhang
+  | |  date:        Tue Sep 03 13:58:02 2013 -0400
+  | |  summary:     changed f2 on f2
+  | |
+  | | @  changeset:   5:d79e2059b5c0
+  | | |  parent:      3:8a951942e016
+  | | |  user:        szhang
+  | | |  date:        Tue Sep 03 13:57:39 2013 -0400
+  | | |  summary:     changed f2 on default
+  | | |
+  | o |  changeset:   4:12e8ec6bb010
+  | |/   branch:      f2
+  | |    user:        szhang
+  | |    date:        Tue Sep 03 13:57:18 2013 -0400
+  | |    summary:     created f2 branch
+  | |
+  | o  changeset:   3:8a951942e016
+  | |  parent:      0:24797d4f68de
+  | |  user:        szhang
+  | |  date:        Tue Sep 03 13:57:11 2013 -0400
+  | |  summary:     added f2.txt
+  | |
+  o |  changeset:   2:4bc80088dc6b
+  | |  branch:      f1
+  | |  user:        szhang
+  | |  date:        Tue Sep 03 13:56:20 2013 -0400
+  | |  summary:     added f1.txt
+  | |
+  o |  changeset:   1:ef53c9e6b608
+  |/   branch:      f1
+  |    user:        szhang
+  |    date:        Tue Sep 03 13:55:26 2013 -0400
+  |    summary:     created f1 branch
+  |
+  o  changeset:   0:24797d4f68de
+     user:        szhang
+     date:        Tue Sep 03 13:55:08 2013 -0400
+     summary:     added default.txt
+  
+  $ hg rebase -s9 -d2 --debug # use debug to really check merge base used
+  rebase onto 2 starting from [<changectx e31216eec445>]
+  rebasing: 9:e31216eec445 5/6 changesets (83.33%)
+   future parents are 2 and -1
+  rebase status stored
+   update to 2:4bc80088dc6b
+  resolving manifests
+   branchmerge: False, force: True, partial: False
+   ancestor: d79e2059b5c0+, local: d79e2059b5c0+, remote: 4bc80088dc6b
+   f2.txt: other deleted -> r
+   f1.txt: remote created -> g
+  removing f2.txt
+  updating: f2.txt 1/2 files (50.00%)
+  getting f1.txt
+  updating: f1.txt 2/2 files (100.00%)
+   merge against 9:e31216eec445
+     detach base 8:8e4e2c1a07ae
+    searching for copies back to rev 3
+  resolving manifests
+   branchmerge: True, force: True, partial: False
+   ancestor: 8e4e2c1a07ae, local: 4bc80088dc6b+, remote: e31216eec445
+   f1.txt: remote is newer -> g
+  getting f1.txt
+  updating: f1.txt 1/1 files (100.00%)
+  f1.txt
+  rebasing: 10:2f2496ddf49d 6/6 changesets (100.00%)
+   future parents are 11 and 7
+  rebase status stored
+   already in target
+   merge against 10:2f2496ddf49d
+     detach base 9:e31216eec445
+    searching for copies back to rev 3
+  resolving manifests
+   branchmerge: True, force: True, partial: False
+   ancestor: e31216eec445, local: 19c888675e13+, remote: 2f2496ddf49d
+   f1.txt: remote is newer -> g
+  getting f1.txt
+  updating: f1.txt 1/1 files (100.00%)
+  f1.txt
+  rebase merging completed
+  update back to initial working directory parent
+  resolving manifests
+   branchmerge: False, force: False, partial: False
+   ancestor: 2a7f09cac94c, local: 2a7f09cac94c+, remote: d79e2059b5c0
+   f1.txt: other deleted -> r
+   f2.txt: remote created -> g
+  removing f1.txt
+  updating: f1.txt 1/2 files (50.00%)
+  getting f2.txt
+  updating: f2.txt 2/2 files (100.00%)
+  3 changesets found
+  list of changesets:
+  4c9fbe56a16f30c0d5dcc40ec1a97bbe3325209c
+  e31216eec445e44352c5f01588856059466a24c9
+  2f2496ddf49d69b5ef23ad8cf9fb2e0e4faf0ac2
+  bundling: 1/3 changesets (33.33%)
+  bundling: 2/3 changesets (66.67%)
+  bundling: 3/3 changesets (100.00%)
+  bundling: 1/3 manifests (33.33%)
+  bundling: 2/3 manifests (66.67%)
+  bundling: 3/3 manifests (100.00%)
+  bundling: f1.txt 1/1 files (100.00%)
+  saved backup bundle to $TESTTMP/issue4041/.hg/strip-backup/e31216eec445-backup.hg (glob)
+  3 changesets found
+  list of changesets:
+  4c9fbe56a16f30c0d5dcc40ec1a97bbe3325209c
+  19c888675e133ab5dff84516926a65672eaf04d9
+  2a7f09cac94c7f4b73ebd5cd1a62d3b2e8e336bf
+  bundling: 1/3 changesets (33.33%)
+  bundling: 2/3 changesets (66.67%)
+  bundling: 3/3 changesets (100.00%)
+  bundling: 1/3 manifests (33.33%)
+  bundling: 2/3 manifests (66.67%)
+  bundling: 3/3 manifests (100.00%)
+  bundling: f1.txt 1/1 files (100.00%)
+  adding branch
+  adding changesets
+  changesets: 1 chunks
+  add changeset 4c9fbe56a16f
+  changesets: 2 chunks
+  add changeset 19c888675e13
+  changesets: 3 chunks
+  add changeset 2a7f09cac94c
+  adding manifests
+  manifests: 1/2 chunks (50.00%)
+  manifests: 2/2 chunks (100.00%)
+  manifests: 3/2 chunks (150.00%)
+  adding file changes
+  adding f1.txt revisions
+  files: 1/1 chunks (100.00%)
+  added 2 changesets with 2 changes to 1 files
+  removing unknown node e31216eec445 from 1-phase boundary
+  invalid branchheads cache (served): tip differs
+  rebase completed
+  updating the branch cache
--- a/tests/test-shelve.t	Sat Nov 02 11:25:04 2013 +0100
+++ b/tests/test-shelve.t	Tue Nov 05 13:25:45 2013 -0500
@@ -27,7 +27,6 @@
   adding manifests
   adding file changes
   added 1 changesets with 5 changes to 5 files
-  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
 
   $ hg commit -q -m 'initial commit'
 
@@ -100,19 +99,19 @@
   $ hg shelve -d default
   $ hg qfinish -a -q
 
-local edits should prevent a shelved change from applying
+local edits should not prevent a shelved change from applying
 
-  $ echo e>>a/a
-  $ hg unshelve
+  $ printf "z\na\n" > a/a
+  $ hg unshelve --keep
   unshelving change 'default-01'
-  the following shelved files have been modified:
-    a/a
-  you must commit, revert, or shelve your changes before you can proceed
-  abort: cannot unshelve due to local changes
-  
-  [255]
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 3 changes to 8 files (+1 heads)
+  merging a/a
 
-  $ hg revert -C a/a
+  $ hg revert --all -q
+  $ rm a/a.orig b.rename/b c.copy
 
 apply it and make sure our state is as expected
 
@@ -122,7 +121,6 @@
   adding manifests
   adding file changes
   added 1 changesets with 3 changes to 8 files
-  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg status -C
   M a/a
   A b.rename/b
@@ -165,7 +163,9 @@
 
 and now "a/a" should reappear
 
+  $ cd a
   $ hg unshelve -q wibble
+  $ cd ..
   $ hg status -C
   M a/a
   A b.rename/b
@@ -199,24 +199,21 @@
   merging a/a
   warning: conflicts during merge.
   merging a/a incomplete! (edit conflicts, then use 'hg resolve --mark')
-  2 files updated, 0 files merged, 1 files removed, 1 files unresolved
-  use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
   unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
   [1]
 
 ensure that we have a merge with unresolved conflicts
 
-  $ hg heads -q
-  4:cebf2b8de087
-  3:2e69b451d1ea
-  $ hg parents -q
-  3:2e69b451d1ea
-  4:cebf2b8de087
+  $ hg heads -q --template '{rev}\n'
+  5
+  4
+  $ hg parents -q --template '{rev}\n'
+  4
+  5
   $ hg status
   M a/a
   M b.rename/b
   M c.copy
-  A foo/foo
   R b/b
   ? a/a.orig
   $ hg diff
@@ -231,6 +228,7 @@
   +a
   +>>>>>>> other
   diff --git a/b.rename/b b/b.rename/b
+  new file mode 100644
   --- /dev/null
   +++ b/b.rename/b
   @@ -0,0 +1,1 @@
@@ -242,16 +240,11 @@
   @@ -1,1 +0,0 @@
   -b
   diff --git a/c.copy b/c.copy
+  new file mode 100644
   --- /dev/null
   +++ b/c.copy
   @@ -0,0 +1,1 @@
   +c
-  diff --git a/foo/foo b/foo/foo
-  new file mode 100644
-  --- /dev/null
-  +++ b/foo/foo
-  @@ -0,0 +1,1 @@
-  +foo
   $ hg resolve -l
   U a/a
 
@@ -266,10 +259,10 @@
   M a/a
   M b.rename/b
   M c.copy
-  A foo/foo
   R b/b
   ? a/a.orig
   $ hg unshelve -a
+  rebase aborted
   unshelve of 'default' aborted
   $ hg heads -q
   3:2e69b451d1ea
@@ -312,6 +305,11 @@
   $ hg revert -r . a/a
   $ hg resolve -m a/a
 
+  $ hg commit -m 'commit while unshelve in progress'
+  abort: unshelve already in progress
+  (use 'hg unshelve --continue' or 'hg unshelve --abort')
+  [255]
+
   $ hg unshelve -c
   unshelve of 'default' complete
 
@@ -328,9 +326,9 @@
   3:2e69b451d1ea
 
   $ hg status -C
-  M b.rename/b
+  A b.rename/b
     b/b
-  M c.copy
+  A c.copy
     c
   A foo/foo
   R b/b
@@ -370,6 +368,7 @@
 set up another conflict between a commit and a shelved change
 
   $ hg revert -q -C -a
+  $ rm a/a.orig b.rename/b c.copy
   $ echo a >> a/a
   $ hg shelve -q
   $ echo x >> a/a
@@ -385,7 +384,6 @@
   adding file changes
   added 1 changesets with 1 changes to 6 files (+1 heads)
   merging a/a
-  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
   $ hg parents -q
   4:33f7f61e6c5e
   $ hg shelve -l
@@ -409,7 +407,6 @@
   adding manifests
   adding file changes
   added 1 changesets with 1 changes to 7 files
-  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg shelve --list
   default         (*)    create conflict (glob)
   $ hg shelve --cleanup
@@ -431,7 +428,6 @@
   adding manifests
   adding file changes
   added 1 changesets with 1 changes to 7 files
-  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg bookmark
    * test                      4:33f7f61e6c5e
 
@@ -448,7 +444,6 @@
   adding manifests
   adding file changes
   added 1 changesets with 1 changes to 7 files
-  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
 
 shelve should leave dirstate clean (issue 4055)
 
@@ -477,8 +472,52 @@
   adding manifests
   adding file changes
   added 2 changesets with 2 changes to 2 files (+1 heads)
-  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg status
   M z
 
   $ cd ..
+
+shelve should only unshelve pending changes (issue 4068)
+
+  $ hg init onlypendingchanges
+  $ cd onlypendingchanges
+  $ touch a
+  $ hg ci -Aqm a
+  $ touch b
+  $ hg ci -Aqm b
+  $ hg up -q 0
+  $ touch c
+  $ hg ci -Aqm c
+
+  $ touch d
+  $ hg add d
+  $ hg shelve
+  shelved as default
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg up -q 1
+  $ hg unshelve
+  unshelving change 'default'
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 3 files
+  $ hg status
+  A d
+
+unshelve should work on an ancestor of the original commit
+
+  $ hg shelve
+  shelved as default
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg up 0
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg unshelve
+  unshelving change 'default'
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 3 files
+  $ hg status
+  A d
+
+  $ cd ..
--- a/tests/test-strip.t	Sat Nov 02 11:25:04 2013 +0100
+++ b/tests/test-strip.t	Tue Nov 05 13:25:45 2013 -0500
@@ -386,7 +386,7 @@
 
   $ hg qapplied
 
-Verify strip protects against stripping wc parent when there are uncommited mods
+Verify strip protects against stripping wc parent when there are uncommitted mods
 
   $ echo b > b
   $ hg add b