merge with stable
authorMatt Mackall <mpm@selenic.com>
Thu, 01 May 2014 19:24:03 -0500
changeset 21220 b04a2f49cb55
parent 21159 024f38f6d5f6 (current diff)
parent 21219 cadad384c97c (diff)
child 21221 e3ca21e4d05f
merge with stable
--- a/.hgsigs	Thu Apr 17 16:56:15 2014 -0400
+++ b/.hgsigs	Thu May 01 19:24:03 2014 -0500
@@ -86,3 +86,5 @@
 3cec5134e9c4bceab6a00c60f52a4f80677a78f2 0 iQIVAwUAUu1lIyBXgaxoKi1yAQIzCBAAizSWvTkWt8+tReM9jUetoSToF+XahLhn381AYdErFCBErX4bNL+vyEj+Jt2DHsAfabkvNBe3k7rtFlXHwpq6POa/ciFGPDhFlplNv6yN1jOKBlMsgdjpn7plZKcLHODOigU7IMlgg70Um8qVrRgQ8FhvbVgR2I5+CD6bucFzqo78wNl9mCIHIQCpGKIUoz56GbwT+rUpEB182Z3u6rf4NWj35RZLGAicVV2A2eAAFh4ZvuC+Z0tXMkp6Gq9cINawZgqfLbzVYJeXBtJC39lHPyp5P3LaEVRhntc9YTwbfkVGjyJZR60iYrieeKpOYRnzgHauPVdgVhkTkBxshmEPY7svKYSQqlj8hLuFa+a3ajbIPrpQAAi1MgtamA991atNqGiSTjdZa9kLQvfdn0k80+gkCxpuO56PhvtdjKsYVRgQMTYmQVQdh3x4WbQOSqTADXXIZUaWxx4RmNSlxY7KD+3lPP09teOD+A3B2cP60bC5NsCfULtQFXQzdC7NvfIyYfYBTZa+Pv6HFkVe10cbnqTt83hBy0D77vdaegPRe56qDNU+GrIG2/rosnlKGFjFoK/pTYkR9uzfkrhEjLwyfkoXlBqY+376W0PC5fP10pJeQBS9DuXpCPlgtyW0Jy1ayCT1YR4QJC4n75vZwTFBFRBhSi0HqFquOgy83+O0Q/k=
 b96cb15ec9e04d8ac5ee08b34fcbbe4200588965 0 iQIVAwUAUxJPlyBXgaxoKi1yAQLIRA//Qh9qzoYthPAWAUNbzybWXC/oMBI2X89NQC7l1ivKhv7cn9L79D8SWXM18q7LTwLdlwOkV/a0NTE3tkQTLvxJpfnRLCBbMOcGiIn/PxsAae8IhMAUbR7qz+XOynHOs60ZhK9X8seQHJRf1YtOI9gYTL/WYk8Cnpmc6xZQ90TNhoPPkpdfe8Y236V11SbYtN14fmrPaWQ3GXwyrvQaqM1F7BxSnC/sbm9+/wprsTa8gRQo7YQL/T5jJQgFiatG3yayrDdJtoRq3TZKtsxw8gtQdfVCrrBibbysjM8++dnwA92apHNUY8LzyptPy7rSDXRrIpPUWGGTQTD+6HQwkcLFtIuUpw4I75SV3z2r6LyOLKzDJUIunKOOYFS/rEIQGxZHxZOBAvbI+73mHAn3pJqm+UAA7R1n7tk3JyQncg50qJlm9zIUPGpNFcdEqak5iXzGYx292VlcE+fbJYeIPWggpilaVUgdmXtMCG0O0uX6C8MDmzVDCjd6FzDJ4GTZwgmWJaamvls85CkZgyN/UqlisfFXub0A1h7qAzBSVpP1+Ti+UbBjlrGX8BMRYHRGYIeIq16elcWwSpLgshjDwNn2r2EdwX8xKU5mucgTzSLprbOYGdQaqnvf6e8IX5WMBgwVW9YdY9yJKSLF7kE1AlM9nfVcXwOK4mHoMvnNgiX3zsw=
 3f83fc5cfe715d292069ee8417c83804f6c6c1e4 0 iQIVAwUAUztENyBXgaxoKi1yAQIpkhAAmJj5JRTSn0Dn/OTAHggalw8KYFbAck1X35Wg9O7ku7sd+cOnNnkYfqAdz2m5ikqWHP7aWMiNkNy7Ree2110NqkQVYG/2AJStXBdIOmewqnjDlNt+rbJQN/JsjeKSCy+ToNvhqX5cTM9DF2pwRjMsTXVff307S6/3pga244i+RFAeG3WCUrzfDu641MGFLjG4atCj8ZFLg9DcW5bsRiOs5ZK5Il+UAb2yyoS2KNQ70VLhYULhGtqq9tuO4nLRGN3DX/eDcYfncPCav1GckW4OZKakcbLtAdW0goSgGWloxcM+j2E6Z1JZ9tOTTkFN77EvX0ZWZLmYM7sUN1meFnKbVxrtGKlMelwKwlT252c65PAKa9zsTaRUKvN7XclyxZAYVCsiCQ/V08NXhNgXJXcoKUAeGNf6wruOyvRU9teia8fAiuHJoY58WC8jC4nYG3iZTnl+zNj2A5xuEUpYHhjUfe3rNJeK7CwUpJKlbxopu5mnW9AE9ITfI490eaapRLTojOBDJNqCORAtbggMD46fLeCOzzB8Gl70U2p5P34F92Sn6mgERFKh/10XwJcj4ZIeexbQK8lqQ2cIanDN9dAmbvavPTY8grbANuq+vXDGxjIjfxapqzsSPqUJ5KnfTQyLq5NWwquR9t38XvHZfktkd140BFKwIUAIlKKaFfYXXtM=
+564f55b251224f16508dd1311452db7780dafe2b 0 iQIVAwUAU1BmFSBXgaxoKi1yAQJ2Aw//bjK++xJuZCIdktg/i5FxBwoxdbipfTkKsN/YjUwrEmroYM8IkqIsO+U54OGCYWr3NPJ3VS8wUQeJ+NF3ffcjmjC297R9J+X0c5G90DdQUYX44jG/tP8Tqpev4Q7DLCXT26aRwEMdJQpq0eGaqv55E5Cxnyt3RrLCqe7RjPresZFg7iYrro5nq8TGYwBhessHXnCix9QI0HtXiLpms+0UGz8Sbi9nEYW+M0OZCyO1TvykCpFzEsLNwqqtFvhOMD/AMiWcTKNUpjmOn3V83xjWl+jnDUt7BxJ7n1efUnlwl4IeWlSUb73q/durtaymb97cSdKFmXHv4pdAShQEuEpVVGO1WELsKoXmbj30ItTW2V3KvNbjFsvIdDo7zLCpXyTq1HC56W7QCIMINX2qT+hrAMWC12tPQ05f89Cv1+jpk6eOPFqIHFdi663AjyrnGll8nwN7HJWwtA5wTXisu3bec51FAq4yJTzPMtOE9spz36E+Go2hZ1cAv9oCSceZcM0wB8KiMfaZJKNZNZk1jvsdiio4CcdASOFQPOspz07GqQxVP7W+F1Oz32LgwcNAEAS/f3juwDj45GYfAWJrTh3dnJy5DTD2LVC7KtkxxUVkWkqxivnDB9anj++FN9eyekxzut5eFED+WrCfZMcSPW0ai7wbslhKUhCwSf/v3DgGwsM=
+2195ac506c6ababe86985b932f4948837c0891b5 0 iQIVAwUAU2LO/CBXgaxoKi1yAQI/3w/7BT/VRPyxey6tYp7i5cONIlEB3gznebGYwm0SGYNE6lsvS2VLh6ztb+j4eqOadr8Ssna6bslBx+dVsm+VuJ+vrNLMucD5Uc+fhn6dAfVqg+YBzUEaedI5yNsJizcJUDI7hUVsxiPiiYd9hchCWJ+z2tVt2jCyG2lMV2rbW36AM89sgz/wn5/AaAFsgoS6up/uzA3Tmw+qZSO6dZChb4Q8midIUWEbNzVhokgYcw7/HmjmvkvV9RJYiG8aBnMdQmxTE69q2dTjnnDL6wu61WU2FpTN09HRFbemUqzAfoJp8MmXq6jWgfLcm0cI3kRo7ZNpnEkmVKsfKQCXXiaR4alt9IQpQ6Jl7LSYsYI+D4ejpYysIsZyAE8qzltYhBKJWqO27A5V4WdJsoTgA/RwKfPRlci4PY8I4N466S7PBXVz/Cc5EpFkecvrgceTmBafb8JEi+gPiD2Po4vtW3bCeV4xldiEXHeJ77byUz7fZU7jL78SjJVOCCQTJfKZVr36kTz3KlaOz3E700RxzEFDYbK7I41mdANeQBmNNbcvRTy5ma6W6I3McEcAH4wqM5fFQ8YS+QWJxk85Si8KtaDPqoEdC/0dQPavuU/jAVjhV8IbmmkOtO7WvOHQDBtrR15yMxGMnUwMrPHaRNKdHNYRG0LL7lpCtdMi1mzLQgHYY9SRYvI=
--- a/.hgtags	Thu Apr 17 16:56:15 2014 -0400
+++ b/.hgtags	Thu May 01 19:24:03 2014 -0500
@@ -99,3 +99,5 @@
 3cec5134e9c4bceab6a00c60f52a4f80677a78f2 2.9
 b96cb15ec9e04d8ac5ee08b34fcbbe4200588965 2.9.1
 3f83fc5cfe715d292069ee8417c83804f6c6c1e4 2.9.2
+564f55b251224f16508dd1311452db7780dafe2b 3.0-rc
+2195ac506c6ababe86985b932f4948837c0891b5 3.0
--- a/contrib/revsetbenchmarks.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/contrib/revsetbenchmarks.py	Thu May 01 19:24:03 2014 -0500
@@ -22,7 +22,7 @@
     proc = Popen(*args, **kwargs)
     output, error = proc.communicate()
     if proc.returncode != 0:
-        raise CalledProcessError(proc.returncode, ' '.join(args))
+        raise CalledProcessError(proc.returncode, ' '.join(args[0]))
     return output
 
 def update(rev):
--- a/contrib/revsetbenchmarks.txt	Thu Apr 17 16:56:15 2014 -0400
+++ b/contrib/revsetbenchmarks.txt	Thu May 01 19:24:03 2014 -0500
@@ -14,3 +14,7 @@
 min(0::)
 roots((tip~100::) - (tip~100::tip))
 ::p1(p1(tip))::
+public()
+:10000 and public()
+draft()
+:10000 and draft()
--- a/hgext/churn.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/hgext/churn.py	Thu May 01 19:24:03 2014 -0500
@@ -10,6 +10,7 @@
 
 from mercurial.i18n import _
 from mercurial import patch, cmdutil, scmutil, util, templater, commands
+from mercurial import encoding
 import os
 import time, datetime
 
@@ -124,7 +125,7 @@
     Aliases will be split from the rightmost "=".
     '''
     def pad(s, l):
-        return (s + " " * l)[:l]
+        return s + " " * (l - encoding.colwidth(s))
 
     amap = {}
     aliases = opts.get('aliases')
--- a/hgext/color.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/hgext/color.py	Thu May 01 19:24:03 2014 -0500
@@ -341,6 +341,7 @@
         if self._colormode is None:
             return super(colorui, self).popbuffer(labeled)
 
+        self._bufferstates.pop()
         if labeled:
             return ''.join(self.label(a, label) for a, label
                            in self._buffers.pop())
@@ -366,6 +367,8 @@
             return super(colorui, self).write_err(*args, **opts)
 
         label = opts.get('label', '')
+        if self._bufferstates and self._bufferstates[-1]:
+            return self.write(*args, **opts)
         if self._colormode == 'win32':
             for a in args:
                 win32print(a, super(colorui, self).write_err, **opts)
--- a/hgext/histedit.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/hgext/histedit.py	Thu May 01 19:24:03 2014 -0500
@@ -570,7 +570,7 @@
         else:
             rootrevs = list(repo.set('roots(%lr)', revs))
             if len(rootrevs) != 1:
-                raise util.Abort(_('The specified revisions must have ' +
+                raise util.Abort(_('The specified revisions must have '
                     'exactly one common root'))
             root = rootrevs[0].node()
 
--- a/hgext/largefiles/overrides.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/hgext/largefiles/overrides.py	Thu May 01 19:24:03 2014 -0500
@@ -270,6 +270,9 @@
         pats = set(p)
         # TODO: handling of patterns in both cases below
         if m._cwd:
+            if os.path.isabs(m._cwd):
+                # TODO: handle largefile magic when invoked from other cwd
+                return matchandpats
             back = (m._cwd.count('/') + 1) * '../'
             pats.update(back + lfutil.standin(m._cwd + '/' + f) for f in p)
         else:
@@ -579,6 +582,10 @@
                         os.makedirs(destlfiledir)
                     if rename:
                         os.rename(repo.wjoin(srclfile), repo.wjoin(destlfile))
+
+                        # The file is gone, but this deletes any empty parent
+                        # directories as a side-effect.
+                        util.unlinkpath(repo.wjoin(srclfile), True)
                         lfdirstate.remove(srclfile)
                     else:
                         util.copyfile(repo.wjoin(srclfile),
--- a/hgext/rebase.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/hgext/rebase.py	Thu May 01 19:24:03 2014 -0500
@@ -222,20 +222,23 @@
             if revf:
                 rebaseset = scmutil.revrange(repo, revf)
                 if not rebaseset:
-                    raise util.Abort(_('empty "rev" revision set - '
-                                       'nothing to rebase'))
+                    ui.status(_('empty "rev" revision set - '
+                                'nothing to rebase\n'))
+                    return 1
             elif srcf:
                 src = scmutil.revrange(repo, [srcf])
                 if not src:
-                    raise util.Abort(_('empty "source" revision set - '
-                                       'nothing to rebase'))
+                    ui.status(_('empty "source" revision set - '
+                                'nothing to rebase\n'))
+                    return 1
                 rebaseset = repo.revs('(%ld)::', src)
                 assert rebaseset
             else:
                 base = scmutil.revrange(repo, [basef or '.'])
                 if not base:
-                    raise util.Abort(_('empty "base" revision set - '
-                                       "can't compute rebase set"))
+                    ui.status(_('empty "base" revision set - '
+                                "can't compute rebase set\n"))
+                    return 1
                 rebaseset = repo.revs(
                     '(children(ancestor(%ld, %d)) and ::(%ld))::',
                     base, dest, base)
--- a/i18n/ja.po	Thu Apr 17 16:56:15 2014 -0400
+++ b/i18n/ja.po	Thu May 01 19:24:03 2014 -0500
@@ -1,7 +1,7 @@
 # Japanese translation for Mercurial
 # Mercurial 日本語翻訳
 #
-# Copyright (C) 2009-2013 the Mercurial team
+# Copyright (C) 2009-2014 the Mercurial team
 #
 # ========================================
 # 【翻訳用語集】
@@ -149,8 +149,8 @@
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
-"POT-Creation-Date: 2014-03-31 19:44+0900\n"
-"PO-Revision-Date: 2014-03-31 20:11+0900\n"
+"POT-Creation-Date: 2014-04-30 22:52+0900\n"
+"PO-Revision-Date: 2014-04-30 23:08+0900\n"
 "Last-Translator: Japanese translation team <mercurial-ja@googlegroups.com>\n"
 "Language-Team: Japanese\n"
 "Language: ja\n"
@@ -343,9 +343,6 @@
 "設定例\n"
 "------"
 
-msgid "::"
-msgstr "::"
-
 msgid "  [hooks]"
 msgstr "  [hooks]"
 
@@ -1763,6 +1760,9 @@
 msgid "TYPE"
 msgstr "種別"
 
+msgid "available colors:\n"
+msgstr "利用可能な色指定:\n"
+
 msgid "import revisions from foreign VCS repositories into Mercurial"
 msgstr "他の構成管理ツールから Mercurial への履歴取り込み"
 
@@ -2440,8 +2440,8 @@
 msgstr "要求されたツール '%s' が見つかりません"
 
 #, python-format
-msgid "splicemap entry %s is not a valid revision identifier"
-msgstr "splicemap のエントリ %s は有効なリビジョンではありません"
+msgid "%s entry %s is not a valid revision identifier"
+msgstr "%s 中のエントリ %s は有効なリビジョン識別子ではありません"
 
 #, python-format
 msgid "%s error:\n"
@@ -3072,9 +3072,6 @@
 "  [repository]\n"
 "  native = LF"
 
-msgid ".. note::"
-msgstr ".. note::"
-
 msgid ""
 "   The rules will first apply when files are touched in the working\n"
 "   copy, e.g. by updating to null and back to tip to touch all files."
@@ -4055,22 +4052,24 @@
 msgid ""
 " # Edit history between c561b4e977df and 7c2fd3b9020c\n"
 " #\n"
+" # Commits are listed from least to most recent\n"
+" #\n"
 " # Commands:\n"
 " #  p, pick = use commit\n"
 " #  e, edit = use commit, but stop for amending\n"
-" #  f, fold = use commit, but fold into previous commit (combines N and "
-"N-1)\n"
+" #  f, fold = use commit, but combine it with the one above\n"
 " #  d, drop = remove commit from history\n"
 " #  m, mess = edit message without changing commit content\n"
 " #"
 msgstr ""
 " # c561b4e977df から 7c2fd3b9020c にかけての履歴の編集\n"
 " #\n"
+" # 対象一覧は、リビジョン番号の昇順 (古い方から新しい方) になっています。\n"
+" #\n"
 " # 指定可能コマンド:\n"
 " #  p, pick = リビジョンを採用\n"
 " #  e, edit = リビジョンを採用: 但し修正のために一旦実行を中断\n"
-" #  f, fold = リビジョンを採用: 但し直前のリビジョンに併合\n"
-" #            (このリビジョンが N 番目なら、N - 1 番目に併合)\n"
+" #  f, fold = リビジョンを採用: 但し直前(= 一覧での上)のリビジョンに併合\n"
 " #  d, drop = リビジョンを破棄\n"
 " #  m, mess = 変更内容を維持しつつ、コミットログを修正\n"
 " #"
@@ -4279,21 +4278,24 @@
 msgid ""
 "# Edit history between %s and %s\n"
 "#\n"
+"# Commits are listed from least to most recent\n"
+"#\n"
 "# Commands:\n"
 "#  p, pick = use commit\n"
 "#  e, edit = use commit, but stop for amending\n"
-"#  f, fold = use commit, but fold into previous commit (combines N and N-1)\n"
+"#  f, fold = use commit, but combine it with the one above\n"
 "#  d, drop = remove commit from history\n"
 "#  m, mess = edit message without changing commit content\n"
 "#\n"
 msgstr ""
 "# %s から %s にかけての履歴の編集\n"
 "#\n"
+"# 対象一覧は、リビジョン番号の昇順 (古い方から新しい方) になっています。\n"
+"#\n"
 "# 指定可能コマンド:\n"
 "#  p, pick = リビジョンを採用\n"
 "#  e, edit = リビジョンを採用: 但し修正のために一旦実行を中断\n"
-"#  f, fold = リビジョンを採用: 但し直前のリビジョンに併合\n"
-"#            (このリビジョンが N 番目なら、N - 1 番目に併合)\n"
+"#  f, fold = リビジョンを採用: 但し直前(= 一覧での上)のリビジョンに併合\n"
 "#  d, drop = リビジョンを破棄\n"
 "#  m, mess = 変更内容を維持しつつ、コミットログを修正\n"
 "#\n"
@@ -4427,6 +4429,9 @@
 msgid "histedit requires exactly one ancestor revision"
 msgstr "履歴改変には単一の祖先リビジョンを指定してください"
 
+msgid "The specified revisions must have exactly one common root"
+msgstr "指定リビジョン群は、単一の共通祖先リビジョンを持つ必要があります"
+
 #, python-format
 msgid "%s is not an ancestor of working directory"
 msgstr "%s は作業領域の祖先ではありません"
@@ -4489,203 +4494,6 @@
 msgid "use 'hg histedit --continue' or 'hg histedit --abort'"
 msgstr "'hg histedit --continue' か 'hg histedit --abort' を実施してください"
 
-msgid "accelerate status report using Linux's inotify service"
-msgstr "Linux の inoitfy サービスによる状態報告の高速化"
-
-msgid "start an inotify server for this repository"
-msgstr "リポジトリに対する inotify サーバの起動"
-
-msgid "debugging information for inotify extension"
-msgstr "inotify エクステンション向けデバッグ情報"
-
-msgid ""
-"    Prints the list of directories being watched by the inotify server.\n"
-"    "
-msgstr ""
-"    inotify サーバの監視対象ディレクトリを一覧表示します。\n"
-"    "
-
-msgid "directories being watched:\n"
-msgstr "監視対象ディレクトリ:\n"
-
-msgid "run server in background"
-msgstr "バックグラウンドでのサーバ実行"
-
-msgid "used internally by daemon mode"
-msgstr "(バックグラウンド実行時での内部用途向け)"
-
-msgid "minutes to sit idle before exiting"
-msgstr "終了前のアイドリング待機時間(単位:分)"
-
-msgid "name of file to write process ID to"
-msgstr "プロセスIDの書き出し先ファイル"
-
-msgid "hg inserve [OPTION]..."
-msgstr "hg inserve [OPTION]..."
-
-msgid "inotify-client: found dead inotify server socket; removing it\n"
-msgstr "inotify-client:無効な inotify サーバソケットを検出したので削除します\n"
-
-#, python-format
-msgid "inotify-client: could not start inotify server: %s\n"
-msgstr "inotify-client: inotify サーバの起動に失敗: %s\n"
-
-#, python-format
-msgid "inotify-client: could not talk to new inotify server: %s\n"
-msgstr "inotify-client: 新規 inotify サーバとの連携に失敗: %s\n"
-
-#, python-format
-msgid "inotify-client: failed to contact inotify server: %s\n"
-msgstr "inotify-client: inotify サーバとの連携に失敗: %s\n"
-
-msgid "inotify-client: received empty answer from inotify server"
-msgstr "inotify-client: inotify サーバからの空応答を受信"
-
-#, python-format
-msgid "(inotify: received response from incompatible server version %d)\n"
-msgstr "(inotify: 互換性の無いバージョン %d のサーバ応答を受理)\n"
-
-#, python-format
-msgid "(inotify: received '%s' response when expecting '%s')\n"
-msgstr "(inotify: 想定外の '%s' 応答を受理。 想定応答は '%s')\n"
-
-msgid "this system does not seem to support inotify"
-msgstr "このシステムでは inotify は利用できないように見えます"
-
-#, python-format
-msgid "*** the current per-user limit on the number of inotify watches is %s\n"
-msgstr "*** inotify のユーザ毎監視対象上限数は %s\n"
-
-msgid "*** this limit is too low to watch every directory in this repository\n"
-msgstr "*** この上限は作業領域の全ディレクトリの監視には少なすぎます\n"
-
-msgid "*** counting directories: "
-msgstr "*** ディレクトリの計上中: "
-
-#, python-format
-msgid "found %d\n"
-msgstr "%d 個のディレクトリを検出\n"
-
-#, python-format
-msgid "*** to raise the limit from %d to %d (run as root):\n"
-msgstr "*** 上限を %d から %d に上げてください(root 権限が必要):\n"
-
-#, python-format
-msgid "***  echo %d > %s\n"
-msgstr "***  echo %d > %s\n"
-
-#, python-format
-msgid "cannot watch %s until inotify watch limit is raised"
-msgstr "inotify の監視対象上限が上がるまでは %s を監視できません"
-
-#, python-format
-msgid "inotify service not available: %s"
-msgstr "inotify サービスが使用できません: %s"
-
-#, python-format
-msgid "watching %r\n"
-msgstr "%r を監視\n"
-
-#, python-format
-msgid "watching directories under %r\n"
-msgstr "%r 配下のディレクトリを監視\n"
-
-#, python-format
-msgid "%s event: created %s\n"
-msgstr "イベント %s: %s を作成\n"
-
-#, python-format
-msgid "%s event: deleted %s\n"
-msgstr "イベント %s: %s を削除\n"
-
-#, python-format
-msgid "%s event: modified %s\n"
-msgstr "イベント %s: %s を変更\n"
-
-#, python-format
-msgid "filesystem containing %s was unmounted\n"
-msgstr "%s を含むファイルシステムが未マウントです\n"
-
-#, python-format
-msgid "%s readable: %d bytes\n"
-msgstr "%s: 読み込み可能: %d バイト\n"
-
-#, python-format
-msgid "%s below threshold - unhooking\n"
-msgstr "%s: 閾値未満 - ロック解放\n"
-
-#, python-format
-msgid "%s reading %d events\n"
-msgstr "%s: %d 個のイベント読み込み中\n"
-
-#, python-format
-msgid "%s hooking back up with %d bytes readable\n"
-msgstr "%s: 読み込み可能な %d バイトのバックアップをフック\n"
-
-msgid "finished setup\n"
-msgstr "セットアップを終了しました\n"
-
-#, python-format
-msgid "status: %r %s -> %s\n"
-msgstr "status: %r %s -> %s\n"
-
-msgid "rescanning due to .hgignore change\n"
-msgstr ".hgignore 変更に付き再走査中\n"
-
-msgid "cannot start: socket is already bound"
-msgstr "ソケットが既にバインドされているため開始できません"
-
-#, python-format
-msgid "answering query for %r\n"
-msgstr "%r への問い合わせに返答中\n"
-
-#, python-format
-msgid "received query from incompatible client version %d\n"
-msgstr "互換性の無いクライアントバージョン %d からの問い合わせを受信\n"
-
-#, python-format
-msgid "unrecognized query type: %s\n"
-msgstr "未知の問い合わせ種別: %s\n"
-
-msgid "expand expressions into changelog and summaries"
-msgstr "コミットログ中の記述の展開"
-
-msgid ""
-"This extension allows the use of a special syntax in summaries, which\n"
-"will be automatically expanded into links or any other arbitrary\n"
-"expression, much like InterWiki does."
-msgstr ""
-"本エクステンションは、 リンクなり任意の式の形式へと自動的に変換される\n"
-"InterWiki のような特別な書式を用いたコミットログの記述を可能にします。"
-
-msgid ""
-"A few example patterns (link to bug tracking, etc.) that may be used\n"
-"in your hgrc::"
-msgstr ""
-"バグ管理システムとの連携で使用されるようなパターンを設定ファイルで\n"
-"記述する例を以下に示します::"
-
-msgid ""
-"  [interhg]\n"
-"  issues = s!issue(\\d+)!<a href=\"http://bts/issue\\1\">issue\\1</a>!\n"
-"  bugzilla = s!((?:bug|b=|(?=#?\\d{4,}))(?:\\s*#?)(\\d+))!<a..=\\2\">\\1</a>!"
-"i\n"
-"  boldify = s!(^|\\s)#(\\d+)\\b! <b>#\\2</b>!\n"
-msgstr ""
-"  [interhg]\n"
-"  issues = s!issue(\\d+)!<a href=\"http://bts/issue\\1\">issue\\1</a>!\n"
-"  bugzilla = s!((?:bug|b=|(?=#?\\d{4,}))(?:\\s*#?)(\\d+))!<a..=\\2\">\\1</a>!"
-"i\n"
-"  boldify = s!(^|\\s)#(\\d+)\\b! <b>#\\2</b>!\n"
-
-#, python-format
-msgid "interhg: invalid pattern for %s: %s\n"
-msgstr "interhg: %s のパターンが不正です: %s\n"
-
-#, python-format
-msgid "interhg: invalid regexp for %s: %s\n"
-msgstr "interhg: %s の正規表現が不正です: %s\n"
-
 msgid "expand keywords in tracked files"
 msgstr "構成管理対象ファイル中のキーワード展開"
 
@@ -5272,9 +5080,6 @@
 "    連携先が省略された場合、 'default' パスが連携先として使用されます。\n"
 "    詳細は :hg:`help urls` を参照してください。"
 
-msgid "    .. container:: verbose"
-msgstr "    .. container:: verbose"
-
 msgid "      Some examples:"
 msgstr "      例:"
 
@@ -5539,9 +5344,6 @@
 msgid "not removing %s: file is already untracked\n"
 msgstr "%s は削除されません: ファイルは既に未登録です\n"
 
-msgid "largefiles: No remote repo\n"
-msgstr "largefiles: 連携先リポジトリが指定されていません\n"
-
 msgid "largefiles: no files to upload\n"
 msgstr "largefiles: 転送予定ファイルはありません\n"
 
@@ -6737,9 +6539,6 @@
 "    引数指定が無い場合、 現在のガード設定を表示します。\n"
 "    引数が指定された場合、 指定パッチに対してガードを設定します。"
 
-msgid "    .. note::"
-msgstr "    .. note::"
-
 msgid "       Specifying negative guards now requires '--'."
 msgstr "       負のガード設定には、 ガード指定の前に '--' 引数が必要です。"
 
@@ -7947,6 +7746,9 @@
 msgid "no changes found\n"
 msgstr "差分はありません\n"
 
+msgid "warning: working directory has uncommitted changes\n"
+msgstr "警告: 作業領域には未コミットの変更があります\n"
+
 msgid "specify at least one changeset with -r or -o"
 msgstr "-r 又は -o を使用してリビジョンを指定してください"
 
@@ -8399,8 +8201,8 @@
 msgid "cannot specify both a revision and a source"
 msgstr "--rev と --soruce は併用できません"
 
-msgid "empty \"rev\" revision set - nothing to rebase"
-msgstr "--rev での指定対象が空です - 移動対象がありません"
+msgid "empty \"rev\" revision set - nothing to rebase\n"
+msgstr "--rev での指定対象が空です - 移動対象がありません\n"
 
 msgid "empty \"source\" revision set - nothing to rebase"
 msgstr "--soruce での指定対象が空です - 移動対象がありません"
@@ -8446,6 +8248,10 @@
 msgid "see hg help phases for details"
 msgstr "詳細は \"hg help phases\" を参照"
 
+#, python-format
+msgid "reopening closed branch head %s\n"
+msgstr "閉鎖済みブランチヘッド %s の閉鎖状態を解除中\n"
+
 msgid "cannot collapse multiple named branches"
 msgstr "複数の名前付きブランチの単一化はできません"
 
@@ -9040,6 +8846,9 @@
 msgid "keep shelve after unshelving"
 msgstr "復旧後も退避情報を維持"
 
+msgid "set date for temporary commits (DEPRECATED)"
+msgstr "一時コミットの日付を設定 (非推奨)"
+
 msgid "hg unshelve [SHELVED]"
 msgstr "hg unshelve [SHELVED]"
 
@@ -9099,6 +8908,13 @@
 msgid "unshelving change '%s'\n"
 msgstr "退避情報 '%s' を復旧中\n"
 
+msgid ""
+"temporarily committing pending changes (restore with 'hg unshelve --abort')\n"
+msgstr "変更内容を一時的にコミット中 (中断時の復旧は 'hg unshelve --abort')\n"
+
+msgid "rebasing shelved changes\n"
+msgstr "退避した変更の移動 (rebase) 中\n"
+
 msgid "unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')"
 msgstr ""
 "衝突が未解消です ('hg resolve' で衝突解消後に 'hg unshelve --continue' を実行"
@@ -9131,8 +8947,8 @@
 msgid "output diffstat-style summary of changes"
 msgstr "diffstat 形式の変更概要を出力"
 
-msgid "hg shelve"
-msgstr "hg shelve"
+msgid "hg shelve [OPTION]... [FILE]..."
+msgstr "hg shelve [OPTION]... [FILE]..."
 
 msgid "save and set aside changes from the working directory"
 msgstr "作業領域中の変更内容を退避した上で破棄"
@@ -9667,8 +9483,8 @@
 msgid "[win32mbcs] cannot activate on this platform.\n"
 msgstr "[win32mbcs] エクステンションを有効化できないプラットフォームです。\n"
 
-msgid "perform automatic newline conversion"
-msgstr "改行形式の自動変換"
+msgid "perform automatic newline conversion (DEPRECATED)"
+msgstr "改行形式の自動変換 (非推奨)"
 
 msgid ""
 "  Deprecation: The win32text extension requires each user to configure\n"
@@ -9873,14 +9689,14 @@
 msgstr "分岐するブックマーク %s を %s として保存\n"
 
 #, python-format
+msgid "bookmark %s does not exist on the local or remote repository!\n"
+msgstr "ブックマーク %s はいずれのリポジトリにも存在しません!\n"
+
+#, python-format
 msgid "updating bookmark %s failed!\n"
 msgstr "ブックマーク %s の更新に失敗!\n"
 
 #, python-format
-msgid "bookmark %s does not exist on the local or remote repository!\n"
-msgstr "ブックマーク %s はいずれのリポジトリにも存在しません!\n"
-
-#, python-format
 msgid "exporting bookmark %s\n"
 msgstr "ブックマーク %s の反映中\n"
 
@@ -9894,6 +9710,16 @@
 msgid "no changed bookmarks found\n"
 msgstr "変更されたブックマークはありません\n"
 
+msgid "not a Mercurial bundle"
+msgstr "Mercurial のバンドル形式ではありません"
+
+#, python-format
+msgid "unknown bundle version %s"
+msgstr "未知のバンドル形式バージョン %s"
+
+msgid "push failed:"
+msgstr "履歴反映に失敗:"
+
 msgid "unknown parent"
 msgstr "未知の親"
 
@@ -9911,14 +9737,6 @@
 msgid "invalid chunk length %d"
 msgstr "不正なデータ長: %d"
 
-#, python-format
-msgid "%s: not a Mercurial bundle"
-msgstr "%s: Mercurial のバンドル形式ではありません"
-
-#, python-format
-msgid "%s: unknown bundle version %s"
-msgstr "%s: 未知のバンドル形式バージョン %s"
-
 msgid "bundling"
 msgstr "バンドル生成中"
 
@@ -9929,6 +9747,43 @@
 msgid "empty or missing revlog for %s"
 msgstr "%s に対するリビジョンログが空または不在です"
 
+#, python-format
+msgid "%d changesets found\n"
+msgstr "%d 個のリビジョンがあります\n"
+
+msgid "received file revlog group is empty"
+msgstr "ファイルのリビジョンログが空です"
+
+msgid "received spurious file revlog entry"
+msgstr "ファイルのリビジョンログが不正な情報を含んでいます"
+
+#, python-format
+msgid "missing file data for %s:%s - run hg verify"
+msgstr "%s:%s のファイルデータが不在です - hg verify を実施してください"
+
+msgid "adding changesets\n"
+msgstr "リビジョンを追加中\n"
+
+msgid "chunks"
+msgstr "チャンク"
+
+msgid "received changelog group is empty"
+msgstr "受信した変更履歴は空です"
+
+msgid "adding manifests\n"
+msgstr "マニフェストを追加中\n"
+
+msgid "adding file changes\n"
+msgstr "ファイルの変更を追加中\n"
+
+#, python-format
+msgid " (%+d heads)"
+msgstr " (%+d個のヘッド)"
+
+#, python-format
+msgid "added %d changesets with %d changes to %d files%s\n"
+msgstr "%d 個のリビジョン(%d の変更を %d ファイルに適用)を追加%s\n"
+
 msgid "no node"
 msgstr "ノードがありません"
 
@@ -10043,6 +9898,20 @@
 msgid "child process failed to start"
 msgstr "子プロセスの生成に失敗"
 
+msgid "applied to working directory"
+msgstr "作業領域への適用"
+
+msgid "not a Mercurial patch"
+msgstr "Mercurial 向けのパッチではありません"
+
+msgid "patch is damaged or loses information"
+msgstr "パッチには破損または情報の欠落があります"
+
+#. i18n: refers to a short changeset id
+#, python-format
+msgid "created %s"
+msgstr "%s を作成"
+
 #. i18n: column positioning for "hg log"
 #, python-format
 msgid "changeset:   %d:%s\n"
@@ -10355,8 +10224,8 @@
 msgid "STYLE"
 msgstr "スタイル"
 
-msgid "display using template map file"
-msgstr "当該スタイルで表示をカスタマイズ"
+msgid "display using template map file (DEPRECATED)"
+msgstr "当該スタイルで表示をカスタマイズ (非推奨)"
 
 msgid "display with template"
 msgstr "当該テンプレートで表示をカスタマイズ"
@@ -10726,14 +10595,23 @@
 "      後から別途マージできるように、 打ち消しリビジョンを、\n"
 "      ヘッドのまま残す働きをします。"
 
+msgid ""
+"    Returns 0 on success, 1 if nothing to backout or there are unresolved\n"
+"    files.\n"
+"    "
+msgstr ""
+"    成功時のコマンド終了値は 0、 打消しが必要なリビジョンが無い場合や、\n"
+"    未解消の衝突が発生した場合は 1 です。\n"
+"    "
+
 msgid "please specify just one revision"
 msgstr "リビジョン指定は1つだけです"
 
 msgid "please specify a revision to backout"
 msgstr "打ち消し対象リビジョンを指定してください"
 
-msgid "cannot backout change on a different branch"
-msgstr "異なるブランチに属するリビジョンを打ち消すことはできません"
+msgid "cannot backout change that is not an ancestor"
+msgstr "作業領域の直系の祖先ではないリビジョンを打ち消すことはできません"
 
 msgid "cannot backout a change with no parents"
 msgstr "親の無いリビジョンを打ち消すことはできません"
@@ -11343,22 +11221,31 @@
 
 msgid ""
 "    Output may be to a file, in which case the name of the file is\n"
-"    given using a format string. The formatting rules are the same as\n"
-"    for the export command, with the following additions:"
-msgstr ""
-"    出力先指定がある場合、 出力はファイルに保存されます。\n"
-"    出力先指定では、 :hg:`export` で指定可能なものに加えて、\n"
-"    以下の置換指定が利用可能です:"
-
-msgid ""
+"    given using a format string. The formatting rules as follows:"
+msgstr ""
+"    出力先指定(置換指定可能)がある場合、 出力はファイルに保存されます。\n"
+"    置換指定として以下のものが使用可能です:"
+
+msgid ""
+"    :``%%``: literal \"%\" character\n"
 "    :``%s``: basename of file being printed\n"
 "    :``%d``: dirname of file being printed, or '.' if in repository root\n"
-"    :``%p``: root-relative path name of file being printed"
-msgstr ""
+"    :``%p``: root-relative path name of file being printed\n"
+"    :``%H``: changeset hash (40 hexadecimal digits)\n"
+"    :``%R``: changeset revision number\n"
+"    :``%h``: short-form changeset hash (12 hexadecimal digits)\n"
+"    :``%r``: zero-padded changeset revision number\n"
+"    :``%b``: basename of the exporting repository"
+msgstr ""
+"    :``%%``: \"%\" 文字そのもの\n"
 "    :``%s``: 対象ファイルパスの末尾要素\n"
 "    :``%d``: 対象ファイルの格納ディレクトリ、 または '.'(ルートの場合)\n"
 "    :``%p``: 対象ファイルのリポジトリルートからの相対パス\n"
-"    "
+"    :``%H``: ハッシュ値(40 桁 16 進数)\n"
+"    :``%R``: リビジョン番号\n"
+"    :``%h``: 短縮形式ハッシュ値(12 桁 16 進数)\n"
+"    :``%r``: ゼロ詰めのリビジョン番号\n"
+"    :``%b``: 対象リポジトリパスの末尾要素"
 
 msgid "the clone will include an empty working copy (only a repository)"
 msgstr "作業領域の更新無し(管理領域のみの複製)"
@@ -11566,6 +11453,9 @@
 msgid "use the secret phase for committing"
 msgstr "secret フェーズでコミット中"
 
+msgid "further edit commit message already specified"
+msgstr "指定されたコミットログをエディタで更に編集"
+
 msgid "commit the specified files or all outstanding changes"
 msgstr "指定ファイルまたは全ての変更内容のリポジトリへの記録"
 
@@ -11663,6 +11553,74 @@
 msgid "cannot amend changeset with children"
 msgstr "子リビジョンを持つリビジョンは改変できません"
 
+msgid "show untrusted configuration options"
+msgstr "信頼できない設定項目も表示"
+
+msgid "edit user config"
+msgstr "ユーザ毎設定ファイルの編集"
+
+msgid "edit repository config"
+msgstr "リポジトリ毎設定ファイルの編集"
+
+msgid "edit global config"
+msgstr "システムワイド設定ファイルの編集"
+
+msgid "[-u] [NAME]..."
+msgstr "[-u] [NAME]..."
+
+msgid "show combined config settings from all hgrc files"
+msgstr "全設定ファイルによる最終的な設定内容の表示"
+
+msgid "    With no arguments, print names and values of all config items."
+msgstr ""
+"    引数指定が無い場合、 全ての設定項目に対して、 名前と値を表示します。"
+
+msgid ""
+"    With one argument of the form section.name, print just the value\n"
+"    of that config item."
+msgstr ""
+"    'section.name' 形式に合致する引数を1つだけ指定した場合、 その設定項目\n"
+"    値のみを表示します。"
+
+msgid ""
+"    With multiple arguments, print names and values of all config\n"
+"    items with matching section names."
+msgstr ""
+"    複数の引数が指定された場合、 それらをセクション名とみなし、 該当する\n"
+"    セクションの設定項目を全て表示します。"
+
+msgid ""
+"    With --edit, start an editor on the user-level config file. With\n"
+"    --global, edit the system-wide config file. With --local, edit the\n"
+"    repository-level config file."
+msgstr ""
+"    --edit 指定のある場合、 ユーザ毎設定ファイルの編集を開始します。\n"
+"    --global 指定のある場合は、 システムワイド設定ファイルが、 --local\n"
+"    指定のある場合は、 リポジトリ毎設定ファイルが、 編集対象になります。"
+
+msgid ""
+"    With --debug, the source (filename and line number) is printed\n"
+"    for each config item."
+msgstr ""
+"    --debug 指定がある場合、 設定項目毎に記述位置(ファイル名と行番号)が\n"
+"    表示されます。\n"
+"    "
+
+msgid "    See :hg:`help config` for more information about config files."
+msgstr "    設定ファイルに関する詳細は :hg:`help config` を参照してください。"
+
+msgid "    "
+msgstr "    "
+
+msgid "can't use --local and --global together"
+msgstr "--local と --global は併用できません"
+
+msgid "can't use --local outside a repository"
+msgstr "リポジトリの外側では --local を指定できません"
+
+msgid "only one config item permitted"
+msgstr "複数の設定項目指定は無効です"
+
 msgid "record a copy that has already occurred"
 msgstr "手動で複製済みのファイルに対して、 複製の旨を記録"
 
@@ -11989,6 +11947,14 @@
 msgstr " (ロケール設定の妥当性を確認してください)\n"
 
 #, python-format
+msgid "checking Python executable (%s)\n"
+msgstr "Python ランタイムの検証中 (%s)\n"
+
+#, python-format
+msgid "checking Python version (%s)\n"
+msgstr "Python バージョンの検証中 (%s)\n"
+
+#, python-format
 msgid "checking Python lib (%s)...\n"
 msgstr "Python ライブラリの検証中 (%s)...\n"
 
@@ -12006,6 +11972,12 @@
 msgid "checking templates (%s)...\n"
 msgstr "テンプレートの確認中 (%s)...\n"
 
+msgid " template 'default' not found\n"
+msgstr " テンプレート 'default' が見つかりません\n"
+
+msgid " no template directories found\n"
+msgstr " テンプレート設定ディレクトリが存在しません\n"
+
 msgid " (templates seem to have been installed incorrectly)\n"
 msgstr " (テンプレートのインストールが不適切なようです)\n"
 
@@ -12193,6 +12165,9 @@
 msgid "show data and statistics about a revlog"
 msgstr "revlog ファイルのデータと統計情報の表示"
 
+msgid "print parsed tree after optimizing"
+msgstr "最適化後の解析ツリーの表示"
+
 msgid "parse and apply a revision specification"
 msgstr "リビジョン指定記述の解析/適用"
 
@@ -13081,20 +13056,6 @@
 msgid "cannot use --similarity with --bypass"
 msgstr "--similarity と --bypass は併用できません"
 
-msgid "applied to working directory"
-msgstr "作業領域への適用"
-
-msgid "not a Mercurial patch"
-msgstr "Mercurial 向けのパッチではありません"
-
-msgid "patch is damaged or loses information"
-msgstr "パッチには破損または情報の欠落があります"
-
-#. i18n: refers to a short changeset id
-#, python-format
-msgid "created %s"
-msgstr "%s を作成"
-
 msgid "applying patch from stdin\n"
 msgstr "標準入力からのパッチを適用中\n"
 
@@ -13146,6 +13107,28 @@
 msgid "    See pull for valid source format details."
 msgstr "    対象リポジトリの指定形式は :hg:`help pull` を参照してください。"
 
+msgid "      - show incoming changes with patches and full description::"
+msgstr "      - 取り込み対象リビジョン群の変更内容・コミットログ全体も表示::"
+
+msgid "          hg incoming -vp"
+msgstr "          hg incoming -vp"
+
+msgid "      - show incoming changes excluding merges, store a bundle::"
+msgstr "      - マージ以外の取り込み対象リビジョン群の表示とバンドルへの格納::"
+
+msgid ""
+"          hg in -vpM --bundle incoming.hg\n"
+"          hg pull incoming.hg"
+msgstr ""
+"          hg in -vpM --bundle incoming.hg\n"
+"          hg pull incoming.hg"
+
+msgid "      - briefly list changes inside a bundle::"
+msgstr "      - バンドル内のリビジョン群の簡易表示::"
+
+msgid "          hg in changes.hg -T \"{desc|firstline}\\n\""
+msgstr "          hg in changes.hg -T \"{desc|firstline}\\n\""
+
 msgid ""
 "    Returns 0 if there are incoming changes, 1 otherwise.\n"
 "    "
@@ -13273,6 +13256,19 @@
 "    コミットログの全文も表示されます。"
 
 msgid ""
+"    With --graph the revisions are shown as an ASCII art DAG with the most\n"
+"    recent changeset at the top.\n"
+"    'o' is a changeset, '@' is a working directory parent, 'x' is obsolete,\n"
+"    and '+' represents a fork where the changeset from the lines below is a\n"
+"    parent of the 'o' merge on the same line."
+msgstr ""
+"    --graph 指定がある場合、 最新リビジョンを上にした履歴グラフ (DAG) を、\n"
+"    ASCII アートで描画します。 履歴グラフにおける 'o' はリビジョン、\n"
+"    '@' は作業領域の親、 'x' は廃止 (obsoleted) リビジョンを意味します。\n"
+"    また '+' は、 同一行の 'o' が '+' 下方のリビジョンを親としたマージで、\n"
+"    且つこのマージによって、 履歴が枝分かれしていることを表します。"
+
+msgid ""
 "       log -p/--patch may generate unexpected diff output for merge\n"
 "       changesets, as it will only compare the merge changeset against\n"
 "       its first parent. Also, only files different from BOTH parents\n"
@@ -13868,6 +13864,12 @@
 msgid "pushing to %s\n"
 msgstr "%s への反映中\n"
 
+msgid "default repository not configured!"
+msgstr "デフォルトの連携先が設定されていません"
+
+msgid "see the \"path\" section in \"hg help config\""
+msgstr "\"hg help config\" の \"path\" セクションを参照してください"
+
 msgid "roll back an interrupted transaction"
 msgstr "中断されたトランザクションの取り消し"
 
@@ -14299,6 +14301,12 @@
 msgid "name of access log file to write to"
 msgstr "アクセスログの書き出し先ファイル"
 
+msgid "run server in background"
+msgstr "バックグラウンドでのサーバ実行"
+
+msgid "used internally by daemon mode"
+msgstr "(バックグラウンド実行時での内部用途向け)"
+
 msgid "name of error log file to write to"
 msgstr "エラーログの書き出し先ファイル"
 
@@ -14326,6 +14334,9 @@
 msgid "name of the hgweb config file (DEPRECATED)"
 msgstr "hgweb 設定ファイル位置 (非推奨)"
 
+msgid "name of file to write process ID to"
+msgstr "プロセスIDの書き出し先ファイル"
+
 msgid "for remote clients"
 msgstr "(ホスト間連携での内部用途向け)"
 
@@ -14392,44 +14403,6 @@
 msgid "listening at http://%s%s/%s (bound to %s:%d)\n"
 msgstr "http://%s%s/%s で待ち受け開始(バインド先は %s:%d)\n"
 
-msgid "show untrusted configuration options"
-msgstr "信頼できない設定項目も表示"
-
-msgid "[-u] [NAME]..."
-msgstr "[-u] [NAME]..."
-
-msgid "show combined config settings from all hgrc files"
-msgstr "全設定ファイルによる最終的な設定内容の表示"
-
-msgid "    With no arguments, print names and values of all config items."
-msgstr ""
-"    引数指定が無い場合、 全ての設定項目に対して、 名前と値を表示します。"
-
-msgid ""
-"    With one argument of the form section.name, print just the value\n"
-"    of that config item."
-msgstr ""
-"    'section.name' 形式に合致する引数を1つだけ指定した場合、 その設定項目\n"
-"    値のみを表示します。"
-
-msgid ""
-"    With multiple arguments, print names and values of all config\n"
-"    items with matching section names."
-msgstr ""
-"    複数の引数が指定された場合、 それらをセクション名とみなし、 該当する\n"
-"    セクションの設定項目を全て表示します。"
-
-msgid ""
-"    With --debug, the source (filename and line number) is printed\n"
-"    for each config item."
-msgstr ""
-"    --debug 指定がある場合、 設定項目毎に記述位置(ファイル名と行番号)が\n"
-"    表示されます。\n"
-"    "
-
-msgid "only one config item permitted"
-msgstr "複数の設定項目指定は無効です"
-
 msgid "show status of all files"
 msgstr "全ての状態を表示"
 
@@ -14517,7 +14490,7 @@
 "      ! = missing (deleted by non-hg command, but still tracked)\n"
 "      ? = not tracked\n"
 "      I = ignored\n"
-"        = origin of the previous file listed as A (added)"
+"        = origin of the previous file (with --copies)"
 msgstr ""
 "      M = 変更有り(Modified)\n"
 "      A = 追加登録予定(Added)\n"
@@ -15033,6 +15006,14 @@
 msgstr "作業領域の親 '%s' が未知のリビジョンです!"
 
 #, python-format
+msgid "note: using %s as ancestor of %s and %s\n"
+msgstr "備考: %s を、%s と %s の祖先として使用中\n"
+
+#, python-format
+msgid "      alternatively, use --config merge.preferancestor=%s\n"
+msgstr "      あるいは --config merge.preferancestor=%s を使用してください\n"
+
+#, python-format
 msgid "no such file in rev %s"
 msgstr "リビジョン %s に当該ファイルは存在しません"
 
@@ -15135,6 +15116,18 @@
 msgstr "連携先への新規ブランチ作成は 'hg push --new-branch'"
 
 #, python-format
+msgid "and %s others"
+msgstr "その他 %s 個"
+
+#, python-format
+msgid "remote has heads that are not known locally: %s\n"
+msgstr "連携先には新規ヘッドが存在します: %s\n"
+
+#, python-format
+msgid "remote has heads on branch '%s' that are not known locally: %s\n"
+msgstr "連携先のブランチ '%s' には新規ヘッドが存在します: %s\n"
+
+#, python-format
 msgid "push creates new branch '%s' with multiple heads"
 msgstr "複数ヘッドの新規ブランチ %s が連携先に作成されます"
 
@@ -15160,9 +15153,6 @@
 msgid "new remote heads on branch '%s':\n"
 msgstr "以下の新しいヘッドが連携先のブランチ '%s' に作成されます:\n"
 
-msgid "note: unsynced remote changes!\n"
-msgstr "注意: 連携先での変更点が取り込まれていません!\n"
-
 #, python-format
 msgid "abort: %s\n"
 msgstr "中止: %s\n"
@@ -15383,6 +15373,52 @@
 msgstr "不正なプロファイラ指定 '%s' を無視します\n"
 
 #, python-format
+msgid "%s: not a Mercurial bundle"
+msgstr "%s: Mercurial のバンドル形式ではありません"
+
+#, python-format
+msgid "%s: unknown bundle version %s"
+msgstr "%s: 未知のバンドル形式バージョン %s"
+
+msgid "destination does not support push"
+msgstr "指定の連携先には履歴を反映できません"
+
+#, python-format
+msgid "push includes obsolete changeset: %s!"
+msgstr "履歴反映対象に廃止 (obsolete) リビジョンが含まれます!: %s"
+
+#, python-format
+msgid "push includes unstable changeset: %s!"
+msgstr "履歴反映対象に非永続 (unstable) リビジョンが含まれます!: %s"
+
+#, python-format
+msgid "push includes bumped changeset: %s!"
+msgstr ""
+
+#, python-format
+msgid "push includes divergent changeset: %s!"
+msgstr "履歴反映対象に分岐 (divergent) した後継リビジョンが含まれます!: %s"
+
+#, python-format
+msgid "updating %s to public failed!\n"
+msgstr "%s のフェーズの public 化に失敗!\n"
+
+#, python-format
+msgid "cannot lock source repo, skipping local %s phase update\n"
+msgstr "リポジトリをロックできないため、ローカルの %s フェーズ更新を省略\n"
+
+msgid "failed to push some obsolete markers!\n"
+msgstr "リビジョンの廃止情報の反映に失敗しました!\n"
+
+msgid "requesting all changes\n"
+msgstr "全リビジョンを取得中\n"
+
+msgid ""
+"partial pull cannot be done because other repository doesn't support "
+"changegroupsubset."
+msgstr "連携先の changegroupsubset 機能未対応により、 部分取り込みできません。"
+
+#, python-format
 msgid "*** failed to import extension %s from %s: %s\n"
 msgstr "*** %s のインポートに失敗 (%s): %s\n"
 
@@ -15942,6 +15978,9 @@
 msgid "basic commands:"
 msgstr "基本コマンド:"
 
+msgid "debug commands (internal and unsupported):"
+msgstr "デバッグ用コマンド (内部用途向けで未保証):"
+
 msgid "list of commands:"
 msgstr "コマンド一覧:"
 
@@ -16219,11 +16258,11 @@
 "    Mercurial は記述順序通りに、 各位置のファイル所在確認を行います。"
 
 msgid ""
-".. note:: The registry key ``HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node"
+"   The registry key ``HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node"
 "\\Mercurial``\n"
 "   is used when running 32-bit Python on 64-bit Windows."
 msgstr ""
-".. note:: 32-bit Python を 64-bit Windows で動作させる場合は、\n"
+"   32-bit Python を 64-bit Windows で動作させる場合は、\n"
 "   ``HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Mercurial``\n"
 "   レジストリキーが使用されます。"
 
@@ -16477,11 +16516,11 @@
 msgstr "    stable5 = latest -b stable"
 
 msgid ""
-".. note:: It is possible to create aliases with the same names as\n"
+"   It is possible to create aliases with the same names as\n"
 "   existing commands, which will then override the original\n"
 "   definitions. This is almost always a bad idea!"
 msgstr ""
-".. note:: 既存コマンドと同名の別名定義は、 既存コマンドを上書きします。\n"
+"   既存コマンドと同名の別名定義は、 既存コマンドを上書きします。\n"
 "   このような別名定義は、 大概悲惨な結果を招きます!"
 
 msgid ""
@@ -16543,11 +16582,11 @@
 "``$HG_ARGS`` は ``echo foo`` に置換されます。"
 
 msgid ""
-".. note:: Some global configuration options such as ``-R`` are\n"
+"   Some global configuration options such as ``-R`` are\n"
 "   processed before shell aliases and will thus not be passed to\n"
 "   aliases."
 msgstr ""
-".. note:: 幾つかのグローバルオプション (例: ``-R``) の処理は、\n"
+"   幾つかのグローバルオプション (例: ``-R``) の処理は、\n"
 "   シェル別名の解釈前に実施されるため、 シェル別名に対して、\n"
 "   これらを指定することはできません。"
 
@@ -16816,11 +16855,11 @@
 "それぞれ置換されます。"
 
 msgid ""
-".. note:: The tempfile mechanism is recommended for Windows systems,\n"
+"   The tempfile mechanism is recommended for Windows systems,\n"
 "   where the standard shell I/O redirection operators often have\n"
 "   strange effects and may corrupt the contents of your files."
 msgstr ""
-".. note:: 標準的なシェルの I/O リダイレクトが、 予期せぬ結果や、\n"
+"   標準的なシェルの I/O リダイレクトが、 予期せぬ結果や、\n"
 "   ファイル内容の破壊に繋がる  Windows のような環境では、\n"
 "   tempfile 機構の使用がお勧めです。"
 
@@ -17566,25 +17605,25 @@
 "  失敗した場合 (例: 衝突解消の失敗等) は ``$HG_ERROR=1`` が設定されます。"
 
 msgid ""
-".. note:: It is generally better to use standard hooks rather than the\n"
+"   It is generally better to use standard hooks rather than the\n"
 "   generic pre- and post- command hooks as they are guaranteed to be\n"
 "   called in the appropriate contexts for influencing transactions.\n"
 "   Also, hooks like \"commit\" will be called in all contexts that\n"
 "   generate a commit (e.g. tag) and not just the commit command."
 msgstr ""
-".. note:: コマンド実行に対する pre- または post- 付きの汎用フックは、\n"
+"   コマンド実行に対する pre- または post- 付きの汎用フックは、\n"
 "   トランザクション確定の成否に影響しない状況で呼ばれるため、\n"
 "   汎用フックを使用する方がお勧めです。\n"
 "   \"commit\" のようなフックは、 :hg:`commit` 実行以外にも、\n"
 "   リビジョンを作成する契機 (例: :hg:`tag`) 全てにおいて呼ばれます。"
 
 msgid ""
-".. note:: Environment variables with empty values may not be passed to\n"
+"   Environment variables with empty values may not be passed to\n"
 "   hooks on platforms such as Windows. As an example, ``$HG_PARENT2``\n"
 "   will have an empty value under Unix-like platforms for non-merge\n"
 "   changesets, while it will not be available at all under Windows."
 msgstr ""
-".. note:: Windows のような環境では、 空値の環境変数が、\n"
+"   Windows のような環境では、 空値の環境変数が、\n"
 "   引き渡されない場合があります。 例えば、 非マージリビジョンの場合、\n"
 "   Unix 系環境では空値の ``$HG_PARENT2`` が引き渡されますが、\n"
 "   Windows 環境では、 環境変数自身の引渡しがありません。"
@@ -20866,6 +20905,7 @@
 ":Manual section: 1\n"
 ":Manual group:   Mercurial Manual"
 
+#. do not translate: .. contents::
 msgid ""
 ".. contents::\n"
 "   :backlinks: top\n"
@@ -20939,9 +20979,6 @@
 "repository path\n"
 "    ローカルホスト上のリポジトリへのパスや、 連携先リポジトリの URI の指定"
 
-msgid ".. include:: hg.1.gendoc.txt"
-msgstr ".. include:: hg.1.gendoc.txt"
-
 msgid ""
 "Files\n"
 "\"\"\"\"\""
@@ -21098,9 +21135,6 @@
 "本ソフトウェアは、 バージョン2またはそれ以降の GNU General\n"
 "Public License の元での自由な利用が保証されています。"
 
-msgid ".. include:: common.txt\n"
-msgstr ".. include:: common.txt\n"
-
 msgid ""
 "==========\n"
 " hgignore\n"
@@ -21130,9 +21164,6 @@
 ":Manual section: 5\n"
 ":Manual group:   Mercurial Manual"
 
-msgid ".. include:: hgignore.5.gendoc.txt"
-msgstr ".. include:: hgignore.5.gendoc.txt"
-
 msgid ""
 "Author\n"
 "======\n"
@@ -21169,9 +21200,6 @@
 "本ソフトウェアは、 バージョン2またはそれ以降の GNU General\n"
 "Public License の元での自由な利用が保証されています。"
 
-msgid ".. include:: common.txt"
-msgstr ".. include:: common.txt"
-
 msgid ""
 "Synopsis\n"
 "========"
@@ -21326,11 +21354,9 @@
 "パターン記述を ``^`` で開始してください。"
 
 msgid ""
-".. note::\n"
 "  Patterns specified in other than ``.hgignore`` are always rooted.\n"
 "  Please see :hg:`help patterns` for details."
 msgstr ""
-".. note::\n"
 "  ``.hgignore`` 記述の場合、 作業領域ルートからの相対パスに対して、\n"
 "  途中要素の部分一致でも合致とみなされますが、 通常のパターン指定では、\n"
 "  相対パスの先頭からの合致が要求されます。 詳細は :hg:`help patterns`\n"
@@ -21400,6 +21426,7 @@
 ":Manual section: 5\n"
 ":Manual group:   Mercurial Manual"
 
+#. do not translate: .. contents::
 msgid ""
 ".. contents::\n"
 "   :backlinks: top\n"
@@ -21418,9 +21445,6 @@
 "説明\n"
 "===="
 
-msgid ".. include:: hgrc.5.gendoc.txt"
-msgstr ".. include:: hgrc.5.gendoc.txt"
-
 msgid ""
 "Author\n"
 "======\n"
@@ -21741,7 +21765,6 @@
 "8. ファイルのマージは失敗とみなされ、 手動での :hg:`resolve` が必要です。"
 
 msgid ""
-".. note::\n"
 "   After selecting a merge program, Mercurial will by default attempt\n"
 "   to merge the files using a simple merge algorithm first. Only if it "
 "doesn't\n"
@@ -21752,7 +21775,6 @@
 "by\n"
 "   default unless the file is binary or a symlink."
 msgstr ""
-".. note::\n"
 "   マージツールの選択が完了したなら、\n"
 "   まず最初に Mercurial は単純マージ処理を実施します。\n"
 "   この際に衝突が検出されて、 マージに失敗した場合に限り\n"
@@ -21819,11 +21841,9 @@
 msgstr "別な形式でのパターン記述の際には、 明示的に種別を指定してください。"
 
 msgid ""
-".. note::\n"
 "  Patterns specified in ``.hgignore`` are not rooted.\n"
 "  Please see :hg:`help hgignore` for details."
 msgstr ""
-".. note::\n"
 "  ``.hgignore`` での記述では、 作業領域ルートからの相対パスに対して、\n"
 "  部分一致のみで合致判定されます。 詳細は :hg:`help hgignore`\n"
 "  を参照してください。"
@@ -22031,11 +22051,9 @@
 msgstr " - secret フェーズのリビジョンは push/pull/clone 対象にならない"
 
 msgid ""
-".. note::\n"
 "  Pulling a draft changeset from a publishing server does not mark it\n"
 "  as public on the server side due to the read-only nature of pull."
 msgstr ""
-".. note::\n"
 "  publishing サーバから draft フェーズのリビジョンを pull した場合でも、\n"
 "  『pull は読み出し専用』の原則に則り、 当該リビジョンのフェーズは、\n"
 "  サーバ側では draft のまま (public 化しない) です。"
@@ -22057,21 +22075,17 @@
 "  publish = False"
 
 msgid ""
-".. note::\n"
 "  Servers running older versions of Mercurial are treated as\n"
 "  publishing."
 msgstr ""
-".. note::\n"
 "  旧版の Mercurial で稼動しているサーバは、 publishing 実施に相当します。"
 
 msgid ""
-".. note::\n"
 "   Changesets in secret phase are not exchanged with the server. This\n"
 "   applies to their content: file names, file contents, and changeset\n"
 "   metadata. For technical reasons, the identifier (e.g. d825e4025e39)\n"
 "   of the secret changeset may be communicated to the server."
 msgstr ""
-".. note::\n"
 "   secret フェーズのリビジョンは、 連携先リポジトリに伝搬しません。\n"
 "   ファイル名や履歴メタデータ等の、 履歴情報も伝搬対象から除外されます。\n"
 "   但し、 機能実現上の理由から、 secret フェーズのリビジョンのハッシュ値\n"
@@ -22489,12 +22503,8 @@
 "   このファイルの生成は、 親リポジトリでのコミットの際に、 Mercurial\n"
 "   によって自動的に実施されます。"
 
-msgid ""
-"   .. note::\n"
-"      The ``.hgsubstate`` file should not be edited manually."
-msgstr ""
-"   .. note::\n"
-"      ``.hgsubstate`` は決して手動編集しないでください。"
+msgid "      The ``.hgsubstate`` file should not be edited manually."
+msgstr "      ``.hgsubstate`` は決して手動編集しないでください。"
 
 msgid ""
 "\n"
@@ -22595,6 +22605,13 @@
 "    再帰的には実施されません。"
 
 msgid ""
+":cat: cat currently only handles exact file matches in subrepos.\n"
+"    Git and Subversion subrepositories are currently ignored."
+msgstr ""
+":cat: 現状では、 サブリポジトリ中のファイルと厳密一致した場合のみ、\n"
+"    処理を実施します。 Git および Subversion 形式の場合は何も実施しません。"
+
+msgid ""
 ":commit: commit creates a consistent snapshot of the state of the\n"
 "    entire project and its subrepositories. If any subrepositories\n"
 "    have been modified, Mercurial will abort.  Mercurial can be made\n"
@@ -22831,6 +22848,9 @@
 msgid "- if(expr, then[, else])"
 msgstr "- if(expr, then[, else])"
 
+msgid "- ifcontains(expr, expr, then[, else])"
+msgstr "- ifcontains(expr, expr, then[, else])"
+
 msgid "- ifeq(expr, expr, then[, else])"
 msgstr "- ifeq(expr, expr, then[, else])"
 
@@ -22840,9 +22860,15 @@
 msgid "- label(label, expr)"
 msgstr "- label(label, expr)"
 
+msgid "- revset(query[, formatargs])"
+msgstr "- revset(query[, formatargs])"
+
 msgid "- rstdoc(text, style)"
 msgstr "- rstdoc(text, style)"
 
+msgid "- shortest(node)"
+msgstr "- shortest(node)"
+
 msgid "- strip(text[, chars])"
 msgstr "- strip(text[, chars])"
 
@@ -22917,8 +22943,24 @@
 msgid "- Display the contents of the 'extra' field, one per line::"
 msgstr "- リビジョンの 'extra' 情報の内容を1行1データで表示::"
 
-msgid "   $ hg log -r 0 --template \"{join(extras, '\\n')}\\n\"\n"
-msgstr "   $ hg log -r 0 --template \"{join(extras, '\\n')}\\n\"\n"
+msgid "   $ hg log -r 0 --template \"{join(extras, '\\n')}\\n\""
+msgstr "   $ hg log -r 0 --template \"{join(extras, '\\n')}\\n\""
+
+msgid "- Mark the current bookmark with '*'::"
+msgstr "- 現在アクティブなブックマークに '*' を表示::"
+
+msgid ""
+"   $ hg log --template \"{bookmarks % '{bookmark}{ifeq(bookmark, current, \\"
+"\"*\\\")} '}\\n\""
+msgstr ""
+"   $ hg log --template \"{bookmarks % '{bookmark}{ifeq(bookmark, current, \\"
+"\"*\\\")} '}\\n\""
+
+msgid "- Mark the working copy parent with '@'::"
+msgstr "- 作業領域の親リビジョンに '@' を表示::"
+
+msgid "   $ hg log --template \"{ifcontains(rev, revset('.'), '@')}\\n\"\n"
+msgstr "   $ hg log --template \"{ifcontains(rev, revset('.'), '@')}\\n\"\n"
 
 msgid "Valid URLs are of the form::"
 msgstr "有効な URL 指定は以下の形式です::"
@@ -23176,10 +23218,6 @@
 msgstr " 更新ファイル数 %d、 追加 %d 行(+)、 削除 %d 行(-)\n"
 
 #, python-format
-msgid "calling hook %s: %s\n"
-msgstr "フック %s:%s 呼び出し中\n"
-
-#, python-format
 msgid "%s hook is invalid (\"%s\" not in a module)"
 msgstr "フック %s は不正です(モジュール中に \"%s\" がありません)"
 
@@ -23202,6 +23240,10 @@
 msgstr "フック %s は不正です(\"%s\" は呼び出し可能ではありません)"
 
 #, python-format
+msgid "calling hook %s: %s\n"
+msgstr "フック %s:%s 呼び出し中\n"
+
+#, python-format
 msgid "error: %s hook failed: %s\n"
 msgstr "エラー: フック %s の失敗: %s\n"
 
@@ -23367,6 +23409,10 @@
 msgstr "%s のロック (%rが保持) の解放を待っています\n"
 
 #, python-format
+msgid "got lock after %s seconds\n"
+msgstr "%s 秒遅れでロックを獲得\n"
+
+#, python-format
 msgid "repository %s"
 msgstr "リポジトリ '%s'"
 
@@ -23418,78 +23464,6 @@
 msgid "trouble committing %s!\n"
 msgstr "%s のコミットに失敗しました!\n"
 
-msgid "requesting all changes\n"
-msgstr "全リビジョンを取得中\n"
-
-msgid ""
-"partial pull cannot be done because other repository doesn't support "
-"changegroupsubset."
-msgstr "連携先の changegroupsubset 機能未対応により、 部分取り込みできません。"
-
-msgid "destination does not support push"
-msgstr "指定の連携先には履歴を反映できません"
-
-#, python-format
-msgid "cannot lock source repo, skipping local %s phase update\n"
-msgstr "リポジトリをロックできないため、ローカルの %s フェーズ更新を省略\n"
-
-#, python-format
-msgid "push includes obsolete changeset: %s!"
-msgstr "履歴反映対象に廃止 (obsolete) リビジョンが含まれます!: %s"
-
-#, python-format
-msgid "push includes unstable changeset: %s!"
-msgstr "履歴反映対象に非永続 (unstable) リビジョンが含まれます!: %s"
-
-#, python-format
-msgid "push includes bumped changeset: %s!"
-msgstr ""
-
-#, python-format
-msgid "push includes divergent changeset: %s!"
-msgstr "履歴反映対象に分岐 (divergent) した後継リビジョンが含まれます!: %s"
-
-#, python-format
-msgid "updating %s to public failed!\n"
-msgstr "%s のフェーズの public 化に失敗!\n"
-
-#, python-format
-msgid "%d changesets found\n"
-msgstr "%d 個のリビジョンがあります\n"
-
-msgid "adding changesets\n"
-msgstr "リビジョンを追加中\n"
-
-msgid "chunks"
-msgstr "チャンク"
-
-msgid "received changelog group is empty"
-msgstr "受信した変更履歴は空です"
-
-msgid "adding manifests\n"
-msgstr "マニフェストを追加中\n"
-
-msgid "adding file changes\n"
-msgstr "ファイルの変更を追加中\n"
-
-#, python-format
-msgid " (%+d heads)"
-msgstr " (%+d個のヘッド)"
-
-#, python-format
-msgid "added %d changesets with %d changes to %d files%s\n"
-msgstr "%d 個のリビジョン(%d の変更を %d ファイルに適用)を追加%s\n"
-
-msgid "received file revlog group is empty"
-msgstr "ファイルのリビジョンログが空です"
-
-msgid "received spurious file revlog entry"
-msgstr "ファイルのリビジョンログが不正な情報を含んでいます"
-
-#, python-format
-msgid "missing file data for %s:%s - run hg verify"
-msgstr "%s:%s のファイルデータが不在です - hg verify を実施してください"
-
 msgid "unexpected response from remote server:"
 msgstr "連携先のサーバから予期しない返信:"
 
@@ -23592,8 +23566,9 @@
 msgid "diff context lines count must be an integer, not %r"
 msgstr "差分コンテキストでの行数指定が不正です: %r"
 
-msgid "unsupported merge state record:"
-msgstr "未サポートなマージ状態が記録されています:"
+#, python-format
+msgid "unsupported merge state record: %s"
+msgstr "未サポートなマージ状態が記録されています: %s"
 
 #, python-format
 msgid "warning: cannot merge flags for %s\n"
@@ -23615,24 +23590,6 @@
 msgstr "管理ファイル一覧の解決中\n"
 
 #, python-format
-msgid ""
-"local changed %s which remote deleted\n"
-"use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
-msgstr ""
-"変更したファイル %s が、マージ対象リビジョンで登録除外されています。\n"
-"変更:(c)hanged と登録除外:(d)elete のどちらを採用しますか?$$ &Changed $$ "
-"&Delete"
-
-#, python-format
-msgid ""
-"remote changed %s which local deleted\n"
-"use (c)hanged version or leave (d)eleted?$$ &Changed $$ &Deleted"
-msgstr ""
-"登録除外済みのファイル %s が、マージ対象リビジョンで変更されています。\n"
-"変更:(c)hanged と登録除外:(d)elete のどちらを採用しますか?$$ &Changed $$ "
-"&Deleted"
-
-#, python-format
 msgid "update failed to remove %s: %s!\n"
 msgstr "%s の削除に失敗: %s!\n"
 
@@ -23655,6 +23612,54 @@
 msgid "note: possible conflict - %s was deleted and renamed to:\n"
 msgstr "備考: 衝突の可能性 - 削除と平行して %s への改名があります:\n"
 
+#, python-format
+msgid "note: merging %s and %s using bids from ancestors %s\n"
+msgstr "備考: 以下の祖先の評価選考を元に %s と %s をマージ中: %s\n"
+
+#, python-format
+msgid ""
+"\n"
+"calculating bids for ancestor %s\n"
+msgstr ""
+"\n"
+"祖先 %s の評価値を算出中\n"
+
+msgid ""
+"\n"
+"auction for merging merge bids\n"
+msgstr ""
+"\n"
+"評価値の選考中\n"
+
+#, python-format
+msgid " %s: multiple bids for merge action:\n"
+msgstr " %s: マージ処理の候補が複数ありあます:\n"
+
+#, python-format
+msgid " %s: ambiguous merge - picked %s action\n"
+msgstr " %s: 複数の処理候補から %s 処理を選択しました\n"
+
+msgid "end of auction"
+msgstr "選考終了"
+
+#, python-format
+msgid ""
+"local changed %s which remote deleted\n"
+"use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
+msgstr ""
+"変更したファイル %s が、マージ対象リビジョンで登録除外されています。\n"
+"変更:(c)hanged と登録除外:(d)elete のどちらを採用しますか?$$ &Changed $$ "
+"&Delete"
+
+#, python-format
+msgid ""
+"remote changed %s which local deleted\n"
+"use (c)hanged version or leave (d)eleted?$$ &Changed $$ &Deleted"
+msgstr ""
+"登録除外済みのファイル %s が、マージ対象リビジョンで変更されています。\n"
+"変更:(c)hanged と登録除外:(d)elete のどちらを採用しますか?$$ &Changed $$ "
+"&Deleted"
+
 msgid "merging with a working directory ancestor has no effect"
 msgstr "作業領域の祖先とのマージは意味がありません"
 
@@ -23723,11 +23728,9 @@
 msgid "unknown key: %r"
 msgstr "未知のキーです: %r"
 
-msgid "unexpected old value"
-msgstr "旧値の指定は想定外です"
-
-msgid "failed to push some obsolete markers!\n"
-msgstr "リビジョンの廃止情報の反映に失敗しました!\n"
+#, python-format
+msgid "unexpected old value for %r"
+msgstr "%r に対する旧値の指定は想定外です"
 
 #, python-format
 msgid "unexpected token: %s"
@@ -23985,7 +23988,7 @@
 
 msgid ""
 "``ancestor(*changeset)``\n"
-"    Greatest common ancestor of the changesets."
+"    A greatest common ancestor of the changesets."
 msgstr ""
 "``ancestor(*changeset)``\n"
 "    指定リビジョン郡に共通な最新の祖先。"
@@ -24022,6 +24025,23 @@
 msgstr "author には文字列を指定してください"
 
 msgid ""
+"``only(set, [set])``\n"
+"    Changesets that are ancestors of the first set that are not ancestors\n"
+"    of any other head in the repo. If a second set is specified, the result\n"
+"    is ancestors of the first set that are not ancestors of the second set\n"
+"    (i.e. ::<set1> - ::<set2>)."
+msgstr ""
+"``only(set1, [set2])``\n"
+"    第1引数リビジョン群の祖先で、 且つ第2引数リビジョン群の祖先でないもの\n"
+"    (::<set1> - ::<set2> と等価)。 第2引数省略時は、 構造的ヘッドの中で、\n"
+"    第1引数とその子孫群に含まれないヘッドが、 比較対象として使用されます。\n"
+"    (※ 訳注: ::<set1> - ::(heads() - heads(<set2>::)) と等価)"
+
+#. i18n: "only" is a keyword
+msgid "only takes one or two arguments"
+msgstr "only の引数は1つまたは2つです"
+
+msgid ""
 "``bisect(string)``\n"
 "    Changesets marked in the specified bisect status:"
 msgstr ""
@@ -24146,12 +24166,12 @@
 
 msgid ""
 "``contains(pattern)``\n"
-"    Revision contains a file matching pattern. See :hg:`help patterns`\n"
-"    for information about file patterns."
+"    The revision's manifest contains a file matching pattern (but might not\n"
+"    modify it). See :hg:`help patterns` for information about file patterns."
 msgstr ""
 "``contains(pattern)``\n"
 "    パターンに合致する名前のファイルが存在するリビジョン群。\n"
-"    パターンの詳細は :hg:`help patterns` を参照。"
+"    (変更の有無は判定しません) パターンの詳細は :hg:`help patterns` を参照。"
 
 msgid ""
 "    The pattern without explicit kind like ``glob:`` is expected to be\n"
@@ -24297,14 +24317,17 @@
 "    パターンに合致するファイルの変更に関連付けられたリビジョン群。"
 
 msgid ""
-"    For performance reasons, ``filelog()`` does not show every changeset\n"
-"    that affects the requested file(s). See :hg:`help log` for details. For\n"
-"    a slower, more accurate result, use ``file()``."
-msgstr ""
-"    指定ファイルの関連リビジョンであっても、 ``filelog()`` によって、\n"
-"    必ずしも列挙されるとは限らないのは、 性能上の理由からです。\n"
-"    この挙動の詳細に関しては :hg:`help log` を参照してください。\n"
-"    低速でも、 正確な結果が必要な場合は ``file()`` を使用してください。"
+"    For performance reasons, visits only revisions mentioned in the file-"
+"level\n"
+"    filelog, rather than filtering through all changesets (much faster, but\n"
+"    doesn't include deletes or duplicate changes). For a slower, more "
+"accurate\n"
+"    result, use ``file()``."
+msgstr ""
+"    性能上の理由から、 全リビジョンに対する変更実施の有無確認ではなく、\n"
+"    ファイル単位の履歴記録を元に抽出します (高速な代わりに、 登録除外や、\n"
+"    同一変更の複数実施などは、 検出できません)。  実行性能の高さよりも、\n"
+"    正確な結果が必要な場合は ``file()`` を使用してください。"
 
 #. i18n: "filelog" is a keyword
 msgid "filelog requires a pattern"
@@ -24522,6 +24545,9 @@
 "``min(set)``\n"
 "    指定リビジョン群中で、 リビジョン番号が最小のもの。"
 
+msgid "_missingancestors requires two arguments"
+msgstr "_missingancestors の引数は2つです"
+
 msgid ""
 "``modifies(pattern)``\n"
 "    Changesets modifying files matched by pattern."
@@ -24942,8 +24968,12 @@
 msgstr ".hg/requires ファイルが破損しています"
 
 #, python-format
-msgid "unknown repository format: requires features '%s' (upgrade Mercurial)"
-msgstr "未知のリポジトリ形式です: '%s' サポートが必要 (要 Mercurial 更新)"
+msgid "repository requires features unknown to this Mercurial: %s"
+msgstr "リポジトリの要求する機能が実行中のMercurialにとって未知です: %s"
+
+msgid ""
+"see http://mercurial.selenic.com/wiki/MissingRequirement for more information"
+msgstr "詳細は http://mercurial.selenic.com/wiki/MissingRequirement 参照"
 
 msgid "searching for changes\n"
 msgstr "変更点を探索中\n"
@@ -25681,6 +25711,9 @@
 msgid "fill expects an integer width"
 msgstr "fill には数値を指定してください"
 
+msgid "pad() expects two to four arguments"
+msgstr "pad() の引数は2つから4つの間です"
+
 #. i18n: "get" is a keyword
 msgid "get() expects two arguments"
 msgstr "get() の引数は2つです"
@@ -25693,6 +25726,10 @@
 msgid "if expects two or three arguments"
 msgstr "if は2または3の引数が必要です"
 
+#. i18n: "ifcontains" is a keyword
+msgid "ifcontains expects three or four arguments"
+msgstr "ifcontains は3または4の引数が必要です"
+
 #. i18n: "ifeq" is a keyword
 msgid "ifeq expects three or four arguments"
 msgstr "ifeq は3または4の引数が必要です"
@@ -25701,10 +25738,17 @@
 msgid "join expects one or two arguments"
 msgstr "join の引数は1つまたは2つです"
 
+#. i18n: "revset" is a keyword
+msgid "revset expects one or more arguments"
+msgstr "revset の引数は1つまたは2つです"
+
 #. i18n: "rstdoc" is a keyword
 msgid "rstdoc expects two arguments"
 msgstr "rstdoc の引数は2つです"
 
+msgid "shortest() expects one or two arguments"
+msgstr "shortest() の引数は1つまたは2つです"
+
 msgid "strip expects one or two arguments"
 msgstr "strip の引数は1つまたは2つです"
 
@@ -25745,6 +25789,10 @@
 msgid "failed to truncate %s\n"
 msgstr "%s の切り詰めに失敗\n"
 
+#, python-format
+msgid "failed to recover %s\n"
+msgstr "%s の復旧に失敗\n"
+
 msgid "transaction abort!\n"
 msgstr "トランザクションを中断します!\n"
 
@@ -25754,6 +25802,10 @@
 msgid "rollback failed - please run hg recover\n"
 msgstr "ロールバックに失敗しました - 'hg recover' してください\n"
 
+#, python-format
+msgid "couldn't read journal entry %r!\n"
+msgstr "ジャーナルファイル中のエントリ %r の解析に失敗\n"
+
 msgid "already have changeset "
 msgstr "既にあるリビジョンです "
 
@@ -25788,8 +25840,11 @@
 msgid "no username found, using '%s' instead\n"
 msgstr "ユーザ名が不明のため、 '%s' を使用\n"
 
-msgid "no username supplied (see \"hg help config\")"
-msgstr "ユーザ名が未指定です(\"hg help config\" 参照)"
+msgid "no username supplied"
+msgstr "ユーザ名が未指定です"
+
+msgid "use \"hg config --edit\" to set your username"
+msgstr "\"hg config --edit\" 実行でユーザ名を設定してください"
 
 #, python-format
 msgid "username %s contains a newline\n"
@@ -26176,8 +26231,5 @@
 msgid "look up remote changes"
 msgstr "連携先での変更の検索"
 
-msgid "push failed:"
-msgstr "履歴反映に失敗:"
-
 msgid "number of cpus must be an integer"
 msgstr "CPU 数には数値を指定してください"
--- a/i18n/pt_BR.po	Thu Apr 17 16:56:15 2014 -0400
+++ b/i18n/pt_BR.po	Thu May 01 19:24:03 2014 -0500
@@ -31,7 +31,7 @@
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
-"POT-Creation-Date: 2014-01-24 22:49-0200\n"
+"POT-Creation-Date: 2014-04-30 10:50-0300\n"
 "PO-Revision-Date: 2014-01-25 23:15-0200\n"
 "Last-Translator: Leonardo Bueno Postacchini <notivago@gmail.com>\n"
 "Language-Team: Brazilian Portuguese\n"
@@ -225,9 +225,6 @@
 "Exemplo de Configuração\n"
 "-----------------------"
 
-msgid "::"
-msgstr "::"
-
 msgid "  [hooks]"
 msgstr "  [hooks]"
 
@@ -1667,6 +1664,9 @@
 msgid "TYPE"
 msgstr "TIPO"
 
+msgid "available colors:\n"
+msgstr "cores disponíveis:\n"
+
 msgid "import revisions from foreign VCS repositories into Mercurial"
 msgstr "importa revisões de repositórios de outros sistemas para o Mercurial"
 
@@ -2373,8 +2373,8 @@
 msgstr "não foi possível encontrar ferramenta \"%s\" necessária"
 
 #, python-format
-msgid "splicemap entry %s is not a valid revision identifier"
-msgstr "a entrada %s do splicemap não é um identificador de revisão válido"
+msgid "%s entry %s is not a valid revision identifier"
+msgstr "%s: entrada %s não é um identificador válido de revisão"
 
 #, python-format
 msgid "%s error:\n"
@@ -3021,9 +3021,6 @@
 "  [repository]\n"
 "  native = LF"
 
-msgid ".. note::"
-msgstr ".. note::"
-
 msgid ""
 "   The rules will first apply when files are touched in the working\n"
 "   copy, e.g. by updating to null and back to tip to touch all files."
@@ -4033,20 +4030,24 @@
 msgid ""
 " # Edit history between c561b4e977df and 7c2fd3b9020c\n"
 " #\n"
+" # Commits are listed from least to most recent\n"
+" #\n"
 " # Commands:\n"
 " #  p, pick = use commit\n"
 " #  e, edit = use commit, but stop for amending\n"
-" #  f, fold = use commit, but fold into previous commit (combines N and N-1)\n"
+" #  f, fold = use commit, but combine it with the one above\n"
 " #  d, drop = remove commit from history\n"
 " #  m, mess = edit message without changing commit content\n"
 " #"
 msgstr ""
 " # Editar o histórico entre c561b4e977df e 7c2fd3b9020c\n"
 " #\n"
+" # Revisões são listadas da menos para a mais recente\n"
+" #\n"
 " # Comandos:\n"
 " #  p, pick = use a revisão\n"
 " #  e, edit = use a revisão, mas pare para emendar\n"
-" #  f, fold = use a revisão, mas combine com a anterior (combina N e N-1)\n"
+" #  f, fold = use a revisão, mas combine com a revisão acima\n"
 " #  d, drop = remova a revisão do histórico\n"
 " #  m, mess = edite a mensagem sem mudar o conteúdo da revisão\n"
 " #"
@@ -4253,20 +4254,24 @@
 msgid ""
 "# Edit history between %s and %s\n"
 "#\n"
+"# Commits are listed from least to most recent\n"
+"#\n"
 "# Commands:\n"
 "#  p, pick = use commit\n"
 "#  e, edit = use commit, but stop for amending\n"
-"#  f, fold = use commit, but fold into previous commit (combines N and N-1)\n"
+"#  f, fold = use commit, but combine it with the one above\n"
 "#  d, drop = remove commit from history\n"
 "#  m, mess = edit message without changing commit content\n"
 "#\n"
 msgstr ""
 "# Editar o histórico entre %s e %s\n"
 "#\n"
+"# Revisões são listadas da menos para a mais recente\n"
+"#\n"
 "# Comandos:\n"
 "#  p, pick = use a revisão\n"
 "#  e, edit = use a revisão, mas pare para emendar\n"
-"#  f, fold = use a revisão, mas combine com a anterior (combina N e N-1)\n"
+"#  f, fold = use a revisão, mas combine com a revisão acima\n"
 "#  d, drop = remova a revisão do histórico\n"
 "#  m, mess = edite a mensagem sem mudar o conteúdo da revisão\n"
 "# #\n"
@@ -4402,6 +4407,9 @@
 msgid "histedit requires exactly one ancestor revision"
 msgstr "histedit requer exatamente uma revisão ancestral"
 
+msgid "The specified revisions must have exactly one common root"
+msgstr "As revisões especificadas devem ter exatamente uma raiz comum"
+
 #, python-format
 msgid "%s is not an ancestor of working directory"
 msgstr "%s não é um ancestral do diretório de trabalho"
@@ -4464,210 +4472,6 @@
 msgid "use 'hg histedit --continue' or 'hg histedit --abort'"
 msgstr "use 'hg histedit --continue' ou 'hg histedit --abort'"
 
-msgid "accelerate status report using Linux's inotify service"
-msgstr "acelera informações de status usando o serviço inotify do Linux"
-
-msgid "start an inotify server for this repository"
-msgstr "inicia um servidor inotify para este repositório"
-
-msgid "debugging information for inotify extension"
-msgstr "informação de depuração para a extensão inotify"
-
-msgid ""
-"    Prints the list of directories being watched by the inotify server.\n"
-"    "
-msgstr ""
-"    Imprime a lista de diretórios monitorados pelo servidor inotify.\n"
-"    "
-
-msgid "directories being watched:\n"
-msgstr "diretórios monitorados:\n"
-
-msgid "run server in background"
-msgstr "executa o servidor em segundo plano"
-
-msgid "used internally by daemon mode"
-msgstr "usado internamente pelo modo daemon"
-
-msgid "minutes to sit idle before exiting"
-msgstr "minutos a aguardar antes de sair"
-
-msgid "name of file to write process ID to"
-msgstr "nome do arquivo no qual escrever o ID do processo"
-
-msgid "hg inserve [OPTION]..."
-msgstr "hg inserve [OPÇÃO]..."
-
-msgid "inotify-client: found dead inotify server socket; removing it\n"
-msgstr ""
-"inotify-client: encontrado socket de um servidor inotify morto; removendo\n"
-
-#, python-format
-msgid "inotify-client: could not start inotify server: %s\n"
-msgstr "inotify-client: não foi possível iniciar servidor inotify: %s\n"
-
-#, python-format
-msgid "inotify-client: could not talk to new inotify server: %s\n"
-msgstr ""
-"inotify-client: não foi possível falar com o novo servidor inotify: %s\n"
-
-#, python-format
-msgid "inotify-client: failed to contact inotify server: %s\n"
-msgstr "inotify-client: falha ao contatar servidor inotify: %s\n"
-
-msgid "inotify-client: received empty answer from inotify server"
-msgstr "inotify-client: resposta vazia recebida do servidor inotify"
-
-#, python-format
-msgid "(inotify: received response from incompatible server version %d)\n"
-msgstr ""
-"(inotify: recebida resposta de uma versão de servidor incompatível %d)\n"
-
-#, python-format
-msgid "(inotify: received '%s' response when expecting '%s')\n"
-msgstr "(inotify: recebida resposta '%s' quando '%s' era esperada)\n"
-
-msgid "this system does not seem to support inotify"
-msgstr "esse sistema parece não suportar inotify"
-
-#, python-format
-msgid "*** the current per-user limit on the number of inotify watches is %s\n"
-msgstr "*** o limite atual por usuário do número de inotify watches é %s\n"
-
-msgid "*** this limit is too low to watch every directory in this repository\n"
-msgstr ""
-"*** este limite é muito baixo para acompanhar cada diretório neste "
-"repositório\n"
-
-msgid "*** counting directories: "
-msgstr "*** contando diretórios: "
-
-#, python-format
-msgid "found %d\n"
-msgstr "encontrado %d\n"
-
-#, python-format
-msgid "*** to raise the limit from %d to %d (run as root):\n"
-msgstr "*** para elevar o limite de %d para %d (rode como root):\n"
-
-#, python-format
-msgid "***  echo %d > %s\n"
-msgstr "***  echo %d > %s\n"
-
-#, python-format
-msgid "cannot watch %s until inotify watch limit is raised"
-msgstr ""
-"impossível observar %s até que o limite de observação do inotify seja "
-"alcançado"
-
-#, python-format
-msgid "inotify service not available: %s"
-msgstr "serviço inotify indisponível: %s"
-
-#, python-format
-msgid "watching %r\n"
-msgstr "observando %r\n"
-
-#, python-format
-msgid "watching directories under %r\n"
-msgstr "observando diretórios sobre %r\n"
-
-#, python-format
-msgid "%s event: created %s\n"
-msgstr "evento %s: criado %s\n"
-
-#, python-format
-msgid "%s event: deleted %s\n"
-msgstr "evento %s: cancelado %s\n"
-
-#, python-format
-msgid "%s event: modified %s\n"
-msgstr "evento %s: modificado %s\n"
-
-#, python-format
-msgid "filesystem containing %s was unmounted\n"
-msgstr "sistema de arquivos contendo %s foi desmontado\n"
-
-#, python-format
-msgid "%s readable: %d bytes\n"
-msgstr "%s legível: %d bytes\n"
-
-#, python-format
-msgid "%s below threshold - unhooking\n"
-msgstr "%s abaixo do limiar - removendo o registro\n"
-
-#, python-format
-msgid "%s reading %d events\n"
-msgstr "%s lendo %d eventos\n"
-
-#, python-format
-msgid "%s hooking back up with %d bytes readable\n"
-msgstr "%s registrando novamente com %d bytes legíveis\n"
-
-msgid "finished setup\n"
-msgstr "setup encerrado\n"
-
-#, python-format
-msgid "status: %r %s -> %s\n"
-msgstr "situação: %r %s -> %s\n"
-
-msgid "rescanning due to .hgignore change\n"
-msgstr "varrendo novamente por mudança no .hgignore\n"
-
-msgid "cannot start: socket is already bound"
-msgstr "não é possível iniciar: o socket já está associado"
-
-#, python-format
-msgid "answering query for %r\n"
-msgstr "respondendo consulta para %r\n"
-
-#, python-format
-msgid "received query from incompatible client version %d\n"
-msgstr "recebida consulta de versão de cliente incompatível %d\n"
-
-#, python-format
-msgid "unrecognized query type: %s\n"
-msgstr "tipo de consulta não reconhecido: %s\n"
-
-msgid "expand expressions into changelog and summaries"
-msgstr "expande expressões no changelog e sumários"
-
-msgid ""
-"This extension allows the use of a special syntax in summaries, which\n"
-"will be automatically expanded into links or any other arbitrary\n"
-"expression, much like InterWiki does."
-msgstr ""
-"Esta extensão permite o uso de uma sintaxe especial em sumários,\n"
-"que será expandida automaticamente para links ou qualquer outra\n"
-"expressão arbitrária, de modo muito semelhante ao que o InterWiki\n"
-"faz."
-
-msgid ""
-"A few example patterns (link to bug tracking, etc.) that may be used\n"
-"in your hgrc::"
-msgstr ""
-"Alguns exemplos de padrões (link para bug tracking, etc.) que podem\n"
-"ser usados em seu hgrc::"
-
-msgid ""
-"  [interhg]\n"
-"  issues = s!issue(\\d+)!<a href=\"http://bts/issue\\1\">issue\\1</a>!\n"
-"  bugzilla = s!((?:bug|b=|(?=#?\\d{4,}))(?:\\s*#?)(\\d+))!<a..=\\2\">\\1</a>!i\n"
-"  boldify = s!(^|\\s)#(\\d+)\\b! <b>#\\2</b>!\n"
-msgstr ""
-"  [interhg]\n"
-"  issues = s!issue(\\d+)!<a href=\"http://bts/issue\\1\">issue\\1</a>!\n"
-"  bugzilla = s!((?:bug|b=|(?=#?\\d{4,}))(?:\\s*#?)(\\d+))!<a..=\\2\">\\1</a>!i\n"
-"  boldify = s!(^|\\s)#(\\d+)\\b! <b>#\\2</b>!\n"
-
-#, python-format
-msgid "interhg: invalid pattern for %s: %s\n"
-msgstr "interhg: padrão inválido para %s: %s\n"
-
-#, python-format
-msgid "interhg: invalid regexp for %s: %s\n"
-msgstr "interhg: expressão regular inválida para %s: %s\n"
-
 msgid "expand keywords in tracked files"
 msgstr "expande palavras chave em arquivos rastreados"
 
@@ -5275,9 +5079,6 @@
 "    Se ORIGEM for omitida, o caminho 'default' será usado. Veja\n"
 "    :hg:`help urls` para mais informações."
 
-msgid "    .. container:: verbose"
-msgstr "    .. container:: verbose"
-
 msgid "      Some examples:"
 msgstr "      Alguns exemplos:"
 
@@ -5543,9 +5344,6 @@
 msgid "not removing %s: file is already untracked\n"
 msgstr "%s não removido: arquivo já não é rastreado\n"
 
-msgid "largefiles: No remote repo\n"
-msgstr "largefiles: Nenhum repositório remoto\n"
-
 msgid "largefiles: no files to upload\n"
 msgstr "largefiles: nenhum arquivo a ser enviado\n"
 
@@ -6763,9 +6561,6 @@
 "    Sem argumentos, imprime as guardas ativas no momento.\n"
 "    Com um argumento, define guardas para o patch pedido."
 
-msgid "    .. note::"
-msgstr "    .. note::"
-
 msgid "       Specifying negative guards now requires '--'."
 msgstr "       A especificação de guardas negativas agora exige '--'."
 
@@ -7995,6 +7790,9 @@
 msgid "no changes found\n"
 msgstr "nenhuma alteração encontrada\n"
 
+msgid "warning: working directory has uncommitted changes\n"
+msgstr "aviso: o diretório de trabalho contém mudanças não consolidadas\n"
+
 msgid "specify at least one changeset with -r or -o"
 msgstr "especifique ao menos uma revisão com -r ou -o"
 
@@ -8464,8 +8262,8 @@
 msgid "cannot specify both a revision and a source"
 msgstr "não se pode especificar ao mesmo tempo uma revisão e uma origem"
 
-msgid "empty \"rev\" revision set - nothing to rebase"
-msgstr "conjunto de revisões \"rev\" vazio - nada para rebasear"
+msgid "empty \"rev\" revision set - nothing to rebase\n"
+msgstr "conjunto de revisões \"rev\" vazio - nada para rebasear\n"
 
 msgid "empty \"source\" revision set - nothing to rebase"
 msgstr "conjunto de revisões \"fonte\" vazio - nada para rebasear"
@@ -8517,6 +8315,10 @@
 msgid "see hg help phases for details"
 msgstr "veja hg help phases para mais detalhes"
 
+#, python-format
+msgid "reopening closed branch head %s\n"
+msgstr "reabrindo cabeça de ramo fechada %s\n"
+
 msgid "cannot collapse multiple named branches"
 msgstr "não é possível colapsar múltiplos ramos nomeados"
 
@@ -9132,6 +8934,9 @@
 msgid "keep shelve after unshelving"
 msgstr "mantém a mudança na gaveta após o unshelve"
 
+msgid "set date for temporary commits (DEPRECATED)"
+msgstr "define a data de consolidações temporárias (OBSOLETO)"
+
 msgid "hg unshelve [SHELVED]"
 msgstr "hg unshelve [MUDANÇA]"
 
@@ -9197,6 +9002,16 @@
 msgid "unshelving change '%s'\n"
 msgstr "executando unshelve da mudança '%s'\n"
 
+msgid ""
+"temporarily committing pending changes (restore with 'hg unshelve "
+"--abort')\n"
+msgstr ""
+"consolidando temporariamente as mudanças pendentes (podem ser restauradas "
+"com 'hg unshelve --abort')\n"
+
+msgid "rebasing shelved changes\n"
+msgstr "rebaseando mudanças engavetadas\n"
+
 msgid "unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')"
 msgstr ""
 "conflitos não resolvidos (veja hg 'resolve', e em seguida 'hg unshelve "
@@ -9231,8 +9046,8 @@
 msgid "output diffstat-style summary of changes"
 msgstr "imprime sumário de mudanças no estilo diffstat"
 
-msgid "hg shelve"
-msgstr "hg shelve"
+msgid "hg shelve [OPTION]... [FILE]..."
+msgstr "hg shelve [OPÇÃO]... [ARQUIVO]..."
 
 msgid "save and set aside changes from the working directory"
 msgstr "salva e separa mudanças do diretório de trabalho"
@@ -9785,8 +9600,8 @@
 msgid "[win32mbcs] cannot activate on this platform.\n"
 msgstr "[win32mbcs] não se pode ativar nesta plataforma.\n"
 
-msgid "perform automatic newline conversion"
-msgstr "faz conversão automática de tipo de quebras de linha"
+msgid "perform automatic newline conversion (DEPRECATED)"
+msgstr "faz conversão automática de tipo de quebras de linha (OBSOLETO)"
 
 msgid ""
 "  Deprecation: The win32text extension requires each user to configure\n"
@@ -10000,14 +9815,14 @@
 msgstr "marcador divergente %s guardado como %s\n"
 
 #, python-format
+msgid "bookmark %s does not exist on the local or remote repository!\n"
+msgstr "o marcador %s não existe nem no repositório local nem no remoto!\n"
+
+#, python-format
 msgid "updating bookmark %s failed!\n"
 msgstr "a atualização do marcador %s falhou!\n"
 
 #, python-format
-msgid "bookmark %s does not exist on the local or remote repository!\n"
-msgstr "o marcador %s não existe nem no repositório local nem no remoto!\n"
-
-#, python-format
 msgid "exporting bookmark %s\n"
 msgstr "exportando marcador %s\n"
 
@@ -10021,6 +9836,16 @@
 msgid "no changed bookmarks found\n"
 msgstr "nenhum marcador modificado encontrado\n"
 
+msgid "not a Mercurial bundle"
+msgstr "não é um arquivo de bundle do Mercurial"
+
+#, python-format
+msgid "unknown bundle version %s"
+msgstr "versão de bundle %s desconhecida"
+
+msgid "push failed:"
+msgstr "o push falhou:"
+
 msgid "unknown parent"
 msgstr "pai desconhecido"
 
@@ -10039,14 +9864,6 @@
 msgid "invalid chunk length %d"
 msgstr "comprimento de trecho inválido %d"
 
-#, python-format
-msgid "%s: not a Mercurial bundle"
-msgstr "%s: não é um arquivo de bundle do Mercurial"
-
-#, python-format
-msgid "%s: unknown bundle version %s"
-msgstr "%s: versão de bundle %s desconhecida"
-
 msgid "bundling"
 msgstr "criando bundle"
 
@@ -10057,6 +9874,43 @@
 msgid "empty or missing revlog for %s"
 msgstr "revlog vazio ou não encontrado para %s"
 
+#, python-format
+msgid "%d changesets found\n"
+msgstr "%d revisões encontradas\n"
+
+msgid "received file revlog group is empty"
+msgstr "grupo recebido de arquivos revlog vazio"
+
+msgid "received spurious file revlog entry"
+msgstr "recebida entrada de revlog de arquivo espúria"
+
+#, python-format
+msgid "missing file data for %s:%s - run hg verify"
+msgstr "faltando dados de arquivo para %s:%s - execute hg verify"
+
+msgid "adding changesets\n"
+msgstr "adicionando revisões\n"
+
+msgid "chunks"
+msgstr "trechos"
+
+msgid "received changelog group is empty"
+msgstr "grupo de changelogs recebido é vazio"
+
+msgid "adding manifests\n"
+msgstr "adicionando manifestos\n"
+
+msgid "adding file changes\n"
+msgstr "adicionando mudanças em arquivos\n"
+
+#, python-format
+msgid " (%+d heads)"
+msgstr " (%+d cabeças)"
+
+#, python-format
+msgid "added %d changesets with %d changes to %d files%s\n"
+msgstr "adicionadas %d revisões com %d mudanças em %d arquivos%s\n"
+
 msgid "no node"
 msgstr "nenhum nó"
 
@@ -10173,6 +10027,20 @@
 msgid "child process failed to start"
 msgstr "processo filho falhou ao iniciar"
 
+msgid "applied to working directory"
+msgstr "aplicado no diretório de trabalho"
+
+msgid "not a Mercurial patch"
+msgstr "não é um patch do Mercurial"
+
+msgid "patch is damaged or loses information"
+msgstr "o patch está danificado ou perde informação"
+
+#. i18n: refers to a short changeset id
+#, python-format
+msgid "created %s"
+msgstr "revisão %s criada"
+
 #. i18n: column positioning for "hg log"
 #, python-format
 msgid "changeset:   %d:%s\n"
@@ -10494,8 +10362,8 @@
 msgid "STYLE"
 msgstr "ESTILO"
 
-msgid "display using template map file"
-msgstr "exibe usando arquivo de mapeamento de modelo"
+msgid "display using template map file (DEPRECATED)"
+msgstr "exibe usando arquivo de mapeamento de modelo (OBSOLETO)"
 
 msgid "display with template"
 msgstr "exibe usando modelo"
@@ -10872,14 +10740,23 @@
 "      :hg:`update --clean .`, cancelando a mesclagem e deixando a filha\n"
 "      de REV como uma cabeça a ser mesclada explicitamente."
 
+msgid ""
+"    Returns 0 on success, 1 if nothing to backout or there are unresolved\n"
+"    files.\n"
+"    "
+msgstr ""
+"    Devolve 0 para indicar sucesso, 1 se não houver nada a ser feito\n"
+"    ou se houverem conflitos não resolvidos.\n"
+"    "
+
 msgid "please specify just one revision"
 msgstr "por favor especifique apenas uma revisão"
 
 msgid "please specify a revision to backout"
 msgstr "por favor especifique uma revisão a ser anulada"
 
-msgid "cannot backout change on a different branch"
-msgstr "não se pode anular uma mudança em um ramo diferente"
+msgid "cannot backout change that is not an ancestor"
+msgstr "não se pode anular uma mudança que não seja um ancestral"
 
 msgid "cannot backout a change with no parents"
 msgstr "não se pode anular uma mudança sem pais"
@@ -11508,21 +11385,32 @@
 
 msgid ""
 "    Output may be to a file, in which case the name of the file is\n"
-"    given using a format string. The formatting rules are the same as\n"
-"    for the export command, with the following additions:"
-msgstr ""
-"    A saída pode ser para um arquivo, e nesse caso o nome do arquivo é\n"
-"    dado através de uma string de formatação.As regras de formatação\n"
-"    são as mesmas que as do comando export, com as seguintes adições:"
-
-msgid ""
+"    given using a format string. The formatting rules as follows:"
+msgstr ""
+"    A saída pode ser gerada em um arquivo, e nesse caso o nome do\n"
+"    arquivo é dado usando uma string de formato. As regras de\n"
+"    formatação são como segue:"
+
+msgid ""
+"    :``%%``: literal \"%\" character\n"
 "    :``%s``: basename of file being printed\n"
 "    :``%d``: dirname of file being printed, or '.' if in repository root\n"
-"    :``%p``: root-relative path name of file being printed"
-msgstr ""
+"    :``%p``: root-relative path name of file being printed\n"
+"    :``%H``: changeset hash (40 hexadecimal digits)\n"
+"    :``%R``: changeset revision number\n"
+"    :``%h``: short-form changeset hash (12 hexadecimal digits)\n"
+"    :``%r``: zero-padded changeset revision number\n"
+"    :``%b``: basename of the exporting repository"
+msgstr ""
+"    :``%%``: caractere \"%\" literal\n"
 "    :``%s``: nome base do arquivo impresso\n"
-"    :``%d``: diretório do arquivo impresso, ou '.' se no raiz do repositório\n"
-"    :``%p``: caminho do arquivo impresso relativo à raiz"
+"    :``%d``: nome do diretório do arquivo impresso, ou '.' para o raiz do repositório\n"
+"    :``%p``: caminho relativo ao raiz do arquivo impresso\n"
+"    :``%H``: hash da revisão (40 bytes hexadecimais)\n"
+"    :``%R``: número de ordem da revisão\n"
+"    :``%h``: hash de forma curta da revisão (12 bytes hexadecimais)\n"
+"    :``%r``: número de ordem da revisão completado com zeros\n"
+"    :``%b``: nome base do repositório"
 
 msgid "the clone will include an empty working copy (only a repository)"
 msgstr "o clone irá conter uma cópia de trabalho vazia (apenas o repositório)"
@@ -11743,6 +11631,9 @@
 msgid "use the secret phase for committing"
 msgstr "consolida a revisão na fase \"secret\""
 
+msgid "further edit commit message already specified"
+msgstr "edita a mensagem de consolidação especificada"
+
 msgid "commit the specified files or all outstanding changes"
 msgstr "consolida os arquivos pedidos ou todas as mudanças por gravar"
 
@@ -11838,6 +11729,76 @@
 msgid "cannot amend changeset with children"
 msgstr "não é possível emendar revisões com filhas"
 
+msgid "show untrusted configuration options"
+msgstr "mostra opções de configuração não confiáveis"
+
+msgid "edit user config"
+msgstr "edita a configuração do usuário"
+
+msgid "edit repository config"
+msgstr "edita a configuração do repositório"
+
+msgid "edit global config"
+msgstr "edita a configuração global"
+
+msgid "[-u] [NAME]..."
+msgstr "[-u] [NOME]..."
+
+msgid "show combined config settings from all hgrc files"
+msgstr "exibe opções de configuração de todos os arquivos hgrc combinados"
+
+msgid "    With no arguments, print names and values of all config items."
+msgstr ""
+"    Sem argumentos, imprime nomes e valores de todos os itens de\n"
+"    configuração."
+
+msgid ""
+"    With one argument of the form section.name, print just the value\n"
+"    of that config item."
+msgstr ""
+"    Com um argumento da forma 'seção.nome', imprime apenas o valor\n"
+"    desse item de configuração."
+
+msgid ""
+"    With multiple arguments, print names and values of all config\n"
+"    items with matching section names."
+msgstr ""
+"    Com múltiplos argumentos, imprime nomes e valores de todos os\n"
+"    itens de configuração que casarem com os nomes de seção."
+
+msgid ""
+"    With --edit, start an editor on the user-level config file. With\n"
+"    --global, edit the system-wide config file. With --local, edit the\n"
+"    repository-level config file."
+msgstr ""
+"    Com --edit, abre um editor com o arquivo de configuração do usuário.\n"
+"    Com --global, edita o arquivo de configuração global.\n"
+"    Com --local, edita o arquivo de configuração do repositório."
+
+msgid ""
+"    With --debug, the source (filename and line number) is printed\n"
+"    for each config item."
+msgstr ""
+"    Com --debug, é mostrada a origem (nome de arquivo e número da\n"
+"    linha) para cada item de configuração."
+
+msgid "    See :hg:`help config` for more information about config files."
+msgstr ""
+"    Veja :hg:`help config` para mais informações sobre arquivos de "
+"configuração."
+
+msgid "    "
+msgstr "    "
+
+msgid "can't use --local and --global together"
+msgstr "não se pode usar --local e --global ao mesmo tempo"
+
+msgid "can't use --local outside a repository"
+msgstr "não se pode usar --local fora de um repositório"
+
+msgid "only one config item permitted"
+msgstr "apenas um item de configuração permitido"
+
 msgid "record a copy that has already occurred"
 msgstr "grava uma cópia que já ocorreu"
 
@@ -12164,6 +12125,14 @@
 msgstr " (verifique se seu locale está configurado propriamente)\n"
 
 #, python-format
+msgid "checking Python executable (%s)\n"
+msgstr "verificando executável Python (%s)\n"
+
+#, python-format
+msgid "checking Python version (%s)\n"
+msgstr "verificando a versão do Python (%s)\n"
+
+#, python-format
 msgid "checking Python lib (%s)...\n"
 msgstr "verificando biblioteca Python (%s)...\n"
 
@@ -12181,6 +12150,12 @@
 msgid "checking templates (%s)...\n"
 msgstr "verificando modelos (%s)...\n"
 
+msgid " template 'default' not found\n"
+msgstr " modelo 'default' não encontrado\n"
+
+msgid " no template directories found\n"
+msgstr " nenhum diretório de modelos foi encontrado\n"
+
 msgid " (templates seem to have been installed incorrectly)\n"
 msgstr " (modelos parecem ter sido instalados incorretamente)\n"
 
@@ -12379,6 +12354,9 @@
 msgid "show data and statistics about a revlog"
 msgstr "mostra dados e estatísticas sobre um revlog"
 
+msgid "print parsed tree after optimizing"
+msgstr "imprime a árvore de parsing após a otimização"
+
 msgid "parse and apply a revision specification"
 msgstr "interpreta e aplica uma especificação de revisões"
 
@@ -13305,20 +13283,6 @@
 msgid "cannot use --similarity with --bypass"
 msgstr "não se pode usar --similarity com --bypass"
 
-msgid "applied to working directory"
-msgstr "aplicado no diretório de trabalho"
-
-msgid "not a Mercurial patch"
-msgstr "não é um patch do Mercurial"
-
-msgid "patch is damaged or loses information"
-msgstr "o patch está danificado ou perde informação"
-
-#. i18n: refers to a short changeset id
-#, python-format
-msgid "created %s"
-msgstr "revisão %s criada"
-
 msgid "applying patch from stdin\n"
 msgstr "aplicando patch da entrada padrão\n"
 
@@ -13370,6 +13334,29 @@
 msgid "    See pull for valid source format details."
 msgstr "    Veja pull para detalhes sobre formatos válidos da origem."
 
+msgid "      - show incoming changes with patches and full description::"
+msgstr "      - mostra novas mudanças com patches e descrições completas::"
+
+msgid "          hg incoming -vp"
+msgstr "          hg incoming -vp"
+
+msgid "      - show incoming changes excluding merges, store a bundle::"
+msgstr ""
+"      - mostra novas mudanças excluindo mesclagens e grava um bundle::"
+
+msgid ""
+"          hg in -vpM --bundle incoming.hg\n"
+"          hg pull incoming.hg"
+msgstr ""
+"          hg in -vpM --bundle incoming.hg\n"
+"          hg pull incoming.hg"
+
+msgid "      - briefly list changes inside a bundle::"
+msgstr "      - lista brevemente as mudanças em um bundle::"
+
+msgid "          hg in changes.hg -T \"{desc|firstline}\\n\""
+msgstr "          hg in changes.hg -T \"{desc|firstline}\\n\""
+
 msgid ""
 "    Returns 0 if there are incoming changes, 1 otherwise.\n"
 "    "
@@ -13502,6 +13489,19 @@
 "    mensagem de consolidação completa."
 
 msgid ""
+"    With --graph the revisions are shown as an ASCII art DAG with the most\n"
+"    recent changeset at the top.\n"
+"    'o' is a changeset, '@' is a working directory parent, 'x' is obsolete,\n"
+"    and '+' represents a fork where the changeset from the lines below is a\n"
+"    parent of the 'o' merge on the same line."
+msgstr ""
+"    Com --graph as revisões são mostradas como um DAG em arte ASCII\n"
+"    com as revisões mais recentes no topo.\n"
+"    'o' é uma revisão, '@' é o pai do diretório de trabalho, 'x' é\n"
+"    obsoleta, e '+' representa uma bifurcação onde a revisão\n"
+"    das linhas abaixo é um pai da mesclagem 'o' na mesma linha."
+
+msgid ""
 "       log -p/--patch may generate unexpected diff output for merge\n"
 "       changesets, as it will only compare the merge changeset against\n"
 "       its first parent. Also, only files different from BOTH parents\n"
@@ -14120,6 +14120,12 @@
 msgid "pushing to %s\n"
 msgstr "enviando revisões para %s\n"
 
+msgid "default repository not configured!"
+msgstr "o caminho default do repositório não foi configurado!"
+
+msgid "see the \"path\" section in \"hg help config\""
+msgstr "veja a seção \"path\" em \"hg help config\""
+
 msgid "roll back an interrupted transaction"
 msgstr "desfaz uma transação interrompida"
 
@@ -14570,6 +14576,12 @@
 msgid "name of access log file to write to"
 msgstr "nome do arquivo de log de acesso a ser escrito"
 
+msgid "run server in background"
+msgstr "executa o servidor em segundo plano"
+
+msgid "used internally by daemon mode"
+msgstr "usado internamente pelo modo daemon"
+
 msgid "name of error log file to write to"
 msgstr "nome do arquivo de log de erros a ser escrito"
 
@@ -14597,6 +14609,9 @@
 msgid "name of the hgweb config file (DEPRECATED)"
 msgstr "nome do arquivo de configuração do hgweb (OBSOLETA)"
 
+msgid "name of file to write process ID to"
+msgstr "nome do arquivo no qual escrever o ID do processo"
+
 msgid "for remote clients"
 msgstr "para clientes remotos"
 
@@ -14665,44 +14680,6 @@
 msgid "listening at http://%s%s/%s (bound to %s:%d)\n"
 msgstr "ouvindo em http://%s%s/%s (associado a %s:%d)\n"
 
-msgid "show untrusted configuration options"
-msgstr "mostra opções de configuração não confiáveis"
-
-msgid "[-u] [NAME]..."
-msgstr "[-u] [NOME]..."
-
-msgid "show combined config settings from all hgrc files"
-msgstr "exibe opções de configuração de todos os arquivos hgrc combinados"
-
-msgid "    With no arguments, print names and values of all config items."
-msgstr ""
-"    Sem argumentos, imprime nomes e valores de todos os itens de\n"
-"    configuração."
-
-msgid ""
-"    With one argument of the form section.name, print just the value\n"
-"    of that config item."
-msgstr ""
-"    Com um argumento da forma 'seção.nome', imprime apenas o valor\n"
-"    desse item de configuração."
-
-msgid ""
-"    With multiple arguments, print names and values of all config\n"
-"    items with matching section names."
-msgstr ""
-"    Com múltiplos argumentos, imprime nomes e valores de todos os\n"
-"    itens de configuração que casarem com os nomes de seção."
-
-msgid ""
-"    With --debug, the source (filename and line number) is printed\n"
-"    for each config item."
-msgstr ""
-"    Com --debug, é mostrada a origem (nome de arquivo e número da\n"
-"    linha) para cada item de configuração."
-
-msgid "only one config item permitted"
-msgstr "apenas um item de configuração permitido"
-
 msgid "show status of all files"
 msgstr "mostra status de todos os arquivos"
 
@@ -14791,7 +14768,7 @@
 "      ! = missing (deleted by non-hg command, but still tracked)\n"
 "      ? = not tracked\n"
 "      I = ignored\n"
-"        = origin of the previous file listed as A (added)"
+"        = origin of the previous file (with --copies)"
 msgstr ""
 "      M = modificado\n"
 "      A = adicionado\n"
@@ -14801,7 +14778,7 @@
 "          rastreado pelo Mercurial)\n"
 "      ? = não rastreado\n"
 "      I = ignorado\n"
-"        = origem do arquivo anterior listado como A (adicionado)"
+"        = origem do arquivo anterior (com --copies)"
 
 msgid ""
 "      - show changes in the working directory relative to a\n"
@@ -15325,6 +15302,14 @@
 msgstr "diretório de trabalho tem pai desconhecido '%s'!"
 
 #, python-format
+msgid "note: using %s as ancestor of %s and %s\n"
+msgstr "nota: usando %s como ancestral de %s e %s\n"
+
+#, python-format
+msgid "      alternatively, use --config merge.preferancestor=%s\n"
+msgstr "      alternativamente, use --config merge.preferancestor=%s\n"
+
+#, python-format
 msgid "no such file in rev %s"
 msgstr "não há tal arquivo na revisão %s"
 
@@ -15429,6 +15414,21 @@
 msgstr "use 'hg push --new-branch' para criar novos ramos remotos"
 
 #, python-format
+msgid "and %s others"
+msgstr "e %s outras"
+
+#, python-format
+msgid "remote has heads that are not known locally: %s\n"
+msgstr ""
+"o repositório remoto tem cabeças que não são conhecidas localmente: %s\n"
+
+#, python-format
+msgid "remote has heads on branch '%s' that are not known locally: %s\n"
+msgstr ""
+"o repositório remoto tem cabeças no ramo '%s' que não são conhecidas "
+"localmente: %s\n"
+
+#, python-format
 msgid "push creates new branch '%s' with multiple heads"
 msgstr "push cria um novo ramo '%s' com múltiplas cabeças"
 
@@ -15457,9 +15457,6 @@
 msgid "new remote heads on branch '%s':\n"
 msgstr "novas cabeças remotas no ramo '%s':\n"
 
-msgid "note: unsynced remote changes!\n"
-msgstr "aviso: mudanças remotas não sincronizadas!\n"
-
 #, python-format
 msgid "abort: %s\n"
 msgstr "abortado: %s\n"
@@ -15685,6 +15682,56 @@
 msgstr "profiler '%s' não reconhecido - ignorado\n"
 
 #, python-format
+msgid "%s: not a Mercurial bundle"
+msgstr "%s: não é um arquivo de bundle do Mercurial"
+
+#, python-format
+msgid "%s: unknown bundle version %s"
+msgstr "%s: versão de bundle %s desconhecida"
+
+msgid "destination does not support push"
+msgstr "o destino não suporta push"
+
+#, python-format
+msgid "push includes obsolete changeset: %s!"
+msgstr "push inclui uma revisão obsoleta: %s!"
+
+#, python-format
+msgid "push includes unstable changeset: %s!"
+msgstr "push inclui uma revisão instável: %s!"
+
+#, python-format
+msgid "push includes bumped changeset: %s!"
+msgstr "push inclui revisão colidida: %s!"
+
+#, python-format
+msgid "push includes divergent changeset: %s!"
+msgstr "push inclui uma revisão divergente: %s!"
+
+#, python-format
+msgid "updating %s to public failed!\n"
+msgstr "a atualização da fase de %s para pública falhou!\n"
+
+#, python-format
+msgid "cannot lock source repo, skipping local %s phase update\n"
+msgstr ""
+"não é possível travar o repositório de origem, a mudança local para fase "
+"'%s' não será feita\n"
+
+msgid "failed to push some obsolete markers!\n"
+msgstr "erro ao enviar algumas marcações de obsolescência!\n"
+
+msgid "requesting all changes\n"
+msgstr "pedindo todas as mudanças\n"
+
+msgid ""
+"partial pull cannot be done because other repository doesn't support "
+"changegroupsubset."
+msgstr ""
+"pull parcial não pode ser feito porque o outro repositório não suporta "
+"'changegroupsubset'."
+
+#, python-format
 msgid "*** failed to import extension %s from %s: %s\n"
 msgstr "*** falha ao importar a extensão %s de %s: %s\n"
 
@@ -16247,6 +16294,9 @@
 msgid "basic commands:"
 msgstr "comandos básicos:"
 
+msgid "debug commands (internal and unsupported):"
+msgstr "comandos de depuração (internos e não suportados):"
+
 msgid "list of commands:"
 msgstr "lista de comandos:"
 
@@ -16526,10 +16576,10 @@
 "    encontrados."
 
 msgid ""
-".. note:: The registry key ``HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Mercurial``\n"
+"   The registry key ``HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Mercurial``\n"
 "   is used when running 32-bit Python on 64-bit Windows."
 msgstr ""
-".. note:: A chave de registro ``HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Mercurial``\n"
+"   A chave de registro ``HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Mercurial``\n"
 "   será usada ao rodar um Python 32 bits em um Windows 64 bits."
 
 msgid ""
@@ -16785,11 +16835,11 @@
 msgstr "    stable5 = ultimos -b stable"
 
 msgid ""
-".. note:: It is possible to create aliases with the same names as\n"
+"   It is possible to create aliases with the same names as\n"
 "   existing commands, which will then override the original\n"
 "   definitions. This is almost always a bad idea!"
 msgstr ""
-".. note:: É possível criar apelidos com os mesmos nomes que comandos\n"
+"   É possível criar apelidos com os mesmos nomes que comandos\n"
 "   existentes, o que irá sobrepôr suas definições originais. Isto é\n"
 "   quase sempre uma má ideia!"
 
@@ -16853,11 +16903,11 @@
 "acima, ``$HG_ARGS`` expandiria para ``echo foo``."
 
 msgid ""
-".. note:: Some global configuration options such as ``-R`` are\n"
+"   Some global configuration options such as ``-R`` are\n"
 "   processed before shell aliases and will thus not be passed to\n"
 "   aliases."
 msgstr ""
-".. note:: Algumas opções globais de configuração, como ``-R``,\n"
+"   Algumas opções globais de configuração, como ``-R``,\n"
 "   são processadas antes de apelidos de shell, e portanto não serão\n"
 "   passadas para os apelidos."
 
@@ -17134,11 +17184,11 @@
 "arquivo temporário vazio, no qual os dados devam ser escritos pelo comando."
 
 msgid ""
-".. note:: The tempfile mechanism is recommended for Windows systems,\n"
+"   The tempfile mechanism is recommended for Windows systems,\n"
 "   where the standard shell I/O redirection operators often have\n"
 "   strange effects and may corrupt the contents of your files."
 msgstr ""
-".. note:: O mecanismo tempfile é recomendado para sistemas Windows,\n"
+"   O mecanismo tempfile é recomendado para sistemas Windows,\n"
 "   no qual os operadores padrão do shell de redirecionamento de comandos\n"
 "   por vezes causam efeitos estranhos e podem corromper o conteúdo de\n"
 "   seus arquivos."
@@ -17891,13 +17941,13 @@
 "  resolvidos), ``$HG_ERROR=1``."
 
 msgid ""
-".. note:: It is generally better to use standard hooks rather than the\n"
+"   It is generally better to use standard hooks rather than the\n"
 "   generic pre- and post- command hooks as they are guaranteed to be\n"
 "   called in the appropriate contexts for influencing transactions.\n"
 "   Also, hooks like \"commit\" will be called in all contexts that\n"
 "   generate a commit (e.g. tag) and not just the commit command."
 msgstr ""
-".. note:: Em geral é melhor usar ganchos padronizados ao invés dos\n"
+"   Em geral é melhor usar ganchos padronizados ao invés dos\n"
 "   ganchos genéricos pre- e post- comando, pois é garantido que\n"
 "   sejam chamados nos contextos apropriados para influenciar\n"
 "   transações.\n"
@@ -17906,12 +17956,12 @@
 "   global, por exemplo), e não apenas no comando commit."
 
 msgid ""
-".. note:: Environment variables with empty values may not be passed to\n"
+"   Environment variables with empty values may not be passed to\n"
 "   hooks on platforms such as Windows. As an example, ``$HG_PARENT2``\n"
 "   will have an empty value under Unix-like platforms for non-merge\n"
 "   changesets, while it will not be available at all under Windows."
 msgstr ""
-".. note:: Variáveis de ambiente com valor vazio podem não ser passadas\n"
+"   Variáveis de ambiente com valor vazio podem não ser passadas\n"
 "   para os ganchos em certas plataformas, como no Windows. Por exemplo,\n"
 "   ``$HG_PARENT2`` terá um valor vazio sob plataformas semelhantes ao\n"
 "   Unix para revisões que não sejam mesclagens, mas não estará definida\n"
@@ -21302,6 +21352,7 @@
 ":Manual section: 1\n"
 ":Manual group:   Mercurial Manual"
 
+#. do not translate: .. contents::
 msgid ""
 ".. contents::\n"
 "   :backlinks: top\n"
@@ -21379,9 +21430,6 @@
 "    o caminho para um repositório local ou a URI de um repositório\n"
 "    remoto."
 
-msgid ".. include:: hg.1.gendoc.txt"
-msgstr ".. include:: hg.1.gendoc.txt"
-
 msgid ""
 "Files\n"
 "\"\"\"\"\""
@@ -21536,9 +21584,6 @@
 "Garante-se livre uso deste software nos termos da licença\n"
 "GNU General Public License, versão 2 ou qualquer versão posterior."
 
-msgid ".. include:: common.txt\n"
-msgstr ".. include:: common.txt\n"
-
 msgid ""
 "==========\n"
 " hgignore\n"
@@ -21568,9 +21613,6 @@
 ":Manual section: 5\n"
 ":Manual group:   Mercurial Manual"
 
-msgid ".. include:: hgignore.5.gendoc.txt"
-msgstr ".. include:: hgignore.5.gendoc.txt"
-
 msgid ""
 "Author\n"
 "======\n"
@@ -21607,9 +21649,6 @@
 "Garante-se livre uso deste software nos termos da licença\n"
 "GNU General Public License, versão 2 ou qualquer versão posterior."
 
-msgid ".. include:: common.txt"
-msgstr ".. include:: common.txt"
-
 msgid ""
 "Synopsis\n"
 "========"
@@ -21759,11 +21798,9 @@
 "partir da raiz, comece-o por ``^``."
 
 msgid ""
-".. note::\n"
 "  Patterns specified in other than ``.hgignore`` are always rooted.\n"
 "  Please see :hg:`help patterns` for details."
 msgstr ""
-".. note::\n"
 "  Padrões são sempre relativos à raiz do repositório, com exceção\n"
 "  dos especificados em ``.hgignore``.\n"
 "  Veja :hg:`help patterns` para mais detalhes."
@@ -21832,6 +21869,7 @@
 ":Manual section: 5\n"
 ":Manual group:   Mercurial Manual"
 
+#. do not translate: .. contents::
 msgid ""
 ".. contents::\n"
 "   :backlinks: top\n"
@@ -21850,9 +21888,6 @@
 "Descrição\n"
 "========="
 
-msgid ".. include:: hgrc.5.gendoc.txt"
-msgstr ".. include:: hgrc.5.gendoc.txt"
-
 msgid ""
 "Author\n"
 "======\n"
@@ -22173,7 +22208,6 @@
 "   consolidação."
 
 msgid ""
-".. note::\n"
 "   After selecting a merge program, Mercurial will by default attempt\n"
 "   to merge the files using a simple merge algorithm first. Only if it doesn't\n"
 "   succeed because of conflicting changes Mercurial will actually execute the\n"
@@ -22181,7 +22215,6 @@
 "   controlled by the premerge setting of the merge tool. Premerge is enabled by\n"
 "   default unless the file is binary or a symlink."
 msgstr ""
-".. note::\n"
 "   Após selecionar um utilitário de mesclagem, o Mercurial por padrão\n"
 "   tentará primeiro mesclar o arquivo usando um algoritmo simples de\n"
 "   mesclagem. O utilitário só será usado se o algoritmo simples falhar\n"
@@ -22252,11 +22285,9 @@
 "explicitamente."
 
 msgid ""
-".. note::\n"
 "  Patterns specified in ``.hgignore`` are not rooted.\n"
 "  Please see :hg:`help hgignore` for details."
 msgstr ""
-".. note::\n"
 "  Padrões especificados em ``.hgignore`` não são relativos à raiz do\n"
 "  repositório.\n"
 "  Veja :hg:`help hgignore` para mais detalhes."
@@ -22474,11 +22505,9 @@
 " - revisões na fase secreta não são transmitidas com push, pull ou clone"
 
 msgid ""
-".. note::\n"
 "  Pulling a draft changeset from a publishing server does not mark it\n"
 "  as public on the server side due to the read-only nature of pull."
 msgstr ""
-".. note::\n"
 "  Trazer uma revisão rascunho de um servidor de publicação não a\n"
 "  marca como pública no servidor devido à natureza somente leitura\n"
 "  do comando pull."
@@ -22501,22 +22530,18 @@
 "  publish = False"
 
 msgid ""
-".. note::\n"
 "  Servers running older versions of Mercurial are treated as\n"
 "  publishing."
 msgstr ""
-".. note::\n"
 "  Servidores executando versões mais antigas do Mercurial são\n"
 "  considerados como de publicação."
 
 msgid ""
-".. note::\n"
 "   Changesets in secret phase are not exchanged with the server. This\n"
 "   applies to their content: file names, file contents, and changeset\n"
 "   metadata. For technical reasons, the identifier (e.g. d825e4025e39)\n"
 "   of the secret changeset may be communicated to the server."
 msgstr ""
-".. note::\n"
 "   Revisões em fase secreta não são trocadas com o servidor. Isto\n"
 "   se aplica ao seu conteúdo: nomes dos arquivos, conteúdos dos\n"
 "   arquivos e metadados de revisão. Por razões técnicas, o\n"
@@ -22962,12 +22987,8 @@
 "   O Mercurial grava esses estados automaticamente durante uma\n"
 "   consolidação do repositório pai."
 
-msgid ""
-"   .. note::\n"
-"      The ``.hgsubstate`` file should not be edited manually."
-msgstr ""
-"   .. note::\n"
-"      O arquivo ``.hgsubstate`` não deve ser editado manualmente."
+msgid "      The ``.hgsubstate`` file should not be edited manually."
+msgstr "      O arquivo ``.hgsubstate`` não deve ser editado manualmente."
 
 msgid ""
 "\n"
@@ -23069,6 +23090,15 @@
 "    ser que -S/--subrepos seja especificado."
 
 msgid ""
+":cat: cat currently only handles exact file matches in subrepos.\n"
+"    Git and Subversion subrepositories are currently ignored."
+msgstr ""
+":cat: cat no momento considera apenas especificações exatas de\n"
+"    arquivos em sub-repositórios.\n"
+"    Sub-repositórios do Subversion e do Git são no momento\n"
+"    ignorados."
+
+msgid ""
 ":commit: commit creates a consistent snapshot of the state of the\n"
 "    entire project and its subrepositories. If any subrepositories\n"
 "    have been modified, Mercurial will abort.  Mercurial can be made\n"
@@ -23319,6 +23349,9 @@
 msgid "- if(expr, then[, else])"
 msgstr "- if(expr, então[, senão])"
 
+msgid "- ifcontains(expr, expr, then[, else])"
+msgstr "- ifcontains(expr, expr, então[, senão])"
+
 msgid "- ifeq(expr, expr, then[, else])"
 msgstr "- ifeq(expr, expr, então[, senão])"
 
@@ -23328,9 +23361,15 @@
 msgid "- label(label, expr)"
 msgstr "- label(label, expr)"
 
+msgid "- revset(query[, formatargs])"
+msgstr "- revset(consulta[, formato])"
+
 msgid "- rstdoc(text, style)"
 msgstr "- rstdoc(texto, estilo)"
 
+msgid "- shortest(node)"
+msgstr "- shortest(nó)"
+
 msgid "- strip(text[, chars])"
 msgstr "- strip(texto[, caracteres])"
 
@@ -23404,8 +23443,24 @@
 msgid "- Display the contents of the 'extra' field, one per line::"
 msgstr "- Exibe o conteúdo do campo 'extra', um em cada linha::"
 
-msgid "   $ hg log -r 0 --template \"{join(extras, '\\n')}\\n\"\n"
-msgstr "   $ hg log -r 0 --template \"{join(extras, '\\n')}\\n\"\n"
+msgid "   $ hg log -r 0 --template \"{join(extras, '\\n')}\\n\""
+msgstr "   $ hg log -r 0 --template \"{join(extras, '\\n')}\\n\""
+
+msgid "- Mark the current bookmark with '*'::"
+msgstr "- Indica o marcador atual com '*'::"
+
+msgid ""
+"   $ hg log --template \"{bookmarks % '{bookmark}{ifeq(bookmark, current, "
+"\\\"*\\\")} '}\\n\""
+msgstr ""
+"   $ hg log --template \"{bookmarks % '{bookmark}{ifeq(bookmark, current, "
+"\\\"*\\\")} '}\\n\""
+
+msgid "- Mark the working copy parent with '@'::"
+msgstr "- Indica o pai do diretório de trabalho com '@'::"
+
+msgid "   $ hg log --template \"{ifcontains(rev, revset('.'), '@')}\\n\"\n"
+msgstr "   $ hg log --template \"{ifcontains(rev, revset('.'), '@')}\\n\"\n"
 
 msgid "Valid URLs are of the form::"
 msgstr "URLs válidas são da forma::"
@@ -23668,10 +23723,6 @@
 msgstr " %d arquivos modificados, %d inserções(+), %d remoções(-)\n"
 
 #, python-format
-msgid "calling hook %s: %s\n"
-msgstr "invocando gancho %s: %s\n"
-
-#, python-format
 msgid "%s hook is invalid (\"%s\" not in a module)"
 msgstr "gancho %s inválido(\"%s\" não está em um módulo)"
 
@@ -23694,6 +23745,10 @@
 msgstr "gancho %s é inválido (\"%s\" não é executável)"
 
 #, python-format
+msgid "calling hook %s: %s\n"
+msgstr "invocando gancho %s: %s\n"
+
+#, python-format
 msgid "error: %s hook failed: %s\n"
 msgstr "erro: gancho %s falhou: %s\n"
 
@@ -23866,6 +23921,10 @@
 msgstr "esperando pelo bloqueio em %s feito por %r\n"
 
 #, python-format
+msgid "got lock after %s seconds\n"
+msgstr "obteve o lock após %s segundos\n"
+
+#, python-format
 msgid "repository %s"
 msgstr "repositório %s"
 
@@ -23921,82 +23980,6 @@
 msgid "trouble committing %s!\n"
 msgstr "problemas ao consolidar %s!\n"
 
-msgid "requesting all changes\n"
-msgstr "pedindo todas as mudanças\n"
-
-msgid ""
-"partial pull cannot be done because other repository doesn't support "
-"changegroupsubset."
-msgstr ""
-"pull parcial não pode ser feito porque o outro repositório não suporta "
-"'changegroupsubset'."
-
-msgid "destination does not support push"
-msgstr "o destino não suporta push"
-
-#, python-format
-msgid "cannot lock source repo, skipping local %s phase update\n"
-msgstr ""
-"não é possível travar o repositório de origem, a mudança local para fase "
-"'%s' não será feita\n"
-
-#, python-format
-msgid "push includes obsolete changeset: %s!"
-msgstr "push inclui uma revisão obsoleta: %s!"
-
-#, python-format
-msgid "push includes unstable changeset: %s!"
-msgstr "push inclui uma revisão instável: %s!"
-
-#, python-format
-msgid "push includes bumped changeset: %s!"
-msgstr "push inclui revisão colidida: %s!"
-
-#, python-format
-msgid "push includes divergent changeset: %s!"
-msgstr "push inclui uma revisão divergente: %s!"
-
-#, python-format
-msgid "updating %s to public failed!\n"
-msgstr "a atualização da fase de %s para pública falhou!\n"
-
-#, python-format
-msgid "%d changesets found\n"
-msgstr "%d revisões encontradas\n"
-
-msgid "adding changesets\n"
-msgstr "adicionando revisões\n"
-
-msgid "chunks"
-msgstr "trechos"
-
-msgid "received changelog group is empty"
-msgstr "grupo de changelogs recebido é vazio"
-
-msgid "adding manifests\n"
-msgstr "adicionando manifestos\n"
-
-msgid "adding file changes\n"
-msgstr "adicionando mudanças em arquivos\n"
-
-#, python-format
-msgid " (%+d heads)"
-msgstr " (%+d cabeças)"
-
-#, python-format
-msgid "added %d changesets with %d changes to %d files%s\n"
-msgstr "adicionadas %d revisões com %d mudanças em %d arquivos%s\n"
-
-msgid "received file revlog group is empty"
-msgstr "grupo recebido de arquivos revlog vazio"
-
-msgid "received spurious file revlog entry"
-msgstr "recebida entrada de revlog de arquivo espúria"
-
-#, python-format
-msgid "missing file data for %s:%s - run hg verify"
-msgstr "faltando dados de arquivo para %s:%s - execute hg verify"
-
 msgid "unexpected response from remote server:"
 msgstr "resposta inesperada do servidor remoto:"
 
@@ -24102,8 +24085,9 @@
 msgid "diff context lines count must be an integer, not %r"
 msgstr "o número de linhas de contexto de diff deve ser um inteiro, e não %r"
 
-msgid "unsupported merge state record:"
-msgstr "registro de estado de mesclagem não suportado:"
+#, python-format
+msgid "unsupported merge state record: %s"
+msgstr "registro de estado de mesclagem não suportado: %s"
 
 #, python-format
 msgid "warning: cannot merge flags for %s\n"
@@ -24127,22 +24111,6 @@
 msgstr "examinando manifestos\n"
 
 #, python-format
-msgid ""
-"local changed %s which remote deleted\n"
-"use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
-msgstr ""
-"local alterou %s, que a remota removeu\n"
-"use (c) a versão alterada, ou (d) apague?$$ (&C) alterada $$ (&D) apague"
-
-#, python-format
-msgid ""
-"remote changed %s which local deleted\n"
-"use (c)hanged version or leave (d)eleted?$$ &Changed $$ &Deleted"
-msgstr ""
-"remota mudou %s, apagada pela local\n"
-"use (c) a versão alterada, ou (d) deixe apagada?$$ (&C) alterada $$ (&D) deixe apagada"
-
-#, python-format
 msgid "update failed to remove %s: %s!\n"
 msgstr "update falhou ao remover %s: %s!\n"
 
@@ -24165,6 +24133,48 @@
 msgid "note: possible conflict - %s was deleted and renamed to:\n"
 msgstr "nota: possível conflito - %s foi apagado e renomeado para:\n"
 
+#, fuzzy, python-format
+msgid "note: merging %s and %s using bids from ancestors %s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"calculating bids for ancestor %s\n"
+msgstr ""
+
+msgid ""
+"\n"
+"auction for merging merge bids\n"
+msgstr ""
+
+#, python-format
+msgid " %s: multiple bids for merge action:\n"
+msgstr ""
+
+#, python-format
+msgid " %s: ambiguous merge - picked %s action\n"
+msgstr ""
+
+msgid "end of auction"
+msgstr ""
+
+#, python-format
+msgid ""
+"local changed %s which remote deleted\n"
+"use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
+msgstr ""
+"local alterou %s, que a remota removeu\n"
+"use (c) a versão alterada, ou (d) apague?$$ (&C) alterada $$ (&D) apague"
+
+#, python-format
+msgid ""
+"remote changed %s which local deleted\n"
+"use (c)hanged version or leave (d)eleted?$$ &Changed $$ &Deleted"
+msgstr ""
+"remota mudou %s, apagada pela local\n"
+"use (c) a versão alterada, ou (d) deixe apagada?$$ (&C) alterada $$ (&D) deixe apagada"
+
 msgid "merging with a working directory ancestor has no effect"
 msgstr ""
 "mesclar com um ancestral do diretório de trabalho não tem nenhum efeito"
@@ -24237,11 +24247,9 @@
 msgid "unknown key: %r"
 msgstr "chave desconhecida: %r"
 
-msgid "unexpected old value"
-msgstr "valor antigo inesperado"
-
-msgid "failed to push some obsolete markers!\n"
-msgstr "erro ao enviar algumas marcações de obsolescência!\n"
+#, python-format
+msgid "unexpected old value for %r"
+msgstr "valor antigo inesperado para %r"
 
 #, python-format
 msgid "unexpected token: %s"
@@ -24501,10 +24509,10 @@
 
 msgid ""
 "``ancestor(*changeset)``\n"
-"    Greatest common ancestor of the changesets."
+"    A greatest common ancestor of the changesets."
 msgstr ""
 "``ancestor(*revisões)``\n"
-"    Maior ancestral comum das revisões."
+"    Um maior ancestral comum das revisões."
 
 msgid ""
 "    Accepts 0 or more changesets.\n"
@@ -24537,6 +24545,24 @@
 msgstr "author requer uma string"
 
 msgid ""
+"``only(set, [set])``\n"
+"    Changesets that are ancestors of the first set that are not ancestors\n"
+"    of any other head in the repo. If a second set is specified, the result\n"
+"    is ancestors of the first set that are not ancestors of the second set\n"
+"    (i.e. ::<set1> - ::<set2>)."
+msgstr ""
+"``only(conjunto1, [conjunto2])``\n"
+"    Revisões que são ancestrais do primeiro conjunto que não\n"
+"    são ancestrais de nenhuma outra cabeça no repositório. Se um\n"
+"    segundo conjunto for especificado, seleciona os ancestrais\n"
+"    do primeiro conjunto que não são ancestrais do segundo conjunto\n"
+"    (ou seja, ::<conjunto1> - ::<conjunto2>)."
+
+#. i18n: "only" is a keyword
+msgid "only takes one or two arguments"
+msgstr "only recebe um ou dois argumentos"
+
+msgid ""
 "``bisect(string)``\n"
 "    Changesets marked in the specified bisect status:"
 msgstr ""
@@ -24658,12 +24684,13 @@
 
 msgid ""
 "``contains(pattern)``\n"
-"    Revision contains a file matching pattern. See :hg:`help patterns`\n"
-"    for information about file patterns."
+"    The revision's manifest contains a file matching pattern (but might not\n"
+"    modify it). See :hg:`help patterns` for information about file patterns."
 msgstr ""
 "``contains(padrão)``\n"
-"    Revisões que contenham um arquivo que combine com o padrão. Veja\n"
-"    :hg:`help patterns` para informações sobre padrões de arquivo."
+"    Revisões cujos manifestos contenham um arquivo que combine com o padrão\n"
+"    (mesmo sem modificações).\n"
+"    Veja :hg:`help patterns` para informações sobre padrões de arquivo."
 
 msgid ""
 "    The pattern without explicit kind like ``glob:`` is expected to be\n"
@@ -24810,14 +24837,15 @@
 "    Revisões conectadas ao filelog especificado."
 
 msgid ""
-"    For performance reasons, ``filelog()`` does not show every changeset\n"
-"    that affects the requested file(s). See :hg:`help log` for details. For\n"
-"    a slower, more accurate result, use ``file()``."
-msgstr ""
-"    Por razões de desempenho, ``filelog()`` não mostra todas as\n"
-"    revisões que afetaram os arquivos pedidos. Veja :hg:`help log`\n"
-"    para mais detalhes. Para um resultado mais preciso, mas mais\n"
-"    lento, use ``file()``."
+"    For performance reasons, visits only revisions mentioned in the file-level\n"
+"    filelog, rather than filtering through all changesets (much faster, but\n"
+"    doesn't include deletes or duplicate changes). For a slower, more accurate\n"
+"    result, use ``file()``."
+msgstr ""
+"    Por razões de desempenho, visita apenas revisões mencionadas no filelog\n"
+"    a nível de arquivo, ao invés de filtrar todas as revisões (muito mais\n"
+"    rápido, mas não inclui remoções nem mudanças duplicadas). Para um\n"
+"    resultado mais lento e mais preciso, use ``file()``."
 
 #. i18n: "filelog" is a keyword
 msgid "filelog requires a pattern"
@@ -25037,6 +25065,9 @@
 "``min(conjunto)``\n"
 "    Revisão com menor número de revisão no conjunto."
 
+msgid "_missingancestors requires two arguments"
+msgstr "_missingancestors exige dois argumentos"
+
 msgid ""
 "``modifies(pattern)``\n"
 "    Changesets modifying files matched by pattern."
@@ -25461,10 +25492,17 @@
 msgstr "arquivo .hg/requires corrompido"
 
 #, python-format
-msgid "unknown repository format: requires features '%s' (upgrade Mercurial)"
-msgstr ""
-"formato de repositório desconhecido: requer as funcionalidades '%s' "
-"(atualize o Mercurial)"
+msgid "repository requires features unknown to this Mercurial: %s"
+msgstr ""
+"o repositório exige funcionalidades desconhecidas para esta versão do "
+"Mercurial: '%s'"
+
+msgid ""
+"see http://mercurial.selenic.com/wiki/MissingRequirement for more "
+"information"
+msgstr ""
+"veja http://mercurial.selenic.com/wiki/MissingRequirement para mais "
+"informações"
 
 msgid "searching for changes\n"
 msgstr "procurando por mudanças\n"
@@ -26241,6 +26279,9 @@
 msgid "fill expects an integer width"
 msgstr "fill espera um número inteiro"
 
+msgid "pad() expects two to four arguments"
+msgstr "pad() espera de dois a quatro argumentos"
+
 #. i18n: "get" is a keyword
 msgid "get() expects two arguments"
 msgstr "get() espera dois argumentos"
@@ -26253,6 +26294,10 @@
 msgid "if expects two or three arguments"
 msgstr "if espera dois ou três argumentos"
 
+#. i18n: "ifcontains" is a keyword
+msgid "ifcontains expects three or four arguments"
+msgstr "ifcontains espera três ou quatro argumentos"
+
 #. i18n: "ifeq" is a keyword
 msgid "ifeq expects three or four arguments"
 msgstr "ifeq espera três ou quatro argumentos"
@@ -26261,10 +26306,17 @@
 msgid "join expects one or two arguments"
 msgstr "join espera um ou dois argumentos"
 
+#. i18n: "revset" is a keyword
+msgid "revset expects one or more arguments"
+msgstr "revset espera um ou mais argumentos"
+
 #. i18n: "rstdoc" is a keyword
 msgid "rstdoc expects two arguments"
 msgstr "rstdoc espera dois argumentos"
 
+msgid "shortest() expects one or two arguments"
+msgstr "shortest() espera um ou dois argumentos"
+
 msgid "strip expects one or two arguments"
 msgstr "strip espera um ou dois argumentos"
 
@@ -26306,6 +26358,10 @@
 msgid "failed to truncate %s\n"
 msgstr "falha ao truncar %s\n"
 
+#, python-format
+msgid "failed to recover %s\n"
+msgstr "falha ao recuperar %s\n"
+
 msgid "transaction abort!\n"
 msgstr "transação abortada!\n"
 
@@ -26315,6 +26371,10 @@
 msgid "rollback failed - please run hg recover\n"
 msgstr "rollback falhou - por favor execute hg recover\n"
 
+#, python-format
+msgid "couldn't read journal entry %r!\n"
+msgstr "não foi possível ler a entrada do jornal %r!\n"
+
 msgid "already have changeset "
 msgstr "já possui a revisão "
 
@@ -26349,8 +26409,11 @@
 msgid "no username found, using '%s' instead\n"
 msgstr "nome de usuário não encontrado, usando '%s'\n"
 
-msgid "no username supplied (see \"hg help config\")"
-msgstr "nome de usuário não fornecido (veja \"hg help config\")"
+msgid "no username supplied"
+msgstr "nome de usuário não fornecido"
+
+msgid "use \"hg config --edit\" to set your username"
+msgstr "use \"hg config --edit\" para definir seu nome de usuário"
 
 #, python-format
 msgid "username %s contains a newline\n"
@@ -26737,8 +26800,5 @@
 msgid "look up remote changes"
 msgstr "procurar mudanças remotas"
 
-msgid "push failed:"
-msgstr "o push falhou:"
-
 msgid "number of cpus must be an integer"
 msgstr "o número de cpus deve ser um inteiro"
--- a/mercurial/bundle2.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/mercurial/bundle2.py	Thu May 01 19:24:03 2014 -0500
@@ -145,7 +145,7 @@
 import urllib
 import string
 
-import changegroup
+import changegroup, error
 from i18n import _
 
 _pack = struct.pack
@@ -170,6 +170,10 @@
     """
     return '>'+('BB'*nbparams)
 
+class UnknownPartError(KeyError):
+    """error raised when no handler is found for a Mandatory part"""
+    pass
+
 parthandlermapping = {}
 
 def parthandler(parttype):
@@ -297,7 +301,7 @@
                 if key != parttype: # mandatory parts
                     # todo:
                     # - use a more precise exception
-                    raise
+                    raise UnknownPartError(key)
                 op.ui.debug('ignoring unknown advisory part %r\n' % key)
                 # consuming the part
                 part.read()
@@ -323,13 +327,19 @@
                                      data=output)
                 op.reply.addpart(outpart)
             part.read()
-    except Exception:
+    except Exception, exc:
         if part is not None:
             # consume the bundle content
             part.read()
         for part in iterparts:
             # consume the bundle content
             part.read()
+        # Small hack to let caller code distinguish exceptions from bundle2
+        # processing fron the ones from bundle1 processing. This is mostly
+        # needed to handle different return codes to unbundle according to the
+        # type of bundle. We should probably clean up or drop this return code
+        # craziness in a future version.
+        exc.duringunbundle2 = True
         raise
     return op
 
@@ -720,7 +730,8 @@
         h = inpart.read(20)
     assert not h
     if heads != op.repo.heads():
-        raise exchange.PushRaced()
+        raise error.PushRaced('repository changed while pushing - '
+                              'please try again')
 
 @parthandler('b2x:output')
 def handleoutput(op, inpart):
@@ -737,3 +748,21 @@
     if op.reply is None:
         op.reply = bundle20(op.ui, caps)
 
+@parthandler('b2x:error:abort')
+def handlereplycaps(op, inpart):
+    """Used to transmit abort error over the wire"""
+    manargs = dict(inpart.mandatoryparams)
+    advargs = dict(inpart.advisoryparams)
+    raise util.Abort(manargs['message'], hint=advargs.get('hint'))
+
+@parthandler('b2x:error:unknownpart')
+def handlereplycaps(op, inpart):
+    """Used to transmit unknown part error over the wire"""
+    manargs = dict(inpart.mandatoryparams)
+    raise UnknownPartError(manargs['parttype'])
+
+@parthandler('b2x:error:pushraced')
+def handlereplycaps(op, inpart):
+    """Used to transmit push race error over the wire"""
+    manargs = dict(inpart.mandatoryparams)
+    raise error.ResponseError(_('push failed:'), manargs['message'])
--- a/mercurial/commands.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/mercurial/commands.py	Thu May 01 19:24:03 2014 -0500
@@ -3110,10 +3110,14 @@
     # check for ancestors of dest branch
     crev = repo['.'].rev()
     ancestors = repo.changelog.ancestors([crev], inclusive=True)
+    # Cannot use x.remove(y) on smart set, this has to be a list.
+    # XXX make this lazy in the future
+    revs = list(revs)
     # don't mutate while iterating, create a copy
     for rev in list(revs):
         if rev in ancestors:
             ui.warn(_('skipping ancestor revision %s\n') % rev)
+            # XXX remove on list is slow
             revs.remove(rev)
     if not revs:
         return -1
@@ -4013,7 +4017,7 @@
     recent changeset at the top.
     'o' is a changeset, '@' is a working directory parent, 'x' is obsolete,
     and '+' represents a fork where the changeset from the lines below is a
-    parent of the 'o' merge on the same same line.
+    parent of the 'o' merge on the same line.
 
     .. note::
 
--- a/mercurial/commandserver.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/mercurial/commandserver.py	Thu May 01 19:24:03 2014 -0500
@@ -187,14 +187,20 @@
         # copy the uis so changes (e.g. --config or --verbose) don't
         # persist between requests
         copiedui = self.ui.copy()
+        uis = [copiedui]
         if self.repo:
             self.repo.baseui = copiedui
             # clone ui without using ui.copy because this is protected
             repoui = self.repoui.__class__(self.repoui)
             repoui.copy = copiedui.copy # redo copy protection
+            uis.append(repoui)
             self.repo.ui = self.repo.dirstate._ui = repoui
             self.repo.invalidateall()
 
+        for ui in uis:
+            # any kind of interaction must use server channels
+            ui.setconfig('ui', 'nontty', 'true', 'commandserver')
+
         req = dispatch.request(args[:], copiedui, self.repo, self.cin,
                                self.cout, self.cerr)
 
--- a/mercurial/context.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/mercurial/context.py	Thu May 01 19:24:03 2014 -0500
@@ -394,7 +394,7 @@
         return filectx(self._repo, path, fileid=fileid,
                        changectx=self, filelog=filelog)
 
-    def ancestor(self, c2):
+    def ancestor(self, c2, warn=False):
         """
         return the "best" ancestor context of self and c2
         """
@@ -415,12 +415,13 @@
                     break
             else:
                 anc = self._repo.changelog.ancestor(self._node, n2)
-            self._repo.ui.status(
-                (_("note: using %s as ancestor of %s and %s\n") %
-                 (short(anc), short(self._node), short(n2))) +
-                ''.join(_("      alternatively, use --config "
-                          "merge.preferancestor=%s\n") %
-                        short(n) for n in sorted(cahs) if n != anc))
+            if warn:
+                self._repo.ui.status(
+                    (_("note: using %s as ancestor of %s and %s\n") %
+                     (short(anc), short(self._node), short(n2))) +
+                    ''.join(_("      alternatively, use --config "
+                              "merge.preferancestor=%s\n") %
+                            short(n) for n in sorted(cahs) if n != anc))
         return changectx(self._repo, anc)
 
     def descendant(self, other):
--- a/mercurial/discovery.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/mercurial/discovery.py	Thu May 01 19:24:03 2014 -0500
@@ -313,7 +313,11 @@
             newhs = candidate_newhs
         unsynced = sorted(h for h in unsyncedheads if h not in discardedheads)
         if unsynced:
-            heads = ' '.join(short(h) for h in unsynced)
+            if len(unsynced) <= 4 or repo.ui.verbose:
+                heads = ' '.join(short(h) for h in unsynced)
+            else:
+                heads = (' '.join(short(h) for h in unsynced[:4]) +
+                         ' ' + _("and %s others") % (len(unsynced) - 4))
             if branch is None:
                 repo.ui.status(_("remote has heads that are "
                                  "not known locally: %s\n") % heads)
--- a/mercurial/error.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/mercurial/error.py	Thu May 01 19:24:03 2014 -0500
@@ -94,3 +94,7 @@
 
 class SignatureError(Exception):
     pass
+
+class PushRaced(RuntimeError):
+    """An exception raised during unbundling that indicate a push race"""
+
--- a/mercurial/exchange.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/mercurial/exchange.py	Thu May 01 19:24:03 2014 -0500
@@ -8,7 +8,7 @@
 from i18n import _
 from node import hex, nullid
 import errno, urllib
-import util, scmutil, changegroup, base85
+import util, scmutil, changegroup, base85, error
 import discovery, phases, obsolete, bookmarks, bundle2
 
 def readbundle(ui, fh, fname, vfs=None):
@@ -225,10 +225,13 @@
     cgpart = bundle2.bundlepart('B2X:CHANGEGROUP', data=cg.getchunks())
     bundler.addpart(cgpart)
     stream = util.chunkbuffer(bundler.getchunks())
-    reply = pushop.remote.unbundle(stream, ['force'], 'push')
+    try:
+        reply = pushop.remote.unbundle(stream, ['force'], 'push')
+    except bundle2.UnknownPartError, exc:
+        raise util.Abort('missing support for %s' % exc)
     try:
         op = bundle2.processbundle(pushop.repo, reply)
-    except KeyError, exc:
+    except bundle2.UnknownPartError, exc:
         raise util.Abort('missing support for %s' % exc)
     cgreplies = op.records.getreplies(cgpart.id)
     assert len(cgreplies['changegroup']) == 1
@@ -584,7 +587,7 @@
     bundle = pullop.remote.getbundle('pull', **kwargs)
     try:
         op = bundle2.processbundle(pullop.repo, bundle, pullop.gettransaction)
-    except KeyError, exc:
+    except bundle2.UnknownPartError, exc:
         raise util.Abort('missing support for %s' % exc)
     assert len(op.records['changegroup']) == 1
     pullop.cgresult = op.records['changegroup'][0]['return']
@@ -705,9 +708,6 @@
     """hook function to let extensions add parts to the requested bundle"""
     pass
 
-class PushRaced(RuntimeError):
-    """An exception raised during unbundling that indicate a push race"""
-
 def check_heads(repo, their_heads, context):
     """check if the heads of a repo have been modified
 
@@ -719,8 +719,8 @@
             their_heads == ['hashed', heads_hash]):
         # someone else committed/pushed/unbundled while we
         # were transferring data
-        raise PushRaced('repository changed while %s - '
-                        'please try again' % context)
+        raise error.PushRaced('repository changed while %s - '
+                              'please try again' % context)
 
 def unbundle(repo, cg, heads, source, url):
     """Apply a bundle to a repo.
@@ -738,16 +738,20 @@
         check_heads(repo, heads, 'uploading changes')
         # push can proceed
         if util.safehasattr(cg, 'params'):
-            tr = repo.transaction('unbundle')
-            tr.hookargs['bundle2-exp'] = '1'
-            r = bundle2.processbundle(repo, cg, lambda: tr).reply
-            cl = repo.unfiltered().changelog
-            p = cl.writepending() and repo.root or ""
-            repo.hook('b2x-pretransactionclose', throw=True, source=source,
-                      url=url, pending=p, **tr.hookargs)
-            tr.close()
-            repo.hook('b2x-transactionclose', source=source, url=url,
-                      **tr.hookargs)
+            try:
+                tr = repo.transaction('unbundle')
+                tr.hookargs['bundle2-exp'] = '1'
+                r = bundle2.processbundle(repo, cg, lambda: tr).reply
+                cl = repo.unfiltered().changelog
+                p = cl.writepending() and repo.root or ""
+                repo.hook('b2x-pretransactionclose', throw=True, source=source,
+                          url=url, pending=p, **tr.hookargs)
+                tr.close()
+                repo.hook('b2x-transactionclose', source=source, url=url,
+                          **tr.hookargs)
+            except Exception, exc:
+                exc.duringunbundle2 = True
+                raise
         else:
             r = changegroup.addchangegroup(repo, cg, source, url)
     finally:
--- a/mercurial/httppeer.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/mercurial/httppeer.py	Thu May 01 19:24:03 2014 -0500
@@ -237,6 +237,9 @@
         stream =  self._callstream(cmd, **args)
         return util.chunkbuffer(zgenerator(stream))
 
+    def _abort(self, exception):
+        raise exception
+
 class httpspeer(httppeer):
     def __init__(self, ui, path):
         if not url.has_https:
--- a/mercurial/localrepo.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/mercurial/localrepo.py	Thu May 01 19:24:03 2014 -0500
@@ -133,8 +133,8 @@
                 stream = util.chunkbuffer(ret.getchunks())
                 ret = bundle2.unbundle20(self.ui, stream)
             return ret
-        except exchange.PushRaced, exc:
-            raise error.ResponseError(_('push failed:'), exc.message)
+        except error.PushRaced, exc:
+            raise error.ResponseError(_('push failed:'), str(exc))
 
     def lock(self):
         return self._repo.lock()
--- a/mercurial/match.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/mercurial/match.py	Thu May 01 19:24:03 2014 -0500
@@ -343,7 +343,7 @@
             raise
         regexa, a = _buildregexmatch(kindpats[:l//2], globsuffix)
         regexb, b = _buildregexmatch(kindpats[l//2:], globsuffix)
-        return pat, lambda s: a(s) or b(s)
+        return regex, lambda s: a(s) or b(s)
     except re.error:
         for k, p in kindpats:
             try:
--- a/mercurial/merge.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/mercurial/merge.py	Thu May 01 19:24:03 2014 -0500
@@ -353,6 +353,7 @@
         "dg": renamegetop,
         "dr": nop,
         "e": nop,
+        "k": nop,
         "f": addop, # untracked file should be kept in working directory
         "g": addop,
         "m": mergeop,
@@ -729,6 +730,10 @@
                                 partial, acceptremote, followcopies)
 
     else: # only when merge.preferancestor=* - experimentalish code
+        repo.ui.status(
+            _("note: merging %s and %s using bids from ancestors %s\n") %
+            (wctx, mctx, _(' and ').join(str(anc) for anc in ancestors)))
+
         # Call for bids
         fbids = {} # mapping filename to list af action bids
         for ancestor in ancestors:
@@ -776,12 +781,12 @@
                     continue
             # TODO: Consider other simple actions such as mode changes
             # Handle inefficient democrazy.
-            repo.ui.note(_(' %s: multiple merge bids:\n') % (f, m))
-            for a in bidsl:
-                repo.ui.note('  %s: %s\n' % (f, a[1]))
+            repo.ui.note(_(' %s: multiple bids for merge action:\n') % f)
+            for _f, m, args, msg in bidsl:
+                repo.ui.note('  %s -> %s\n' % (msg, m))
             # Pick random action. TODO: Instead, prompt user when resolving
             a0 = bidsl[0]
-            repo.ui.warn(_(' %s: ambiguous merge - picked %s action)\n') %
+            repo.ui.warn(_(' %s: ambiguous merge - picked %s action\n') %
                          (f, a0[1]))
             actions.append(a0)
             continue
@@ -987,7 +992,7 @@
                 cahs = repo.changelog.commonancestorsheads(p1.node(), p2.node())
                 pas = [repo[anc] for anc in (sorted(cahs) or [nullid])]
             else:
-                pas = [p1.ancestor(p2)]
+                pas = [p1.ancestor(p2, warn=True)]
 
         fp1, fp2, xp1, xp2 = p1.node(), p2.node(), str(p1), str(p2)
 
--- a/mercurial/obsolete.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/mercurial/obsolete.py	Thu May 01 19:24:03 2014 -0500
@@ -6,7 +6,7 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2 or any later version.
 
-"""Obsolete markers handling
+"""Obsolete marker handling
 
 An obsolete marker maps an old changeset to a list of new
 changesets. If the list of new changesets is empty, the old changeset
@@ -14,30 +14,31 @@
 "replaced" by the new changesets.
 
 Obsolete markers can be used to record and distribute changeset graph
-transformations performed by history rewriting operations, and help
-building new tools to reconciliate conflicting rewriting actions. To
-facilitate conflicts resolution, markers include various annotations
+transformations performed by history rewrite operations, and help
+building new tools to reconcile conflicting rewrite actions. To
+facilitate conflict resolution, markers include various annotations
 besides old and news changeset identifiers, such as creation date or
 author name.
 
-The old obsoleted changeset is called "precursor" and possible replacements are
-called "successors".  Markers that used changeset X as a precursors are called
-"successor markers of X" because they hold information about the successors of
-X. Markers that use changeset Y as a successors are call "precursor markers of
-Y" because they hold information about the precursors of Y.
+The old obsoleted changeset is called a "precursor" and possible
+replacements are called "successors". Markers that used changeset X as
+a precursor are called "successor markers of X" because they hold
+information about the successors of X. Markers that use changeset Y as
+a successors are call "precursor markers of Y" because they hold
+information about the precursors of Y.
 
 Examples:
 
-- When changeset A is replacement by a changeset A', one marker is stored:
+- When changeset A is replaced by changeset A', one marker is stored:
 
-    (A, (A'))
+    (A, (A',))
 
-- When changesets A and B are folded into a new changeset C two markers are
+- When changesets A and B are folded into a new changeset C, two markers are
   stored:
 
     (A, (C,)) and (B, (C,))
 
-- When changeset A is simply "pruned" from the graph, a marker in create:
+- When changeset A is simply "pruned" from the graph, a marker is created:
 
     (A, ())
 
@@ -45,9 +46,9 @@
 
     (A, (C, C))
 
-  We use a single marker to distinct the "split" case from the "divergence"
-  case. If two independents operation rewrite the same changeset A in to A' and
-  A'' when have an error case: divergent rewriting. We can detect it because
+  We use a single marker to distinguish the "split" case from the "divergence"
+  case. If two independent operations rewrite the same changeset A in to A' and
+  A'', we have an error case: divergent rewriting. We can detect it because
   two markers will be created independently:
 
   (A, (B,)) and (A, (C,))
@@ -65,12 +66,12 @@
 
 The header is followed by the markers. Each marker is made of:
 
-- 1 unsigned byte: number of new changesets "R", could be zero.
+- 1 unsigned byte: number of new changesets "N", can be zero.
 
 - 1 unsigned 32-bits integer: metadata size "M" in bytes.
 
-- 1 byte: a bit field. It is reserved for flags used in obsolete
-  markers common operations, to avoid repeated decoding of metadata
+- 1 byte: a bit field. It is reserved for flags used in common
+  obsolete marker operations, to avoid repeated decoding of metadata
   entries.
 
 - 20 bytes: obsoleted changeset identifier.
@@ -78,9 +79,10 @@
 - N*20 bytes: new changesets identifiers.
 
 - M bytes: metadata as a sequence of nul-terminated strings. Each
-  string contains a key and a value, separated by a color ':', without
+  string contains a key and a value, separated by a colon ':', without
   additional encoding. Keys cannot contain '\0' or ':' and values
   cannot contain '\0'.
+
 """
 import struct
 import util, base85, node
--- a/mercurial/revset.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/mercurial/revset.py	Thu May 01 19:24:03 2014 -0500
@@ -283,7 +283,7 @@
     r = spanset(repo)
     xs = _revsbetween(repo, getset(repo, r, x), getset(repo, r, y))
     s = subset.set()
-    return xs.filter(lambda r: r in s)
+    return xs.filter(s.__contains__)
 
 def andset(repo, subset, x, y):
     return getset(repo, getset(repo, subset, x), y)
@@ -348,7 +348,7 @@
     if not args:
         return baseset([])
     s = _revancestors(repo, args, followfirst)
-    return subset.filter(lambda r: r in s)
+    return subset.filter(s.__contains__)
 
 def ancestors(repo, subset, x):
     """``ancestors(set)``
@@ -376,7 +376,7 @@
         for i in range(n):
             r = cl.parentrevs(r)[0]
         ps.add(r)
-    return subset.filter(lambda r: r in ps)
+    return subset.filter(ps.__contains__)
 
 def author(repo, subset, x):
     """``author(string)``
@@ -395,6 +395,7 @@
     (i.e. ::<set1> - ::<set2>).
     """
     cl = repo.changelog
+    # i18n: "only" is a keyword
     args = getargs(x, 1, 2, _('only takes one or two arguments'))
     include = getset(repo, spanset(repo), args[0]).set()
     if len(args) == 1:
@@ -405,7 +406,7 @@
         exclude = getset(repo, spanset(repo), args[1])
 
     results = set(ancestormod.missingancestors(include, exclude, cl.parentrevs))
-    return lazyset(subset, lambda x: x in results)
+    return lazyset(subset, results.__contains__)
 
 def bisect(repo, subset, x):
     """``bisect(string)``
@@ -422,7 +423,7 @@
     # i18n: "bisect" is a keyword
     status = getstring(x, _("bisect requires a string")).lower()
     state = set(hbisect.get(repo, status))
-    return subset.filter(lambda r: r in state)
+    return subset.filter(state.__contains__)
 
 # Backward-compatibility
 # - no help entry so that we do not advertise it any more
@@ -465,7 +466,7 @@
 
     bms = set([repo[r].rev()
                for r in repo._bookmarks.values()])
-    return subset.filter(lambda r: r in bms)
+    return subset.filter(bms.__contains__)
 
 def branch(repo, subset, x):
     """``branch(string or set)``
@@ -584,8 +585,8 @@
 
 def contains(repo, subset, x):
     """``contains(pattern)``
-    Revision contains a file matching pattern. See :hg:`help patterns`
-    for information about file patterns.
+    The revision's manifest contains a file matching pattern (but might not
+    modify it). See :hg:`help patterns` for information about file patterns.
 
     The pattern without explicit kind like ``glob:`` is expected to be
     relative to the current directory and match against a file exactly
@@ -724,7 +725,7 @@
             r = src
             src = _getrevsource(repo, r)
 
-    return subset.filter(lambda r: r in dests)
+    return subset.filter(dests.__contains__)
 
 def divergent(repo, subset, x):
     """``divergent()``
@@ -733,7 +734,7 @@
     # i18n: "divergent" is a keyword
     getargs(x, 0, 0, _("divergent takes no arguments"))
     divergent = obsmod.getrevs(repo, 'divergent')
-    return subset.filter(lambda r: r in divergent)
+    return subset.filter(divergent.__contains__)
 
 def draft(repo, subset, x):
     """``draft()``
@@ -783,9 +784,10 @@
     """``filelog(pattern)``
     Changesets connected to the specified filelog.
 
-    For performance reasons, ``filelog()`` does not show every changeset
-    that affects the requested file(s). See :hg:`help log` for details. For
-    a slower, more accurate result, use ``file()``.
+    For performance reasons, visits only revisions mentioned in the file-level
+    filelog, rather than filtering through all changesets (much faster, but
+    doesn't include deletes or duplicate changes). For a slower, more accurate
+    result, use ``file()``.
 
     The pattern without explicit kind like ``glob:`` is expected to be
     relative to the current directory and match against a file exactly
@@ -809,7 +811,7 @@
                 for fr in fl:
                     s.add(fl.linkrev(fr))
 
-    return subset.filter(lambda r: r in s)
+    return subset.filter(s.__contains__)
 
 def first(repo, subset, x):
     """``first(set, [n])``
@@ -832,7 +834,7 @@
     else:
         s = _revancestors(repo, baseset([c.rev()]), followfirst)
 
-    return subset.filter(lambda r: r in s)
+    return subset.filter(s.__contains__)
 
 def follow(repo, subset, x):
     """``follow([file])``
@@ -1174,7 +1176,7 @@
             src = prev
 
     o = set([_firstsrc(r) for r in args])
-    return subset.filter(lambda r: r in o)
+    return subset.filter(o.__contains__)
 
 def outgoing(repo, subset, x):
     """``outgoing([path])``
@@ -1197,7 +1199,7 @@
     repo.ui.popbuffer()
     cl = repo.changelog
     o = set([cl.rev(r) for r in outgoing.missing])
-    return subset.filter(lambda r: r in o)
+    return subset.filter(o.__contains__)
 
 def p1(repo, subset, x):
     """``p1([set])``
@@ -2354,7 +2356,7 @@
                 yield x
 
     def __and__(self, x):
-        return lazyset(self, lambda r: r in x)
+        return lazyset(self, x.__contains__)
 
     def __sub__(self, x):
         return lazyset(self, lambda r: r not in x)
@@ -2417,7 +2419,7 @@
             self.reverse()
 
     def __and__(self, x):
-        return orderedlazyset(self, lambda r: r in x,
+        return orderedlazyset(self, x.__contains__,
                 ascending=self._ascending)
 
     def __sub__(self, x):
@@ -2781,9 +2783,10 @@
             for r in iterrange:
                 yield r
 
-    def __contains__(self, x):
-        return self._contained(x) and not (self._hiddenrevs and rev in
-                self._hiddenrevs)
+    def __contains__(self, rev):
+        return (((self._end < rev <= self._start)
+                  or (self._start <= rev < self._end))
+                and not (self._hiddenrevs and rev in self._hiddenrevs))
 
     def __nonzero__(self):
         for r in self:
@@ -2794,9 +2797,9 @@
         if isinstance(x, baseset):
             x = x.set()
         if self._start <= self._end:
-            return orderedlazyset(self, lambda r: r in x)
+            return orderedlazyset(self, x.__contains__)
         else:
-            return orderedlazyset(self, lambda r: r in x, ascending=False)
+            return orderedlazyset(self, x.__contains__, ascending=False)
 
     def __sub__(self, x):
         if isinstance(x, baseset):
@@ -2819,8 +2822,10 @@
             return abs(self._end - self._start)
         else:
             count = 0
+            start = self._start
+            end = self._end
             for rev in self._hiddenrevs:
-                if self._contained(rev):
+                if (end < rev <= start) or (start <= rev and rev < end):
                     count += 1
             return abs(self._end - self._start) - count
 
--- a/mercurial/templates/static/excanvas.js	Thu Apr 17 16:56:15 2014 -0400
+++ b/mercurial/templates/static/excanvas.js	Thu May 01 19:24:03 2014 -0500
@@ -1,19 +1,924 @@
-if(!window.CanvasRenderingContext2D){(function(){var I=Math,i=I.round,L=I.sin,M=I.cos,m=10,A=m/2,Q={init:function(a){var b=a||document;if(/MSIE/.test(navigator.userAgent)&&!window.opera){var c=this;b.attachEvent("onreadystatechange",function(){c.r(b)})}},r:function(a){if(a.readyState=="complete"){if(!a.namespaces["s"]){a.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml")}var b=a.createStyleSheet();b.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}g_vml_\\:*{behavior:url(#default#VML)}";
-var c=a.getElementsByTagName("canvas");for(var d=0;d<c.length;d++){if(!c[d].getContext){this.initElement(c[d])}}}},q:function(a){var b=a.outerHTML,c=a.ownerDocument.createElement(b);if(b.slice(-2)!="/>"){var d="/"+a.tagName,e;while((e=a.nextSibling)&&e.tagName!=d){e.removeNode()}if(e){e.removeNode()}}a.parentNode.replaceChild(c,a);return c},initElement:function(a){a=this.q(a);a.getContext=function(){if(this.l){return this.l}return this.l=new K(this)};a.attachEvent("onpropertychange",V);a.attachEvent("onresize",
-W);var b=a.attributes;if(b.width&&b.width.specified){a.style.width=b.width.nodeValue+"px"}else{a.width=a.clientWidth}if(b.height&&b.height.specified){a.style.height=b.height.nodeValue+"px"}else{a.height=a.clientHeight}return a}};function V(a){var b=a.srcElement;switch(a.propertyName){case "width":b.style.width=b.attributes.width.nodeValue+"px";b.getContext().clearRect();break;case "height":b.style.height=b.attributes.height.nodeValue+"px";b.getContext().clearRect();break}}function W(a){var b=a.srcElement;
-if(b.firstChild){b.firstChild.style.width=b.clientWidth+"px";b.firstChild.style.height=b.clientHeight+"px"}}Q.init();var R=[];for(var E=0;E<16;E++){for(var F=0;F<16;F++){R[E*16+F]=E.toString(16)+F.toString(16)}}function J(){return[[1,0,0],[0,1,0],[0,0,1]]}function G(a,b){var c=J();for(var d=0;d<3;d++){for(var e=0;e<3;e++){var g=0;for(var h=0;h<3;h++){g+=a[d][h]*b[h][e]}c[d][e]=g}}return c}function N(a,b){b.fillStyle=a.fillStyle;b.lineCap=a.lineCap;b.lineJoin=a.lineJoin;b.lineWidth=a.lineWidth;b.miterLimit=
-a.miterLimit;b.shadowBlur=a.shadowBlur;b.shadowColor=a.shadowColor;b.shadowOffsetX=a.shadowOffsetX;b.shadowOffsetY=a.shadowOffsetY;b.strokeStyle=a.strokeStyle;b.d=a.d;b.e=a.e}function O(a){var b,c=1;a=String(a);if(a.substring(0,3)=="rgb"){var d=a.indexOf("(",3),e=a.indexOf(")",d+1),g=a.substring(d+1,e).split(",");b="#";for(var h=0;h<3;h++){b+=R[Number(g[h])]}if(g.length==4&&a.substr(3,1)=="a"){c=g[3]}}else{b=a}return[b,c]}function S(a){switch(a){case "butt":return"flat";case "round":return"round";
-case "square":default:return"square"}}function K(a){this.a=J();this.m=[];this.k=[];this.c=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=m*1;this.globalAlpha=1;this.canvas=a;var b=a.ownerDocument.createElement("div");b.style.width=a.clientWidth+"px";b.style.height=a.clientHeight+"px";b.style.overflow="hidden";b.style.position="absolute";a.appendChild(b);this.j=b;this.d=1;this.e=1}var j=K.prototype;j.clearRect=function(){this.j.innerHTML=
-"";this.c=[]};j.beginPath=function(){this.c=[]};j.moveTo=function(a,b){this.c.push({type:"moveTo",x:a,y:b});this.f=a;this.g=b};j.lineTo=function(a,b){this.c.push({type:"lineTo",x:a,y:b});this.f=a;this.g=b};j.bezierCurveTo=function(a,b,c,d,e,g){this.c.push({type:"bezierCurveTo",cp1x:a,cp1y:b,cp2x:c,cp2y:d,x:e,y:g});this.f=e;this.g=g};j.quadraticCurveTo=function(a,b,c,d){var e=this.f+0.6666666666666666*(a-this.f),g=this.g+0.6666666666666666*(b-this.g),h=e+(c-this.f)/3,l=g+(d-this.g)/3;this.bezierCurveTo(e,
-g,h,l,c,d)};j.arc=function(a,b,c,d,e,g){c*=m;var h=g?"at":"wa",l=a+M(d)*c-A,n=b+L(d)*c-A,o=a+M(e)*c-A,f=b+L(e)*c-A;if(l==o&&!g){l+=0.125}this.c.push({type:h,x:a,y:b,radius:c,xStart:l,yStart:n,xEnd:o,yEnd:f})};j.rect=function(a,b,c,d){this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+d);this.lineTo(a,b+d);this.closePath()};j.strokeRect=function(a,b,c,d){this.beginPath();this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+d);this.lineTo(a,b+d);this.closePath();this.stroke()};j.fillRect=function(a,
-b,c,d){this.beginPath();this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+d);this.lineTo(a,b+d);this.closePath();this.fill()};j.createLinearGradient=function(a,b,c,d){var e=new H("gradient");return e};j.createRadialGradient=function(a,b,c,d,e,g){var h=new H("gradientradial");h.n=c;h.o=g;h.i.x=a;h.i.y=b;return h};j.drawImage=function(a,b){var c,d,e,g,h,l,n,o,f=a.runtimeStyle.width,k=a.runtimeStyle.height;a.runtimeStyle.width="auto";a.runtimeStyle.height="auto";var q=a.width,r=a.height;a.runtimeStyle.width=
-f;a.runtimeStyle.height=k;if(arguments.length==3){c=arguments[1];d=arguments[2];h=(l=0);n=(e=q);o=(g=r)}else if(arguments.length==5){c=arguments[1];d=arguments[2];e=arguments[3];g=arguments[4];h=(l=0);n=q;o=r}else if(arguments.length==9){h=arguments[1];l=arguments[2];n=arguments[3];o=arguments[4];c=arguments[5];d=arguments[6];e=arguments[7];g=arguments[8]}else{throw"Invalid number of arguments";}var s=this.b(c,d),t=[],v=10,w=10;t.push(" <g_vml_:group",' coordsize="',m*v,",",m*w,'"',' coordorigin="0,0"',
-' style="width:',v,";height:",w,";position:absolute;");if(this.a[0][0]!=1||this.a[0][1]){var x=[];x.push("M11='",this.a[0][0],"',","M12='",this.a[1][0],"',","M21='",this.a[0][1],"',","M22='",this.a[1][1],"',","Dx='",i(s.x/m),"',","Dy='",i(s.y/m),"'");var p=s,y=this.b(c+e,d),z=this.b(c,d+g),B=this.b(c+e,d+g);p.x=Math.max(p.x,y.x,z.x,B.x);p.y=Math.max(p.y,y.y,z.y,B.y);t.push("padding:0 ",i(p.x/m),"px ",i(p.y/m),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",x.join(""),", sizingmethod='clip');")}else{t.push("top:",
-i(s.y/m),"px;left:",i(s.x/m),"px;")}t.push(' ">','<g_vml_:image src="',a.src,'"',' style="width:',m*e,";"," height:",m*g,';"',' cropleft="',h/q,'"',' croptop="',l/r,'"',' cropright="',(q-h-n)/q,'"',' cropbottom="',(r-l-o)/r,'"'," />","</g_vml_:group>");this.j.insertAdjacentHTML("BeforeEnd",t.join(""))};j.stroke=function(a){var b=[],c=O(a?this.fillStyle:this.strokeStyle),d=c[0],e=c[1]*this.globalAlpha,g=10,h=10;b.push("<g_vml_:shape",' fillcolor="',d,'"',' filled="',Boolean(a),'"',' style="position:absolute;width:',
-g,";height:",h,';"',' coordorigin="0 0" coordsize="',m*g," ",m*h,'"',' stroked="',!a,'"',' strokeweight="',this.lineWidth,'"',' strokecolor="',d,'"',' path="');var l={x:null,y:null},n={x:null,y:null};for(var o=0;o<this.c.length;o++){var f=this.c[o];if(f.type=="moveTo"){b.push(" m ");var k=this.b(f.x,f.y);b.push(i(k.x),",",i(k.y))}else if(f.type=="lineTo"){b.push(" l ");var k=this.b(f.x,f.y);b.push(i(k.x),",",i(k.y))}else if(f.type=="close"){b.push(" x ")}else if(f.type=="bezierCurveTo"){b.push(" c ");
-var k=this.b(f.x,f.y),q=this.b(f.cp1x,f.cp1y),r=this.b(f.cp2x,f.cp2y);b.push(i(q.x),",",i(q.y),",",i(r.x),",",i(r.y),",",i(k.x),",",i(k.y))}else if(f.type=="at"||f.type=="wa"){b.push(" ",f.type," ");var k=this.b(f.x,f.y),s=this.b(f.xStart,f.yStart),t=this.b(f.xEnd,f.yEnd);b.push(i(k.x-this.d*f.radius),",",i(k.y-this.e*f.radius)," ",i(k.x+this.d*f.radius),",",i(k.y+this.e*f.radius)," ",i(s.x),",",i(s.y)," ",i(t.x),",",i(t.y))}if(k){if(l.x==null||k.x<l.x){l.x=k.x}if(n.x==null||k.x>n.x){n.x=k.x}if(l.y==
-null||k.y<l.y){l.y=k.y}if(n.y==null||k.y>n.y){n.y=k.y}}}b.push(' ">');if(typeof this.fillStyle=="object"){var v={x:"50%",y:"50%"},w=n.x-l.x,x=n.y-l.y,p=w>x?w:x;v.x=i(this.fillStyle.i.x/w*100+50)+"%";v.y=i(this.fillStyle.i.y/x*100+50)+"%";var y=[];if(this.fillStyle.p=="gradientradial"){var z=this.fillStyle.n/p*100,B=this.fillStyle.o/p*100-z}else{var z=0,B=100}var C={offset:null,color:null},D={offset:null,color:null};this.fillStyle.h.sort(function(T,U){return T.offset-U.offset});for(var o=0;o<this.fillStyle.h.length;o++){var u=
-this.fillStyle.h[o];y.push(u.offset*B+z,"% ",u.color,",");if(u.offset>C.offset||C.offset==null){C.offset=u.offset;C.color=u.color}if(u.offset<D.offset||D.offset==null){D.offset=u.offset;D.color=u.color}}y.pop();b.push("<g_vml_:fill",' color="',D.color,'"',' color2="',C.color,'"',' type="',this.fillStyle.p,'"',' focusposition="',v.x,", ",v.y,'"',' colors="',y.join(""),'"',' opacity="',e,'" />')}else if(a){b.push('<g_vml_:fill color="',d,'" opacity="',e,'" />')}else{b.push("<g_vml_:stroke",' opacity="',
-e,'"',' joinstyle="',this.lineJoin,'"',' miterlimit="',this.miterLimit,'"',' endcap="',S(this.lineCap),'"',' weight="',this.lineWidth,'px"',' color="',d,'" />')}b.push("</g_vml_:shape>");this.j.insertAdjacentHTML("beforeEnd",b.join(""));this.c=[]};j.fill=function(){this.stroke(true)};j.closePath=function(){this.c.push({type:"close"})};j.b=function(a,b){return{x:m*(a*this.a[0][0]+b*this.a[1][0]+this.a[2][0])-A,y:m*(a*this.a[0][1]+b*this.a[1][1]+this.a[2][1])-A}};j.save=function(){var a={};N(this,a);
-this.k.push(a);this.m.push(this.a);this.a=G(J(),this.a)};j.restore=function(){N(this.k.pop(),this);this.a=this.m.pop()};j.translate=function(a,b){var c=[[1,0,0],[0,1,0],[a,b,1]];this.a=G(c,this.a)};j.rotate=function(a){var b=M(a),c=L(a),d=[[b,c,0],[-c,b,0],[0,0,1]];this.a=G(d,this.a)};j.scale=function(a,b){this.d*=a;this.e*=b;var c=[[a,0,0],[0,b,0],[0,0,1]];this.a=G(c,this.a)};j.clip=function(){};j.arcTo=function(){};j.createPattern=function(){return new P};function H(a){this.p=a;this.n=0;this.o=
-0;this.h=[];this.i={x:0,y:0}}H.prototype.addColorStop=function(a,b){b=O(b);this.h.push({offset:1-a,color:b})};function P(){}G_vmlCanvasManager=Q;CanvasRenderingContext2D=K;CanvasGradient=H;CanvasPattern=P})()};
+// Copyright 2006 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+// Known Issues:
+//
+// * Patterns are not implemented.
+// * Radial gradient are not implemented. The VML version of these look very
+//   different from the canvas one.
+// * Clipping paths are not implemented.
+// * Coordsize. The width and height attribute have higher priority than the
+//   width and height style values which isn't correct.
+// * Painting mode isn't implemented.
+// * Canvas width/height should is using content-box by default. IE in
+//   Quirks mode will draw the canvas using border-box. Either change your
+//   doctype to HTML5
+//   (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)
+//   or use Box Sizing Behavior from WebFX
+//   (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)
+// * Non uniform scaling does not correctly scale strokes.
+// * Optimize. There is always room for speed improvements.
+
+// Only add this code if we do not already have a canvas implementation
+if (!document.createElement('canvas').getContext) {
+
+(function() {
+
+  // alias some functions to make (compiled) code shorter
+  var m = Math;
+  var mr = m.round;
+  var ms = m.sin;
+  var mc = m.cos;
+  var abs = m.abs;
+  var sqrt = m.sqrt;
+
+  // this is used for sub pixel precision
+  var Z = 10;
+  var Z2 = Z / 2;
+
+  /**
+   * This funtion is assigned to the <canvas> elements as element.getContext().
+   * @this {HTMLElement}
+   * @return {CanvasRenderingContext2D_}
+   */
+  function getContext() {
+    return this.context_ ||
+        (this.context_ = new CanvasRenderingContext2D_(this));
+  }
+
+  var slice = Array.prototype.slice;
+
+  /**
+   * Binds a function to an object. The returned function will always use the
+   * passed in {@code obj} as {@code this}.
+   *
+   * Example:
+   *
+   *   g = bind(f, obj, a, b)
+   *   g(c, d) // will do f.call(obj, a, b, c, d)
+   *
+   * @param {Function} f The function to bind the object to
+   * @param {Object} obj The object that should act as this when the function
+   *     is called
+   * @param {*} var_args Rest arguments that will be used as the initial
+   *     arguments when the function is called
+   * @return {Function} A new function that has bound this
+   */
+  function bind(f, obj, var_args) {
+    var a = slice.call(arguments, 2);
+    return function() {
+      return f.apply(obj, a.concat(slice.call(arguments)));
+    };
+  }
+
+  var G_vmlCanvasManager_ = {
+    init: function(opt_doc) {
+      if (/MSIE/.test(navigator.userAgent) && !window.opera) {
+        var doc = opt_doc || document;
+        // Create a dummy element so that IE will allow canvas elements to be
+        // recognized.
+        doc.createElement('canvas');
+        doc.attachEvent('onreadystatechange', bind(this.init_, this, doc));
+      }
+    },
+
+    init_: function(doc) {
+      // create xmlns
+      if (!doc.namespaces['g_vml_']) {
+        doc.namespaces.add('g_vml_', 'urn:schemas-microsoft-com:vml',
+                           '#default#VML');
+
+      }
+      if (!doc.namespaces['g_o_']) {
+        doc.namespaces.add('g_o_', 'urn:schemas-microsoft-com:office:office',
+                           '#default#VML');
+      }
+
+      // Setup default CSS.  Only add one style sheet per document
+      if (!doc.styleSheets['ex_canvas_']) {
+        var ss = doc.createStyleSheet();
+        ss.owningElement.id = 'ex_canvas_';
+        ss.cssText = 'canvas{display:inline-block;overflow:hidden;' +
+            // default size is 300x150 in Gecko and Opera
+            'text-align:left;width:300px;height:150px}' +
+            'g_vml_\\:*{behavior:url(#default#VML)}' +
+            'g_o_\\:*{behavior:url(#default#VML)}';
+
+      }
+
+      // find all canvas elements
+      var els = doc.getElementsByTagName('canvas');
+      for (var i = 0; i < els.length; i++) {
+        this.initElement(els[i]);
+      }
+    },
+
+    /**
+     * Public initializes a canvas element so that it can be used as canvas
+     * element from now on. This is called automatically before the page is
+     * loaded but if you are creating elements using createElement you need to
+     * make sure this is called on the element.
+     * @param {HTMLElement} el The canvas element to initialize.
+     * @return {HTMLElement} the element that was created.
+     */
+    initElement: function(el) {
+      if (!el.getContext) {
+
+        el.getContext = getContext;
+
+        // Remove fallback content. There is no way to hide text nodes so we
+        // just remove all childNodes. We could hide all elements and remove
+        // text nodes but who really cares about the fallback content.
+        el.innerHTML = '';
+
+        // do not use inline function because that will leak memory
+        el.attachEvent('onpropertychange', onPropertyChange);
+        el.attachEvent('onresize', onResize);
+
+        var attrs = el.attributes;
+        if (attrs.width && attrs.width.specified) {
+          // TODO: use runtimeStyle and coordsize
+          // el.getContext().setWidth_(attrs.width.nodeValue);
+          el.style.width = attrs.width.nodeValue + 'px';
+        } else {
+          el.width = el.clientWidth;
+        }
+        if (attrs.height && attrs.height.specified) {
+          // TODO: use runtimeStyle and coordsize
+          // el.getContext().setHeight_(attrs.height.nodeValue);
+          el.style.height = attrs.height.nodeValue + 'px';
+        } else {
+          el.height = el.clientHeight;
+        }
+        //el.getContext().setCoordsize_()
+      }
+      return el;
+    }
+  };
+
+  function onPropertyChange(e) {
+    var el = e.srcElement;
+
+    switch (e.propertyName) {
+      case 'width':
+        el.style.width = el.attributes.width.nodeValue + 'px';
+        el.getContext().clearRect();
+        break;
+      case 'height':
+        el.style.height = el.attributes.height.nodeValue + 'px';
+        el.getContext().clearRect();
+        break;
+    }
+  }
+
+  function onResize(e) {
+    var el = e.srcElement;
+    if (el.firstChild) {
+      el.firstChild.style.width =  el.clientWidth + 'px';
+      el.firstChild.style.height = el.clientHeight + 'px';
+    }
+  }
+
+  G_vmlCanvasManager_.init();
+
+  // precompute "00" to "FF"
+  var dec2hex = [];
+  for (var i = 0; i < 16; i++) {
+    for (var j = 0; j < 16; j++) {
+      dec2hex[i * 16 + j] = i.toString(16) + j.toString(16);
+    }
+  }
+
+  function createMatrixIdentity() {
+    return [
+      [1, 0, 0],
+      [0, 1, 0],
+      [0, 0, 1]
+    ];
+  }
+
+  function matrixMultiply(m1, m2) {
+    var result = createMatrixIdentity();
+
+    for (var x = 0; x < 3; x++) {
+      for (var y = 0; y < 3; y++) {
+        var sum = 0;
+
+        for (var z = 0; z < 3; z++) {
+          sum += m1[x][z] * m2[z][y];
+        }
+
+        result[x][y] = sum;
+      }
+    }
+    return result;
+  }
+
+  function copyState(o1, o2) {
+    o2.fillStyle     = o1.fillStyle;
+    o2.lineCap       = o1.lineCap;
+    o2.lineJoin      = o1.lineJoin;
+    o2.lineWidth     = o1.lineWidth;
+    o2.miterLimit    = o1.miterLimit;
+    o2.shadowBlur    = o1.shadowBlur;
+    o2.shadowColor   = o1.shadowColor;
+    o2.shadowOffsetX = o1.shadowOffsetX;
+    o2.shadowOffsetY = o1.shadowOffsetY;
+    o2.strokeStyle   = o1.strokeStyle;
+    o2.globalAlpha   = o1.globalAlpha;
+    o2.arcScaleX_    = o1.arcScaleX_;
+    o2.arcScaleY_    = o1.arcScaleY_;
+    o2.lineScale_    = o1.lineScale_;
+  }
+
+  function processStyle(styleString) {
+    var str, alpha = 1;
+
+    styleString = String(styleString);
+    if (styleString.substring(0, 3) == 'rgb') {
+      var start = styleString.indexOf('(', 3);
+      var end = styleString.indexOf(')', start + 1);
+      var guts = styleString.substring(start + 1, end).split(',');
+
+      str = '#';
+      for (var i = 0; i < 3; i++) {
+        str += dec2hex[Number(guts[i])];
+      }
+
+      if (guts.length == 4 && styleString.substr(3, 1) == 'a') {
+        alpha = guts[3];
+      }
+    } else {
+      str = styleString;
+    }
+
+    return {color: str, alpha: alpha};
+  }
+
+  function processLineCap(lineCap) {
+    switch (lineCap) {
+      case 'butt':
+        return 'flat';
+      case 'round':
+        return 'round';
+      case 'square':
+      default:
+        return 'square';
+    }
+  }
+
+  /**
+   * This class implements CanvasRenderingContext2D interface as described by
+   * the WHATWG.
+   * @param {HTMLElement} surfaceElement The element that the 2D context should
+   * be associated with
+   */
+  function CanvasRenderingContext2D_(surfaceElement) {
+    this.m_ = createMatrixIdentity();
+
+    this.mStack_ = [];
+    this.aStack_ = [];
+    this.currentPath_ = [];
+
+    // Canvas context properties
+    this.strokeStyle = '#000';
+    this.fillStyle = '#000';
+
+    this.lineWidth = 1;
+    this.lineJoin = 'miter';
+    this.lineCap = 'butt';
+    this.miterLimit = Z * 1;
+    this.globalAlpha = 1;
+    this.canvas = surfaceElement;
+
+    var el = surfaceElement.ownerDocument.createElement('div');
+    el.style.width =  surfaceElement.clientWidth + 'px';
+    el.style.height = surfaceElement.clientHeight + 'px';
+    el.style.overflow = 'hidden';
+    el.style.position = 'absolute';
+    surfaceElement.appendChild(el);
+
+    this.element_ = el;
+    this.arcScaleX_ = 1;
+    this.arcScaleY_ = 1;
+    this.lineScale_ = 1;
+  }
+
+  var contextPrototype = CanvasRenderingContext2D_.prototype;
+  contextPrototype.clearRect = function() {
+    this.element_.innerHTML = '';
+  };
+
+  contextPrototype.beginPath = function() {
+    // TODO: Branch current matrix so that save/restore has no effect
+    //       as per safari docs.
+    this.currentPath_ = [];
+  };
+
+  contextPrototype.moveTo = function(aX, aY) {
+    var p = this.getCoords_(aX, aY);
+    this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y});
+    this.currentX_ = p.x;
+    this.currentY_ = p.y;
+  };
+
+  contextPrototype.lineTo = function(aX, aY) {
+    var p = this.getCoords_(aX, aY);
+    this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y});
+
+    this.currentX_ = p.x;
+    this.currentY_ = p.y;
+  };
+
+  contextPrototype.bezierCurveTo = function(aCP1x, aCP1y,
+                                            aCP2x, aCP2y,
+                                            aX, aY) {
+    var p = this.getCoords_(aX, aY);
+    var cp1 = this.getCoords_(aCP1x, aCP1y);
+    var cp2 = this.getCoords_(aCP2x, aCP2y);
+    bezierCurveTo(this, cp1, cp2, p);
+  };
+
+  // Helper function that takes the already fixed cordinates.
+  function bezierCurveTo(self, cp1, cp2, p) {
+    self.currentPath_.push({
+      type: 'bezierCurveTo',
+      cp1x: cp1.x,
+      cp1y: cp1.y,
+      cp2x: cp2.x,
+      cp2y: cp2.y,
+      x: p.x,
+      y: p.y
+    });
+    self.currentX_ = p.x;
+    self.currentY_ = p.y;
+  }
+
+  contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) {
+    // the following is lifted almost directly from
+    // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes
+
+    var cp = this.getCoords_(aCPx, aCPy);
+    var p = this.getCoords_(aX, aY);
+
+    var cp1 = {
+      x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_),
+      y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_)
+    };
+    var cp2 = {
+      x: cp1.x + (p.x - this.currentX_) / 3.0,
+      y: cp1.y + (p.y - this.currentY_) / 3.0
+    };
+
+    bezierCurveTo(this, cp1, cp2, p);
+  };
+
+  contextPrototype.arc = function(aX, aY, aRadius,
+                                  aStartAngle, aEndAngle, aClockwise) {
+    aRadius *= Z;
+    var arcType = aClockwise ? 'at' : 'wa';
+
+    var xStart = aX + mc(aStartAngle) * aRadius - Z2;
+    var yStart = aY + ms(aStartAngle) * aRadius - Z2;
+
+    var xEnd = aX + mc(aEndAngle) * aRadius - Z2;
+    var yEnd = aY + ms(aEndAngle) * aRadius - Z2;
+
+    // IE won't render arches drawn counter clockwise if xStart == xEnd.
+    if (xStart == xEnd && !aClockwise) {
+      xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something
+                       // that can be represented in binary
+    }
+
+    var p = this.getCoords_(aX, aY);
+    var pStart = this.getCoords_(xStart, yStart);
+    var pEnd = this.getCoords_(xEnd, yEnd);
+
+    this.currentPath_.push({type: arcType,
+                           x: p.x,
+                           y: p.y,
+                           radius: aRadius,
+                           xStart: pStart.x,
+                           yStart: pStart.y,
+                           xEnd: pEnd.x,
+                           yEnd: pEnd.y});
+
+  };
+
+  contextPrototype.rect = function(aX, aY, aWidth, aHeight) {
+    this.moveTo(aX, aY);
+    this.lineTo(aX + aWidth, aY);
+    this.lineTo(aX + aWidth, aY + aHeight);
+    this.lineTo(aX, aY + aHeight);
+    this.closePath();
+  };
+
+  contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) {
+    var oldPath = this.currentPath_;
+    this.beginPath();
+
+    this.moveTo(aX, aY);
+    this.lineTo(aX + aWidth, aY);
+    this.lineTo(aX + aWidth, aY + aHeight);
+    this.lineTo(aX, aY + aHeight);
+    this.closePath();
+    this.stroke();
+
+    this.currentPath_ = oldPath;
+  };
+
+  contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) {
+    var oldPath = this.currentPath_;
+    this.beginPath();
+
+    this.moveTo(aX, aY);
+    this.lineTo(aX + aWidth, aY);
+    this.lineTo(aX + aWidth, aY + aHeight);
+    this.lineTo(aX, aY + aHeight);
+    this.closePath();
+    this.fill();
+
+    this.currentPath_ = oldPath;
+  };
+
+  contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) {
+    var gradient = new CanvasGradient_('gradient');
+    gradient.x0_ = aX0;
+    gradient.y0_ = aY0;
+    gradient.x1_ = aX1;
+    gradient.y1_ = aY1;
+    return gradient;
+  };
+
+  contextPrototype.createRadialGradient = function(aX0, aY0, aR0,
+                                                   aX1, aY1, aR1) {
+    var gradient = new CanvasGradient_('gradientradial');
+    gradient.x0_ = aX0;
+    gradient.y0_ = aY0;
+    gradient.r0_ = aR0;
+    gradient.x1_ = aX1;
+    gradient.y1_ = aY1;
+    gradient.r1_ = aR1;
+    return gradient;
+  };
+
+  contextPrototype.drawImage = function(image, var_args) {
+    var dx, dy, dw, dh, sx, sy, sw, sh;
+
+    // to find the original width we overide the width and height
+    var oldRuntimeWidth = image.runtimeStyle.width;
+    var oldRuntimeHeight = image.runtimeStyle.height;
+    image.runtimeStyle.width = 'auto';
+    image.runtimeStyle.height = 'auto';
+
+    // get the original size
+    var w = image.width;
+    var h = image.height;
+
+    // and remove overides
+    image.runtimeStyle.width = oldRuntimeWidth;
+    image.runtimeStyle.height = oldRuntimeHeight;
+
+    if (arguments.length == 3) {
+      dx = arguments[1];
+      dy = arguments[2];
+      sx = sy = 0;
+      sw = dw = w;
+      sh = dh = h;
+    } else if (arguments.length == 5) {
+      dx = arguments[1];
+      dy = arguments[2];
+      dw = arguments[3];
+      dh = arguments[4];
+      sx = sy = 0;
+      sw = w;
+      sh = h;
+    } else if (arguments.length == 9) {
+      sx = arguments[1];
+      sy = arguments[2];
+      sw = arguments[3];
+      sh = arguments[4];
+      dx = arguments[5];
+      dy = arguments[6];
+      dw = arguments[7];
+      dh = arguments[8];
+    } else {
+      throw Error('Invalid number of arguments');
+    }
+
+    var d = this.getCoords_(dx, dy);
+
+    var w2 = sw / 2;
+    var h2 = sh / 2;
+
+    var vmlStr = [];
+
+    var W = 10;
+    var H = 10;
+
+    // For some reason that I've now forgotten, using divs didn't work
+    vmlStr.push(' <g_vml_:group',
+                ' coordsize="', Z * W, ',', Z * H, '"',
+                ' coordorigin="0,0"' ,
+                ' style="width:', W, 'px;height:', H, 'px;position:absolute;');
+
+    // If filters are necessary (rotation exists), create them
+    // filters are bog-slow, so only create them if abbsolutely necessary
+    // The following check doesn't account for skews (which don't exist
+    // in the canvas spec (yet) anyway.
+
+    if (this.m_[0][0] != 1 || this.m_[0][1]) {
+      var filter = [];
+
+      // Note the 12/21 reversal
+      filter.push('M11=', this.m_[0][0], ',',
+                  'M12=', this.m_[1][0], ',',
+                  'M21=', this.m_[0][1], ',',
+                  'M22=', this.m_[1][1], ',',
+                  'Dx=', mr(d.x / Z), ',',
+                  'Dy=', mr(d.y / Z), '');
+
+      // Bounding box calculation (need to minimize displayed area so that
+      // filters don't waste time on unused pixels.
+      var max = d;
+      var c2 = this.getCoords_(dx + dw, dy);
+      var c3 = this.getCoords_(dx, dy + dh);
+      var c4 = this.getCoords_(dx + dw, dy + dh);
+
+      max.x = m.max(max.x, c2.x, c3.x, c4.x);
+      max.y = m.max(max.y, c2.y, c3.y, c4.y);
+
+      vmlStr.push('padding:0 ', mr(max.x / Z), 'px ', mr(max.y / Z),
+                  'px 0;filter:progid:DXImageTransform.Microsoft.Matrix(',
+                  filter.join(''), ", sizingmethod='clip');")
+    } else {
+      vmlStr.push('top:', mr(d.y / Z), 'px;left:', mr(d.x / Z), 'px;');
+    }
+
+    vmlStr.push(' ">' ,
+                '<g_vml_:image src="', image.src, '"',
+                ' style="width:', Z * dw, 'px;',
+                ' height:', Z * dh, 'px;"',
+                ' cropleft="', sx / w, '"',
+                ' croptop="', sy / h, '"',
+                ' cropright="', (w - sx - sw) / w, '"',
+                ' cropbottom="', (h - sy - sh) / h, '"',
+                ' />',
+                '</g_vml_:group>');
+
+    this.element_.insertAdjacentHTML('BeforeEnd',
+                                    vmlStr.join(''));
+  };
+
+  contextPrototype.stroke = function(aFill) {
+    var lineStr = [];
+    var lineOpen = false;
+    var a = processStyle(aFill ? this.fillStyle : this.strokeStyle);
+    var color = a.color;
+    var opacity = a.alpha * this.globalAlpha;
+
+    var W = 10;
+    var H = 10;
+
+    lineStr.push('<g_vml_:shape',
+                 ' filled="', !!aFill, '"',
+                 ' style="position:absolute;width:', W, 'px;height:', H, 'px;"',
+                 ' coordorigin="0 0" coordsize="', Z * W, ' ', Z * H, '"',
+                 ' stroked="', !aFill, '"',
+                 ' path="');
+
+    var newSeq = false;
+    var min = {x: null, y: null};
+    var max = {x: null, y: null};
+
+    for (var i = 0; i < this.currentPath_.length; i++) {
+      var p = this.currentPath_[i];
+      var c;
+
+      switch (p.type) {
+        case 'moveTo':
+          c = p;
+          lineStr.push(' m ', mr(p.x), ',', mr(p.y));
+          break;
+        case 'lineTo':
+          lineStr.push(' l ', mr(p.x), ',', mr(p.y));
+          break;
+        case 'close':
+          lineStr.push(' x ');
+          p = null;
+          break;
+        case 'bezierCurveTo':
+          lineStr.push(' c ',
+                       mr(p.cp1x), ',', mr(p.cp1y), ',',
+                       mr(p.cp2x), ',', mr(p.cp2y), ',',
+                       mr(p.x), ',', mr(p.y));
+          break;
+        case 'at':
+        case 'wa':
+          lineStr.push(' ', p.type, ' ',
+                       mr(p.x - this.arcScaleX_ * p.radius), ',',
+                       mr(p.y - this.arcScaleY_ * p.radius), ' ',
+                       mr(p.x + this.arcScaleX_ * p.radius), ',',
+                       mr(p.y + this.arcScaleY_ * p.radius), ' ',
+                       mr(p.xStart), ',', mr(p.yStart), ' ',
+                       mr(p.xEnd), ',', mr(p.yEnd));
+          break;
+      }
+
+
+      // TODO: Following is broken for curves due to
+      //       move to proper paths.
+
+      // Figure out dimensions so we can do gradient fills
+      // properly
+      if (p) {
+        if (min.x == null || p.x < min.x) {
+          min.x = p.x;
+        }
+        if (max.x == null || p.x > max.x) {
+          max.x = p.x;
+        }
+        if (min.y == null || p.y < min.y) {
+          min.y = p.y;
+        }
+        if (max.y == null || p.y > max.y) {
+          max.y = p.y;
+        }
+      }
+    }
+    lineStr.push(' ">');
+
+    if (!aFill) {
+      var lineWidth = this.lineScale_ * this.lineWidth;
+
+      // VML cannot correctly render a line if the width is less than 1px.
+      // In that case, we dilute the color to make the line look thinner.
+      if (lineWidth < 1) {
+        opacity *= lineWidth;
+      }
+
+      lineStr.push(
+        '<g_vml_:stroke',
+        ' opacity="', opacity, '"',
+        ' joinstyle="', this.lineJoin, '"',
+        ' miterlimit="', this.miterLimit, '"',
+        ' endcap="', processLineCap(this.lineCap), '"',
+        ' weight="', lineWidth, 'px"',
+        ' color="', color, '" />'
+      );
+    } else if (typeof this.fillStyle == 'object') {
+      var fillStyle = this.fillStyle;
+      var angle = 0;
+      var focus = {x: 0, y: 0};
+
+      // additional offset
+      var shift = 0;
+      // scale factor for offset
+      var expansion = 1;
+
+      if (fillStyle.type_ == 'gradient') {
+        var x0 = fillStyle.x0_ / this.arcScaleX_;
+        var y0 = fillStyle.y0_ / this.arcScaleY_;
+        var x1 = fillStyle.x1_ / this.arcScaleX_;
+        var y1 = fillStyle.y1_ / this.arcScaleY_;
+        var p0 = this.getCoords_(x0, y0);
+        var p1 = this.getCoords_(x1, y1);
+        var dx = p1.x - p0.x;
+        var dy = p1.y - p0.y;
+        angle = Math.atan2(dx, dy) * 180 / Math.PI;
+
+        // The angle should be a non-negative number.
+        if (angle < 0) {
+          angle += 360;
+        }
+
+        // Very small angles produce an unexpected result because they are
+        // converted to a scientific notation string.
+        if (angle < 1e-6) {
+          angle = 0;
+        }
+      } else {
+        var p0 = this.getCoords_(fillStyle.x0_, fillStyle.y0_);
+        var width  = max.x - min.x;
+        var height = max.y - min.y;
+        focus = {
+          x: (p0.x - min.x) / width,
+          y: (p0.y - min.y) / height
+        };
+
+        width  /= this.arcScaleX_ * Z;
+        height /= this.arcScaleY_ * Z;
+        var dimension = m.max(width, height);
+        shift = 2 * fillStyle.r0_ / dimension;
+        expansion = 2 * fillStyle.r1_ / dimension - shift;
+      }
+
+      // We need to sort the color stops in ascending order by offset,
+      // otherwise IE won't interpret it correctly.
+      var stops = fillStyle.colors_;
+      stops.sort(function(cs1, cs2) {
+        return cs1.offset - cs2.offset;
+      });
+
+      var length = stops.length;
+      var color1 = stops[0].color;
+      var color2 = stops[length - 1].color;
+      var opacity1 = stops[0].alpha * this.globalAlpha;
+      var opacity2 = stops[length - 1].alpha * this.globalAlpha;
+
+      var colors = [];
+      for (var i = 0; i < length; i++) {
+        var stop = stops[i];
+        colors.push(stop.offset * expansion + shift + ' ' + stop.color);
+      }
+
+      // When colors attribute is used, the meanings of opacity and o:opacity2
+      // are reversed.
+      lineStr.push('<g_vml_:fill type="', fillStyle.type_, '"',
+                   ' method="none" focus="100%"',
+                   ' color="', color1, '"',
+                   ' color2="', color2, '"',
+                   ' colors="', colors.join(','), '"',
+                   ' opacity="', opacity2, '"',
+                   ' g_o_:opacity2="', opacity1, '"',
+                   ' angle="', angle, '"',
+                   ' focusposition="', focus.x, ',', focus.y, '" />');
+    } else {
+      lineStr.push('<g_vml_:fill color="', color, '" opacity="', opacity,
+                   '" />');
+    }
+
+    lineStr.push('</g_vml_:shape>');
+
+    this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));
+  };
+
+  contextPrototype.fill = function() {
+    this.stroke(true);
+  }
+
+  contextPrototype.closePath = function() {
+    this.currentPath_.push({type: 'close'});
+  };
+
+  /**
+   * @private
+   */
+  contextPrototype.getCoords_ = function(aX, aY) {
+    var m = this.m_;
+    return {
+      x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2,
+      y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2
+    }
+  };
+
+  contextPrototype.save = function() {
+    var o = {};
+    copyState(this, o);
+    this.aStack_.push(o);
+    this.mStack_.push(this.m_);
+    this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);
+  };
+
+  contextPrototype.restore = function() {
+    copyState(this.aStack_.pop(), this);
+    this.m_ = this.mStack_.pop();
+  };
+
+  function matrixIsFinite(m) {
+    for (var j = 0; j < 3; j++) {
+      for (var k = 0; k < 2; k++) {
+        if (!isFinite(m[j][k]) || isNaN(m[j][k])) {
+          return false;
+        }
+      }
+    }
+    return true;
+  }
+
+  function setM(ctx, m, updateLineScale) {
+    if (!matrixIsFinite(m)) {
+      return;
+    }
+    ctx.m_ = m;
+
+    if (updateLineScale) {
+      // Get the line scale.
+      // Determinant of this.m_ means how much the area is enlarged by the
+      // transformation. So its square root can be used as a scale factor
+      // for width.
+      var det = m[0][0] * m[1][1] - m[0][1] * m[1][0];
+      ctx.lineScale_ = sqrt(abs(det));
+    }
+  }
+
+  contextPrototype.translate = function(aX, aY) {
+    var m1 = [
+      [1,  0,  0],
+      [0,  1,  0],
+      [aX, aY, 1]
+    ];
+
+    setM(this, matrixMultiply(m1, this.m_), false);
+  };
+
+  contextPrototype.rotate = function(aRot) {
+    var c = mc(aRot);
+    var s = ms(aRot);
+
+    var m1 = [
+      [c,  s, 0],
+      [-s, c, 0],
+      [0,  0, 1]
+    ];
+
+    setM(this, matrixMultiply(m1, this.m_), false);
+  };
+
+  contextPrototype.scale = function(aX, aY) {
+    this.arcScaleX_ *= aX;
+    this.arcScaleY_ *= aY;
+    var m1 = [
+      [aX, 0,  0],
+      [0,  aY, 0],
+      [0,  0,  1]
+    ];
+
+    setM(this, matrixMultiply(m1, this.m_), true);
+  };
+
+  contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) {
+    var m1 = [
+      [m11, m12, 0],
+      [m21, m22, 0],
+      [dx,  dy,  1]
+    ];
+
+    setM(this, matrixMultiply(m1, this.m_), true);
+  };
+
+  contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) {
+    var m = [
+      [m11, m12, 0],
+      [m21, m22, 0],
+      [dx,  dy,  1]
+    ];
+
+    setM(this, m, true);
+  };
+
+  /******** STUBS ********/
+  contextPrototype.clip = function() {
+    // TODO: Implement
+  };
+
+  contextPrototype.arcTo = function() {
+    // TODO: Implement
+  };
+
+  contextPrototype.createPattern = function() {
+    return new CanvasPattern_;
+  };
+
+  // Gradient / Pattern Stubs
+  function CanvasGradient_(aType) {
+    this.type_ = aType;
+    this.x0_ = 0;
+    this.y0_ = 0;
+    this.r0_ = 0;
+    this.x1_ = 0;
+    this.y1_ = 0;
+    this.r1_ = 0;
+    this.colors_ = [];
+  }
+
+  CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) {
+    aColor = processStyle(aColor);
+    this.colors_.push({offset: aOffset,
+                       color: aColor.color,
+                       alpha: aColor.alpha});
+  };
+
+  function CanvasPattern_() {}
+
+  // set up externs
+  G_vmlCanvasManager = G_vmlCanvasManager_;
+  CanvasRenderingContext2D = CanvasRenderingContext2D_;
+  CanvasGradient = CanvasGradient_;
+  CanvasPattern = CanvasPattern_;
+
+})();
+
+} // if
--- a/mercurial/transaction.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/mercurial/transaction.py	Thu May 01 19:24:03 2014 -0500
@@ -220,6 +220,7 @@
         if self.count != 0:
             return
         self.file.close()
+        self.backupsfile.close()
         self.entries = []
         if self.after:
             self.after()
@@ -243,6 +244,7 @@
         self.count = 0
         self.usages = 0
         self.file.close()
+        self.backupsfile.close()
 
         if self.onabort is not None:
             self.onabort()
--- a/mercurial/ui.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/mercurial/ui.py	Thu May 01 19:24:03 2014 -0500
@@ -689,7 +689,12 @@
             return default
         try:
             self.write_err(self.label(prompt or _('password: '), 'ui.prompt'))
-            return getpass.getpass('')
+            # disable getpass() only if explicitly specified. it's still valid
+            # to interact with tty even if fin is not a tty.
+            if self.configbool('ui', 'nontty'):
+                return self.fin.readline().rstrip('\n')
+            else:
+                return getpass.getpass('')
         except EOFError:
             raise util.Abort(_('response expected'))
     def status(self, *msg, **opts):
--- a/mercurial/win32.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/mercurial/win32.py	Thu May 01 19:24:03 2014 -0500
@@ -24,6 +24,7 @@
 
 # GetLastError
 _ERROR_SUCCESS = 0
+_ERROR_NO_MORE_FILES = 18
 _ERROR_SHARING_VIOLATION = 32
 _ERROR_INVALID_PARAMETER = 87
 _ERROR_INSUFFICIENT_BUFFER = 122
--- a/mercurial/wireproto.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/mercurial/wireproto.py	Thu May 01 19:24:03 2014 -0500
@@ -803,12 +803,35 @@
         finally:
             fp.close()
             os.unlink(tempname)
+    except bundle2.UnknownPartError, exc:
+            bundler = bundle2.bundle20(repo.ui)
+            part = bundle2.bundlepart('B2X:ERROR:UNKNOWNPART',
+                                      [('parttype', str(exc))])
+            bundler.addpart(part)
+            return streamres(bundler.getchunks())
     except util.Abort, inst:
         # The old code we moved used sys.stderr directly.
         # We did not change it to minimise code change.
         # This need to be moved to something proper.
         # Feel free to do it.
-        sys.stderr.write("abort: %s\n" % inst)
-        return pushres(0)
-    except exchange.PushRaced, exc:
-        return pusherr(str(exc))
+        if getattr(inst, 'duringunbundle2', False):
+            bundler = bundle2.bundle20(repo.ui)
+            manargs = [('message', str(inst))]
+            advargs = []
+            if inst.hint is not None:
+                advargs.append(('hint', inst.hint))
+            bundler.addpart(bundle2.bundlepart('B2X:ERROR:ABORT',
+                                               manargs, advargs))
+            return streamres(bundler.getchunks())
+        else:
+            sys.stderr.write("abort: %s\n" % inst)
+            return pushres(0)
+    except error.PushRaced, exc:
+        if getattr(exc, 'duringunbundle2', False):
+            bundler = bundle2.bundle20(repo.ui)
+            part = bundle2.bundlepart('B2X:ERROR:PUSHRACED',
+                                      [('message', str(exc))])
+            bundler.addpart(part)
+            return streamres(bundler.getchunks())
+        else:
+            return pusherr(str(exc))
--- a/tests/hghave.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/tests/hghave.py	Thu May 01 19:24:03 2014 -0500
@@ -259,6 +259,10 @@
 def has_serve():
     return os.name != 'nt' # gross approximation
 
+def has_test_repo():
+    t = os.environ["TESTDIR"]
+    return os.path.isdir(os.path.join(t, "..", ".hg"))
+
 def has_tic():
     try:
         import curses
@@ -317,6 +321,7 @@
     "svn-bindings": (has_svn_bindings, "subversion python bindings"),
     "symlink": (has_symlink, "symbolic links"),
     "system-sh": (has_system_sh, "system() uses sh"),
+    "test-repo": (has_test_repo, "running tests from repository"),
     "tic": (has_tic, "terminfo compiler and curses module"),
     "tla": (has_tla, "GNU Arch tla client"),
     "unix-permissions": (has_unix_permissions, "unix-style permissions"),
--- a/tests/killdaemons.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/tests/killdaemons.py	Thu May 01 19:24:03 2014 -0500
@@ -43,7 +43,7 @@
             elif r == WAIT_TIMEOUT:
                 logfn('# Daemon process %d is stuck')
             else:
-                check(r) # any error
+                _check(r) # any error
         except: #re-raises
             ctypes.windll.kernel32.CloseHandle(handle) # no _check, keep error
             raise
--- a/tests/test-archive-symlinks.t	Thu Apr 17 16:56:15 2014 -0400
+++ b/tests/test-archive-symlinks.t	Thu May 01 19:24:03 2014 -0500
@@ -32,7 +32,7 @@
 zip
 
   $ cd "$origdir"
-  $ unzip archive.zip > /dev/null
+  $ unzip archive.zip > /dev/null 2>&1
   $ cd zip
   $ "$TESTDIR/readlink.py" dangling
   dangling -> nothing
--- a/tests/test-bundle2.t	Thu Apr 17 16:56:15 2014 -0400
+++ b/tests/test-bundle2.t	Thu May 01 19:24:03 2014 -0500
@@ -15,6 +15,7 @@
   > from mercurial import scmutil
   > from mercurial import discovery
   > from mercurial import changegroup
+  > from mercurial import error
   > cmdtable = {}
   > command = cmdutil.command(cmdtable)
   > 
@@ -59,6 +60,7 @@
   >           ('', 'unknown', False, 'include an unknown mandatory part in the bundle'),
   >           ('', 'parts', False, 'include some arbitrary parts to the bundle'),
   >           ('', 'reply', False, 'produce a reply bundle'),
+  >           ('', 'pushrace', False, 'includes a check:head part with unknown nodes'),
   >           ('r', 'rev', [], 'includes those changeset in the bundle'),],
   >          '[OUTPUTFILE]')
   > def cmdbundle2(ui, repo, path=None, **opts):
@@ -75,6 +77,10 @@
   >         capsstring = 'ping-pong\nelephants=babar,celeste\ncity%3D%21=celeste%2Cville'
   >         bundler.addpart(bundle2.bundlepart('b2x:replycaps', data=capsstring))
   > 
+  >     if opts['pushrace']:
+  >         dummynode = '01234567890123456789'
+  >         bundler.addpart(bundle2.bundlepart('b2x:check:heads', data=dummynode))
+  > 
   >     revs = opts['rev']
   >     if 'rev' in opts:
   >         revs = scmutil.revrange(repo, opts['rev'])
@@ -132,6 +138,8 @@
   >             tr.close()
   >         except KeyError, exc:
   >             raise util.Abort('missing support for %s' % exc)
+  >         except error.PushRaced, exc:
+  >             raise util.Abort('push race: %s' % exc)
   >     finally:
   >         if tr is not None:
   >             tr.release()
@@ -601,6 +609,15 @@
   remote: replying to ping request (id 6)
   0 unread bytes
 
+Test push race detection
+
+  $ hg bundle2 --pushrace ../part-race.hg2
+
+  $ hg unbundle2 < ../part-race.hg2
+  0 unread bytes
+  abort: push race: repository changed while pushing - please try again
+  [255]
+
 Support for changegroup
 ===================================
 
@@ -883,3 +900,183 @@
      date:        Sat Apr 30 15:24:48 2011 +0200
      summary:     A
   
+
+Error Handling
+==============
+
+Check that errors are properly returned to the client during push.
+
+Setting up
+
+  $ cat > failpush.py << EOF
+  > """A small extension that makes push fails when using bundle2
+  > 
+  > used to test error handling in bundle2
+  > """
+  > 
+  > from mercurial import util
+  > from mercurial import bundle2
+  > from mercurial import exchange
+  > from mercurial import extensions
+  > 
+  > def _pushbundle2failpart(orig, pushop, bundler):
+  >     extradata = orig(pushop, bundler)
+  >     reason = pushop.ui.config('failpush', 'reason', None)
+  >     part = None
+  >     if reason == 'abort':
+  >         part = bundle2.bundlepart('test:abort')
+  >     if reason == 'unknown':
+  >         part = bundle2.bundlepart('TEST:UNKNOWN')
+  >     if reason == 'race':
+  >         # 20 Bytes of crap
+  >         part = bundle2.bundlepart('b2x:check:heads', data='01234567890123456789')
+  >     if part is not None:
+  >         bundler.addpart(part)
+  >     return extradata
+  > 
+  > @bundle2.parthandler("test:abort")
+  > def handleabort(op, part):
+  >     raise util.Abort('Abandon ship!', hint="don't panic")
+  > 
+  > def uisetup(ui):
+  >     extensions.wrapfunction(exchange, '_pushbundle2extraparts', _pushbundle2failpart)
+  > 
+  > EOF
+
+  $ cd main
+  $ hg up tip
+  3 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ echo 'I' > I
+  $ hg add I
+  $ hg ci -m 'I'
+  $ hg id
+  e7ec4e813ba6 tip
+  $ cd ..
+
+  $ cat << EOF >> $HGRCPATH
+  > [extensions]
+  > failpush=$TESTTMP/failpush.py
+  > EOF
+
+  $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
+  $ hg -R other serve -p $HGPORT2 -d --pid-file=other.pid -E other-error.log
+  $ cat other.pid >> $DAEMON_PIDS
+
+Doing the actual push: Abort error
+
+  $ cat << EOF >> $HGRCPATH
+  > [failpush]
+  > reason = abort
+  > EOF
+
+  $ hg -R main push other -r e7ec4e813ba6
+  pushing to other
+  searching for changes
+  abort: Abandon ship!
+  (don't panic)
+  [255]
+
+  $ hg -R main push ssh://user@dummy/other -r e7ec4e813ba6
+  pushing to ssh://user@dummy/other
+  searching for changes
+  abort: Abandon ship!
+  (don't panic)
+  [255]
+
+  $ hg -R main push http://localhost:$HGPORT2/ -r e7ec4e813ba6
+  pushing to http://localhost:$HGPORT2/
+  searching for changes
+  abort: Abandon ship!
+  (don't panic)
+  [255]
+
+
+Doing the actual push: unknown mandatory parts
+
+  $ cat << EOF >> $HGRCPATH
+  > [failpush]
+  > reason = unknown
+  > EOF
+
+  $ hg -R main push other -r e7ec4e813ba6
+  pushing to other
+  searching for changes
+  abort: missing support for 'test:unknown'
+  [255]
+
+  $ hg -R main push ssh://user@dummy/other -r e7ec4e813ba6
+  pushing to ssh://user@dummy/other
+  searching for changes
+  abort: missing support for "'test:unknown'"
+  [255]
+
+  $ hg -R main push http://localhost:$HGPORT2/ -r e7ec4e813ba6
+  pushing to http://localhost:$HGPORT2/
+  searching for changes
+  abort: missing support for "'test:unknown'"
+  [255]
+
+Doing the actual push: race
+
+  $ cat << EOF >> $HGRCPATH
+  > [failpush]
+  > reason = race
+  > EOF
+
+  $ hg -R main push other -r e7ec4e813ba6
+  pushing to other
+  searching for changes
+  abort: push failed:
+  'repository changed while pushing - please try again'
+  [255]
+
+  $ hg -R main push ssh://user@dummy/other -r e7ec4e813ba6
+  pushing to ssh://user@dummy/other
+  searching for changes
+  abort: push failed:
+  'repository changed while pushing - please try again'
+  [255]
+
+  $ hg -R main push http://localhost:$HGPORT2/ -r e7ec4e813ba6
+  pushing to http://localhost:$HGPORT2/
+  searching for changes
+  abort: push failed:
+  'repository changed while pushing - please try again'
+  [255]
+
+Doing the actual push: hook abort
+
+  $ cat << EOF >> $HGRCPATH
+  > [failpush]
+  > reason =
+  > [hooks]
+  > b2x-pretransactionclose.failpush = false
+  > EOF
+
+  $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
+  $ hg -R other serve -p $HGPORT2 -d --pid-file=other.pid -E other-error.log
+  $ cat other.pid >> $DAEMON_PIDS
+
+  $ hg -R main push other -r e7ec4e813ba6
+  pushing to other
+  searching for changes
+  transaction abort!
+  rollback completed
+  abort: b2x-pretransactionclose.failpush hook exited with status 1
+  [255]
+
+  $ hg -R main push ssh://user@dummy/other -r e7ec4e813ba6
+  pushing to ssh://user@dummy/other
+  searching for changes
+  abort: b2x-pretransactionclose.failpush hook exited with status 1
+  remote: transaction abort!
+  remote: rollback completed
+  [255]
+
+  $ hg -R main push http://localhost:$HGPORT2/ -r e7ec4e813ba6
+  pushing to http://localhost:$HGPORT2/
+  searching for changes
+  abort: b2x-pretransactionclose.failpush hook exited with status 1
+  [255]
+
+
--- a/tests/test-check-pyflakes.t	Thu Apr 17 16:56:15 2014 -0400
+++ b/tests/test-check-pyflakes.t	Thu May 01 19:24:03 2014 -0500
@@ -1,8 +1,10 @@
-  $ "$TESTDIR/hghave" pyflakes || exit 80
+#if test-repo pyflakes
+
   $ cd "`dirname "$TESTDIR"`"
 
 run pyflakes on all tracked files ending in .py or without a file ending
 (skipping binary file random-seed)
+
   $ hg manifest 2>/dev/null | egrep "\.py$|^[^.]*$" | grep -v /random_seed$ \
   > | xargs pyflakes 2>/dev/null | "$TESTDIR/filterpyflakes.py"
   contrib/win32/hgwebdir_wsgi.py:*: 'win32traceutil' imported but unused (glob)
@@ -16,4 +18,4 @@
   tests/hghave.py:*: 'ssl' imported but unused (glob)
   contrib/win32/hgwebdir_wsgi.py:93: 'from isapi.install import *' used; unable to detect undefined names (glob)
   
-
+#endif
--- a/tests/test-churn.t	Thu Apr 17 16:56:15 2014 -0400
+++ b/tests/test-churn.t	Thu May 01 19:24:03 2014 -0500
@@ -159,4 +159,16 @@
   user4@x.com      2 *****************************
   with space       1 **************
 
+Test multibyte sequences in names
+
+  $ echo bar >> bar
+  $ hg --encoding utf-8 ci -m'changed bar' -u 'El Niño <nino@x.com>'
+  $ hg --encoding utf-8 churn -ct '{author|person}'
+  user1           4 **********************************************************
+  user3           3 ********************************************
+  user2           2 *****************************
+  user4           2 *****************************
+  El Ni\xc3\xb1o         1 *************** (esc)
+  with space      1 ***************
+
   $ cd ..
--- a/tests/test-commandserver.py	Thu Apr 17 16:56:15 2014 -0400
+++ b/tests/test-commandserver.py	Thu May 01 19:24:03 2014 -0500
@@ -294,6 +294,11 @@
     # repo.mq should be recreated to point to new queue
     runcommand(server, ['qqueue', '--active'])
 
+def getpass(server):
+    readchannel(server)
+    runcommand(server, ['debuggetpass', '--config', 'ui.interactive=True'],
+               input=cStringIO.StringIO('1234\n'))
+
 def startwithoutrepo(server):
     readchannel(server)
     runcommand(server, ['init', 'repo2'])
@@ -334,6 +339,19 @@
     hgrc.write('[extensions]\nmq=\n')
     hgrc.close()
     check(mqoutsidechanges)
+    dbg = open('dbgui.py', 'w')
+    dbg.write('from mercurial import cmdutil, commands\n'
+              'commands.norepo += " debuggetpass"\n'
+              'cmdtable = {}\n'
+              'command = cmdutil.command(cmdtable)\n'
+              '@command("debuggetpass")\n'
+              'def debuggetpass(ui):\n'
+              '    ui.write("%s\\n" % ui.getpass())\n')
+    dbg.close()
+    hgrc = open('.hg/hgrc', 'a')
+    hgrc.write('[extensions]\ndbgui=dbgui.py\n')
+    hgrc.close()
+    check(getpass)
 
     os.chdir('..')
     check(hellomessage)
--- a/tests/test-commandserver.py.out	Thu Apr 17 16:56:15 2014 -0400
+++ b/tests/test-commandserver.py.out	Thu May 01 19:24:03 2014 -0500
@@ -81,6 +81,7 @@
 ui.slash=True
 ui.interactive=False
 ui.foo=bar
+ui.nontty=true
  runcommand init foo
  runcommand -R foo showconfig ui defaults
 defaults.backout=-d "0 0"
@@ -89,6 +90,7 @@
 defaults.tag=-d "0 0"
 ui.slash=True
 ui.interactive=False
+ui.nontty=true
 
 testing hookoutput:
 
@@ -238,6 +240,11 @@
  runcommand qqueue --active
 foo
 
+testing getpass:
+
+ runcommand debuggetpass --config ui.interactive=True
+password: 1234
+
 testing hellomessage:
 
 o, 'capabilities: getencoding runcommand\nencoding: ***'
--- a/tests/test-graft.t	Thu Apr 17 16:56:15 2014 -0400
+++ b/tests/test-graft.t	Thu May 01 19:24:03 2014 -0500
@@ -571,3 +571,14 @@
   date:        Thu Jan 01 00:00:00 1970 +0000
   summary:     2
   
+
+graft works on complex revset
+
+  $ hg graft 'origin(13) or destination(origin(13))'
+  skipping ancestor revision 21
+  skipping ancestor revision 22
+  skipping revision 2 (already grafted to 22)
+  grafting revision 7
+  grafting revision 13
+  grafting revision 19
+  merging b
--- a/tests/test-identify.t	Thu Apr 17 16:56:15 2014 -0400
+++ b/tests/test-identify.t	Thu May 01 19:24:03 2014 -0500
@@ -109,6 +109,12 @@
   $ hg id --bookmarks -r . http://localhost:$HGPORT1/
   Y Z
 
+test invalid lookup
+
+  $ hg id -r noNoNO http://localhost:$HGPORT1/
+  abort: unknown revision 'noNoNO'!
+  [255]
+
 Make sure we do not obscure unknown requires file entries (issue2649)
 
   $ echo fake >> .hg/requires
--- a/tests/test-largefiles.t	Thu Apr 17 16:56:15 2014 -0400
+++ b/tests/test-largefiles.t	Thu May 01 19:24:03 2014 -0500
@@ -214,8 +214,18 @@
   ./baz/largefile
   ./dirb
   ./dirb/largefile
-  ./foo
-  $ cd ../../a
+  $ cd ..
+  $ hg mv dira dirc
+  moving .hglf/dira/baz/largefile to .hglf/dirc/baz/largefile (glob)
+  moving .hglf/dira/dirb/largefile to .hglf/dirc/dirb/largefile (glob)
+  $ find * | sort
+  dirc
+  dirc/baz
+  dirc/baz/largefile
+  dirc/dirb
+  dirc/dirb/largefile
+  $ hg up -qC
+  $ cd ../a
 
 #if serve
 Test display of largefiles in hgweb
@@ -763,6 +773,18 @@
   @  7:daea875e9014
   |
   $ cd ..
+
+Test log from outside repo
+
+  $ hg log  b/sub -T '{rev}:{node|short}  {desc|firstline}\n'
+  6:4355d653f84f  edit files yet again
+  5:9d5af5072dbd  edit files again
+  4:74c02385b94c  move files
+  1:ce8896473775  edit files
+  0:30d30fe6a5be  add files
+
+Test clone at revision
+
   $ hg clone a -r 3 c
   adding changesets
   adding manifests
--- a/tests/test-merge-criss-cross.t	Thu Apr 17 16:56:15 2014 -0400
+++ b/tests/test-merge-criss-cross.t	Thu May 01 19:24:03 2014 -0500
@@ -128,6 +128,7 @@
   $ rm f*
   $ hg up -qC .
   $ hg merge -v --debug --tool internal:dump 5 --config merge.preferancestor="*"
+  note: merging 3b08d01b0ab5+ and adfe50279922 using bids from ancestors 0f6b37dbe527 and 40663881a6dd
   
   calculating bids for ancestor 0f6b37dbe527
     searching for copies back to rev 3
@@ -172,6 +173,7 @@
         alternatively, use --config merge.preferancestor=40663881a6dd
   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg merge -v --debug --config merge.preferancestor="*"
+  note: merging adfe50279922+ and 3b08d01b0ab5 using bids from ancestors 0f6b37dbe527 and 40663881a6dd
   
   calculating bids for ancestor 0f6b37dbe527
     searching for copies back to rev 3
@@ -212,11 +214,13 @@
 
   $ hg up -qC
   $ hg merge --config merge.preferancestor="*"
+  note: merging 3b08d01b0ab5+ and adfe50279922 using bids from ancestors 0f6b37dbe527 and 40663881a6dd
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   (branch merge, don't forget to commit)
 
   $ hg up -qC
   $ hg merge -v --config merge.preferancestor="*"
+  note: merging 3b08d01b0ab5+ and adfe50279922 using bids from ancestors 0f6b37dbe527 and 40663881a6dd
   
   calculating bids for ancestor 0f6b37dbe527
   resolving manifests
@@ -235,6 +239,7 @@
 
   $ hg up -qC
   $ hg merge -v --debug --config merge.preferancestor="*"
+  note: merging 3b08d01b0ab5+ and adfe50279922 using bids from ancestors 0f6b37dbe527 and 40663881a6dd
   
   calculating bids for ancestor 0f6b37dbe527
     searching for copies back to rev 3
@@ -265,3 +270,79 @@
   (branch merge, don't forget to commit)
 
   $ cd ..
+
+http://stackoverflow.com/questions/9350005/how-do-i-specify-a-merge-base-to-use-in-a-hg-merge/9430810
+
+  $ hg init ancestor-merging
+  $ cd ancestor-merging
+  $ echo a > x
+  $ hg commit -A -m a x
+  $ hg update -q 0
+  $ echo b >> x
+  $ hg commit -m b
+  $ hg update -q 0
+  $ echo c >> x
+  $ hg commit -qm c
+  $ hg update -q 1
+  $ hg merge -q --tool internal:local 2
+  $ echo c >> x
+  $ hg commit -m bc
+  $ hg update -q 2
+  $ hg merge -q --tool internal:local 1
+  $ echo b >> x
+  $ hg commit -qm cb
+
+  $ hg merge
+  note: using 70008a2163f6 as ancestor of 0d355fdef312 and 4b8b546a3eef
+        alternatively, use --config merge.preferancestor=b211bbc6eb3c
+  merging x
+  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  $ cat x
+  a
+  c
+  b
+  c
+
+  $ hg up -qC .
+
+  $ hg merge --config merge.preferancestor=b211bbc6eb3c
+  note: using b211bbc6eb3c as ancestor of 0d355fdef312 and 4b8b546a3eef
+        alternatively, use --config merge.preferancestor=70008a2163f6
+  merging x
+  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  $ cat x
+  a
+  b
+  c
+  b
+
+  $ hg up -qC .
+
+  $ hg merge -v --config merge.preferancestor="*"
+  note: merging 0d355fdef312+ and 4b8b546a3eef using bids from ancestors 70008a2163f6 and b211bbc6eb3c
+  
+  calculating bids for ancestor 70008a2163f6
+  resolving manifests
+  
+  calculating bids for ancestor b211bbc6eb3c
+  resolving manifests
+  
+  auction for merging merge bids
+   x: multiple bids for merge action:
+    versions differ -> m
+    versions differ -> m
+   x: ambiguous merge - picked m action
+  end of auction
+  
+  merging x
+  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  $ cat x
+  a
+  c
+  b
+  c
+
+  $ cd ..
--- a/tests/test-push-warn.t	Thu Apr 17 16:56:15 2014 -0400
+++ b/tests/test-push-warn.t	Thu May 01 19:24:03 2014 -0500
@@ -378,7 +378,7 @@
   added 3 changesets with 3 changes to 1 files (+1 heads)
 
 Checking prepush logic does not allow silently pushing
-multiple new heads:
+multiple new heads but also doesn't report too many heads:
 
   $ cd ..
   $ hg init h
@@ -404,10 +404,29 @@
   adding c
   created new head
 
+  $ for i in `seq 3`; do hg -R h up -q 0; echo $i > h/b; hg -R h ci -qAm$i; done
+
   $ hg -R i push h
   pushing to h
   searching for changes
-  remote has heads on branch 'default' that are not known locally: ce4212fc8847
+  remote has heads on branch 'default' that are not known locally: 534543e22c29 764f8ec07b96 afe7cc7679f5 ce4212fc8847
+  abort: push creates new remote head 97bd0c84d346!
+  (pull and merge or see "hg help push" for details about pushing new heads)
+  [255]
+  $ hg -R h up -q 0; echo x > h/b; hg -R h ci -qAmx
+  $ hg -R i push h
+  pushing to h
+  searching for changes
+  remote has heads on branch 'default' that are not known locally: 18ddb72c4590 534543e22c29 764f8ec07b96 afe7cc7679f5 and 1 others
+  abort: push creates new remote head 97bd0c84d346!
+  (pull and merge or see "hg help push" for details about pushing new heads)
+  [255]
+  $ hg -R i push h -v
+  pushing to h
+  searching for changes
+  remote has heads on branch 'default' that are not known locally: 18ddb72c4590 534543e22c29 764f8ec07b96 afe7cc7679f5 ce4212fc8847
+  new remote heads on branch 'default':
+   97bd0c84d346
   abort: push creates new remote head 97bd0c84d346!
   (pull and merge or see "hg help push" for details about pushing new heads)
   [255]
--- a/tests/test-rebase-parameters.t	Thu Apr 17 16:56:15 2014 -0400
+++ b/tests/test-rebase-parameters.t	Thu May 01 19:24:03 2014 -0500
@@ -80,16 +80,16 @@
   [255]
 
   $ hg rebase --rev '1 & !1'
-  abort: empty "rev" revision set - nothing to rebase
-  [255]
+  empty "rev" revision set - nothing to rebase
+  [1]
 
   $ hg rebase --source '1 & !1'
-  abort: empty "source" revision set - nothing to rebase
-  [255]
+  empty "source" revision set - nothing to rebase
+  [1]
 
   $ hg rebase --base '1 & !1'
-  abort: empty "base" revision set - can't compute rebase set
-  [255]
+  empty "base" revision set - can't compute rebase set
+  [1]
 
   $ hg rebase
   nothing to rebase - working directory parent is also destination
--- a/tests/test-ssh.t	Thu Apr 17 16:56:15 2014 -0400
+++ b/tests/test-ssh.t	Thu May 01 19:24:03 2014 -0500
@@ -284,6 +284,10 @@
   $ hg id --ssh "python \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo"
   73649e48688a
 
+  $ hg id --ssh "python \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo#noNoNO"
+  abort: unknown revision 'noNoNO'!
+  [255]
+
 Test (non-)escaping of remote paths with spaces when cloning (issue3145):
 
   $ hg clone --ssh "python \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo"
@@ -382,3 +386,4 @@
   Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
   Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
   Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
+  Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
--- a/tests/test-walk.t	Thu Apr 17 16:56:15 2014 -0400
+++ b/tests/test-walk.t	Thu May 01 19:24:03 2014 -0500
@@ -331,3 +331,14 @@
   f  mammals/skunk  mammals/skunk  exact
 
   $ cd ..
+
+Test split patterns on overflow
+
+  $ cd t
+  $ echo fennel > overflow.list
+  $ python -c "for i in xrange(20000 / 100): print 'x' * 100" >> overflow.list
+  $ echo fenugreek >> overflow.list
+  $ hg debugwalk 'listfile:overflow.list' 2>&1 | grep -v '^xxx'
+  f  fennel     fennel     exact
+  f  fenugreek  fenugreek  exact
+  $ cd ..