藤原です。
2017年10月18日 21:01 Yuya Nishihara <
yu...@tcha.org>:
> On Wed, 18 Oct 2017 02:34:54 -0700 (PDT),
ktakat...@gmail.com wrote:
>> しばらく前に、Cygwin および MSYS2 の mercurial を 4.0.2 から 4.3.2 に
>> 更新したところ、hg log --mq 等、--mq オプションを指定したときに、pager が
>> 有効になっていると、カラー表示されなくなってしまいしました。
>> (他の環境は未確認です。)
Twitter で話題を振ってもらったのに、返信できずに済みません
(時間が取れなかったのもありますが、メンションの通知が飛ばなかった
ので、気付くのが遅れてしまいました……)
>> hg --pager=no log --mq として pager を無効化するか、
>> hg --color=always log --mq として、カラー表示を強制すれば色が出ます。
>>
>> hg log と hg log --mq での動作の違いを確認すると、--mq を指定した時には、
>> color._modesetup() が 1 回余計に呼び出されており、その中で ui.formatted() が
>> False を返すことでカラー表示が無効化されていることが確認できました。
>>
>> ここで、4.0.2 と 4.3.2 のコードを比較したところ、localrepo.py の
>> localrepository.__init__() に違いがありました。4.0.2 では color.setup() を
>> 呼んでいないのですが、4.3.2 では呼ぶようになっていました。
>>
>> 試しに、以下のように color.setup() の呼び出しを無効化したところ、
>> 今まで通り、色が出るようになりました。
>>
>> --- localrepo.py.orig
>> +++ localrepo.py
>> @@ -366,7 +366,7 @@
>> setupfunc(self.ui, self.supported)
>> else:
>> self.supported = self._basesupported
>> - color.setup(self.ui)
>> + #color.setup(self.ui)
>
> 話は分かりました。とりあえず pager エクステンションを無効にすると回避できる
> はずです。 pager@runcommand -> --mq -> pager@log の流れでおかしくなってる。
こちらで以下の要領で動作確認をしてみたのですが:
Windows コマンドプロンプト::
> set HGRCPATH=null
> pytnon path\to\hg --config
extensions.hgext.mq= parents --mq
(color 化された出力)
> pytnon path\to\hg --config
extensions.hgext.mq= diff -c . --mq
(color 化された出力)
> pytnon path\to\hg --config
extensions.hgext.mq= config --mq ui
ui.formatted=True
ui.interactive=False
Cygwin ターミナル::
$ export HGRCPATH=/dev/null
$ python path/to/hg --config
extensions.hgext.mq= parents --mq
(color 化された出力)
$ python path/to/hg --config
extensions.hgext.mq= diff -c . --mq
(color 化された出力)
$ python path/to/hg --config
extensions.hgext.mq= config --mq ui
ui.formatted=True
ui.interactive=False
どちらも現象が再現できませんでした。西原さんの環境では再現できまし
た?
再現できない原因として考えられるのは、以下のような要因でしょうか?
- pure Python 版だと再現しない問題
- 使用しているターミナルソフト由来の問題
- Cygwin のバージョン依存の挙動 (+ MSYS2 は当該 Cygwin の挙動と同じ)
- 併用している他のエクステンションの副作用
以前、Windows 環境で明示的に pager を有効にすると、なぜか ANSI
color モードが選択されてしまう障害を修正した際に:
- keyword や mq は独自の color 設定を持っている
- エクステンション有効時の副作用で color 機能の初期化が動作
- "--pager on" 判定前の color 設定により適切なモードが選択
という挙動だったことがあったので、エクステンションの有効化位置
(.hg/hgrc 由来か、それ以外か) や、他のエクステンションとの前後関係
とかによる影響もゼロではないんですよねぇ。
https://www.mercurial-scm.org/repo/hg/rev/f928d53b687c
ちなみに、「Cygwin および MSYS2 の mercurial」は、どのような手段で
インストールしたものでしょうか? (自前でビルド, パッケージ管理経由
でインストール, その他)
--
----------------------------------------------------------------------
FUJIWARA Katsunori(
flying...@gmail.com)