Hello community,
here is the log from the commit of package mercurial for openSUSE:12.1 checked in at 2011-10-25 16:16:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:12.1/mercurial (Old)
and /work/SRC/openSUSE:12.1/.mercurial.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mercurial", Maintainer is "tiwai@suse.com"
Changes:
--------
--- /work/SRC/openSUSE:12.1/mercurial/mercurial.changes 2011-10-24 13:07:19.000000000 +0200
+++ /work/SRC/openSUSE:12.1/.mercurial.new/mercurial.changes 2011-10-25 16:16:56.000000000 +0200
@@ -1,0 +2,21 @@
+Fri Oct 21 09:11:56 UTC 2011 - suse@ammler.ch
+
+- upstream update 1.9.3
+ * setup: build inotify for sys.platform='linux*'
+ * bundlerepo: add argument check before unlink
+ * hgweb: properly check for bookmarks when drawing graph
+ * http: handle push of bundles > 2 GB again (issue3017)
+ * keyword: preserve file mode when overwriting
+ * osutil: avoid accidentally destroying the True object in isgui (issue2937)
+ * patch: correctly handle non-tabular Subject: line
+ * patch: handle 'gitpatches' being empty, but not none
+ * record: use command wrapper properly for qnew/qrefresh (issue3001)
+ * setdiscovery: fix hang when #heads>200 (issue2971)
+ * ui: also swap sys.stdout with self.fout in _readline
+ * ui: write traceback to self.ferr
+ * url: Remove the proxy env variables only when needed (issue2451)
+ * url: parse fragments first (issue2997)
+ * util: fix crash converting an invalid future date to string
+ * util: wrap lines with multi-byte characters correctly (issue2943)
+
+-------------------------------------------------------------------
Old:
----
mercurial-1.9.2.tar.gz
New:
----
mercurial-1.9.3.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ mercurial.spec ++++++
--- /var/tmp/diff_new_pack.FmWdUP/_old 2011-10-25 16:16:58.000000000 +0200
+++ /var/tmp/diff_new_pack.FmWdUP/_new 2011-10-25 16:16:58.000000000 +0200
@@ -19,7 +19,7 @@
Name: mercurial
Summary: Scalable Distributed SCM
-Version: 1.9.2
+Version: 1.9.3
Release: 4
License: GPLv2+
Group: Development/Tools/Version Control
++++++ mercurial-1.9.2.tar.gz -> mercurial-1.9.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/.hgsigs new/mercurial-1.9.3/.hgsigs
--- old/mercurial-1.9.2/.hgsigs 2011-08-26 23:07:16.000000000 +0200
+++ new/mercurial-1.9.3/.hgsigs 2011-10-01 22:49:29.000000000 +0200
@@ -41,3 +41,4 @@
733af5d9f6b22387913e1d11350fb8cb7c1487dd 0 iD8DBQBN5q/8ywK+sNU5EO8RArRGAKCNGT94GKIYtSuwZ57z1sQbcw6uLACfffpbMV4NAPMl8womAwg+7ZPKnIU=
de9eb6b1da4fc522b1cab16d86ca166204c24f25 0 iD8DBQBODhfhywK+sNU5EO8RAr2+AJ4ugbAj8ae8/K0bYZzx3sascIAg1QCeK3b+zbbVVqd3b7CDpwFnaX8kTd4=
4a43e23b8c55b4566b8200bf69fe2158485a2634 0 iD8DBQBONzIMywK+sNU5EO8RAj5SAJ0aPS3+JHnyI6bHB2Fl0LImbDmagwCdGbDLp1S7TFobxXudOH49bX45Iik=
+d629f1e89021103f1753addcef6b310e4435b184 0 iD8DBQBOWAsBywK+sNU5EO8RAht4AJwJl9oNFopuGkj5m8aKuf7bqPkoAQCeNrEm7UhFsZKYT5iUOjnMV7s2LaM=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/.hgtags new/mercurial-1.9.3/.hgtags
--- old/mercurial-1.9.2/.hgtags 2011-08-26 23:07:16.000000000 +0200
+++ new/mercurial-1.9.3/.hgtags 2011-10-01 22:49:29.000000000 +0200
@@ -53,3 +53,4 @@
733af5d9f6b22387913e1d11350fb8cb7c1487dd 1.8.4
de9eb6b1da4fc522b1cab16d86ca166204c24f25 1.9
4a43e23b8c55b4566b8200bf69fe2158485a2634 1.9.1
+d629f1e89021103f1753addcef6b310e4435b184 1.9.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/PKG-INFO new/mercurial-1.9.3/PKG-INFO
--- old/mercurial-1.9.2/PKG-INFO 2011-08-26 23:07:22.000000000 +0200
+++ new/mercurial-1.9.3/PKG-INFO 2011-10-01 22:49:36.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: mercurial
-Version: 1.9.2
+Version: 1.9.3
Summary: Scalable distributed SCM
Home-page: http://mercurial.selenic.com/
Author: Matt Mackall
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/contrib/setup3k.py new/mercurial-1.9.3/contrib/setup3k.py
--- old/mercurial-1.9.2/contrib/setup3k.py 2011-08-26 23:07:11.000000000 +0200
+++ new/mercurial-1.9.3/contrib/setup3k.py 2011-10-01 22:49:22.000000000 +0200
@@ -309,7 +309,7 @@
else:
extmodules.append(Extension('mercurial.osutil', ['mercurial/osutil.c']))
-if sys.platform == 'linux2' and os.uname()[2] > '2.6':
+if sys.platform.startswith('linux') and os.uname()[2] > '2.6':
# The inotify extension is only usable with Linux 2.6 kernels.
# You also need a reasonably recent C library.
# In any case, if it fails to build the error will be skipped ('optional').
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/doc/hg.1 new/mercurial-1.9.3/doc/hg.1
--- old/mercurial-1.9.2/doc/hg.1 2011-08-26 23:07:17.000000000 +0200
+++ new/mercurial-1.9.3/doc/hg.1 2011-10-01 22:49:31.000000000 +0200
@@ -1785,7 +1785,7 @@
.
do not display revision or any of its ancestors
.TP
-.B \-h, \-\-hidden
+.B \-\-hidden
.
show hidden changesets
.TP
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/doc/hg.1.html new/mercurial-1.9.3/doc/hg.1.html
--- old/mercurial-1.9.2/doc/hg.1.html 2011-08-26 23:07:19.000000000 +0200
+++ new/mercurial-1.9.3/doc/hg.1.html 2011-10-01 22:49:33.000000000 +0200
@@ -1520,7 +1520,7 @@
-P, --prune
do not display revision or any of its ancestors |
--h, --hidden |
+--hidden
show hidden changesets |
-p, --patch |
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/hgext/inotify/server.py new/mercurial-1.9.3/hgext/inotify/server.py
--- old/mercurial-1.9.2/hgext/inotify/server.py 2011-08-26 23:07:11.000000000 +0200
+++ new/mercurial-1.9.3/hgext/inotify/server.py 2011-10-01 22:49:22.000000000 +0200
@@ -443,7 +443,7 @@
if err.args[0] != errno.EPIPE:
raise
-if sys.platform == 'linux2':
+if sys.platform.startswith('linux'):
import linuxserver as _server
else:
raise ImportError
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/hgext/keyword.py new/mercurial-1.9.3/hgext/keyword.py
--- old/mercurial-1.9.2/hgext/keyword.py 2011-08-26 23:07:11.000000000 +0200
+++ new/mercurial-1.9.3/hgext/keyword.py 2011-10-01 22:49:22.000000000 +0200
@@ -270,7 +270,10 @@
data, found = _shrinktext(data, re_kw.subn)
if found:
self.ui.note(msg % f)
+ fpath = self.repo.wjoin(f)
+ mode = os.lstat(fpath).st_mode
self.repo.wwrite(f, data, ctx.flags(f))
+ os.chmod(fpath, mode)
if kwcmd:
self.repo.dirstate.normal(f)
elif self.record:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/hgext/record.py new/mercurial-1.9.3/hgext/record.py
--- old/mercurial-1.9.2/hgext/record.py 2011-08-26 23:07:11.000000000 +0200
+++ new/mercurial-1.9.3/hgext/record.py 2011-10-01 22:49:22.000000000 +0200
@@ -386,7 +386,10 @@
dorecord(ui, repo, commands.commit, 'commit', False, *pats, **opts)
-def qrefresh(ui, repo, *pats, **opts):
+def qrefresh(origfn, ui, repo, *pats, **opts):
+ if not opts['interactive']:
+ return origfn(ui, repo, *pats, **opts)
+
mq = extensions.find('mq')
def committomq(ui, repo, *pats, **opts):
@@ -419,6 +422,11 @@
dorecord(ui, repo, committomq, 'qnew', False, *pats, **opts)
+def qnew(origfn, ui, repo, patch, *args, **opts):
+ if opts['interactive']:
+ return qrecord(ui, repo, patch, *args, **opts)
+ return origfn(ui, repo, patch, *args, **opts)
+
def dorecord(ui, repo, commitfunc, cmdsuggest, backupall, *pats, **opts):
if not ui.interactive():
raise util.Abort(_('running non-interactively, use %s instead') %
@@ -584,15 +592,10 @@
mq.cmdtable['^qnew'][1][:] + diffopts,
_('hg qrecord [OPTION]... PATCH [FILE]...'))
- _wrapcmd('qnew', mq.cmdtable, qrecord, _("interactively record a new patch"))
+ _wrapcmd('qnew', mq.cmdtable, qnew, _("interactively record a new patch"))
_wrapcmd('qrefresh', mq.cmdtable, qrefresh,
_("interactively select changes to refresh"))
def _wrapcmd(cmd, table, wrapfn, msg):
- '''wrap the command'''
- def wrapper(orig, *args, **kwargs):
- if kwargs['interactive']:
- return wrapfn(*args, **kwargs)
- return orig(*args, **kwargs)
- entry = extensions.wrapcommand(table, cmd, wrapper)
+ entry = extensions.wrapcommand(table, cmd, wrapfn)
entry[1].append(('i', 'interactive', None, msg))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/i18n/ja.po new/mercurial-1.9.3/i18n/ja.po
--- old/mercurial-1.9.2/i18n/ja.po 2011-08-26 23:07:11.000000000 +0200
+++ new/mercurial-1.9.3/i18n/ja.po 2011-10-01 22:49:22.000000000 +0200
@@ -104,10 +104,11 @@
msgstr ""
"Project-Id-Version: Mercurial\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-07-31 22:58+0900\n"
+"POT-Creation-Date: 2011-09-21 15:49+0900\n"
"PO-Revision-Date: 2009-11-16 21:24+0100\n"
"Last-Translator: Japanese translation team \n"
"Language-Team: Japanese\n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -486,14 +487,10 @@
" :``{hgweb}``: Base URL for browsing Mercurial repositories."
msgstr ""
-#, fuzzy
msgid ""
" Default ``changeset {node|short} in repo {root} refers to bug\n"
" {bug}.\\ndetails:\\n\\t{desc|tabindent}``"
msgstr ""
-"リポジトリ {root} のリビジョン {node|short} がバグ {bug} に関連。\n"
-"詳細:\n"
-"\t{desc|tabindent}"
msgid ""
"bugzilla.strip\n"
@@ -631,9 +628,8 @@
" incoming.bugzilla = python:hgext.bugzilla.hook"
msgstr ""
-#, fuzzy
msgid "Example configurations:"
-msgstr "設定ファイル"
+msgstr "設定例:"
msgid ""
"XMLRPC example configuration. This uses the Bugzilla at\n"
@@ -774,13 +770,12 @@
msgid "cannot find bugzilla user id for %s or %s"
msgstr "%s か %s の buzilla ユーザ ID を見つけることができません"
-#, fuzzy
msgid "configuration 'bzemail' missing"
-msgstr "設定ファイル"
+msgstr "'bzemail' 設定が見つかりません"
-#, fuzzy, python-format
+#, python-format
msgid "default bugzilla user %s email not found"
-msgstr "副リポジトリ %s の が見つかりません"
+msgstr "デフォルトの bugzilla ユーザ %s のメールアドレスが見つかりません"
#, python-format
msgid "bugzilla version %s not supported"
@@ -799,9 +794,9 @@
msgid "hook type %s does not pass a changeset id"
msgstr "フック種別 %s によりチェンジセットの処理が抑止されました"
-#, fuzzy, python-format
+#, python-format
msgid "Bugzilla error: %s"
-msgstr "hg: 解析エラー: %s\n"
+msgstr "Bugzilla エラー: %s"
msgid "command to display child changesets"
msgstr "子チェンジセット表示のコマンド"
@@ -1077,13 +1072,10 @@
"terminfo mode, for example), set the following configuration option::"
msgstr ""
-#, fuzzy
msgid ""
" [color]\n"
" mode = terminfo"
msgstr ""
-" [collections]\n"
-" /foo = /foo"
msgid ""
"Any value other than 'ansi', 'win32', 'terminfo', or 'auto' will\n"
@@ -1902,9 +1894,8 @@
msgid "updating tags\n"
msgstr "タグの更新中\n"
-#, fuzzy
msgid "updating bookmarks\n"
-msgstr "ブックマーク %s の更新中\n"
+msgstr "ブックマークの更新中\n"
#, python-format
msgid "%s is not a valid start revision"
@@ -1939,9 +1930,9 @@
msgid "bad mtn packet - unable to read full packet read %s of %s"
msgstr ""
-#, fuzzy, python-format
+#, python-format
msgid "mtn command '%s' returned %s"
-msgstr "コマンド '%s' 失敗: %s"
+msgstr "mtn コマンド '%s' の実行結果: %s"
#, python-format
msgid "copying file in renamed directory from '%s' to '%s'"
@@ -2195,9 +2186,8 @@
msgid "end-of-line check failed:\n"
msgstr ""
-#, fuzzy
msgid "the eol extension is incompatible with the win32text extension\n"
-msgstr "eol エクステンションと win32text エクステンションは併用できません"
+msgstr "eol エクステンションと win32text エクステンションは併用できません\n"
#, python-format
msgid "inconsistent newline style in %s\n"
@@ -5771,9 +5761,8 @@
msgid "nothing to rebase\n"
msgstr "リベースの必要はありません\n"
-#, fuzzy
msgid "cannot collapse multiple named branches"
-msgstr "ファイル名 '%s' のデコードに失敗"
+msgstr ""
msgid "rebasing"
msgstr "リベース実施中"
@@ -6027,17 +6016,15 @@
msgid "hardlinks are not supported on this system"
msgstr "このシステム上ではハードリンクが未サポートです"
-#, fuzzy
msgid "must specify local origin repository"
-msgstr "%s はローカルの Mercurial リポジトリではありません"
+msgstr "ローカルの元リポジトリ指定が必要です"
#, python-format
msgid "relinking %s to %s\n"
msgstr "%s から %s にハードリンク中\n"
-#, fuzzy
msgid "there is nothing to relink\n"
-msgstr "マージの必要がありません"
+msgstr "ハードリンクの必要はありません\n"
#, python-format
msgid "tip has %d files, estimated total number of files: %s\n"
@@ -6066,9 +6053,9 @@
msgid "relinking"
msgstr "再リンク中"
-#, fuzzy, python-format
+#, python-format
msgid "relinked %d files (%s reclaimed)\n"
-msgstr "%d ファイルを再リンク(%d バイトの節約)\n"
+msgstr "%d ファイルを再リンク (%s バイトの節約)\n"
msgid "[ORIGIN]"
msgstr "[ORIGIN]"
@@ -8775,10 +8762,14 @@
msgid ""
" If one or more REVs are given, only branch heads on the branches\n"
-" associated with the specified changesets are shown."
-msgstr ""
-" 1つ以上のリビジョンが指定された場合、 本コマンドは指定リビジョンの\n"
-" 属する名前付きブランチのブランチヘッドを表示します。"
+" associated with the specified changesets are shown. This means\n"
+" that you can use :hg:`heads foo` to see the heads on a branch\n"
+" named ``foo``."
+msgstr ""
+" 1つ以上のリビジョンが指定された場合、 指定されたリビジョンの属する\n"
+" 名前付きブランチにおけるヘッドのみを表示します。\n"
+" この挙動は、 :hg:`heads foo` を実行することで、\n"
+" 名前付きブランチ ``foo`` におけるヘッドを表示できることを意味します。"
msgid ""
" If -c/--closed is specified, also show branch heads marked closed\n"
@@ -10001,13 +9992,13 @@
"specified\n"
" files, discarding any previous merge attempts. Re-merging is not\n"
" performed for files already marked as resolved. Use ``--all/-a``\n"
-" to selects all unresolved files. ``--tool`` can be used to specify\n"
+" to select all unresolved files. ``--tool`` can be used to specify\n"
" the merge tool used for the given files. It overrides the HGMERGE\n"
" environment variable and your configuration files."
msgstr ""
" - :hg:`resolve [--tool TOOL] FILE...`: 指定ファイルのマージを\n"
" 再度実施します。 この際には、 直前までの変更内容は破棄されます。\n"
-" 衝突解消済みのファイルに対しては、 マージの実施はありません。\n"
+" 衝突解消済みのファイルに対しては、 マージは再実施されません。\n"
" 全ての未解消ファイルに適用する場合は ``--all/-a`` を指定します。\n"
" ``--tool`` を使用することで、 ファイルのマージに使用するコマンドを\n"
" 指定可能です。 このオプションによる指定は、 HGMERGE 環境変数や\n"
@@ -10132,12 +10123,10 @@
msgstr "リビジョンと日時は同時には指定出来ません"
msgid "uncommitted merge with no revision specified"
-msgstr "マージが未コミットですが、対象リビジョンが明示されていません"
+msgstr "マージが未コミットな上に、対象リビジョンが明示されていません"
msgid "use \"hg update\" or see \"hg help revert\""
-msgstr ""
-"リビジョンを明示して \"hg update\" するか、\"hg help revert\" を参照して下さ"
-"い"
+msgstr "\"hg update\" 実施を検討するか、\"hg help revert\" を参照して下さい"
msgid "no files or directories specified"
msgstr "ファイル/ディレクトリ指定がありません"
@@ -10146,7 +10135,7 @@
"uncommitted merge, use --all to discard all changes, or 'hg update -C .' to "
"abort the merge"
msgstr ""
-"マージが未コミットです -変更全破棄なら --all 付き実行、マージ取りやめなら "
+"マージが未コミットです: 変更全破棄なら --all 付き実行、マージ取りやめなら "
"'hg update -C .' 実行"
#, python-format
@@ -10154,7 +10143,7 @@
"uncommitted changes, use --all to discard all changes, or 'hg update %s' to "
"update"
msgstr ""
-"変更が未コミットです -変更全破棄なら --all 付き実行、作業領域更新なら 'hg "
+"変更が未コミットです: 変更全破棄なら --all 付き実行、作業領域更新なら 'hg "
"update %s' 実行"
#, python-format
@@ -11747,6 +11736,8 @@
"Syntax\n"
"------"
msgstr ""
+"文法\n"
+"------"
msgid ""
"A configuration file consists of sections, led by a ``[section]`` header\n"
@@ -12009,7 +12000,9 @@
" Optional. Username to authenticate with. If not given, and the\n"
" remote site requires basic or digest authentication, the user will\n"
" be prompted for it. Environment variables are expanded in the\n"
-" username letting you do ``foo.username = $USER``."
+" username letting you do ``foo.username = $USER``. If the URI\n"
+" includes a username, only ``[auth]`` entries with a matching\n"
+" username or without a username will be considered."
msgstr ""
msgid ""
@@ -13277,6 +13270,15 @@
msgstr ""
msgid ""
+"``guessmime``\n"
+" Control MIME types for raw download of file content.\n"
+" Set to True to let hgweb guess the content type from the file\n"
+" extension. This will serve HTML files as ``text/html`` and might\n"
+" allow cross-site scripting attacks when serving untrusted\n"
+" repositories. Default is False."
+msgstr ""
+
+msgid ""
"``allow_read``\n"
" If the user has not already been denied repository access due to\n"
" the contents of deny_read, this list determines whether to grant\n"
@@ -14692,17 +14694,24 @@
"Synopsis\n"
"--------"
msgstr ""
+"概要\n"
+"--------"
msgid ""
"The Mercurial system uses a file called ``.hgignore`` in the root\n"
"directory of a repository to control its behavior when it searches\n"
"for files that it is not currently tracking."
msgstr ""
+"Mercurial では、リポジトリのルート直下に置かれた ``.hgignore``\n"
+"と呼ばれるファイルを使用して、構成管理対象からの\n"
+"ファイルの除外を制御します。"
msgid ""
"Description\n"
"-----------"
msgstr ""
+"詳細\n"
+"-----------"
msgid ""
"The working directory of a Mercurial repository will often contain\n"
@@ -14713,18 +14722,35 @@
"created manually. It is typically put under version control, so that\n"
"the settings will propagate to other repositories with push and pull."
msgstr ""
+"Mercurial の作業領域には、 構成管理対象にしたくないファイルも\n"
+"多数存在し得ます。 例えば、 エディタの作成するバックアップファイルや\n"
+"コンパイラが生成する中途/最終成果物等です。\n"
+"作業領域のルート直下に置いた ``.hgignore`` ファイルにおいて、\n"
+"対象ファイルの名前を列挙することで、 これらを無視することができます。\n"
+"``.hgignore`` は明示的に手動で作成しなければなりません。\n"
+"一般的には、 このファイルも構成管理対象に含めますので、\n"
+"更新内容の反映や取り込みによって、 設定内容は他のリポジトリにも伝播します。"
msgid ""
"An untracked file is ignored if its path relative to the repository\n"
"root directory, or any prefix path of that path, is matched against\n"
"any pattern in ``.hgignore``."
msgstr ""
+"構成管理対象外のファイルが、 作業領域のルートからの相対パス、\n"
+"ないしそのパスの先頭部分が、 ``.hgignore``\n"
+"に記述されたパターンと合致する場合、\n"
+"そのファイルは Mercurial からは無視されます。"
msgid ""
"For example, say we have an untracked file, ``file.c``, at\n"
"``a/b/file.c`` inside our repository. Mercurial will ignore ``file.c``\n"
"if any pattern in ``.hgignore`` matches ``a/b/file.c``, ``a/b`` or ``a``."
msgstr ""
+"例えば、 構成管理対象外のファイル ``file.c`` が、\n"
+"作業領域の ``a/b/file.c`` に位置すると仮定します。\n"
+"``a/b/file.c``、 ``a/b`` ないし ``a`` といったパターンが\n"
+"``.hgignore`` に記述されている場合、\n"
+"Mercurial はこの ``file.c`` を無視します。"
msgid ""
"In addition, a Mercurial configuration file can reference a set of\n"
@@ -14732,12 +14758,22 @@
"key on the ``[ui]`` section of :hg:`help config` for details of how to\n"
"configure these files."
msgstr ""
+"作業領域毎の無視設定に加えて、 ユーザ毎、 ないしシステム毎の\n"
+"無視設定ファイルを指定することが可能です:\n"
+"これらのファイルの設定に関する詳細は、\n"
+":hg:`help config` の ``[ui]`` セクションにおける\n"
+"``ignore`` 設定キーの説明を参照してください。"
msgid ""
"To control Mercurial's handling of files that it manages, many\n"
"commands support the ``-I`` and ``-X`` options; see\n"
":hg:`help ` and :hg:`help patterns` for details."
msgstr ""
+"既に構成管理下にあるファイルに対して、\n"
+"Mercurial コマンドの実施要否を制御するには、\n"
+"多くのコマンドでサポートされている ``-I`` および ``-X``\n"
+"オプションの使用が便利です。 詳細に関しては、\n"
+":hg:`help ` および :hg:`help patterns` を参照してください。"
msgid ""
"An ignore file is a plain text file consisting of a list of patterns,\n"
@@ -14745,20 +14781,25 @@
"character is treated as a comment character, and the ``\\`` character\n"
"is treated as an escape character."
msgstr ""
+"無視設定ファイルは、 1行1パターンでパターンが列挙された、\n"
+"単純なテキストファイルです。 空の行は無視されます。\n"
+"``#`` 文字はコメント文字、 ``\\`` 文字はエスケープ文字として扱われます。"
msgid ""
"Mercurial supports several pattern syntaxes. The default syntax used\n"
"is Python/Perl-style regular expressions."
msgstr ""
+"Mercurial の無視設定ファイルでは、 複数のパターン文法を利用できます。\n"
+"デフォルトの文法は Python/Perl 形式の正規表現です。"
msgid "To change the syntax used, use a line of the following form::"
-msgstr ""
+msgstr "文法を変更するには、 以下のような形式の行を記述します::"
msgid " syntax: NAME"
-msgstr ""
+msgstr " syntax: NAME"
msgid "where ``NAME`` is one of the following:"
-msgstr ""
+msgstr "``NAME`` 部分には、 以下のいずれかを記述します:"
msgid ""
"``regexp``\n"
@@ -14766,11 +14807,17 @@
"``glob``\n"
" Shell-style glob."
msgstr ""
+"``regexp``\n"
+" Python/Perl 形式の正規表現 (※訳注: ``re`` でも可)\n"
+"``glob``\n"
+" Shell 形式のパターンマッチ"
msgid ""
"The chosen syntax stays in effect when parsing all patterns that\n"
"follow, until another syntax is selected."
msgstr ""
+"文法変更の指定は、 次に文法を指定するまでに記述された、\n"
+"全てのパターンに対して有効です。"
msgid ""
"Neither glob nor regexp patterns are rooted. A glob-syntax pattern of\n"
@@ -14778,31 +14825,51 @@
"and a regexp pattern of the form ``\\.c$`` will do the same. To root a\n"
"regexp pattern, start it with ``^``."
msgstr ""
+"glob と regexp のいずれの場合も、 リポジトリルートからの相対パスに対する\n"
+"部分一致で合致とみなされます。(※訳注: コマンドに対する ``-I`` および\n"
+"``-X`` オプションの場合、 ルートからの相対パスに対して、\n"
+"先頭からの合致が要求されます)\n"
+"glob 文法での ``*.c`` パターン指定は、\n"
+"任意のディレクトリにおける ``.c`` 拡張子ファイルに合致しますし、\n"
+"regexp 文法での ``\\.c$`` パターン指定も、\n"
+"同様のファイルに合致します。\n"
+"ルート直下のファイルにのみ合致させたい場合、\n"
+"regexp 文法であれば、 パターン記述を ``^`` で開始してください。"
msgid ""
"Example\n"
"-------"
msgstr ""
+"記述例\n"
+"-------"
msgid "Here is an example ignore file. ::"
-msgstr ""
+msgstr "無視設定ファイルの記述例を以下に示します。 ::"
msgid ""
" # use glob syntax.\n"
" syntax: glob"
msgstr ""
+" # Shell 形式パターンマッチ文法を指定。\n"
+" syntax: glob"
msgid ""
" *.elc\n"
" *.pyc\n"
" *~"
msgstr ""
+" *.elc\n"
+" *.pyc\n"
+" *~"
msgid ""
" # switch to regexp syntax.\n"
" syntax: regexp\n"
" ^\\.pc/\n"
msgstr ""
+" # 正規表現文法への切り替え。\n"
+" syntax: regexp\n"
+" ^\\.pc/\n"
msgid ""
"Mercurial's internal web server, hgweb, can serve either a single\n"
@@ -15115,9 +15182,10 @@
"at the current directory; a glob such as ``*.c`` will only match files\n"
"in the current directory ending with ``.c``."
msgstr ""
-"拡張ワイルドカード合致の場合、 名前の前に ``glob:`` を記述します。 この\n"
-"形式では、 現ディレクトリからの相対になりますので、 ``*.c`` パターンは\n"
-"末尾が ``.c`` で終わる現ディレクトリ中のファイルとのみ合致します。"
+"拡張ワイルドカード合致の場合、 名前の前に ``glob:`` を記述します。\n"
+"この形式は現ディレクトリからの相対合致になりますので、\n"
+"``*.c`` パターンと合致するのは、\n"
+"末尾が ``.c`` で終わる、現ディレクトリ中のファイルのみです。"
msgid ""
"The supported glob syntax extensions are ``**`` to match any string\n"
@@ -15131,8 +15199,10 @@
"Regexp pattern matching is anchored at the root of the repository."
msgstr ""
"Perl/Python 形式の正規表現の場合、 名前の前に ``re:`` を記述します。\n"
-"正規表現形式では、 リポジトリのルートからの合致とみなされます。\n"
-"(訳注: .hgignore での指定では付与「されません」ので注意が必要です)。"
+"正規表現形式では、 作業領域ルートからの相対パスに対して、\n"
+"その先頭からパターンが一致することが要求されます。\n"
+"(※訳注: .hgignore での指定では、 相対パスとの部分一致で許されるため、\n"
+"場合によっては書き分ける必要があります)。"
msgid ""
"To read name patterns from a file, use ``listfile:`` or ``listfile0:``.\n"
@@ -15424,8 +15494,8 @@
msgstr ""
msgid ""
-" hg log -r \"(keyword(bug) or keyword(issue)) and not ancestors(tagged())"
-"\"\n"
+" hg log -r \"(keyword(bug) or keyword(issue)) and not ancestors(tagged"
+"())\"\n"
msgstr ""
msgid ""
@@ -17958,6 +18028,3 @@
msgid "push failed:"
msgstr "履歴反映に失敗:"
-
-#~ msgid "do not prompt, assume 'yes' for any required answers"
-#~ msgstr "問い合わせをせず、 確認事項は全て 'yes' とみなす"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/mercurial/__version__.py new/mercurial-1.9.3/mercurial/__version__.py
--- old/mercurial-1.9.2/mercurial/__version__.py 2011-08-26 23:07:20.000000000 +0200
+++ new/mercurial-1.9.3/mercurial/__version__.py 2011-10-01 22:49:34.000000000 +0200
@@ -1,2 +1,2 @@
# this file is autogenerated by setup.py
-version = "1.9.2"
+version = "1.9.3"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/mercurial/bundlerepo.py new/mercurial-1.9.3/mercurial/bundlerepo.py
--- old/mercurial-1.9.2/mercurial/bundlerepo.py 2011-08-26 23:07:11.000000000 +0200
+++ new/mercurial-1.9.3/mercurial/bundlerepo.py 2011-10-01 22:49:22.000000000 +0200
@@ -315,7 +315,8 @@
common, incoming, rheads = tmp
if not incoming:
try:
- os.unlink(bundlename)
+ if bundlename:
+ os.unlink(bundlename)
except OSError:
pass
return other, [], other.close
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/mercurial/commands.py new/mercurial-1.9.3/mercurial/commands.py
--- old/mercurial-1.9.2/mercurial/commands.py 2011-08-26 23:07:11.000000000 +0200
+++ new/mercurial-1.9.3/mercurial/commands.py 2011-10-01 22:49:22.000000000 +0200
@@ -3347,7 +3347,7 @@
_('show changesets within the given named branch'), _('BRANCH')),
('P', 'prune', [],
_('do not display revision or any of its ancestors'), _('REV')),
- ('h', 'hidden', False, _('show hidden changesets')),
+ ('', 'hidden', False, _('show hidden changesets')),
] + logopts + walkopts,
_('[OPTION]... [FILE]'))
def log(ui, repo, *pats, **opts):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/mercurial/encoding.py new/mercurial-1.9.3/mercurial/encoding.py
--- old/mercurial-1.9.2/mercurial/encoding.py 2011-08-26 23:07:11.000000000 +0200
+++ new/mercurial-1.9.3/mercurial/encoding.py 2011-10-01 22:49:22.000000000 +0200
@@ -135,17 +135,18 @@
raise error.Abort("%s, please check your locale settings" % k)
# How to treat ambiguous-width characters. Set to 'wide' to treat as wide.
-ambiguous = os.environ.get("HGENCODINGAMBIGUOUS", "narrow")
+wide = (os.environ.get("HGENCODINGAMBIGUOUS", "narrow") == "wide"
+ and "WFA" or "WF")
def colwidth(s):
"Find the column width of a UTF-8 string for display"
- d = s.decode(encoding, 'replace')
- if hasattr(unicodedata, 'east_asian_width'):
- wide = "WF"
- if ambiguous == "wide":
- wide = "WFA"
- w = unicodedata.east_asian_width
- return sum([w(c) in wide and 2 or 1 for c in d])
+ return ucolwidth(s.decode(encoding, 'replace'))
+
+def ucolwidth(d):
+ "Find the column width of a Unicode string for display"
+ eaw = getattr(unicodedata, 'east_asian_width', None)
+ if eaw is not None:
+ return sum([eaw(c) in wide and 2 or 1 for c in d])
return len(d)
def lower(s):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/mercurial/httpconnection.py new/mercurial-1.9.3/mercurial/httpconnection.py
--- old/mercurial-1.9.2/mercurial/httpconnection.py 2011-08-26 23:07:11.000000000 +0200
+++ new/mercurial-1.9.3/mercurial/httpconnection.py 2011-10-01 22:49:22.000000000 +0200
@@ -22,8 +22,9 @@
class httpsendfile(object):
"""This is a wrapper around the objects returned by python's "open".
- Its purpose is to send file-like objects via HTTP and, to do so, it
- defines a __len__ attribute to feed the Content-Length header.
+ Its purpose is to send file-like objects via HTTP.
+ It do however not define a __len__ attribute because the length
+ might be more than Py_ssize_t can handle.
"""
def __init__(self, ui, *args, **kwargs):
@@ -35,9 +36,9 @@
self.seek = self._data.seek
self.close = self._data.close
self.write = self._data.write
- self._len = os.fstat(self._data.fileno()).st_size
+ self.length = os.fstat(self._data.fileno()).st_size
self._pos = 0
- self._total = self._len / 1024 * 2
+ self._total = self.length / 1024 * 2
def read(self, *args, **kwargs):
try:
@@ -54,9 +55,6 @@
unit=_('kb'), total=self._total)
return ret
- def __len__(self):
- return self._len
-
# moved here from url.py to avoid a cycle
def readauthforuri(ui, uri, user):
# Read configuration
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/mercurial/httprepo.py new/mercurial-1.9.3/mercurial/httprepo.py
--- old/mercurial-1.9.2/mercurial/httprepo.py 2011-08-26 23:07:11.000000000 +0200
+++ new/mercurial-1.9.3/mercurial/httprepo.py 2011-10-01 22:49:22.000000000 +0200
@@ -74,9 +74,14 @@
if cmd == 'pushkey':
args['data'] = ''
data = args.pop('data', None)
+ size = 0
+ if util.safehasattr(data, 'length'):
+ size = data.length
+ elif data is not None:
+ size = len(data)
headers = args.pop('headers', {})
- if data and self.ui.configbool('ui', 'usehttp2', False):
+ if size and self.ui.configbool('ui', 'usehttp2', False):
headers['Expect'] = '100-Continue'
headers['X-HgHttp2'] = '1'
@@ -105,9 +110,6 @@
cu = "%s%s" % (self._url, qs)
req = urllib2.Request(cu, data, headers)
if data is not None:
- # len(data) is broken if data doesn't fit into Py_ssize_t
- # add the header ourself to avoid OverflowError
- size = data.__len__()
self.ui.debug("sending %s bytes\n" % size)
req.add_unredirected_header('Content-Length', '%d' % size)
try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/mercurial/osutil.c new/mercurial-1.9.3/mercurial/osutil.c
--- old/mercurial-1.9.2/mercurial/osutil.c 2011-08-26 23:07:11.000000000 +0200
+++ new/mercurial-1.9.3/mercurial/osutil.c 2011-10-01 22:49:22.000000000 +0200
@@ -523,9 +523,9 @@
if (dict != NULL) {
CFRelease(dict);
- return Py_True;
+ Py_RETURN_TRUE;
} else {
- return Py_False;
+ Py_RETURN_FALSE;
}
}
#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/mercurial/patch.py new/mercurial-1.9.3/mercurial/patch.py
--- old/mercurial-1.9.2/mercurial/patch.py 2011-08-26 23:07:11.000000000 +0200
+++ new/mercurial-1.9.3/mercurial/patch.py 2011-10-01 22:49:22.000000000 +0200
@@ -188,7 +188,7 @@
pend = subject.find(']')
if pend >= 0:
subject = subject[pend + 1:].lstrip()
- subject = subject.replace('\n\t', ' ')
+ subject = re.sub(r'\n[ \t]+', ' ', subject)
ui.debug('Subject: %s\n' % subject)
if user:
ui.debug('From: %s\n' % user)
@@ -1199,7 +1199,7 @@
m = gitre.match(x)
if not m:
continue
- if gitpatches is None:
+ if not gitpatches:
# scan whole input for git metadata
gitpatches = [('a/' + gp.path, 'b/' + gp.path, gp) for gp
in scangitpatch(lr, x)]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/mercurial/setdiscovery.py new/mercurial-1.9.3/mercurial/setdiscovery.py
--- old/mercurial-1.9.2/mercurial/setdiscovery.py 2011-08-26 23:07:11.000000000 +0200
+++ new/mercurial-1.9.3/mercurial/setdiscovery.py 2011-10-01 22:49:22.000000000 +0200
@@ -41,7 +41,7 @@
def _setupsample(dag, nodes, size):
if len(nodes) <= size:
return set(nodes), None, 0
- always = set(dag.heads())
+ always = dag.headsetofconnecteds(nodes)
desiredlen = size - len(always)
if desiredlen <= 0:
# This could be bad if there are very many heads, all unknown to the
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/mercurial/templates/paper/graph.tmpl new/mercurial-1.9.3/mercurial/templates/paper/graph.tmpl
--- old/mercurial-1.9.2/mercurial/templates/paper/graph.tmpl 2011-08-26 23:07:11.000000000 +0200
+++ new/mercurial-1.9.3/mercurial/templates/paper/graph.tmpl 2011-10-01 22:49:22.000000000 +0200
@@ -95,7 +95,7 @@
item = item.replace(/_DATE/, cur[5]);
var tagspan = '';
- if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) \{
+ if (cur[7].length || cur[8].length || (cur[6][0] != 'default' || cur[6][1])) \{
tagspan = '';
if (cur[6][1]) \{
tagspan += '';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/mercurial/ui.py new/mercurial-1.9.3/mercurial/ui.py
--- old/mercurial-1.9.2/mercurial/ui.py 2011-08-26 23:07:11.000000000 +0200
+++ new/mercurial-1.9.3/mercurial/ui.py 2011-10-01 22:49:22.000000000 +0200
@@ -541,11 +541,15 @@
# e.g. color extension on Windows
self.write(prompt)
- # instead of trying to emulate raw_input, swap self.fin with sys.stdin
- old = sys.stdin
+ # instead of trying to emulate raw_input, swap (self.fin,
+ # self.fout) with (sys.stdin, sys.stdout)
+ oldin = sys.stdin
+ oldout = sys.stdout
sys.stdin = self.fin
+ sys.stdout = self.fout
line = raw_input(' ')
- sys.stdin = old
+ sys.stdin = oldin
+ sys.stdout = oldout
# When stdin is in binary mode on Windows, it can cause
# raw_input() to emit an extra trailing carriage return
@@ -649,9 +653,9 @@
printed.'''
if self.tracebackflag:
if exc:
- traceback.print_exception(exc[0], exc[1], exc[2])
+ traceback.print_exception(exc[0], exc[1], exc[2], file=self.ferr)
else:
- traceback.print_exc()
+ traceback.print_exc(file=self.ferr)
return self.tracebackflag
def geteditor(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/mercurial/url.py new/mercurial-1.9.3/mercurial/url.py
--- old/mercurial-1.9.2/mercurial/url.py 2011-08-26 23:07:11.000000000 +0200
+++ new/mercurial-1.9.3/mercurial/url.py 2011-10-01 22:49:22.000000000 +0200
@@ -93,13 +93,15 @@
proxies = {}
# urllib2 takes proxy values from the environment and those
- # will take precedence if found, so drop them
- for env in ["HTTP_PROXY", "http_proxy", "no_proxy"]:
- try:
- if env in os.environ:
- del os.environ[env]
- except OSError:
- pass
+ # will take precedence if found. So, if there's a config entry
+ # defining a proxy, drop the environment ones
+ if ui.config("http_proxy", "host"):
+ for env in ["HTTP_PROXY", "http_proxy", "no_proxy"]:
+ try:
+ if env in os.environ:
+ del os.environ[env]
+ except OSError:
+ pass
urllib2.ProxyHandler.__init__(self, proxies)
self.ui = ui
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/mercurial/util.py new/mercurial-1.9.3/mercurial/util.py
--- old/mercurial-1.9.2/mercurial/util.py 2011-08-26 23:07:11.000000000 +0200
+++ new/mercurial-1.9.3/mercurial/util.py 2011-10-01 22:49:22.000000000 +0200
@@ -16,7 +16,7 @@
from i18n import _
import error, osutil, encoding
import errno, re, shutil, sys, tempfile, traceback
-import os, time, calendar, textwrap, unicodedata, signal
+import os, time, calendar, textwrap, signal
import imp, socket, urllib
# Python compatibility
@@ -24,6 +24,10 @@
def sha1(s):
return _fastsha1(s)
+_notset = object()
+def safehasattr(thing, attr):
+ return getattr(thing, attr, _notset) is not _notset
+
def _fastsha1(s):
# This function will import sha1 from hashlib or sha (whichever is
# available) and overwrite itself with it on the first call.
@@ -887,7 +891,12 @@
minutes = abs(tz) // 60
format = format.replace("%1", "%c%02d" % (sign, minutes // 60))
format = format.replace("%2", "%02d" % (minutes % 60))
- s = time.strftime(format, time.gmtime(float(t) - tz))
+ try:
+ t = time.gmtime(float(t) - tz)
+ except ValueError:
+ # time was out of range
+ t = time.gmtime(sys.maxint)
+ s = time.strftime(format, t)
return s
def shortdate(date=None):
@@ -1135,29 +1144,34 @@
def MBTextWrapper(**kwargs):
class tw(textwrap.TextWrapper):
"""
- Extend TextWrapper for double-width characters.
+ Extend TextWrapper for width-awareness.
+
+ Neither number of 'bytes' in any encoding nor 'characters' is
+ appropriate to calculate terminal columns for specified string.
- Some Asian characters use two terminal columns instead of one.
- A good example of this behavior can be seen with u'\u65e5\u672c',
- the two Japanese characters for "Japan":
- len() returns 2, but when printed to a terminal, they eat 4 columns.
+ Original TextWrapper implementation uses built-in 'len()' directly,
+ so overriding is needed to use width information of each characters.
- (Note that this has nothing to do whatsoever with unicode
- representation, or encoding of the underlying string)
+ In addition, characters classified into 'ambiguous' width are
+ treated as wide in east asian area, but as narrow in other.
+
+ This requires use decision to determine width of such characters.
"""
def __init__(self, **kwargs):
textwrap.TextWrapper.__init__(self, **kwargs)
- def _cutdown(self, str, space_left):
+ # for compatibility between 2.4 and 2.6
+ if getattr(self, 'drop_whitespace', None) is None:
+ self.drop_whitespace = kwargs.get('drop_whitespace', True)
+
+ def _cutdown(self, ucstr, space_left):
l = 0
- ucstr = unicode(str, encoding.encoding)
- colwidth = unicodedata.east_asian_width
+ colwidth = encoding.ucolwidth
for i in xrange(len(ucstr)):
- l += colwidth(ucstr[i]) in 'WFA' and 2 or 1
+ l += colwidth(ucstr[i])
if space_left < l:
- return (ucstr[:i].encode(encoding.encoding),
- ucstr[i:].encode(encoding.encoding))
- return str, ''
+ return (ucstr[:i], ucstr[i:])
+ return ucstr, ''
# overriding of base class
def _handle_long_word(self, reversed_chunks, cur_line, cur_len, width):
@@ -1170,6 +1184,69 @@
elif not cur_line:
cur_line.append(reversed_chunks.pop())
+ # this overriding code is imported from TextWrapper of python 2.6
+ # to calculate columns of string by 'encoding.ucolwidth()'
+ def _wrap_chunks(self, chunks):
+ colwidth = encoding.ucolwidth
+
+ lines = []
+ if self.width <= 0:
+ raise ValueError("invalid width %r (must be > 0)" % self.width)
+
+ # Arrange in reverse order so items can be efficiently popped
+ # from a stack of chucks.
+ chunks.reverse()
+
+ while chunks:
+
+ # Start the list of chunks that will make up the current line.
+ # cur_len is just the length of all the chunks in cur_line.
+ cur_line = []
+ cur_len = 0
+
+ # Figure out which static string will prefix this line.
+ if lines:
+ indent = self.subsequent_indent
+ else:
+ indent = self.initial_indent
+
+ # Maximum width for this line.
+ width = self.width - len(indent)
+
+ # First chunk on line is whitespace -- drop it, unless this
+ # is the very beginning of the text (ie. no lines started yet).
+ if self.drop_whitespace and chunks[-1].strip() == '' and lines:
+ del chunks[-1]
+
+ while chunks:
+ l = colwidth(chunks[-1])
+
+ # Can at least squeeze this chunk onto the current line.
+ if cur_len + l <= width:
+ cur_line.append(chunks.pop())
+ cur_len += l
+
+ # Nope, this line is full.
+ else:
+ break
+
+ # The current line is full, and the next chunk is too big to
+ # fit on *any* line (not just this one).
+ if chunks and colwidth(chunks[-1]) > width:
+ self._handle_long_word(chunks, cur_line, cur_len, width)
+
+ # If the last chunk on this line is all whitespace, drop it.
+ if (self.drop_whitespace and
+ cur_line and cur_line[-1].strip() == ''):
+ del cur_line[-1]
+
+ # Convert current line back to a string and store it in list
+ # of all lines (return value).
+ if cur_line:
+ lines.append(indent + ''.join(cur_line))
+
+ return lines
+
global MBTextWrapper
MBTextWrapper = tw
return tw(**kwargs)
@@ -1179,10 +1256,13 @@
if width <= maxindent:
# adjust for weird terminal size
width = max(78, maxindent + 1)
+ line = line.decode(encoding.encoding, encoding.encodingmode)
+ initindent = initindent.decode(encoding.encoding, encoding.encodingmode)
+ hangindent = hangindent.decode(encoding.encoding, encoding.encodingmode)
wrapper = MBTextWrapper(width=width,
initial_indent=initindent,
subsequent_indent=hangindent)
- return wrapper.fill(line)
+ return wrapper.fill(line).encode(encoding.encoding)
def iterlines(iterator):
for chunk in iterator:
@@ -1363,6 +1443,8 @@
>>> url(r'\\blah\blah\blah')
+ >>> url(r'\\blah\blah\blah#baz')
+
Authentication credentials:
@@ -1391,6 +1473,11 @@
self._hostport = ''
self._origpath = path
+ if parsefragment and '#' in path:
+ path, self.fragment = path.split('#', 1)
+ if not path:
+ path = None
+
# special case for Windows drive letters and UNC paths
if hasdriveletter(path) or path.startswith(r'\\'):
self.path = path
@@ -1418,10 +1505,6 @@
self.path = ''
return
else:
- if parsefragment and '#' in path:
- path, self.fragment = path.split('#', 1)
- if not path:
- path = None
if self._localpath:
self.path = path
return
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/mercurial/win32.py new/mercurial-1.9.3/mercurial/win32.py
--- old/mercurial-1.9.2/mercurial/win32.py 2011-08-26 23:07:11.000000000 +0200
+++ new/mercurial-1.9.3/mercurial/win32.py 2011-10-01 22:49:22.000000000 +0200
@@ -138,8 +138,11 @@
_kernel32.CloseHandle.argtypes = [_HANDLE]
_kernel32.CloseHandle.restype = _BOOL
-_kernel32.CreateHardLinkA.argtypes = [_LPCSTR, _LPCSTR, ctypes.c_void_p]
-_kernel32.CreateHardLinkA.restype = _BOOL
+try:
+ _kernel32.CreateHardLinkA.argtypes = [_LPCSTR, _LPCSTR, ctypes.c_void_p]
+ _kernel32.CreateHardLinkA.restype = _BOOL
+except AttributeError:
+ pass
_kernel32.SetFileAttributesA.argtypes = [_LPCSTR, _DWORD]
_kernel32.SetFileAttributesA.restype = _BOOL
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/setup.py new/mercurial-1.9.3/setup.py
--- old/mercurial-1.9.2/setup.py 2011-08-26 23:07:11.000000000 +0200
+++ new/mercurial-1.9.3/setup.py 2011-10-01 22:49:22.000000000 +0200
@@ -366,7 +366,7 @@
extmodules.append(Extension('mercurial.osutil', ['mercurial/osutil.c'],
extra_link_args=osutil_ldflags))
-if sys.platform == 'linux2' and os.uname()[2] > '2.6':
+if sys.platform.startswith('linux') and os.uname()[2] > '2.6':
# The inotify extension is only usable with Linux 2.6 kernels.
# You also need a reasonably recent C library.
# In any case, if it fails to build the error will be skipped ('optional').
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/tests/test-encoding-align.t new/mercurial-1.9.3/tests/test-encoding-align.t
--- old/mercurial-1.9.2/tests/test-encoding-align.t 2011-08-26 23:07:11.000000000 +0200
+++ new/mercurial-1.9.3/tests/test-encoding-align.t 2011-10-01 22:49:22.000000000 +0200
@@ -22,14 +22,14 @@
> cmdtable = {
> 'showoptlist':
> (showoptlist,
- > [('s', 'opt1', '', 'short width', '""" + s + """'),
- > ('m', 'opt2', '', 'middle width', '""" + m + """'),
- > ('l', 'opt3', '', 'long width', '""" + l + """')
+ > [('s', 'opt1', '', 'short width' + ' %(s)s' * 8, '%(s)s'),
+ > ('m', 'opt2', '', 'middle width' + ' %(m)s' * 8, '%(m)s'),
+ > ('l', 'opt3', '', 'long width' + ' %(l)s' * 8, '%(l)s')
> ],
> ""
> )
> }
- > """)
+ > """ % globals())
> f.close()
> EOF
$ S=`cat s`
@@ -52,9 +52,12 @@
options:
- -s --opt1 \xe7\x9f\xad\xe5\x90\x8d short width (esc)
- -m --opt2 MIDDLE_ middle width
- -l --opt3 \xe9\x95\xb7\xe3\x81\x84\xe9\x95\xb7\xe3\x81\x84\xe5\x90\x8d\xe5\x89\x8d long width (esc)
+ -s --opt1 \xe7\x9f\xad\xe5\x90\x8d short width \xe7\x9f\xad\xe5\x90\x8d \xe7\x9f\xad\xe5\x90\x8d \xe7\x9f\xad\xe5\x90\x8d \xe7\x9f\xad\xe5\x90\x8d \xe7\x9f\xad\xe5\x90\x8d \xe7\x9f\xad\xe5\x90\x8d \xe7\x9f\xad\xe5\x90\x8d \xe7\x9f\xad\xe5\x90\x8d (esc)
+ -m --opt2 MIDDLE_ middle width MIDDLE_ MIDDLE_ MIDDLE_ MIDDLE_ MIDDLE_
+ MIDDLE_ MIDDLE_ MIDDLE_
+ -l --opt3 \xe9\x95\xb7\xe3\x81\x84\xe9\x95\xb7\xe3\x81\x84\xe5\x90\x8d\xe5\x89\x8d long width \xe9\x95\xb7\xe3\x81\x84\xe9\x95\xb7\xe3\x81\x84\xe5\x90\x8d\xe5\x89\x8d \xe9\x95\xb7\xe3\x81\x84\xe9\x95\xb7\xe3\x81\x84\xe5\x90\x8d\xe5\x89\x8d \xe9\x95\xb7\xe3\x81\x84\xe9\x95\xb7\xe3\x81\x84\xe5\x90\x8d\xe5\x89\x8d (esc)
+ \xe9\x95\xb7\xe3\x81\x84\xe9\x95\xb7\xe3\x81\x84\xe5\x90\x8d\xe5\x89\x8d \xe9\x95\xb7\xe3\x81\x84\xe9\x95\xb7\xe3\x81\x84\xe5\x90\x8d\xe5\x89\x8d \xe9\x95\xb7\xe3\x81\x84\xe9\x95\xb7\xe3\x81\x84\xe5\x90\x8d\xe5\x89\x8d \xe9\x95\xb7\xe3\x81\x84\xe9\x95\xb7\xe3\x81\x84\xe5\x90\x8d\xe5\x89\x8d (esc)
+ \xe9\x95\xb7\xe3\x81\x84\xe9\x95\xb7\xe3\x81\x84\xe5\x90\x8d\xe5\x89\x8d (esc)
use "hg -v help showoptlist" to show global options
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/tests/test-encoding-textwrap.t new/mercurial-1.9.3/tests/test-encoding-textwrap.t
--- old/mercurial-1.9.2/tests/test-encoding-textwrap.t 1970-01-01 01:00:00.000000000 +0100
+++ new/mercurial-1.9.3/tests/test-encoding-textwrap.t 2011-10-01 22:49:22.000000000 +0200
@@ -0,0 +1,257 @@
+Test text wrapping for multibyte characters
+
+ $ mkdir t
+ $ cd t
+
+define commands to display help text
+
+ $ cat << EOF > show.py
+ > # Japanese full-width characters:
+ > def show_full_ja(ui, **opts):
+ > u'''\u3042\u3044\u3046\u3048\u304a\u304b\u304d\u304f\u3051 \u3042\u3044\u3046\u3048\u304a\u304b\u304d\u304f\u3051 \u3042\u3044\u3046\u3048\u304a\u304b\u304d\u304f\u3051
+ >
+ > \u3042\u3044\u3046\u3048\u304a\u304b\u304d\u304f\u3051 \u3042\u3044\u3046\u3048\u304a\u304b\u304d\u304f\u3051 \u3042\u3044\u3046\u3048\u304a\u304b\u304d\u304f\u3051 \u3042\u3044\u3046\u3048\u304a\u304b\u304d\u304f\u3051
+ >
+ > \u3042\u3044\u3046\u3048\u304a\u304b\u304d\u304f\u3051\u3042\u3044\u3046\u3048\u304a\u304b\u304d\u304f\u3051\u3042\u3044\u3046\u3048\u304a\u304b\u304d\u304f\u3051\u3042\u3044\u3046\u3048\u304a\u304b\u304d\u304f\u3051
+ > '''
+ >
+ > # Japanese half-width characters:
+ > def show_half_ja(ui, *opts):
+ > u'''\uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79 \uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79 \uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79 \uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79
+ >
+ > \uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79 \uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79 \uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79 \uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79 \uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79 \uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79 \uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79 \uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79
+ >
+ > \uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79\uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79\uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79\uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79\uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79\uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79\uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79\uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79
+ > '''
+ >
+ > # Japanese ambiguous-width characters:
+ > def show_ambig_ja(ui, **opts):
+ > u'''\u03b1\u03b2\u03b3\u03b4\u03c5\u03b6\u03b7\u03b8\u25cb \u03b1\u03b2\u03b3\u03b4\u03c5\u03b6\u03b7\u03b8\u25cb \u03b1\u03b2\u03b3\u03b4\u03c5\u03b6\u03b7\u03b8\u25cb
+ >
+ > \u03b1\u03b2\u03b3\u03b4\u03c5\u03b6\u03b7\u03b8\u25cb \u03b1\u03b2\u03b3\u03b4\u03c5\u03b6\u03b7\u03b8\u25cb \u03b1\u03b2\u03b3\u03b4\u03c5\u03b6\u03b7\u03b8\u25cb \u03b1\u03b2\u03b3\u03b4\u03c5\u03b6\u03b7\u03b8\u25cb \u03b1\u03b2\u03b3\u03b4\u03c5\u03b6\u03b7\u03b8\u25cb \u03b1\u03b2\u03b3\u03b4\u03c5\u03b6\u03b7\u03b8\u25cb \u03b1\u03b2\u03b3\u03b4\u03c5\u03b6\u03b7\u03b8\u25cb
+ >
+ > \u03b1\u03b2\u03b3\u03b4\u03c5\u03b6\u03b7\u03b8\u25cb\u03b1\u03b2\u03b3\u03b4\u03c5\u03b6\u03b7\u03b8\u25cb\u03b1\u03b2\u03b3\u03b4\u03c5\u03b6\u03b7\u03b8\u25cb\u03b1\u03b2\u03b3\u03b4\u03c5\u03b6\u03b7\u03b8\u25cb\u03b1\u03b2\u03b3\u03b4\u03c5\u03b6\u03b7\u03b8\u25cb\u03b1\u03b2\u03b3\u03b4\u03c5\u03b6\u03b7\u03b8\u25cb\u03b1\u03b2\u03b3\u03b4\u03c5\u03b6\u03b7\u03b8\u25cb
+ > '''
+ >
+ > # Russian ambiguous-width characters:
+ > def show_ambig_ru(ui, **opts):
+ > u'''\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
+ >
+ > \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
+ >
+ > \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
+ > '''
+ >
+ > cmdtable = {
+ > 'show_full_ja': (show_full_ja, [], ""),
+ > 'show_half_ja': (show_half_ja, [], ""),
+ > 'show_ambig_ja': (show_ambig_ja, [], ""),
+ > 'show_ambig_ru': (show_ambig_ru, [], ""),
+ > }
+ > EOF
+
+"COLUMNS=60" means that there is no lines which has grater than 58 width
+
+(1) test text wrapping for non-ambiguous-width characters
+
+(1-1) display Japanese full-width characters in cp932
+
+ $ COLUMNS=60 hg --encoding cp932 --config extensions.show=./show.py help show_full_ja
+ hg show_full_ja
+
+ \x82\xa0\x82\xa2\x82\xa4\x82\xa6\x82\xa8\x82\xa9\x82\xab\x82\xad\x82\xaf \x82\xa0\x82\xa2\x82\xa4\x82\xa6\x82\xa8\x82\xa9\x82\xab\x82\xad\x82\xaf \x82\xa0\x82\xa2\x82\xa4\x82\xa6\x82\xa8\x82\xa9\x82\xab\x82\xad\x82\xaf (esc)
+
+ \x82\xa0\x82\xa2\x82\xa4\x82\xa6\x82\xa8\x82\xa9\x82\xab\x82\xad\x82\xaf \x82\xa0\x82\xa2\x82\xa4\x82\xa6\x82\xa8\x82\xa9\x82\xab\x82\xad\x82\xaf (esc)
+ \x82\xa0\x82\xa2\x82\xa4\x82\xa6\x82\xa8\x82\xa9\x82\xab\x82\xad\x82\xaf \x82\xa0\x82\xa2\x82\xa4\x82\xa6\x82\xa8\x82\xa9\x82\xab\x82\xad\x82\xaf (esc)
+
+ \x82\xa0\x82\xa2\x82\xa4\x82\xa6\x82\xa8\x82\xa9\x82\xab\x82\xad\x82\xaf\x82\xa0\x82\xa2\x82\xa4\x82\xa6\x82\xa8\x82\xa9\x82\xab\x82\xad\x82\xaf\x82\xa0\x82\xa2\x82\xa4\x82\xa6\x82\xa8\x82\xa9\x82\xab\x82\xad\x82\xaf (esc)
+ \x82\xa0\x82\xa2\x82\xa4\x82\xa6\x82\xa8\x82\xa9\x82\xab\x82\xad\x82\xaf (esc)
+
+ use "hg -v help show_full_ja" to show global options
+
+(1-2) display Japanese full-width characters in utf-8
+
+ $ COLUMNS=60 hg --encoding utf-8 --config extensions.show=./show.py help show_full_ja
+ hg show_full_ja
+
+ \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91 \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91 \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91 (esc)
+
+ \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91 \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91 (esc)
+ \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91 \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91 (esc)
+
+ \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91 (esc)
+ \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a\xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91 (esc)
+
+ use "hg -v help show_full_ja" to show global options
+
+
+(1-3) display Japanese half-width characters in cp932
+
+ $ COLUMNS=60 hg --encoding cp932 --config extensions.show=./show.py help show_half_ja
+ hg show_half_ja
+
+ \xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9 \xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9 \xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9 \xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9 (esc)
+
+ \xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9 \xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9 \xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9 \xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9 \xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9 (esc)
+ \xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9 \xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9 \xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9 (esc)
+
+ \xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9 (esc)
+ \xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9 (esc)
+
+ use "hg -v help show_half_ja" to show global options
+
+(1-4) display Japanese half-width characters in utf-8
+
+ $ COLUMNS=60 hg --encoding utf-8 --config extensions.show=./show.py help show_half_ja
+ hg show_half_ja
+
+ \xef\xbd\xb1\xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5\xef\xbd\xb6\xef\xbd\xb7\xef\xbd\xb8\xef\xbd\xb9 \xef\xbd\xb1\xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5\xef\xbd\xb6\xef\xbd\xb7\xef\xbd\xb8\xef\xbd\xb9 \xef\xbd\xb1\xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5\xef\xbd\xb6\xef\xbd\xb7\xef\xbd\xb8\xef\xbd\xb9 \xef\xbd\xb1\xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5\xef\xbd\xb6\xef\xbd\xb7\xef\xbd\xb8\xef\xbd\xb9 (esc)
+
+ \xef\xbd\xb1\xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5\xef\xbd\xb6\xef\xbd\xb7\xef\xbd\xb8\xef\xbd\xb9 \xef\xbd\xb1\xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5\xef\xbd\xb6\xef\xbd\xb7\xef\xbd\xb8\xef\xbd\xb9 \xef\xbd\xb1\xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5\xef\xbd\xb6\xef\xbd\xb7\xef\xbd\xb8\xef\xbd\xb9 \xef\xbd\xb1\xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5\xef\xbd\xb6\xef\xbd\xb7\xef\xbd\xb8\xef\xbd\xb9 \xef\xbd\xb1\xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5\xef\xbd\xb6\xef\xbd\xb7\xef\xbd\xb8\xef\xbd\xb9 (esc)
+ \xef\xbd\xb1\xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5\xef\xbd\xb6\xef\xbd\xb7\xef\xbd\xb8\xef\xbd\xb9 \xef\xbd\xb1\xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5\xef\xbd\xb6\xef\xbd\xb7\xef\xbd\xb8\xef\xbd\xb9 \xef\xbd\xb1\xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5\xef\xbd\xb6\xef\xbd\xb7\xef\xbd\xb8\xef\xbd\xb9 (esc)
+
+ \xef\xbd\xb1\xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5\xef\xbd\xb6\xef\xbd\xb7\xef\xbd\xb8\xef\xbd\xb9\xef\xbd\xb1\xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5\xef\xbd\xb6\xef\xbd\xb7\xef\xbd\xb8\xef\xbd\xb9\xef\xbd\xb1\xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5\xef\xbd\xb6\xef\xbd\xb7\xef\xbd\xb8\xef\xbd\xb9\xef\xbd\xb1\xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5\xef\xbd\xb6\xef\xbd\xb7\xef\xbd\xb8\xef\xbd\xb9\xef\xbd\xb1\xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5\xef\xbd\xb6\xef\xbd\xb7\xef\xbd\xb8\xef\xbd\xb9\xef\xbd\xb1\xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5\xef\xbd\xb6\xef\xbd\xb7\xef\xbd\xb8\xef\xbd\xb9 (esc)
+ \xef\xbd\xb1\xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5\xef\xbd\xb6\xef\xbd\xb7\xef\xbd\xb8\xef\xbd\xb9\xef\xbd\xb1\xef\xbd\xb2\xef\xbd\xb3\xef\xbd\xb4\xef\xbd\xb5\xef\xbd\xb6\xef\xbd\xb7\xef\xbd\xb8\xef\xbd\xb9 (esc)
+
+ use "hg -v help show_half_ja" to show global options
+
+
+
+(2) test text wrapping for ambiguous-width characters
+
+(2-1) treat width of ambiguous characters as narrow (default)
+
+(2-1-1) display Japanese ambiguous-width characters in cp932
+
+ $ COLUMNS=60 hg --encoding cp932 --config extensions.show=./show.py help show_ambig_ja
+ hg show_ambig_ja
+
+ \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b (esc)
+
+ \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b (esc)
+ \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b (esc)
+
+ \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b\x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b\x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b\x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b\x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b\x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b (esc)
+ \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b (esc)
+
+ use "hg -v help show_ambig_ja" to show global options
+
+(2-1-2) display Japanese ambiguous-width characters in utf-8
+
+ $ COLUMNS=60 hg --encoding utf-8 --config extensions.show=./show.py help show_ambig_ja
+ hg show_ambig_ja
+
+ \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b (esc)
+
+ \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b (esc)
+ \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b (esc)
+
+ \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b\xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b\xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b\xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b\xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b\xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b (esc)
+ \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b (esc)
+
+ use "hg -v help show_ambig_ja" to show global options
+
+(2-1-3) display Russian ambiguous-width characters in cp1251
+
+ $ COLUMNS=60 hg --encoding cp1251 --config extensions.show=./show.py help show_ambig_ru
+ hg show_ambig_ru
+
+ \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 (esc)
+
+ \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 (esc)
+ \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 (esc)
+
+ \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8\xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8\xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8\xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8\xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8\xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 (esc)
+ \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 (esc)
+
+ use "hg -v help show_ambig_ru" to show global options
+
+(2-1-4) display Russian ambiguous-width characters in utf-8
+
+ $ COLUMNS=60 hg --encoding utf-8 --config extensions.show=./show.py help show_ambig_ru
+ hg show_ambig_ru
+
+ \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 (esc)
+
+ \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 (esc)
+ \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 (esc)
+
+ \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8\xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8\xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8\xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8\xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8\xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 (esc)
+ \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 (esc)
+
+ use "hg -v help show_ambig_ru" to show global options
+
+
+(2-2) treat width of ambiguous characters as wide
+
+(2-2-1) display Japanese ambiguous-width characters in cp932
+
+ $ COLUMNS=60 HGENCODINGAMBIGUOUS=wide hg --encoding cp932 --config extensions.show=./show.py help show_ambig_ja
+ hg show_ambig_ja
+
+ \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b (esc)
+
+ \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b (esc)
+ \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b (esc)
+ \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b (esc)
+ \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b (esc)
+
+ \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b\x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b\x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b (esc)
+ \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b\x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b\x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b (esc)
+ \x83\xbf\x83\xc0\x83\xc1\x83\xc2\x83\xd2\x83\xc4\x83\xc5\x83\xc6\x81\x9b (esc)
+
+ use "hg -v help show_ambig_ja" to show global options
+
+(2-2-2) display Japanese ambiguous-width characters in utf-8
+
+ $ COLUMNS=60 HGENCODINGAMBIGUOUS=wide hg --encoding utf-8 --config extensions.show=./show.py help show_ambig_ja
+ hg show_ambig_ja
+
+ \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b (esc)
+
+ \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b (esc)
+ \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b (esc)
+ \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b (esc)
+ \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b (esc)
+
+ \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b\xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b\xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b (esc)
+ \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b\xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b\xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b (esc)
+ \xce\xb1\xce\xb2\xce\xb3\xce\xb4\xcf\x85\xce\xb6\xce\xb7\xce\xb8\xe2\x97\x8b (esc)
+
+ use "hg -v help show_ambig_ja" to show global options
+
+(2-2-3) display Russian ambiguous-width characters in cp1251
+
+ $ COLUMNS=60 HGENCODINGAMBIGUOUS=wide hg --encoding cp1251 --config extensions.show=./show.py help show_ambig_ru
+ hg show_ambig_ru
+
+ \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 (esc)
+ \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 (esc)
+
+ \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 (esc)
+ \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 (esc)
+ \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 (esc)
+
+ \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8\xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8\xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 (esc)
+ \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8\xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8\xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 (esc)
+ \xcd\xe0\xf1\xf2\xf0\xee\xe9\xea\xe8 (esc)
+
+ use "hg -v help show_ambig_ru" to show global options
+
+(2-2-4) display Russian ambiguous-width charactes in utf-8
+
+ $ COLUMNS=60 HGENCODINGAMBIGUOUS=wide hg --encoding utf-8 --config extensions.show=./show.py help show_ambig_ru
+ hg show_ambig_ru
+
+ \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 (esc)
+ \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 (esc)
+
+ \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 (esc)
+ \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 (esc)
+ \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 (esc)
+
+ \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8\xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8\xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 (esc)
+ \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8\xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8\xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 (esc)
+ \xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb8 (esc)
+
+ use "hg -v help show_ambig_ru" to show global options
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/tests/test-hgweb-empty.t new/mercurial-1.9.3/tests/test-hgweb-empty.t
--- old/mercurial-1.9.2/tests/test-hgweb-empty.t 2011-08-26 23:07:12.000000000 +0200
+++ new/mercurial-1.9.3/tests/test-hgweb-empty.t 2011-10-01 22:49:22.000000000 +0200
@@ -281,7 +281,7 @@
item = item.replace(/_DATE/, cur[5]);
var tagspan = '';
- if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) {
+ if (cur[7].length || cur[8].length || (cur[6][0] != 'default' || cur[6][1])) {
tagspan = '';
if (cur[6][1]) {
tagspan += '';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/tests/test-keyword.t new/mercurial-1.9.3/tests/test-keyword.t
--- old/mercurial-1.9.2/tests/test-keyword.t 2011-08-26 23:07:12.000000000 +0200
+++ new/mercurial-1.9.3/tests/test-keyword.t 2011-10-01 22:49:23.000000000 +0200
@@ -270,15 +270,20 @@
xxx $
ignore $Id$
-Check whether expansion is filewise
+Check whether expansion is filewise and file mode is preserved
$ echo '$Id$' > c
$ echo 'tests for different changenodes' >> c
+ $ chmod 600 c
+ $ ls -l c | cut -b 1-10
+ -rw-------
commit file c
$ hg commit -A -mcndiff -d '1 0' -u 'User Name '
adding c
+ $ ls -l c | cut -b 1-10
+ -rw-------
force expansion
@@ -439,6 +444,8 @@
r
committed changeset 3:899491280810
overwriting r expanding keywords
+ - status call required for dirstate.normallookup() check
+ $ hg status r
$ hg --verbose rollback
repository tip rolled back to revision 2 (undo commit)
working directory now based on revision 2
@@ -829,6 +836,8 @@
$ hg copy a x/a
$ hg --verbose kwshrink a
overwriting a shrinking keywords
+ - sleep required for dirstate.normal() check
+ $ sleep 1
$ hg status a
$ hg --verbose kwexpand a
overwriting a expanding keywords
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mercurial-1.9.2/tests/test-setdiscovery.t new/mercurial-1.9.3/tests/test-setdiscovery.t
--- old/mercurial-1.9.2/tests/test-setdiscovery.t 2011-08-26 23:07:12.000000000 +0200
+++ new/mercurial-1.9.3/tests/test-setdiscovery.t 2011-10-01 22:49:23.000000000 +0200
@@ -265,4 +265,62 @@
common heads: 7ead0cba2838
+One with >200 heads, which used to use up all of the sample:
+
+ $ hg init manyheads
+ $ cd manyheads
+ $ echo "+300:r @a" >dagdesc
+ $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
+ $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
+ $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
+ $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
+ $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
+ $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
+ $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
+ $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
+ $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
+ $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
+ $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
+ $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
+ $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
+ $ echo "@b *r+3" >>dagdesc # one more head
+ $ hg debugbuilddag