secretbase.log

.NET/C#/Pythonなど

mqの未適用パッチを一括削除するコマンド(qdelall)

MercurialのちょっとしたTipsです。
まず、ワンライナーでかいてみましょう。Mercurial で hg qpop で 適用解除したパッチを一括削除するワンライナーです。

ワンライナーで、未適用パッチを一括で削除

$ hg qseries | while read patch; do hg qdelete $patch; done
$ hg qseries

未適用のパッチが削除されました。

alias に登録し、 hg qdelall コマンドで削除する

[alias]
qdelall =! $HG qseries | while read patch; do $HG qdelete $patch; done

のような感じで alias に登録しておけば、hg qdelall といったコマンドで実行可能です。

$ hg qdelall

hg qdelall の実行サンプル

tkondou@zion3:~/sandbox/mq$ hg init
tkondou@zion3:~/sandbox/mq$ hg qnew 1.patch
tkondou@zion3:~/sandbox/mq$ hg qnew 2.patch
tkondou@zion3:~/sandbox/mq$ hg qseries
1.patch
2.patch
tkondou@zion3:~/sandbox/mq$
tkondou@zion3:~/sandbox/mq$ hg qdelall
中断: 適用中のパッチ 1.patch は削除できません
中断: 適用中のパッチ 2.patch は削除できません
tkondou@zion3:~/sandbox/mq$
tkondou@zion3:~/sandbox/mq$ hg qpop --all
2.patch の適用解除
1.patch の適用解除
全てのパッチの適用が解除されました
tkondou@zion3:~/sandbox/mq$ hg qdelall
tkondou@zion3:~/sandbox/mq$ hg qseries

適用中のパッチは削除されずに、未適用のパッチが削除されます。

Ubuntu 11.10 の bash上で実行しました。

msysgit(MSYS)上でのalias挙動を試す

Windows の MSYSの場合は、環境変数の $HG を "%HG%" にする必要があるのですが、それでも下記エラーとなってしまいます。
環境は、bash on msysgit on console2 on Windows 7

$ hg qdelall
'while' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

だれかアドバイスください!