fenrir の path から存在しないパスを削除する #PPx
PPx のスクリプトで実装する必要ないよね……。
ショートカットファイルのリンク先を反対窓で開く(改2) #PPx:
ショートカットファイルのリンク先を反対窓で開く(改) #PPx - hokorobiの日記 の方法だと、どんどん新しいタブを開いていたので、表示したいパスを持っているタブがあったら、それを表示するように変更。
KC_main = { ; PPcメイン窓 \ENTER ,%ME_jump_opposite } E_jump_opposite = { ** comment ** :DIR ,*script %0script\jump_opposite.js,%*name(DCB,"%R","%1") :LHA ,*ppc -pane:~ %*name(DCB,"%R","%1") :PKZIP ,*ppc -pane:~ %*name(DCB,"%R","%1") :CAB ,*ppc -pane:~ %*name(DCB,"%R","%1") :XLF ,*ppc -pane:~ %*name(DCB,"%R","%1") :CD ,*ppc -pane:~ %*name(DCB,"%R","%1") 7Z ,*ppc -pane:~ %*name(DCB,"%R","%1") LNK ,*script %0script\jump_opposite.js,%*name(DCB,"%R","%1") * ,editor %*name(DCB,"%R","%1") }
PPx 1.30 x64, Script Module R14
#PPx BatchRename.js をいじってみた
選択ファイル名のリストを外部エディタで編集し、一気にリネームするスクリプト が動かなかったらしいので、ちょっとさわっていたら変にこねくりまわしてしまった。
オリジナルではなくて 「選択エントリーをテキストエディタで一気にリネーム」を改良したもの を元に変更している。
2ch で話題に上ったので、使う予定もないのに手を加えてみた。
UTF-8で処理するようにした。テストしてないけど。
フォルダもリネームできるようにした。
例外を使ってみたけど改悪っぽい。
そのほかちょびちょび変更。
PPx 1.30 x64, Script Module R14
nosetests で使う PEP 8 のテストを追加
2010/09/20 Pythonのコーディング規約pep8チェックをUnitTestに組み込んでみた - 清水川Web を試してみたけれど、最近の pep8 パッケージでは動かないみたいなので、 Advanced usage - pep8 1.4.6a0 documentation を見て適当に書いてみた。
test_pep8.py
# -*- coding: utf-8 -*- from nose.tools import * import pep8 import glob def test_pep8(): pep8style = pep8.StyleGuide() result = pep8style.check_files(glob.glob('../*.py')) eq_(result.total_errors, 0)
Mercurial の make tests を走らせてみた #mercurialjp
この記事は Mercurial Advent Calendar 2012 の 16 日目です。
Mercurial のヘルプにミスを見付けた〜とツイートしたら、開発 ML にパッチ送っちゃいなYO! 念のために make tests も動かしなさいよという声が。
ということで make tests を実行できるようにしてみる。
環境作り
Windows 上だと何かと面倒事がありそうなので、VM で Linuxを動かしてそこで実行させることにする。
Windows に VirtualBox をインストールしているので、そこに Ubuntu server 12.04.1 を入れてみた。
Ubuntu は Openssh server でインストール。
まずは
$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install mercurial
make に必要なパッケージもインストール
$ sudo apt-get install python-dev $ sudo apt-get install gettext $ sudo apt-get install make $ sudo apt-get install unzip
make tests 実行
Mercurial のソースをクローンして、先に i18n/hg.pot を作ってみようと思ったらエラーになってしまった。
$ hg clone http://selenic.com/hg $ make update-pot
osutil が使えないらしい。
$ make local $ make update-pot
これで動いた。
さて、目的の make tests 実行。
$ make tests cd tests && python run-tests.py ......................................s.s....s....................sssssss.ssssss..s...ssss.sssssssss..............................................................s..............................s..........................................................................................................................s........s...........................................................................................s....s.............................. Skipped test-casecollision-merge.t: missing feature: case insensitive file system Skipped test-casefolding.t: missing feature: case insensitive file system Skipped test-check-pyflakes.t: missing feature: Pyflakes python linter Skipped test-convert-baz.t: missing feature: GNU Arch baz client Skipped test-convert-bzr-114.t: missing feature: Canonical's Bazaar client >= 1.14 Skipped test-convert-bzr-directories.t: missing feature: Canonical's Bazaar client Skipped test-convert-bzr-ghosts.t: missing feature: Canonical's Bazaar client Skipped test-convert-bzr-merges.t: missing feature: Canonical's Bazaar client Skipped test-convert-bzr-treeroot.t: missing feature: Canonical's Bazaar client Skipped test-convert-bzr.t: missing feature: Canonical's Bazaar client Skipped test-convert-cvs-branch.t: missing feature: cvs client/server Skipped test-convert-cvs-detectmerge.t: missing feature: cvs client/server Skipped test-convert-cvs-synthetic.t: missing feature: cvs client/server Skipped test-convert-cvs.t: missing feature: cvs client/server Skipped test-convert-cvsnt-mergepoints.t: missing feature: cvs client/server Skipped test-convert-darcs.t: missing feature: darcs client Skipped test-convert-git.t: missing feature: git command line client Skipped test-convert-hg-svn.t: missing feature: subversion python bindings Skipped test-convert-mtn.t: missing feature: monotone client (>= 1.0) Skipped test-convert-p4-filetypes.t: missing feature: Perforce server and client Skipped test-convert-p4.t: missing feature: Perforce server and client Skipped test-convert-svn-branches.t: missing feature: subversion python bindings Skipped test-convert-svn-encoding.t: missing feature: subversion python bindings Skipped test-convert-svn-move.t: missing feature: subversion python bindings Skipped test-convert-svn-sink.t: missing feature: subversion client and admin tools >= 1.3 Skipped test-convert-svn-source.t: missing feature: subversion python bindings Skipped test-convert-svn-startrev.t: missing feature: subversion python bindings Skipped test-convert-svn-tags.t: missing feature: subversion python bindings Skipped test-convert-tagsbranch-topology.t: missing feature: git command line client Skipped test-convert-tla.t: missing feature: GNU Arch tla client Skipped test-gendoc.t: missing feature: Docutils text processing library Skipped test-highlight.t: missing feature: Pygments source highlighting library Skipped test-mq-subrepo-svn.t: missing feature: subversion client and admin tools >= 1.3 Skipped test-no-symlinks.t: system supports symbolic links Skipped test-subrepo-git.t: missing feature: git command line client Skipped test-subrepo-svn.t: missing feature: subversion client and admin tools >= 1.5 # Ran 417 tests, 36 skipped, 0 failed.
一時間くらいかかったかな。長いなぁ。結構スキップされてしまった。
今回スキップされちゃまずそうなものもあったので、パッケージを追加して再テスト。
$ sudo apt-get install python-docutils $ make test-gendoc.t cd tests && python run-tests.py test-gendoc.t . # Ran 1 tests, 0 skipped, 0 failed.
ソースコードの管理
ソースコードの変更は Windows でしたいので、下のような感じで Ubuntu のリポジトリに対して clone, pull, push するようにしてみる。
┌───────────┐ │http://selenic.com/hg │ └───────────┘ ↓ clone, pull ┌───────────┐ │ Ubuntu │ └───────────┘ ↓clone, pull ↑push ┌───────────┐ │ Windows │ └───────────┘
ローカルで使うだけなので、SSL も使わず、誰でも push できるようにしてしまう。
~/.hgrc に以下を追加。
[web] push_ssl = false allow_push = *
これで Web サーバを起動。
$ hg serve
Windows から clone, pull, push ができるようになった。
ソースコードを変更して push したら適宜 make tests を実行するということで。
hg now を作ったよ(バグあり)
Mercurial 界の海老蔵こと @h0k0r0bi です(……いつの間にそういうことに?)
この記事は、 @cointoss1973 さんの パッチ管理リポジトリ入門 〜MQ(パッチ)もMercurialで管理できるよ〜 - cointoss.log のバトンを受け取った Mercurial Advent Calendar 2012 の5日目です。
なにこれ
hg now というエクステンションを作りまして、こんなふうに考えて作ったよ、こんなバグがあるよというお話をします。
なんとなく動くものができたというだけの状態なので、おかしいよ! まずいよ! という突っ込み大歓迎!
元ネタは tmp コミットのための独自サブコマンド git-now - アジャイルSEを目指すブログ です。
参考
万年初心者なので、何かエクステンションを作ってみようと思うたびにお世話になっています。
方針
hg now [TEXT] の実行で、コミットメッセージに [from now] 2012-12-08 12:34:56 TEXT と diff の内容を入れてコミットできるようにします。
その他オプションはほしくなったらおいおい追加。
じゃあ作ってみよう
diff の取得
Mercurial のソースから diff を探してみます…… mercurial/commands.py で def diff を発見。
def diff(ui, repo, *pats, **opts):
実体は cmdutil.diffordiffstat を実行しているようなので、mercurial/cmdutil の diffordiffstat を見てみます。
def diffordiffstat(ui, repo, diffopts, node1, node2, match, changes=None, stat=False, fp=None, prefix='', listsubrepos=False):
fp にファイルを指定して cmdutil.diffordiffstat を実行すれば diff をファイルにはき出してくれるみたいです。
commit の実行
やっぱり mercurial/commands.py の commit を覗いてみます。
def commit(ui, repo, *pats, **opts):
コミットメッセージのオプションは、以下のような感じだから opts['message'] に diff の内容を入れて commands.commit(ui, repo, *pats, **opts) を実行すればいいんでしょう。
commitopts = [ ('m', 'message', '', _('use text as commit message'), _('TEXT')), ('l', 'logfile', '', _('read commit message from file'), _('FILE')), ]
そんな感じで 最初の動くバージョン ができあがります。
cp932 意外の文字コードは NG
「こいつ……動くぞ!」と使っていたら案の定エラー発生。
M:\nowtest>hg now --debug [win32mbcs] activated with encoding: cp932 nowtest_utf8N.txt トランザクションを中断します! ロールバックを完了しました 中断: decoding near ' +縺ゅ>縺・∴縺・ ': 'cp932' codec can't decode bytes in position 224-225: illegal multibyte sequence!
UTF-8 のファイル nowtest_utf8N.txt の diff がコミットメッセージに入っているけど、cp932 ではデコードできないよと。うん、確かに。
diff の中身を cp932 に変換する
diff の文字コード変換の話をツイートしていたら yuja / hgext-textful / source / - Bitbucket でやってるよと教えていただいたので hgext/textful/encoding.py の filterencoding を 拝借 。
これでバッチリじゃなイカ! と思っていた時期が私にもありました。
BOM あり UTF-8 はやっぱり駄目
BOM あり UTF-8 だと同じようなエラーが出てしまいます。
M:\nowtest>hg now --debug [win32mbcs] activated with encoding: cp932 nowtest_utf8.txt トランザクションを中断します! ロールバックを完了しました 中断: decoding near ' +1,1 @@ +・ソ縺ゅ>・: 'cp932' codec can't decode bytes in position 214-215: illegal multibyte sequence!
これは、バイナリの BOM もテキストとして diff 出力してしまうので、その後に文字コード変換をしてもどうしようもないよということだと思います。
なので、diff 出力時点での変換が必要なんでしょうね。
hgext-textful では、そこもうまいことやっているようですが、私にはどうしたら良いのかわかりませんでした。