[[PageOutline]] * TracRepositoryAdmin = MultipleRepository = * https://twitter.com/mittyorz/status/21069493593706496 * マルチリポジトリの時って、authz_module_nameはどうなるんだろう。整合性がとれない気がするんだが… * https://twitter.com/mittyorz/status/21079250299781121 * 複数のリポジトリを、マルチリポジトリ機能を使って一つのtracでリポジトリブラウザから見るとき、各リポジトリを列挙するのと、そのリポジトリ達の中のデフォルトのリポジトリを表示するのは、排他なんだな… * .hidden = true について * ~~要検証。~~ => [#a0.12vs0.12.1] * https://twitter.com/mittyorz/status/21079947758014464 * 「.alias = hogehoge」しないと、一番最初に記述されたのがデフォルトのリポジトリと見なされるのかな * デフォルトのリポジトリ(「.alias = hogehoge」)は、svn-hookを使わなくてもsyncされる * デフォルトのリポジトリを、マルチリポジトリの他のリポジトリに(trac.iniで)切り替えると、(trac-adminなしで)up-to-dateになる == 0.12 vs 0.12.1 == * 「規定のリポジトリ」の表示のされ方が、Trac 0.12とTrac 0.12.1で異なる * trac.ini {{{ [repositories] hoXXXXX.dir = /var/svn/-----/hoXXXXX hoXXXXX.type = svn hoXXXXX.url = https://ubuntu64/svn/hoXXXXX/ paYYYYYY.dir = /var/svn/-----/paYYYYYY paYYYYYY.type = svn paYYYYYY.url = https://ubuntu64/svn/paYYYYYY/ s0ZZZZZZZ.dir = /var/svn/-----/s0ZZZZZZZ s0ZZZZZZZ.type = svn s0ZZZZZZZ.url = https://ubuntu64/svn/s0ZZZZZZZ/ woXYZXYZXYZ.dir = /var/svn/-----/woXYZXYZXYZ woXYZXYZXYZ.type = svn woXYZXYZXYZ.url = https://ubuntu64/svn/woXYZXYZXYZ/ .alias = paYYYYYY }}} * Trac-0.12.ja1 ではデフォルトのリポジトリ(規定のリポジトリ)と、一覧が同時に表示される[[br]][[Image(browser-Trac-0.12.ja1.png, 33%)]] * Trac-0.12.1.ja1 ではデフォルトのリポジトリのみが表示される[[br]][[Image(browser-Trac-0.12.1ja1.png, 33%)]] * trac//browser/ でアクセスは問題なくできる * trac.ini {{{#!diff .alias = paYYYYYY +.hidden = true }}} * デフォルトのリポジトリを表示しないように設定した場合は、0.12 - 0.12.1で差異はない[[br]][[Image(browser-Trac-0.12.ja1-hidden.png, 33%)]] = Migration from a single-repository setup = * #37 * wiki:TracRepositoryAdmin#Migration == before migration == * 4 repositories and 2 tracs 1. ls -ld /var/svn/lab/* {{{ drwxr-x--x 7 root www-data 90 2010-09-19 11:31 /var/svn/lab/lab drwxr-x--x 7 root www-data 90 2011-01-02 19:02 /var/svn/lab/lab.test drwxr-x--x 7 root www-data 90 2010-12-16 16:37 /var/svn/lab/test drwxr-x--x 7 root www-data 90 2010-12-19 22:45 /var/svn/lab/test2 }}} 1. ls -ld /var/trac/lab/* {{{ drwxr-x--x 9 root www-data 124 2009-06-04 16:14 /var/trac/lab/lab drwxr-x--x 9 root www-data 124 2010-12-16 17:02 /var/trac/lab/test }}} * リポジトリとTracのリスト[[br]][[Image(svn-list.png, 33%)]] [[Image(single-list.png, 33%)]] * Tracのリポジトリブラウザとタイムライン[[br]][[Image(single-browser.png, 33%)]] [[Image(single-timeline.png, 33%)]] == step by step == 1. remove "repository_dir" from trac.ini * diff -u /var/trac/lab/test/conf/trac.ini.20110101 /var/trac/lab/test/conf/trac.ini {{{#!diff --- /var/trac/lab/test/conf/trac.ini.20110101 2011-01-01 15:24:22.593393957 +0900 +++ /var/trac/lab/test/conf/trac.ini 2011-01-02 19:46:06.503404153 +0900 @@ -14,4 +14,3 @@ [trac] authz_file = /path/to/config/files/passwd/svn-authz.lab authz_module_name = test -repository_dir = /var/svn/lab/test }}} * Tracのリポジトリブラウザとタイムラインから、エントリが消える[[br]][[Image(rm-repository_dir-browser.png, 33%)]] [[Image(rm-repository_dir-timeline.png, 33%)]] 1. add "[repositories]" to trac.ini * diff -u /var/trac/lab/test/conf/trac.ini.20110101 /var/trac/lab/test/conf/trac.ini {{{#!diff --- /var/trac/lab/test/conf/trac.ini.20110101 2011-01-01 15:24:22.593393957 +0900 +++ /var/trac/lab/test/conf/trac.ini 2011-01-02 22:35:21.763411095 +0900 @@ -11,7 +11,17 @@ name = test url = https://lab.mitty.jp/trac/test/ +[repositories] +lab.test.dir = /var/svn/lab/lab.test +lab.test.type = svn +lab.test.url = http://lab.mitty.jp/svn/lab.test/ +test.dir = /var/svn/lab/test +test.type = svn +test.url = http://lab.mitty.jp/svn/test/ +test2.dir = /var/svn/lab/test2 +test2.type = svn +test2.url = http://lab.mitty.jp/svn/test2/ + [trac] authz_file = /path/to/config/files/passwd/svn-authz.lab authz_module_name = test -repository_dir = /var/svn/lab/test }}} * resyncするまではリポジトリの情報が見れない[[br]][[Image(add-[repositories]-browser.png, 33%)]] 1. resync repositories 1. sudo trac-admin /var/trac/lab/test/ repository resync "*" {{{ Resyncing repository history for lab.test... 3 revisions cached. Resyncing repository history for test... 4 revisions cached. Resyncing repository history for test2... 2 revisions cached. Done. }}} * resync後のリポジトリブラウザとタイムライン[[br]][[Image(resync-[repositories]-browser.png, 33%)]] [[Image(resync-[repositories]-timeline.png, 33%)]] * それまでの「/trunk」ではアクセスが出来なくなる[[br]][[Image(resync-[repositories]-trunk.png, 33%)]] * svn commitしても、リポジトリの情報は更新されない * D:\tmp>svn ci lab.test -m " * mkdir 4 for lab.test" {{{ Adding lab.test\trunk\4 Committed revision 4. }}} * 「lab.test」リポジトリはrevisionが「3」のまま[[br]][[Image(no-change-on-commit.png, 33%)]] 1. add ".alias = lab.test" to trac.ini * diff -u /var/trac/lab/test/conf/trac.ini.20110101 /var/trac/lab/test/conf/trac.ini {{{#!diff --- /var/trac/lab/test/conf/trac.ini.20110101 2011-01-01 15:24:22.593393957 +0900 +++ /var/trac/lab/test/conf/trac.ini 2011-01-02 23:00:13.925906625 +0900 @@ -11,7 +11,19 @@ name = test url = https://lab.mitty.jp/trac/test/ +[repositories] (snip) +test2.url = http://lab.mitty.jp/svn/test2/ + +.alias = lab.test + [trac] (snip) }}} * 「規定のリポジトリ」が表示される[[br]][[Image(add-.alias-browser.png, 33%)]] * revisionも「4」に更新される * 「/trunk」でのアクセスが復活する[[br]][[Image(add-.alias-trunk.png, 33%)]] 1. add ".hidden = true" * diff -u /var/trac/lab/test/conf/trac.ini.20110101 /var/trac/lab/test/conf/trac.ini {{{#!diff --- /var/trac/lab/test/conf/trac.ini.20110101 2011-01-01 15:24:22.593393957 +0900 +++ /var/trac/lab/test/conf/trac.ini 2011-01-02 23:06:31.585907819 +0900 @@ -11,7 +11,20 @@ name = test url = https://lab.mitty.jp/trac/test/ +[repositories] (snip) + +.alias = lab.test +.hidden = true + [trac] (snip) }}} * 「規定のリポジトリ」が表示されなくなる[[br]][[Image(add-.alias_.hidden-browser.png, 33%)]] * 「/trunk」では、「規定のリポジトリ」の「/trunk」に今まで通りアクセスできる[[br]][[Image(add-.alias_.hidden-trunk.png, 33%)]] 1. change ".alias" to "test" from "lab.test" * diff -u /var/trac/lab/test/conf/trac.ini.20110101 /var/trac/lab/test/conf/trac.ini {{{#!diff --- /var/trac/lab/test/conf/trac.ini.20110101 2011-01-01 15:24:22.593393957 +0900 +++ /var/trac/lab/test/conf/trac.ini 2011-01-02 23:08:53.633399243 +0900 @@ -11,7 +11,19 @@ name = test url = https://lab.mitty.jp/trac/test/ +[repositories] (snip) +test2.url = http://lab.mitty.jp/svn/test2/ + +.alias = test + [trac] (snip) }}} * ".alias"を変更することで「規定のリポジトリ」が変更される[[br]][[Image(change-.alias-browser.png, 33%)]] [[Image(change-.alias-trunk.png, 33%)]] * タイムラインには変化はない[[br]][[Image(change-.alias-timeline.png, 33%)]] 1. add post-commit to each repositories and symlink trac environment 1. sudo ln -s /path/to/config/files/svn/hooks/post-commit /var/svn/lab/lab/hooks/ 1. sudo ln -s /path/to/config/files/svn/hooks/post-commit /var/svn/lab/test/hooks/ 1. sudo ln -s /path/to/config/files/svn/hooks/post-commit /var/svn/lab/test2/hooks/ 1. sudo ln -s test /var/trac/lab/lab.test 1. sudo ln -s test /var/trac/lab/test2 * ln -sを使って、post-commitが正常に「test」を更新できるようにする 1. ls -ld /var/trac/lab/* {{{ drwxr-x--x 9 root www-data 124 2009-06-04 16:14 /var/trac/lab/lab lrwxrwxrwx 1 root root 4 2011-01-03 23:28 /var/trac/lab/lab.test -> test drwxr-x--x 9 root www-data 124 2010-12-16 17:02 /var/trac/lab/test lrwxrwxrwx 1 root root 4 2011-01-03 23:28 /var/trac/lab/test2 -> test }}} * 副作用として、「test」が三つ表示される[[br]][[Image(trac-env-symlink-list.png, 33%)]] 1. /path/to/config/files/svn/hooks/post-commit {{{#!sh #!/bin/sh # POST-COMMIT HOOK # # The post-commit hook is invoked after a commit. Subversion runs # this hook by invoking a program (script, executable, binary, etc.) # named 'post-commit' (for which this file is a template) with the # following ordered arguments: # # [1] REPOS-PATH (the path to this repository) # [2] REV (the number of the revision just committed) # (snip) # Here is an example hook script, for a Unix /bin/sh interpreter. # For more examples and pre-written hooks, see those in # /usr/share/subversion/hook-scripts, and in the repository at # http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/ and # http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/ REPOS="$1" REV="$2" # "$REPOS"/hooks/mailer.py commit "$REPOS" $REV "$REPOS"/mailer.conf PROJECT_NAME=`basename $REPOS` DIRNAME=`dirname $REPOS` SUB_ROOTDIR=`basename $DIRNAME` export PYTHON_EGG_CACHE="/tmp" export TRAC_ENV="/var/trac/${SUB_ROOTDIR}/${PROJECT_NAME}" /path/to/config/files/trac/contrib/trac-svn-hook $REPOS $REV }}} 1. /path/to/config/files/trac/contrib/trac-svn-hook * trac:source:/tags/trac-0.12.1/contrib/trac-svn-hook 1. add .tracignore 1. sudo vim /path/to/config/files/trac/conf/lab.tracignore {{{ .* lab.test test2 }}} 1. sudo ln -s /path/to/config/files/trac/conf/lab.tracignore /var/trac/lab/.tracignore * .tracignoreを追加し、不必要なTracを一覧に表示させない[[br]][[Image(tracignore.png, 33%)]] * 表示はさせないが、URLを知っていればアクセスは出来る == test post-commit == * post-commitにより、リポジトリの更新はTrac側に通知される * D:\tmp>svn ci lab.test -m " * mkdir 5 for lab.test" {{{ Adding lab.test\trunk\5 Committed revision 5. }}} * cat /var/trac/lab/test/log/svn-hooks-lab.test.log {{{ Changeset 5 added OK }}} * 「lab.test」のrevisionが「5」に更新される[[br]][[Image(updated-by-post-commit.png, 33%)]]