SRC_ROOT 直下にシンボリックリンクがあるとダメっぽい。 インデックス生成後にソースコードを表示すると例外が発生してしまう。 分散しているコードツリーを SRC_ROOT の下にシンボリックリンクで集めたらよさそうと思ったんだけど、そうもいかないみたい。残念。
2010年3月30日火曜日
2010年3月22日月曜日
opengrok: SCMと連携
まず、リポジトリの場所について。リポジトリはリモートにあってもかまわないけど、 opengrok で使う場合はちょくちょくリポジトリにアクセスが発生するのでローカルにおいておいた方がよさげ。 svnsync なり cvsup なり rsync なりでミラーリングしておく。
で、このリポジトリから一旦チェックアウトしておく必要があって、 よく分からないけどそういうものらしい。ちょっと面倒。 そこにファイルがないとインデックスが作成されないようで、 svn co --depth=files ... みたいにしてもダメだった。
というわけで、仮に以下のようにチェックアウトしたとします:
~/src /linux /openbsd /opengrok
インデックスの作成はopengrok に付属の run.sh を編集して使うのが便利で、 run.sh は結局以下のようになりました。
#!/bin/sh
PROGDIR=`dirname $0`
# REQUIRED The root of your source tree SRC_ROOT=/home/yourname/src
# REQUIRED The directory where the data files like # Lucene index and hypertext cross-references are stored DATA_ROOT=/var/opengrok/data
# OPTIONAL A tab separated files that contains small # descriptions for paths in the source tree PATH_DESC=${PROGDIR}/paths.tsv
EXUB_CTAGS=/usr/bin/ctags
# You might want to add more available memory, and perhaps use a server jvm? JAVA_OPTS="-server -Xmx1024m"
LOGGER="-Djava.util.logging.config.file=conf/logging.properties"
- java ${JAVA_OPTS} ${PROPERTIES} ${LOGGER} -jar ${PROGDIR}/opengrok.jar
- ${SCAN_FOR_REPOS} -c ${EXUB_CTAGS} -s ${SRC_ROOT} -d ${DATA_ROOT} -W configurat ion.xml -r on -H -S -v -P
# OPTIONAL java ${LOGGER} -classpath ${PROGDIR}/opengrok.jar org.opensolaris.opengrok.web.Efta rFile ${PATH_DESC} ${DATA_ROOT}/index/dtags.eftar
-P オプションを付けると複数のプロジェクトを個別にあつかうことができます。
あと、リポジトリ、それをチェックアウトしたもの、opengrok のインデックスで 結構な数のファイルが作成され、inode が足りなくなってハマリました。
opengrok: OpenGrok を使う
OpenGrok は Sun 謹製のクロスリファレンスツール。
対応している言語は
- C/C++
- Shell Scripts (like ksh, sh)
- Perl
- Java, Java Class files, JAR files
- ELF files
- troff man pages
- Zip, Gzip, BZip2, Tar
- meta language files (like XML, SGML or HTML)
これ以外のファイルでもリファレンスが正しくできないだけで、 全く表示されないということはない。
また、主要なSCM に対応している。
- CVS
- Git
- Subversion
- 他にも沢山
ちょっと使ってみただけだけど lxr と比べて、対応している SCM が多かったりと 高機能な割に導入が簡単で見た目もよい。 あとは Python と Ruby に対応してくれれば... まあ自分で作ればいいか。
以下、opengrok をインストールしたときのメモ。OS は debian-lenny。
sun-java6-jdk, tomcat5.5, tomcat5.5-admin, tomcat5.5-webapps, exuberant-ctags あたりをインストール。
opengrok-0.8.1.tar.gz をダウンロードして、適当に展開。 このディレクトリを ~/opengrok-0.8.1 としておきます。
source.war の deploy:
cd ~/opengrok-0.8.1 sudo ./OpenGrok deploy
/etc/tomcat5.5/policy.d/04webapps.policy でパーミッションを追加:
grant codeBase "file:${catalina.home}/webapps/source/-" { permission java.security.AllPermission; }; grant codeBase "file:${catalina.home}/webapps/source/WEB-INF/lib/-" { permission java.security.AllPermission; };
次。クロスリファレンスしたいソースコードを用意。 このディレクトリを ~/src としておきます。
インデックスを作成:
java -server -Xmx1024m -s ~/src -d ~/ogk-data -W configuration.xml -v sudo cp configuration.xml /var/opengrok/etc/configuration.xml
あとは tomcat を再起動すれば http://<your-site-url>:port/source/ で表示されるはず。
2010年3月14日日曜日
2010年3月13日土曜日
misc: graphviz (dot言語) から Ascii Art に変換 (graph-easy)
graphviz は dot言語から各種フォーマットに対応しているけど、 Ascii Art に変換できないのが不満といえば不満。
_GraphEazy では dot --> ascii-art の変換に対応していて、これを使うのがよさげ。
$ echo "[ test ] -- hoge --> [user1]" | graph-easy --as=graphviz digraph GRAPH_0 { // Generated by Graph::Easy 0.64 at Sat Mar 13 00:38:04 2010 edge [ arrowhead=open ]; graph [ rankdir=LR ]; node [ fontsize=11, fillcolor=white, style=filled, shape=box ]; test -> "user1" [ color="#000000", fontcolor="#000000", label=hoge ] } $ echo "[ test ] -- hoge --> [user1]" | graph-easy --as=graphviz | \ graph-easy --from=graphviz +------+ hoge +-------+ | test | ------> | user1 | +------+ +-------+
""[ test ] -- hoge --> [user1]"" の部分は graph-easy 形式。 ちょっとしたネットワーク図を AA で書くときは:
$ echo "[ test ] -- hoge --> [user1]" | graph-easy
と, graphviz を経由しなくても OK。
misc: 作成中の man ファイルの確認
man ファイルを編集した後、確認したくても man -f man.1 みたいなことができなくて どうしたものかと悩んでたけど、こうすればいいみたい:
groff -mandoc -Tlatin1 /usr/share/man/man1/man.1 | less
スッキリ。
2010年3月11日木曜日
debian: backports を利用する
debian を使っていると、一部のパッケージだけ新しくしたいことがある。 tar ball を拾ってきて make install でもいいんだけど、バージョン管理とかめんどう。
そんなときは backports を使うとかなり便利。
まず、/etc/apt/sources.list に以下を追加:
deb http://www.backports.org/debian lenny-backports main contrib non-free
あとは順次更新していくだけ。
- aptitude update
- aptitude -t lenny-backports install "package"
ただ、このままにしておくと、upgrade した時に他のパッケージまで lenny-backports のもので更新されてしまってよろしくない。
/etc/apt/preferences に以下のようにしておくとよさげ:
Package: "package name" Pin: release a=lenny-backports Pin-Priority: 999 Package: * Pin: release a=lenny-backports Pin-Priority: 200
参考: http://www.backports.org/dokuwiki/doku.php?id=instructions
misc: コメントの指針
いつもコードにコメントを入れるか入れるまいか悩むけど、なるほどなと思った指針があったのでメモ。
http://www.infoq.com/jp/news/2010/03/To-Comment-or-Not-to-Comment
「なぜ」というコメント == 役に立つ 「どのように」というコメント == 疑わしい