merge with stable
authorMatt Mackall <mpm@selenic.com>
Wed, 02 Jan 2013 00:24:28 -0600
changeset 18206 2c1276825e93
parent 18201 2efc6536ea43 (current diff)
parent 18205 cd64a8a2d0da (diff)
child 18208 f0059ba239cb
merge with stable
mercurial/cmdutil.py
mercurial/hgweb/hgwebdir_mod.py
mercurial/scmutil.py
tests/test-commit-amend.t
--- a/.hgsigs	Thu Dec 20 19:22:12 2012 +0100
+++ b/.hgsigs	Wed Jan 02 00:24:28 2013 -0600
@@ -62,3 +62,4 @@
 d118a4f4fd16d9b558ec3f3e87bfee772861d2b7 0 iD8DBQBQgPV5ywK+sNU5EO8RArylAJ0abcx5NlDjyv3ZDWpAfRIHyRsJtQCgn4TMuEayqgxzrvadQZHdTEU2g38=
 195ad823b5d58c68903a6153a25e3fb4ed25239d 0 iD8DBQBQkuT9ywK+sNU5EO8RAhB4AKCeerItoK2Jipm2cVf4euGofAa/WACeJj3TVd4pFILpb+ogj7ebweFLJi0=
 0c10cf8191469e7c3c8844922e17e71a176cb7cb 0 iD8DBQBQvQWoywK+sNU5EO8RAnq3AJoCn98u4geFx5YaQaeh99gFhCd7bQCgjoBwBSUyOvGd0yBy60E3Vv3VZhM=
+a4765077b65e6ae29ba42bab7834717b5072d5ba 0 iD8DBQBQ486sywK+sNU5EO8RAhmJAJ90aLfLKZhmcZN7kqphigQJxiFOQACeJ5IUZxjGKH4xzi3MrgIcx9n+dB0=
--- a/.hgtags	Thu Dec 20 19:22:12 2012 +0100
+++ b/.hgtags	Wed Jan 02 00:24:28 2013 -0600
@@ -75,3 +75,4 @@
 d118a4f4fd16d9b558ec3f3e87bfee772861d2b7 2.4-rc
 195ad823b5d58c68903a6153a25e3fb4ed25239d 2.4
 0c10cf8191469e7c3c8844922e17e71a176cb7cb 2.4.1
+a4765077b65e6ae29ba42bab7834717b5072d5ba 2.4.2
--- a/i18n/ru.po	Thu Dec 20 19:22:12 2012 +0100
+++ b/i18n/ru.po	Wed Jan 02 00:24:28 2013 -0600
@@ -135,6 +135,7 @@
 # checkin        (в конфиге для encode/decode) сейчас фиксация ???
 # lookup         поиск ???
 # facility       ???
+# bumped         ???
 # obsolete marker маркер устаревшей ревизии
 #
 #
@@ -173,7 +174,7 @@
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
-"POT-Creation-Date: 2012-09-25 15:43+0400\n"
+"POT-Creation-Date: 2012-12-25 17:19+0400\n"
 "PO-Revision-Date: 2011-05-12 23:48+0400\n"
 "Last-Translator: Alexander Sauta <demosito@gmail.com>\n"
 "Language-Team: Russian\n"
@@ -741,7 +742,7 @@
 "email to the Bugzilla email interface to submit comments to bugs.\n"
 "The From: address in the email is set to the email address of the Mercurial\n"
 "user, so the comment appears to come from the Mercurial user. In the event\n"
-"that the Mercurial user email is not recognised by Bugzilla as a Bugzilla\n"
+"that the Mercurial user email is not recognized by Bugzilla as a Bugzilla\n"
 "user, the email associated with the Bugzilla username used to log into\n"
 "Bugzilla is used instead as the source of the comment. Marking bugs fixed\n"
 "works on all supported Bugzilla versions."
@@ -762,7 +763,7 @@
 
 msgid ""
 "bugzilla.version\n"
-"  This access type to use. Values recognised are:"
+"  The access type to use. Values recognized are:"
 msgstr ""
 "bugzilla.version\n"
 "  Тип доступа. Возможны следующие значения:"
@@ -1856,12 +1857,12 @@
 msgid ""
 "    The authormap is a simple text file that maps each source commit\n"
 "    author to a destination commit author. It is handy for source SCMs\n"
-"    that use unix logins to identify authors (eg: CVS). One line per\n"
+"    that use unix logins to identify authors (e.g.: CVS). One line per\n"
 "    author mapping and the line format is::"
 msgstr ""
-"    authormap - это обычный текстовый файл, который позволяет \n"
-"    заменить в конечном хранилище имена авторов фиксаций из\n"
-"    исходного хранилища. Это удобно в случае когда исходная SCM\n"
+"    authormap - это обычный текстовый файл, который позволяет\n"
+"    заменить в конечном хранилище имена авторов ревизий из\n"
+"    исходного хранилища. Это удобно в случае, когда исходная SCM\n"
 "    использует unix-логины в качестве имен авторов (например, CVS).\n"
 "    Каждая строка соответствует одному имени. Формат строки::"
 
@@ -3746,7 +3747,7 @@
 "  # Style to use (optional)\n"
 "  #style = foo\n"
 "  # The URL of the CIA notification service (optional)\n"
-"  # You can use mailto: URLs to send by email, eg\n"
+"  # You can use mailto: URLs to send by email, e.g.\n"
 "  # mailto:cia@cia.vc\n"
 "  # Make sure to set email.from if you do this.\n"
 "  #url = http://cia.vc/\n"
@@ -4291,19 +4292,13 @@
 "ревизии\n"
 "#\n"
 
-msgid "cannot edit history that would orphan nodes"
-msgstr "нельзя редактировать историю, если это оставляет висячие узлы"
-
-msgid "can't edit history with merges"
-msgstr "нельзя редактировать историю со слияниями"
-
-#, python-format
-msgid "%s: empty changeset"
-msgstr "%s: пустой набор изменений"
-
 msgid "Fix up the change and run hg histedit --continue"
 msgstr "Исправьте изменение и запустите hg histedit --continue"
 
+#, python-format
+msgid "%s: empty changeset\n"
+msgstr "%s: пустой набор изменений\n"
+
 msgid ""
 "Make changes as needed, you may commit or record as needed now.\n"
 "When you are finished, run hg histedit --continue to resume."
@@ -4312,6 +4307,10 @@
 "выполнять commit или record. Когда закончите, выполните\n"
 "hg histedit --continue для продолжения."
 
+#, python-format
+msgid "%s: empty changeset"
+msgstr "%s: пустой набор изменений"
+
 msgid "Read history edits from the specified file."
 msgstr "Читать изменения истории из указанного файла."
 
@@ -4369,16 +4368,24 @@
 msgid "histedit requires exactly one parent revision"
 msgstr "histedit требует ровно одну родительскую ревизию"
 
-msgid "histedit: Should update metadata for the following changes:\n"
-msgstr "histedit: Необходимо обновить метаданные для следующих изменений:\n"
-
-#, python-format
-msgid "histedit:  %s to %s\n"
-msgstr "histedit: %s to %s\n"
-
-#, python-format
-msgid "histedit:     moving bookmarks %s\n"
-msgstr "histedit:     перемещаются закладки %s\n"
+msgid "nothing to edit\n"
+msgstr "нечего редактировать\n"
+
+#, python-format
+msgid "working directory parent is not a descendant of %s"
+msgstr "родитель рабочего каталога не является потомком %s"
+
+#, python-format
+msgid "update to %s or descendant and run \"hg histedit --continue\" again"
+msgstr ""
+"обновитеcь до %s или его потомка и выполните \"hg histedit --continue\" снова"
+
+msgid "cannot edit history that would orphan nodes"
+msgstr "нельзя редактировать историю, если это оставляет висячие узлы"
+
+#, python-format
+msgid "cannot edit immutable changeset: %s"
+msgstr "невозможно редактировать неизменяемый набор изменений: %s"
 
 msgid "must specify a rule for each changeset once"
 msgstr "для каждой ревизии требуется указать одно правило"
@@ -4398,6 +4405,10 @@
 msgid "unknown action \"%s\""
 msgstr "неизвестное действие \"%s\""
 
+#, python-format
+msgid "histedit: moving bookmarks %s from %s to %s\n"
+msgstr "histedit: перемещаются закладки %s из %s в %s\n"
+
 msgid "accelerate status report using Linux's inotify service"
 msgstr "ускоренные уведомления об изменениях с использованием Linux inotify"
 
@@ -5190,6 +5201,10 @@
 msgstr "преобразование ревизий"
 
 #, python-format
+msgid "missing largefile '%s' from revision %s"
+msgstr "отсутствует большой файл '%s' из ревизии %s"
+
+#, python-format
 msgid "renamed/copied largefile %s becomes symlink"
 msgstr ""
 "переименованный/скопированный большой файл %s становится символической "
@@ -5409,9 +5424,21 @@
 msgid "largefiles: No remote repo\n"
 msgstr "largefiles: Нет отдалённого хранилища\n"
 
+msgid "largefiles: no files to upload\n"
+msgstr "largefiles: нет файлов для загрузки\n"
+
 msgid "largefiles to upload:\n"
 msgstr "больших файлов для отправки:\n"
 
+#. i18n: column positioning for "hg summary"
+msgid "largefiles: (no remote repo)\n"
+msgstr "largefiles: (нет отдаленного хранилища)\n"
+
+#. i18n: column positioning for "hg summary"
+msgid "largefiles: (no files to upload)\n"
+msgstr "largefiles: (нет для загрузки)\n"
+
+#. i18n: column positioning for "hg summary"
 #, python-format
 msgid "largefiles: %d to upload\n"
 msgstr "largefiles: %d для загрузки\n"
@@ -7120,8 +7147,10 @@
 "    Чтобы удалить существующую очередь, используйте --delete. Нельзя\n"
 "    удалить текущую активную очередь."
 
-msgid "patches applied - cannot set new queue active"
-msgstr "патчи наложены - невозможно сделать новую очередь активной"
+msgid "new queue created, but cannot make active as patches are applied"
+msgstr ""
+"новая очередь создана, но невозможно сделать ее активной,\n"
+"т.к. есть наложенные патчи"
 
 msgid "cannot delete queue that does not exist"
 msgstr "невозможно удалить несуществующую очередь"
@@ -7181,8 +7210,14 @@
 msgid "%d unapplied"
 msgstr "%d неналожено"
 
+#. i18n: column positioning for "hg summary"
+#, python-format
+msgid "mq:     %s\n"
+msgstr "mq:         %s\n"
+
+#. i18n: column positioning for "hg summary"
 msgid "mq:     (empty queue)\n"
-msgstr "mq:     (очередь пуста)\n"
+msgstr "mq:         (очередь пуста)\n"
 
 msgid ""
 "``mq()``\n"
@@ -7253,31 +7288,52 @@
 
 msgid ""
 "  [usersubs]\n"
-"  # key is subscriber email, value is a comma-separated list of repo glob\n"
-"  # patterns\n"
+"  # key is subscriber email, value is a comma-separated list of repo "
+"patterns\n"
 "  user@host = pattern"
 msgstr ""
 "  [usersubs]\n"
-"  # ключ - email подписчика, значение - разделенный запятыми список "
-"шаблонов\n"
-"  # в стиле glob (glob patterns)\n"
+"  # ключ - email подписчика, значение - разделенный запятыми список шаблонов "
+"хранилищ\n"
 "  пользователь@хост = шаблон"
 
 msgid ""
 "  [reposubs]\n"
-"  # key is glob pattern, value is a comma-separated list of subscriber\n"
-"  # emails\n"
+"  # key is repo pattern, value is a comma-separated list of subscriber "
+"emails\n"
 "  pattern = user@host"
 msgstr ""
 "  [reposubs]\n"
 "  # ключ - шаблон в стиле glob, значение - разделенный запятыми список\n"
 "  # email-адресов\n"
-"  шаблон = пользователь@хост"
-
-msgid ""
-"Glob patterns are matched against absolute path to repository\n"
-"root."
-msgstr "Шаблоны сопоставляются с абсолютными путями к корню хранилища."
+"  pattern = пользователь@хост"
+
+msgid ""
+"A ``pattern`` is a ``glob`` matching the absolute path to a repository,\n"
+"optionally combined with a revset expression. A revset expression, if\n"
+"present, is separated from the glob by a hash. Example::"
+msgstr ""
+"Здесь ``pattern`` - шаблон формата ``glob``, совпадающий с абсолютным путем\n"
+"хранилища, вместе с необязательным выражением revset. Если выражение revset\n"
+"присутствует, оно отделяется от пути с помощью ``#``. Например::"
+
+msgid ""
+"  [reposubs]\n"
+"  */widgets#branch(release) = qa-team@example.com"
+msgstr ""
+"  [reposubs]\n"
+"  */widgets#branch(release) = qa-team@example.com"
+
+msgid ""
+"This sends to ``qa-team@example.com`` whenever a changeset on the "
+"``release``\n"
+"branch triggers a notification in any repository ending in ``widgets``."
+msgstr ""
+"С такими настройками письма будут отправляться на адрес ``qa-team@example."
+"com``\n"
+"при каждом изменении на ветке ``release`` в любом хранилище, оканчивающемся "
+"на\n"
+"``widgets``."
 
 msgid ""
 "In order to place them under direct user management, ``[usersubs]`` and\n"
@@ -7811,11 +7867,11 @@
 msgstr "    Наконец, сам патч, как его сгенерировала :hg:`export`."
 
 msgid ""
-"    With the -d/--diffstat or -c/--confirm options, you will be presented\n"
+"    With the -d/--diffstat or --confirm options, you will be presented\n"
 "    with a final summary of all messages and asked for confirmation before\n"
 "    the messages are sent."
 msgstr ""
-"    Если указан параметр -d/--diffstat или -c/--confirm, вам будет\n"
+"    Если указан параметр -d/--diffstat или --confirm, вам будет\n"
 "    показана итоговая сводка всех сообщений и будет запрошено\n"
 "    подтверждение отправки."
 
@@ -8441,11 +8497,6 @@
 msgid "rebase merging completed\n"
 msgstr "слияние перебазирования завершено\n"
 
-msgid "warning: new changesets detected on source branch, not stripping\n"
-msgstr ""
-"внимание: новые наборы изменений обнаружены на ветке-источнике, не "
-"срезаются\n"
-
 msgid "rebase completed\n"
 msgstr "перебазирование завершено\n"
 
@@ -8489,6 +8540,11 @@
 msgid "source is ancestor of destination"
 msgstr "источник является предком ревизии назначения"
 
+msgid "warning: new changesets detected on source branch, not stripping\n"
+msgstr ""
+"внимание: новые наборы изменений обнаружены на ветке-источнике, не "
+"срезаются\n"
+
 #, python-format
 msgid "updating bookmark %s\n"
 msgstr "обновление закладки %s\n"
@@ -8607,12 +8663,12 @@
 msgstr " и "
 
 #, python-format
-msgid "record this change to %r?"
-msgstr "записать это изменение файла %r?"
-
-#, python-format
-msgid "record change %d/%d to %r?"
-msgstr "записать изменение %d/%d в %r?"
+msgid "record this change to '%s'?"
+msgstr "записать это изменение в '%s'?"
+
+#, python-format
+msgid "record change %d/%d to '%s'?"
+msgstr "записать изменение %d/%d в '%s'?"
 
 msgid "hg record [OPTION]... [FILE]..."
 msgstr "hg record [ПАРАМЕТР]... [ФАЙЛ]..."
@@ -9483,10 +9539,6 @@
 msgstr "плохая строка в .hg/bookmarks: %r\n"
 
 #, python-format
-msgid "bookmark '%s' contains illegal character"
-msgstr "закладка '%s' содержит недопустимый символ"
-
-#, python-format
 msgid "branch %s not found"
 msgstr "ветка %s не найдена"
 
@@ -9531,6 +9583,9 @@
 msgid "%s: unknown bundle version %s"
 msgstr "%s: неизвестная версия комплекта %s"
 
+msgid "no node"
+msgstr "нет узла"
+
 msgid "empty username"
 msgstr "пустое имя пользователя"
 
@@ -9645,69 +9700,85 @@
 msgstr "не удалось запустить дочерний процесс"
 
 # может сделать "набор изм-й" или "ревизия" для экономии места?
+#. i18n: column positioning for "hg log"
 #, python-format
 msgid "changeset:   %d:%s\n"
-msgstr "набор изменений:  %d:%s\n"
-
+msgstr "набор изм-й:   %d:%s\n"
+
+#. i18n: column positioning for "hg log"
 #, python-format
 msgid "branch:      %s\n"
-msgstr "ветка:            %s\n"
-
+msgstr "ветка:         %s\n"
+
+#. i18n: column positioning for "hg log"
 #, python-format
 msgid "bookmark:    %s\n"
-msgstr "закладка:         %s\n"
-
+msgstr "закладка:      %s\n"
+
+#. i18n: column positioning for "hg log"
 #, python-format
 msgid "tag:         %s\n"
-msgstr "метка:            %s\n"
-
+msgstr "метка:         %s\n"
+
+#. i18n: column positioning for "hg log"
 #, python-format
 msgid "phase:       %s\n"
-msgstr "фаза:             %s\n"
-
+msgstr "фаза:          %s\n"
+
+#. i18n: column positioning for "hg log"
 #, python-format
 msgid "parent:      %d:%s\n"
-msgstr "родитель:         %d:%s\n"
-
+msgstr "родитель:      %d:%s\n"
+
+#. i18n: column positioning for "hg log"
 #, python-format
 msgid "manifest:    %d:%s\n"
-msgstr "манифест:         %d:%s\n"
-
+msgstr "манифест:      %d:%s\n"
+
+#. i18n: column positioning for "hg log"
 #, python-format
 msgid "user:        %s\n"
-msgstr "пользователь:     %s\n"
-
+msgstr "автор:         %s\n"
+
+#. i18n: column positioning for "hg log"
 #, python-format
 msgid "date:        %s\n"
-msgstr "дата:             %s\n"
-
+msgstr "дата:          %s\n"
+
+#. i18n: column positioning for "hg log"
+msgid "files:"
+msgstr "файлы:"
+
+#. i18n: column positioning for "hg log"
 msgid "files+:"
 msgstr "файлов+:"
 
+#. i18n: column positioning for "hg log"
 msgid "files-:"
 msgstr "файлов-:"
 
-msgid "files:"
-msgstr "файлы:"
-
+#. i18n: column positioning for "hg log"
 #, python-format
 msgid "files:       %s\n"
-msgstr "файлы:            %s\n"
-
+msgstr "файлы:         %s\n"
+
+#. i18n: column positioning for "hg log"
 #, python-format
 msgid "copies:      %s\n"
-msgstr "скопировано:      %s\n"
-
+msgstr "скопировано:   %s\n"
+
+#. i18n: column positioning for "hg log"
 #, python-format
 msgid "extra:       %s=%s\n"
-msgstr "дополнительно:    %s=%s\n"
+msgstr "доп-но.:       %s=%s\n"
 
 msgid "description:\n"
 msgstr "описание:\n"
 
+#. i18n: column positioning for "hg log"
 #, python-format
 msgid "summary:     %s\n"
-msgstr "сводка:           %s\n"
+msgstr "сводка:        %s\n"
 
 #, python-format
 msgid "%s: no key named '%s'"
@@ -10427,7 +10498,7 @@
 "          hg bisect --bad"
 
 msgid ""
-"      - mark the current revision, or a known revision, to be skipped (eg. "
+"      - mark the current revision, or a known revision, to be skipped (e.g. "
 "if\n"
 "        that revision is not usable because of another issue)::"
 msgstr ""
@@ -10635,6 +10706,25 @@
 "    -i/--inactive не задан. Если не указано ИМЯ, текущая активная закладка\n"
 "    будет помечена как неактивная.    "
 
+msgid "bookmark names cannot consist entirely of whitespace"
+msgstr "имя закладки не может состоять из одних пробелов"
+
+#, python-format
+msgid "bookmark '%s' already exists (use -f to force)"
+msgstr "закладка '%s' уже существует (-f - принудительно) "
+
+msgid "a bookmark cannot have the name of an existing branch"
+msgstr "закладка не может называться так же, как существующая ветка"
+
+msgid "--delete and --rename are incompatible"
+msgstr "нельзя одновременно использовать --delete и --rename"
+
+msgid "--rev is incompatible with --delete"
+msgstr "нельзя указывать одновременно --rev и --delete"
+
+msgid "--rev is incompatible with --rename"
+msgstr "--rev несовместим с --rename"
+
 msgid "bookmark name required"
 msgstr "укажите имя закладки"
 
@@ -10642,25 +10732,15 @@
 msgid "bookmark '%s' does not exist"
 msgstr "закладки '%s' не существует"
 
-#, python-format
-msgid "bookmark '%s' already exists (use -f to force)"
-msgstr "закладка '%s' уже существует (-f - принудительно) "
-
 msgid "new bookmark name required"
 msgstr "укажите новое имя закладки"
 
-msgid "bookmark name cannot contain newlines"
-msgstr "имя закладки не может содержать символ перевода строки"
-
-msgid "bookmark names cannot consist entirely of whitespace"
-msgstr "имя закладки не может состоять из одних пробелов"
-
-msgid "a bookmark cannot have the name of an existing branch"
-msgstr "закладка не может называться так же, как существующая ветка"
-
 msgid "no bookmarks set\n"
 msgstr "нет ни одной закладки\n"
 
+msgid "no active bookmark\n"
+msgstr "нет активных закладок\n"
+
 msgid "set branch name even if it shadows an existing branch"
 msgstr "использовать имя ветки, даже если оно скрывает уже существующую ветку"
 
@@ -11447,10 +11527,10 @@
 
 msgid ""
 "    If you pass a revlog index, the revlog's DAG is emitted. If you list\n"
-"    revision numbers, they get labelled in the output as rN."
+"    revision numbers, they get labeled in the output as rN."
 msgstr ""
 "    Если вы передадите индекс revlog, отображается граф revlog. Если вы\n"
-"    укажете номера ревизий, они помечаются как rN."
+"    укажете номера ревизий, в выводе они помечаются как rN."
 
 msgid ""
 "    Otherwise, the changelog DAG of the current repo is emitted.\n"
@@ -11632,6 +11712,9 @@
 "    Возвращает список нулей и единиц, означающих неизвестен/известен.\n"
 "    "
 
+msgid "markers flag"
+msgstr "markers flag"
+
 msgid "[OBSOLETED [REPLACEMENT] [REPL... ]"
 msgstr "[УСТАРЕВШЕЕ [ЗАМЕНА] [ЗАМЕНА... ]"
 
@@ -12381,12 +12464,12 @@
 "используйте \"hg help %s\" чтобы получить полную справку\n"
 
 #, python-format
-msgid ""
-"\n"
-"use \"hg -v help %s\" to show more info\n"
-msgstr ""
-"\n"
-"используйте \"hg -v help %s\" для дополнительной информации\n"
+msgid "use \"hg -v help %s\" to show more complete help and the global options"
+msgstr "\"hg -v help %s\" - полная справка и глобальные параметры"
+
+#, python-format
+msgid "use \"hg -v help %s\" to show the global options"
+msgstr "\"hg -v help %s\" - показать глобальные параметры"
 
 msgid "basic commands:"
 msgstr "Основные команды:"
@@ -12426,6 +12509,10 @@
 "глобальные параметры"
 
 #, python-format
+msgid "use \"hg help -v %s\" to show more complete help"
+msgstr "используйте \"hg -v help %s\" для более подробной информации"
+
+#, python-format
 msgid ""
 "\n"
 "use \"hg help -c %s\" to see help for the %s command\n"
@@ -13615,6 +13702,10 @@
 "    "
 
 #, python-format
+msgid "not removing %s: no tracked files\n"
+msgstr "%s не удален: нет отслеживаемых файлов\n"
+
+#, python-format
 msgid "not removing %s: file is untracked\n"
 msgstr "%s не удален: файл не контролируется\n"
 
@@ -14246,9 +14337,10 @@
 "    С опцией --remote также проверяет пути по умолчанию на наличие\n"
 "    входящих и исходящих изменений. Это может занять много времени."
 
+#. i18n: column positioning for "hg summary"
 #, python-format
 msgid "parent: %d:%s "
-msgstr "родитель: %d:%s "
+msgstr "родитель:   %d:%s "
 
 msgid " (empty repository)"
 msgstr " (пустое хранилище)"
@@ -14256,12 +14348,14 @@
 msgid " (no revision checked out)"
 msgstr " (нет извлеченной ревизии)"
 
+#. i18n: column positioning for "hg summary"
 #, python-format
 msgid "branch: %s\n"
-msgstr "ветка: %s\n"
-
+msgstr "ветка:      %s\n"
+
+#. i18n: column positioning for "hg summary"
 msgid "bookmarks:"
-msgstr "закладки:"
+msgstr "закладки:   "
 
 #, python-format
 msgid "%d modified"
@@ -14318,17 +14412,21 @@
 msgid " (new branch head)"
 msgstr " (новая голова ветки)"
 
+#. i18n: column positioning for "hg summary"
 #, python-format
 msgid "commit: %s\n"
-msgstr "фиксация: %s\n"
-
+msgstr "фиксация:   %s\n"
+
+#. i18n: column positioning for "hg summary"
 msgid "update: (current)\n"
 msgstr "обновление: (текущее)\n"
 
+#. i18n: column positioning for "hg summary"
 #, python-format
 msgid "update: %d new changesets (update)\n"
 msgstr "обновление: %d новых наборов изменений (обновление)\n"
 
+#. i18n: column positioning for "hg summary"
 #, python-format
 msgid "update: %d new changesets, %d branch heads (merge)\n"
 msgstr "обновление: %d новых наборов изменений, %d голов (слияние)\n"
@@ -14348,12 +14446,14 @@
 msgid "%d outgoing bookmarks"
 msgstr "%d исходящих закладок"
 
+#. i18n: column positioning for "hg summary"
 #, python-format
 msgid "remote: %s\n"
-msgstr "отдалённо: %s\n"
-
+msgstr "отдалённый: %s\n"
+
+#. i18n: column positioning for "hg summary"
 msgid "remote: (synced)\n"
-msgstr "отдалённо: (синхронизировано)\n"
+msgstr "отдалённый: (синхронизировано)\n"
 
 msgid "force tag"
 msgstr "установить метку принудительно"
@@ -14651,6 +14751,14 @@
 "    изменений, манифесте и отслеживаемых файлах, а также целостность\n"
 "    их взаимосвязей и индексов."
 
+msgid ""
+"    Please see http://mercurial.selenic.com/wiki/RepositoryCorruption\n"
+"    for more information about recovery from corruption of the\n"
+"    repository."
+msgstr ""
+"    Подробнее о восстановлении поврежденного хранилища см.\n"
+"    http://mercurial.selenic.com/wiki/RepositoryCorruption ."
+
 msgid "output version and copyright information"
 msgstr "показать версию и копирайт"
 
@@ -15064,6 +15172,10 @@
 msgstr "внимание: не удалось найти команды в %s\n"
 
 #, python-format
+msgid "invalid value %r for option %s, expected int"
+msgstr "неверное значение %r параметра %s, ожидается целое число"
+
+#, python-format
 msgid "couldn't find merge tool %s\n"
 msgstr "не удалось найти программу для слияния %s\n"
 
@@ -16820,9 +16932,9 @@
 "``post-<command>``\n"
 "  Run after successful invocations of the associated command. The\n"
 "  contents of the command line are passed as ``$HG_ARGS`` and the result\n"
-"  code in ``$HG_RESULT``. Parsed command line arguments are passed as \n"
+"  code in ``$HG_RESULT``. Parsed command line arguments are passed as\n"
 "  ``$HG_PATS`` and ``$HG_OPTS``. These contain string representations of\n"
-"  the python data internally passed to <command>. ``$HG_OPTS`` is a \n"
+"  the python data internally passed to <command>. ``$HG_OPTS`` is a\n"
 "  dictionary of options (with unspecified options set to their defaults).\n"
 "  ``$HG_PATS`` is a list of arguments. Hook failure is ignored."
 msgstr ""
@@ -16844,7 +16956,7 @@
 "  are passed as ``$HG_PATS`` and ``$HG_OPTS``. These contain string\n"
 "  representations of the data internally passed to <command>. ``$HG_OPTS``\n"
 "  is a  dictionary of options (with unspecified options set to their\n"
-"  defaults). ``$HG_PATS`` is a list of arguments. If the hook returns \n"
+"  defaults). ``$HG_PATS`` is a list of arguments. If the hook returns\n"
 "  failure, the command doesn't execute and Mercurial returns the failure\n"
 "  code."
 msgstr ""
@@ -16855,8 +16967,8 @@
 "  и ``$HG_OPTS``. Они содержат строковое представление данных\n"
 "  Python, передаваемых <команде> внутренней реализацией. ``$HG_OPTS`` -\n"
 "  это словарь опций (опущенные опции установлены в значения по\n"
-"  умолчанию).``$HG_PATS`` - список аргументов. Неудачное завершение\n"
-"  хука игнорируется."
+"  умолчанию).``$HG_PATS`` - список аргументов. Если хук возвращает ошибку,\n"
+"  команда не выполняется, и Mercurial возвращает код ошибки."
 
 msgid ""
 "``prechangegroup``\n"
@@ -17524,9 +17636,34 @@
 "    если хранилище назначения не задано."
 
 msgid ""
+"Custom paths can be defined by assigning the path to a name that later can "
+"be\n"
+"used from the command line. Example::"
+msgstr ""
+"Собственные пути могут быть определены с помощью задания имени-псевдонима для\n"
+"пути, которое может использоваться в командной строке. Например::"
+
+msgid ""
+"    [paths]\n"
+"    my_path = http://example.com/path"
+msgstr ""
+"    [paths]\n"
+"    my_path = http://example.com/path"
+
+msgid "To push to the path defined in ``my_path`` run the command::"
+msgstr ""
+"Чтобы протолкнуть изменения по пути, определенному в ``my_path``,\n"
+"выполните команду::"
+
+msgid "    hg push my_path"
+msgstr "    hg push my_path"
+
+msgid ""
+"\n"
 "``phases``\n"
 "----------"
 msgstr ""
+"\n"
 "``phases``\n"
 "----------"
 
@@ -17623,7 +17760,7 @@
 "    Profiling format.  Specific to the ``ls`` instrumenting profiler.\n"
 "    Default: text."
 msgstr ""
-"т``format``\n"
+"``format``\n"
 "    Формат профилирования. Специфичен для инструментирующего профилировщика "
 "``ls``.\n"
 "    По умолчанию: text (текстовый)."
@@ -18661,7 +18798,7 @@
 
 msgid ""
 "``stripes``\n"
-"    How many lines a \"zebra stripe\" should span in multiline output.\n"
+"    How many lines a \"zebra stripe\" should span in multi-line output.\n"
 "    Default is 1; set to 0 to disable."
 msgstr ""
 "``stripes``\n"
@@ -20350,7 +20487,7 @@
 "  - paths\n"
 "  - collections"
 
-msgid "The ``web`` options are thorougly described in :hg:`help config`."
+msgid "The ``web`` options are thoroughly described in :hg:`help config`."
 msgstr "Настройки секции ``web`` подробно описаны в :hg:`help config`."
 
 msgid ""
@@ -21859,6 +21996,13 @@
 msgid "clone from remote to remote not supported"
 msgstr "клонирование с отдаленной машины на отдаленную не поддерживается"
 
+msgid "updating to bookmark @\n"
+msgstr "обновление на закладку @\n"
+
+#, python-format
+msgid "updating to bookmark @ on branch %s\n"
+msgstr "обновление на закладку @ на ветке %s\n"
+
 #, python-format
 msgid "updating to branch %s\n"
 msgstr "обновляемся на ветку %s\n"
@@ -22054,10 +22198,6 @@
 msgstr "внимание: игнорируем неизвестного родителя %s рабочей копии!\n"
 
 #, python-format
-msgid "%r cannot be used in a tag name"
-msgstr "%r нельзя использовать в имени метки"
-
-#, python-format
 msgid "warning: tag %s conflicts with existing branch name\n"
 msgstr "внимание: метка %s конфликтует с существующим именем ветки\n"
 
@@ -22180,13 +22320,18 @@
 msgstr "хранилище назначения не поддерживает push"
 
 #, python-format
-msgid "push includes an obsolete changeset: %s!"
+msgid "push includes obsolete changeset: %s!"
 msgstr "push включает устаревшую ревизию: %s!"
 
 #, python-format
-msgid "push includes an unstable changeset: %s!"
+msgid "push includes unstable changeset: %s!"
 msgstr "push включает нестабильную ревизию: %s!"
 
+# NOT-SURE bad
+#, python-format
+msgid "push includes bumped changeset: %s!"
+msgstr "push включает \"прибитую\" (bumped) ревизию: %s!"
+
 # CHECK ME NOT-SURE
 #, python-format
 msgid "updating %s to public failed!\n"
@@ -22491,6 +22636,9 @@
 "ошибка разбора маркера устаревшей ревизии: слишком малая длина метаданных,\n"
 "ожидалось %d байт, получено %d"
 
+msgid "bad obsolescence marker detected: invalid successors nullid"
+msgstr "неверный маркер устаревшей ревизии: неверный nullid потомков"
+
 #, python-format
 msgid "unknown key: %r"
 msgstr "неизвестный ключ: %r"
@@ -22677,9 +22825,6 @@
 msgid "index %s is corrupted"
 msgstr "индекс %s поврежден"
 
-msgid "no node"
-msgstr "нет узла"
-
 msgid "ambiguous identifier"
 msgstr "неоднозначный идентификатор"
 
@@ -22762,7 +22907,7 @@
 
 msgid ""
 "    - ``good``, ``bad``, ``skip``: csets explicitly marked as good/bad/skip\n"
-"    - ``goods``, ``bads``      : csets topologicaly good/bad\n"
+"    - ``goods``, ``bads``      : csets topologically good/bad\n"
 "    - ``range``              : csets taking part in the bisection\n"
 "    - ``pruned``             : csets that are goods, bads or skipped\n"
 "    - ``untested``           : csets whose fate is yet unknown\n"
@@ -22775,8 +22920,8 @@
 "    - ``range``              : находящиеся в рамках бисекции\n"
 "    - ``pruned``             : goods, bads или пропущенные\n"
 "    - ``untested``           : те, чья судьба ещё неизвестна\n"
-"    - ``ignored``            : игнорируемые ввиду топологии графа ревизий    "
-"- ``current``            : обрабатываемый в данный момент"
+"    - ``ignored``            : игнорируемые ввиду топологии графа ревизий\n"
+"    - ``current``            : обрабатываемый в данный момент"
 
 #. i18n: "bisect" is a keyword
 msgid "bisect requires a string"
@@ -22834,6 +22979,20 @@
 "    `re:`, используйте префикс `literal:`."
 
 msgid ""
+"``bumped()``\n"
+"    Mutable changesets marked as successors of public changesets."
+msgstr ""
+"``bumped()``\n"
+"    Изменяемые (mutable) ревизии, помеченные как потомки публичных ревизий."
+
+msgid "    Only non-public and non-obsolete changesets can be `bumped`."
+msgstr "    Только непубличные и неустаревшие ревизии могут быть `bumped`."
+
+#. i18n: "bumped" is a keyword
+msgid "bumped takes no arguments"
+msgstr "bumped не требует аргументов"
+
+msgid ""
 "``children(set)``\n"
 "    Child changesets of changesets in set."
 msgstr ""
@@ -23112,6 +23271,17 @@
 "    Элементы множества, у которых в этом множестве нет детей."
 
 msgid ""
+"``hidden()``\n"
+"    Hidden changesets."
+msgstr ""
+"``hidden()``\n"
+"    Скрытые наборы изменений."
+
+#. i18n: "hidden" is a keyword
+msgid "hidden takes no arguments"
+msgstr "hidden не требует аргументов"
+
+msgid ""
 "``keyword(string)``\n"
 "    Search commit message, user name, and names of changed files for\n"
 "    string. The match is case-insensitive."
@@ -23181,6 +23351,17 @@
 msgstr "merge не требует аргументов"
 
 msgid ""
+"``branchpoint()``\n"
+"    Changesets with more than one child."
+msgstr ""
+"``branchpoint()``\n"
+"    Наборы изменений, имеющие более одного дочернего набора изменений."
+
+#. i18n: "branchpoint" is a keyword
+msgid "branchpoint takes no arguments"
+msgstr "branchpoint не требует аргументов"
+
+msgid ""
 "``min(set)``\n"
 "    Changeset with lowest revision number in set."
 msgstr ""
@@ -23580,6 +23761,10 @@
 msgid "no changes found (ignored %d secret changesets)\n"
 msgstr "изменений не найдено (игнорируем %d секретных наборов изменений)\n"
 
+#, python-format
+msgid "%r cannot be used in a name"
+msgstr "%r нельзя использовать в имени"
+
 # }}} revsets
 #, python-format
 msgid "ui.portablefilenames value is invalid ('%s')"
@@ -24000,10 +24185,10 @@
 
 msgid ""
 ":escape: Any text. Replaces the special XML/XHTML characters \"&\", \"<\"\n"
-"    and \">\" with XML entities."
+"    and \">\" with XML entities, and filters out NUL characters."
 msgstr ""
 ":escape: Произвольный текст. Заменяет спецсимволы XML/XHTML \"&\", \"<\"\n"
-"    и \">\" соответствующими сущностями XML."
+"    и \">\" соответствующими сущностями XML и отфильтровывает NUL-символы."
 
 msgid ":fill68: Any text. Wraps the text to fit in 68 columns."
 msgstr ":fill68: Произвольный текст. Делает строки не длиннее 68 символов."
@@ -24178,6 +24363,15 @@
 msgstr ""
 ":emailuser: Произвольный текст. Возвращает пользователя из email-адреса."
 
+msgid "fill expects one or two arguments"
+msgstr "fill требует один или два аргумента"
+
+msgid "fill expects an integer width"
+msgstr "fill ожидает целое число в качестве ширины"
+
+msgid "date expects one or two arguments"
+msgstr "date требует один или два аргумента"
+
 msgid ":author: String. The unmodified author of the changeset."
 msgstr ":author: Строка. Неизмененный автор набора изменений."
 
@@ -24271,6 +24465,40 @@
 ":node: Строка. Хэш набора изменений в виде 40-значной шестнадцатеричной\n"
 "    строки."
 
+msgid ""
+":p1rev: Integer. The repository-local revision number of the changeset's\n"
+"    first parent, or -1 if the changeset has no parents."
+msgstr ""
+":p1rev: целое число. Локальный номер ревизии первого родителя набора\n"
+"    изменений, либо -1, если родителей у него нет."
+
+msgid ""
+":p2rev: Integer. The repository-local revision number of the changeset's\n"
+"    second parent, or -1 if the changeset has no second parent."
+msgstr ""
+":p2rev: целое число. Локальный номер ревизии второго родителя набора\n"
+"    изменений, либо -1, если второго родителе у него нет."
+
+msgid ""
+":p1node: String. The identification hash of the changeset's first parent,\n"
+"    as a 40 digit hexadecimal string. If the changeset has no parents, all\n"
+"    digits are 0."
+msgstr ""
+":p1node: Строка. Хэш первого родителя набора изменений в виде 40-значного\n"
+"    шестнадцатиричного числа. Если у данного набора изменений родителя нет,\n"
+"    все цифры равны 0."
+
+msgid ""
+":p2node: String. The identification hash of the changeset's second\n"
+"    parent, as a 40 digit hexadecimal string. If the changeset has no "
+"second\n"
+"    parent, all digits are 0."
+msgstr ""
+":p2node: Строка. Хэш второго родителя набора изменений в виде 40-значного\n"
+"    шестнадцатиричного числа. Если у данного набора изменений второго "
+"родителя\n"
+"    нет, все цифры равны 0."
+
 msgid ":phase: String. The changeset phase name."
 msgstr ":phase: Строка. Имя фазы набора изменений."
 
@@ -24308,9 +24536,29 @@
 msgstr "ожидается спецификатор шаблона"
 
 #, python-format
+msgid "template filter '%s' is not compatible with keyword '%s'"
+msgstr "фильтр шаблона '%s' несовместм с ключевым словом '%s'"
+
+#, python-format
 msgid "filter %s expects one argument"
 msgstr "фильтр %s требует один аргумент"
 
+#. i18n: "join" is a keyword
+msgid "join expects one or two arguments"
+msgstr "join требует один или два аргумента"
+
+#. i18n: "sub" is a keyword
+msgid "sub expects three arguments"
+msgstr "sub требует трех аргументов"
+
+#. i18n: "if" is a keyword
+msgid "if expects two or three arguments"
+msgstr "if требует два или три аргумента"
+
+#. i18n: "ifeq" is a keyword
+msgid "ifeq expects three or four arguments"
+msgstr "ifeq требует трех или четырех аргументов"
+
 msgid "unmatched quotes"
 msgstr "незакрытые кавычки"
 
@@ -24699,6 +24947,36 @@
 msgid "push failed:"
 msgstr "ошибка при проталкивании:"
 
+#~ msgid "can't edit history with merges"
+#~ msgstr "нельзя редактировать историю со слияниями"
+
+#~ msgid "histedit: Should update metadata for the following changes:\n"
+#~ msgstr "histedit: Необходимо обновить метаданные для следующих изменений:\n"
+
+#~ msgid "histedit:  %s to %s\n"
+#~ msgstr "histedit: %s to %s\n"
+
+#~ msgid "patches applied - cannot set new queue active"
+#~ msgstr "патчи наложены - невозможно сделать новую очередь активной"
+
+#~ msgid ""
+#~ "Glob patterns are matched against absolute path to repository\n"
+#~ "root."
+#~ msgstr "Шаблоны сопоставляются с абсолютными путями к корню хранилища."
+
+#~ msgid "bookmark '%s' contains illegal character"
+#~ msgstr "закладка '%s' содержит недопустимый символ"
+
+#~ msgid "bookmark name cannot contain newlines"
+#~ msgstr "имя закладки не может содержать символ перевода строки"
+
+#~ msgid ""
+#~ "\n"
+#~ "use \"hg -v help %s\" to show more info\n"
+#~ msgstr ""
+#~ "\n"
+#~ "используйте \"hg -v help %s\" для дополнительной информации\n"
+
 # BUG one line?
 #~ msgid ""
 #~ "hg rebase [-s REV | -b REV] [-d REV] [options]\n"
@@ -25153,9 +25431,6 @@
 #~ msgid "[OPTION]... REVISION..."
 #~ msgstr "[ПАРАМЕТР]... РЕВИЗИЯ..."
 
-#~ msgid "use \"hg -v help %s\" to show more info"
-#~ msgstr "используйте \"hg -v help %s\" для дополнительной информации"
-
 #~ msgid "There is no Mercurial repository here (.hg not found)"
 #~ msgstr "Здесь нет хранилища Mercurial (.hg не обнаружен)"
 
--- a/mercurial/cmdutil.py	Thu Dec 20 19:22:12 2012 +0100
+++ b/mercurial/cmdutil.py	Wed Jan 02 00:24:28 2013 -0600
@@ -1617,7 +1617,7 @@
     ui.note(_('amending changeset %s\n') % old)
     base = old.p1()
 
-    wlock = lock = None
+    wlock = lock = newid = None
     try:
         wlock = repo.wlock()
         lock = repo.lock()
@@ -1633,10 +1633,13 @@
             # First, do a regular commit to record all changes in the working
             # directory (if there are any)
             ui.callhooks = False
+            currentbookmark = repo._bookmarkcurrent
             try:
+                repo._bookmarkcurrent = None
                 opts['message'] = 'temporary amend commit for %s' % old
                 node = commit(ui, repo, commitfunc, pats, opts)
             finally:
+                repo._bookmarkcurrent = currentbookmark
                 ui.callhooks = True
             ctx = repo[node]
 
@@ -1781,6 +1784,8 @@
             ui.note(_('stripping amended changeset %s\n') % old)
             repair.strip(ui, repo, old.node(), topic='amend-backup')
     finally:
+        if newid is None:
+            repo.dirstate.invalidate()
         lockmod.release(wlock, lock)
     return newid
 
--- a/mercurial/hgweb/hgwebdir_mod.py	Thu Dec 20 19:22:12 2012 +0100
+++ b/mercurial/hgweb/hgwebdir_mod.py	Wed Jan 02 00:24:28 2013 -0600
@@ -184,7 +184,13 @@
                         fname = virtual[7:]
                     else:
                         fname = req.form['static'][0]
-                    static = templater.templatepath('static')
+                    static = self.ui.config("web", "static", None,
+                                            untrusted=False)
+                    if not static:
+                        tp = self.templatepath or templater.templatepath()
+                        if isinstance(tp, str):
+                            tp = [tp]
+                        static = [os.path.join(p, 'static') for p in tp]
                     return (staticfile(static, fname, req),)
 
                 # top-level index
--- a/mercurial/scmutil.py	Thu Dec 20 19:22:12 2012 +0100
+++ b/mercurial/scmutil.py	Wed Jan 02 00:24:28 2013 -0600
@@ -262,8 +262,12 @@
     def _cansymlink(self):
         return util.checklink(self.base)
 
+    @util.propertycache
+    def _chmod(self):
+        return util.checkexec(self.base)
+
     def _fixfilemode(self, name):
-        if self.createmode is None:
+        if self.createmode is None or not self._chmod:
             return
         os.chmod(name, self.createmode & 0666)
 
--- a/mercurial/templates/paper/help.tmpl	Thu Dec 20 19:22:12 2012 +0100
+++ b/mercurial/templates/paper/help.tmpl	Wed Jan 02 00:24:28 2013 -0600
@@ -1,9 +1,5 @@
 {header}
 <title>Help: {topic}</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-tags" title="Atom feed for {repo|escape}" />
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-tags" title="RSS feed for {repo|escape}" />
 </head>
 <body>
 
--- a/mercurial/templates/paper/helptopics.tmpl	Thu Dec 20 19:22:12 2012 +0100
+++ b/mercurial/templates/paper/helptopics.tmpl	Wed Jan 02 00:24:28 2013 -0600
@@ -1,9 +1,5 @@
 {header}
 <title>Help: {title}</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-tags" title="Atom feed for {repo|escape}" />
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-tags" title="RSS feed for {repo|escape}" />
 </head>
 <body>
 
--- a/tests/test-commit-amend.t	Thu Dec 20 19:22:12 2012 +0100
+++ b/tests/test-commit-amend.t	Wed Jan 02 00:24:28 2013 -0600
@@ -58,11 +58,34 @@
   summary:     base
   
 
-Add new file:
+Check proper abort for empty message
 
+  $ cat > editor.sh << '__EOF__'
+  > #!/bin/sh
+  > echo "" > "$1"
+  > __EOF__
   $ echo b > b
-  $ hg ci --amend -Am 'amend base1 new file'
-  adding b
+  $ hg add b
+  $ hg summary
+  parent: 1:43f1ba15f28a tip
+   amend base1
+  branch: default
+  commit: 1 added, 1 unknown
+  update: (current)
+  $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit --amend
+  transaction abort!
+  rollback completed
+  abort: empty commit message
+  [255]
+  $ hg summary
+  parent: 1:43f1ba15f28a tip
+   amend base1
+  branch: default
+  commit: 1 added, 1 unknown
+  update: (current)
+
+Add new file:
+  $ hg ci --amend -m 'amend base1 new file'
   saved backup bundle to $TESTTMP/.hg/strip-backup/43f1ba15f28a-amend-backup.hg (glob)
 
 Remove file that was added in amended commit:
@@ -220,6 +243,24 @@
      book1                     1:48bb6e53a15f
    * book2                     1:48bb6e53a15f
 
+abort does not loose bookmarks
+
+  $ cat > editor.sh << '__EOF__'
+  > #!/bin/sh
+  > echo "" > "$1"
+  > __EOF__
+  $ echo a >> a
+  $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit --amend
+  transaction abort!
+  rollback completed
+  abort: empty commit message
+  [255]
+  $ hg book
+     book1                     1:48bb6e53a15f
+   * book2                     1:48bb6e53a15f
+  $ hg revert -Caq
+  $ rm editor.sh
+
   $ echo '[defaults]' >> $HGRCPATH
   $ echo "commit=-d '0 0'" >> $HGRCPATH