merge with stable
authorMatt Mackall <mpm@selenic.com>
Sun, 01 Dec 2013 14:10:53 -0600
changeset 20156 28fe5abc906f
parent 20155 21dafd8546d1 (current diff)
parent 20154 970394b6bd97 (diff)
child 20159 96b2dd77c85d
merge with stable
hgext/largefiles/overrides.py
mercurial/commands.py
tests/test-largefiles.t
--- a/contrib/hgk	Fri Nov 29 12:36:28 2013 -0800
+++ b/contrib/hgk	Sun Dec 01 14:10:53 2013 -0600
@@ -457,12 +457,10 @@
         }
     }
 
-    foreach {tag rev} $tags {
+    foreach {- tag rev id} [regexp -inline -all -line {^(.+\S)\s+(\d+):(\S+)} $tags] {
         # we use foreach as Tcl8.4 doesn't support lassign
-        foreach {- id} [split $rev :] {
-            lappend tagids($tag) $id
-            lappend idtags($id) $tag
-        }
+        lappend tagids($tag) $id
+        lappend idtags($id) $tag
     }
 
     set status [catch {exec $env(HG) --config ui.report_untrusted=false heads} heads]
--- a/contrib/sample.hgrc	Fri Nov 29 12:36:28 2013 -0800
+++ b/contrib/sample.hgrc	Sun Dec 01 14:10:53 2013 -0600
@@ -43,20 +43,15 @@
 
 # hgext.gpg =
 
-### graphlog - ASCII graph log
-### hg help glog
-
-# hgext.graphlog =
-
 ### hgk - GUI repository browser
 ### hg help view
 
 # hgext.hgk =
 
-### mq - Mercurial patch queues
-### hg help mq
+### strip - Remove changesets and their descendents from history
+### hg help strip
 
-# hgext.mq =
+# hgext.strip =
 
 ### notify - Template driven e-mail notifications
 ### hg help notify
--- a/contrib/win32/mercurial.ini	Fri Nov 29 12:36:28 2013 -0800
+++ b/contrib/win32/mercurial.ini	Sun Dec 01 14:10:53 2013 -0600
@@ -46,7 +46,6 @@
 ;extdiff =
 ;fetch =
 ;gpg =
-;graphlog = 
 ;hgcia =
 ;hgk =
 ;highlight = 
--- a/hgext/largefiles/overrides.py	Fri Nov 29 12:36:28 2013 -0800
+++ b/hgext/largefiles/overrides.py	Sun Dec 01 14:10:53 2013 -0600
@@ -380,7 +380,7 @@
     for action in actions:
         f, m, args, msg = action
 
-        splitstandin = lfutil.splitstandin(f)
+        splitstandin = f and lfutil.splitstandin(f)
         if (m == "g" and splitstandin is not None and
             splitstandin in p1 and splitstandin not in removes):
             # Case 1: normal file in the working copy, largefile in
--- a/hgext/shelve.py	Fri Nov 29 12:36:28 2013 -0800
+++ b/hgext/shelve.py	Sun Dec 01 14:10:53 2013 -0600
@@ -91,7 +91,6 @@
             pendingctx = fp.readline().strip()
             parents = [bin(h) for h in fp.readline().split()]
             stripnodes = [bin(h) for h in fp.readline().split()]
-            unknownfiles = fp.readline()[:-1].split('\0')
         finally:
             fp.close()
 
@@ -101,13 +100,11 @@
         obj.pendingctx = repo[bin(pendingctx)]
         obj.parents = parents
         obj.stripnodes = stripnodes
-        obj.unknownfiles = unknownfiles
 
         return obj
 
     @classmethod
-    def save(cls, repo, name, originalwctx, pendingctx, stripnodes,
-             unknownfiles):
+    def save(cls, repo, name, originalwctx, pendingctx, stripnodes):
         fp = repo.opener(cls._filename, 'wb')
         fp.write('%i\n' % cls._version)
         fp.write('%s\n' % name)
@@ -115,7 +112,6 @@
         fp.write('%s\n' % hex(pendingctx.node()))
         fp.write('%s\n' % ' '.join([hex(p) for p in repo.dirstate.parents()]))
         fp.write('%s\n' % ' '.join([hex(n) for n in stripnodes]))
-        fp.write('%s\n' % '\0'.join(unknownfiles))
         fp.close()
 
     @classmethod
@@ -379,7 +375,7 @@
 
         lock = repo.lock()
 
-        mergefiles(ui, repo, state.wctx, state.pendingctx, state.unknownfiles)
+        mergefiles(ui, repo, state.wctx, state.pendingctx)
 
         repair.strip(ui, repo, state.stripnodes, backup='none', topic='shelve')
         shelvedstate.clear(repo)
@@ -387,9 +383,9 @@
     finally:
         lockmod.release(lock, wlock)
 
-def mergefiles(ui, repo, wctx, shelvectx, unknownfiles):
+def mergefiles(ui, repo, wctx, shelvectx):
     """updates to wctx and merges the changes from shelvectx into the
-    dirstate. drops any files in unknownfiles from the dirstate."""
+    dirstate."""
     oldquiet = ui.quiet
     try:
         ui.quiet = True
@@ -397,17 +393,18 @@
         files = []
         files.extend(shelvectx.files())
         files.extend(shelvectx.parents()[0].files())
+
+        # revert will overwrite unknown files, so move them out of the way
+        m, a, r, d, u = repo.status(unknown=True)[:5]
+        for file in u:
+            if file in files:
+                util.rename(file, file + ".orig")
         cmdutil.revert(ui, repo, shelvectx, repo.dirstate.parents(),
                        *pathtofiles(repo, files),
                        **{'no_backup': True})
     finally:
         ui.quiet = oldquiet
 
-    # Send untracked files back to being untracked
-    dirstate = repo.dirstate
-    for f in unknownfiles:
-        dirstate.drop(f)
-
 def unshelvecleanup(ui, repo, name, opts):
     """remove related files after an unshelve"""
     if not opts['keep']:
@@ -446,7 +443,7 @@
             # rebase was a no-op, so it produced no child commit
             shelvectx = state.pendingctx
 
-        mergefiles(ui, repo, state.wctx, shelvectx, state.unknownfiles)
+        mergefiles(ui, repo, state.wctx, shelvectx)
 
         state.stripnodes.append(shelvectx.node())
         repair.strip(ui, repo, state.stripnodes, backup='none', topic='shelve')
@@ -538,8 +535,8 @@
         # to the original wctx.
 
         # Store pending changes in a commit
-        m, a, r, d, u = repo.status(unknown=True)[:5]
-        if m or a or r or d or u:
+        m, a, r, d = repo.status()[:4]
+        if m or a or r or d:
             def commitfunc(ui, repo, message, match, opts):
                 hasmq = util.safehasattr(repo, 'mq')
                 if hasmq:
@@ -554,7 +551,6 @@
 
             tempopts = {}
             tempopts['message'] = "pending changes temporary commit"
-            tempopts['addremove'] = True
             oldquiet = ui.quiet
             try:
                 ui.quiet = True
@@ -588,7 +584,7 @@
 
                 stripnodes = [repo.changelog.node(rev)
                               for rev in xrange(oldtiprev, len(repo))]
-                shelvedstate.save(repo, basename, wctx, tmpwctx, stripnodes, u)
+                shelvedstate.save(repo, basename, wctx, tmpwctx, stripnodes)
 
                 util.rename(repo.join('rebasestate'),
                             repo.join('unshelverebasestate'))
@@ -603,7 +599,7 @@
                 # rebase was a no-op, so it produced no child commit
                 shelvectx = tmpwctx
 
-        mergefiles(ui, repo, wctx, shelvectx, u)
+        mergefiles(ui, repo, wctx, shelvectx)
         shelvedstate.clear(repo)
 
         # The transaction aborting will strip all the commits for us,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/i18n/check-translation.py	Sun Dec 01 14:10:53 2013 -0600
@@ -0,0 +1,148 @@
+#!/usr/bin/env python
+#
+# check-translation.py - check Mercurial specific translation problems
+
+import polib
+import re
+
+checkers = []
+
+def checker(level, msgidpat):
+    def decorator(func):
+        if msgidpat:
+            match = re.compile(msgidpat).search
+        else:
+            match = lambda msgid: True
+        checkers.append((func, level))
+        func.match = match
+        return func
+    return decorator
+
+def match(checker, pe):
+    """Examine whether POEntry "pe" is target of specified checker or not
+    """
+    if not checker.match(pe.msgid):
+        return
+    # examine suppression by translator comment
+    nochecker = 'no-%s-check' % checker.__name__
+    for tc in pe.tcomment.split():
+        if nochecker == tc:
+            return
+    return True
+
+####################
+
+def fatalchecker(msgidpat=None):
+    return checker('fatal', msgidpat)
+
+@fatalchecker(r'\$\$')
+def promptchoice(pe):
+    """Check translation of the string given to "ui.promptchoice()"
+
+    >>> pe = polib.POEntry(
+    ...     msgid ='prompt$$missing &sep$$missing &amp$$followed by &none',
+    ...     msgstr='prompt  missing &sep$$missing  amp$$followed by none&')
+    >>> match(promptchoice, pe)
+    True
+    >>> for e in promptchoice(pe): print e
+    number of choices differs between msgid and msgstr
+    msgstr has invalid choice missing '&'
+    msgstr has invalid '&' followed by none
+    """
+    idchoices = [c.rstrip(' ') for c in pe.msgid.split('$$')[1:]]
+    strchoices = [c.rstrip(' ') for c in pe.msgstr.split('$$')[1:]]
+
+    if len(idchoices) != len(strchoices):
+        yield "number of choices differs between msgid and msgstr"
+
+    indices = [(c, c.find('&')) for c in strchoices]
+    if [c for c, i in indices if i == -1]:
+        yield "msgstr has invalid choice missing '&'"
+    if [c for c, i in indices if len(c) == i + 1]:
+        yield "msgstr has invalid '&' followed by none"
+
+####################
+
+def warningchecker(msgidpat=None):
+    return checker('warning', msgidpat)
+
+####################
+
+def check(pofile, fatal=True, warning=False):
+    targetlevel = { 'fatal': fatal, 'warning': warning }
+    targetcheckers = [(checker, level)
+                      for checker, level in checkers
+                      if targetlevel[level]]
+    if not targetcheckers:
+        return []
+
+    detected = []
+    for pe in pofile.translated_entries():
+        errors = []
+        for checker, level in targetcheckers:
+            if match(checker, pe):
+                errors.extend((level, checker.__name__, error)
+                              for error in checker(pe))
+        if errors:
+            detected.append((pe, errors))
+    return detected
+
+########################################
+
+if __name__ == "__main__":
+    import sys
+    import optparse
+
+    optparser = optparse.OptionParser("""%prog [options] pofile ...
+
+This checks Mercurial specific translation problems in specified
+'*.po' files.
+
+Each detected problems are shown in the format below::
+
+    filename:linenum:type(checker): problem detail .....
+
+"type" is "fatal" or "warning". "checker" is the name of the function
+detecting corresponded error.
+
+Checking by checker "foo" on the specific msgstr can be suppressed by
+the "translator comment" like below. Multiple "no-xxxx-check" should
+be separated by whitespaces::
+
+    # no-foo-check
+    msgid = "....."
+    msgstr = "....."
+""")
+    optparser.add_option("", "--warning",
+                         help="show also warning level problems",
+                         action="store_true")
+    optparser.add_option("", "--doctest",
+                         help="run doctest of this tool, instead of check",
+                         action="store_true")
+    (options, args) = optparser.parse_args()
+
+    if options.doctest:
+        import doctest
+        failures, tests = doctest.testmod()
+        sys.exit(failures and 1 or 0)
+
+    # replace polib._POFileParser to show linenum of problematic msgstr
+    class ExtPOFileParser(polib._POFileParser):
+        def process(self, symbol, linenum):
+            super(ExtPOFileParser, self).process(symbol, linenum)
+            if symbol == 'MS': # msgstr
+                self.current_entry.linenum = linenum
+    polib._POFileParser = ExtPOFileParser
+
+    detected = []
+    warning = options.warning
+    for f in args:
+        detected.extend((f, pe, errors)
+                        for pe, errors in check(polib.pofile(f),
+                                                warning=warning))
+    if detected:
+        for f, pe, errors in detected:
+            for level, checker, error in errors:
+                sys.stderr.write('%s:%d:%s(%s): %s\n'
+                                 % (f, pe.linenum, level, checker, error))
+        sys.exit(1)
--- a/i18n/ja.po	Fri Nov 29 12:36:28 2013 -0800
+++ b/i18n/ja.po	Sun Dec 01 14:10:53 2013 -0600
@@ -13,6 +13,7 @@
 # XXXX exists           XXXX が存在します
 # do not XXXX           XXXX できません ※ 「XXXX してはいけない」の意
 # XXXX failed           XXXX が(or に)失敗
+# failed to XXXX        XXXX が(or に)失敗
 # error XXXX-ing        XXXX が(or に)失敗
 # error while XXXX      XXXX が(or に)失敗
 # cannot XXXX           XXXX が(or に)失敗
@@ -124,6 +125,7 @@
 # search                探索
 # server                サーバ
 # shelved change        退避内容(for 処理視点) or 退避情報(for 管理視点)
+# skipping xxxx         xxxx を無視
 # source url (of subrepo) (サブリポジトリの)参照先 URL
 # stop                  中断(再開可能な場合)/中止(再開不可能な場合)
 # subrepo               サブリポジトリ
@@ -137,7 +139,7 @@
 # tracked xxxx          構成管理対象の xxxx
 # tracked, un           未登録
 # type, xxxxx           xxxx 種別
-# unknown xxxx          未知の xxxx
+# unknown xxxx          未知の xxxx (or 構成管理対象外)
 # user                  ユーザ
 # working copy(of xxx)  作業領域(中の xxx)
 # working directory     作業領域
@@ -147,8 +149,8 @@
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
-"POT-Creation-Date: 2013-10-29 20:29+0900\n"
-"PO-Revision-Date: 2013-10-31 03:00+0900\n"
+"POT-Creation-Date: 2013-11-28 16:18+0900\n"
+"PO-Revision-Date: 2013-11-28 20:03+0900\n"
 "Last-Translator: Japanese translation team <mercurial-ja@googlegroups.com>\n"
 "Language-Team: Japanese\n"
 "Language: ja\n"
@@ -1249,7 +1251,7 @@
 
 #, python-format
 msgid "connecting to %s:%s as %s, password %s\n"
-msgstr "%s:%s に %s として接続しています (パスワード:%s)\n"
+msgstr "%s:%s に %s として接続中 (パスワード:%s)\n"
 
 #, python-format
 msgid "query: %s %s\n"
@@ -1290,15 +1292,15 @@
 
 #, python-format
 msgid "looking up user %s\n"
-msgstr "ユーザ %s を検索しています\n"
+msgstr "ユーザ %s を検索中\n"
 
 #, python-format
 msgid "cannot find bugzilla user id for %s"
-msgstr "%s の buzilla ユーザ ID を見つけることができません"
+msgstr "%s の buzilla ユーザ ID が見つかりません"
 
 #, python-format
 msgid "cannot find bugzilla user id for %s or %s"
-msgstr "%s か %s の buzilla ユーザ ID を見つけることができません"
+msgstr "%s か %s の buzilla ユーザ ID が見つかりません"
 
 msgid "Bugzilla/MySQL cannot update bug state\n"
 msgstr "Bugzilla/MySQL 連携ではバグ状態を更新できません\n"
@@ -1464,7 +1466,7 @@
 
 #, python-format
 msgid "skipping malformed alias: %s\n"
-msgstr "不正な形式の別名は無視します: %s\n"
+msgstr "不正な形式の別名を無視: %s\n"
 
 msgid "count rate for the specified revision or range"
 msgstr "処理対象とする特定リビジョン/範囲の指定"
@@ -2423,7 +2425,7 @@
 
 #, python-format
 msgid "cannot find required \"%s\" tool"
-msgstr "要求されたツール '%s' を見つけることができません"
+msgstr "要求されたツール '%s' が見つかりません"
 
 #, python-format
 msgid "splicemap entry %s is not a valid revision identifier"
@@ -2439,7 +2441,7 @@
 
 #, python-format
 msgid "could not open map file %r: %s"
-msgstr "変換ファイル %r を開くことができません: %s"
+msgstr "変換ファイル %r が開けません: %s"
 
 #, python-format
 msgid "%s: invalid source repository type"
@@ -2480,7 +2482,7 @@
 
 #, python-format
 msgid "splice map revision %s is not being converted, ignoring\n"
-msgstr "継ぎ合わせ指定中の %s が変換対象ではないため無視します\n"
+msgstr "継ぎ合わせ指定中の %s が変換対象ではないため無視\n"
 
 #, python-format
 msgid "unknown splice map parent: %s"
@@ -2511,7 +2513,7 @@
 
 #, python-format
 msgid "overriding mapping for author %s, was %s, will be %s\n"
-msgstr "作成者 %s の %s への変換を、 %s への変換で上書きします\n"
+msgstr "作成者 %s の %s への変換を、 %s への変換で上書き中\n"
 
 #, python-format
 msgid "spliced in %s as parents of %s\n"
@@ -2556,7 +2558,7 @@
 
 #, python-format
 msgid "connecting to %s\n"
-msgstr "%s へ接続中\n"
+msgstr "%s に接続中\n"
 
 msgid "CVS pserver authentication failed"
 msgstr "CVS pserver の認証に失敗"
@@ -2592,7 +2594,7 @@
 msgstr "CVS ログキャッシュ %s 読み込み中\n"
 
 msgid "ignoring old cache\n"
-msgstr "古いログキャッシュを無視します\n"
+msgstr "古いログキャッシュを無視\n"
 
 #, python-format
 msgid "cache has %d log entries\n"
@@ -2728,7 +2730,7 @@
 msgstr "%s は GNU Arch 形式ではないと思われます"
 
 msgid "cannot find a GNU Arch tool"
-msgstr "GNU Arch ツールを見つけることができません"
+msgstr "GNU Arch ツールが見つかりません"
 
 #, python-format
 msgid "analyzing tree version %s...\n"
@@ -2785,7 +2787,7 @@
 
 #, python-format
 msgid "ignoring: %s\n"
-msgstr "例外を無視します: %s\n"
+msgstr "例外を無視: %s\n"
 
 #, python-format
 msgid "%s does not look like a monotone repository"
@@ -2881,7 +2883,7 @@
 
 #, python-format
 msgid "no revision found in module %s"
-msgstr "モジュール %s でリビジョンが見つかりません"
+msgstr "モジュール %s にはリビジョンがありません"
 
 #, python-format
 msgid "expected %s to be at %r, but not found"
@@ -2893,7 +2895,7 @@
 
 #, python-format
 msgid "ignoring empty branch %s\n"
-msgstr "空ブランチ %s を無視します\n"
+msgstr "空ブランチ %s を無視\n"
 
 #, python-format
 msgid "found branch %s at %d\n"
@@ -3058,12 +3060,13 @@
 "  [repository]\n"
 "  native = LF"
 
-msgid ""
-".. note::\n"
+msgid ".. note::"
+msgstr ".. note::"
+
+msgid ""
 "   The rules will first apply when files are touched in the working\n"
 "   copy, e.g. by updating to null and back to tip to touch all files."
 msgstr ""
-".. note::\n"
 "   変換設定の適用契機は、 作業領域中のファイルに対する最初の更新です。\n"
 "   例えば、 :hg:`update null` 後の :hg:`update tip` により、\n"
 "   全てのファイルが更新されます。"
@@ -3152,11 +3155,11 @@
 
 #, python-format
 msgid "ignoring unknown EOL style '%s' from %s\n"
-msgstr "未知の改行形式 '%s' (%s 由来) を無視します\n"
+msgstr "未知の改行形式 '%s' (%s 由来) を無視\n"
 
 #, python-format
 msgid "warning: ignoring .hgeol file due to parse error at %s: %s\n"
-msgstr "警告: 解析エラーにより .hgeol ファイルを無視します (%s 行目: %s)\n"
+msgstr "警告: 解析エラーにより .hgeol ファイルを無視 (%s 行目: %s)\n"
 
 #, python-format
 msgid "  %s in %s should not have %s line endings"
@@ -3299,7 +3302,7 @@
 msgstr "--rev と --change は同時には指定できません"
 
 msgid "cleaning up temp directory\n"
-msgstr "一時ディレクトリを破棄しています\n"
+msgstr "一時ディレクトリの破棄中\n"
 
 msgid "use external program to diff repository (or selected files)"
 msgstr "外部コマンドを使用したリポジトリ(ないし指定ファイル)の差分表示"
@@ -3519,11 +3522,11 @@
 
 #, python-format
 msgid "updating to %d:%s\n"
-msgstr "%d に更新しています:%s\n"
+msgstr "リビジョン %d:%s で更新中\n"
 
 #, python-format
 msgid "merging with %d:%s\n"
-msgstr "%d とマージしています:%s\n"
+msgstr "リビジョン %d:%s とマージ中\n"
 
 #, python-format
 msgid "new changeset %d:%s merges remote changes with local\n"
@@ -3571,7 +3574,7 @@
 
 #, python-format
 msgid "%s:%d node does not exist\n"
-msgstr "%s:%d ノードは存在しません\n"
+msgstr "ノード %s:%d は存在しません\n"
 
 msgid "hg sigcheck REV"
 msgstr "hg sigcheck REV"
@@ -3581,7 +3584,7 @@
 
 #, python-format
 msgid "no valid signature for %s\n"
-msgstr "%s の正しい署名ではありません\n"
+msgstr "%s に対する正しい署名はありません\n"
 
 msgid "make the signature local"
 msgstr "自リポジトリローカルな署名"
@@ -3632,7 +3635,7 @@
 msgstr "%d:%s への署名中\n"
 
 msgid "error while signing"
-msgstr "署名処理の失敗"
+msgstr "署名処理に失敗"
 
 msgid ""
 "working copy of .hgsigs is changed (please commit .hgsigs manually or use --"
@@ -3799,7 +3802,7 @@
 
 #, python-format
 msgid "hgcia: sending update to %s\n"
-msgstr "hgcia: %s に更新を送信しています\n"
+msgstr "hgcia: %s に更新を送信中\n"
 
 msgid "email.from must be defined when sending by email"
 msgstr "電子メール送信のためには email.from の定義が必要です"
@@ -3936,7 +3939,7 @@
 
 #. i18n: bisect changeset status
 msgid "ignored"
-msgstr "無視しました"
+msgstr "無視"
 
 msgid "hg debug-rev-parse REV"
 msgstr "hg debug-rev-parse REV"
@@ -3945,7 +3948,7 @@
 msgstr "ヘッダ"
 
 msgid "topo-order"
-msgstr "履歴トポロジーの順序"
+msgstr "履歴構造の順序"
 
 msgid "parents"
 msgstr "親"
@@ -4365,13 +4368,22 @@
 "    Use \"min(outgoing() and ::.)\" or similar revset specification\n"
 "    instead of --outgoing to specify edit target revision exactly in\n"
 "    such ambiguous situation. See :hg:`help revsets` for detail about\n"
-"    selecting revisions.\n"
-"    "
+"    selecting revisions."
 msgstr ""
 "    紛らわしさのために --outgoing が使用できない場合、 \"min(outgoing()\n"
 "    and ::.)\" または同等の revset 表記を使って、 改変対象リビジョンを、\n"
 "    厳密に指定してください。 リビジョン指定の詳細は :hg:`help revsets`\n"
-"    を参照してください。\n"
+"    を参照してください。"
+
+msgid ""
+"    Returns 0 on success, 1 if user intervention is required (not only\n"
+"    for intentional \"edit\" command, but also for resolving unexpected\n"
+"    conflicts).\n"
+"    "
+msgstr ""
+"    成功時のコマンド終了値は 0、 ユーザによる作業 (\"edit\" 指定による、\n"
+"    意図的なもの以外に、 予期せぬ衝突発生時も含みます) が必要な場合は\n"
+"    1 です。\n"
 "    "
 
 msgid "source has mq patches applied"
@@ -4563,15 +4575,15 @@
 
 #, python-format
 msgid "%s event: created %s\n"
-msgstr "%s: %s を作成\n"
+msgstr "イベント %s: %s を作成\n"
 
 #, python-format
 msgid "%s event: deleted %s\n"
-msgstr "%s: %s を削除\n"
+msgstr "イベント %s: %s を削除\n"
 
 #, python-format
 msgid "%s event: modified %s\n"
-msgstr "%s: %s を変更\n"
+msgstr "イベント %s: %s を変更\n"
 
 #, python-format
 msgid "filesystem containing %s was unmounted\n"
@@ -4714,13 +4726,11 @@
 "    svn = True"
 
 msgid ""
-".. note::\n"
 "   The more specific you are in your filename patterns the less you\n"
 "   lose speed in huge repositories."
 msgstr ""
-".. note::\n"
-"   ファイル名パターンが更に特殊になる場合、\n"
-"   リポジトリサイズ次第では性能劣化が生じ得ます。"
+"   ファイル名パターンが更に特殊になる場合、 リポジトリサイズ次第では、\n"
+"   実行性能が低下する可能性があります。"
 
 msgid ""
 "For [keywordmaps] template mapping and expansion demonstration and\n"
@@ -5455,19 +5465,19 @@
 
 #, python-format
 msgid ""
-"%s has been turned into a largefile\n"
-"use (l)argefile or keep as (n)ormal file?$$ &Largefile $$ &Normal file"
-msgstr ""
-"ファイル %s が大容量ファイル化されています。\n"
+"remote turned local normal file %s into a largefile\n"
+"use (l)argefile or keep (n)ormal file?$$ &Largefile $$ &Normal file"
+msgstr ""
+"通常ファイル %s が、マージ対象リビジョンでは大容量ファイル化されています。\n"
 "大容量:(l)argefile と通常:(n)ormal file のどちらの形式を採用しますか?$$ "
 "&Largefile $$ &Normal file"
 
 #, python-format
 msgid ""
-"%s has been turned into a normal file\n"
-"keep as (l)argefile or use (n)ormal file?$$ &Largefile $$ &Normal file"
-msgstr ""
-"ファイル %s が通常ファイル化されています。\n"
+"remote turned local largefile %s into a normal file\n"
+"keep (l)argefile or use (n)ormal file?$$ &Largefile $$ &Normal file"
+msgstr ""
+"大容量ファイル %s が、マージ対象リビジョンでは通常ファイル化されています。\n"
 "大容量:(l)argefile と通常:(n)ormal file のどちらの形式を採用しますか?$$ "
 "&Largefile $$ &Normal file"
 
@@ -5489,7 +5499,7 @@
 "&Local $$ &Other"
 
 msgid "no files to copy"
-msgstr "コピーするファイルがありません"
+msgstr "複製対象ファイルがありません"
 
 msgid "destination largefile already exists"
 msgstr "大容量ファイルの複製先は既に存在します"
@@ -5506,7 +5516,7 @@
 msgstr "未知のアーカイブ種別 '%s'"
 
 msgid "cannot give prefix when archiving to files"
-msgstr "アーカイブにファイルを追加するときは接頭辞を指定できません"
+msgstr "files でのアーカイブには接頭辞を指定できません"
 
 #, python-format
 msgid "largefile %s not found in repo store or system cache"
@@ -5579,7 +5589,7 @@
 
 #, python-format
 msgid "remotestore: could not open file %s: %s"
-msgstr "remotestore: ファイル %s を開くことができません: %s"
+msgstr "remotestore: ファイル %s が開けません: %s"
 
 #, python-format
 msgid "changeset %s: %s: contents differ\n"
@@ -5591,7 +5601,7 @@
 
 #, python-format
 msgid "required features are not supported in the destination: %s"
-msgstr "連携先リポジトリでは必要な機能が未サポートです: %s"
+msgstr "必要な機能が連携先リポジトリでは未サポートです: %s"
 
 #, python-format
 msgid "file \"%s\" is a largefile standin"
@@ -5984,7 +5994,7 @@
 
 #, python-format
 msgid "cannot push '%s' - %s\n"
-msgstr "パッチ '%s' は適用できませんでした - %s\n"
+msgstr "パッチ '%s' の適用に失敗 - %s\n"
 
 msgid "all patches are currently applied\n"
 msgstr "全てのパッチが適用中です\n"
@@ -6714,12 +6724,11 @@
 "    引数指定が無い場合、 現在のガード設定を表示します。\n"
 "    引数が指定された場合、 指定パッチに対してガードを設定します。"
 
-msgid ""
-"    .. note::\n"
-"       Specifying negative guards now requires '--'."
-msgstr ""
-"    .. note::\n"
-"       「負」のガード設定には、 ガード指定の前に '--' 指定が必要です。"
+msgid "    .. note::"
+msgstr "    .. note::"
+
+msgid "       Specifying negative guards now requires '--'."
+msgstr "       負のガード設定には、 ガード指定の前に '--' 引数が必要です。"
 
 msgid "    To set guards on another patch::"
 msgstr "    現行パッチ以外にガードを設定するには::"
@@ -7345,7 +7354,7 @@
 "  :``bundle``: ``hg unbundle`` 経由での反映"
 
 msgid "  Default: serve."
-msgstr " デフォルト値は serve です。"
+msgstr "  デフォルト値は serve です。"
 
 msgid ""
 "notify.strip\n"
@@ -7752,7 +7761,7 @@
 msgstr "説明文を独立したメールで送信"
 
 msgid "hg email [OPTION]... [DEST]..."
-msgstr "hg email [OPTION]... [DEST]...\""
+msgstr "hg email [OPTION]... [DEST]..."
 
 msgid "send changesets by email"
 msgstr "電子メールによる変更内容のパッチ送付"
@@ -7892,7 +7901,7 @@
 "default\n"
 "      hg email -b -r 3000 DEST  # bundle of all ancestors of 3000 not in DEST"
 msgstr ""
-"                                # ※ 以下、すべて bundle 形式\n"
+"      # ※ 以下、すべて bundle 形式\n"
 "      hg email -b               # default 側に無いリビジョン\n"
 "      hg email -b DEST          # DEST 側に無いリビジョン\n"
 "      hg email -b -r 3000       # 3000 以前で default 側に無いリビジョン\n"
@@ -8071,10 +8080,10 @@
 msgstr "作業領域中の未登録ファイルを削除するコマンド"
 
 msgid "abort if an error occurs"
-msgstr "エラーが発生した場合に処理を中止"
+msgstr "エラー発生時には処理を中止"
 
 msgid "purge ignored files too"
-msgstr "無視したファイルも削除する"
+msgstr "無視対象ファイルも削除"
 
 msgid "print filenames instead of deleting them"
 msgstr "ファイル削除の変わりにファイル名表示を実施"
@@ -8083,7 +8092,7 @@
 msgstr "ファイル名をNUL文字(0x00)で終端(xargs -p/--print との併用向け)"
 
 msgid "hg purge [OPTION]... [DIR]..."
-msgstr "hg purge [OPTION]... [DIR]...\""
+msgstr "hg purge [OPTION]... [DIR]..."
 
 msgid "removes files not tracked by Mercurial"
 msgstr "Mercurial の管理対象外ファイルの削除"
@@ -8142,7 +8151,7 @@
 
 #, python-format
 msgid "%s cannot be removed"
-msgstr "%s を削除できませんでした"
+msgstr "%s の削除に失敗"
 
 #, python-format
 msgid "warning: %s\n"
@@ -8336,10 +8345,12 @@
 "    (移動関連情報の破棄) してください。"
 
 msgid ""
-"    Returns 0 on success, 1 if nothing to rebase.\n"
-"    "
-msgstr ""
-"    成功時のコマンド終了値は 0、 移植が実施されない場合は 1 です。\n"
+"    Returns 0 on success, 1 if nothing to rebase or there are\n"
+"    unresolved conflicts.\n"
+"    "
+msgstr ""
+"    成功時のコマンド終了値は 0、 移動が必要なリビジョンが無い場合や、\n"
+"    未解消の衝突が発生した場合は 1 です。\n"
 "    "
 
 msgid "message can only be specified with collapse"
@@ -8856,7 +8867,6 @@
 "    新規に作成します。"
 
 msgid ""
-"    .. note::\n"
 "       using rollback or extensions that destroy/modify history (mq,\n"
 "       rebase, etc.) can cause considerable confusion with shared\n"
 "       clones. In particular, if two shared clones are both updated to\n"
@@ -8867,7 +8877,6 @@
 "       the broken clone to reset it to a changeset that still exists.\n"
 "    "
 msgstr ""
-"    .. note::\n"
 "       rollback の実施や、 履歴を改変するエクステンション (例: mq や\n"
 "       rebase 等) の利用は、 リポジトリ間での共有に混乱をもたらします。\n"
 "       典型的な例は、 共有関係にあるリポジトリの両方が、 \n"
@@ -8936,7 +8945,7 @@
 msgstr "非互換なバージョンの shelve エクステンションによる復旧処理中です"
 
 msgid "cannot shelve while merging"
-msgstr "マージ実施中は変更の退避ができません"
+msgstr "マージ実施中は変更を退避できません"
 
 #, python-format
 msgid "a shelved change named '%s' already exists"
@@ -9630,7 +9639,7 @@
 msgstr "[win32mbcs] 文字コード '%s' によるファイル名変換に失敗\n"
 
 msgid "[win32mbcs] cannot activate on this platform.\n"
-msgstr "[win32mbcs] このプラットフォームでは実行できません。\n"
+msgstr "[win32mbcs] エクステンションを有効化できないプラットフォームです。\n"
 
 msgid "perform automatic newline conversion"
 msgstr "改行形式の自動変換"
@@ -9809,7 +9818,7 @@
 "  zc-test = http://example.com:8000/test\n"
 
 msgid "archive prefix contains illegal components"
-msgstr "アーカイブの接頭辞が不正なコンポーネントを含みます"
+msgstr "アーカイブの接頭辞が不正な要素を含みます"
 
 msgid "archiving"
 msgstr "アーカイブ中"
@@ -9901,7 +9910,7 @@
 
 #, python-format
 msgid "can't read commit message '%s': %s"
-msgstr "コミットログ '%s' を読み込むことができません: %s"
+msgstr "コミットログ '%s' が読み込めません: %s"
 
 msgid "limit must be a positive integer"
 msgstr "制限には正数を指定してください"
@@ -9959,7 +9968,7 @@
 
 #, python-format
 msgid "%s: deleted in working copy\n"
-msgstr "%s: 作業コピーから削除しました\n"
+msgstr "%s: 作業領域から削除しました\n"
 
 #, python-format
 msgid "%s: cannot copy - %s\n"
@@ -9974,17 +9983,17 @@
 msgstr "%s を %s にコピー中\n"
 
 msgid "no source or destination specified"
-msgstr "作業元もしくは作業先を指定していません"
+msgstr "複製元/複製先の指定がありません"
 
 msgid "no destination specified"
-msgstr "作業先を指定していません"
+msgstr "複製先指定がありません"
 
 msgid "with multiple sources, destination must be an existing directory"
-msgstr "複数の作業元の場合、 作業先は存在するディレクトリを指定してください"
+msgstr "複製元が複数の場合、存在するディレクトリを複製先に指定してください"
 
 #, python-format
 msgid "destination %s is not a directory"
-msgstr "作業先 %s はディレクトリではありません"
+msgstr "複製先 %s はディレクトリではありません"
 
 msgid "(consider using --after)\n"
 msgstr "(--after を使ってみては?)\n"
@@ -10078,10 +10087,10 @@
 
 #, python-format
 msgid "found revision %s from %s\n"
-msgstr "リビジョン %s を %s で見つけました\n"
+msgstr "リビジョン %s (%s) が指定日時に合致します\n"
 
 msgid "revision matching date not found"
-msgstr "リビジョンに一致する日付がありません"
+msgstr "指定日時に合致するリビジョンがありません"
 
 #, python-format
 msgid "cannot follow file not in parent revision: \"%s\""
@@ -10634,11 +10643,9 @@
 "    マージ結果はコミットされません。"
 
 msgid ""
-"    .. note::\n"
 "      backout cannot be used to fix either an unwanted or\n"
 "      incorrect merge."
 msgstr ""
-"    .. note::\n"
 "      :hg:`backout` による打消し機能は、マージ実施リビジョンに対しては、\n"
 "      適用できません。"
 
@@ -10863,8 +10870,7 @@
 msgstr "          hg log --graph -r \"bisect(range)\""
 
 msgid "      See :hg:`help revsets` for more about the `bisect()` keyword."
-msgstr ""
-"    `bisect()` キーワードの詳細は :hg:`help revsets` を参照してください。"
+msgstr "      `bisect()` の詳細は :hg:`help revsets` を参照してください。"
 
 msgid "The first good revision is:\n"
 msgstr "最初の good なリビジョンは:\n"
@@ -10901,7 +10907,7 @@
 msgstr "不正な引数の組み合わせです"
 
 msgid "current bisect revision is unknown - start a new bisect to fix"
-msgstr "現在の検証対象リビジョンが不在です - 探索を最初からやり直してください"
+msgstr "未知のリビジョンが検証対象です - 探索を最初からやり直してください"
 
 msgid "current bisect revision is a merge"
 msgstr "現在の検証対象リビジョンはマージ実施リビジョンです"
@@ -11033,14 +11039,14 @@
 msgstr "--rev と --rename は併用できません"
 
 msgid "bookmark name required"
-msgstr "ブックマーク名を要求しました"
+msgstr "ブックマーク名指定が必要です"
 
 #, python-format
 msgid "bookmark '%s' does not exist"
 msgstr "ブックマーク '%s' は存在しません"
 
 msgid "new bookmark name required"
-msgstr "新しいブックマーク名を要求しました"
+msgstr "新しいブックマーク名が必要です"
 
 msgid "only one new bookmark name allowed"
 msgstr "新規ブックマーク名の指定は1つだけです"
@@ -11064,14 +11070,12 @@
 msgstr "ブランチ名の設定、 ないし現ブランチ名の表示"
 
 msgid ""
-"    .. note::\n"
 "       Branch names are permanent and global. Use :hg:`bookmark` to create "
 "a\n"
 "       light-weight bookmark instead. See :hg:`help glossary` for more\n"
 "       information about named branches and bookmarks."
 msgstr ""
-"    .. note::\n"
-"       ブランチ名は永続的で且つ共有されます。\n"
+"       ブランチ名の情報は永続的で、 他リポジトリにも伝搬されます。\n"
 "       軽量な名前付けが必要なら、\n"
 "       :hg:`bookmark` でブックマークを作成してください。\n"
 "       名前付きブランチと、 ブックマークの詳細に関しては、\n"
@@ -12273,12 +12277,10 @@
 msgstr "    差分は unified diff 形式で表示されます。"
 
 msgid ""
-"    .. note::\n"
 "       diff may generate unexpected results for merges, as it will\n"
 "       default to comparing against the working directory's first\n"
 "       parent changeset if no revisions are specified."
 msgstr ""
-"    .. note::\n"
 "       マージ実施リビジョンに対する本コマンドの差分出力が、\n"
 "       期待と異なる場合があるのは、 対象リビジョンが無指定の場合に\n"
 "       比較対象となるのが、 作業領域の第1親に固定されているためです。"
@@ -12371,15 +12373,13 @@
 "    (default 以外の場合は)ブランチ名前/ハッシュ値/親リビジョン/コミットログ"
 
 msgid ""
-"    .. note::\n"
 "       export may generate unexpected diff output for merge\n"
 "       changesets, as it will compare the merge changeset against its\n"
 "       first parent only."
 msgstr ""
-"    .. note::\n"
-"       マージ実施リビジョンに対する本コマンドの差分出力が、\n"
-"       期待と異なる場合があるのは、 比較対象が対象リビジョンの第1親に\n"
-"       固定されているためです。"
+"       本コマンドの差分出力が、 マージ実施リビジョンに対しては、\n"
+"       期待と異なる場合があります。 差分出力の際の比較対象が、\n"
+"       指定リビジョンの第1親に固定されているためです。"
 
 msgid ""
 "    Output may be to a file, in which case the name of the file is\n"
@@ -12553,12 +12553,8 @@
 "    手動で衝突を解決してください。 全ての衝突が解消されたならば、\n"
 "    -c/--continue 指定により、 未完了の移植を再開してください。"
 
-msgid ""
-"    .. note::\n"
-"      The -c/--continue option does not reapply earlier options."
-msgstr ""
-"    .. note::\n"
-"      -c/--continue でも、 以前のオプション指定までは再現されません。"
+msgid "      The -c/--continue option does not reapply earlier options."
+msgstr "      -c/--continue でも、 以前のオプション指定までは再現されません。"
 
 msgid ""
 "      - copy a single change to the stable branch and edit its description::"
@@ -12605,23 +12601,23 @@
 
 #, python-format
 msgid "skipping ungraftable merge revision %s\n"
-msgstr "移植できないマージリビジョン %s を飛ばしています\n"
+msgstr "移植できないマージリビジョン %s を無視\n"
 
 #, python-format
 msgid "skipping ancestor revision %s\n"
-msgstr "祖先リビジョン %s を飛ばしています\n"
+msgstr "祖先リビジョン %s を無視\n"
 
 #, python-format
 msgid "skipping revision %s (already grafted to %s)\n"
-msgstr "リビジョン %s を飛ばしています (%s に移植済み)\n"
+msgstr "リビジョン %s を無視 (%s に移植済み)\n"
 
 #, python-format
 msgid "skipping already grafted revision %s (%s also has origin %d)\n"
-msgstr "移植済みリビジョン %s を飛ばしています (%s も同じリビジョン %d 由来)\n"
+msgstr "移植済みリビジョン %s を無視 (%s も同じリビジョン %d 由来)\n"
 
 #, python-format
 msgid "skipping already grafted revision %s (was grafted from %d)\n"
-msgstr "移植済みリビジョン %s を飛ばしています (移植元: %d)\n"
+msgstr "移植済みリビジョン %s を無視 (移植元: %d)\n"
 
 #, python-format
 msgid "grafting revision %s\n"
@@ -12776,7 +12772,7 @@
 
 #, python-format
 msgid " (started at %s)"
-msgstr "(%s から開始)"
+msgstr " (%s から開始)"
 
 msgid "show only help for extensions"
 msgstr "エクステンションのヘルプのみを表示"
@@ -13219,26 +13215,24 @@
 "    コミットログの全文も表示されます。"
 
 msgid ""
-"    .. note::\n"
 "       log -p/--patch may generate unexpected diff output for merge\n"
 "       changesets, as it will only compare the merge changeset against\n"
 "       its first parent. Also, only files different from BOTH parents\n"
 "       will appear in files:."
 msgstr ""
-"    .. note::\n"
-"       マージ実施リビジョンに対する -p/--patch 指定による差分出力が、\n"
-"       期待と異なる場合があるのは、 比較対象が対象リビジョンの第1親に\n"
-"       固定されているためです。 ファイル一覧が予期せぬ内容となるのは、\n"
-"       親同士で内容が異なるファイルのみが列挙されるためです。"
-
-msgid ""
-"    .. note::\n"
+"       -p/--patch 指定による差分出力が、 マージ実施リビジョンに対しては、\n"
+"       期待と異なる場合があります。 差分出力の際の比較対象が、\n"
+"       指定リビジョンの第1親に固定されているためです。 ファイル一覧が、\n"
+"       期待と異なる場合もあります。 更新対象ファイル一覧に列挙されるのは、\n"
+"       マージ対象リビジョンの間で、 内容が異なるファイルのみが、\n"
+"       更新対象として列挙されるためです。"
+
+msgid ""
 "       for performance reasons, log FILE may omit duplicate changes\n"
 "       made on branches and will not show deletions. To see all\n"
 "       changes including duplicates and deletions, use the --removed\n"
 "       switch."
 msgstr ""
-"    .. note::\n"
 "       ファイル名指定付きでの実行では、 複数ブランチ上での同一変更や、\n"
 "       登録除外実施リビジョンは、 性能的な点から表示しません。\n"
 "       重複変更や登録除外を含め、 全てのリビジョンを表示する場合、\n"
@@ -13638,10 +13632,10 @@
 msgstr "フェーズ指定は1つだけです"
 
 #, python-format
-msgid "cannot move %i changesets to a more permissive phase, use --force\n"
-msgstr ""
-"公開方向へのフェーズ変更が %i 個のリビジョンで失敗しました。\n"
-"適宜 --force 指定を行ってください。\n"
+msgid "cannot move %i changesets to a higher phase, use --force\n"
+msgstr ""
+"フェーズ変更による公開制限が %i 個のリビジョンで失敗しました。\n"
+"適宜 --force を指定してください。\n"
 
 #, python-format
 msgid "phase changed for %i changesets\n"
@@ -13775,12 +13769,10 @@
 "    を使用します。 このオプションは、 新規ブランチの作成のみを許可します。"
 
 msgid ""
-"    .. note::\n"
 "      Extra care should be taken with the -f/--force option,\n"
 "      which will push all new heads on all branches, an action which will\n"
 "      almost always cause confusion for collaborators."
 msgstr ""
-"    .. note::\n"
 "      -f/--force を指定した場合、 対象ブランチ上の全ヘッドリビジョンが、\n"
 "      連携先に反映されます。 この挙動は多くの場合、 共同作業者の間で、\n"
 "      無用な混乱の原因となりますので、 指定の際には十分な注意が必要です。"
@@ -14089,17 +14081,13 @@
 msgstr "親リビジョンの状態でファイルを復旧"
 
 msgid ""
-"    .. note::\n"
 "       To check out earlier revisions, you should use :hg:`update REV`.\n"
 "       To cancel an uncommitted merge (and lose your changes),\n"
 "       use :hg:`update --clean .`."
 msgstr ""
-"    .. note::\n"
-"       作業領域を、 別リビジョン時点の内容で更新する場合は\n"
-"       :hg:`update 対象リビジョン` を実行してください。\n"
-"       マージ実施を途中で取り消す場合は\n"
-"       :hg:`update --clean .` を実行してください\n"
-"       (マージにおける修正内容は破棄されます)。"
+"       指定リビジョンでの作業領域の更新は :hg:`update 対象リビジョン`\n"
+"       で行います。 マージ途中での取り消しは :hg:`update --clean .`\n"
+"       で行います (マージにおける修正内容は破棄されます)。"
 
 msgid ""
 "    With no revision specified, revert the specified files or directories\n"
@@ -14454,18 +14442,16 @@
 "    が明示的に指定されない限り、 未登録ファイルは表示されません。"
 
 msgid ""
-"    .. note::\n"
 "       status may appear to disagree with diff if permissions have\n"
 "       changed or a merge has occurred. The standard diff format does\n"
 "       not report permission changes and diff only reports changes\n"
 "       relative to one merge parent."
 msgstr ""
-"    .. note::\n"
-"       権限設定の変更やマージが行われた場合、 差分表示から期待される\n"
-"       結果とは異なる状態が表示される可能性があります。\n"
-"       標準的な差分形式は権限変更の情報を含みませんし、\n"
-"       マージ実施リビジョンに対しては、 一方の親リビジョンとの差分\n"
-"       しか表示しないためです。"
+"       権限設定の変更やマージが行われた場合、 状態表示の結果が、\n"
+"       差分表示から期待される結果とは、 異なる可能性があります。\n"
+"       標準的な差分形式は、 権限変更の情報を含みませんし、\n"
+"       マージ実施リビジョンでの差分表示は、 差分出力の際の比較対象が、\n"
+"       指定リビジョンの第1親に固定されているためです。"
 
 msgid ""
 "    If one revision is given, it is used as the base revision.\n"
@@ -15188,15 +15174,15 @@
 msgstr "hg: %s\n"
 
 msgid "abort: remote error:\n"
-msgstr "中断: 連携エラー:\n"
+msgstr "中止: 連携エラー:\n"
 
 #, python-format
 msgid "abort: %s!\n"
-msgstr "中断: %s!\n"
+msgstr "中止: %s!\n"
 
 #, python-format
 msgid "abort: %s"
-msgstr "中断: %s"
+msgstr "中止: %s"
 
 msgid " empty string\n"
 msgstr " 空文字列\n"
@@ -15216,14 +15202,14 @@
 
 #, python-format
 msgid "abort: error: %s\n"
-msgstr "中断: エラー: %s\n"
+msgstr "中止: エラー: %s\n"
 
 msgid "broken pipe\n"
 msgstr "パイプ破壊(EPIPE)\n"
 
 #, python-format
 msgid "abort: %s: '%s'\n"
-msgstr "中断: %s: '%s'\n"
+msgstr "中止: %s: '%s'\n"
 
 msgid "interrupted!\n"
 msgstr "中断されました!\n"
@@ -15236,7 +15222,7 @@
 "パイプ破壊(EPIPE)\n"
 
 msgid "abort: out of memory\n"
-msgstr "中断: メモリ不足\n"
+msgstr "中止: メモリ不足\n"
 
 msgid "the extension author."
 msgstr "エクステンションの作者"
@@ -15454,7 +15440,7 @@
 
 #, python-format
 msgid "warning: internal:merge cannot merge symlinks for %s\n"
-msgstr "警告: internal:merge はシンボリックリンク %s のマージができません\n"
+msgstr "警告: internal:merge はシンボリックリンク %s をマージできません\n"
 
 msgid ""
 "``internal:dump``\n"
@@ -15712,7 +15698,7 @@
 
 #, python-format
 msgid "unknown encoding '%s'"
-msgstr "不明なエンコーディング '%s' が指定されました"
+msgstr "未知のエンコーディング '%s' が指定されました"
 
 msgid ""
 "``eol(style)``\n"
@@ -15878,7 +15864,7 @@
 
 #, python-format
 msgid "    %s"
-msgstr "   %s"
+msgstr "    %s"
 
 #, python-format
 msgid "alias for: hg %s"
@@ -18969,6 +18955,7 @@
 "    collapses each collection of repositories found within a subdirectory\n"
 "    into a single entry for that subdirectory. Default is False."
 msgstr ""
+"``collapse``\n"
 "    ``descend`` が有効な場合、 サブディレクトリ配下のリポジトリ群も、\n"
 "    単一の一覧ページに表示されます。 同時に ``collapse`` も有効な場合、\n"
 "    サブディレクトリ配下のリポジトリ群は、 対応パスへの誘導を行う、\n"
@@ -19378,8 +19365,8 @@
 msgid "Lastly, there is Mercurial's internal format:"
 msgstr "最後に、 Mercurial 固有の内部形式を示します:"
 
-msgid "- ``1165432709 0`` (Wed Dec 6 13:18:29 2006 UTC)"
-msgstr "- ``1165432709 0`` (2006年12月6日 13:18:29 UTC)"
+msgid "- ``1165411109 0`` (Wed Dec 6 13:18:29 2006 UTC)"
+msgstr "- ``1165411109 0`` (2006年12月6日 13:18:29 UTC)"
 
 msgid ""
 "This is the internal representation format for dates. The first number\n"
@@ -19610,9 +19597,9 @@
 "    HGPLAIN is enabled. Currently the only value supported is \"i18n\",\n"
 "    which preserves internationalization in plain mode."
 msgstr ""
-"    HGPLAIN による設定無効化の際でも、\n"
-"    維持する機能をカンマ区切りで列挙します。\n"
-"    現在利用可能な機能名は \"i18n\" のみで、\n"
+"HGPLAINEXCEPT\n"
+"    HGPLAIN による設定無効化の際でも、 継続して利用したい機能名を、\n"
+"    カンマ区切りで列挙します。 現在利用可能な機能名は \"i18n\" のみで、\n"
 "    国際化関連機能が維持されます。"
 
 msgid ""
@@ -19838,7 +19825,9 @@
 msgid ""
 "``x - y``\n"
 "  Files in x but not in y."
-msgstr "  ファイル群 x のうち、 y に属さないもの。"
+msgstr ""
+"``x - y``\n"
+"  ファイル群 x のうち、 y に属さないもの。"
 
 msgid "The following predicates are supported:"
 msgstr "使用可能な述語を以下に列挙します:"
@@ -22898,7 +22887,7 @@
 "  更にスラッシュ('/')を付与してください::"
 
 msgid "    ssh://example.com//tmp/repository"
-msgstr "     例: ssh://example.com//tmp/repository"
+msgstr "    例: ssh://example.com//tmp/repository"
 
 msgid ""
 "- Mercurial doesn't use its own compression via SSH; the right thing\n"
@@ -23020,7 +23009,7 @@
 msgstr "指定の複製元は、 リビジョン指定付き複製が未サポートです"
 
 msgid "clone from remote to remote not supported"
-msgstr "リモートからリモートの複製は未サポートです"
+msgstr "リモートからリモートへの複製は未サポートです"
 
 msgid "updating to bookmark @\n"
 msgstr "ブックマーク @ への更新中\n"
@@ -23080,15 +23069,6 @@
 msgid "cannot start server at '%s:%d': %s"
 msgstr "'%s:%d' でのサーバ起動に失敗: %s"
 
-msgid "exact revision search"
-msgstr "リビジョン識別子による検索"
-
-msgid "literal keyword search"
-msgstr "キーワードによる検索"
-
-msgid "revset expression search"
-msgstr "revset 記述による検索"
-
 #, python-format
 msgid "(binary file %s, hash: %s)"
 msgstr "(バイナリファイル %s, ハッシュ値: %s)"
@@ -23226,7 +23206,7 @@
 
 #, python-format
 msgid "repository %s already exists"
-msgstr "%sというリポジトリは既に存在しています"
+msgstr "リポジトリ %s は既に存在しています"
 
 #, python-format
 msgid ".hg/sharedpath points to nonexistent directory %s"
@@ -23247,7 +23227,7 @@
 msgstr "中断トランザクションを検出 - 'hg recover' を実施してください"
 
 msgid "rolling back interrupted transaction\n"
-msgstr "中断されたトランザクションをロールバックしています\n"
+msgstr "中断されたトランザクションをロールバック中\n"
 
 msgid "no interrupted transaction available\n"
 msgstr "中断されたトランザクションはありません\n"
@@ -23349,7 +23329,7 @@
 msgstr "連携先の changegroupsubset 機能未対応により、 部分取り込みできません。"
 
 msgid "destination does not support push"
-msgstr "指定の連携先には履歴反映ができません"
+msgstr "指定の連携先には履歴を反映できません"
 
 #, python-format
 msgid "cannot lock source repo, skipping local %s phase update\n"
@@ -23419,7 +23399,7 @@
 msgstr "その処理はサーバで禁止されています"
 
 msgid "locking the remote repository failed"
-msgstr "連携先リポジトリをロックできませんでした"
+msgstr "連携先リポジトリのロックに失敗"
 
 msgid "the server sent an unknown error code"
 msgstr "サーバが未知のエラーコードを返却しました"
@@ -23497,7 +23477,7 @@
 
 #, python-format
 msgid "failed to remove %s from manifest"
-msgstr "マニフェストから %s を削除できませんでした"
+msgstr "マニフェストからの %s の削除に失敗"
 
 #, python-format
 msgid "invalid pattern (%s): %s"
@@ -23531,14 +23511,14 @@
 msgstr "ファイル名の文字大小の問題で %s と %s が衝突します"
 
 msgid "resolving manifests\n"
-msgstr "管理ファイル一覧を解決しています\n"
+msgstr "管理ファイル一覧の解決中\n"
 
 #, python-format
 msgid ""
 "local changed %s which remote deleted\n"
 "use (c)hanged version or (d)elete?$$ &Changed $$ &Delete"
 msgstr ""
-"変更したファイル %s は別リビジョンで登録除外されています。\n"
+"変更したファイル %s が、マージ対象リビジョンで登録除外されています。\n"
 "変更:(c)hanged と登録除外:(d)elete のどちらを採用しますか?$$ &Changed $$ "
 "&Delete"
 
@@ -23547,8 +23527,8 @@
 "remote changed %s which local deleted\n"
 "use (c)hanged version or leave (d)eleted?$$ &Changed $$ &Deleted"
 msgstr ""
-"リモートで変更された %s は、ローカルで削除されています。\n"
-"変更:(c)hanged と削除:(d)elete のどちらを採用しますか?$$ &Changed $$ "
+"登録除外済みのファイル %s が、マージ対象リビジョンで変更されています。\n"
+"変更:(c)hanged と登録除外:(d)elete のどちらを採用しますか?$$ &Changed $$ "
 "&Deleted"
 
 #, python-format
@@ -23557,7 +23537,7 @@
 
 #, python-format
 msgid "getting %s\n"
-msgstr "%s を取得しています\n"
+msgstr "%s の取得中\n"
 
 msgid "updating"
 msgstr "更新中"
@@ -23674,7 +23654,7 @@
 
 #, python-format
 msgid "patching file %s\n"
-msgstr "ファイル %s をパッチ適用しています\n"
+msgstr "ファイル %s にパッチ適用中\n"
 
 #, python-format
 msgid "bad hunk #%d %s (%d %d %d %d)"
@@ -23682,7 +23662,7 @@
 
 #, python-format
 msgid "cannot create %s: destination already exists\n"
-msgstr "%s を作成できません: 作業先にすでに存在します\n"
+msgstr "%s を作成できません: 対象ファイルが既に存在します\n"
 
 #, python-format
 msgid "file %s already exists\n"
@@ -23733,7 +23713,7 @@
 
 #, python-format
 msgid "cannot create %s: destination already exists"
-msgstr "%s を作成できません: 作業先にすでに存在します"
+msgstr "%s を作成できません: 対象ファイルが既に存在します"
 
 #, python-format
 msgid "unsupported parser state: %s"
@@ -23754,6 +23734,9 @@
 msgid "cannot %s; remote repository does not support the %r capability"
 msgstr "%s ができません。 連携先は機能 %r が未サポートです"
 
+msgid "cannot lookup negative revision"
+msgstr "負値のリビジョン指定は無効です"
+
 msgid "cannot change null revision phase"
 msgstr "null リビジョンのフェーズは変更できません"
 
@@ -23775,7 +23758,7 @@
 
 #, python-format
 msgid "killed by signal %d"
-msgstr "%d のシグナルで強制終了しました"
+msgstr "シグナル %d で強制終了されました"
 
 #, python-format
 msgid "saved backup bundle to %s\n"
@@ -25051,6 +25034,10 @@
 msgstr "サブリポジトリの連携先が見つかりません"
 
 #, python-format
+msgid "warning: removing potentially hostile .hg/hgrc in '%s'"
+msgstr "警告: '%s' 中の .hg/hgrc は潜在的な問題となりえるため破棄します"
+
+#, python-format
 msgid "unknown subrepo type %s"
 msgstr "未知のサブリポジトリ種別 '%s'"
 
@@ -25507,14 +25494,14 @@
 
 #, python-format
 msgid "unknown method '%s'"
-msgstr "不明な処理 '%s' が指定されました"
+msgstr "未知の処理 '%s' が指定されました"
 
 msgid "expected a symbol"
 msgstr "シンボル指定が必要です"
 
 #, python-format
 msgid "unknown function '%s'"
-msgstr "不明な関数 '%s' が指定されました"
+msgstr "未知の関数 '%s' が指定されました"
 
 msgid "expected template specifier"
 msgstr "テンプレート指定が必要です"
@@ -25542,7 +25529,7 @@
 
 #. i18n: "get" is a keyword
 msgid "get() expects a dict as first argument"
-msgstr "get() の第1引数は辞書でなければなりません"
+msgstr "get() の第1引数には辞書を指定してください"
 
 #. i18n: "if" is a keyword
 msgid "if expects two or three arguments"
@@ -25634,7 +25621,7 @@
 msgstr "%s.%s の値 ('%s') はバイト数を表す値ではありません"
 
 msgid "enter a commit username:"
-msgstr "コミットするユーザ名を入力してください:"
+msgstr "コミット実施ユーザ名を入力してください:"
 
 #, python-format
 msgid "no username found, using '%s' instead\n"
@@ -25645,13 +25632,13 @@
 
 #, python-format
 msgid "username %s contains a newline\n"
-msgstr "ユーザ名 %s は改行を含んでいます\n"
+msgstr "ユーザ名 %s が改行を含んでいます\n"
 
 msgid "response expected"
-msgstr "レスポンスがありません"
+msgstr "何らかの入力が必要です"
 
 msgid "unrecognized response\n"
-msgstr "認識できないレスポンス\n"
+msgstr "入力が不正です\n"
 
 msgid "password: "
 msgstr "パスワード: "
@@ -25660,14 +25647,14 @@
 msgstr "union 形式のリポジトリは新規作成できません"
 
 msgid "http authorization required"
-msgstr "HTTP 認証に失敗"
+msgstr "HTTP 認証が要求されています"
 
 msgid "http authorization required\n"
-msgstr "HTTP 認証を要求しました\n"
+msgstr "HTTP 認証が要求されています\n"
 
 #, python-format
 msgid "realm: %s\n"
-msgstr "認証領域: %s\n"
+msgstr "認証領域(realm): %s\n"
 
 #, python-format
 msgid "user: %s\n"
@@ -25682,7 +25669,13 @@
 
 #, python-format
 msgid "command '%s' failed: %s"
-msgstr "コマンド '%s' 失敗: %s"
+msgstr "コマンド '%s' が失敗: %s"
+
+msgid "filename ends with '\\', which is invalid on Windows"
+msgstr "ファイル名の末尾が、 Windows 上で不正な文字 '\\' です"
+
+msgid "directory name ends with '\\', which is invalid on Windows"
+msgstr "ディレクトリ名の末尾が、 Windows 上で不正な文字 '\\' です"
 
 #, python-format
 msgid "filename contains '%s', which is reserved on Windows"
@@ -25743,7 +25736,7 @@
 
 #, python-format
 msgid "%s must be nonnegative (see 'hg help dates')"
-msgstr "%s は正の値でなければなりません ('hg help dates' 参照)"
+msgstr "%s には正の値を指定してください ('hg help dates' 参照)"
 
 #, python-format
 msgid "%.0f GB"
@@ -25989,7 +25982,7 @@
 
 #, python-format
 msgid "%s in manifests not found"
-msgstr "管理対象一覧中の %s は存在しません"
+msgstr "管理対象一覧中に %s は存在しません"
 
 #, python-format
 msgid "warning: orphan revlog '%s'"
@@ -26024,4 +26017,4 @@
 msgstr "履歴反映に失敗:"
 
 msgid "number of cpus must be an integer"
-msgstr "CPU 数は数値でなければなりません"
+msgstr "CPU 数には数値を指定してください"
--- a/i18n/pt_BR.po	Fri Nov 29 12:36:28 2013 -0800
+++ b/i18n/pt_BR.po	Sun Dec 01 14:10:53 2013 -0600
@@ -13873,10 +13873,8 @@
 msgstr "apenas uma fase pode ser especificada"
 
 #, python-format
-msgid "cannot move %i changesets to a more permissive phase, use --force\n"
-msgstr ""
-"não é possível mover %i revisões para uma fase mais permissiva sem usar "
-"--force\n"
+msgid "cannot move %i changesets to a higher phase, use --force\n"
+msgstr "não é possível mover %i revisões para uma fase mais alta, use --force\n"
 
 #, python-format
 msgid "phase changed for %i changesets\n"
@@ -14987,7 +14985,7 @@
 "    -f/--force to force the tag commit to be based on a non-head\n"
 "    changeset."
 msgstr ""
-"    A consolidação de revisões de etiqueta são em geral feitas na\n"
+"    Em geral, consolidações de revisões de etiqueta são feitas na\n"
 "    cabeça de um ramo. Se o pai do diretório de trabalho não for a\n"
 "    cabeça de um ramo, :hg:`tag` abortará; use -f/--force para\n"
 "    forçar a consolidação de uma etiqueta a se basear em uma \n"
@@ -25555,6 +25553,10 @@
 msgstr "o caminho padrão para o sub-repositório não foi encontrado"
 
 #, python-format
+msgid "warning: removing potentially hostile .hg/hgrc in '%s'"
+msgstr "aviso: removendo .hg/hgrc potencialmente hostil em '%s'"
+
+#, python-format
 msgid "unknown subrepo type %s"
 msgstr "tipo de sub-repositório %s desconhecido"
 
--- a/mercurial/commands.py	Fri Nov 29 12:36:28 2013 -0800
+++ b/mercurial/commands.py	Sun Dec 01 14:10:53 2013 -0600
@@ -539,7 +539,7 @@
 
       Some examples:
 
-      - start a bisection with known bad revision 12, and good revision 34::
+      - start a bisection with known bad revision 34, and good revision 12::
 
           hg bisect --bad 34
           hg bisect --good 12
@@ -586,7 +586,7 @@
 
           hg log -r "bisect(range)"
 
-      - with the graphlog extension, you can even get a nice graph::
+      - you can even get a nice graph::
 
           hg log --graph -r "bisect(range)"
 
--- a/mercurial/help/config.txt	Fri Nov 29 12:36:28 2013 -0800
+++ b/mercurial/help/config.txt	Sun Dec 01 14:10:53 2013 -0600
@@ -495,8 +495,8 @@
 Example for ``~/.hgrc``::
 
   [extensions]
-  # (the mq extension will get loaded from Mercurial's path)
-  mq =
+  # (the progress extension will get loaded from Mercurial's path)
+  progress =
   # (this extension will get loaded from the file specified)
   myfeature = ~/.hgext/myfeature.py
 
--- a/mercurial/help/glossary.txt	Fri Nov 29 12:36:28 2013 -0800
+++ b/mercurial/help/glossary.txt	Sun Dec 01 14:10:53 2013 -0600
@@ -173,9 +173,9 @@
     system (DVCS) can be described as a directed acyclic graph (DAG),
     consisting of nodes and edges, where nodes correspond to
     changesets and edges imply a parent -> child relation. This graph
-    can be visualized by graphical tools such as :hg:`glog`
-    (graphlog). In Mercurial, the DAG is limited by the requirement
-    for children to have at most two parents.
+    can be visualized by graphical tools such as :hg:`log --graph`. In
+    Mercurial, the DAG is limited by the requirement for children to
+    have at most two parents.
 
 Default branch
     See 'Branch, default'.
@@ -218,7 +218,7 @@
     extensions. See :hg:`help phases`.
 
 Graph
-    See DAG and :hg:`help graphlog`.
+    See DAG and :hg:`log --graph`.
 
 Head
     The term 'head' may be used to refer to both a branch head or a
--- a/tests/test-i18n.t	Fri Nov 29 12:36:28 2013 -0800
+++ b/tests/test-i18n.t	Sun Dec 01 14:10:53 2013 -0600
@@ -38,3 +38,10 @@
   
    pager Verwendet einen externen Pager zum Bl\xc3\xa4ttern in der Ausgabe von Befehlen (esc)
 
+Check Mercurial specific translation problems in each *.po files, and
+tool itself by doctest
+
+  $ cd "$TESTDIR"/../i18n
+  $ python check-translation.py *.po
+  $ python check-translation.py --doctest
+  $ cd $TESTTMP
--- a/tests/test-largefiles.t	Fri Nov 29 12:36:28 2013 -0800
+++ b/tests/test-largefiles.t	Sun Dec 01 14:10:53 2013 -0600
@@ -2192,6 +2192,39 @@
 
   $ cd ..
 
+merge action 'd' for 'local renamed directory to d2/g' which has no filename
+
+  $ hg init merge-action
+  $ cd merge-action
+  $ touch l
+  $ hg add --large l
+  $ mkdir d1
+  $ touch d1/f
+  $ hg ci -Aqm0
+  Invoking status precommit hook
+  A d1/f
+  A l
+  $ echo > d1/f
+  $ touch d1/g
+  $ hg ci -Aqm1
+  Invoking status precommit hook
+  M d1/f
+  A d1/g
+  $ hg up -qr0
+  $ hg mv d1 d2
+  moving d1/f to d2/f (glob)
+  $ hg ci -qm2
+  Invoking status precommit hook
+  A d2/f
+  R d1/f
+  $ hg merge
+  merging d2/f and d1/f to d2/f
+  1 files updated, 1 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  getting changed largefiles
+  0 largefiles updated, 0 removed
+  $ cd ..
+
 Check whether "largefiles" feature is supported only in repositories
 enabling largefiles extension.
 
--- a/tests/test-shelve.t	Fri Nov 29 12:36:28 2013 -0800
+++ b/tests/test-shelve.t	Sun Dec 01 14:10:53 2013 -0600
@@ -539,4 +539,42 @@
   adding file changes
   added 1 changesets with 1 changes to 2 files (+1 heads)
 
+unshelve should leave unknown files alone (issue4113)
+
+  $ echo e > e
+  $ hg shelve
+  shelved as default
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg status
+  ? e
+  $ hg unshelve
+  unshelving change 'default'
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 2 files (+1 heads)
+  $ hg status
+  A d
+  ? e
+  $ cat e
+  e
+
+unshelve should keep a copy of unknown files
+
+  $ hg add e
+  $ hg shelve
+  shelved as default
+  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+  $ echo z > e
+  $ hg unshelve
+  unshelving change 'default'
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 2 changes to 3 files (+1 heads)
+  $ cat e
+  e
+  $ cat e.orig
+  z
+
   $ cd ..