Redmineのチケット一覧結果をシェルスクリプトで整形する

結果

  1. Redmineの任意のチケット一覧をCSV形式でダウンロードする
  2. iconv -f SJIS -t UTF-8 /path/to/issues.csv | sort -r -k 3 -t , | awk -F ',' '{printf "[%s] #%s %s\n", $3, $1, $7}'

こういうアウトプットになる。

[トラッカー] ## 題名
[機能] #XXXXX XXする
[機能] #XXXXX YYする
[タスク] #XXXXX 【XX】デプロイする
[タスク] #XXXXX XXを設定する
[バグ] #XXXXX XXの修正
[バグ] #XXXXX XX YY ZZ エラー対策

Macの場合最後に | pbcopy などいれるとクリップボードに入って便利。あと [トラッカー] あたりは除外したほうがよいかも。

背景

Redmineを普段使っている。通常はRedmineのオンラインのチケット上で管理、やりとりをしているけれど、ローカルのテキストファイルで扱いたい場合がある。そのときに簡単な整形をしたい。

前は PythonCSV を読み込んでテキストを出力するする小さなスクリプトを書いていたのだけど、毎回起動してメンテし拡張するのがだるくて結局使わなくなってしまった*1。こういう操作はシェルスクリプトのほうが楽なことが多い。あと wc , grep などの操作はシェルのコマンドとパイプの強力さをそのまま使ったほうが便利という印象。書いてて楽しいし。

CSV を処理するときに文字コードを変換する iconv を使ってみて便利だったというのがこれを書いたきっかけ。ではいままでどうしていたかというと、CSVの話とかぶるけれど、文字コードの変換を伴う作業はだいたい Python 上で処理していた。なんとなくやらないでいたけど、特にやらない理由もなかった。

その他

毎回 awk の文法を使っては忘れるので、 perlruby を試そうとしてはだらだらしてしまってやらないままになってる……。

*1:思うんだけど、こういうシェルスクリプトの気楽さって入力と出力のパスを最初に考えなくていいところなのかも

mecurial_keyring が有効な hg コマンドを常に使う話

結論

  • python2 の virtualenv を作って、そこに mercurial keyring mercurial_keyring をインストールする
  • bashrc, zshrc などに alias hg='/path/to/virtualenv/bin/hg' と設定する

mercurial_keyring について

普段 mercurial を使っている。そのときのパスワード管理には mercurial_keyring という keyring を使うようにしてくれるライブラリがある。 keyring は名前の通りパスワード管理ライブラリ。 keyring の backend はいくつか種類があるようだけど、OS X の keychain も対応している。 git の場合は git credential-osxkeychain というコマンドで keychain で管理できるけれど、それと似たようなものという認識*1

mercurial_keyring の使用方法はドキュメントにあるとおり .hgrc に以下のように設定する。 個人的には環境個別の設定は .hgrc.local というような別ファイルにして include するようにしている*2

[extensions]
mercurial_keyring =

[auth]
myremote.prefix = my.server.com/hgrepo
myremote.username = myname

経緯

python のバージョン、 mercurial のバージョン、 mercurial_keyring のバージョンが合わないと *** failed to import extension mercurial_keyring: No module named mercurial_keyring というエラーがでる。 stackoverflow.com

職場のマシンと私物のマシン、あるいはVMなどを行き来しているうちに最近は使わなくなっていた。extensions に path を指定するやりかたや mercurialmercurial_keyring のバージョンを下げて対応などしていたこともあったけれど、面倒になると多少雑な感じになってきて、直接 .hgrc に書くか毎回パスワードをいれて対応していた。特に最近は python3 を使っていることが増えてきたので、 mercurial は python3では動かないという問題もあった。あと mercurialpython 開発でなくても使うことがあるので、 virtualenv にいれたりシステムにいれたりして混在していた。

そんな感じで放置していたのだけど、今日ふと mercurial_keyring の話が出たので、そういえば、と思いついて設定してみたらあっさりできてしまった。

よく考えたら、virtualenv に python2 で mercurialmercurial_keyring をいれればよいだけだった。常にそれを参照したいなら単純にパスを指定すればよいという話だった。

わりと便利という感じ。

参考

*1:順番的には git を使う機会があった時に mercurial にもあるだろう、ということで探したのがこのライブラリを知るきっかけだった

*2: ちょっと内容が古いけどこういう設定 https://github.com/altnight/dotfiles/blob/master/.hgrc

Intellij Idea で Django モジュールが検出できない場合 PYTHON_MODULE に書き換える

環境

  • Intellj Idea 14.1.3
  • Python Plugin 4.5 141.82

Intellij Idea で Django Module が検出されない

Intellij で Djagno を認識してくれないことがあって、サーバー起動やテストがIDE上から操作できなかった。GUIからのデバッグもできない。

あと Run Server Run Test を編集しようにも Please Select Django Module という注意がでるだけで、設定する箇所がない。通常このあたりの設定は Project Structure -> Module, Library , Facets あたりをいじればよいのだけど、どこを探しても選択肢に出ない。

解決できない間はCUIで開発していたときと同じように、コンソールから runserver で起動して pdb を埋め込んでいた。

対策

これでなおる。

stackoverflow.com

やっていることは、プロジェクト用の設定ファイル .iml 内で直接値を書き換えるという内容。.imlはxmlで記述されている。guestbook というアプリであれば guestbook/.idea/guestbook.iml というファイル名になっている。この中の <module type>JAVA_MODULE になっているので PYTHON_MODULE に手動で書き換え、再起動する。

自分がやったときはどこかで書き換えタイミングを間違えたのか、.imlファイルでは PYTHON_MODULE になっているのに Python Plugin が認識されないという状態になってしまった。Python Pluginをアンインストール -> インストール、再起動しているうちになおった。