読者です 読者をやめる 読者になる 読者になる

これは圏です(はてな使ったら負けだとおもっていた)

きっと何者にもなれないつぎの読者につづく。

Gitolist、開発中。

Gitolist Haskell Yesod プログラミング Git

どうもどうも。

Gitolite を使ってさくら VPS 上と手許のマシンとで色々TeXやらプログラムやらを管理してるんですが、なんかウェブ経由で色々見れたほうが便利だし、構ってちゃん精神的にも嬉しいですよね。
まあそのために GitHub があると云えばそうなんですが、重いし Hub に上げるまでもないようなものもあったり。

あとは最近 Category Theory の和訳をしていて、それを本を持っている限られた人だけに公開したい、と云うニーズもあったり。GitHub だとこの辺りのことは pay しないと private なのは作れないですし。

と云う訳で、Gitolite で設定したアクセス権に応じて見せたり見せなかったり、と云う Web Frontend を Yesod で作っています。まだ全然機能的には足りていないですが、動いている模様は http://gitweb.konn-san.com/ で見ることが出来ます(時々落としたりしますが)。

取り敢えずレポジトリGitHub開発中のGitolistで見ることが出来ます。

機能紹介

現時点では、 Gitolite で guest が読み書きできるレポジトリの内容だけアクセスすることが出来ます。
例えば gitolist や TeX の内容は読めると思いますが、"Category Theory" を選んでも現時点では Forbidden が返るはずです。
ゆくゆくはログイン機能を実装して、ちゃんとアクセス制御が動いてるのがわかるような感じにする予定です。内部的にはまああとはログインさえ普通に実装しちゃえば恐らく動くはずで。登録機能を付けるかどうかはちょっとむずかしいですが、clone とか出来るようになったらよいかもしれない。

現状では以下の機能があります。

  • ディレクトリ内容の一覧機能
    • README.* があったらその内容を整形して表示
  • ファイルのプレビュー
    • ソースコードはカラーリングして表示。一部画像ファイルは埋め込んだ形で見れます。
    • 一応日本語文字コードの範囲内であれば判定して、自動的にUTF-8に変換して表示。
    • 表示に対応していないものは Link を表示。
  • ファイルの個別ダウンロード
  • Commit / Branch を tarball で落とせる(ディレクトリ表示のさいに Get Tarball をクリック!)

デザインの才能がないので質素な動作画面です。

f:id:mr_konn:20120222015639p:plainf:id:mr_konn:20120222015634p:plain

設定方法

  1. Gitolite をインストールします。
  2. git clone git://github.com/konn/gitolist.git *1
  3. Settings.hs を書き換える。repositoriesPath を Gitolite の repositories への絶対パス、guestName をウェブからログインなどせずにアクセスした場合のデフォルトでのユーザ名。
  4. config/settings.yml を環境に合わせて書き換える。
  5. cabal install または cabal-dev install
    • charsetdetect package を使ったより正確な文字コード判定をしたい場合は -fcharsetdetect オプションを付けることをお勧めします。と云うか最初はこのオプションを付けてインストールしてみて、失敗するようだったら外してください。
  6. gitolist Production --port 3000

TODO

レポジトリ閲覧サービスとしては致命的なことに以下の機能がありません。これから実装します。

  • ログイン機能
    • Gitolite と連動した柔軟なアクセス制御を謳っていながら、肝心のログイン機能を付けてないので意味がないです。近い内に付けます。その場合登録機能をどうするかっていうのが難しいのでその部分だけ遅れて実装される可能性大。
  • Commit / Tag / Branch の一覧機能
    • レポジトリの commit / tag / branch を一括して取得する方法がよくわかんないのでこれから調べて実装します。ref がわかってる場合は適当に /tree/abcdefewefwfee とかすればその commit / tag / branch が見えますし、Get Tarball でその版の tarball も持ってこれます。
  • ファイルやディレクトリのヒストリを見る
    • commit / tag / branch 一覧機能が実装できればこいつもなんとかなるはず。
  • Clone 用 URL の提供
    • 面倒なので今度やります。
  • 綺麗で直感的な GUI
    • 才能〜〜〜
  • Big Conf の対応
    • やる気ないです。誰か実装したら教えてください。

裏話

まあ最初は gitweb 使おうと思ったんですよね。でもなんか Gitolite との連携を設定しようと思ったんですが ssh gitolite htpasswd が上手く動かなくて挫折。まあ自分で更新すりゃあよかったんですが。
あとは実際には Mighttpd2 のリバースプロクシ経由で動かしていて、何故か gitweb cgi がその環境だと上手いこと動いてくれなかったのでじゃあ自分で書いちゃおう、と。

でまあ Gitolite の conf の parser を書いたぞ!と云うところで d:id:maoe さん経由でgitlabの存在を知る。ほげーーー。まさにこれ欲しかったやつじゃんGitoliteとの連携もするしなんかUIもリッチだしこれでいいんじゃね????私の努力なんだったの……!と云う気分になるも Rails のセットアップに挫折。Ruby Must Go! オワコン

と云う訳で、しっかりした Yesod App 書いたことなかったなぁ、と思ったので勉強も兼ねて一から実装している次第。Git repo を読むのは d:id:kazu-yamamoto さんのgit-object を使ってます。

まあそんな訳で、ぼちぼち開発していきます。ぼちぼちと云いましたがここ四日間は殆んどこれに費していて(その割に進度が遅いですね!)、まあ明日以降は少しずつ控え目に実装していくことになるかと。
なんかアドバイスとかあったらください。

ではでは。