svn: attempt to write a readonly database
subversion1.4くらいの古いバージョンを使ってたのだけど、1.6にあがってから上記のようなエラーメッセージが出ることが稀によくある。 このほど理由が分かったのでメモ。
エラーは出るが実はコミットされる
↓こんな感じ
$ svn ci 送信しています path/to/working/dir/changed/file ファイルのデータを送信しています ..svn: コミットに失敗しました (詳しい理由は以下のとおりです): svn: attempt to write a readonly database svn: attempt to write a readonly database svn: コミットメッセージが一時ファイルに残っていました: svn: '/path/to/working/dir/svn-commit.tmp'
このようなエラーは出るものの
- リポジトリにはちゃんと変更が反映されている
- でも作業ディレクトリではcommitできてないことになってる
- なので"svn up"するとリポジトリの内容がマージされる("G"マークがつく)
- 結果的には一応問題なし
でも気持ち悪いよね・・・
原因は書き込み権限
"attempt to write a readonly database"はSQLite3が吐いてるメッセージで、svnが使ってるSQLite3のデータベースファイルに書き込み権限がないという状態。
じゃぁどのファイルかというと・・・
$ ls -l /path/to/repository/db/rep-cache.db -rw-r--r-- 1 hoge svn 4096 3月 8 10:44 rep-cache.db
解決
$ chmod g+w rep-cache.db -rw-rw-r-- 1 hoge svn 4096 3月 8 10:44 rep-cache.db
これまでほとんど最初から一人で作業してたため「稀によくある」状態になってた。
エラーメッセージにファイル名でも入れといてくれればいろいろ楽だったのに。 sqlite General error: 1 SQL logic error or missing database の件といいSQLiteのメッセージはそっけなさすぎる。