changeset 30252:bb5869668189

merge with stable
author Augie Fackler <augie@google.com>
date Tue, 01 Nov 2016 15:40:21 -0400
parents 260af19891f2 (current diff) e5cc44ea12de (diff)
children b032a7b676c6
files
diffstat 46 files changed, 2028 insertions(+), 1014 deletions(-) [+]
line wrap: on
line diff
--- a/.hgsigs	Sun Oct 16 13:35:23 2016 -0700
+++ b/.hgsigs	Tue Nov 01 15:40:21 2016 -0400
@@ -133,3 +133,5 @@
 299546f84e68dbb9bd026f0f3a974ce4bdb93686 0 iQIcBAABCAAGBQJXn3rFAAoJELnJ3IJKpb3VmZoQAK0cdOfi/OURglnN0vYYGwdvSXTPpZauPEYEpwML3dW1j6HRnl5L+H8D8vlYzahK95X4+NNBhqtyyB6wmIVI0NkYfXfd6ACntJE/EnTdLIHIP2NAAoVsggIjiNr26ubRegaD5ya63Ofxz+Yq5iRsUUfHet7o+CyFhExyzdu+Vcz1/E9GztxNfTDVpC/mf+RMLwQTfHOhoTVbaamLCmGAIjw39w72X+vRMJoYNF44te6PvsfI67+6uuC0+9DjMnp5eL/hquSQ1qfks71rnWwxuiPcUDZloIueowVmt0z0sO4loSP1nZ5IP/6ZOoAzSjspqsxeay9sKP0kzSYLGsmCi29otyVSnXiKtyMCW5z5iM6k8XQcMi5mWy9RcpqlNYD7RUTn3g0+a8u7F6UEtske3/qoweJLPhtTmBNOfDNw4JXwOBSZea0QnIIjCeCc4ZGqfojPpbvcA4rkRpxI23YoMrT2v/kp4wgwrqK9fi8ctt8WbXpmGoAQDXWj2bWcuzj94HsAhLduFKv6sxoDz871hqjmjjnjQSU7TSNNnVzdzwqYkMB+BvhcNYxk6lcx3Aif3AayGdrWDubtU/ZRNoLzBwe6gm0udRMXBj4D/60GD6TIkYeL7HjJwfBb6Bf7qvQ6y7g0zbYG9uwBmMeduU7XchErGqQGSEyyJH3DG9OLaFOj
 ccd436f7db6d5d7b9af89715179b911d031d44f1 0 iQIVAwUAV8h7F0emf/qjRqrOAQjmdhAAgYhom8fzL/YHeVLddm71ZB+pKDviKASKGSrBHY4D5Szrh/pYTedmG9IptYue5vzXpspHAaGvZN5xkwrz1/5nmnCsLA8DFaYT9qCkize6EYzxSBtA/W1S9Mv5tObinr1EX9rCSyI4HEJYE8i1IQM5h07SqUsMKDoasd4e29t6gRWg5pfOYq1kc2MTck35W9ff1Fii8S28dqbO3cLU6g5K0pT0JLCZIq7hyTNQdxHAYfebxkVl7PZrZR383IrnyotXVKFFc44qinv94T50uR4yUNYPQ8Gu0TgoGQQjBjk1Lrxot2xpgPQAy8vx+EOJgpg/yNZnYkmJZMxjDkTGVrwvXtOXZzmy2jti7PniET9hUBCU7aNHnoJJLzIf+Vb1CIRP0ypJl8GYCZx6HIYwOQH6EtcaeUqq3r+WXWv74ijIE7OApotmutM9buTvdOLdZddBzFPIjykc6cXO+W4E0kl6u9/OHtaZ3Nynh0ejBRafRWAVw2yU3T9SgQyICsmYWJCThkj14WqCJr2b7jfGlg9MkQOUG6/3f4xz2R3SgyUD8KiGsq/vdBE53zh0YA9gppLoum6AY+z61G1NhVGlrtps90txZBehuARUUz2dJC0pBMRy8XFwXMewDSIe6ATg25pHZsxHfhcalBpJncBl8pORs7oQl+GKBVxlnV4jm1pCzLU=
 149433e68974eb5c63ccb03f794d8b57339a80c4 0 iQIcBAABAgAGBQJX8AfCAAoJELnJ3IJKpb3VnNAP/3umS8tohcZTr4m6DJm9u4XGr2m3FWQmjTEfimGpsOuBC8oCgsq0eAlORYcV68zDax+vQHQu3pqfPXaX+y4ZFDuz0ForNRiPJn+Q+tj1+NrOT1e8h4gH0nSK4rDxEGaa6x01fyC/xQMqN6iNfzbLLB7+WadZlyBRbHaUeZFDlPxPDf1rjDpu1vqwtOrVzSxMasRGEceiUegwsFdFMAefCq0ya/pKe9oV+GgGfR4qNrP7BfpOBcN/Po/ctkFCbLOhHbu6M7HpBSiD57BUy5lfhQQtSjzCKEVTyrWEH0ApjjXKuJzLSyq7xsHKQSOPMgGQprGehyzdCETlZOdauGrC0t9vBCr7kXEhXtycqxBC03vknA2eNeV610VX+HgO9VpCVZWHtENiArhALCcpoEsJvT29xCBYpSii/wnTpYJFT9yW8tjQCxH0zrmEZJvO1/nMINEBQFScB/nzUELn9asnghNf6vMpSGy0fSM27j87VAXCzJ5lqa6WCL/RrKgvYflow/m5AzUfMQhpqpH1vmh4ba1zZ4123lgnW4pNZDV9kmwXrEagGbWe1rnmsMzHugsECiYQyIngjWzHfpHgyEr49Uc5bMM1MlTypeHYYL4kV1jJ8Ou0SC4aV+49p8Onmb2NlVY7JKV7hqDCuZPI164YXMxhPNst4XK0/ENhoOE+8iB6
+438173c415874f6ac653efc1099dec9c9150e90f 0 iQIVAwUAWAZ3okemf/qjRqrOAQj89xAAw/6QZ07yqvH+aZHeGQfgJ/X1Nze/hSMzkqbwGkuUOWD5ztN8+c39EXCn8JlqyLUPD7uGzhTV0299k5fGRihLIseXr0hy/cvVW16uqfeKJ/4/qL9zLS3rwSAgWbaHd1s6UQZVfGCb8V6oC1dkJxfrE9h6kugBqV97wStIRxmCpMDjsFv/zdNwsv6eEdxbiMilLn2/IbWXFOVKJzzv9iEY5Pu5McFR+nnrMyUZQhyGtVPLSkoEPsOysorfCZaVLJ6MnVaJunp9XEv94Pqx9+k+shsQvJHWkc0Nnb6uDHZYkLR5v2AbFsbJ9jDHsdr9A7qeQTiZay7PGI0uPoIrkmLya3cYbU1ADhwloAeQ/3gZLaJaKEjrXcFSsz7AZ9yq74rTwiPulF8uqZxJUodk2m/zy83HBrxxp/vgxWJ5JP2WXPtB8qKY+05umAt4rQS+fd2H/xOu2V2d5Mq1WmgknLBLC0ItaNaf91sSHtgEy22GtcvWQE7S6VWU1PoSYmOLITdJKAsmb7Eq+yKDW9nt0lOpUu2wUhBGctlgXgcWOmJP6gL6edIg66czAkVBp/fpKNl8Z/A0hhpuH7nW7GW/mzLVQnc+JW4wqUVkwlur3NRfvSt5ZyTY/SaR++nRf62h7PHIjU+f0kWQRdCcEQ0X38b8iAjeXcsOW8NCOPpm0zcz3i8=
+eab27446995210c334c3d06f1a659e3b9b5da769 0 iQIcBAABCAAGBQJYGNsXAAoJELnJ3IJKpb3Vf30QAK/dq5vEHEkufLGiYxxkvIyiRaswS+8jamXeHMQrdK8CuokcQYhEv9xiUI6FMIoX4Zc0xfoFCBc+X4qE+Ed9SFYWgQkDs/roJq1C1mTYA+KANMqJkDt00QZq536snFQvjCXAA5fwR/DpgGOOuGMRfvbjh7x8mPyVoPr4HDQCGFXnTYdn193HpTOqUsipzIV5OJqQ9p0sfJjwKP4ZfD0tqqdjTkNwMyJuwuRaReXFvGGCjH2PqkZE/FwQG0NJJjt0xaMUmv5U5tXHC9tEVobVV/qEslqfbH2v1YPF5d8Jmdn7F76FU5J0nTd+3rIVjYGYSt01cR6wtGnzvr/7kw9kbChw4wYhXxnmIALSd48FpA1qWjlPcAdHfUUwObxOxfqmlnBGtAQFK+p5VXCsxDZEIT9MSxscfCjyDQZpkY5S5B3PFIRg6V9bdl5a4rEt27aucuKTHj1Ok2vip4WfaIKk28YMjjzuOQRbr6Pp7mJcCC1/ERHUJdLsaQP+dy18z6XbDjX3O2JDRNYbCBexQyV/Kfrt5EOS5fXiByQUHv+PyR+9Ju6QWkkcFBfgsxq25kFl+eos4V9lxPOY5jDpw2BWu9TyHtTWkjL/YxDUGwUO9WA/WzrcT4skr9FYrFV/oEgi8MkwydC0cFICDfd6tr9upqkkr1W025Im1UBXXJ89bTVj
--- a/.hgtags	Sun Oct 16 13:35:23 2016 -0700
+++ b/.hgtags	Tue Nov 01 15:40:21 2016 -0400
@@ -146,3 +146,5 @@
 299546f84e68dbb9bd026f0f3a974ce4bdb93686 3.9
 ccd436f7db6d5d7b9af89715179b911d031d44f1 3.9.1
 149433e68974eb5c63ccb03f794d8b57339a80c4 3.9.2
+438173c415874f6ac653efc1099dec9c9150e90f 4.0-rc
+eab27446995210c334c3d06f1a659e3b9b5da769 4.0
--- a/contrib/check-code.py	Sun Oct 16 13:35:23 2016 -0700
+++ b/contrib/check-code.py	Tue Nov 01 15:40:21 2016 -0400
@@ -444,6 +444,17 @@
   ]
 ]
 
+allfilesfilters = []
+
+allfilespats = [
+  [
+    (r'(http|https)://[a-zA-Z0-9./]*selenic.com/',
+     'use mercurial-scm.org domain URL'),
+  ],
+  # warnings
+  [],
+]
+
 checks = [
     ('python', r'.*\.(py|cgi)$', r'^#!.*python', pyfilters, pypats),
     ('test script', r'(.*/)?test-[^.~]*$', '', testfilters, testpats),
@@ -456,6 +467,8 @@
     ('txt', r'.*\.txt$', '', txtfilters, txtpats),
     ('web template', r'mercurial/templates/.*\.tmpl', '',
      webtemplatefilters, webtemplatepats),
+    ('all except for .po', r'.*(?<!\.po)$', '',
+     allfilesfilters, allfilespats),
 ]
 
 def _preparepats():
@@ -537,6 +550,7 @@
         return result
 
     for name, match, magic, filters, pats in checks:
+        post = pre # discard filtering result of previous check
         if debug:
             print(name, f)
         fc = 0
--- a/contrib/perf.py	Sun Oct 16 13:35:23 2016 -0700
+++ b/contrib/perf.py	Tue Nov 01 15:40:21 2016 -0400
@@ -407,7 +407,7 @@
     repocleartagscache = repocleartagscachefunc(repo)
     def t():
         repo.changelog = mercurial.changelog.changelog(svfs)
-        repo.manifest = mercurial.manifest.manifest(svfs)
+        repo.manifestlog = mercurial.manifest.manifestlog(svfs, repo)
         repocleartagscache()
         return len(repo.tags())
     timer(t)
--- a/hgext/largefiles/overrides.py	Sun Oct 16 13:35:23 2016 -0700
+++ b/hgext/largefiles/overrides.py	Tue Nov 01 15:40:21 2016 -0400
@@ -1385,7 +1385,8 @@
         lfdirstate = lfutil.openlfdirstate(repo.ui, repo)
         unsure, s = lfdirstate.status(matchmod.always(repo.root,
                                                     repo.getcwd()),
-                                      [], False, False, False)
+                                      [], False, True, False)
+        oldclean = set(s.clean)
         pctx = repo['.']
         for lfile in unsure + s.modified:
             lfileabs = repo.wvfs.join(lfile)
@@ -1397,9 +1398,13 @@
                                 lfutil.getexecutable(lfileabs))
             if (standin in pctx and
                 lfhash == lfutil.readstandin(repo, lfile, '.')):
-                lfdirstate.normal(lfile)
+                oldclean.add(lfile)
         for lfile in s.added:
             lfutil.updatestandin(repo, lfutil.standin(lfile))
+        # mark all clean largefiles as dirty, just in case the update gets
+        # interrupted before largefiles and lfdirstate are synchronized
+        for lfile in oldclean:
+            lfdirstate.normallookup(lfile)
         lfdirstate.write()
 
         oldstandins = lfutil.getstandinsstate(repo)
@@ -1408,6 +1413,13 @@
 
         newstandins = lfutil.getstandinsstate(repo)
         filelist = lfutil.getlfilestoupdate(oldstandins, newstandins)
+
+        # to avoid leaving all largefiles as dirty and thus rehash them, mark
+        # all the ones that didn't change as clean
+        for lfile in oldclean.difference(filelist):
+            lfdirstate.normal(lfile)
+        lfdirstate.write()
+
         if branchmerge or force or partial:
             filelist.extend(s.deleted + s.removed)
 
--- a/hgext/largefiles/reposetup.py	Sun Oct 16 13:35:23 2016 -0700
+++ b/hgext/largefiles/reposetup.py	Tue Nov 01 15:40:21 2016 -0400
@@ -164,8 +164,8 @@
                     # files from lfdirstate
                     unsure, s = lfdirstate.status(match, [], False, listclean,
                                                   False)
-                    (modified, added, removed, clean) = (s.modified, s.added,
-                                                         s.removed, s.clean)
+                    (modified, added, removed, deleted, clean) = (
+                        s.modified, s.added, s.removed, s.deleted, s.clean)
                     if parentworking:
                         for lfile in unsure:
                             standin = lfutil.standin(lfile)
@@ -206,14 +206,18 @@
                         removed = [lfile for lfile in removed
                                    if lfutil.standin(lfile) in ctx1]
 
-                    # Standins no longer found in lfdirstate has been
-                    # removed
+                    # Standins no longer found in lfdirstate have been deleted
                     for standin in ctx1.walk(lfutil.getstandinmatcher(self)):
                         lfile = lfutil.splitstandin(standin)
                         if not match(lfile):
                             continue
                         if lfile not in lfdirstate:
-                            removed.append(lfile)
+                            deleted.append(lfile)
+                            # Sync "largefile has been removed" back to the
+                            # standin. Removing a file as a side effect of
+                            # running status is gross, but the alternatives (if
+                            # any) are worse.
+                            self.wvfs.unlinkpath(standin, ignoremissing=True)
 
                     # Filter result lists
                     result = list(result)
@@ -237,7 +241,7 @@
                     normals = [[fn for fn in filelist
                                 if not lfutil.isstandin(fn)]
                                for filelist in result]
-                    lfstatus = (modified, added, removed, s.deleted, [], [],
+                    lfstatus = (modified, added, removed, deleted, [], [],
                                 clean)
                     result = [sorted(list1 + list2)
                               for (list1, list2) in zip(normals, lfstatus)]
--- a/i18n/ja.po	Sun Oct 16 13:35:23 2016 -0700
+++ b/i18n/ja.po	Tue Nov 01 15:40:21 2016 -0400
@@ -100,6 +100,7 @@
 # largefile(s)          大容量ファイル
 # list of ....          列挙された..../.... の一覧
 # local (repo)          手元(のリポジトリ)
+# local (at merging)    現行
 # lock                  ロック
 # manifest              マニフェスト or 管理対象(一覧)
 # merge                 マージ
@@ -127,6 +128,7 @@
 # reject(s)             却下差分
 # remote(host)          遠隔(ホスト)
 # remote(repo)          連携先(リポジトリ)
+# remote (at merging)   他方
 # remove                (構成管理からの)登録除外
 # rename                改名
 # repo(sitory)          リポジトリ/(.hg を指す場合は)管理領域
@@ -150,7 +152,7 @@
 # tombstone (of censor) 墓碑データ
 # topological xxxx      構造的
 # tracked xxxx          構成管理対象の xxxx
-# tracked, un           未登録
+# tracked, un           管理対象外
 # type, xxxxx           xxxx 種別
 # unknown xxxx          未知の xxxx (or 構成管理対象外)
 # URL parameter (of web) URL パス要素 (場合によっては単に "引数")
@@ -163,8 +165,8 @@
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
-"POT-Creation-Date: 2016-08-01 06:56+0900\n"
-"PO-Revision-Date: 2016-08-01 07:50+0900\n"
+"POT-Creation-Date: 2016-10-30 20:25+0900\n"
+"PO-Revision-Date: 2016-11-01 03:50+0900\n"
 "Last-Translator: Japanese translation team <mercurial-ja@googlegroups.com>\n"
 "Language-Team: Japanese\n"
 "Language: ja\n"
@@ -638,7 +640,7 @@
 "acl: ユーザ \"%s\" はファイル \"%s\" が許可されていません(リビジョン \"%s\")"
 
 msgid "Check for unrecorded moves at commit time (EXPERIMENTAL)"
-msgstr ""
+msgstr "ファイル移動のコミット時自動検出 (実験的実装)"
 
 msgid ""
 "This extension checks at commit/amend time if any of the committed files\n"
@@ -670,7 +672,6 @@
 msgid "log repository events to a blackbox for debugging"
 msgstr "リポジトリにおけるイベントの記録(デバッグ用)"
 
-#, fuzzy
 msgid ""
 "Logs event information to .hg/blackbox.log to help debug and diagnose "
 "problems.\n"
@@ -680,8 +681,7 @@
 "デバッグや問題診断向けに、 イベント情報を .hg/blackbox.log に記録します。\n"
 "記録対象イベントは blackbox.track 設定経由で変更することができます。\n"
 "(※ 訳注: ここでの \"blackbox\" は『内容不詳の仕組み』ではなく、\n"
-"『フライトレコーダ』の意味で使用されています)\n"
-"設定例::"
+"『フライトレコーダ』の意味で使用されています)"
 
 msgid "Examples::"
 msgstr "記述例::"
@@ -695,6 +695,14 @@
 "  # record the source of log messages\n"
 "  logsource = True"
 msgstr ""
+"  [blackbox]\n"
+"  track = *\n"
+"  # dirty 指定は処理コストが高いです (= 速度低下要因)。\n"
+"  # 未コミット変更がある場合、ログエントリに `+` が付加されます。\n"
+"  # ('hg id' と同様)\n"
+"  dirty = True\n"
+"  # ログメッセージの発行主の記録\n"
+"  logsource = True"
 
 msgid ""
 "  [blackbox]\n"
@@ -2029,6 +2037,24 @@
 "警告等を発せずに無視されます。"
 
 msgid ""
+"If the terminfo entry for your terminal is missing codes for an effect\n"
+"or has the wrong codes, you can add or override those codes in your\n"
+"configuration::"
+msgstr ""
+"端末 (ソフト) の terminfo 設定で、 効果に対応するコードが未定の場合や、\n"
+"不正なコードが定義されている場合、 追加設定や上書き設定が可能です::"
+
+msgid ""
+"  [color]\n"
+"  terminfo.dim = \\E[2m"
+msgstr ""
+"  [color]\n"
+"  terminfo.dim = \\E[2m"
+
+msgid "where '\\E' is substituted with an escape character."
+msgstr "設定値の '\\E' 部分は、 エスケープコードで置換されます。"
+
+msgid ""
 "Labels\n"
 "------"
 msgstr ""
@@ -4154,6 +4180,15 @@
 "    リビジョン指定が1つの場合、 作業領域が指定リビジョンと比較されます。\n"
 "    リビジョン指定がない場合、 作業領域が第1親リビジョンと比較されます。"
 
+msgid ""
+"    Show differences between revisions for the specified files, using\n"
+"    the following program::"
+msgstr ""
+"    指定ファイルに対するリビジョン間差分を、 以下のプログラムで表示します::"
+
+msgid "        %(path)s"
+msgstr "        %(path)s"
+
 #, python-format
 msgid "hg %s [OPTION]... [FILE]..."
 msgstr "hg %s [OPTION]... [FILE]..."
@@ -5155,6 +5190,17 @@
 msgstr "未知のリビジョン %s が指定されました"
 
 #, python-format
+msgid "%s \"%s\" changeset was not a candidate"
+msgstr "改変対象以外への操作 %s \"%s\" が検出されました"
+
+msgid "only use listed changesets"
+msgstr "予め列挙されたリビジョンへの操作のみを指定してください"
+
+#, python-format
+msgid "duplicated command for changeset %s"
+msgstr "リビジョン %s への操作指定が複数あります"
+
+#, python-format
 msgid "Fix up the change (%s %s)"
 msgstr "衝突を解消してください (%s %s)"
 
@@ -5202,6 +5248,13 @@
 msgstr ""
 "%s: 併合できません - 作業領域は直前のコミット %s の子孫ではありません\n"
 
+#, python-format
+msgid "%s \"%s\" changeset was an edited list candidate"
+msgstr "%s の適用対象が編集対象リビジョン \"%s\" です"
+
+msgid "base must only use unlisted changesets"
+msgstr "この編集操作は予め列挙されたリビジョンには適用できません"
+
 msgid "fold subclass used for when multiple folds happen in a row"
 msgstr ""
 
@@ -5233,8 +5286,8 @@
 msgid "there are ambiguous outgoing revisions"
 msgstr "紛らわしい反映候補リビジョンが存在します"
 
-msgid "see \"hg help histedit\" for more detail"
-msgstr "詳細は \"hg help histedit\" を参照"
+msgid "see 'hg help histedit' for more detail"
+msgstr "詳細は 'hg help histedit' を参照"
 
 msgid "read history edits from the specified file"
 msgstr "履歴改変指示を指定ファイルから読み込み"
@@ -5508,8 +5561,8 @@
 msgid "cannot edit public changeset: %s"
 msgstr "public フェーズのリビジョンは改変できません: %s"
 
-msgid "see \"hg help phases\" for details"
-msgstr "詳細は \"hg help phases\" 参照"
+msgid "see 'hg help phases' for details"
+msgstr "詳細は 'hg help phases' 参照"
 
 #, python-format
 msgid "malformed line \"%s\""
@@ -5522,25 +5575,6 @@
 msgid "warning: histedit rules saved to: .hg/histedit-last-edit.txt\n"
 msgstr "警告: histedit の操作指示は .hg/histedit-last-edit.txt に保存\n"
 
-#, python-format
-msgid "unknown constraint \"%s\""
-msgstr "未知の制約 \"%s\""
-
-#, python-format
-msgid "%s \"%s\" changeset was not a candidate"
-msgstr "改変対象以外への操作 %s \"%s\" が検出されました"
-
-msgid "only use listed changesets"
-msgstr "予め列挙されたリビジョンへの操作のみを指定してください"
-
-#, python-format
-msgid "%s \"%s\" changeset was not an edited list candidate"
-msgstr ""
-
-#, python-format
-msgid "duplicated command for changeset %s"
-msgstr "リビジョン %s への操作指定が複数あります"
-
 msgid "no rules provided"
 msgstr "処理内容指定が空です"
 
@@ -5552,10 +5586,10 @@
 msgstr "リビジョン %s への操作指定がありません"
 
 #, python-format
-msgid "use \"drop %s\" to discard, see also: \"hg help -e histedit.config\""
-msgstr ""
-"破棄する場合は \"drop %s\" を使用します。\"hg help -e histedit.config\"も参照"
-"してください。"
+msgid "use \"drop %s\" to discard, see also: 'hg help -e histedit.config'"
+msgstr ""
+"破棄する場合は \"drop %s\" を使用します。'hg help -e histedit.config'も参照し"
+"てください。"
 
 #, python-format
 msgid "histedit: moving bookmarks %s from %s to %s\n"
@@ -5604,7 +5638,7 @@
 
 #, python-format
 msgid "waiting for lock on %s held by %r\n"
-msgstr "%s のロック (%rが保持) の解放を待っています\n"
+msgstr "%s のロック (%r が保持) の解放を待っています\n"
 
 #, python-format
 msgid "got lock after %s seconds\n"
@@ -6420,8 +6454,8 @@
 msgstr "未知の OS です: %s\n"
 
 #, python-format
-msgid "unknown %s usercache location\n"
-msgstr "キャッシュ格納位置に関する [%s] usercache が未設定です\n"
+msgid "unknown %s usercache location"
+msgstr "キャッシュ格納位置に関する [%s] usercache が未設定です"
 
 #, python-format
 msgid "found %s in store\n"
@@ -6512,8 +6546,8 @@
 msgstr ""
 "大容量ファイル %s のマージで衝突が検出されました。\n"
 "共通の祖先は %s です。\n"
-"作業領域:(l)ocal 側の内容を意味する %s と\n"
-"マージ対象:(o)ther 側の内容を意味する %s の\n"
+"現行側 %s:(l)ocal\n"
+"他方側 %s:(o)ther\n"
 "どちらを採用しますか?$$ &Local $$ &Other"
 
 msgid "no files to copy"
@@ -6545,7 +6579,7 @@
 
 #, python-format
 msgid "not removing %s: file is already untracked\n"
-msgstr "%s は削除されません: ファイルは既に未登録です\n"
+msgstr "%s は削除されません: 管理対象外ファイルです\n"
 
 msgid "largefiles: no files to upload\n"
 msgstr "largefiles: 転送予定ファイルはありません\n"
@@ -6644,7 +6678,7 @@
 "add all files above this size (in megabytes) as largefiles (default: 10)"
 msgstr ""
 "指定サイズ (単位:MB) 以上のファイルを、 大容量ファイルとして追加 (デフォルト"
-"値:10)"
+"値: 10)"
 
 msgid "verify that all largefiles in current revision exists"
 msgstr "現リビジョンの大容量ファイルの存在を検証"
@@ -9178,7 +9212,7 @@
 msgstr "書き出し中"
 
 msgid "command to delete untracked files from the working directory"
-msgstr "作業領域中の未登録ファイルを削除するコマンド"
+msgstr "作業領域中の管理対象外ファイルを削除するコマンド"
 
 msgid "abort if an error occurs"
 msgstr "エラー発生時には処理を中止"
@@ -9446,7 +9480,6 @@
 "    (:hg:`help phases` 参照)。 複製によるリビジョンの移植に関しては、\n"
 "    :hg:`help graft` を参照してください。"
 
-#, fuzzy
 msgid ""
 "    If you don't specify a destination changeset (``-d/--dest``), rebase\n"
 "    will use the same logic as :hg:`merge` to pick a destination.  if\n"
@@ -9458,10 +9491,9 @@
 msgstr ""
 "    移動先リビジョン指定 (``-d/--dest``) が無い場合、移動先の算出には、\n"
 "    :hg:`merge` でのマージ対象算出と、 同じロジックが使用されます。\n"
-"    if the current branch contains exactly one other head, the other head\n"
-"    is merged with by default.\n"
-"    それ以外の場合は、 移動先の明示的な指定が必要です。 (移動操作では、\n"
-"    移動先リビジョン自身は改変されませんが、 移動先の子孫として、\n"
+"    現名前付きブランチに、 他のヘッドが一つしかない場合、 移動先として、\n"
+"    当該ヘッドが選択されます。 それ以外の場合は、 移動先の明示が必要です。\n"
+"    (移動操作では、 移動先自身はそのままですが、 移動先の子孫として、\n"
 "    新規リビジョンが追加されます)"
 
 msgid "    Here are the ways to select changesets:"
@@ -11242,6 +11274,11 @@
 "%s のバンドルは破損しています:\n"
 "%s"
 
+#. i18n: column positioning for "hg summary"
+#, python-format
+msgid "remote: %s\n"
+msgstr "連携先同期:   %s\n"
+
 msgid "push failed:"
 msgstr "履歴反映に失敗:"
 
@@ -11414,31 +11451,49 @@
 
 #, python-format
 msgid "%s: not copying - file is not managed\n"
-msgstr "%s: コピー失敗 - ファイルは登録されていません\n"
+msgstr "%s: コピーしません - ファイルは登録されていません\n"
 
 #, python-format
 msgid "%s: not copying - file has been marked for remove\n"
-msgstr "%s: コピー失敗 - 削除予定のファイルです\n"
+msgstr "%s: コピーしません - 削除予定のファイルです\n"
 
 #, python-format
 msgid "%s: not overwriting - %s collides with %s\n"
-msgstr "%s: 上書き失敗 - %s は %s と衝突\n"
+msgstr "%s: 上書きしません - %s は %s と衝突\n"
 
 #, python-format
 msgid "%s: can't copy - same file\n"
 msgstr "%s: コピー失敗 - 同一ファイルです\n"
 
 #, python-format
+msgid "%s: not overwriting - file already committed\n"
+msgstr "%s: 上書きしません - コミット済みファイルが存在します\n"
+
+#, python-format
+msgid "(hg rename %s to replace the file by recording a rename)\n"
+msgstr "(改名の記録には %s 付きの hg rename 実行)\n"
+
+#, python-format
+msgid "(hg copy %s to replace the file by recording a copy)\n"
+msgstr "(複製の記録には %s 付きの hg copy 実行)\n"
+
+#, python-format
 msgid "%s: not overwriting - file exists\n"
 msgstr "%s: 上書きしません - ファイルが存在します\n"
 
+msgid "(hg rename --after to record the rename)\n"
+msgstr "(改名の記録には --after 付きの hg rename 実行)\n"
+
+msgid "(hg copy --after to record the copy)\n"
+msgstr "(複製の記録には --after 付きの hg copy 実行)\n"
+
 #, python-format
 msgid "%s: not recording move - %s does not exist\n"
-msgstr "%s: 移動は記録されていません - %s は存在しません\n"
+msgstr "%s: 移動は記録されません - %s は存在しません\n"
 
 #, python-format
 msgid "%s: not recording copy - %s does not exist\n"
-msgstr "%s: 複製は記録されていません - %s は存在しません\n"
+msgstr "%s: 複製は記録されません - %s は存在しません\n"
 
 #, python-format
 msgid "%s: deleted in working directory\n"
@@ -11622,11 +11677,17 @@
 
 #, python-format
 msgid "not removing %s: file is untracked\n"
-msgstr "%s は削除されません: 未登録ファイルです\n"
+msgstr "%s は削除されません: 管理対象外ファイルです\n"
 
 msgid "skipping"
 msgstr "対象から除外"
 
+#, python-format
+msgid ""
+"not removing %s: file has been marked for add (use 'hg forget' to undo add)\n"
+msgstr ""
+"%s は削除されません: 追加登録対象ファイルです (取り消しは 'hg forget')\n"
+
 msgid "failed to mark all new/missing files as added/removed"
 msgstr "新規ファイルの追加/不在ファイルの除外が失敗しました"
 
@@ -12604,34 +12665,6 @@
 msgid "      See :hg:`help revsets` for more about the `bisect()` keyword."
 msgstr "      `bisect()` の詳細は :hg:`help revsets` を参照してください。"
 
-msgid "The first good revision is:\n"
-msgstr "最初の good なリビジョンは:\n"
-
-msgid "The first bad revision is:\n"
-msgstr "最初の bad なリビジョンは:\n"
-
-#, python-format
-msgid ""
-"Not all ancestors of this changeset have been checked.\n"
-"Use bisect --extend to continue the bisection from\n"
-"the common ancestor, %s.\n"
-msgstr ""
-"このリビジョンの祖先に対する確認は完全ではありません。\n"
-"共通の祖先 %s から探索を継続する場合、\n"
-"--extend 付きで \"hg bisect\" を実行してください。\n"
-
-msgid "Due to skipped revisions, the first good revision could be any of:\n"
-msgstr "検証省略により、 最初の good なリビジョンは以下から選択可能です:\n"
-
-msgid "Due to skipped revisions, the first bad revision could be any of:\n"
-msgstr "検証省略により、 最初の bad なリビジョンは以下から選択可能です:\n"
-
-msgid "cannot bisect (no known good revisions)"
-msgstr "二分探索できません(good リビジョンが未指定です)"
-
-msgid "cannot bisect (no known bad revisions)"
-msgstr "二分探索できません(bad リビジョンが未指定です)"
-
 msgid "(use of 'hg bisect <cmd>' is deprecated)\n"
 msgstr "('hg bisect <cmd>' 形式の実行は非推奨です)\n"
 
@@ -13009,8 +13042,8 @@
 msgid "no commits to bundle"
 msgstr "リビジョン指定は空です"
 
-msgid "see \"hg help bundle\" for supported values for --type"
-msgstr "--type で指定可能な値は \"hg help bundle\" を参照してください"
+msgid "see 'hg help bundle' for supported values for --type"
+msgstr "--type で指定可能な値は 'hg help bundle' を参照してください"
 
 msgid "packed bundles cannot be produced by \"hg bundle\""
 msgstr "packed bundle は \"hg bundle\" では生成できません"
@@ -13792,6 +13825,10 @@
 msgstr "  読み込み元: %s\n"
 
 #, python-format
+msgid "  bundled: %s\n"
+msgstr "  同梱: %s\n"
+
+#, python-format
 msgid "  tested with: %s\n"
 msgstr "  テスト済み Mercurial 版: %s\n"
 
@@ -13902,27 +13939,27 @@
 msgstr "    テンプレートで出力内容を整形可能です。 利用可能キーワードは:"
 
 msgid ""
-"       rev          revision number\n"
-"       chainid      delta chain identifier (numbered by unique base)\n"
-"       chainlen     delta chain length to this revision\n"
-"       prevrev      previous revision in delta chain\n"
-"       deltatype    role of delta / how it was computed\n"
-"       compsize     compressed size of revision\n"
-"       uncompsize   uncompressed size of revision\n"
-"       chainsize    total size of compressed revisions in chain\n"
-"       chainratio   total chain size divided by uncompressed revision size\n"
+"    :``rev``:       revision number\n"
+"    :``chainid``:   delta chain identifier (numbered by unique base)\n"
+"    :``chainlen``:  delta chain length to this revision\n"
+"    :``prevrev``:   previous revision in delta chain\n"
+"    :``deltatype``: role of delta / how it was computed\n"
+"    :``compsize``:  compressed size of revision\n"
+"    :``uncompsize``: uncompressed size of revision\n"
+"    :``chainsize``: total size of compressed revisions in chain\n"
+"    :``chainratio``: total chain size divided by uncompressed revision size\n"
 "                    (new delta chains typically start at ratio 2.00)\n"
-"       lindist      linear distance from base revision in delta chain to "
+"    :``lindist``:   linear distance from base revision in delta chain to "
 "end\n"
 "                    of this revision\n"
-"       extradist    total size of revisions not part of this delta chain "
+"    :``extradist``: total size of revisions not part of this delta chain "
 "from\n"
 "                    base of delta chain to end of this revision; a "
 "measurement\n"
 "                    of how much extra data we need to read/seek across to "
 "read\n"
 "                    the delta chain for this revision\n"
-"       extraratio   extradist divided by chainsize; another representation "
+"    :``extraratio``: extradist divided by chainsize; another representation "
 "of\n"
 "                    how much unrelated data is needed to load this delta "
 "chain\n"
@@ -13957,6 +13994,24 @@
 msgstr "Python ライブラリの検証中 (%s)...\n"
 
 #, python-format
+msgid "checking Python security support (%s)\n"
+msgstr "Python のセキュリティ機能対応の検証中 (%s)\n"
+
+msgid ""
+"  TLS 1.2 not supported by Python install; network connections lack modern "
+"security\n"
+msgstr ""
+"  TLS 1.2 は使用中の Python では未サポートです: 通信時のセキュリティレベルが"
+"低下します。\n"
+
+msgid ""
+"  SNI not supported by Python install; may have connectivity issues with "
+"some servers\n"
+msgstr ""
+"  SNI は使用中の Python では未サポートです: サーバとの接続で問題が発生する可"
+"能性があります\n"
+
+#, python-format
 msgid "checking Mercurial version (%s)\n"
 msgstr "Mercurial バージョンの検証中 (%s)\n"
 
@@ -14024,8 +14079,8 @@
 msgstr "問題は検出されませんでした\n"
 
 #, python-format
-msgid "%s problems detected, please check your install!\n"
-msgstr "障害が%s件検出されました。 インストール内容を確認してください\n"
+msgid "%d problems detected, please check your install!\n"
+msgstr "障害が %d 件検出されました。 インストール内容を確認してください\n"
 
 msgid "REPO ID..."
 msgstr "REPO ID..."
@@ -14294,19 +14349,48 @@
 msgid "show data and statistics about a revlog"
 msgstr "revlog ファイルのデータと統計情報の表示"
 
-msgid "print parsed tree after optimizing"
-msgstr "最適化後の解析ツリーの表示"
+msgid "print parsed tree after optimizing (DEPRECATED)"
+msgstr "最適化後の解析ツリーの表示 (非推奨)"
+
+msgid "print parsed tree at the given stage"
+msgstr "指定解析段階における解析ツリーの表示"
+
+msgid "evaluate tree without optimization"
+msgstr "最適化無しで解析ツリーを評価"
+
+msgid "verify optimized result"
+msgstr "最適化結果を検証"
 
 msgid "parse and apply a revision specification"
 msgstr "リビジョン指定記述の解析/適用"
 
 msgid ""
-"    Use --verbose to print the parsed tree before and after aliases\n"
-"    expansion.\n"
-"    "
-msgstr ""
-"    --verbose 指定時は、 別名 (alias) 展開前後の、 解析木を表示します。\n"
-"    "
+"    Use -p/--show-stage option to print the parsed tree at the given "
+"stages.\n"
+"    Use -p all to print tree at every stage."
+msgstr ""
+"    -p/--show-stage 指定時は、 指定解析段階の解析ツリーを表示します。\n"
+"    -p all 指定時は、 全ての解析段階で解析ツリーを表示します。"
+
+msgid ""
+"    Use --verify-optimized to compare the optimized result with the "
+"unoptimized\n"
+"    one. Returns 1 if the optimized result differs.\n"
+"    "
+msgstr ""
+"    --verify-optimized 指定時は、 最適化前後の評価結果を比較します。\n"
+"    最適化により評価結果が異なる場合、 コマンド終了値は 1 です。\n"
+"    "
+
+msgid "cannot use --verify-optimized with --no-optimized"
+msgstr "--verify-optimized と --no-optimized は併用できません"
+
+msgid "cannot use --optimize with --show-stage"
+msgstr "--optimize と --show-stage は併用できません"
+
+#, python-format
+msgid "invalid stage name: %s"
+msgstr "不正な解析段階名: %s"
 
 msgid "REV1 [REV2]"
 msgstr "REV1 [REV2]"
@@ -14680,26 +14764,22 @@
 msgid "end filenames with NUL, for use with xargs"
 msgstr "ファイル名をNUL文字(0x00)で終端(xargs との併用向け)"
 
-msgid "[OPTION]... [PATTERN]..."
-msgstr "[OPTION]... [PATTERN]..."
-
 msgid "list tracked files"
 msgstr "管理対象ファイルの一覧表示"
 
 msgid ""
 "    Print files under Mercurial control in the working directory or\n"
-"    specified revision whose names match the given patterns (excluding\n"
-"    removed files)."
-msgstr ""
-"    作業領域又は指定リビジョンにおける、 管理対象ファイルを一覧表示します\n"
-"    (登録除外されたファイルは、 対象から除外されます)。"
-
-msgid ""
-"    If no patterns are given to match, this command prints the names\n"
-"    of all files under Mercurial control in the working directory."
-msgstr ""
-"    パターン指定が無い場合、 本コマンドは構成管理対象下にある作業領域中の\n"
-"    全てのファイル名を表示します。"
+"    specified revision for given files (excluding removed files).\n"
+"    Files can be specified as filenames or filesets."
+msgstr ""
+"    作業領域又は指定リビジョンで、 パターンに合致する管理対象ファイルを、\n"
+"    一覧表示します (登録除外済みファイルは、 表示対象から除外されます)。\n"
+"    パターン指定には、 filesets 記述も使用できます。"
+
+msgid ""
+"    If no files are given to match, this command prints the names\n"
+"    of all files under Mercurial control."
+msgstr "    パターン指定が無い場合、 管理対象下の全ファイル名を表示します。"
 
 msgid "      - list all files under the current directory::"
 msgstr "      - 現ディレクトリ配下の全てのファイルの列挙::"
@@ -14983,41 +15063,47 @@
 msgid "[OPTION]... PATTERN [FILE]..."
 msgstr "[OPTION]... PATTERN [FILE]..."
 
-msgid "search for a pattern in specified files and revisions"
-msgstr "特定のパターンに合致するファイルとリビジョンの検索"
-
-msgid "    Search revisions of files for a regular expression."
-msgstr "    正規表現に合致するファイルを含むリビジョンを検索します。"
-
-msgid ""
-"    This command behaves differently than Unix grep. It only accepts\n"
-"    Python/Perl regexps. It searches repository history, not the\n"
-"    working directory. It always prints the revision number in which a\n"
-"    match appears."
-msgstr ""
-"    本コマンドの挙動は Unix の grep とは異なります。\n"
-"    解釈可能な正規表現は Python/Perl 形式のものだけです。\n"
-"    検索対象はリポジトリ内のデータのみで、\n"
-"    作業領域は検索対象には含まれません。\n"
-"    パターンに合致する内容が現れたリビジョンを表示します。"
-
-msgid ""
-"    By default, grep only prints output for the first revision of a\n"
+msgid "search revision history for a pattern in specified files"
+msgstr "指定ファイルの履歴における正規表現合致の検索"
+
+msgid ""
+"    Search revision history for a regular expression in the specified\n"
+"    files or the entire project."
+msgstr ""
+"    指定ファイル、 またはリポジトリ全体の履歴に対して、 指定正規表現と、\n"
+"    変更内容との合致を検索します。"
+
+msgid ""
+"    By default, grep prints the most recent revision number for each\n"
 "    file in which it finds a match. To get it to print every revision\n"
-"    that contains a change in match status (\"-\" for a match that\n"
-"    becomes a non-match, or \"+\" for a non-match that becomes a match),\n"
-"    use the --all flag."
-msgstr ""
-"    特に指定が無い場合、 本コマンドはパターンに合致する内容が最初に現れた\n"
-"    リビジョンを各ファイル毎に表示します。 パターンに合致する変更のあった\n"
-"    全てのリビジョンを表示する場合、 --all を指定します(パターン合致部が\n"
-"    削除操作なら \"-\"、 追加操作なら \"+\" が検索結果に表示)。"
+"    that contains a change in match status (\"-\" for a match that becomes\n"
+"    a non-match, or \"+\" for a non-match that becomes a match), use the\n"
+"    --all flag."
+msgstr ""
+"    特に指定が無い場合、 正規表現合致が見つかった、 最新リビジョンのみを、\n"
+"    各ファイル毎に表示します。 --all 指定時は、 正規表現合致が見つかった、\n"
+"    全リビジョンを表示します (正規表現合致行の削除の場合は \"-\"、\n"
+"    追加の場合は \"+\" が、 各リビジョン毎に表示されます)。"
+
+msgid ""
+"    PATTERN can be any Python (roughly Perl-compatible) regular\n"
+"    expression."
+msgstr "    Python 形式の正規表現 (概ね Perl のそれと互換) が使用可能です。"
+
+msgid ""
+"    If no FILEs are specified (and -f/--follow isn't set), all files in\n"
+"    the repository are searched, including those that don't exist in the\n"
+"    current branch or have been deleted in a prior changeset."
+msgstr ""
+"    対象ファイル (および -f/--follow) が未指定の場合、 全ての履歴が、\n"
+"    検索対象となります。 別ブランチでの追加や、 祖先における登録除外等で、\n"
+"    現作業領域中に存在しないファイルの履歴も、 検索対象に含まれます。"
 
 msgid ""
 "    Returns 0 if a match is found, 1 otherwise.\n"
 "    "
 msgstr ""
-"    パターン合致がある場合のコマンドの終了値は 0、 それ以外は 1 です。\n"
+"    正規表現合致がある場合のコマンドの終了値は 0、 それ以外は 1 です。\n"
 "    "
 
 #, python-format
@@ -15326,14 +15412,14 @@
 "    resulting changeset has a different ID than the one recorded in\n"
 "    the patch. This will guard against various ways that portable\n"
 "    patch formats and mail systems might fail to transfer Mercurial\n"
-"    data or metadata. See ':hg: bundle' for lossless transmission."
+"    data or metadata. See :hg:`bundle` for lossless transmission."
 msgstr ""
 "    --exact 指定時には、 作業領域をパッチの親リビジョンに更新してから、\n"
 "    パッチを適用します。 パッチにより作成されたリビジョンのハッシュ値が、\n"
 "    パッチに記録された値と異なる場合、 パッチの取り込みは中断されます。\n"
 "    パッチ形式選択の問題や、 メール配送過程での内容改変など、\n"
 "    予期せぬ変更内容が、 適用されることを防止できます。 変更内容を、\n"
-"    欠損無く転送する方法n関しては :hg:`bundle` を参照してください。"
+"    欠損無く転送する方法に関しては :hg:`bundle` を参照してください。"
 
 msgid ""
 "    Use --partial to ensure a changeset will be created from the patch\n"
@@ -15607,6 +15693,9 @@
 msgid "print complete paths from the filesystem root"
 msgstr "ファイルシステムのルートからの絶対パスで表示"
 
+msgid "[OPTION]... [PATTERN]..."
+msgstr "[OPTION]... [PATTERN]..."
+
 msgid "locate files matching specific patterns (DEPRECATED)"
 msgstr "指定されたパターンに合致する名前を持つファイルの特定 (非推奨)"
 
@@ -15627,6 +15716,13 @@
 "    対象とする場合は \"--include .\" を指定します。"
 
 msgid ""
+"    If no patterns are given to match, this command prints the names\n"
+"    of all files under Mercurial control in the working directory."
+msgstr ""
+"    パターン指定が無い場合、 本コマンドは構成管理対象下にある作業領域中の\n"
+"    全てのファイル名を表示します。"
+
+msgid ""
 "    If you want to feed the output of this command into the \"xargs\"\n"
 "    command, use the -0 option to both this command and \"xargs\". This\n"
 "    will avoid the problem of \"xargs\" treating single filenames that\n"
@@ -16327,8 +16423,8 @@
 msgid "default repository not configured!"
 msgstr "デフォルトの連携先が設定されていません"
 
-msgid "see the \"path\" section in \"hg help config\""
-msgstr "\"hg help config\" の \"path\" セクションを参照してください"
+msgid "see 'hg help config.paths'"
+msgstr "詳細は 'hg help config.paths' 参照"
 
 #, python-format
 msgid "pushing to %s\n"
@@ -16842,8 +16938,8 @@
 msgid "name to show in web pages (default: working directory)"
 msgstr "表示名(デフォルト値: 作業領域のパス)"
 
-msgid "name of the hgweb config file (see \"hg help hgweb\")"
-msgstr "hgweb 設定ファイル位置(\"hg help hgweb\" 参照)"
+msgid "name of the hgweb config file (see 'hg help hgweb')"
+msgstr "hgweb 設定ファイル位置 ('hg help hgweb' 参照)"
 
 msgid "name of the hgweb config file (DEPRECATED)"
 msgstr "hgweb 設定ファイル位置 (非推奨)"
@@ -16964,7 +17060,7 @@
 "    unless explicitly requested with -u/--unknown or -i/--ignored."
 msgstr ""
 "    -q/--quiet 指定がある場合、 -u/--unknown または -i/--ignored\n"
-"    が明示的に指定されない限り、 未登録ファイルは表示されません。"
+"    が明示的に指定されない限り、 管理対象外ファイルは表示されません。"
 
 msgid ""
 "       :hg:`status` may appear to disagree with diff if permissions have\n"
@@ -17201,11 +17297,6 @@
 msgstr "反映候補ブックマーク %d 個"
 
 #. i18n: column positioning for "hg summary"
-#, python-format
-msgid "remote: %s\n"
-msgstr "連携先同期:   %s\n"
-
-#. i18n: column positioning for "hg summary"
 msgid "remote: (synced)\n"
 msgstr "連携先同期:   (同期済み)\n"
 
@@ -17547,12 +17638,12 @@
 "\n"
 "有効化されているエクステンション:"
 
+msgid "external"
+msgstr "非同梱"
+
 msgid "internal"
 msgstr "同梱  "
 
-msgid "external"
-msgstr "非同梱"
-
 #, python-format
 msgid "extension '%s' overrides commands: %s\n"
 msgstr "エクステンション '%s' がコマンドを上書きします: %s\n"
@@ -17824,7 +17915,7 @@
 
 #, python-format
 msgid ""
-"(committing will reopen the head, use `hg heads .` to see %i other heads)\n"
+"(committing will reopen the head, use 'hg heads .' to see %i other heads)\n"
 msgstr ""
 "(閉鎖済みヘッドでのコミットはヘッドの閉鎖を解除します。他の %i 個のヘッドは "
 "'hg heads .' で参照してください)\n"
@@ -17881,8 +17972,8 @@
 msgid "push creates new branch '%s' with multiple heads"
 msgstr "複数ヘッドの新規ブランチ %s が連携先に作成されます"
 
-msgid "merge or see \"hg help push\" for details about pushing new heads"
-msgstr "マージするか、新規ヘッドの反映に関して \"hg help push\" を参照"
+msgid "merge or see 'hg help push' for details about pushing new heads"
+msgstr "マージするか、新規ヘッドの反映に関して 'hg help push' を参照"
 
 #, python-format
 msgid "push creates new remote head %s on branch '%s'!"
@@ -17897,8 +17988,8 @@
 msgstr "新しいヘッド %s が連携先に作成されます!"
 
 msgid ""
-"pull and merge or see \"hg help push\" for details about pushing new heads"
-msgstr "取り込み+マージするか、新規ヘッド反映に関して \"hg help push\" を参照"
+"pull and merge or see 'hg help push' for details about pushing new heads"
+msgstr "取り込み+マージするか、新規ヘッド反映に関して 'hg help push' を参照"
 
 msgid "new remote heads:\n"
 msgstr "以下の新しいヘッドが連携先に作成されます:\n"
@@ -18079,37 +18170,6 @@
 msgid "warning: --repository ignored\n"
 msgstr "警告: --repository 指定を無視します\n"
 
-#, python-format
-msgid "unrecognized profiling format '%s' - Ignored\n"
-msgstr "不正なプロファイル形式 '%s' を無視します\n"
-
-msgid ""
-"lsprof not available - install from http://codespeak.net/svn/user/arigo/hack/"
-"misc/lsprof/"
-msgstr ""
-"lsprof が利用できません - http://codespeak.net/svn/user/arigo/hack/misc/"
-"lsprof/からインストールしてください"
-
-msgid ""
-"flamegraph not available - install from https://github.com/evanhempel/python-"
-"flamegraph"
-msgstr ""
-"flamegraph が使用できません - https://github.com/evanhempel/python-"
-"flamegraph からインストールしてください"
-
-msgid "statprof not available - install using \"easy_install statprof\""
-msgstr ""
-"statprof が利用できません - \"easy_install statprof\"でインストールしてくださ"
-"い"
-
-#, python-format
-msgid "invalid sampling frequency '%s' - ignoring\n"
-msgstr "不正なサンプリング周期頻度 '%s' を無視します\n"
-
-#, python-format
-msgid "unrecognized profiler '%s' - ignored\n"
-msgstr "不正なプロファイラ指定 '%s' を無視します\n"
-
 msgid "the extension author."
 msgstr "エクステンションの作者"
 
@@ -18396,38 +18456,38 @@
 "    keep as the merged version."
 msgstr ""
 "``:prompt``\n"
-"作業領域側 (`p1()`) とマージ対象リビジョン側 (`p2()`) のどちらを、\n"
-"   マージ結果として採用するか、 対話的に確認します。"
-
-#, python-format
-msgid ""
-"local changed %s which remote deleted\n"
+"現行側 (`p1()`) と他方側 (`p2()`) のどちらをマージ結果に採用するか、\n"
+"    対話的に確認します。"
+
+#, python-format
+msgid ""
+"local%(l)s changed %(fd)s which other%(o)s deleted\n"
 "use (c)hanged version, (d)elete, or leave (u)nresolved?$$ &Changed $$ "
 "&Delete $$ &Unresolved"
 msgstr ""
-"変更したファイル %s が、マージ対象リビジョンで登録除外されています。\n"
-"変更:(c)hanged、登録除外:(d)elete、衝突未解消:(u)nresolved のいずれを採用しま"
+"現行側%(l)s での %(fd)s の変更が他方側%(o)s での登録除外と衝突します。\n"
+"変更:(c)hanged, 登録除外:(d)elete, 衝突未解消:(u)nresolved のいずれを採用しま"
 "すか?$$ &Changed $$ &Delete $$ &Unresolved"
 
 #, python-format
 msgid ""
-"remote changed %s which local deleted\n"
+"other%(o)s changed %(fd)s which local%(l)s deleted\n"
 "use (c)hanged version, leave (d)eleted, or leave (u)nresolved?$$ &Changed $$ "
 "&Deleted $$ &Unresolved"
 msgstr ""
-"登録除外済みのファイル %s が、マージ対象リビジョンで変更されています。\n"
-"変更:(c)hanged、登録除外:(d)elete、衝突未解消:(u)nresolved のいずれを採用しま"
+"他方側%(o)s での %(fd)s の変更が現行側%(l)s での登録除外と衝突します。\n"
+"変更:(c)hanged, 登録除外:(d)elete, 衝突未解消:(u)nresolved のいずれを採用しま"
 "すか?$$ &Changed $$ &Delete $$ &Unresolved"
 
 #, python-format
 msgid ""
-"no tool found to merge %s\n"
-"keep (l)ocal, take (o)ther, or leave (u)nresolved?$$ &Local $$ &Other $$ "
-"&Unresolved"
-msgstr ""
-"ファイル %s のマージに適切なツールが見つかりません。\n"
-"作業領域:(l)ocal、マージ対象:(o)ther、衝突未解消:(u)nresolved のいずれを採用"
-"しますか?$$ &Local $$ &Other $$ &Unresolved"
+"no tool found to merge %(fd)s\n"
+"keep (l)ocal%(l)s, take (o)ther%(o)s, or leave (u)nresolved?$$ &Local $$ "
+"&Other $$ &Unresolved"
+msgstr ""
+"ファイル %(fd)s のマージに適切なツールが見つかりません。\n"
+"現行側%(l)s:(l)ocal, 他方側%(o)s:(o)ther, 衝突未解消:(u)nresolved のいずれを"
+"採用しますか?$$ &Local $$ &Other $$ &Unresolved"
 
 msgid ""
 "``:local``\n"
@@ -18809,15 +18869,15 @@
 "    サイズが指定条件に合致するファイル。条件例:"
 
 msgid ""
-"    - 1k (files from 1024 to 2047 bytes)\n"
-"    - < 20k (files less than 20480 bytes)\n"
-"    - >= .5MB (files at least 524288 bytes)\n"
-"    - 4k - 1MB (files from 4096 bytes to 1048576 bytes)"
-msgstr ""
-"    - 1k (1024 〜 2047 バイトのファイル)\n"
-"    - < 20k (20480 バイト未満のファイル)\n"
-"    - >= .5MB (524288 バイト以上のファイル)\n"
-"    - 4k - 1MB (4096 〜 1048576 バイトのファイル)"
+"    - size('1k') - files from 1024 to 2047 bytes\n"
+"    - size('< 20k') - files less than 20480 bytes\n"
+"    - size('>= .5MB') - files at least 524288 bytes\n"
+"    - size('4k - 1MB') - files from 4096 bytes to 1048576 bytes"
+msgstr ""
+"    - size('1k') - 1024 〜 2047 バイトのファイル\n"
+"    - size('< 20k') - 20480 バイト未満のファイル\n"
+"    - size('>= .5MB') - 524288 バイト以上のファイル\n"
+"    - size('4k - 1MB') - 4096 〜 1048576 バイトのファイル"
 
 #. i18n: "size" is a keyword
 msgid "size requires an expression"
@@ -18877,7 +18937,7 @@
 
 #. i18n: "subrepo" is a keyword
 msgid "subrepo takes at most one argument"
-msgstr "subrepo の引数は最大1つです"
+msgstr "subrepo の引数は 0 〜 1 個です"
 
 #. i18n: "subrepo" is a keyword
 msgid "subrepo requires a pattern or no arguments"
@@ -18901,6 +18961,12 @@
 msgid "unknown bisect kind %s"
 msgstr "未知の探索種別 %s"
 
+msgid "cannot bisect (no known good revisions)"
+msgstr "二分探索できません(good リビジョンが未指定です)"
+
+msgid "cannot bisect (no known bad revisions)"
+msgstr "二分探索できません(bad リビジョンが未指定です)"
+
 msgid "invalid bisect state"
 msgstr "探索状態が不正です"
 
@@ -18932,6 +18998,28 @@
 msgid "bad (implicit)"
 msgstr "bad (推定)"
 
+msgid "The first good revision is:\n"
+msgstr "最初の good なリビジョンは:\n"
+
+msgid "The first bad revision is:\n"
+msgstr "最初の bad なリビジョンは:\n"
+
+#, python-format
+msgid ""
+"Not all ancestors of this changeset have been checked.\n"
+"Use bisect --extend to continue the bisection from\n"
+"the common ancestor, %s.\n"
+msgstr ""
+"このリビジョンの祖先に対する確認は完全ではありません。\n"
+"共通の祖先 %s から探索を継続する場合、\n"
+"--extend 付きで \"hg bisect\" を実行してください。\n"
+
+msgid "Due to skipped revisions, the first good revision could be any of:\n"
+msgstr "検証省略により、 最初の good なリビジョンは以下から選択可能です:\n"
+
+msgid "Due to skipped revisions, the first bad revision could be any of:\n"
+msgstr "検証省略により、 最初の bad なリビジョンは以下から選択可能です:\n"
+
 #. i18n: "(EXPERIMENTAL)" is a keyword, must be translated consistently
 msgid "(EXPERIMENTAL)"
 msgstr "(実験的実装)"
@@ -18945,17 +19033,20 @@
 msgid " ([+] can be repeated)"
 msgstr " ([+] 印付きのオプションは複数回指定可能です)"
 
-msgid "container for exchange of repository data"
-msgstr "履歴情報授受のためのデータ形式"
-
-msgid "representation of revlog data"
-msgstr "revlog データの表現形式"
-
-msgid "repository requirements"
+msgid "Bundles"
+msgstr "bundle フォーマット"
+
+msgid "Changegroups"
+msgstr "changegroups フォーマット"
+
+msgid "Repository Requirements"
 msgstr "リポジトリの requires 設定"
 
-msgid "revision storage mechanism"
-msgstr "履歴情報格納形式"
+msgid "Revision Logs"
+msgstr "revlog フォーマット"
+
+msgid "Wire Protocol"
+msgstr "通信プロトコル"
 
 msgid "Configuration Files"
 msgstr "設定ファイル"
@@ -19042,8 +19133,8 @@
 msgstr "コマンドの別名: hg %s"
 
 #, python-format
-msgid "(use \"hg help -e %s\" to show help for the %s extension)"
-msgstr "(\"hg help -e %s\" でエクステンション %s のヘルプを表示)"
+msgid "(use 'hg help -e %s' to show help for the %s extension)"
+msgstr "('hg help -e %s' でエクステンション %s のヘルプを表示)"
 
 msgid "options"
 msgstr "オプション"
@@ -19054,10 +19145,10 @@
 #, python-format
 msgid ""
 "\n"
-"(use \"hg %s -h\" to show more help)\n"
-msgstr ""
-"\n"
-"(ヘルプの詳細の表示は \"hg %s -h\")\n"
+"(use 'hg %s -h' to show more help)\n"
+msgstr ""
+"\n"
+"(ヘルプの詳細の表示は 'hg %s -h')\n"
 
 msgid ""
 "\n"
@@ -19087,41 +19178,41 @@
 
 msgid ""
 "\n"
-"(use \"hg help\" for the full list of commands)\n"
-msgstr ""
-"\n"
-"(全コマンドの一覧表示は \"hg help\")\n"
-
-msgid ""
-"\n"
-"(use \"hg help\" for the full list of commands or \"hg -v\" for details)\n"
-msgstr ""
-"\n"
-"(全コマンドの一覧表示は \"hg help\" 、 詳細情報は --verbose 指定で表示)\n"
-
-#, python-format
-msgid ""
-"\n"
-"(use \"hg help %s\" to show the full help text)\n"
-msgstr ""
-"\n"
-"(詳細なヘルプ表示は \"hg help %s\")\n"
-
-#, python-format
-msgid ""
-"\n"
-"(use \"hg help -v -e %s\" to show built-in aliases and global options)\n"
-msgstr ""
-"\n"
-"(組み込み別名およびグローバルオプションの表示は \"hg help -v -e %s\")\n"
-
-#, python-format
-msgid ""
-"\n"
-"(use \"hg help -v%s\" to show built-in aliases and global options)\n"
-msgstr ""
-"\n"
-"(組み込み別名およびグローバルオプションの表示は \"hg -v help%s\")\n"
+"(use 'hg help' for the full list of commands)\n"
+msgstr ""
+"\n"
+"(全コマンドの一覧表示は 'hg help')\n"
+
+msgid ""
+"\n"
+"(use 'hg help' for the full list of commands or 'hg -v' for details)\n"
+msgstr ""
+"\n"
+"(全コマンドの一覧表示は 'hg help'、 詳細情報は 'hg -v')\n"
+
+#, python-format
+msgid ""
+"\n"
+"(use 'hg help %s' to show the full help text)\n"
+msgstr ""
+"\n"
+"(より詳細なヘルプ表示は 'hg help %s')\n"
+
+#, python-format
+msgid ""
+"\n"
+"(use 'hg help -v -e %s' to show built-in aliases and global options)\n"
+msgstr ""
+"\n"
+"(組み込み別名およびグローバルオプションの表示は 'hg help -v -e %s')\n"
+
+#, python-format
+msgid ""
+"\n"
+"(use 'hg help -v%s' to show built-in aliases and global options)\n"
+msgstr ""
+"\n"
+"(組み込み別名およびグローバルオプションの表示は 'hg help -v%s')\n"
 
 msgid "(some details hidden, use --verbose to show complete help)"
 msgstr "(省略されたヘルプの詳細は --verbose 指定で表示)"
@@ -19129,10 +19220,10 @@
 #, python-format
 msgid ""
 "\n"
-"use \"hg help -c %s\" to see help for the %s command\n"
-msgstr ""
-"\n"
-"\"hg help -c %s\" によってコマンド %s のヘルプが表示されます\n"
+"use 'hg help -c %s' to see help for the %s command\n"
+msgstr ""
+"\n"
+"'hg help -c %s' によってコマンド %s のヘルプが表示されます\n"
 
 msgid "no help text available"
 msgstr "ヘルプはありません"
@@ -19141,8 +19232,8 @@
 msgid "%s extension - %s"
 msgstr "%s エクステンション - %s"
 
-msgid "(use \"hg help extensions\" for information on enabling extensions)\n"
-msgstr "(有効なエクステンション情報の表示は \"hg help extensions\")\n"
+msgid "(use 'hg help extensions' for information on enabling extensions)\n"
+msgstr "(有効なエクステンション情報の表示は 'hg help extensions')\n"
 
 #, python-format
 msgid "'%s' is provided by the following extension:"
@@ -19157,16 +19248,16 @@
 msgid "no matches"
 msgstr "該当するヘルプトピックはありません"
 
-msgid "try \"hg help\" for a list of topics"
-msgstr "ヘルプトピックの一覧は \"hg help\" で表示されます"
+msgid "try 'hg help' for a list of topics"
+msgstr "ヘルプトピックの一覧は 'hg help' で表示されます"
 
 #, python-format
 msgid "no such help topic: %s"
 msgstr "該当するヘルプトピックはありません: %s"
 
 #, python-format
-msgid "try \"hg help --keyword %s\""
-msgstr "\"hg help --keyword %s\" を使用してみてください"
+msgid "try 'hg help --keyword %s'"
+msgstr "'hg help --keyword %s' を使用してみてください"
 
 msgid "Mercurial Distributed SCM\n"
 msgstr "Mercurial - 分散構成管理ツール\n"
@@ -21470,8 +21561,8 @@
 "    対象ホストのホスト毎設定で ``fingerprints`` が設定されている場合、\n"
 "    この指定は無視されます。"
 
-msgid "    The format of the file is as follows:"
-msgstr ""
+msgid "    The format of the file is as follows::"
+msgstr "    以下のファイル形式を想定しています::"
 
 msgid ""
 "        -----BEGIN CERTIFICATE-----\n"
@@ -21598,6 +21689,13 @@
 "   ``.orig``. With ``ignore``, don't print a warning and back them up as\n"
 "   ``.orig``. (default: ``abort``)"
 msgstr ""
+"``checkignored``\n"
+"   マージや作業領域更新の際に、 対象リビジョンの管理対象ファイルが、\n"
+"   作業領域中の無視対象ファイルと同名で、 且つ内容が異なる場合の挙動。\n"
+"   指定可能な値は ``abort``, ``warn``, ``ignore`` です。 ``abort`` は、\n"
+"   処理を中断します。 ``warn`` は警告表示とバックアップ作成を行います\n"
+"   (``.orig`` 拡張子付きファイルに保存)。 ``ignore`` は警告表示も、 \n"
+"   バックアップ作成も行いません (デフォルト値: ``abort``)"
 
 msgid ""
 "``checkunknown``\n"
@@ -21608,6 +21706,11 @@
 "that\n"
 "   are not ignored. (default: ``abort``)"
 msgstr ""
+"``checkunknown``\n"
+"   マージや作業領域更新の際に、 対象リビジョンの管理対象ファイルが、\n"
+"   作業領域中の管理対象外ファイルと同名で、 且つ内容が異なる場合の挙動。\n"
+"   ``ignore`` 指定がない他は ``merge.checkignored`` 設定と同じです。\n"
+"   (デフォルト値: ``abort``)"
 
 msgid ""
 "``merge-patterns``\n"
@@ -22131,6 +22234,18 @@
 "プロファイル採取には、 lsprof が用いられます。"
 
 msgid ""
+"``enabled``\n"
+"    Enable the profiler.\n"
+"    (default: false)"
+msgstr ""
+"``enabled``\n"
+"    プロファイラの有効化。\n"
+"    (デフォルト値: false)"
+
+msgid "    This is equivalent to passing ``--profile`` on the command line."
+msgstr "    true 指定はコマンド行での ``--profile`` 指定と等価です。"
+
+msgid ""
 "``type``\n"
 "    The type of profiler to use.\n"
 "    (default: ls)"
@@ -22469,6 +22584,30 @@
 msgstr ""
 
 msgid ""
+"``zliblevel``\n"
+"    Integer between ``-1`` and ``9`` that controls the zlib compression "
+"level\n"
+"    for wire protocol commands that send zlib compressed output (notably "
+"the\n"
+"    commands that send repository history data)."
+msgstr ""
+
+msgid ""
+"    The default (``-1``) uses the default zlib compression level, which is\n"
+"    likely equivalent to ``6``. ``0`` means no compression. ``9`` means\n"
+"    maximum compression."
+msgstr ""
+
+msgid ""
+"    Setting this option allows server operators to make trade-offs between\n"
+"    bandwidth and CPU used. Lowering the compression lowers CPU utilization\n"
+"    but sends more bytes to clients."
+msgstr ""
+
+msgid "    This option only impacts the HTTP server."
+msgstr ""
+
+msgid ""
 "``smtp``\n"
 "--------"
 msgstr ""
@@ -22548,7 +22687,7 @@
 "or becomes temporarily unavailable. This section lets you define\n"
 "rewrite rules of the form::"
 msgstr ""
-"連携先ホストの名称変更や一時的な停止などで、 サブリポジトリ参照先 URL が、\n"
+"連携先ホストの名称変更や一時的な停止などで、 サブリポジトリ連携先 URL が、\n"
 "無効になる場合があります。 本セクションでは、 参照先 URL の書き換えを、\n"
 "以下の形式で記述できます::"
 
@@ -22599,6 +22738,21 @@
 "詳細は :hg:`help templates` を参照してください。"
 
 msgid ""
+"``templates``\n"
+"-------------"
+msgstr ""
+"``templates``\n"
+"-------------"
+
+#, fuzzy
+msgid ""
+"Use the ``[templates]`` section to define template strings.\n"
+"See :hg:`help templates` for details."
+msgstr ""
+"テンプレート文字列の定義は ``[templates]`` セクションで行います。\n"
+"詳細は :hg:`help templates` を参照してください。"
+
+msgid ""
 "``trusted``\n"
 "-----------"
 msgstr ""
@@ -22857,7 +23011,7 @@
 
 msgid ""
 "``interface.chunkselector``\n"
-"    Select the interface for change recording (e.g. :hg:`commit` -i).\n"
+"    Select the interface for change recording (e.g. :hg:`commit -i`).\n"
 "    Possible values are 'text' and 'curses'.\n"
 "    This config overrides the interface specified by ui.interface."
 msgstr ""
@@ -25816,7 +25970,7 @@
 "root directory, or any prefix path of that path, is matched against\n"
 "any pattern in ``.hgignore``."
 msgstr ""
-"未登録ファイルが、 作業領域のルートからの相対パス、\n"
+"管理対象外ファイルが、 作業領域のルートからの相対パス、\n"
 "またはそのパスの先頭部分が、 ``.hgignore``\n"
 "に記述されたパターンと合致する場合、\n"
 "そのファイルは Mercurial からは無視されます。"
@@ -25826,7 +25980,7 @@
 "``a/b/file.c`` inside our repository. Mercurial will ignore ``file.c``\n"
 "if any pattern in ``.hgignore`` matches ``a/b/file.c``, ``a/b`` or ``a``."
 msgstr ""
-"例えば、 未登録ファイル ``file.c`` が、\n"
+"例えば、 管理対象外ファイル ``file.c`` が、\n"
 "作業領域の ``a/b/file.c`` に位置すると仮定します。\n"
 "``a/b/file.c``, ``a/b`` または ``a`` といったパターンが\n"
 "``.hgignore`` に記述されている場合、\n"
@@ -26915,6 +27069,13 @@
 "で囲ってください。"
 
 msgid ""
+"Prefix\n"
+"======"
+msgstr ""
+"前置演算子\n"
+"=========="
+
+msgid ""
 "``not x``\n"
 "  Changesets not in x. Short form is ``! x``."
 msgstr ""
@@ -26922,6 +27083,13 @@
 "  x に含まれないリビジョン群。 ``! x`` とも表記可能。"
 
 msgid ""
+"Infix\n"
+"====="
+msgstr ""
+"二項演算子\n"
+"=========="
+
+msgid ""
 "``x::y``\n"
 "  A DAG range, meaning all changesets that are descendants of x and\n"
 "  ancestors of y, including x and y themselves. If the first endpoint\n"
@@ -27001,6 +27169,51 @@
 "  リビジョン群 x 中の各リビジョンの、 第1親側の n 番目の祖先。\n"
 "  ``x~0`` はリビジョン自身、 ``x~3`` は ``x^^^`` と等価。"
 
+msgid ""
+"``x ## y``\n"
+"  Concatenate strings and identifiers into one string."
+msgstr ""
+"``x ## y``\n"
+"  文字列やシンボル名を、 単一文字列に結合します。"
+
+msgid ""
+"  All other prefix, infix and postfix operators have lower priority than\n"
+"  ``##``. For example, ``a1 ## a2~2`` is equivalent to ``(a1 ## a2)~2``."
+msgstr ""
+"  他の全ての演算子 (前置/二項/後置) よりも、 結合優先順位が高くなります。\n"
+"  例えば ``a1 ## a2~2`` は ``(a1 ## a2)~2`` と等価です。"
+
+msgid "  For example::"
+msgstr "  記述例を以下に示します::"
+
+msgid ""
+"    [revsetalias]\n"
+"    issue(a1) = grep(r'\\bissue[ :]?' ## a1 ## r'\\b|\\bbug\\(' ## a1 ## "
+"r'\\)')"
+msgstr ""
+"    [revsetalias]\n"
+"    issue(a1) = grep(r'\\bissue[ :]?' ## a1 ## r'\\b|\\bbug\\(' ## a1 ## "
+"r'\\)')"
+
+msgid ""
+"    ``issue(1234)`` is equivalent to\n"
+"    ``grep(r'\\bissue[ :]?1234\\b|\\bbug\\(1234\\)')``\n"
+"    in this case. This matches against all of \"issue 1234\", "
+"\"issue:1234\",\n"
+"    \"issue1234\" and \"bug(1234)\"."
+msgstr ""
+"    上記の別名が定義されている場合、 ``issue(1234)`` という記述は\n"
+"    ``grep(r'\\bissue[ :]?1234\\b|\\bbug\\(1234\\)')`` と等価です。\n"
+"    このパターンは \"issue 1234\", \"issue:1234\", \"issue1234\" および\n"
+"    \"bug(1234)\" の全てに合致します。"
+
+msgid ""
+"Postfix\n"
+"======="
+msgstr ""
+"後置演算子\n"
+"=========="
+
 msgid "There is a single postfix operator:"
 msgstr "使用可能な後置単項演算子を以下に列挙します:"
 
@@ -27012,11 +27225,18 @@
 "  リビジョン群 x 中の各リビジョンの、 第1親リビジョン。 ``x^1`` と等価。"
 
 msgid ""
-"\n"
-"The following predicates are supported:"
-msgstr ""
-"\n"
-"使用可能な述語を以下に列挙します:"
+"Predicates\n"
+"=========="
+msgstr ""
+"述語\n"
+"===="
+
+msgid ""
+"Aliases\n"
+"======="
+msgstr ""
+"別名定義\n"
+"========"
 
 msgid ""
 "New predicates (known as \"aliases\") can be defined, using any combination "
@@ -27060,38 +27280,11 @@
 "``rs(0:tip, author)`` は ``reverse(sort(0:tip, author))`` と同一です。"
 
 msgid ""
-"An infix operator ``##`` can concatenate strings and identifiers into\n"
-"one string. For example::"
-msgstr ""
-"二項演算子 ``##`` は、 文字列やシンボル名を、 単一文字列に結合します。\n"
-"例えば::"
-
-msgid ""
-"  [revsetalias]\n"
-"  issue(a1) = grep(r'\\bissue[ :]?' ## a1 ## r'\\b|\\bbug\\(' ## a1 ## "
-"r'\\)')"
-msgstr ""
-"  [revsetalias]\n"
-"  issue(a1) = grep(r'\\bissue[ :]?' ## a1 ## r'\\b|\\bbug\\(' ## a1 ## "
-"r'\\)')"
-
-msgid ""
-"``issue(1234)`` is equivalent to ``grep(r'\\bissue[ :]?1234\\b|\\bbug"
-"\\(1234\\)')``\n"
-"in this case. This matches against all of \"issue 1234\", \"issue:1234\",\n"
-"\"issue1234\" and \"bug(1234)\"."
-msgstr ""
-"上記の別名が定義されている場合、 ``issue(1234)`` という記述は\n"
-"``grep(r'\\bissue[ :]?1234\\b|\\bbug\\(1234\\)')`` と等価です。\n"
-"このパターンは \"issue 1234\", \"issue:1234\", \"issue1234\" および\n"
-"\"bug(1234)\" の全てに合致します。"
-
-msgid ""
-"All other prefix, infix and postfix operators have lower priority than\n"
-"``##``. For example, ``a1 ## a2~2`` is equivalent to ``(a1 ## a2)~2``."
-msgstr ""
-"他の全ての演算子は ``##`` よりも結合優先順位が低くなります。 例えば\n"
-"``a1 ## a2~2`` は ``(a1 ## a2)~2`` と等価です。"
+"Equivalents\n"
+"==========="
+msgstr ""
+"等価性\n"
+"======"
 
 msgid "Command line equivalents for :hg:`log`::"
 msgstr ":hg:`log` のコマンド行オプション指定に対する等価な記述::"
@@ -27115,6 +27308,13 @@
 "  -P x  ->  !::x\n"
 "  -l x  ->  limit(expr, x)"
 
+msgid ""
+"Examples\n"
+"========"
+msgstr ""
+"記述例\n"
+"======"
+
 msgid "- Changesets on the default branch::"
 msgstr "- default ブランチのリビジョン群::"
 
@@ -27212,12 +27412,12 @@
 ":hg:`serve` can also start a \"command server.\" Clients can connect\n"
 "to this server and issue Mercurial commands over a special protocol.\n"
 "For more details on the command server, including links to client\n"
-"libraries, see https://mercurial.selenic.com/wiki/CommandServer."
+"libraries, see https://www.mercurial-scm.org/wiki/CommandServer."
 msgstr ""
 ":hg:`serve` コマンドは、 「コマンドサーバ」の起動も可能です。\n"
 "専用プロトコルで接続したクライアントから、 コマンドサーバ上での Mercurial\n"
 "コマンドの実行を依頼できます。 クライアント向けライブラリの詳細を含む、\n"
-"コマンドサーバの情報は、 https://mercurial.selenic.com/wiki/CommandServer\n"
+"コマンドサーバの情報は、 https://www.mercurial-scm.org/wiki/CommandServer\n"
 "を参照してください。"
 
 msgid ""
@@ -27991,6 +28191,23 @@
 msgid ".. functionsmarker"
 msgstr ".. functionsmarker"
 
+msgid "We provide a limited set of infix arithmetic operations on integers::"
+msgstr "整数値に対する以下の二項演算子が使用可能です::"
+
+msgid ""
+"  + for addition\n"
+"  - for subtraction\n"
+"  * for multiplication\n"
+"  / for floor division (division rounded to integer nearest -infinity)"
+msgstr ""
+"  加算用の +\n"
+"  減算用の -\n"
+"  乗算用の *\n"
+"  除算用の / (除算結果は、 マイナス無限大方向の整数値に丸められます)"
+
+msgid "Division fulfils the law x = x / y + mod(x, y)."
+msgstr "除算結果は x = x / y + mod(x, y) を満たします。"
+
 msgid ""
 "Also, for any expression that returns a list, there is a list operator::"
 msgstr "また、 列挙形式を返す expr に対しては、 以下の様な記述が可能です::"
@@ -28041,6 +28258,26 @@
 "上記記述は、 ``r`` と ``rn`` の2つのシンボルと、 関数 ``leftpad()``\n"
 "を別名として定義します。"
 
+msgid ""
+"It's also possible to specify complete template strings, using the\n"
+"``templates`` section. The syntax used is the general template string syntax."
+msgstr ""
+"``templates`` セクションで、 テンプレートを丸々定義することも可能です。\n"
+"記述の際の文法は、 通常のテンプレート定義のものと同じです。"
+
+msgid ""
+"  [templates]\n"
+"  nodedate = \"{node|short}: {date(date, \"%Y-%m-%d\")}\\n\""
+msgstr ""
+"  [templates]\n"
+"  nodedate = \"{node|short}: {date(date, \"%Y-%m-%d\")}\\n\""
+
+msgid "defines a template, ``nodedate``, which can be called like::"
+msgstr "上記の ``nodedate`` 定義により、 以下のコマンド実行が可能になります::"
+
+msgid "  $ hg log -r . -Tnodedate"
+msgstr "  $ hg log -r . -Tnodedate"
+
 msgid "Some sample command line templates:"
 msgstr "コマンドラインでのテンプレート指定例:"
 
@@ -28056,6 +28293,14 @@
 msgid "   $ hg log -r 0 --template \"files: {join(files, ', ')}\\n\""
 msgstr "   $ hg log -r 0 --template \"files: {join(files, ', ')}\\n\""
 
+msgid "- Join the list of files ending with \".py\" with a \", \"::"
+msgstr "- \".py\" 拡張子を持つファイル一覧を \", \" で連結::"
+
+msgid ""
+"   $ hg log -r 0 --template \"pythonfiles: {join(files('**.py'), ', ')}\\n\""
+msgstr ""
+"   $ hg log -r 0 --template \"pythonfiles: {join(files('**.py'), ', ')}\\n\""
+
 msgid "- Separate non-empty arguments by a \" \"::"
 msgstr "- 非空引数のみを \" \" で連結::"
 
@@ -28426,10 +28671,6 @@
 msgstr "サブリポジトリの検証中\n"
 
 #, python-format
-msgid "%s: %s\n"
-msgstr "%s: %s\n"
-
-#, python-format
 msgid ".hgsubstate is corrupt in revision %s\n"
 msgstr "リビジョン %s における .hgsubstate が不正です\n"
 
@@ -29149,6 +29390,10 @@
 msgstr "%d が作業領域の親リビジョンになりました\n"
 
 #, python-format
+msgid "waiting for lock on %s held by process %r on host %r\n"
+msgstr "%s のロック (プロセス %r/ホスト %s が保持) の解放を待っています\n"
+
+#, python-format
 msgid "repository %s"
 msgstr "リポジトリ '%s'"
 
@@ -29167,7 +29412,7 @@
 msgstr "ディレクト配下に一致するものがありません!"
 
 msgid "file not tracked!"
-msgstr "ファイルは未登録です!"
+msgstr "ファイルは管理対象外です!"
 
 msgid "cannot partially commit a merge (do not specify files or patterns)"
 msgstr "マージの部分コミットはできません(ファイル名/パターンは指定できません)"
@@ -29185,8 +29430,8 @@
 msgid "cannot commit merge with missing files"
 msgstr "管理対象ファイルが不在の状況では、マージ結果をコミットできません"
 
-msgid "unresolved merge conflicts (see \"hg help resolve\")"
-msgstr "未解消の衝突が残っています (\"hg help resolve\" を参照)"
+msgid "unresolved merge conflicts (see 'hg help resolve')"
+msgstr "未解消の衝突が残っています ('hg help resolve' を参照)"
 
 msgid "driver-resolved merge conflicts"
 msgstr ""
@@ -29313,8 +29558,12 @@
 msgstr "マージドライバ設定を元に戻すか、マージを取り止めてください"
 
 #, python-format
-msgid "warning: cannot merge flags for %s\n"
-msgstr "警告: ファイル %s の属性設定はマージできません\n"
+msgid ""
+"warning: cannot merge flags for %s without common ancestor - keeping local "
+"flags\n"
+msgstr ""
+"警告: 共通祖先のないファイル %s の属性設定はマージできません - 作業領域の値を"
+"維持します\n"
 
 #, python-format
 msgid "%s.%s not valid ('%s' is none of %s)"
@@ -29322,15 +29571,15 @@
 
 #, python-format
 msgid "%s: untracked file differs\n"
-msgstr "%s: 未登録ファイルに差分あり\n"
+msgstr "%s: 管理対象外ファイルに差分あり\n"
 
 msgid ""
 "untracked files in working directory differ from files in requested revision"
-msgstr "指定リビジョンでの記録内容と異なる未登録ファイルが存在します"
+msgstr "指定リビジョンでの記録内容と異なる管理対象外ファイルが存在します"
 
 #, python-format
 msgid "%s: replacing untracked file\n"
-msgstr "%s: 未登録ファイルの内容を書き換え\n"
+msgstr "%s: 管理対象外ファイルの内容を書き換え\n"
 
 #, python-format
 msgid "case-folding collision between %s and %s"
@@ -29390,6 +29639,14 @@
 msgstr "%s の削除に失敗: %s!\n"
 
 #, python-format
+msgid ""
+"current directory was removed\n"
+"(consider changing to repo root: %s)\n"
+msgstr ""
+"現ディレクトリが削除されました\n"
+"(リポジトリルート %s への移動をお勧めします)\n"
+
+#, python-format
 msgid "getting %s\n"
 msgstr "%s の取得中\n"
 
@@ -29417,19 +29674,19 @@
 
 #, python-format
 msgid ""
-"local changed %s which remote deleted\n"
+"local%(l)s changed %(f)s which other%(o)s deleted\n"
 "use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
 msgstr ""
-"変更したファイル %s が、マージ対象リビジョンで登録除外されています。\n"
+"現行側%(l)s での %(f)s の変更が他方側%(o)s での登録除外と衝突します。\n"
 "変更:(c)hanged と登録除外:(d)elete のどちらを採用しますか?$$ &Changed $$ "
 "&Delete"
 
 #, python-format
 msgid ""
-"remote changed %s which local deleted\n"
+"other%(o)s changed %(f)s which local%(l)s deleted\n"
 "use (c)hanged version or leave (d)eleted?$$ &Changed $$ &Deleted"
 msgstr ""
-"登録除外済みのファイル %s が、マージ対象リビジョンで変更されています。\n"
+"他方側%(o)s での %(f)s の変更が現行側%(l)s での登録除外と衝突します。\n"
 "変更:(c)hanged と登録除外:(d)elete のどちらを採用しますか?$$ &Changed $$ "
 "&Deleted"
 
@@ -29540,7 +29797,7 @@
 
 #, python-format
 msgid "%(func)s takes at most %(nargs)d arguments"
-msgstr "%(func)s の引数は最大 %(nargs)d 個です"
+msgstr "%(func)s の引数は 0 〜 %(nargs)d 個です"
 
 #, python-format
 msgid "%(func)s got an invalid argument"
@@ -29603,6 +29860,9 @@
 msgid "unable to find '%s' for patching\n"
 msgstr "パッチ適用対象の '%s' が不在です\n"
 
+msgid "(use '--prefix' to apply patch relative to the current directory)\n"
+msgstr "(現ディレクトリ相対でのパッチ適用には '--prefix' が有用です)\n"
+
 #, python-format
 msgid "patching file %s\n"
 msgstr "ファイル %s にパッチ適用中\n"
@@ -29743,6 +30003,10 @@
 msgstr "差分操作コード(delta opcode) 0 は想定外です"
 
 #, python-format
+msgid "source file '%s' does not exist"
+msgstr "適用対象ファイル '%s' は存在しません"
+
+#, python-format
 msgid "cannot create %s: destination already exists"
 msgstr "%s を作成できません: 対象ファイルが既に存在します"
 
@@ -29815,6 +30079,37 @@
 msgid "killed by signal %d"
 msgstr "シグナル %d で強制終了されました"
 
+#, python-format
+msgid "unrecognized profiling format '%s' - Ignored\n"
+msgstr "不正なプロファイル形式 '%s' を無視します\n"
+
+msgid ""
+"lsprof not available - install from http://codespeak.net/svn/user/arigo/hack/"
+"misc/lsprof/"
+msgstr ""
+"lsprof が利用できません - http://codespeak.net/svn/user/arigo/hack/misc/"
+"lsprof/からインストールしてください"
+
+msgid ""
+"flamegraph not available - install from https://github.com/evanhempel/python-"
+"flamegraph"
+msgstr ""
+"flamegraph が使用できません - https://github.com/evanhempel/python-"
+"flamegraph からインストールしてください"
+
+msgid "statprof not available - install using \"easy_install statprof\""
+msgstr ""
+"statprof が利用できません - \"easy_install statprof\"でインストールしてくださ"
+"い"
+
+#, python-format
+msgid "invalid sampling frequency '%s' - ignoring\n"
+msgstr "不正なサンプリング周期頻度 '%s' を無視します\n"
+
+#, python-format
+msgid "unrecognized profiler '%s' - ignored\n"
+msgstr "不正なプロファイラ指定 '%s' を無視します\n"
+
 #. i18n: format XX seconds as "XXs"
 #, python-format
 msgid "%02ds"
@@ -29867,12 +30162,17 @@
 msgstr "ファイル %s の破棄に失敗: %s\n"
 
 #, python-format
-msgid "strip failed, full bundle stored in '%s'\n"
-msgstr "リビジョン除外に失敗: 完全なバンドルを '%s' に保存\n"
-
-#, python-format
-msgid "strip failed, partial bundle stored in '%s'\n"
-msgstr "リビジョンの除外に失敗: 部分的なバンドルを '%s' に保存\n"
+msgid "strip failed, backup bundle stored in '%s'\n"
+msgstr "リビジョン除外に失敗: バックアップバンドルを '%s' に保存\n"
+
+#, python-format
+msgid "strip failed, unrecovered changes stored in '%s'\n"
+msgstr "リビジョン除外に失敗: 復旧されない履歴を '%s' に保存\n"
+
+#, python-format
+msgid ""
+"(fix the problem, then recover the changesets with \"hg unbundle '%s'\")\n"
+msgstr "(問題解決後に \"hg unbundle '%s'\" で履歴を復旧してください)\n"
 
 msgid "(not rebuilding fncache because repository does not support fncache)\n"
 msgstr "(fncache 未サポートのリポジトリのため、fncache の再構築は省略)\n"
@@ -30072,7 +30372,7 @@
 
 #. i18n: "bookmark" is a keyword
 msgid "bookmark takes one or no arguments"
-msgstr "bookmark の引数は最大1つです"
+msgstr "bookmark の引数は 0 〜 1 個です"
 
 #. i18n: "bookmark" is a keyword
 msgid "the argument to bookmark must be a string"
@@ -30184,7 +30484,7 @@
 
 #. i18n: "converted" is a keyword
 msgid "converted takes one or no arguments"
-msgstr "converted の引数は最大1つです"
+msgstr "converted の引数は 0 〜 1 個です"
 
 #. i18n: "converted" is a keyword
 msgid "converted requires a revision"
@@ -30327,23 +30627,29 @@
 "    limit() 記述の別名。"
 
 #, python-format
-msgid "%s takes no arguments or a pattern"
-msgstr "%s には引数やパターンを指定できません"
+msgid "%s takes no arguments or a pattern and an optional revset"
+msgstr "%s にはパターンと revset しか指定できません"
 
 #, python-format
 msgid "%s expected a pattern"
-msgstr "%s にはパターンを指定してください"
-
-msgid ""
-"``follow([pattern])``\n"
+msgstr "%s にはパターン文字列を指定してください"
+
+#, python-format
+msgid "%s expected one starting revision"
+msgstr "%s には開始リビジョンを指定してください"
+
+msgid ""
+"``follow([pattern[, startrev]])``\n"
 "    An alias for ``::.`` (ancestors of the working directory's first "
 "parent).\n"
 "    If pattern is specified, the histories of files matching given\n"
-"    pattern is followed, including copies."
-msgstr ""
-"``follow([pattern])``\n"
+"    pattern in the revision given by startrev are followed, including copies."
+msgstr ""
+"``follow([pattern[, startrev]])``\n"
 "    ``::.`` (作業領域の第1親の祖先リビジョン群) 記述の別名。\n"
-"    パターン指定がある場合、 合致するファイルの履歴 (複製含む) を辿ります。"
+"    パターン指定がある場合、 合致するファイルの履歴 (複製含む) を辿ります。\n"
+"    パターン合致の判定は、 起点リビジョン (startrev 又は作業領域の第1親)\n"
+"    時点の管理対象ファイルに対して行われます。"
 
 msgid ""
 "``all()``\n"
@@ -30446,7 +30752,7 @@
 
 #. i18n: "limit" is a keyword
 msgid "limit requires one to three arguments"
-msgstr "limit の引数は1〜3です"
+msgstr "limit の引数は 1 〜 3 個です"
 
 #. i18n: "limit" is a keyword
 msgid "limit requires a number"
@@ -30468,7 +30774,7 @@
 
 #. i18n: "last" is a keyword
 msgid "last requires one or two arguments"
-msgstr "last の引数は1つまたは2つです"
+msgstr "last の引数は 1 〜 2 個です"
 
 #. i18n: "last" is a keyword
 msgid "last requires a number"
@@ -30568,7 +30874,7 @@
 
 #. i18n: "id" is a keyword
 msgid "id requires one argument"
-msgstr "id の引数は1つです"
+msgstr "id の引数は1個です"
 
 #. i18n: "id" is a keyword
 msgid "id requires a string"
@@ -30601,7 +30907,7 @@
 
 #. i18n: "only" is a keyword
 msgid "only takes one or two arguments"
-msgstr "only の引数は1つまたは2つです"
+msgstr "only の引数は 1 〜 2 個です"
 
 msgid ""
 "``origin([set])``\n"
@@ -30632,7 +30938,7 @@
 
 #. i18n: "outgoing" is a keyword
 msgid "outgoing takes one or no arguments"
-msgstr "outgoing の引数は最大1つです"
+msgstr "outgoing の引数は 0 〜 1 個です"
 
 #. i18n: "outgoing" is a keyword
 msgid "outgoing requires a repository path"
@@ -30725,7 +31031,7 @@
 
 #. i18n: "remote" is a keyword
 msgid "remote takes zero, one, or two arguments"
-msgstr "remote の引数は0から2つです"
+msgstr "remote の引数は 0 〜 2 個です"
 
 #. i18n: "remote" is a keyword
 msgid "remote requires a string id"
@@ -30755,7 +31061,7 @@
 
 #. i18n: "rev" is a keyword
 msgid "rev requires one argument"
-msgstr "rev の引数は1つです"
+msgstr "rev の引数は1個です"
 
 #. i18n: "rev" is a keyword
 msgid "rev requires a number"
@@ -30821,7 +31127,7 @@
 
 #. i18n: "matching" is a keyword
 msgid "matching takes 1 or 2 arguments"
-msgstr "matching の引数は1つか2つです"
+msgstr "matching の引数は 1 〜 2 個です"
 
 #. i18n: "matching" is a keyword
 msgid "matching requires a string as its second argument"
@@ -30849,7 +31155,7 @@
 
 #. i18n: "sort" is a keyword
 msgid "sort requires one or two arguments"
-msgstr "sort の引数は1つまたは2つです"
+msgstr "sort の引数は 1 〜 2 個です"
 
 #. i18n: "sort" is a keyword
 msgid "sort spec must be a string"
@@ -30859,9 +31165,11 @@
 msgid "unknown sort key %r"
 msgstr "未知の整列方式 %r"
 
+#. i18n: "topo" is a keyword
 msgid "topo sort order cannot be combined with other sort keys"
 msgstr "整列指定 topo と他の整列指定は併用できません"
 
+#. i18n: "topo" and "topo.firstbranch" are keywords
 msgid "topo.firstbranch can only be used when using the topo sort key"
 msgstr "topo.firstbranch は整列指定 topo 指定時のみ使用可能です"
 
@@ -30934,7 +31242,7 @@
 
 #. i18n: "tag" is a keyword
 msgid "tag takes one or no arguments"
-msgstr "tagged の引数は最大1つです"
+msgstr "tagged の引数は 0 〜 1 個です"
 
 #. i18n: "tag" is a keyword
 msgid "the argument to tag must be a string"
@@ -31012,6 +31320,10 @@
 msgid "can only have 1 active background file closer"
 msgstr "(internal error) can only have 1 active background file closer"
 
+#, python-format
+msgid "implementation error: mode %s is not valid for checkambig=True"
+msgstr "実装エラー: モード %s 指定は checkambig=True に対して不適切です"
+
 msgid ""
 "backgroundclose can only be used when a backgroundclosing context manager is "
 "active"
@@ -31455,48 +31767,63 @@
 
 #, python-format
 msgid ""
+" subrepository sources for %(s)s differ\n"
+"use (l)ocal%(l)s source (%(lo)s) or (r)emote%(o)s source (%(ro)s)?$$ &Local $"
+"$ &Remote"
+msgstr ""
+" サブリポジトリ %(s)s の連携先が異なっています。\n"
+"現行側%(l)s 連携先 (%(lo)s):(l)ocal と、他方側%(o)s 連携先 (%(ro)s):(r)emote "
+"のどちらを採用しますか?$$ &Local $$ &Remote"
+
+#, python-format
+msgid ""
+" subrepository %(s)s diverged (local revision: %(sl)s, remote revision: "
+"%(sr)s)\n"
+"(M)erge, keep (l)ocal%(l)s or keep (r)emote%(o)s?$$ &Merge $$ &Local $$ "
+"&Remote"
+msgstr ""
+" サブリポジトリ %(s)s の参照先が異なっています (現行側: %(sl)s, 他方側: "
+"%(sr)s)\n"
+"両者のマージ:(m)erge, 現行側%(l)s 参照先:(l)ocal, 他方側%(o)s 参照先:(r)"
+"emote のいずれを採用しますか?$$ &Merge $$ &Local $$ &Remote"
+
+#, python-format
+msgid ""
+" local%(l)s changed subrepository %(s)s which remote%(o)s removed\n"
+"use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
+msgstr ""
+" 現行側%(l)s でのサブリポジトリ %(s)s の変更が、他方側%(o)s での削除と衝突し"
+"ます\n"
+"変更:(c)hanged と、削除:(d)elete のどちらを採用しますか?$$ &Changed $$ "
+"&Delete"
+
+#, python-format
+msgid ""
+" remote%(o)s changed subrepository %(s)s which local%(l)s removed\n"
+"use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
+msgstr ""
+" 他方側%(o)s でのサブリポジトリ %(s)s の変更が、現行側%(l)s での削除と衝突し"
+"ます\n"
+"変更:(c)hanged と、削除:(d)elete のどちらを採用しますか?$$ &Changed $$ "
+"&Delete"
+
+#, python-format
+msgid ""
 " subrepository sources for %s differ\n"
 "use (l)ocal source (%s) or (r)emote source (%s)?$$ &Local $$ &Remote"
 msgstr ""
-" サブリポジトリ %s で連携先との差分が検出されました。\n"
-"手元(%s):(l)ocal と連携先(%s):(r)emote のどちらの内容を採用しますか?$$ "
-"&Local $$ &Remote"
-
-#, python-format
-msgid ""
-" subrepository %s diverged (local revision: %s, remote revision: %s)\n"
-"(M)erge, keep (l)ocal or keep (r)emote?$$ &Merge $$ &Local $$ &Remote"
-msgstr ""
-" サブリポジトリ %s で分岐が検出されました (手元: %s 分岐先: %s)\n"
-"マージ実施:(m)erge 手元の内容:(l)ocal 分岐先の内容:(r)emote のどれを採用しま"
-"すか?$$ &Merge $$ &Local $$ &Remote"
-
-#, python-format
-msgid ""
-" local changed subrepository %s which remote removed\n"
-"use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
-msgstr ""
-" サブリポジトリで変更したファイル %s は連携先で登録除外されています。\n"
-"変更:(c)hanged と登録除外:(d)elete のどちらを採用しますか?$$ &Changed $$ "
-"&Delete"
-
-#, python-format
-msgid ""
-" remote changed subrepository %s which local removed\n"
-"use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
-msgstr ""
-" サブリポジトリで登録除外したファイル %s は連携先で変更されています。\n"
-"変更:(c)hanged と登録除外:(d)elete のどちらを採用しますか?$$ &Changed $$ "
-"&Delete"
+" サブリポジトリ %s の未コミット変更が、参照先更新の影響を受けます。\n"
+"現行内容 (%s ベース):(l)ocal と、 他方側参照先 (%s):(r)emote のどちらを採用し"
+"ますか?$$ &Local $$ &Remote"
 
 #, python-format
 msgid ""
 " subrepository sources for %s differ (in checked out version)\n"
 "use (l)ocal source (%s) or (r)emote source (%s)?$$ &Local $$ &Remote"
 msgstr ""
-" サブリポジトリ %s の作業領域で差分が検出されました\n"
-"手元(%s):(l)ocal と連携先(%s):(r)emote のどちらを採用しますか?$$ &Local $$ "
-"&Remote"
+" サブリポジトリ %s の内容が、異なる参照先で更新されています。\n"
+"現行内容 (%s):(l)ocal と、他方側参照先 (%s):(r)emote のどちらを採用しますか?"
+"$$ &Local $$ &Remote"
 
 msgid "default path for subrepository not found"
 msgstr "サブリポジトリの連携先が見つかりません"
@@ -32077,8 +32404,8 @@
 msgid ":tags: List of strings. Any tags associated with the changeset."
 msgstr ":tags: 文字列列挙。 当該リビジョンに付与されたタグの一覧。"
 
-msgid "integer literal without digits"
-msgstr "数値の指定がありません"
+msgid ":termwidth: Integer. The width of the current terminal."
+msgstr ":termwidth: 整数。 端末の表示カラム数。"
 
 msgid "unterminated template expansion"
 msgstr "テンプレート定義が終端していません"
@@ -32114,9 +32441,18 @@
 msgid "%r is not iterable"
 msgstr "%r にはリスト処理を適用できません"
 
+msgid "negation needs an integer argument"
+msgstr "負値指定は整数値に対してのみ有効です"
+
+msgid "arithmetic only defined on integers"
+msgstr "算術演算は整数値に対してのみ有効です"
+
+msgid "division by zero is not defined"
+msgstr "0 での除算は未サポートです"
+
 #, python-format
 msgid "filter %s expects one argument"
-msgstr "フィルタ %s は引数が1つ必要です"
+msgstr "フィルタ %s の引数は1個です"
 
 msgid ""
 ":date(date[, fmt]): Format a date. See :hg:`help dates` for formatting\n"
@@ -32130,7 +32466,7 @@
 
 #. i18n: "date" is a keyword
 msgid "date expects one or two arguments"
-msgstr "date の引数は1つまたは2つです"
+msgstr "date の引数は 1 〜 2 個です"
 
 #. i18n: "date" is a keyword
 msgid "date expects a date information"
@@ -32145,7 +32481,19 @@
 
 #. i18n: "diff" is a keyword
 msgid "diff expects zero, one, or two arguments"
-msgstr "diff の引数は最大2つです"
+msgstr "diff の引数は 0 〜 2 個です"
+
+msgid ""
+":files(pattern): All files of the current changeset matching the pattern. "
+"See\n"
+"    :hg:`help patterns`."
+msgstr ""
+":files(pattern): 当該リビジョンでパターンに合致する名前のファイル一覧。\n"
+"    パターン指定の詳細は :hg:`help patterns` を参照してください。"
+
+#. i18n: "files" is a keyword
+msgid "files expects one argument"
+msgstr "files の引数は1個です"
 
 msgid ""
 ":fill(text[, width[, initialident[, hangindent]]]): Fill many\n"
@@ -32156,22 +32504,22 @@
 
 #. i18n: "fill" is a keyword
 msgid "fill expects one to four arguments"
-msgstr "fill の引数は1つから4つの間です"
+msgstr "fill の引数は 1 〜 4 個です"
 
 #. i18n: "fill" is a keyword
 msgid "fill expects an integer width"
 msgstr "fill には数値を指定してください"
 
 msgid ""
-":pad(text, width[, fillchar=' '[, right=False]]): Pad text with a\n"
+":pad(text, width[, fillchar=' '[, left=False]]): Pad text with a\n"
 "    fill character."
 msgstr ""
-":pad(text, width[, fillchar=' '[, right=False]]): fillchar 文字で\n"
+":pad(text, width[, fillchar=' '[, left=False]]): fillchar 文字で\n"
 "    text を width 幅に字詰めします。"
 
 #. i18n: "pad" is a keyword
 msgid "pad() expects two to four arguments"
-msgstr "pad() の引数は2つから4つの間です"
+msgstr "pad() の引数は 2 〜 4 個です"
 
 #. i18n: "pad" is a keyword
 msgid "pad() expects an integer width"
@@ -32189,7 +32537,7 @@
 
 #. i18n: "indent" is a keyword
 msgid "indent() expects two or three arguments"
-msgstr "indent() は2または3の引数が必要です"
+msgstr "indent() の引数は 2 〜 3 個です"
 
 msgid ""
 ":get(dict, key): Get an attribute/key from an object. Some keywords\n"
@@ -32201,7 +32549,7 @@
 
 #. i18n: "get" is a keyword
 msgid "get() expects two arguments"
-msgstr "get() の引数は2つです"
+msgstr "get() の引数は2個です"
 
 #. i18n: "get" is a keyword
 msgid "get() expects a dict as first argument"
@@ -32215,18 +32563,19 @@
 
 #. i18n: "if" is a keyword
 msgid "if expects two or three arguments"
-msgstr "if は2または3の引数が必要です"
-
-msgid ""
-":ifcontains(search, thing, then[, else]): Conditionally execute based\n"
-"    on whether the item \"search\" is in \"thing\"."
-msgstr ""
-":ifcontains(search, thing, then[, else]): \"search\" 結果が \"thing\"\n"
-"    に含まれるか否かに応じて then または else を実施します。"
+msgstr "if の引数は 2 〜 3 個です"
+
+msgid ""
+":ifcontains(needle, haystack, then[, else]): Conditionally execute based\n"
+"    on whether the item \"needle\" is in \"haystack\"."
+msgstr ""
+":ifcontains(needle, haystack, then[, else]): needle 評価値が haystack\n"
+"    評価値に含まれるか否かに応じて then または else を実施します。\n"
+"    (※ 訳注: needle in haystack で「干草の山の中の針」)"
 
 #. i18n: "ifcontains" is a keyword
 msgid "ifcontains expects three or four arguments"
-msgstr "ifcontains は3または4の引数が必要です"
+msgstr "ifcontains の引数は 3 〜 4 個です"
 
 msgid ""
 ":ifeq(expr1, expr2, then[, else]): Conditionally execute based on\n"
@@ -32237,14 +32586,14 @@
 
 #. i18n: "ifeq" is a keyword
 msgid "ifeq expects three or four arguments"
-msgstr "ifeq は3または4の引数が必要です"
+msgstr "ifeq の引数は 3 〜 4 個です"
 
 msgid ":join(list, sep): Join items in a list with a delimiter."
 msgstr ":join(list, sep): list 中の要素を sep で連結します。"
 
 #. i18n: "join" is a keyword
 msgid "join expects one or two arguments"
-msgstr "join の引数は1つまたは2つです"
+msgstr "join の引数は 1 〜 2 個です"
 
 msgid ""
 ":label(label, expr): Apply a label to generated content. Content with\n"
@@ -32256,7 +32605,7 @@
 
 #. i18n: "label" is a keyword
 msgid "label expects two arguments"
-msgstr "label の引数は2つです"
+msgstr "label の引数は2個です"
 
 msgid ""
 ":latesttag([pattern]): The global tags matching the given pattern on the\n"
@@ -32267,7 +32616,7 @@
 
 #. i18n: "latesttag" is a keyword
 msgid "latesttag expects at most one argument"
-msgstr "latesttag の引数は最大1つです"
+msgstr "latesttag の引数は 0 〜 1 個です"
 
 msgid ""
 ":localdate(date[, tz]): Converts a date to the specified timezone.\n"
@@ -32278,7 +32627,7 @@
 
 #. i18n: "localdate" is a keyword
 msgid "localdate expects one or two arguments"
-msgstr "localdate の引数は1つまたは2つです"
+msgstr "localdate の引数は 1 〜 2 個です"
 
 #. i18n: "localdate" is a keyword
 msgid "localdate expects a date information"
@@ -32288,6 +32637,23 @@
 msgid "localdate expects a timezone"
 msgstr "localdate の入力にはタイムゾーンを与えてください"
 
+msgid ":mod(a, b): Calculate a mod b such that a / b + a mod b == a"
+msgstr ":mod(a, b): a を b で除算した余り値 (a / b + a mod b == a)。"
+
+#. i18n: "mod" is a keyword
+msgid "mod expects two arguments"
+msgstr "mod の引数は2個です"
+
+msgid ""
+":relpath(path): Convert a repository-absolute path into a filesystem path "
+"relative to\n"
+"    the current working directory."
+msgstr ":relpath(path): リポジトリ相対パスから現ディレクトリ相対パスへの変換。"
+
+#. i18n: "relpath" is a keyword
+msgid "relpath expects one argument"
+msgstr "relpath の引数は1個です"
+
 msgid ""
 ":revset(query[, formatargs...]): Execute a revision set query. See\n"
 "    :hg:`help revset`."
@@ -32297,21 +32663,21 @@
 
 #. i18n: "revset" is a keyword
 msgid "revset expects one or more arguments"
-msgstr "revset の引数は1つまたは2つです"
+msgstr "revset の引数は1個以上です"
 
 msgid ":rstdoc(text, style): Format ReStructuredText."
 msgstr ":rstdoc(text, style): 出力を ReStructuredText として整形します。"
 
 #. i18n: "rstdoc" is a keyword
 msgid "rstdoc expects two arguments"
-msgstr "rstdoc の引数は2つです"
+msgstr "rstdoc の引数は2個です"
 
 msgid ":separate(sep, args): Add a separator between non-empty arguments."
 msgstr ":separate(sep, args): 非空な args 要素を区切り文字 sep で連結します。"
 
 #. i18n: "separate" is a keyword
 msgid "separate expects at least one argument"
-msgstr "separate には最低1つの引数が必要です"
+msgstr "separate の引数は1個以上です"
 
 msgid ""
 ":shortest(node, minlength=4): Obtain the shortest representation of\n"
@@ -32322,7 +32688,7 @@
 
 #. i18n: "shortest" is a keyword
 msgid "shortest() expects one or two arguments"
-msgstr "shortest() の引数は1つまたは2つです"
+msgstr "shortest() の引数は 1 〜 2 個です"
 
 #. i18n: "shortest" is a keyword
 msgid "shortest() expects an integer minlength"
@@ -32337,7 +32703,7 @@
 
 #. i18n: "strip" is a keyword
 msgid "strip expects one or two arguments"
-msgstr "strip の引数は1つまたは2つです"
+msgstr "strip の引数は 1 〜 2 個です"
 
 msgid ""
 ":sub(pattern, replacement, expression): Perform text substitution\n"
@@ -32347,7 +32713,7 @@
 
 #. i18n: "sub" is a keyword
 msgid "sub expects three arguments"
-msgstr "sub は引数が3つ必要です"
+msgstr "sub の引数は3個です"
 
 #. i18n: "sub" is a keyword
 #, python-format
@@ -32368,7 +32734,7 @@
 
 #. i18n: "startswith" is a keyword
 msgid "startswith expects two arguments"
-msgstr "startswith の引数は2つです"
+msgstr "startswith の引数は2個です"
 
 msgid ":word(number, text[, separator]): Return the nth word from a string."
 msgstr ""
@@ -32377,7 +32743,7 @@
 #. i18n: "word" is a keyword
 #, python-format
 msgid "word expects two or three arguments, got %d"
-msgstr "word は2または3の引数が必要です (実際の引数は %d 個)"
+msgstr "word の引数は 2 〜 3 個です (指定された引数は %d 個)"
 
 #. i18n: "word" is a keyword
 msgid "word expects an integer index"
@@ -32626,8 +32992,8 @@
 msgstr "不正な日付の指定です: %s"
 
 #, python-format
-msgid "%s must be nonnegative (see \"hg help dates\")"
-msgstr "%s には正の値を指定してください (\"hg help dates\" 参照)"
+msgid "%s must be nonnegative (see 'hg help dates')"
+msgstr "%s には正の値を指定してください ('hg help dates' 参照)"
 
 #, python-format
 msgid "invalid regular expression: %s"
--- a/i18n/pt_BR.po	Sun Oct 16 13:35:23 2016 -0700
+++ b/i18n/pt_BR.po	Tue Nov 01 15:40:21 2016 -0400
@@ -1,13 +1,13 @@
 # Brazilian Portuguese translations for Mercurial
 # Traduções do Mercurial para português do Brasil
 # Copyright (C) 2011 Matt Mackall and others
-#
+# 
 # Translators:
 # Diego Oliveira <diego@diegooliveira.com>
 # Wagner Bruna <wbruna@softwareexpress.com.br>
-#
+# 
 # Translation dictionary:
-#
+# 
 # archive             pacote
 # branch              ramificar (v.), ramo (s.)
 # bundle              bundle
@@ -26,13 +26,14 @@
 # tip                 tip (tag), ponta
 # update              atualizar (v.), atualização (s.)
 # working directory   diretório de trabalho
-#
+# 
+# Wagner Bruna <wbruna@softwareexpress.com.br>, 2016.
 msgid ""
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
-"POT-Creation-Date: 2016-07-19 11:11-0300\n"
-"PO-Revision-Date: 2016-07-19 18:48-0300\n"
+"POT-Creation-Date: 2016-10-22 23:20-0200\n"
+"PO-Revision-Date: 2016-10-22 23:23-0200\n"
 "Last-Translator: Wagner Bruna <wbruna@softwareexpress.com.br>\n"
 "Language-Team: Brazilian Portuguese <>\n"
 "MIME-Version: 1.0\n"
@@ -619,7 +620,7 @@
 msgstr ""
 "Essa extensão adiciona comentários a bugs do Bugzilla quando\n"
 "forem encontradas revisões que se refiram a esses bugs pelo ID.\n"
-"Os comentários são formatados usando o mecanismo de templates\n"
+"Os comentários são formatados usando o mecanismo de modelos\n"
 "do Mercurial."
 
 msgid ""
@@ -826,7 +827,7 @@
 "  extension specifies:"
 msgstr ""
 "bugzilla.template\n"
-"  O template usado para formatar os comentários. Sobrepõe style se\n"
+"  O modelo usado para formatar os comentários. Sobrepõe style se\n"
 "  especificado. Além das palavras chave do Mercurial, a extensão\n"
 "  especifica:"
 
@@ -859,7 +860,7 @@
 "bugzilla.strip\n"
 "  O número de separadores de caminho que devem ser retirados do\n"
 "  início do caminho para o repositório do Mercurial (``{root}``\n"
-"  nos templates) para produzir ``{webroot}``. Por exemplo, um\n"
+"  nos modelos) para produzir ``{webroot}``. Por exemplo, um\n"
 "  repositório com ``{root}`` ``/var/local/my-project`` com valor\n"
 "  de strip 2 gera ``my-project`` como valor de ``{webroot}``.\n"
 "  O padrão é 0."
@@ -1919,6 +1920,25 @@
 "determinado tipo de terminal, e serão silenciosamente ignorados."
 
 msgid ""
+"If the terminfo entry for your terminal is missing codes for an effect\n"
+"or has the wrong codes, you can add or override those codes in your\n"
+"configuration::"
+msgstr ""
+"Se a entrada terminfo para o seu terminal não possuir códigos para\n"
+"um efeito, ou se possuir códigos incorretos, você pode adicionar\n"
+"ou sobrepor tais códigos em sua configuração::"
+
+msgid ""
+"  [color]\n"
+"  terminfo.dim = \\E[2m"
+msgstr ""
+"  [color]\n"
+"  terminfo.dim = \\E[2m"
+
+msgid "where '\\E' is substituted with an escape character."
+msgstr "onde '\\E' é substituído por um caractere escape."
+
+msgid ""
 "Labels\n"
 "------"
 msgstr ""
@@ -4116,6 +4136,16 @@
 "    trabalho, e se nenhuma revisão for especificada, os arquivos do\n"
 "    diretório de trabalho serão comparados com seu pai."
 
+msgid ""
+"    Show differences between revisions for the specified files, using\n"
+"    the following program::"
+msgstr ""
+"    Mostra diferenças entre revisões para os arquivos especificados,\n"
+"    usando o seguinte programa::"
+
+msgid "        %(path)s"
+msgstr "        %(path)s"
+
 #, python-format
 msgid "hg %s [OPTION]... [FILE]..."
 msgstr "hg %s [OPÇÃO]... [ARQUIVO]..."
@@ -5124,6 +5154,17 @@
 msgstr "revisão desconhecida %s listada"
 
 #, python-format
+msgid "%s \"%s\" changeset was not a candidate"
+msgstr "%s revisão \"%s\" não foi um candidato"
+
+msgid "only use listed changesets"
+msgstr "usa apenas revisões listadas"
+
+#, python-format
+msgid "duplicated command for changeset %s"
+msgstr "comando duplicado para a revisão %s"
+
+#, python-format
 msgid "Fix up the change (%s %s)"
 msgstr "Corrija a mudança (%s %s)"
 
@@ -5174,6 +5215,13 @@
 "%s: não é possível combinar - a cópia de trabalho não é um descendente da "
 "revisão anterior %s\n"
 
+#, python-format
+msgid "%s \"%s\" changeset was an edited list candidate"
+msgstr "%s revisão \"%s\" foi um candidato editado na lista"
+
+msgid "base must only use unlisted changesets"
+msgstr "a base deve usar apenas revisões não listadas"
+
 msgid "fold subclass used for when multiple folds happen in a row"
 msgstr ""
 
@@ -5205,8 +5253,8 @@
 msgid "there are ambiguous outgoing revisions"
 msgstr "algumas revisões a serem enviadas são ambíguas"
 
-msgid "see \"hg help histedit\" for more detail"
-msgstr "veja \"hg help histedit\" para mais detalhes"
+msgid "see 'hg help histedit' for more detail"
+msgstr "veja 'hg help histedit' para mais detalhes"
 
 msgid "read history edits from the specified file"
 msgstr "lê alterações de histórico a partir do arquivo especificado"
@@ -5289,7 +5337,7 @@
 "    - Caso contrário, o valor da opção de configuração \"histedit.defaultrev\"\n"
 "      será usado para selecionar a revisão base quando o ANCESTRAL não\n"
 "      for especificado.\n"
-"      Será usada a primeira revisão retorjnada pelo revset.\n"
+"      Será usada a primeira revisão retornada pelo revset.\n"
 "      Por padrão, isto seleciona o histórico editável que for único para\n"
 "      os ancestrais do diretório de trabalho."
 
@@ -5480,8 +5528,8 @@
 msgid "cannot edit public changeset: %s"
 msgstr "não é possível editar uma revisão pública: %s"
 
-msgid "see \"hg help phases\" for details"
-msgstr "veja \"hg help phases\" para mais detalhes"
+msgid "see 'hg help phases' for details"
+msgstr "veja 'hg help phases' para mais detalhes"
 
 #, python-format
 msgid "malformed line \"%s\""
@@ -5494,25 +5542,6 @@
 msgid "warning: histedit rules saved to: .hg/histedit-last-edit.txt\n"
 msgstr "aviso: regras de histedit gravadas em: .hg/histedit-last-edit.txt\n"
 
-#, python-format
-msgid "unknown constraint \"%s\""
-msgstr "restrição desconhecida \"%s\""
-
-#, python-format
-msgid "%s \"%s\" changeset was not a candidate"
-msgstr "%s revisão \"%s\" não foi um candidato"
-
-msgid "only use listed changesets"
-msgstr "usa apenas revisões listadas"
-
-#, python-format
-msgid "%s \"%s\" changeset was not an edited list candidate"
-msgstr "%s revisão \"%s\" não foi um candidato editado na lista"
-
-#, python-format
-msgid "duplicated command for changeset %s"
-msgstr "comando duplicado para a revisão %s"
-
 msgid "no rules provided"
 msgstr "nenhuma regra fornecida"
 
@@ -5524,8 +5553,8 @@
 msgstr "regras faltando para a revisão %s"
 
 #, python-format
-msgid "use \"drop %s\" to discard, see also: \"hg help -e histedit.config\""
-msgstr "use \"drop %s\" para descartar, veja também: \"hg help -e histedit.config\""
+msgid "use \"drop %s\" to discard, see also: 'hg help -e histedit.config'"
+msgstr "use \"drop %s\" para descartar, veja também: 'hg help -e histedit.config'"
 
 #, python-format
 msgid "histedit: moving bookmarks %s from %s to %s\n"
@@ -5651,14 +5680,14 @@
 msgstr "Você não pode combinar --all e filtragem em um nome"
 
 msgid "the working copy and bookmarks"
-msgstr ""
+msgstr "a cópia de trabalho e marcadores"
 
 #, python-format
 msgid "previous locations of %s:\n"
-msgstr ""
+msgstr "localizações anteriores para %s:\n"
 
 msgid "no recorded locations\n"
-msgstr ""
+msgstr "nenhum local gravado\n"
 
 msgid "expand keywords in tracked files"
 msgstr "expande palavras chave em arquivos rastreados"
@@ -7484,7 +7513,7 @@
 msgstr "não atualiza os novos diretórios de trabalho"
 
 msgid "use uncompressed transfer (fast over LAN)"
-msgstr "usa transferência não comprimida (mais rápido em LANs)"
+msgstr "usa transferência não comprimida (mais rápido em redes locais)"
 
 msgid "REPO"
 msgstr "REPOSITÓRIO"
@@ -9204,7 +9233,7 @@
 
 #, python-format
 msgid "public \"%s\" is missing %s and %i others"
-msgstr "url pública \"%s\" não possui %s e %i outros"
+msgstr "URL pública \"%s\" não possui %s e %i outros"
 
 #, python-format
 msgid "public url %s is missing %s"
@@ -9370,7 +9399,7 @@
 "https://mercurial-scm.org/wiki/RebaseExtension\n"
 
 msgid "rebase"
-msgstr "%d rebaseados"
+msgstr "rebase"
 
 msgid ".hg/rebasestate is incomplete"
 msgstr ".hg/rebasestate está incompleto"
@@ -10103,7 +10132,7 @@
 "given a repo path, provide the scheme-expanded path\n"
 "    "
 msgstr ""
-"dado um camino para um repositório, fornece o caminho com o esquema expandido\n"
+"dado um caminho para um repositório, fornece o caminho com o esquema expandido\n"
 "    "
 
 msgid "share a common history between several working directories"
@@ -10397,7 +10426,7 @@
 "    that causes a conflict. This reverts the unshelved changes, and\n"
 "    leaves the bundle in place.)"
 msgstr ""
-"    (Alternativamente, vocẽ pode usar ``--abort`` para abandonar\n"
+"    (Alternativamente, você pode usar ``--abort`` para abandonar\n"
 "    uma operação unshelve que causou um conflito. Isto reverte\n"
 "    as mudanças engavetadas sem mover o bundle.)\n"
 "    "
@@ -11386,6 +11415,11 @@
 "o bundle em %s está corrompido:\n"
 "%s"
 
+#. i18n: column positioning for "hg summary"
+#, python-format
+msgid "remote: %s\n"
+msgstr "remoto:       %s\n"
+
 msgid "push failed:"
 msgstr "o push falhou:"
 
@@ -11577,9 +11611,27 @@
 msgstr "%s: impossível copiar - é o mesmo arquivo\n"
 
 #, python-format
+msgid "%s: not overwriting - file already committed\n"
+msgstr "%s: não sobrescrito - arquivo já foi consolidado\n"
+
+#, python-format
+msgid "(hg rename %s to replace the file by recording a rename)\n"
+msgstr "(use hg rename %s para substituir o arquivo gravando uma renomeação)\n"
+
+#, python-format
+msgid "(hg copy %s to replace the file by recording a copy)\n"
+msgstr "(use hg copy %s para substituir o arquivo gravando uma cópia)\n"
+
+#, python-format
 msgid "%s: not overwriting - file exists\n"
 msgstr "%s: não sobrescrito - arquivo existe\n"
 
+msgid "(hg rename --after to record the rename)\n"
+msgstr "(use hg rename --after para gravar a renomeação)\n"
+
+msgid "(hg copy --after to record the copy)\n"
+msgstr "(use hg copy --after para gravar a cópia)\n"
+
 #, python-format
 msgid "%s: not recording move - %s does not exist\n"
 msgstr "%s: renomeação não gravada - %s não existe\n"
@@ -11777,6 +11829,14 @@
 msgid "skipping"
 msgstr "omitindo"
 
+#, python-format
+msgid ""
+"not removing %s: file has been marked for add (use 'hg forget' to undo "
+"add)\n"
+msgstr ""
+"%s não removido: o arquivo foi marcado para adição (use 'hg forget' para "
+"desfazer a adição)\n"
+
 msgid "failed to mark all new/missing files as added/removed"
 msgstr ""
 "falha ao marcar todos os arquivos novos/ausentes como adicionados/removidos"
@@ -12788,38 +12848,6 @@
 "      Veja :hg:`help revsets` para mais informações sobre a palavra\n"
 "      chave `bisect()`."
 
-msgid "The first good revision is:\n"
-msgstr "A primeira revisão boa é:\n"
-
-msgid "The first bad revision is:\n"
-msgstr "A primeira revisão ruim é:\n"
-
-#, python-format
-msgid ""
-"Not all ancestors of this changeset have been checked.\n"
-"Use bisect --extend to continue the bisection from\n"
-"the common ancestor, %s.\n"
-msgstr ""
-"Nem todos os ancestrais desta revisão foram verificados.\n"
-"Use bisect --extend para continuar a bissecção a partir do\n"
-"ancestral comum, %s.\n"
-
-msgid "Due to skipped revisions, the first good revision could be any of:\n"
-msgstr ""
-"Devido a revisões omitidas, a primeira revisão boa pode ser qualquer uma "
-"entre:\n"
-
-msgid "Due to skipped revisions, the first bad revision could be any of:\n"
-msgstr ""
-"Devido a revisões omitidas, a primeira revisão ruim pode ser qualquer uma "
-"entre:\n"
-
-msgid "cannot bisect (no known good revisions)"
-msgstr "não é possível fazer o bisect (nenhuma revisão boa conhecida)"
-
-msgid "cannot bisect (no known bad revisions)"
-msgstr "não é possível fazer o bisect (nenhuma revisão ruim conhecida)"
-
 msgid "(use of 'hg bisect <cmd>' is deprecated)\n"
 msgstr "(o uso 'hg bisect <cmd>' é obsoleto)\n"
 
@@ -12828,11 +12856,11 @@
 
 msgid "current bisect revision is unknown - start a new bisect to fix"
 msgstr ""
-"a revisão biseccionada atual é desconhecida - para corrigir inicie uma nova "
+"a revisão bissecionada atual é desconhecida - para corrigir inicie uma nova "
 "bissecção"
 
 msgid "current bisect revision is a merge"
-msgstr "a revisão biseccionada atual é uma mesclagem"
+msgstr "a revisão bissecionada atual é uma mesclagem"
 
 #, python-format
 msgid "failed to execute %s"
@@ -13207,8 +13235,8 @@
 msgid "no commits to bundle"
 msgstr "nenhuma revisão a ser incluída no bundle"
 
-msgid "see \"hg help bundle\" for supported values for --type"
-msgstr "veja \"hg help bundle\" para valores suportados em --type"
+msgid "see 'hg help bundle' for supported values for --type"
+msgstr "veja 'hg help bundle' para valores suportados em --type"
 
 msgid "packed bundles cannot be produced by \"hg bundle\""
 msgstr "packed bundles não podem ser produzidos por \"hg bundle\""
@@ -14010,6 +14038,10 @@
 msgstr "  localização: %s\n"
 
 #, python-format
+msgid "  bundled: %s\n"
+msgstr "  interna: %s\n"
+
+#, python-format
 msgid "  tested with: %s\n"
 msgstr "  testada com: %s\n"
 
@@ -14193,6 +14225,24 @@
 msgstr "verificando biblioteca Python (%s)...\n"
 
 #, python-format
+msgid "checking Python security support (%s)\n"
+msgstr "verificando o suporte de segurança do Python (%s)\n"
+
+msgid ""
+"  TLS 1.2 not supported by Python install; network connections lack modern "
+"security\n"
+msgstr ""
+"  TLS 1.2 não suportado pela instalação do Python; as conexões de rede não "
+"possuem segurança moderna\n"
+
+msgid ""
+"  SNI not supported by Python install; may have connectivity issues with "
+"some servers\n"
+msgstr ""
+"  SNI não suportado pela instalação do Python; podem ocorrer problemas de "
+"conectividade com alguns servidores\n"
+
+#, python-format
 msgid "checking Mercurial version (%s)\n"
 msgstr "verificando a versão do Mercurial (%s)\n"
 
@@ -14260,8 +14310,8 @@
 msgstr "nenhum problema detectado\n"
 
 #, python-format
-msgid "%s problems detected, please check your install!\n"
-msgstr "%s problemas detectados, por favor verifique sua instalação!\n"
+msgid "%d problems detected, please check your install!\n"
+msgstr "%d problemas detectados, por favor verifique sua instalação!\n"
 
 msgid "REPO ID..."
 msgstr "REPO ID..."
@@ -14541,20 +14591,47 @@
 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 "print parsed tree after optimizing (DEPRECATED)"
+msgstr "imprime a árvore de parsing após a otimização (OBSOLETO)"
+
+msgid "print parsed tree at the given stage"
+msgstr "imprime a árvore de parsing no estágio pedido"
+
+msgid "evaluate tree without optimization"
+msgstr "avalia a árvore sem otimização"
+
+msgid "verify optimized result"
+msgstr "verifica o resultado otimizado"
 
 msgid "parse and apply a revision specification"
 msgstr "interpreta e aplica uma especificação de revisões"
 
 msgid ""
-"    Use --verbose to print the parsed tree before and after aliases\n"
-"    expansion.\n"
-"    "
-msgstr ""
-"    Use --verbose para imprimir a árvore decodificada antes e depois\n"
-"    da expansão de apelidos.\n"
-"    "
+"    Use -p/--show-stage option to print the parsed tree at the given stages.\n"
+"    Use -p all to print tree at every stage."
+msgstr ""
+"    Use -p/--show-stage para imprimir a árvore de parsing nos estágios pedidos.\n"
+"    Use -p all para imprimir a árvore em todos os estágios."
+
+msgid ""
+"    Use --verify-optimized to compare the optimized result with the unoptimized\n"
+"    one. Returns 1 if the optimized result differs.\n"
+"    "
+msgstr ""
+"    Use --verify-optimized para comparar o resultado otimizado com o\n"
+"    resultado sem otimização. Retorna 1 se o resultado otimizado for\n"
+"    diferente.\n"
+"    "
+
+msgid "cannot use --verify-optimized with --no-optimized"
+msgstr "não é possível usar --verify-optimized com --no-optimized"
+
+msgid "cannot use --optimize with --show-stage"
+msgstr "não é possível usar --optimize com --show-stage"
+
+#, python-format
+msgid "invalid stage name: %s"
+msgstr "nome de estágio inválido: %s"
 
 msgid "REV1 [REV2]"
 msgstr "REV1 [REV2]"
@@ -14943,29 +15020,25 @@
 msgid "end filenames with NUL, for use with xargs"
 msgstr "termina nomes de arquivo com NUL, para uso com xargs"
 
-msgid "[OPTION]... [PATTERN]..."
-msgstr "[OPÇÃO]... [PADRÃO]..."
-
 msgid "list tracked files"
 msgstr "lista arquivos rastreados"
 
 msgid ""
 "    Print files under Mercurial control in the working directory or\n"
-"    specified revision whose names match the given patterns (excluding\n"
-"    removed files)."
-msgstr ""
-"    Imprime os arquivos sob o controle do Mercurial cujos nomes\n"
-"    correspondam aos padrões fornecidos (excluindo arquivos\n"
-"    removidos), no diretório de trabalho ou nas revisões\n"
-"    especificadas."
-
-msgid ""
-"    If no patterns are given to match, this command prints the names\n"
-"    of all files under Mercurial control in the working directory."
-msgstr ""
-"    Se não forem passados padrões, este comando imprime os nomes\n"
-"    de todos os arquivos sob o controle do Mercurial no diretório\n"
-"    de trabalho."
+"    specified revision for given files (excluding removed files).\n"
+"    Files can be specified as filenames or filesets."
+msgstr ""
+"    Imprime os arquivos sob o controle do Mercurial no diretório\n"
+"    de trabalho ou revisão especificada cujos nomes correspondam\n"
+"    aos padrões fornecidos (excluindo arquivos removidos).\n"
+"    Os arquivos podem ser especificados por nome ou filesets."
+
+msgid ""
+"    If no files are given to match, this command prints the names\n"
+"    of all files under Mercurial control."
+msgstr ""
+"    Se não forem passados arquivos, este comando imprime os nomes\n"
+"    de todos os arquivos sob o controle do Mercurial."
 
 msgid "      - list all files under the current directory::"
 msgstr "      - lista todos os arquivos sob o diretório atual::"
@@ -15259,32 +15332,26 @@
 msgid "[OPTION]... PATTERN [FILE]..."
 msgstr "[OPÇÃO]... PADRÃO [ARQUIVO]..."
 
-msgid "search for a pattern in specified files and revisions"
-msgstr "procura por um padrão nos arquivos e revisões especificados"
-
-msgid "    Search revisions of files for a regular expression."
-msgstr "    Procura em revisões e arquivos por uma expressão regular."
-
-msgid ""
-"    This command behaves differently than Unix grep. It only accepts\n"
-"    Python/Perl regexps. It searches repository history, not the\n"
-"    working directory. It always prints the revision number in which a\n"
-"    match appears."
-msgstr ""
-"    Este comando se comporta de modo diferente do grep do Unix. Ele\n"
-"    aceita apenas expressões regulares Python/Perl. Ele procura no\n"
-"    histórico do repositório, não no diretório de trabalho. Ele\n"
-"    sempre imprime o número da revisão onde um casamento aparece."
-
-msgid ""
-"    By default, grep only prints output for the first revision of a\n"
+msgid "search revision history for a pattern in specified files"
+msgstr ""
+"procura no histórico de revisões por um padrão nos arquivos especificados"
+
+msgid ""
+"    Search revision history for a regular expression in the specified\n"
+"    files or the entire project."
+msgstr ""
+"    Procura no histórico de revisões por uma expressão regular,\n"
+"    nos arquivos pedidos ou no projeto como um todo."
+
+msgid ""
+"    By default, grep prints the most recent revision number for each\n"
 "    file in which it finds a match. To get it to print every revision\n"
-"    that contains a change in match status (\"-\" for a match that\n"
-"    becomes a non-match, or \"+\" for a non-match that becomes a match),\n"
-"    use the --all flag."
-msgstr ""
-"    Por padrão, grep imprime uma saída apenas para a primeira revisão\n"
-"    de um arquivo no qual ele encontra uma correspondência.\n"
+"    that contains a change in match status (\"-\" for a match that becomes\n"
+"    a non-match, or \"+\" for a non-match that becomes a match), use the\n"
+"    --all flag."
+msgstr ""
+"    Por padrão, grep imprime o número da revisão mais recente\n"
+"    de cada arquivo no qual ele encontre uma correspondência.\n"
 "    Para fazê-lo imprimir todas as revisões que contenham uma\n"
 "    mudança de correspondência (\"-\" para uma correspondência\n"
 "    que se torne uma não correspondência, ou \"+\" para uma não\n"
@@ -15292,6 +15359,23 @@
 "    opção --all ."
 
 msgid ""
+"    PATTERN can be any Python (roughly Perl-compatible) regular\n"
+"    expression."
+msgstr ""
+"    PADRÃO pode ser qualquer expressão regular do Python (são\n"
+"    aproximadamente compatíveis com expressões regulares Perl)."
+
+msgid ""
+"    If no FILEs are specified (and -f/--follow isn't set), all files in\n"
+"    the repository are searched, including those that don't exist in the\n"
+"    current branch or have been deleted in a prior changeset."
+msgstr ""
+"    Se nenhum ARQUIVO for especificado (e se -f/--follow não estiver\n"
+"    definido), a busca será realizada em todos os arquivos do repositório,\n"
+"    incluindo arquivos que não existirem no ramo atual ou que tiverem sido\n"
+"    removidos em uma revisão anterior."
+
+msgid ""
 "    Returns 0 if a match is found, 1 otherwise.\n"
 "    "
 msgstr ""
@@ -15911,6 +15995,9 @@
 msgid "print complete paths from the filesystem root"
 msgstr "imprime caminhos completos a partir do raiz do sistema de arquivos"
 
+msgid "[OPTION]... [PATTERN]..."
+msgstr "[OPÇÃO]... [PADRÃO]..."
+
 msgid "locate files matching specific patterns (DEPRECATED)"
 msgstr "localiza arquivos que casem com os padrões especificados (OBSOLETO)"
 
@@ -15932,6 +16019,14 @@
 "    atual e subdiretórios, use \"--include .\"."
 
 msgid ""
+"    If no patterns are given to match, this command prints the names\n"
+"    of all files under Mercurial control in the working directory."
+msgstr ""
+"    Se não forem passados padrões, este comando imprime os nomes\n"
+"    de todos os arquivos sob o controle do Mercurial no diretório\n"
+"    de trabalho."
+
+msgid ""
 "    If you want to feed the output of this command into the \"xargs\"\n"
 "    command, use the -0 option to both this command and \"xargs\". This\n"
 "    will avoid the problem of \"xargs\" treating single filenames that\n"
@@ -16648,8 +16743,8 @@
 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 "see 'hg help config.paths'"
+msgstr "veja 'hg help config.paths'"
 
 #, python-format
 msgid "pushing to %s\n"
@@ -17185,8 +17280,8 @@
 msgid "name to show in web pages (default: working directory)"
 msgstr "nome a ser exibido em páginas web (padrão: diretório de trabalho)"
 
-msgid "name of the hgweb config file (see \"hg help hgweb\")"
-msgstr "nome do arquivo de configuração do hgweb (veja \"hg help hgweb\")"
+msgid "name of the hgweb config file (see 'hg help hgweb')"
+msgstr "nome do arquivo de configuração do hgweb (veja 'hg help hgweb')"
 
 msgid "name of the hgweb config file (DEPRECATED)"
 msgstr "nome do arquivo de configuração do hgweb (OBSOLETO)"
@@ -17555,11 +17650,6 @@
 msgstr "%d marcadores a serem enviados"
 
 #. i18n: column positioning for "hg summary"
-#, python-format
-msgid "remote: %s\n"
-msgstr "remoto:       %s\n"
-
-#. i18n: column positioning for "hg summary"
 msgid "remote: (synced)\n"
 msgstr "remoto:       (sincronizado)\n"
 
@@ -17916,12 +18006,12 @@
 "\n"
 "Extensões habilitadas:"
 
+msgid "external"
+msgstr "externo"
+
 msgid "internal"
 msgstr "interno"
 
-msgid "external"
-msgstr "externo"
-
 #, python-format
 msgid "extension '%s' overrides commands: %s\n"
 msgstr "a extensão '%s' sobrepõe o comando: %s\n"
@@ -18197,13 +18287,13 @@
 msgstr "o conjunto de origem é vazio"
 
 msgid "source set is rooted in multiple branches"
-msgstr "a origem cvs não suporta a especificação de múltiplas revisões"
+msgstr "o conjunto de origem tem raízes em múltiplos ramos"
 
 msgid "rebaseset is rooted in multiple named branches"
-msgstr "não é possível colapsar múltiplos ramos nomeados"
+msgstr "o conjunto de rebaseamento tem raízes em múltiplos ramos nomeados"
 
 msgid "specify an explicit destination with --dest"
-msgstr "você não pode especificar uma revisão com --all"
+msgstr "especifique um destino explícito com --dest"
 
 #, python-format
 msgid "%i other divergent bookmarks for \"%s\"\n"
@@ -18217,9 +18307,9 @@
 
 #, python-format
 msgid ""
-"(committing will reopen the head, use `hg heads .` to see %i other heads)\n"
-msgstr ""
-"(um commit reabrirá a cabeça, use `hg heads .` para ver %i outras cabeças)\n"
+"(committing will reopen the head, use 'hg heads .' to see %i other heads)\n"
+msgstr ""
+"(um commit reabrirá a cabeça, use 'hg heads .' para ver %i outras cabeças)\n"
 
 #, python-format
 msgid "(committing will reopen branch \"%s\")\n"
@@ -18276,9 +18366,9 @@
 msgid "push creates new branch '%s' with multiple heads"
 msgstr "push cria um novo ramo '%s' com múltiplas cabeças"
 
-msgid "merge or see \"hg help push\" for details about pushing new heads"
-msgstr ""
-"use \"hg merge\" ou veja \"hg help push\" para detalhes sobre como enviar "
+msgid "merge or see 'hg help push' for details about pushing new heads"
+msgstr ""
+"faça a mesclagem ou veja 'hg help push' para detalhes sobre como enviar "
 "novas cabeças"
 
 #, python-format
@@ -18293,9 +18383,10 @@
 msgid "push creates new remote head %s!"
 msgstr "push cria uma nova cabeça remota %s!"
 
-msgid "pull and merge or see \"hg help push\" for details about pushing new heads"
-msgstr ""
-"use \"hg pull\" e \"hg merge\" ou veja \"hg help push\" para detalhes sobre "
+msgid ""
+"pull and merge or see 'hg help push' for details about pushing new heads"
+msgstr ""
+"execute um pull e uma mesclagem ou veja 'hg help push' para detalhes sobre "
 "como enviar novas cabeças"
 
 msgid "new remote heads:\n"
@@ -18483,35 +18574,6 @@
 msgid "warning: --repository ignored\n"
 msgstr "aviso: opção --repository ignorada\n"
 
-#, python-format
-msgid "unrecognized profiling format '%s' - Ignored\n"
-msgstr "formato de profiling '%s' não reconhecido - Ignorado\n"
-
-msgid ""
-"lsprof not available - install from "
-"http://codespeak.net/svn/user/arigo/hack/misc/lsprof/"
-msgstr ""
-"lsprof não disponível - instale de "
-"http://codespeak.net/svn/user/arigo/hack/misc/lsprof/"
-
-msgid ""
-"flamegraph not available - install from https://github.com/evanhempel"
-"/python-flamegraph"
-msgstr ""
-"flamegraph indisponível - instale de https://github.com/evanhempel/python-"
-"flamegraph"
-
-msgid "statprof not available - install using \"easy_install statprof\""
-msgstr "statprof não está disponível - instale usando \"easy_install statprof\""
-
-#, python-format
-msgid "invalid sampling frequency '%s' - ignoring\n"
-msgstr "frequência de amostragem '%s' inválida - ignorando\n"
-
-#, python-format
-msgid "unrecognized profiler '%s' - ignored\n"
-msgstr "profiler '%s' não reconhecido - ignorado\n"
-
 msgid "the extension author."
 msgstr "o autor da extensão."
 
@@ -18812,27 +18874,27 @@
 
 #, python-format
 msgid ""
-"local changed %s which remote deleted\n"
+"local%(l)s changed %(fd)s which other%(o)s deleted\n"
 "use (c)hanged version, (d)elete, or leave (u)nresolved?$$ &Changed $$ &Delete $$ &Unresolved"
 msgstr ""
-"local alterou %s, que a remota removeu\n"
+"local%(l)s alterou %(fd)s, que a outra%(o)s removeu\n"
 "use (c) a versão alterada, (d) apague ou (u) deixe não resolvida?$$ (&C) alterada $$ (&D) apague $$ (&U) não resolvida"
 
 #, python-format
 msgid ""
-"remote changed %s which local deleted\n"
+"other%(o)s changed %(fd)s which local%(l)s deleted\n"
 "use (c)hanged version, leave (d)eleted, or leave (u)nresolved?$$ &Changed $$ &Deleted $$ &Unresolved"
 msgstr ""
-"remota mudou %s, apagada pela local\n"
+"a outra%(o)s mudou %(fd)s, apagada pela local%(l)s\n"
 "use (c) a versão alterada, (d) deixe apagada ou (u) deixe não resolvida?$$ (&C) alterada $$ (&D) deixe apagada $$ (&U) deixe não resolvida"
 
 #, python-format
 msgid ""
-"no tool found to merge %s\n"
-"keep (l)ocal, take (o)ther, or leave (u)nresolved?$$ &Local $$ &Other $$ &Unresolved"
-msgstr ""
-"nenhuma ferramenta encontrada para mesclar %s\n"
-"manter o arquivo (l)ocal, usar o (o)utro ou (u) deixar não resolvido? ?$$ &Local $$ &Outro $$ (&U) não resolvido"
+"no tool found to merge %(fd)s\n"
+"keep (l)ocal%(l)s, take (o)ther%(o)s, or leave (u)nresolved?$$ &Local $$ &Other $$ &Unresolved"
+msgstr ""
+"nenhuma ferramenta encontrada para mesclar %(fd)s\n"
+"manter o arquivo (l)ocal%(l)s, usar o (o)utro%(o)s ou (u) deixar não resolvido? ?$$ &Local $$ &Outro $$ (&U) não resolvido"
 
 msgid ""
 "``:local``\n"
@@ -19217,15 +19279,15 @@
 "    O tamanho do arquivo combina com a expressão fornecida. Por exemplo:"
 
 msgid ""
-"    - 1k (files from 1024 to 2047 bytes)\n"
-"    - < 20k (files less than 20480 bytes)\n"
-"    - >= .5MB (files at least 524288 bytes)\n"
-"    - 4k - 1MB (files from 4096 bytes to 1048576 bytes)"
-msgstr ""
-"    - 1k (arquivos com tamanho de 1024 a 2047 bytes)\n"
-"    - < 20k (arquivos com tamanho menor que 20480 bytes)\n"
-"    - >= .5MB (arquivos com pelo menos 524288 bytes)\n"
-"    - 4k - 1MB (arquivos com tamanho entre 4096 bytes e 1048576 bytes)"
+"    - size('1k') - files from 1024 to 2047 bytes\n"
+"    - size('< 20k') - files less than 20480 bytes\n"
+"    - size('>= .5MB') - files at least 524288 bytes\n"
+"    - size('4k - 1MB') - files from 4096 bytes to 1048576 bytes"
+msgstr ""
+"    - size('1k') - arquivos com tamanho de 1024 a 2047 bytes\n"
+"    - size('< 20k') - arquivos com tamanho menor que 20480 bytes\n"
+"    - size('>= .5MB') - arquivos com pelo menos 524288 bytes\n"
+"    - size('4k - 1MB') - arquivos com tamanho entre 4096 bytes e 1048576 bytes"
 
 #. i18n: "size" is a keyword
 msgid "size requires an expression"
@@ -19310,6 +19372,12 @@
 msgid "unknown bisect kind %s"
 msgstr "tipo desconhecido de bisect %s"
 
+msgid "cannot bisect (no known good revisions)"
+msgstr "não é possível fazer o bisect (nenhuma revisão boa conhecida)"
+
+msgid "cannot bisect (no known bad revisions)"
+msgstr "não é possível fazer o bisect (nenhuma revisão ruim conhecida)"
+
 msgid "invalid bisect state"
 msgstr "estado de bissecção inválido"
 
@@ -19341,6 +19409,32 @@
 msgid "bad (implicit)"
 msgstr "ruim (implicitamente)"
 
+msgid "The first good revision is:\n"
+msgstr "A primeira revisão boa é:\n"
+
+msgid "The first bad revision is:\n"
+msgstr "A primeira revisão ruim é:\n"
+
+#, python-format
+msgid ""
+"Not all ancestors of this changeset have been checked.\n"
+"Use bisect --extend to continue the bisection from\n"
+"the common ancestor, %s.\n"
+msgstr ""
+"Nem todos os ancestrais desta revisão foram verificados.\n"
+"Use bisect --extend para continuar a bissecção a partir do\n"
+"ancestral comum, %s.\n"
+
+msgid "Due to skipped revisions, the first good revision could be any of:\n"
+msgstr ""
+"Devido a revisões omitidas, a primeira revisão boa pode ser qualquer uma "
+"entre:\n"
+
+msgid "Due to skipped revisions, the first bad revision could be any of:\n"
+msgstr ""
+"Devido a revisões omitidas, a primeira revisão ruim pode ser qualquer uma "
+"entre:\n"
+
 #. i18n: "(EXPERIMENTAL)" is a keyword, must be translated consistently
 msgid "(EXPERIMENTAL)"
 msgstr "(EXPERIMENTAL)"
@@ -19354,17 +19448,20 @@
 msgid " ([+] can be repeated)"
 msgstr " ([+] pode ser repetido)"
 
-msgid "container for exchange of repository data"
-msgstr "contêiner para troca de dados de repositório"
-
-msgid "representation of revlog data"
-msgstr "representação de dados de revlog"
-
-msgid "repository requirements"
-msgstr "requisitos do repositório"
-
-msgid "revision storage mechanism"
-msgstr "mecanismo de armazenamento de revisões"
+msgid "Bundles"
+msgstr "Bundles"
+
+msgid "Changegroups"
+msgstr "Changegroups"
+
+msgid "Repository Requirements"
+msgstr "Requisitos do Repositório"
+
+msgid "Revision Logs"
+msgstr "Logs de Revisão"
+
+msgid "Wire Protocol"
+msgstr "Protocolo de Comunicação"
 
 msgid "Configuration Files"
 msgstr "Arquivos de Configuração"
@@ -19451,8 +19548,8 @@
 msgstr "apelido para: hg %s"
 
 #, python-format
-msgid "(use \"hg help -e %s\" to show help for the %s extension)"
-msgstr "(use \"hg help -e %s\" para mostrar a ajuda para a extensão %s)"
+msgid "(use 'hg help -e %s' to show help for the %s extension)"
+msgstr "(use 'hg help -e %s' para mostrar a ajuda para a extensão %s)"
 
 msgid "options"
 msgstr "opções"
@@ -19463,10 +19560,10 @@
 #, python-format
 msgid ""
 "\n"
-"(use \"hg %s -h\" to show more help)\n"
-msgstr ""
-"\n"
-"(use \"hg %s -h\" para mostrar mais ajuda)\n"
+"(use 'hg %s -h' to show more help)\n"
+msgstr ""
+"\n"
+"(use 'hg %s -h' para mostrar mais ajuda)\n"
 
 msgid ""
 "\n"
@@ -19496,41 +19593,41 @@
 
 msgid ""
 "\n"
-"(use \"hg help\" for the full list of commands)\n"
-msgstr ""
-"\n"
-"(use \"hg help\" para a lista completa de comandos)\n"
-
-msgid ""
-"\n"
-"(use \"hg help\" for the full list of commands or \"hg -v\" for details)\n"
-msgstr ""
-"\n"
-"(use \"hg help\" para a lista completa de comandos ou \"hg -v\" para detalhes)\n"
-
-#, python-format
-msgid ""
-"\n"
-"(use \"hg help %s\" to show the full help text)\n"
-msgstr ""
-"\n"
-"(use \"hg help %s\" para mostrar o texto completo de ajuda)\n"
-
-#, python-format
-msgid ""
-"\n"
-"(use \"hg help -v -e %s\" to show built-in aliases and global options)\n"
-msgstr ""
-"\n"
-"(use \"hg help -v -e %s\" para mostrar apelidos pré-definidos de comandos e opções globais)\n"
-
-#, python-format
-msgid ""
-"\n"
-"(use \"hg help -v%s\" to show built-in aliases and global options)\n"
-msgstr ""
-"\n"
-"(use \"hg help -v%s\" para mostrar apelidos pré-definidos de comandos e opções globais)\n"
+"(use 'hg help' for the full list of commands)\n"
+msgstr ""
+"\n"
+"(use 'hg help' para a lista completa de comandos)\n"
+
+msgid ""
+"\n"
+"(use 'hg help' for the full list of commands or 'hg -v' for details)\n"
+msgstr ""
+"\n"
+"(use 'hg help' para a lista completa de comandos ou 'hg -v' para detalhes)\n"
+
+#, python-format
+msgid ""
+"\n"
+"(use 'hg help %s' to show the full help text)\n"
+msgstr ""
+"\n"
+"(use 'hg help %s' para mostrar o texto completo de ajuda)\n"
+
+#, python-format
+msgid ""
+"\n"
+"(use 'hg help -v -e %s' to show built-in aliases and global options)\n"
+msgstr ""
+"\n"
+"(use 'hg help -v -e %s' para mostrar apelidos pré-definidos de comandos e opções globais)\n"
+
+#, python-format
+msgid ""
+"\n"
+"(use 'hg help -v%s' to show built-in aliases and global options)\n"
+msgstr ""
+"\n"
+"(use 'hg help -v%s' para mostrar apelidos pré-definidos de comandos e opções globais)\n"
 
 msgid "(some details hidden, use --verbose to show complete help)"
 msgstr ""
@@ -19540,10 +19637,10 @@
 #, python-format
 msgid ""
 "\n"
-"use \"hg help -c %s\" to see help for the %s command\n"
-msgstr ""
-"\n"
-"use \"hg help -c %s\" para mostrar a ajuda do comando %s\n"
+"use 'hg help -c %s' to see help for the %s command\n"
+msgstr ""
+"\n"
+"use 'hg help -c %s' para mostrar a ajuda do comando %s\n"
 
 msgid "no help text available"
 msgstr "texto de ajuda não disponível"
@@ -19552,10 +19649,9 @@
 msgid "%s extension - %s"
 msgstr "extensão %s - %s"
 
-msgid "(use \"hg help extensions\" for information on enabling extensions)\n"
-msgstr ""
-"(use \"hg help extensions\" para informações sobre como habilitar "
-"extensões)\n"
+msgid "(use 'hg help extensions' for information on enabling extensions)\n"
+msgstr ""
+"(use 'hg help extensions' para informações sobre como habilitar extensões)\n"
 
 #, python-format
 msgid "'%s' is provided by the following extension:"
@@ -19570,16 +19666,16 @@
 msgid "no matches"
 msgstr "nenhuma correspondência encontrada"
 
-msgid "try \"hg help\" for a list of topics"
-msgstr "use \"hg help\" para uma lista de tópicos"
+msgid "try 'hg help' for a list of topics"
+msgstr "use 'hg help' para uma lista de tópicos"
 
 #, python-format
 msgid "no such help topic: %s"
 msgstr "não há tal tópico de ajuda: %s"
 
 #, python-format
-msgid "try \"hg help --keyword %s\""
-msgstr "tente \"hg help --keyword %s\""
+msgid "try 'hg help --keyword %s'"
+msgstr "tente 'hg help --keyword %s'"
 
 msgid "Mercurial Distributed SCM\n"
 msgstr "Sistema de controle de versão distribuído Mercurial\n"
@@ -19766,7 +19862,7 @@
 msgstr "  No Windows 9x, ``%HOME%`` é substituída por ``%APPDATA%``."
 
 msgid "  On Plan9, the following files are consulted:"
-msgstr "  Em Plan9, os seguintes arquvos são consultados:"
+msgstr "  Em Plan9, os seguintes arquivos são consultados:"
 
 msgid ""
 "  - ``<repo>/.hg/hgrc`` (per-repository)\n"
@@ -20704,7 +20800,7 @@
 "  [encode]\n"
 "  # descompacta arquivos gzip no commit para melhorar a\n"
 "  # compressão em delta\n"
-"  # obs: não é necessariamente uma boa ideia, este é apenas\n"
+"  # obs.: não é necessariamente uma boa ideia, este é apenas\n"
 "  # um exemplo\n"
 "  *.gz = pipe: gunzip"
 
@@ -21335,7 +21431,7 @@
 "  O conteúdo da linha de comando é passado em ``$HG_ARGS``.\n"
 "  Argumentos de linha de comando decodificados\n"
 "  são passados em ``$HG_PATS`` e ``$HG_OPTS``; estas contém representações\n"
-"  em string dos dados python passados internamente para o <comando>.\n"
+"  em string dos dados passados internamente para o <comando>.\n"
 "  Em ``$HG_OPTS`` é passado um dicionário de opções (com opções não\n"
 "  especificadas definidas para seus valores padrão). ``$HG_PATS`` é uma\n"
 "  lista de argumentos.\n"
@@ -22600,6 +22696,18 @@
 "O profiling é feito usando lsprof."
 
 msgid ""
+"``enabled``\n"
+"    Enable the profiler.\n"
+"    (default: false)"
+msgstr ""
+"``enabled``\n"
+"    Habilita o profiler.\n"
+"    (padrão: false)"
+
+msgid "    This is equivalent to passing ``--profile`` on the command line."
+msgstr "    Isto equivale a passar ``--profile`` na linha de comando."
+
+msgid ""
 "``type``\n"
 "    The type of profiler to use.\n"
 "    (default: ls)"
@@ -22984,6 +23092,39 @@
 "    bastante CPU."
 
 msgid ""
+"``zliblevel``\n"
+"    Integer between ``-1`` and ``9`` that controls the zlib compression level\n"
+"    for wire protocol commands that send zlib compressed output (notably the\n"
+"    commands that send repository history data)."
+msgstr ""
+"``zliblevel``\n"
+"    Inteiro entre ``-1`` e ``9`` que controla o nível de compressão\n"
+"    da zlib para comandos do protocolo de comunicação que enviam\n"
+"    saída comprimida pela zlib (notavelmente os comandos que enviam\n"
+"    dados de histórico do repositório)."
+
+msgid ""
+"    The default (``-1``) uses the default zlib compression level, which is\n"
+"    likely equivalent to ``6``. ``0`` means no compression. ``9`` means\n"
+"    maximum compression."
+msgstr ""
+"    O padrão (``-1``) usa o nível de compressão padrão da zlib, que\n"
+"    provavelmente é equivalente a ``6``. ``0`` indica sem compressão,\n"
+"    e ``9`` indica compressão máxima."
+
+msgid ""
+"    Setting this option allows server operators to make trade-offs between\n"
+"    bandwidth and CPU used. Lowering the compression lowers CPU utilization\n"
+"    but sends more bytes to clients."
+msgstr ""
+"    Definir esta opção permite que operadores de servidores ajustem entre\n"
+"    banda de rede e CPU usadas. Diminuir a compressão diminui o uso de CPU\n"
+"    mas envia uma maior quantidade de bytes para os clientes."
+
+msgid "    This option only impacts the HTTP server."
+msgstr "    Esta opção afeta apenas o servidor HTTP."
+
+msgid ""
 "``smtp``\n"
 "--------"
 msgstr ""
@@ -26119,7 +26260,7 @@
 "allow shorter paths with:\n"
 "command=\"cd path/to/my/repositories && hg-ssh repo1 subdir/repo2\""
 msgstr ""
-"Se os repositórios forem sub-diretórios de um diretírio comum, você pode\n"
+"Se os repositórios forem sub-diretórios de um diretório comum, você pode\n"
 "permitir caminhos mais curtos com:\n"
 "command=\"cd caminho/para/repositórios && hg-ssh repo1 subdir/repo2\""
 
@@ -27637,6 +27778,13 @@
 "entre aspas simples ou duplas."
 
 msgid ""
+"Prefix\n"
+"======"
+msgstr ""
+"Prefixos\n"
+"========"
+
+msgid ""
 "``not x``\n"
 "  Changesets not in x. Short form is ``! x``."
 msgstr ""
@@ -27644,6 +27792,13 @@
 "  Revisões que não estejam em x. A forma curta é ``! x``."
 
 msgid ""
+"Infix\n"
+"====="
+msgstr ""
+"Infixos\n"
+"======="
+
+msgid ""
 "``x::y``\n"
 "  A DAG range, meaning all changesets that are descendants of x and\n"
 "  ancestors of y, including x and y themselves. If the first endpoint\n"
@@ -27723,6 +27878,49 @@
 "``x~n``\n"
 "  O n-ésimo primeiro ancestral de x; ``x~0`` é x; ``x~3`` é ``x^^^``."
 
+msgid ""
+"``x ## y``\n"
+"  Concatenate strings and identifiers into one string."
+msgstr ""
+"``x ## y``\n"
+"  Concatena strings e identificadores formando outra string."
+
+msgid ""
+"  All other prefix, infix and postfix operators have lower priority than\n"
+"  ``##``. For example, ``a1 ## a2~2`` is equivalent to ``(a1 ## a2)~2``."
+msgstr ""
+"  Todos os outros operadores prefixos, infixos e posfixos têm menor\n"
+"  prioridade que ``##``. Por exemplo, ``a1 ## a2~2`` é equivalente\n"
+"  a ``(a1 ## a2)~2``."
+
+msgid "  For example::"
+msgstr "  Por exemplo::"
+
+msgid ""
+"    [revsetalias]\n"
+"    issue(a1) = grep(r'\\bissue[ :]?' ## a1 ## r'\\b|\\bbug\\(' ## a1 ## r'\\)')"
+msgstr ""
+"    [revsetalias]\n"
+"    issue(a1) = grep(r'\\bissue[ :]?' ## a1 ## r'\\b|\\bbug\\(' ## a1 ## r'\\)')"
+
+msgid ""
+"    ``issue(1234)`` is equivalent to\n"
+"    ``grep(r'\\bissue[ :]?1234\\b|\\bbug\\(1234\\)')``\n"
+"    in this case. This matches against all of \"issue 1234\", \"issue:1234\",\n"
+"    \"issue1234\" and \"bug(1234)\"."
+msgstr ""
+"    ``issue(1234)`` é equivalente a\n"
+"    ``grep(r'\\bissue[ :]?1234\\b|\\bbug\\(1234\\)')``\n"
+"    nesse caso. Essa expressão corresponde a \"issue 1234\", \"issue:1234\",\n"
+"    \"issue1234\" e \"bug(1234)\"."
+
+msgid ""
+"Postfix\n"
+"======="
+msgstr ""
+"Posfixos\n"
+"========"
+
 msgid "There is a single postfix operator:"
 msgstr "Há um único operador posfixo:"
 
@@ -27734,11 +27932,18 @@
 "  Equivalente a ``x^1``, o primeiro pai de cada revisão em x."
 
 msgid ""
-"\n"
-"The following predicates are supported:"
-msgstr ""
-"\n"
-"Os seguintes predicados são suportados:"
+"Predicates\n"
+"=========="
+msgstr ""
+"Predicados\n"
+"=========="
+
+msgid ""
+"Aliases\n"
+"======="
+msgstr ""
+"Apelidos\n"
+"========"
 
 msgid ""
 "New predicates (known as \"aliases\") can be defined, using any combination of\n"
@@ -27782,35 +27987,11 @@
 "exatamente equivalente a ``reverse(sort(0:tip, author))``."
 
 msgid ""
-"An infix operator ``##`` can concatenate strings and identifiers into\n"
-"one string. For example::"
-msgstr ""
-"Um operador infixo ``##`` pode concatenar strings e identificadores\n"
-"para formar outra string. Por exemplo::"
-
-msgid ""
-"  [revsetalias]\n"
-"  issue(a1) = grep(r'\\bissue[ :]?' ## a1 ## r'\\b|\\bbug\\(' ## a1 ## r'\\)')"
-msgstr ""
-"  [revsetalias]\n"
-"  issue(a1) = grep(r'\\bissue[ :]?' ## a1 ## r'\\b|\\bbug\\(' ## a1 ## r'\\)')"
-
-msgid ""
-"``issue(1234)`` is equivalent to ``grep(r'\\bissue[ :]?1234\\b|\\bbug\\(1234\\)')``\n"
-"in this case. This matches against all of \"issue 1234\", \"issue:1234\",\n"
-"\"issue1234\" and \"bug(1234)\"."
-msgstr ""
-"``issue(1234)`` é equivalente a ``grep(r'\\bissue[ :]?1234\\b|\\bbug\\(1234\\)')``\n"
-"nesse caso. Essa expressão corresponde a \"issue 1234\", \"issue:1234\",\n"
-"\"issue1234\" e \"bug(1234)\"."
-
-msgid ""
-"All other prefix, infix and postfix operators have lower priority than\n"
-"``##``. For example, ``a1 ## a2~2`` is equivalent to ``(a1 ## a2)~2``."
-msgstr ""
-"Todos os outros operadores prefixos, infixos e posfixos têm menor\n"
-"prioridade que ``##``. Por exemplo, ``a1 ## a2~2`` é equivalente\n"
-"a ``(a1 ## a2)~2``."
+"Equivalents\n"
+"==========="
+msgstr ""
+"Equivalentes\n"
+"============"
 
 msgid "Command line equivalents for :hg:`log`::"
 msgstr "Opções de linha de comando equivalentes para :hg:`log`::"
@@ -27834,6 +28015,13 @@
 "  -P x  ->  !::x\n"
 "  -l x  ->  limit(expr, x)"
 
+msgid ""
+"Examples\n"
+"========"
+msgstr ""
+"Exemplos\n"
+"========"
+
 msgid "- Changesets on the default branch::"
 msgstr "- Revisões no ramo default::"
 
@@ -28319,7 +28507,7 @@
 msgstr "     caminho/aninhado = https://exemplo.com/aninhado/repo/caminho"
 
 msgid "   Git and Subversion subrepos are also supported::"
-msgstr "   Subrepositórios do Git e do Subversion também são suportados::"
+msgstr "   Sub-repositórios do Git e do Subversion também são suportados::"
 
 msgid ""
 "     path/to/nested = [git]git://example.com/nested/repo/path\n"
@@ -28764,6 +28952,25 @@
 msgid ".. functionsmarker"
 msgstr ".. functionsmarker"
 
+msgid "We provide a limited set of infix arithmetic operations on integers::"
+msgstr ""
+"Fornecemos um conjunto limitado de operações aritméticas infixas sobre "
+"inteiros::"
+
+msgid ""
+"  + for addition\n"
+"  - for subtraction\n"
+"  * for multiplication\n"
+"  / for floor division (division rounded to integer nearest -infinity)"
+msgstr ""
+"  + para adição\n"
+"  - para subtração\n"
+"  * para multiplicação\n"
+"  / para divisão arredondada \"para baixo\" (para o inteiro mais próximo de -infinito)"
+
+msgid "Division fulfils the law x = x / y + mod(x, y)."
+msgstr "A divisão obedece a regra x = x / y + mod(x, y)."
+
 msgid ""
 "Also, for any expression that returns a list, there is a list operator::"
 msgstr ""
@@ -28850,6 +29057,13 @@
 msgid "   $ hg log -r 0 --template \"files: {join(files, ', ')}\\n\""
 msgstr "   $ hg log -r 0 --template \"files: {join(files, ', ')}\\n\""
 
+msgid "- Join the list of files ending with \".py\" with a \", \"::"
+msgstr "- Juntar com \", \" a lista de arquivos terminados em \".py\"::"
+
+msgid "   $ hg log -r 0 --template \"pythonfiles: {join(files('**.py'), ', ')}\\n\""
+msgstr ""
+"   $ hg log -r 0 --template \"pythonfiles: {join(files('**.py'), ', ')}\\n\""
+
 msgid "- Separate non-empty arguments by a \" \"::"
 msgstr "- Separar argumentos não vazios com \" \"::"
 
@@ -29965,6 +30179,10 @@
 msgstr "o diretório de trabalho está agora baseado na revisão %d\n"
 
 #, python-format
+msgid "waiting for lock on %s held by process %r on host %r\n"
+msgstr "esperando pelo bloqueio em %s feito pelo processo %r no host %r\n"
+
+#, python-format
 msgid "repository %s"
 msgstr "repositório %s"
 
@@ -30005,8 +30223,8 @@
 msgid "cannot commit merge with missing files"
 msgstr "não se pode consolidar uma mesclagem com arquivos ausentes"
 
-msgid "unresolved merge conflicts (see \"hg help resolve\")"
-msgstr "conflitos de mesclagem não resolvidos (veja \"hg help resolve\")"
+msgid "unresolved merge conflicts (see 'hg help resolve')"
+msgstr "conflitos de mesclagem não resolvidos (veja 'hg help resolve')"
 
 msgid "driver-resolved merge conflicts"
 msgstr "conflitos de mesclagem gerenciados por driver"
@@ -30136,8 +30354,12 @@
 msgstr "reverta a mudança de driver de mesclagem ou aborte a mesclagem"
 
 #, python-format
-msgid "warning: cannot merge flags for %s\n"
-msgstr "aviso: não é possível mesclar flags para %s\n"
+msgid ""
+"warning: cannot merge flags for %s without common ancestor - keeping local "
+"flags\n"
+msgstr ""
+"aviso: não é possível mesclar flags para %s sem um ancestral comum - "
+"mantendo as flags locais\n"
 
 #, python-format
 msgid "%s.%s not valid ('%s' is none of %s)"
@@ -30215,6 +30437,14 @@
 msgstr "update falhou ao remover %s: %s!\n"
 
 #, python-format
+msgid ""
+"current directory was removed\n"
+"(consider changing to repo root: %s)\n"
+msgstr ""
+"o diretório atual foi removido\n"
+"(considere mudar para o raiz do repositório: %s)\n"
+
+#, python-format
 msgid "getting %s\n"
 msgstr "obtendo %s\n"
 
@@ -30243,19 +30473,19 @@
 
 #, python-format
 msgid ""
-"local changed %s which remote deleted\n"
+"local%(l)s changed %(f)s which other%(o)s deleted\n"
 "use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
 msgstr ""
-"local alterou %s, que a remota removeu\n"
+"local%(l)s alterou %(f)s, que a outra%(o)s 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"
+"other%(o)s changed %(f)s which local%(l)s 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"
+"a outra%(o)s mudou %(f)s, apagado pela local%(l)s\n"
+"use (c) a versão alterada, ou (d) deixe apagado?$$ (&C) alterada $$ (&D) deixe apagado"
 
 #, python-format
 msgid "note: possible conflict - %s was renamed multiple times to:\n"
@@ -30435,6 +30665,9 @@
 msgid "unable to find '%s' for patching\n"
 msgstr "incapaz de localizar '%s' para modificação\n"
 
+msgid "(use '--prefix' to apply patch relative to the current directory)\n"
+msgstr "(use '--prefix' para aplicar o patch relativo ao diretório atual)\n"
+
 #, python-format
 msgid "patching file %s\n"
 msgstr "modificando arquivo %s\n"
@@ -30580,6 +30813,10 @@
 msgstr "delta opcode 0 inesperado"
 
 #, python-format
+msgid "source file '%s' does not exist"
+msgstr "o arquivo fonte '%s' não existe"
+
+#, python-format
 msgid "cannot create %s: destination already exists"
 msgstr "impossível criar %s: destino já existe"
 
@@ -30652,6 +30889,35 @@
 msgid "killed by signal %d"
 msgstr "morto pelo sinal %d"
 
+#, python-format
+msgid "unrecognized profiling format '%s' - Ignored\n"
+msgstr "formato de profiling '%s' não reconhecido - Ignorado\n"
+
+msgid ""
+"lsprof not available - install from "
+"http://codespeak.net/svn/user/arigo/hack/misc/lsprof/"
+msgstr ""
+"lsprof não disponível - instale de "
+"http://codespeak.net/svn/user/arigo/hack/misc/lsprof/"
+
+msgid ""
+"flamegraph not available - install from https://github.com/evanhempel"
+"/python-flamegraph"
+msgstr ""
+"flamegraph indisponível - instale de https://github.com/evanhempel/python-"
+"flamegraph"
+
+msgid "statprof not available - install using \"easy_install statprof\""
+msgstr "statprof não está disponível - instale usando \"easy_install statprof\""
+
+#, python-format
+msgid "invalid sampling frequency '%s' - ignoring\n"
+msgstr "frequência de amostragem '%s' inválida - ignorando\n"
+
+#, python-format
+msgid "unrecognized profiler '%s' - ignored\n"
+msgstr "profiler '%s' não reconhecido - ignorado\n"
+
 #. i18n: format XX seconds as "XXs"
 #, python-format
 msgid "%02ds"
@@ -30705,12 +30971,18 @@
 msgstr "erro ao remover %s: %s\n"
 
 #, python-format
-msgid "strip failed, full bundle stored in '%s'\n"
-msgstr "strip falhou, bundle completo armazenado em '%s'\n"
-
-#, python-format
-msgid "strip failed, partial bundle stored in '%s'\n"
-msgstr "strip falhou, bundle parcial armazenado em '%s'\n"
+msgid "strip failed, backup bundle stored in '%s'\n"
+msgstr "strip falhou, bundle de backup armazenado em '%s'\n"
+
+#, python-format
+msgid "strip failed, unrecovered changes stored in '%s'\n"
+msgstr "strip falhou, mudanças não recuperadas armazenadas em '%s'\n"
+
+#, python-format
+msgid "(fix the problem, then recover the changesets with \"hg unbundle '%s'\")\n"
+msgstr ""
+"(corrija o problema, e então recupere as revisões com \"hg unbundle "
+"'%s'\")\n"
 
 msgid "(not rebuilding fncache because repository does not support fncache)\n"
 msgstr "(fncache não reparado porque o repositório não suporta fncache)\n"
@@ -30885,7 +31157,7 @@
 "    - ``pruned``             : revs goods, bads ou skipped\n"
 "    - ``untested``           : revs que ainda não foram testadas\n"
 "    - ``ignored``            : revs ignoradas pela topologia do DAG\n"
-"    - ``current``            : a revisão sendo biseccionada no momento"
+"    - ``current``            : a revisão sendo bissecionada no momento"
 
 #. i18n: "bisect" is a keyword
 msgid "bisect requires a string"
@@ -31160,24 +31432,28 @@
 "    Um apelido para limit()."
 
 #, python-format
-msgid "%s takes no arguments or a pattern"
-msgstr "%s requer um padrão ou nenhum argumento"
+msgid "%s takes no arguments or a pattern and an optional revset"
+msgstr "%s requer nenhum argumento ou um padrão e um revset opcional"
 
 #, python-format
 msgid "%s expected a pattern"
 msgstr "%s espera um padrão"
 
-msgid ""
-"``follow([pattern])``\n"
+#, python-format
+msgid "%s expected one starting revision"
+msgstr "%s espera uma revisão inicial"
+
+msgid ""
+"``follow([pattern[, startrev]])``\n"
 "    An alias for ``::.`` (ancestors of the working directory's first parent).\n"
 "    If pattern is specified, the histories of files matching given\n"
-"    pattern is followed, including copies."
-msgstr ""
-"``follow([padrão])``\n"
+"    pattern in the revision given by startrev are followed, including copies."
+msgstr ""
+"``follow([padrão[, revinicial]])``\n"
 "    Um apelido para ``::.`` (ancestrais do primeiro pai do diretório\n"
 "    de trabalho).\n"
 "    Se um padrão for especificado, o histórico dos arquivos correspondentes\n"
-"    serão seguido, incluindo cópias."
+"    ao padrão na revisão dada por revinicial serão seguidos, incluindo cópias."
 
 msgid ""
 "``all()``\n"
@@ -31850,6 +32126,10 @@
 msgid "can only have 1 active background file closer"
 msgstr "só pode haver um fechador de arquivos ativo em segundo plano"
 
+#, python-format
+msgid "implementation error: mode %s is not valid for checkambig=True"
+msgstr "erro de implementação: o modo %s não é válido para checkambig=True"
+
 msgid ""
 "backgroundclose can only be used when a backgroundclosing context manager is"
 " active"
@@ -32318,6 +32598,38 @@
 
 #, python-format
 msgid ""
+" subrepository sources for %(s)s differ\n"
+"use (l)ocal%(l)s source (%(lo)s) or (r)emote%(o)s source (%(ro)s)?$$ &Local $$ &Remote"
+msgstr ""
+" as origens do sub-repositório %(s)s diferem\n"
+"usar origem (l)ocal%(l)s (%(lo)s) ou (r)emota%(o)s (%(ro)s)?$$ &Local $$ &Remota"
+
+#, python-format
+msgid ""
+" subrepository %(s)s diverged (local revision: %(sl)s, remote revision: %(sr)s)\n"
+"(M)erge, keep (l)ocal%(l)s or keep (r)emote%(o)s?$$ &Merge $$ &Local $$ &Remote"
+msgstr ""
+" o sub-repositório %(s)s divergiu (revisão local: %(sl)s, remota: %(sr)s)\n"
+"(M)esclar, manter (l)ocal%(l)s ou usar (r)emota%(o)s?$$ &Mesclar $$ &Local $$ &Remota"
+
+#, python-format
+msgid ""
+" local%(l)s changed subrepository %(s)s which remote%(o)s removed\n"
+"use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
+msgstr ""
+" local%(l)s mudou o sub-repositório %(s)s, que a remota%(o)s removeu\n"
+"use (c) a versão alterada, ou (d) apague?$$ (&C) alterada $$ (&D) apague"
+
+#, python-format
+msgid ""
+" remote%(o)s changed subrepository %(s)s which local%(l)s removed\n"
+"use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
+msgstr ""
+" remota%(o)s mudou o sub-repositório %(s)s apagado pela local%(l)s\n"
+"use (c) a versão alterada ou (d) apague?$$ (&C) alterada $$ (&D) apague"
+
+#, python-format
+msgid ""
 " subrepository sources for %s differ\n"
 "use (l)ocal source (%s) or (r)emote source (%s)?$$ &Local $$ &Remote"
 msgstr ""
@@ -32326,30 +32638,6 @@
 
 #, python-format
 msgid ""
-" subrepository %s diverged (local revision: %s, remote revision: %s)\n"
-"(M)erge, keep (l)ocal or keep (r)emote?$$ &Merge $$ &Local $$ &Remote"
-msgstr ""
-" o sub-repositório %s divergiu (revisão local: %s, remota: %s)\n"
-"(M)esclar, manter (l)ocal o usar (r)emota?$$ &Mesclar $$ &Local $$ &Remota"
-
-#, python-format
-msgid ""
-" local changed subrepository %s which remote removed\n"
-"use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
-msgstr ""
-" local mudou sub-repositório %s, que a remota removeu\n"
-"use (c) a versão alterada, ou (d) apague?$$ (&C) alterada $$ (&D) apague"
-
-#, python-format
-msgid ""
-" remote changed subrepository %s which local removed\n"
-"use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
-msgstr ""
-" remota mudou sub-repositório %s apagado pela local\n"
-"use (c) a versão alterada ou (d) apague?$$ (&C) alterada $$ (&D) apague"
-
-#, python-format
-msgid ""
 " subrepository sources for %s differ (in checked out version)\n"
 "use (l)ocal source (%s) or (r)emote source (%s)?$$ &Local $$ &Remote"
 msgstr ""
@@ -32529,7 +32817,7 @@
 "as seguintes %d etiquetas estão em conflito: %s\n"
 
 msgid ".hgtags merged successfully\n"
-msgstr ".hgtags mesclado com successo\n"
+msgstr ".hgtags mesclado com sucesso\n"
 
 msgid ""
 ":addbreaks: Any text. Add an XHTML \"<br />\" tag before the end of\n"
@@ -32968,8 +33256,8 @@
 msgid ":tags: List of strings. Any tags associated with the changeset."
 msgstr ":tags: Lista de strings. Quaisquer etiquetas associadas à revisão."
 
-msgid "integer literal without digits"
-msgstr "inteiro literal sem dígitos"
+msgid ":termwidth: Integer. The width of the current terminal."
+msgstr ":termwidth: Inteiro. A largura do terminal atual."
 
 msgid "unterminated template expansion"
 msgstr "expansão de modelo não terminada"
@@ -33005,6 +33293,15 @@
 msgid "%r is not iterable"
 msgstr "%r não é iterável"
 
+msgid "negation needs an integer argument"
+msgstr "a negação precisa de um argumento inteiro"
+
+msgid "arithmetic only defined on integers"
+msgstr "a aritmética está definida apenas para inteiros"
+
+msgid "division by zero is not defined"
+msgstr "a divisão por zero não é definida"
+
 #, python-format
 msgid "filter %s expects one argument"
 msgstr "o filtro %s espera um argumento"
@@ -33041,11 +33338,22 @@
 msgstr "diff espera zero, um ou dois argumentos"
 
 msgid ""
+":files(pattern): All files of the current changeset matching the pattern. See\n"
+"    :hg:`help patterns`."
+msgstr ""
+":files(padrão): Todos os arquivos da revisão atual que correspondam ao\n"
+"    padrão. Veja :hg:`help patterns`."
+
+#. i18n: "files" is a keyword
+msgid "files expects one argument"
+msgstr "files espera um argumento"
+
+msgid ""
 ":fill(text[, width[, initialident[, hangindent]]]): Fill many\n"
 "    paragraphs with optional indentation. See the \"fill\" filter."
 msgstr ""
-":fill(texto[, largura[, identaçãoinicial[, identação]]]): Preenche\n"
-"    diversos parágrafos com identação opcional. Veja o filtro\n"
+":fill(texto[, largura[, indentaçãoinicial[, indentação]]]): Preenche\n"
+"    diversos parágrafos com indentação opcional. Veja o filtro\n"
 "    \"fill\"."
 
 #. i18n: "fill" is a keyword
@@ -33057,10 +33365,10 @@
 msgstr "fill espera um número inteiro"
 
 msgid ""
-":pad(text, width[, fillchar=' '[, right=False]]): Pad text with a\n"
+":pad(text, width[, fillchar=' '[, left=False]]): Pad text with a\n"
 "    fill character."
 msgstr ""
-":pad(texto, largura[, preenchimento=' '[, direita=False]]): Envolve\n"
+":pad(texto, largura[, preenchimento=' '[, esquerda=False]]): Envolve\n"
 "    o texto com um caractere de preenchimento."
 
 #. i18n: "pad" is a keyword
@@ -33114,11 +33422,11 @@
 msgstr "if espera dois ou três argumentos"
 
 msgid ""
-":ifcontains(search, thing, then[, else]): Conditionally execute based\n"
-"    on whether the item \"search\" is in \"thing\"."
-msgstr ""
-":ifcontains(busca, coisa, então[, senão]): Executa se o item\n"
-"    \"busca\" estiver em \"coisa\"."
+":ifcontains(needle, haystack, then[, else]): Conditionally execute based\n"
+"    on whether the item \"needle\" is in \"haystack\"."
+msgstr ""
+":ifcontains(agulha, palheiro, então[, senão]): Executa se o item\n"
+"    \"agulha\" estiver em \"palheiro\"."
 
 #. i18n: "ifcontains" is a keyword
 msgid "ifcontains expects three or four arguments"
@@ -33186,6 +33494,24 @@
 msgid "localdate expects a timezone"
 msgstr "localdate espera um fuso horário"
 
+msgid ":mod(a, b): Calculate a mod b such that a / b + a mod b == a"
+msgstr ":mod(a, b): Calcula a módulo b, tal que a / b + a módulo b == a"
+
+#. i18n: "mod" is a keyword
+msgid "mod expects two arguments"
+msgstr "mod espera dois argumentos"
+
+msgid ""
+":relpath(path): Convert a repository-absolute path into a filesystem path relative to\n"
+"    the current working directory."
+msgstr ""
+":relpath(path): Converte um caminho absoluto do repositório em um caminho\n"
+"    do sistema de arquivos relativo ao diretório atual."
+
+#. i18n: "relpath" is a keyword
+msgid "relpath expects one argument"
+msgstr "relpath espera um argumento"
+
 msgid ""
 ":revset(query[, formatargs...]): Execute a revision set query. See\n"
 "    :hg:`help revset`."
@@ -33527,8 +33853,8 @@
 msgstr "especificação de dia inválida: %s"
 
 #, python-format
-msgid "%s must be nonnegative (see \"hg help dates\")"
-msgstr "%s não pode ser negativo (veja \"hg help dates\")"
+msgid "%s must be nonnegative (see 'hg help dates')"
+msgstr "%s não pode ser negativo (veja 'hg help dates')"
 
 #, python-format
 msgid "invalid regular expression: %s"
@@ -33836,16 +34162,63 @@
 msgid "number of cpus must be an integer"
 msgstr "o número de cpus deve ser um inteiro"
 
+#~ msgid "see \"hg help phases\" for details"
+#~ msgstr "veja \"hg help phases\" para mais detalhes"
+
+#~ msgid "unknown constraint \"%s\""
+#~ msgstr "restrição desconhecida \"%s\""
+
+#~ msgid ""
+#~ "    Use --verbose to print the parsed tree before and after aliases\n"
+#~ "    expansion.\n"
+#~ "    "
+#~ msgstr ""
+#~ "    Use --verbose para imprimir a árvore decodificada antes e depois\n"
+#~ "    da expansão de apelidos.\n"
+#~ "    "
+
+#~ msgid "see the \"path\" section in \"hg help config\""
+#~ msgstr "veja a seção \"path\" em \"hg help config\""
+
+#~ msgid "container for exchange of repository data"
+#~ msgstr "contêiner para troca de dados de repositório"
+
+#~ msgid "representation of revlog data"
+#~ msgstr "representação de dados de revlog"
+
+#~ msgid "revision storage mechanism"
+#~ msgstr "mecanismo de armazenamento de revisões"
+
+#~ msgid ""
+#~ "\n"
+#~ "The following predicates are supported:"
+#~ msgstr ""
+#~ "\n"
+#~ "Os seguintes predicados são suportados:"
+
+#~ msgid "strip failed, partial bundle stored in '%s'\n"
+#~ msgstr "strip falhou, bundle parcial armazenado em '%s'\n"
+
+#~ msgid "integer literal without digits"
+#~ msgstr "inteiro literal sem dígitos"
+
+#~ msgid "    Search revisions of files for a regular expression."
+#~ msgstr "    Procura em revisões e arquivos por uma expressão regular."
+
+#~ msgid ""
+#~ "    This command behaves differently than Unix grep. It only accepts\n"
+#~ "    Python/Perl regexps. It searches repository history, not the\n"
+#~ "    working directory. It always prints the revision number in which a\n"
+#~ "    match appears."
+#~ msgstr ""
+#~ "    Este comando se comporta de modo diferente do grep do Unix. Ele\n"
+#~ "    aceita apenas expressões regulares Python/Perl. Ele procura no\n"
+#~ "    histórico do repositório, não no diretório de trabalho. Ele\n"
+#~ "    sempre imprime o número da revisão onde um casamento aparece."
+
 #~ msgid "use %(path)s to diff repository (or selected files)"
 #~ msgstr "usa %(path)s para exibir diffs do repositório ou arquivos"
 
-#~ msgid ""
-#~ "    Show differences between revisions for the specified files, using\n"
-#~ "    the %(path)s program."
-#~ msgstr ""
-#~ "    Mostra diferenças entre revisões para os arquivos especificados,\n"
-#~ "    usando o programa %(path)s."
-
 #~ msgid "%s: %s\n"
 #~ msgstr "%s: %s\n"
 
@@ -34579,14 +34952,6 @@
 #~ "    Isto é útil para escrever utilitários de conversão de repositórios, mas\n"
 #~ "    deve ser usado com cuidado."
 
-#~ msgid ""
-#~ "    If no patterns are given to match, this command prints the names\n"
-#~ "    of all files under Mercurial control in the working copy."
-#~ msgstr ""
-#~ "    Se não forem passados padrões, este comando imprime os nomes\n"
-#~ "    de todos os arquivos sob o controle do Mercurial na cópia de\n"
-#~ "    trabalho."
-
 #~ msgid "- date(date[, fmt])"
 #~ msgstr "- date(data[, formato])"
 
@@ -34641,9 +35006,6 @@
 #~ msgid "%s\n"
 #~ msgstr "%s\n"
 
-#~ msgid "see hg help phases for details"
-#~ msgstr "veja hg help phases para mais detalhes"
-
 #~ msgid ""
 #~ "  # add new command called vdiff, runs kdiff3\n"
 #~ "  vdiff = kdiff3"
--- a/mercurial/bundlerepo.py	Sun Oct 16 13:35:23 2016 -0700
+++ b/mercurial/bundlerepo.py	Tue Nov 01 15:40:21 2016 -0400
@@ -343,8 +343,7 @@
         self.manstart = self.bundle.tell()
         return c
 
-    @localrepo.unfilteredpropertycache
-    def manifest(self):
+    def _constructmanifest(self):
         self.bundle.seek(self.manstart)
         # consume the header if it exists
         self.bundle.manifestheader()
--- a/mercurial/commands.py	Sun Oct 16 13:35:23 2016 -0700
+++ b/mercurial/commands.py	Tue Nov 01 15:40:21 2016 -0400
@@ -68,6 +68,7 @@
     setdiscovery,
     simplemerge,
     sshserver,
+    sslutil,
     streamclone,
     templatekw,
     templater,
@@ -1519,7 +1520,7 @@
 
       - clone a remote repository to a new directory named hg/::
 
-          hg clone http://selenic.com/hg
+          hg clone https://www.mercurial-scm.org/repo/hg/
 
       - create a lightweight local clone::
 
@@ -1540,7 +1541,7 @@
 
       - clone (and track) a particular named branch::
 
-          hg clone http://selenic.com/hg#stable
+          hg clone https://www.mercurial-scm.org/repo/hg/#stable
 
     See :hg:`help urls` for details on specifying URLs.
 
@@ -2703,6 +2704,25 @@
     fm.write('pythonlib', _("checking Python lib (%s)...\n"),
              os.path.dirname(os.__file__))
 
+    security = set(sslutil.supportedprotocols)
+    if sslutil.hassni:
+        security.add('sni')
+
+    fm.write('pythonsecurity', _("checking Python security support (%s)\n"),
+             fm.formatlist(sorted(security), name='protocol',
+                           fmt='%s', sep=','))
+
+    # These are warnings, not errors. So don't increment problem count. This
+    # may change in the future.
+    if 'tls1.2' not in security:
+        fm.plain(_('  TLS 1.2 not supported by Python install; '
+                   'network connections lack modern security\n'))
+    if 'sni' not in security:
+        fm.plain(_('  SNI not supported by Python install; may have '
+                   'connectivity issues with some servers\n'))
+
+    # TODO print CA cert info
+
     # hg version
     hgver = util.version()
     fm.write('hgver', _("checking Mercurial version (%s)\n"),
@@ -4720,7 +4740,7 @@
 
       - check the most recent revision of a remote repository::
 
-          hg id -r tip http://selenic.com/hg/
+          hg id -r tip https://www.mercurial-scm.org/repo/hg/
 
     See :hg:`log` for generating more information about specific revisions,
     including full hash identifiers.
@@ -4923,7 +4943,7 @@
 
       - import a changeset from an hgweb server::
 
-          hg import http://www.selenic.com/hg/rev/5ca8c111e9aa
+          hg import https://www.mercurial-scm.org/repo/hg/rev/5ca8c111e9aa
 
       - import all the patches in an Unix-style mbox::
 
@@ -7057,7 +7077,8 @@
                 raise error.Abort(_('uncommitted merge'))
             bheads = repo.branchheads()
             if not opts.get('force') and bheads and p1 not in bheads:
-                raise error.Abort(_('not at a branch head (use -f to force)'))
+                raise error.Abort(_('working directory is not at a branch head '
+                                    '(use -f to force)'))
         r = scmutil.revsingle(repo, rev_).node()
 
         if not message:
--- a/mercurial/copies.py	Sun Oct 16 13:35:23 2016 -0700
+++ b/mercurial/copies.py	Tue Nov 01 15:40:21 2016 -0400
@@ -631,6 +631,10 @@
     backwards = not remotebase and base != tca and f in mb
     getfctx = _makegetfctx(ctx)
 
+    if m1[f] == mb.get(f) and not remotebase:
+        # Nothing to merge
+        return
+
     of = None
     seen = set([f])
     for oc in getfctx(f, m1[f]).ancestors():
--- a/mercurial/dirstate.py	Sun Oct 16 13:35:23 2016 -0700
+++ b/mercurial/dirstate.py	Tue Nov 01 15:40:21 2016 -0400
@@ -757,6 +757,7 @@
                     start = int(clock) - (int(clock) % delaywrite)
                     end = start + delaywrite
                     time.sleep(end - clock)
+                    now = end # trust our estimate that the end is near now
                     break
 
         st.write(parsers.pack_dirstate(self._map, self._copymap, self._pl, now))
--- a/mercurial/help/hg-ssh.8.txt	Sun Oct 16 13:35:23 2016 -0700
+++ b/mercurial/help/hg-ssh.8.txt	Tue Nov 01 15:40:21 2016 -0400
@@ -58,9 +58,9 @@
 """""""""
 Main Web Site: https://mercurial-scm.org/
 
-Source code repository: http://selenic.com/hg
+Source code repository: https://www.mercurial-scm.org/repo/hg
 
-Mailing list: http://selenic.com/mailman/listinfo/mercurial
+Mailing list: https://www.mercurial-scm.org/mailman/listinfo/mercurial/
 
 Copying
 """""""
--- a/mercurial/help/hg.1.txt	Sun Oct 16 13:35:23 2016 -0700
+++ b/mercurial/help/hg.1.txt	Tue Nov 01 15:40:21 2016 -0400
@@ -106,9 +106,9 @@
 """""""""
 Main Web Site: https://mercurial-scm.org/
 
-Source code repository: http://selenic.com/hg
+Source code repository: https://www.mercurial-scm.org/repo/hg
 
-Mailing list: http://selenic.com/mailman/listinfo/mercurial
+Mailing list: https://www.mercurial-scm.org/mailman/listinfo/mercurial/
 
 Copying
 """""""
--- a/mercurial/httppeer.py	Sun Oct 16 13:35:23 2016 -0700
+++ b/mercurial/httppeer.py	Tue Nov 01 15:40:21 2016 -0400
@@ -63,8 +63,9 @@
         self.requestbuilder = urlreq.request
 
     def __del__(self):
-        if self.urlopener:
-            for h in self.urlopener.handlers:
+        urlopener = getattr(self, 'urlopener', None)
+        if urlopener:
+            for h in urlopener.handlers:
                 h.close()
                 getattr(h, "close_all", lambda : None)()
 
--- a/mercurial/localrepo.py	Sun Oct 16 13:35:23 2016 -0700
+++ b/mercurial/localrepo.py	Tue Nov 01 15:40:21 2016 -0400
@@ -504,11 +504,17 @@
                 c.readpending('00changelog.i.a')
         return c
 
-    @storecache('00manifest.i')
+    @property
     def manifest(self):
+        return self.manifestlog._oldmanifest
+
+    def _constructmanifest(self):
+        # This is a temporary function while we migrate from manifest to
+        # manifestlog. It allows bundlerepo and unionrepo to intercept the
+        # manifest creation.
         return manifest.manifest(self.svfs)
 
-    @property
+    @storecache('00manifest.i')
     def manifestlog(self):
         return manifest.manifestlog(self.svfs, self)
 
--- a/mercurial/manifest.py	Sun Oct 16 13:35:23 2016 -0700
+++ b/mercurial/manifest.py	Tue Nov 01 15:40:21 2016 -0400
@@ -1254,13 +1254,12 @@
             usetreemanifest = opts.get('treemanifest', usetreemanifest)
         self._treeinmem = usetreemanifest
 
+        self._oldmanifest = repo._constructmanifest()
+        self._revlog = self._oldmanifest
+
         # We'll separate this into it's own cache once oldmanifest is no longer
         # used
-        self._mancache = repo.manifest._mancache
-
-    @property
-    def _revlog(self):
-        return self._repo.manifest
+        self._mancache = self._oldmanifest._mancache
 
     def __getitem__(self, node):
         """Retrieves the manifest instance for the given node. Throws a KeyError
@@ -1275,9 +1274,9 @@
                 return cachemf
 
         if self._treeinmem:
-            m = treemanifestctx(self._revlog, '', node)
+            m = treemanifestctx(self._repo, '', node)
         else:
-            m = manifestctx(self._revlog, node)
+            m = manifestctx(self._repo, node)
         if node != revlog.nullid:
             self._mancache[node] = m
         return m
@@ -1289,8 +1288,8 @@
     """A class representing a single revision of a manifest, including its
     contents, its parent revs, and its linkrev.
     """
-    def __init__(self, revlog, node):
-        self._revlog = revlog
+    def __init__(self, repo, node):
+        self._repo = repo
         self._data = None
 
         self._node = node
@@ -1310,14 +1309,15 @@
             if self._node == revlog.nullid:
                 self._data = manifestdict()
             else:
-                text = self._revlog.revision(self._node)
+                rl = self._repo.manifestlog._revlog
+                text = rl.revision(self._node)
                 arraytext = array.array('c', text)
-                self._revlog._fulltextcache[self._node] = arraytext
+                rl._fulltextcache[self._node] = arraytext
                 self._data = manifestdict(text)
         return self._data
 
     def readfast(self):
-        rl = self._revlog
+        rl = self._repo.manifestlog._revlog
         r = rl.rev(self._node)
         deltaparent = rl.deltaparent(r)
         if deltaparent != revlog.nullrev and deltaparent in rl.parentrevs(r):
@@ -1325,11 +1325,11 @@
         return self.read()
 
     def readdelta(self):
-        revlog = self._revlog
+        revlog = self._repo.manifestlog._revlog
         if revlog._usemanifestv2:
             # Need to perform a slow delta
             r0 = revlog.deltaparent(revlog.rev(self._node))
-            m0 = manifestctx(revlog, revlog.node(r0)).read()
+            m0 = manifestctx(self._repo, revlog.node(r0)).read()
             m1 = self.read()
             md = manifestdict()
             for f, ((n0, fl0), (n1, fl1)) in m0.diff(m1).iteritems():
@@ -1344,9 +1344,8 @@
         return manifestdict(d)
 
 class treemanifestctx(object):
-    def __init__(self, revlog, dir, node):
-        revlog = revlog.dirlog(dir)
-        self._revlog = revlog
+    def __init__(self, repo, dir, node):
+        self._repo = repo
         self._dir = dir
         self._data = None
 
@@ -1359,23 +1358,27 @@
         #rev = revlog.rev(node)
         #self.linkrev = revlog.linkrev(rev)
 
+    def _revlog(self):
+        return self._repo.manifestlog._revlog.dirlog(self._dir)
+
     def read(self):
         if not self._data:
+            rl = self._revlog()
             if self._node == revlog.nullid:
                 self._data = treemanifest()
-            elif self._revlog._treeondisk:
+            elif rl._treeondisk:
                 m = treemanifest(dir=self._dir)
                 def gettext():
-                    return self._revlog.revision(self._node)
+                    return rl.revision(self._node)
                 def readsubtree(dir, subm):
-                    return treemanifestctx(self._revlog, dir, subm).read()
+                    return treemanifestctx(self._repo, dir, subm).read()
                 m.read(gettext, readsubtree)
                 m.setnode(self._node)
                 self._data = m
             else:
-                text = self._revlog.revision(self._node)
+                text = revlog.revision(self._node)
                 arraytext = array.array('c', text)
-                self._revlog.fulltextcache[self._node] = arraytext
+                rl.fulltextcache[self._node] = arraytext
                 self._data = treemanifest(dir=self._dir, text=text)
 
         return self._data
@@ -1385,9 +1388,9 @@
 
     def readdelta(self):
         # Need to perform a slow delta
-        revlog = self._revlog
+        revlog = self._revlog()
         r0 = revlog.deltaparent(revlog.rev(self._node))
-        m0 = treemanifestctx(revlog, self._dir, revlog.node(r0)).read()
+        m0 = treemanifestctx(self._repo, self._dir, revlog.node(r0)).read()
         m1 = self.read()
         md = treemanifest(dir=self._dir)
         for f, ((n0, fl0), (n1, fl1)) in m0.diff(m1).iteritems():
@@ -1398,7 +1401,7 @@
         return md
 
     def readfast(self):
-        rl = self._revlog
+        rl = self._revlog()
         r = rl.rev(self._node)
         deltaparent = rl.deltaparent(r)
         if deltaparent != revlog.nullrev and deltaparent in rl.parentrevs(r):
--- a/mercurial/revset.py	Sun Oct 16 13:35:23 2016 -0700
+++ b/mercurial/revset.py	Tue Nov 01 15:40:21 2016 -0400
@@ -2924,23 +2924,29 @@
         """True if the set will iterate in topographical order"""
         raise NotImplementedError()
 
-    @util.cachefunc
     def min(self):
         """return the minimum element in the set"""
-        if self.fastasc is not None:
-            for r in self.fastasc():
-                return r
-            raise ValueError('arg is an empty sequence')
-        return min(self)
-
-    @util.cachefunc
+        if self.fastasc is None:
+            v = min(self)
+        else:
+            for v in self.fastasc():
+                break
+            else:
+                raise ValueError('arg is an empty sequence')
+        self.min = lambda: v
+        return v
+
     def max(self):
         """return the maximum element in the set"""
-        if self.fastdesc is not None:
-            for r in self.fastdesc():
-                return r
-            raise ValueError('arg is an empty sequence')
-        return max(self)
+        if self.fastdesc is None:
+            return max(self)
+        else:
+            for v in self.fastdesc():
+                break
+            else:
+                raise ValueError('arg is an empty sequence')
+        self.max = lambda: v
+        return v
 
     def first(self):
         """return the first element in the set (user iteration perspective)
--- a/mercurial/sslutil.py	Sun Oct 16 13:35:23 2016 -0700
+++ b/mercurial/sslutil.py	Tue Nov 01 15:40:21 2016 -0400
@@ -690,14 +690,15 @@
     We don't print a message when the Python is able to load default
     CA certs because this scenario is detected at socket connect time.
     """
-    # The "certifi" Python package provides certificates. If it is installed,
-    # assume the user intends it to be used and use it.
+    # The "certifi" Python package provides certificates. If it is installed
+    # and usable, assume the user intends it to be used and use it.
     try:
         import certifi
         certs = certifi.where()
-        ui.debug('using ca certificates from certifi\n')
-        return certs
-    except ImportError:
+        if os.path.exists(certs):
+            ui.debug('using ca certificates from certifi\n')
+            return certs
+    except (ImportError, AttributeError):
         pass
 
     # On Windows, only the modern ssl module is capable of loading the system
--- a/mercurial/statichttprepo.py	Sun Oct 16 13:35:23 2016 -0700
+++ b/mercurial/statichttprepo.py	Tue Nov 01 15:40:21 2016 -0400
@@ -155,7 +155,7 @@
         self._filecache = {}
         self.requirements = requirements
 
-        self.manifest = manifest.manifest(self.svfs)
+        self.manifestlog = manifest.manifestlog(self.svfs, self)
         self.changelog = changelog.changelog(self.svfs)
         self._tags = None
         self.nodetagscache = None
--- a/mercurial/templater.py	Sun Oct 16 13:35:23 2016 -0700
+++ b/mercurial/templater.py	Tue Nov 01 15:40:21 2016 -0400
@@ -837,16 +837,14 @@
                                 # i18n: "shortest" is a keyword
                                 _("shortest() expects an integer minlength"))
 
-    cl = mapping['ctx']._repo.changelog
+    # _partialmatch() of filtered changelog could take O(len(repo)) time,
+    # which would be unacceptably slow. so we look for hash collision in
+    # unfiltered space, which means some hashes may be slightly longer.
+    cl = mapping['ctx']._repo.unfiltered().changelog
     def isvalid(test):
         try:
-            try:
-                cl.index.partialmatch(test)
-            except AttributeError:
-                # Pure mercurial doesn't support partialmatch on the index.
-                # Fallback to the slow way.
-                if cl._partialmatch(test) is None:
-                    return False
+            if cl._partialmatch(test) is None:
+                return False
 
             try:
                 i = int(test)
--- a/mercurial/unionrepo.py	Sun Oct 16 13:35:23 2016 -0700
+++ b/mercurial/unionrepo.py	Tue Nov 01 15:40:21 2016 -0400
@@ -208,8 +208,7 @@
         node = self.repo2.changelog.node(rev2)
         return self.changelog.rev(node)
 
-    @localrepo.unfilteredpropertycache
-    def manifest(self):
+    def _constructmanifest(self):
         return unionmanifest(self.svfs, self.repo2.svfs,
                              self.unfiltered()._clrev)
 
--- a/tests/hghave.py	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/hghave.py	Tue Nov 01 15:40:21 2016 -0400
@@ -346,6 +346,26 @@
     finally:
         os.unlink(fn)
 
+@check("rmcwd", "can remove current working directory")
+def has_rmcwd():
+    ocwd = os.getcwd()
+    temp = tempfile.mkdtemp(dir='.', prefix=tempprefix)
+    try:
+        os.chdir(temp)
+        # On Linux, 'rmdir .' isn't allowed, but the other names are okay.
+        # On Solaris and Windows, the cwd can't be removed by any names.
+        os.rmdir(os.getcwd())
+        return True
+    except OSError:
+        return False
+    finally:
+        os.chdir(ocwd)
+        # clean up temp dir on platforms where cwd can't be removed
+        try:
+            os.rmdir(temp)
+        except OSError:
+            pass
+
 @check("tla", "GNU Arch tla client")
 def has_tla():
     return matchoutput('tla --version 2>&1', br'The GNU Arch Revision')
--- a/tests/test-bundle.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-bundle.t	Tue Nov 01 15:40:21 2016 -0400
@@ -216,8 +216,10 @@
 
 Pull ../full.hg into empty (with hook)
 
-  $ echo "[hooks]" >> .hg/hgrc
-  $ echo "changegroup = printenv.py changegroup" >> .hg/hgrc
+  $ cat >> .hg/hgrc <<EOF
+  > [hooks]
+  > changegroup = sh -c "printenv.py changegroup"
+  > EOF
 
 doesn't work (yet ?)
 
@@ -230,7 +232,7 @@
   adding manifests
   adding file changes
   added 9 changesets with 7 changes to 4 files (+1 heads)
-  changegroup hook: HG_NODE=f9ee2f85a263049e9ae6d37a0e67e96194ffb735 HG_NODE_LAST=aa35859c02ea8bd48da5da68cd2740ac71afcbaf HG_SOURCE=pull HG_TXNID=TXN:* HG_URL=bundle:../full.hg (glob)
+  changegroup hook: HG_NODE=f9ee2f85a263049e9ae6d37a0e67e96194ffb735 HG_NODE_LAST=aa35859c02ea8bd48da5da68cd2740ac71afcbaf HG_SOURCE=pull HG_TXNID=TXN:* HG_URL=bundle?../full.hg (glob)
   (run 'hg heads' to see heads, 'hg merge' to merge)
 
 Rollback empty
--- a/tests/test-casefolding.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-casefolding.t	Tue Nov 01 15:40:21 2016 -0400
@@ -51,7 +51,8 @@
   $ echo b > D/b
   $ hg ci -Am addb D/b
   $ hg mv D/b d/b
-  D/b: not overwriting - file exists
+  D/b: not overwriting - file already committed
+  (hg rename --force to replace the file by recording a rename)
   $ hg mv D/b d/c
   $ hg st
   A D/c
--- a/tests/test-command-template.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-command-template.t	Tue Nov 01 15:40:21 2016 -0400
@@ -31,10 +31,10 @@
 
 Test arithmetic operators have the right precedence:
 
-  $ hg log -l 1 -T '{date(date, "%s") + 5 * 10} {date(date, "%s") - 2 * 3}\n'
-  1500051 1499995
-  $ hg log -l 1 -T '{date(date, "%s") * 5 + 10} {date(date, "%s") * 3 - 2}\n'
-  7500015 4500001
+  $ hg log -l 1 -T '{date(date, "%Y") + 5 * 10} {date(date, "%Y") - 2 * 3}\n'
+  2020 1964
+  $ hg log -l 1 -T '{date(date, "%Y") * 5 + 10} {date(date, "%Y") * 3 - 2}\n'
+  9860 5908
 
 Test division:
 
@@ -3413,8 +3413,77 @@
   hg: parse error: shortest() expects an integer minlength
   [255]
 
+  $ cd ..
+
+Test shortest(node) with the repo having short hash collision:
+
+  $ hg init hashcollision
+  $ cd hashcollision
+  $ cat <<EOF >> .hg/hgrc
+  > [experimental]
+  > evolution = createmarkers
+  > EOF
+  $ echo 0 > a
+  $ hg ci -qAm 0
+  $ for i in 17 129 248 242 480 580 617 1057 2857 4025; do
+  >   hg up -q 0
+  >   echo $i > a
+  >   hg ci -qm $i
+  > done
+  $ hg up -q null
+  $ hg log -r0: -T '{rev}:{node}\n'
+  0:b4e73ffab476aa0ee32ed81ca51e07169844bc6a
+  1:11424df6dc1dd4ea255eae2b58eaca7831973bbc
+  2:11407b3f1b9c3e76a79c1ec5373924df096f0499
+  3:11dd92fe0f39dfdaacdaa5f3997edc533875cfc4
+  4:10776689e627b465361ad5c296a20a487e153ca4
+  5:a00be79088084cb3aff086ab799f8790e01a976b
+  6:a0b0acd79b4498d0052993d35a6a748dd51d13e6
+  7:a0457b3450b8e1b778f1163b31a435802987fe5d
+  8:c56256a09cd28e5764f32e8e2810d0f01e2e357a
+  9:c5623987d205cd6d9d8389bfc40fff9dbb670b48
+  10:c562ddd9c94164376c20b86b0b4991636a3bf84f
+  $ hg debugobsolete a00be79088084cb3aff086ab799f8790e01a976b
+  $ hg debugobsolete c5623987d205cd6d9d8389bfc40fff9dbb670b48
+  $ hg debugobsolete c562ddd9c94164376c20b86b0b4991636a3bf84f
+
+ nodes starting with '11' (we don't have the revision number '11' though)
+
+  $ hg log -r 1:3 -T '{rev}:{shortest(node, 0)}\n'
+  1:1142
+  2:1140
+  3:11d
+
+ '5:a00' is hidden, but still we have two nodes starting with 'a0'
+
+  $ hg log -r 6:7 -T '{rev}:{shortest(node, 0)}\n'
+  6:a0b
+  7:a04
+
+ node '10' conflicts with the revision number '10' even if it is hidden
+ (we could exclude hidden revision numbers, but currently we don't)
+
+  $ hg log -r 4 -T '{rev}:{shortest(node, 0)}\n'
+  4:107
+  $ hg log -r 4 -T '{rev}:{shortest(node, 0)}\n' --hidden
+  4:107
+
+ node 'c562' should be unique if the other 'c562' nodes are hidden
+ (but we don't try the slow path to filter out hidden nodes for now)
+
+  $ hg log -r 8 -T '{rev}:{node|shortest}\n'
+  8:c5625
+  $ hg log -r 8:10 -T '{rev}:{node|shortest}\n' --hidden
+  8:c5625
+  9:c5623
+  10:c562d
+
+  $ cd ..
+
 Test pad function
 
+  $ cd r
+
   $ hg log --template '{pad(rev, 20)} {author|user}\n'
   2                    test
   1                    {node|short}
--- a/tests/test-commit-amend.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-commit-amend.t	Tue Nov 01 15:40:21 2016 -0400
@@ -1156,6 +1156,8 @@
      rev    offset  length  delta linkrev nodeid       p1           p2
        0         0      88     -1       3 34a4d536c0c0 000000000000 000000000000
 
+#if execbit
+
 Test if amend preserves executable bit changes
   $ chmod +x newdirname/commonfile.py
   $ hg ci -m chmod
@@ -1174,3 +1176,4 @@
   old mode 100644
   new mode 100755
   
+#endif
--- a/tests/test-commit-interactive-curses.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-commit-interactive-curses.t	Tue Nov 01 15:40:21 2016 -0400
@@ -1,3 +1,5 @@
+#require tic
+
 Set up a repo
 
   $ cp $HGRCPATH $HGRCPATH.pretest
--- a/tests/test-graft.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-graft.t	Tue Nov 01 15:40:21 2016 -0400
@@ -181,9 +181,6 @@
     searching for copies back to rev 1
     unmatched files in other (from topological common ancestor):
      c
-    all copies found (* = to merge, ! = divergent, % = renamed and deleted):
-     src: 'c' -> dst: 'b' *
-    checking for directory renames
   resolving manifests
    branchmerge: True, force: True, partial: False
    ancestor: 4c60f11aa304, local: 6b9e5368ca4e+, remote: 97f8bfe72746
@@ -200,9 +197,6 @@
     searching for copies back to rev 1
     unmatched files in other (from topological common ancestor):
      c
-    all copies found (* = to merge, ! = divergent, % = renamed and deleted):
-     src: 'c' -> dst: 'b' *
-    checking for directory renames
   resolving manifests
    branchmerge: True, force: True, partial: False
    ancestor: 4c60f11aa304, local: 1905859650ec+, remote: 9c233e8e184d
@@ -1280,3 +1274,15 @@
   
   $ hg cat f2c
   c2e
+
+Check superfluous filemerge of files renamed in the past but untouched by graft
+
+  $ echo a > a
+  $ hg ci -qAma
+  $ hg mv a b
+  $ echo b > b
+  $ hg ci -qAmb
+  $ echo c > c
+  $ hg ci -qAmc
+  $ hg up -q .~2
+  $ hg graft tip -qt:fail
--- a/tests/test-hook.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-hook.t	Tue Nov 01 15:40:21 2016 -0400
@@ -16,9 +16,9 @@
   > precommit = sh -c  "HG_LOCAL= HG_NODE= HG_TAG= printenv.py precommit"
   > pretxncommit = sh -c "HG_LOCAL= HG_TAG= printenv.py pretxncommit"
   > pretxncommit.tip = hg -q tip
-  > pre-identify = printenv.py pre-identify 1
-  > pre-cat = printenv.py pre-cat
-  > post-cat = printenv.py post-cat
+  > pre-identify = sh -c "printenv.py pre-identify 1"
+  > pre-cat = sh -c "printenv.py pre-cat"
+  > post-cat = sh -c "printenv.py post-cat"
   > pretxnopen = sh -c "HG_LOCAL= HG_TAG= printenv.py pretxnopen"
   > pretxnclose = sh -c "HG_LOCAL= HG_TAG= printenv.py pretxnclose"
   > txnclose = sh -c "HG_LOCAL= HG_TAG= printenv.py txnclose"
@@ -47,9 +47,9 @@
 
   $ cat > .hg/hgrc <<EOF
   > [hooks]
-  > prechangegroup = printenv.py prechangegroup
-  > changegroup = printenv.py changegroup
-  > incoming = printenv.py incoming
+  > prechangegroup = sh -c "printenv.py prechangegroup"
+  > changegroup = sh -c "printenv.py changegroup"
+  > incoming = sh -c "printenv.py incoming"
   > EOF
 
 pretxncommit and commit hooks can see both parents of merge
@@ -122,7 +122,7 @@
 
   $ cd ../a
   $ cat >> .hg/hgrc <<EOF
-  > pretag = printenv.py pretag
+  > pretag = sh -c "printenv.py pretag"
   > tag = sh -c "HG_PARENT1= HG_PARENT2= printenv.py tag"
   > EOF
   $ hg tag -d '3 0' a
@@ -142,7 +142,9 @@
 
 pretag hook can forbid tagging
 
-  $ echo "pretag.forbid = printenv.py pretag.forbid 1" >> .hg/hgrc
+  $ cat >> .hg/hgrc <<EOF
+  > pretag.forbid = sh -c "printenv.py pretag.forbid 1"
+  > EOF
   $ hg tag -d '4 0' fa
   pretag hook: HG_LOCAL=0 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fa
   pretag.forbid hook: HG_LOCAL=0 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fa
@@ -157,8 +159,10 @@
 pretxncommit hook can see changeset, can roll back txn, changeset no
 more there after
 
-  $ echo "pretxncommit.forbid0 = hg tip -q" >> .hg/hgrc
-  $ echo "pretxncommit.forbid1 = printenv.py pretxncommit.forbid 1" >> .hg/hgrc
+  $ cat >> .hg/hgrc <<EOF
+  > pretxncommit.forbid0 = sh -c "hg tip -q"
+  > pretxncommit.forbid1 = sh -c "printenv.py pretxncommit.forbid 1"
+  > EOF
   $ echo z > z
   $ hg add z
   $ hg -q tip
@@ -196,7 +200,9 @@
 
 precommit hook can prevent commit
 
-  $ echo "precommit.forbid = printenv.py precommit.forbid 1" >> .hg/hgrc
+  $ cat >> .hg/hgrc <<EOF
+  > precommit.forbid = sh -c "printenv.py precommit.forbid 1"
+  > EOF
   $ hg commit -m 'fail' -d '4 0'
   precommit hook: HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
   precommit.forbid hook: HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
@@ -207,14 +213,18 @@
 
 preupdate hook can prevent update
 
-  $ echo "preupdate = printenv.py preupdate" >> .hg/hgrc
+  $ cat >> .hg/hgrc <<EOF
+  > preupdate = sh -c "printenv.py preupdate"
+  > EOF
   $ hg update 1
   preupdate hook: HG_PARENT1=ab228980c14d
   0 files updated, 0 files merged, 2 files removed, 0 files unresolved
 
 update hook
 
-  $ echo "update = printenv.py update" >> .hg/hgrc
+  $ cat >> .hg/hgrc <<EOF
+  > update = sh -c "printenv.py update"
+  > EOF
   $ hg update
   preupdate hook: HG_PARENT1=539e4b31b6dc
   update hook: HG_ERROR=0 HG_PARENT1=539e4b31b6dc
@@ -222,7 +232,9 @@
 
 pushkey hook
 
-  $ echo "pushkey = printenv.py pushkey" >> .hg/hgrc
+  $ cat >> .hg/hgrc <<EOF
+  > pushkey = sh -c "printenv.py pushkey"
+  > EOF
   $ cd ../b
   $ hg bookmark -r null foo
   $ hg push -B foo ../a
@@ -239,7 +251,9 @@
 
 listkeys hook
 
-  $ echo "listkeys = printenv.py listkeys" >> .hg/hgrc
+  $ cat >> .hg/hgrc <<EOF
+  > listkeys = sh -c "printenv.py listkeys"
+  > EOF
   $ hg bookmark -r null bar
   pretxnopen hook: HG_TXNID=TXN:* HG_TXNNAME=bookmark (glob)
   pretxnclose hook: HG_BOOKMARK_MOVED=1 HG_PENDING=$TESTTMP/a HG_TXNID=TXN:* HG_TXNNAME=bookmark (glob)
@@ -255,7 +269,9 @@
 
 test that prepushkey can prevent incoming keys
 
-  $ echo "prepushkey = printenv.py prepushkey.forbid 1" >> .hg/hgrc
+  $ cat >> .hg/hgrc <<EOF
+  > prepushkey = sh -c "printenv.py prepushkey.forbid 1"
+  > EOF
   $ cd ../b
   $ hg bookmark -r null baz
   $ hg push -B baz ../a
@@ -273,7 +289,9 @@
 
 test that prelistkeys can prevent listing keys
 
-  $ echo "prelistkeys = printenv.py prelistkeys.forbid 1" >> .hg/hgrc
+  $ cat >> .hg/hgrc <<EOF
+  > prelistkeys = sh -c "printenv.py prelistkeys.forbid 1"
+  > EOF
   $ hg bookmark -r null quux
   pretxnopen hook: HG_TXNID=TXN:* HG_TXNNAME=bookmark (glob)
   pretxnclose hook: HG_BOOKMARK_MOVED=1 HG_PENDING=$TESTTMP/a HG_TXNID=TXN:* HG_TXNNAME=bookmark (glob)
@@ -294,7 +312,7 @@
   3:07f3376c1e65
   $ cat > .hg/hgrc <<EOF
   > [hooks]
-  > prechangegroup.forbid = printenv.py prechangegroup.forbid 1
+  > prechangegroup.forbid = sh -c "printenv.py prechangegroup.forbid 1"
   > EOF
   $ hg pull ../a
   pulling from ../a
@@ -309,7 +327,7 @@
   $ cat > .hg/hgrc <<EOF
   > [hooks]
   > pretxnchangegroup.forbid0 = hg tip -q
-  > pretxnchangegroup.forbid1 = printenv.py pretxnchangegroup.forbid 1
+  > pretxnchangegroup.forbid1 = sh -c "printenv.py pretxnchangegroup.forbid 1"
   > EOF
   $ hg pull ../a
   pulling from ../a
@@ -332,8 +350,8 @@
   $ rm .hg/hgrc
   $ cat > ../a/.hg/hgrc <<EOF
   > [hooks]
-  > preoutgoing = printenv.py preoutgoing
-  > outgoing = printenv.py outgoing
+  > preoutgoing = sh -c "printenv.py preoutgoing"
+  > outgoing = sh -c "printenv.py outgoing"
   > EOF
   $ hg pull ../a
   pulling from ../a
@@ -351,7 +369,9 @@
 
 preoutgoing hook can prevent outgoing changes
 
-  $ echo "preoutgoing.forbid = printenv.py preoutgoing.forbid 1" >> ../a/.hg/hgrc
+  $ cat >> ../a/.hg/hgrc <<EOF
+  > preoutgoing.forbid = sh -c "printenv.py preoutgoing.forbid 1"
+  > EOF
   $ hg pull ../a
   pulling from ../a
   searching for changes
@@ -365,8 +385,8 @@
   $ cd ..
   $ cat > a/.hg/hgrc <<EOF
   > [hooks]
-  > preoutgoing = printenv.py preoutgoing
-  > outgoing = printenv.py outgoing
+  > preoutgoing = sh -c "printenv.py preoutgoing"
+  > outgoing = sh -c "printenv.py outgoing"
   > EOF
   $ hg clone a c
   preoutgoing hook: HG_SOURCE=clone
@@ -377,7 +397,9 @@
 
 preoutgoing hook can prevent outgoing changes for local clones
 
-  $ echo "preoutgoing.forbid = printenv.py preoutgoing.forbid 1" >> a/.hg/hgrc
+  $ cat >> a/.hg/hgrc <<EOF
+  > preoutgoing.forbid = sh -c "printenv.py preoutgoing.forbid 1"
+  > EOF
   $ hg clone a zzz
   preoutgoing hook: HG_SOURCE=clone
   preoutgoing.forbid hook: HG_SOURCE=clone
@@ -750,7 +772,7 @@
   $ cd ..
   $ cat << EOF >> hgrc-with-post-init-hook
   > [hooks]
-  > post-init = printenv.py post-init
+  > post-init = sh -c "printenv.py post-init"
   > EOF
   $ HGRCPATH=hgrc-with-post-init-hook hg init to
   post-init hook: HG_ARGS=init to HG_OPTS={'insecure': None, 'remotecmd': '', 'ssh': ''} HG_PATS=['to'] HG_RESULT=0
--- a/tests/test-http-bundle1.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-http-bundle1.t	Tue Nov 01 15:40:21 2016 -0400
@@ -127,8 +127,10 @@
 pull
 
   $ cd copy-pull
-  $ echo '[hooks]' >> .hg/hgrc
-  $ echo "changegroup = printenv.py changegroup" >> .hg/hgrc
+  $ cat >> .hg/hgrc <<EOF
+  > [hooks]
+  > changegroup = sh -c "printenv.py changegroup"
+  > EOF
   $ hg pull
   pulling from http://localhost:$HGPORT1/
   searching for changes
--- a/tests/test-http.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-http.t	Tue Nov 01 15:40:21 2016 -0400
@@ -118,8 +118,10 @@
 pull
 
   $ cd copy-pull
-  $ echo '[hooks]' >> .hg/hgrc
-  $ echo "changegroup = printenv.py changegroup" >> .hg/hgrc
+  $ cat >> .hg/hgrc <<EOF
+  > [hooks]
+  > changegroup = sh -c "printenv.py changegroup"
+  > EOF
   $ hg pull
   pulling from http://localhost:$HGPORT1/
   searching for changes
--- a/tests/test-https.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-https.t	Tue Nov 01 15:40:21 2016 -0400
@@ -203,8 +203,10 @@
 pull without cacert
 
   $ cd copy-pull
-  $ echo '[hooks]' >> .hg/hgrc
-  $ echo "changegroup = printenv.py changegroup" >> .hg/hgrc
+  $ cat >> .hg/hgrc <<EOF
+  > [hooks]
+  > changegroup = sh -c "printenv.py changegroup"
+  > EOF
   $ hg pull $DISABLECACERTS
   pulling from https://localhost:$HGPORT/
   warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
--- a/tests/test-install.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-install.t	Tue Nov 01 15:40:21 2016 -0400
@@ -4,6 +4,9 @@
   checking Python executable (*) (glob)
   checking Python version (2.*) (glob)
   checking Python lib (*lib*)... (glob)
+  checking Python security support (*) (glob)
+    TLS 1.2 not supported by Python install; network connections lack modern security (?)
+    SNI not supported by Python install; may have connectivity issues with some servers (?)
   checking Mercurial version (*) (glob)
   checking Mercurial custom build (*) (glob)
   checking module policy (*) (glob)
@@ -33,6 +36,7 @@
     "problems": 0,
     "pythonexe": "*", (glob)
     "pythonlib": "*", (glob)
+    "pythonsecurity": [*], (glob)
     "pythonver": "*.*.*", (glob)
     "templatedirs": "*mercurial?templates", (glob)
     "username": "test",
@@ -47,6 +51,9 @@
   checking Python executable (*) (glob)
   checking Python version (2.*) (glob)
   checking Python lib (*lib*)... (glob)
+  checking Python security support (*) (glob)
+    TLS 1.2 not supported by Python install; network connections lack modern security (?)
+    SNI not supported by Python install; may have connectivity issues with some servers (?)
   checking Mercurial version (*) (glob)
   checking Mercurial custom build (*) (glob)
   checking module policy (*) (glob)
@@ -71,6 +78,9 @@
   checking Python executable (*) (glob)
   checking Python version (*) (glob)
   checking Python lib (*lib*)... (glob)
+  checking Python security support (*) (glob)
+    TLS 1.2 not supported by Python install; network connections lack modern security (?)
+    SNI not supported by Python install; may have connectivity issues with some servers (?)
   checking Mercurial version (*) (glob)
   checking Mercurial custom build (*) (glob)
   checking module policy (*) (glob)
--- a/tests/test-journal-share.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-journal-share.t	Tue Nov 01 15:40:21 2016 -0400
@@ -35,12 +35,12 @@
   $ cd repo
   $ hg bookmark bm
   $ touch file0
-  $ hg commit -Am 'file0 added'
+  $ hg commit -Am file0-added
   adding file0
   $ hg journal --all
   previous locations of the working copy and bookmarks:
-  5640b525682e  .         commit -Am 'file0 added'
-  5640b525682e  bm        commit -Am 'file0 added'
+  0fd3805711f9  .         commit -Am file0-added
+  0fd3805711f9  bm        commit -Am file0-added
 
 A shared working copy initially receives the same bookmarks and working copy
 
@@ -51,7 +51,7 @@
   $ cd shared1
   $ hg journal --all
   previous locations of the working copy and bookmarks:
-  5640b525682e  .         share repo shared1
+  0fd3805711f9  .         share repo shared1
 
 unless you explicitly share bookmarks
 
@@ -62,26 +62,26 @@
   $ cd shared2
   $ hg journal --all
   previous locations of the working copy and bookmarks:
-  5640b525682e  .         share --bookmarks repo shared2
-  5640b525682e  bm        commit -Am 'file0 added'
+  0fd3805711f9  .         share --bookmarks repo shared2
+  0fd3805711f9  bm        commit -Am file0-added
 
 Moving the bookmark in the original repository is only shown in the repository
 that shares bookmarks
 
   $ cd ../repo
   $ touch file1
-  $ hg commit -Am "file1 added"
+  $ hg commit -Am file1-added
   adding file1
   $ cd ../shared1
   $ hg journal --all
   previous locations of the working copy and bookmarks:
-  5640b525682e  .         share repo shared1
+  0fd3805711f9  .         share repo shared1
   $ cd ../shared2
   $ hg journal --all
   previous locations of the working copy and bookmarks:
-  6432d239ac5d  bm        commit -Am 'file1 added'
-  5640b525682e  .         share --bookmarks repo shared2
-  5640b525682e  bm        commit -Am 'file0 added'
+  4f354088b094  bm        commit -Am file1-added
+  0fd3805711f9  .         share --bookmarks repo shared2
+  0fd3805711f9  bm        commit -Am file0-added
 
 But working copy changes are always 'local'
 
@@ -91,26 +91,26 @@
   (leaving bookmark bm)
   $ hg journal --all
   previous locations of the working copy and bookmarks:
-  5640b525682e  .         up 0
-  6432d239ac5d  .         commit -Am 'file1 added'
-  6432d239ac5d  bm        commit -Am 'file1 added'
-  5640b525682e  .         commit -Am 'file0 added'
-  5640b525682e  bm        commit -Am 'file0 added'
+  0fd3805711f9  .         up 0
+  4f354088b094  .         commit -Am file1-added
+  4f354088b094  bm        commit -Am file1-added
+  0fd3805711f9  .         commit -Am file0-added
+  0fd3805711f9  bm        commit -Am file0-added
   $ cd ../shared2
   $ hg journal --all
   previous locations of the working copy and bookmarks:
-  6432d239ac5d  bm        commit -Am 'file1 added'
-  5640b525682e  .         share --bookmarks repo shared2
-  5640b525682e  bm        commit -Am 'file0 added'
+  4f354088b094  bm        commit -Am file1-added
+  0fd3805711f9  .         share --bookmarks repo shared2
+  0fd3805711f9  bm        commit -Am file0-added
   $ hg up tip
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg up 0
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   $ hg journal
   previous locations of '.':
-  5640b525682e  up 0
-  6432d239ac5d  up tip
-  5640b525682e  share --bookmarks repo shared2
+  0fd3805711f9  up 0
+  4f354088b094  up tip
+  0fd3805711f9  share --bookmarks repo shared2
 
 Unsharing works as expected; the journal remains consistent
 
@@ -118,16 +118,16 @@
   $ hg unshare
   $ hg journal --all
   previous locations of the working copy and bookmarks:
-  5640b525682e  .         share repo shared1
+  0fd3805711f9  .         share repo shared1
   $ cd ../shared2
   $ hg unshare
   $ hg journal --all
   previous locations of the working copy and bookmarks:
-  5640b525682e  .         up 0
-  6432d239ac5d  .         up tip
-  6432d239ac5d  bm        commit -Am 'file1 added'
-  5640b525682e  .         share --bookmarks repo shared2
-  5640b525682e  bm        commit -Am 'file0 added'
+  0fd3805711f9  .         up 0
+  4f354088b094  .         up tip
+  4f354088b094  bm        commit -Am file1-added
+  0fd3805711f9  .         share --bookmarks repo shared2
+  0fd3805711f9  bm        commit -Am file0-added
 
 New journal entries in the source repo no longer show up in the other working copies
 
@@ -135,7 +135,7 @@
   $ hg bookmark newbm -r tip
   $ hg journal newbm
   previous locations of 'newbm':
-  6432d239ac5d  bookmark newbm -r tip
+  4f354088b094  bookmark newbm -r tip
   $ cd ../shared2
   $ hg journal newbm
   previous locations of 'newbm':
@@ -146,7 +146,7 @@
   $ hg bookmark shared2bm -r tip
   $ hg journal shared2bm
   previous locations of 'shared2bm':
-  6432d239ac5d  bookmark shared2bm -r tip
+  4f354088b094  bookmark shared2bm -r tip
   $ cd ../repo
   $ hg journal shared2bm
   previous locations of 'shared2bm':
--- a/tests/test-largefiles-update.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-largefiles-update.t	Tue Nov 01 15:40:21 2016 -0400
@@ -144,6 +144,7 @@
   large1 in #1
   $ cat .hglf/large1
   58e24f733a964da346e2407a2bee99d9001184f5
+  $ rm normal1.orig
 
 (merge non-existing largefiles from "other" via conflict prompt -
 make sure the following commit doesn't abort in a confusing way when trying to
@@ -243,6 +244,7 @@
   ? largeY
   $ test -f .hglf/largeY
   [1]
+  $ rm largeY
 
 Test that "hg rollback" restores standins correctly
 
@@ -285,6 +287,7 @@
   58e24f733a964da346e2407a2bee99d9001184f5
   $ cat .hglf/large2
   1deebade43c8c498a3c8daddac0244dc55d1331d
+  $ rm normalX
 
 Test that "hg status" shows status of largefiles correctly just after
 automated commit like rebase/transplant
@@ -598,6 +601,7 @@
   58e24f733a964da346e2407a2bee99d9001184f5
   $ cat large1
   large1 in #1
+  $ rm normal1.orig
 
 Test that rebase updates standins for manually modified largefiles at
 the 1st commit of resuming.
@@ -708,7 +712,7 @@
 
   $ hg update -q -C 4
 
-  $ cat > exec-bit.patch <<EOF
+  $ cat > ../exec-bit.patch <<EOF
   > # HG changeset patch
   > # User test
   > # Date 0 0
@@ -721,13 +725,49 @@
   > old mode 100644
   > new mode 100755
   > EOF
-  $ hg import --exact --bypass exec-bit.patch
-  applying exec-bit.patch
+  $ hg import --exact --bypass ../exec-bit.patch
+  applying ../exec-bit.patch
   $ hg status -A --rev tip large2
   C large2
 
 #endif
 
+Test a fatal error interrupting an update. Verify that status report dirty
+files correctly after an interrupted update. Also verify that checking all
+hashes reveals it isn't clean.
+
+Start with clean dirstates:
+  $ hg up -qcr "8^"
+  $ sleep 1
+  $ hg st
+Update standins without updating largefiles - large1 is modified and largeX is
+added:
+  $ cat << EOF > ../crashupdatelfiles.py
+  > import hgext.largefiles.lfutil
+  > def getlfilestoupdate(oldstandins, newstandins):
+  >      raise SystemExit(7)
+  > hgext.largefiles.lfutil.getlfilestoupdate = getlfilestoupdate
+  > EOF
+  $ hg up -Cr "8" --config extensions.crashupdatelfiles=../crashupdatelfiles.py
+  [7]
+Check large1 content and status ... and that update will undo modifications:
+  $ cat large1
+  large1 in #3
+  $ hg st
+  M large1
+  ! largeX
+  $ hg up -Cr .
+  getting changed largefiles
+  2 largefiles updated, 0 removed
+  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ cat large1
+  manually modified before 'hg transplant --continue'
+  $ hg st
+Force largefiles rehashing and check that all changes have been caught by
+status and update:
+  $ rm .hg/largefiles/dirstate
+  $ hg st
+
   $ cd ..
 
 Test that "hg convert" avoids copying largefiles from the working
--- a/tests/test-merge-local.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-merge-local.t	Tue Nov 01 15:40:21 2016 -0400
@@ -66,7 +66,7 @@
   merging zzz1_merge_ok
   merging zzz2_merge_bad
   warning: conflicts while merging zzz2_merge_bad! (edit, then use 'hg resolve --mark')
-  2 files updated, 1 files merged, 2 files removed, 1 files unresolved
+  2 files updated, 1 files merged, 3 files removed, 1 files unresolved
   use 'hg resolve' to retry unresolved file merges
   [1]
 
@@ -104,7 +104,7 @@
   merging zzz1_merge_ok
   merging zzz2_merge_bad
   warning: conflicts while merging zzz2_merge_bad! (edit, then use 'hg resolve --mark')
-  2 files updated, 1 files merged, 2 files removed, 1 files unresolved
+  2 files updated, 1 files merged, 3 files removed, 1 files unresolved
   use 'hg resolve' to retry unresolved file merges
   [1]
 
--- a/tests/test-push-http-bundle1.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-push-http-bundle1.t	Tue Nov 01 15:40:21 2016 -0400
@@ -66,10 +66,12 @@
 
 expect success
 
-  $ echo 'allow_push = *' >> .hg/hgrc
-  $ echo '[hooks]' >> .hg/hgrc
-  $ echo "changegroup = printenv.py changegroup 0" >> .hg/hgrc
-  $ echo "pushkey = printenv.py pushkey 0" >> .hg/hgrc
+  $ cat >> .hg/hgrc <<EOF
+  > allow_push = *
+  > [hooks]
+  > changegroup = sh -c "printenv.py changegroup 0"
+  > pushkey = sh -c "printenv.py pushkey 0"
+  > EOF
   $ req
   pushing to http://localhost:$HGPORT/
   searching for changes
@@ -151,7 +153,7 @@
   > push_ssl = false
   > allow_push = *
   > [hooks]
-  > prepushkey = printenv.py prepushkey 1
+  > prepushkey = sh -c "printenv.py prepushkey 1"
   > EOF
   $ req
   pushing to http://localhost:$HGPORT/
@@ -164,7 +166,9 @@
 
 expect phase change success
 
-  $ echo "prepushkey = printenv.py prepushkey 0" >> .hg/hgrc
+  $ cat >> .hg/hgrc <<EOF
+  > prepushkey = sh -c "printenv.py prepushkey 0"
+  > EOF
   $ req
   pushing to http://localhost:$HGPORT/
   searching for changes
--- a/tests/test-push-http.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-push-http.t	Tue Nov 01 15:40:21 2016 -0400
@@ -56,10 +56,12 @@
 
 expect success
 
-  $ echo 'allow_push = *' >> .hg/hgrc
-  $ echo '[hooks]' >> .hg/hgrc
-  $ echo "changegroup = printenv.py changegroup 0" >> .hg/hgrc
-  $ echo "pushkey = printenv.py pushkey 0" >> .hg/hgrc
+  $ cat >> .hg/hgrc <<EOF
+  > allow_push = *
+  > [hooks]
+  > changegroup = sh -c "printenv.py changegroup 0"
+  > pushkey = sh -c "printenv.py pushkey 0"
+  > EOF
   $ req
   pushing to http://localhost:$HGPORT/
   searching for changes
@@ -114,7 +116,7 @@
   > push_ssl = false
   > allow_push = *
   > [hooks]
-  > prepushkey = printenv.py prepushkey 1
+  > prepushkey = sh -c "printenv.py prepushkey 1"
   > EOF
   $ req
   pushing to http://localhost:$HGPORT/
@@ -133,7 +135,9 @@
 
 expect phase change success
 
-  $ echo "prepushkey = printenv.py prepushkey 0" >> .hg/hgrc
+  $ cat >> .hg/hgrc <<EOF
+  > prepushkey = sh -c "printenv.py prepushkey 0"
+  > EOF
   $ req
   pushing to http://localhost:$HGPORT/
   searching for changes
--- a/tests/test-rebase-scenario-global.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-rebase-scenario-global.t	Tue Nov 01 15:40:21 2016 -0400
@@ -756,12 +756,19 @@
   $ touch subfile
   $ hg add subfile
   $ hg commit -m 'second source with subdir'
+#if rmcwd
   $ hg rebase -b . -d 1 --traceback
   rebasing 2:779a07b1b7a0 "first source commit"
   current directory was removed
   (consider changing to repo root: $TESTTMP/cwd-vanish)
   rebasing 3:a7d6f3a00bf3 "second source with subdir" (tip)
   saved backup bundle to $TESTTMP/cwd-vanish/.hg/strip-backup/779a07b1b7a0-853e0073-backup.hg (glob)
+#else
+  $ hg rebase -b . -d 1 --traceback
+  rebasing 2:779a07b1b7a0 "first source commit"
+  rebasing 3:a7d6f3a00bf3 "second source with subdir" (tip)
+  saved backup bundle to $TESTTMP/cwd-vanish/.hg/strip-backup/779a07b1b7a0-853e0073-backup.hg (glob)
+#endif
 
 Test that rebase is done in topo order (issue5370)
 
--- a/tests/test-ssh-bundle1.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-ssh-bundle1.t	Tue Nov 01 15:40:21 2016 -0400
@@ -38,7 +38,7 @@
   > uncompressed = True
   > 
   > [hooks]
-  > changegroup = printenv.py changegroup-in-remote 0 ../dummylog
+  > changegroup = sh -c "printenv.py changegroup-in-remote 0 ../dummylog"
   > EOF
   $ cd ..
 
@@ -114,8 +114,10 @@
   crosschecking files in changesets and manifests
   checking files
   2 files, 3 changesets, 2 total revisions
-  $ echo '[hooks]' >> .hg/hgrc
-  $ echo "changegroup = printenv.py changegroup-in-local 0 ../dummylog" >> .hg/hgrc
+  $ cat >> .hg/hgrc <<EOF
+  > [hooks]
+  > changegroup = sh -c "printenv.py changegroup-in-local 0 ../dummylog"
+  > EOF
 
 empty default pull
 
--- a/tests/test-ssh.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-ssh.t	Tue Nov 01 15:40:21 2016 -0400
@@ -32,7 +32,7 @@
   > uncompressed = True
   > 
   > [hooks]
-  > changegroup = printenv.py changegroup-in-remote 0 ../dummylog
+  > changegroup = sh -c "printenv.py changegroup-in-remote 0 ../dummylog"
   > EOF
   $ cd ..
 
@@ -108,8 +108,10 @@
   crosschecking files in changesets and manifests
   checking files
   2 files, 3 changesets, 2 total revisions
-  $ echo '[hooks]' >> .hg/hgrc
-  $ echo "changegroup = printenv.py changegroup-in-local 0 ../dummylog" >> .hg/hgrc
+  $ cat >> .hg/hgrc <<EOF
+  > [hooks]
+  > changegroup = sh -c "printenv.py changegroup-in-local 0 ../dummylog"
+  > EOF
 
 empty default pull
 
--- a/tests/test-static-http.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-static-http.t	Tue Nov 01 15:40:21 2016 -0400
@@ -53,8 +53,10 @@
 
   $ rm .hg/cache/*
   $ cd ../local
-  $ echo '[hooks]' >> .hg/hgrc
-  $ echo "changegroup = printenv.py changegroup" >> .hg/hgrc
+  $ cat >> .hg/hgrc <<EOF
+  > [hooks]
+  > changegroup = sh -c "printenv.py changegroup"
+  > EOF
   $ hg pull
   pulling from static-http://localhost:$HGPORT/remote
   searching for changes
--- a/tests/test-tag.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-tag.t	Tue Nov 01 15:40:21 2016 -0400
@@ -109,7 +109,7 @@
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   $ hg tag -l localblah
   $ hg tag "foobar"
-  abort: not at a branch head (use -f to force)
+  abort: working directory is not at a branch head (use -f to force)
   [255]
   $ hg tag -f "foobar"
   $ cat .hgtags
@@ -339,7 +339,7 @@
   $ hg up null
   0 files updated, 0 files merged, 2 files removed, 0 files unresolved
   $ hg tag nullrev
-  abort: not at a branch head (use -f to force)
+  abort: working directory is not at a branch head (use -f to force)
   [255]
 
   $ hg init empty
--- a/tests/test-up-local-change.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-up-local-change.t	Tue Nov 01 15:40:21 2016 -0400
@@ -242,4 +242,11 @@
   -a
   +b
 
+test for superfluous filemerge of clean files renamed in the past
+
+  $ hg up -qC tip
+  $ echo c > c
+  $ hg add c
+  $ hg up -qt:fail 0
+
   $ cd ..
--- a/tests/test-update-names.t	Sun Oct 16 13:35:23 2016 -0700
+++ b/tests/test-update-names.t	Tue Nov 01 15:40:21 2016 -0400
@@ -73,6 +73,8 @@
 
 #endif
 
+#if rmcwd
+
 Test that warning is printed if cwd is deleted during update
   $ hg init r4 && cd r4
   $ mkdir dir
@@ -84,3 +86,5 @@
   $ hg up -q null
   current directory was removed
   (consider changing to repo root: $TESTTMP/r1/r4)
+
+#endif