(注意:本件、解決したので、後日、対応方法をまとめます → (解決編) jujutsu v0.15.1 で、コミットログを gvim.exe で編集できなくなってしまった - 標準愚痴出力 )
jj commit を実行すると、gvim.exe がファイルを開かずに起動してしまう。:q
で終了すると、jj は次のようにエラーメッセージを表示する。
$ jj commit Error: Editor 'C:/Users/hymkor/scoop/apps/vim/current/gvim.exe' exited with an error exit status 1
調査のため、環境変数 JJ_EDITOR に次のバッチファイル foo.cmd
を登録してコミット操作を実行する
echo %1,%2,%3,%4,%5,%6 gvim "%1"
$ set JJ_EDITOR=%USERPROFILE%\foo.cmd $ jj commit $ echo \\?\C:\Users\hymkor\src\go-minimal-optional\.jj\repo\editor-tifUve.jjdescription,,,,, \\?\C:\Users\hymkor\src\go-minimal-optional\.jj\repo\editor-tifUve.jjdescription,,,,, $ gvim "\\?\C:\Users\hymkor\src\go-minimal-optional\.jj\repo\editor-tifUve.jjdescription" Error: Editor 'C:\Users\hymkor\foo.cmd' exited with an error exit status 1
コミットログを書く一時ファイルのパスが \\?\C:\...
形式のパス:DOSデバイスパス形式 になっていた。
Windows では CON や AUX といったファイル名はディレクトリを問わずデバイスとして扱われるので、下手にアクセスするとアプリケーションがハングアップを起こしてしまう。だが、DOSデバイスパス形式 だと、普通のファイルとみなしてくれる。だから、jj が一時ファイル名の取り扱いを変えたのは理解は出来るし、notepad で開けるファイルであるから gvim で開けない方が悪いといえば悪いんだが…
とりあえず、こういうラッパーを書いて回避した。
jj_edit.cmd:
@ setlocal @ set "PROMPT=$$ " set "TARGET=%~1" set "TARGET=%TARGET:\\?\=%" "%EDITOR%" "%TARGET%" @ exit /b %ERRORLEVEL%
→ 環境変数 EDITOR には gvim.exe のフルパスを、環境変数 JJ_EDITOR の方に、このバッチファイルのフルパスを書く。これでコミットログが普通に書けるようになった。
しかし、これDOSデバイスパス形式 は一応まっとうな PATH なので、jj の不具合というわけでもない。かといって、vim にサポートしろというのも無理筋にも思える。どうしたもんかな