Redmine のシンタックスハイライトを Rouge にするプラグイン(他3点)

ここ最近、必要に迫られて rubyrails もよく知らないのに Redmineプラグインを何個か作ったので紹介します。

redmine_rouge

Redmine のシンタックスハイライトエンジンを Rouge に変更します。

Redmine はデフォルトだと CodeRay でシンタックスハイライトしますが、対応している言語が少ないです(c# とか未対応です)。

このプラグインを導入すると、より多くの言語のシンタックスハイライトが可能になります。

...

シンタックスハイライトといえば Pygments が有名です。 Python 製ですが Pygments.rb を使えば ruby からも簡単に呼ぶことができます。

が、Rouge の方が(Pygments.rb 経由の)Pygments よりも動作が軽快で導入も楽です。

redmine_redcarpet_viewer

Redmineリポジトリタブで Markdown ファイルを表示したときに Redcarpet で整形して表示します。

redmine_parent_due_prefer_nil

Redmine の親子関係のチケットで、子チケットに期日が未設定のものと設定済のものが混在している場合、 標準の動作だと「期日が設定済のチケットの中で最後の期日」が親チケットの期日として設定されます。

例えば、次のように親子チケットが登録されている場合、親チケットである A の期日は「02/03」になります。

  • チケットA
    • チケットB 期日: 01/02
    • チケットC 期日: 02/03
    • チケットD 期日: 未設定

このプラグインはその動作を変更し、子チケットに期日が未設定のものが1つでもあれば親チケットの期日も未設定のままにします。

例えば上記の例では親チケットの期日は「未設定」になります。チケット D の期日が設定されたときに、親チケットの期日も設定されます。

どちらが良いかは運用次第だと思いますが、最初に期日を未設定のままチケットを登録できるだけ登録し、 週一とかのスパンでチケットを棚卸しするような運用だと上記のケースで親チケットは「未設定」のままになってくれた方が都合が良いです。

redmine_fetch_changesets_post

Redminesys/fetch_changesets API で POST メソッドも受け付けるようにします。

プラグインの実体は これだけ です。 いまだかつてこれほどショボいプラグインはあっただろうか・・・

...

(同じホスト上の)Redmine と GitLab を連携させるとき、GitLab のリポジトリディレクトリに適切なパーミッションを設定して Redmine にパスを指定するだけでリポジトリタブで閲覧できるようになりますが、 それだけでは GitLab にコミットが Push された後、rake redmine:fetch_changesets を実行するか、誰かが Redmineリポジトリタブを開くまでリポジトリの更新が Redmine には反映されません。

コミットログに refs や fixes でチケット番号を含めていても、チケットにコミットが紐付くのはそのタイミングなので、 クローズされるはずのチケットがなかなかクローズされないことがあり不便です。

GitLab の WebHook で Redminesys/fetch_changesets を叩けば解決しそうですが、 Redminesys/fetch_changesets は GET メソッドしか受け付けず、GitLab の WebHook は POST メソッドなので、そのままでは連携させられません。

このプラグインを導入すれば sys/fetch_changesets が POST メソッドも受け付けるようになるので、GitLab の WebHook で次のように設定すれば Redmineリポジトリの更新を即座に反映させられます。

  • http://redmine.example.net/sys/fetch_changesets?id=<project_id>