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

分散レポジトリ型のWikiっぽいもの

Django Mercurial

CoCoWiki
http://code.google.com/p/cocowiki/

wiki
wiki posted by (C)perezvon

必要なもの

使い方

Mercurialレポジトリを作る。
$ hg init /path/to/repository
cocowikiの開発版をチェックアウト
$ svn checkout http://cocowiki.googlecode.com/svn/trunk/ cocowiki
$ cd cocowiki
settings.pyを編集

WIKI_REPOSITORYに先ほど作ったレポジトリのパスを設定。WIKI_MARKUPでマークアップ記法にtextile, restructuredtext, markdownのどれを使うかが選べる。

WIKI_REPOSITORY = '/path/to/repository'
WIKI_HOME = 'Home'
WIKI_SITE_NAME = u'CoCoWiki'
WIKI_MARKUP = 'textile'   # 'restructuredtext', 'markdown', or 'textile'
起動
$ python manage.py runserver 127.0.0.1:8000

最初はページがないので、フォーム上から適当につくる。ファイル添付もできる。

注意すべきこと

レポジトリで文書管理

先ほど作ったレポジトリはマスターレポジトリで、このレポジトリ内のファイルは直接操作してはいけない。普段は子レポジトリで作業を行う。

レポジトリを作成
$ hg clone /path/to/repository /path/to/child/repository
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

テストのためにローカルレポジトリからローカルレポジトリのクローンを作ったが、実際はssh等を使うことになるだろう。

レポジトリで変更を加える

先ほどWeb経由で作ったHomeというファイルを編集する

$ cd /path/to/child/repository
$ emacs Home
$ hg diff
diff -r eeb613ffda88 Home
--- a/Home      Sun Mar 02 12:51:03 2008 +0900
+++ b/Home      Sun Mar 02 13:13:03 2008 +0900
@@ -1,1 +1,2 @@ Hello World
-Hello World
\ No newline at end of file
+Hello CoCoWiki!
+

コミットして、親レポジトリに変更を反映させる。

$ hg commit -m "Updated Home page"
$ hg push
pushing to /path/to/repository
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files

ページが更新されたことをブラウザで確認する。
Web上では、まだ衝突の解消ができないので、必ず子レポジトリを使っている人間がhg pull, hg up, hg mergeで衝突を解消しなくてはいけない。

今後の課題

Mercurialの内部APIを調べながら、コンセプトを実証するために書いているので、まったく実用に耐える品質ではない。
とりあえず、アクセスするたびに親レポジトリでupdateをかけていたり、Web上で更新時にはレポジトリごとロックをかけていたりで遅いので改善する。