wiki:TipAndDoc/project/trac

Version 22 (modified by mitty, 10 years ago) (diff)

--

Trac

special wiki pages

  • ページの編集そのものがTracの挙動に対して影響する物
  • see also Tracサイトのロゴを変えたい - hack my life
    commonを指定すると、グローバルの/usr/share/trac/htdocsを見に行って、
    プロジェクトホーム/htdocsを見に行くときは、site/画像ファイル名と書いてあげれば良いことを発見。
    

install Trac 0.12

  • 0.12からデフォルトでローカライズされているが、インタアクト株式会社のtrac-jaでは更にデフォルトのWikiページ等が日本語化されている。
  • 方針として、aptitudeで十分なパッケージはaptitudeから導入する

Dependencies

  • sudo aptitude install -R -y python-setuptools
  • sudo aptitude install -R -y python-subversion
  • sudo aptitude install -R -y python-pygments
  • sudo easy_install pytz
  • sudo easy_install Genshi
    • Trac 0.12はGenshi 0.6以上を必要とするが、aptitudeから導入出来るのはpython-genshi => 0.5.1-2ubuntu1なため
  • sudo easy_install Babel
    • aptitude install python-pybabelで導入できる0.9.4でも動作するが、公式ではBabel 0.9.5以上と書かれているため。

clean install with original Trac-0.12.tar.gz

clean install with Trac-0.12.ja1.zip

upgrade from 0.11 to 0.12

  • インストールまでは上記と同様
  • /static/trac/へのリンクを切り替える
    • ex) sudo rm /var/www/trac; sudo ln -s /usr/local/lib/python2.6/dist-packages/Trac-0.12.ja1-py2.6.egg/trac/htdocs /var/www/trac
  • sudo trac-admin /path/to/var/trac/test/ upgrade
  • sudo trac-admin /path/to/var/trac/test/ wiki upgrade

Access control with Apache

  • 閲覧するだけであればGETメソッドを使うため、trac-adminで権限制御を行うほかにApache側でLimitを用いて編集を拒否することが出来る。
    <Directory />
            Options FollowSymLinks
            AllowOverride None
            Order Deny,Allow
            Deny from all
    </Directory>
    
    ScriptAlias /trac       /usr/share/trac/cgi-bin/trac.fcgi
    <Location /trac>
            Order Allow,Deny
            Allow from all
            <LimitExcept GET>
                    Order Allow,Deny
                    Deny from all
            </LimitExcept>
    </Location>
    
    • Orderディレクティブは省略時(デフォルト)では「Order Deny,Allow」と解釈されるので、以下のように略記できる。 => wiki:TipAndDoc/network/httpd#Accesscontrol
      ScriptAlias /trac       /usr/share/trac/cgi-bin/trac.fcgi
      <Location /trac>
              <LimitExcept GET>
                      Deny from all
              </LimitExcept>
      </Location>
      

MultipleRepository

  • https://twitter.com/mittyorz/status/21069493593706496
    • マルチリポジトリの時って、authz_module_nameはどうなるんだろう。整合性がとれない気がするんだが…
  • https://twitter.com/mittyorz/status/21079250299781121
    • 複数のリポジトリを、マルチリポジトリ機能を使って一つのtracでリポジトリブラウザから見るとき、各リポジトリを列挙するのと、そのリポジトリ達の中のデフォルトのリポジトリを表示するのは、排他なんだな…
  • 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.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 ではデフォルトのリポジトリ(規定のリポジトリ)と、一覧が同時に表示される
      No image "browser-Trac-0.12.ja1.png" attached to TipAndDoc/project/trac
    • Trac-0.12.1.ja1 ではデフォルトのリポジトリのみが表示される
      No image "browser-Trac-0.12.1ja1.png" attached to TipAndDoc/project/trac
      • trac/<ProjectName>/browser/<RepositoryName> でアクセスは問題なくできる
  • trac.ini
     .alias = paYYYYYY
    +.hidden = true
    
    • デフォルトのリポジトリを表示しないように設定した場合は、0.12 - 0.12.1で差異はない
      No image "browser-Trac-0.12.ja1-hidden.png" attached to TipAndDoc/project/trac

.tracignore

  • tar.gz>trac/web/main.py
    def get_tracignore_patterns(env_parent_dir):
        """Return the list of patterns from env_parent_dir/.tracignore or a
        default pattern of `".*"` if the file doesn't exist.
        """
        path = os.path.join(env_parent_dir, '.tracignore')
        try:
            lines = [line.strip() for line in read_file(path).splitlines()]
        except IOError:
            return ['.*']
        return [line for line in lines if line and not line.startswith('#')]
    
    
    def get_environments(environ, warn=False):
        """Retrieve canonical environment name to path mapping.
    
        The environments may not be all valid environments, but they are good
        candidates.
        """
    (snip)
            # Filter paths that match the .tracignore patterns
            ignore_patterns = get_tracignore_patterns(env_parent_dir)
            paths = [path[:-1] for path in paths if path[-1] == '/'
                     and not any(fnmatch.fnmatch(path[:-1], pattern)
                                 for pattern in ignore_patterns)]
            env_paths.extend(os.path.join(env_parent_dir, project) \
                             for project in paths)