No meu trabalho eu tenho um servidor que tem o SVN e Trac instalado para gerenciar os projetos.
Cenário
Hoje eu estava trabalhando em um projeto em Ruby on Rails que tem alguns arquivos com os nomes login.css, login.html.erb e login.erb na sua estrutura e por consequência estão contidos no repositório SVN.
Problema
Quando eu faço svn checkout do repositório, os arquivos com o prefixo login não eram puxados, o mesmo acontecia quando eu fazia um svn update.
Solução
Eu descobri que isso acontece por causa de uma configuração do Trac que interpreta tudo que tenha login como uma url de acesso para usa interface administrativa.
Essa configurção está contida no arquivo:
/etc/apache2/conf.d/trac.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | # Example configuration for a trac website # # put the string SVN_TRAC in /etc/sysconfig/apache2 APACHE_SERVER_FLAGS # to enable the URL and add one of TRAC_CGI, TRAC_FCGI or TRAC_MODPYTHON # http://localhost/trac <IfDefine TRAC_CGI> ScriptAlias /trac /srv/www/cgi-bin/trac.cgi <Location "/trac"> SetEnv TRAC_ENV_PARENT_DIR "/srv/trac" Order allow,deny Allow from all </Location> <LocationMatch "/[^/]+/login"> AuthType Basic AuthName "Trac" AuthUserFile /srv/svn/repos/.htpasswd Require valid-user </LocationMatch> </IfDefine> <IfDefine TRAC_FCGI> ScriptAlias /trac /srv/www/cgi-bin/trac.fcgi FastCgiConfig -initial-env TRAC_ENV_PARENT_DIR=/srv/trac <Location "/trac"> Order allow,deny Allow from all </Location> <LocationMatch "/[^/]+/login"> AuthType Basic AuthName "Trac" AuthUserFile /srv/trac/user_access/passwdfile Require valid-user </LocationMatch> </IfDefine> <IfModule mod_python.c> <IfDefine TRAC_MODPYTHON> ScriptAlias /trac "/srv/trac" <Location /trac> SetHandler mod_python PythonInterpreter main_interpreter PythonHandler trac.web.modpython_frontend PythonOption TracEnvParentDir /srv/trac PythonOption TracUriRoot /trac Order allow,deny Allow from all </Location> <LocationMatch "/[^/]+/login"> AuthType Basic AuthName "Trac" AuthUserFile /srv/trac/user_access/passwdfile Require valid-user </LocationMatch> </IfDefine> </IfModule> |
Onde aparecer a linha:
<LocationMatch "/[^/]+/login">
para:
<LocationMatch "/[^/]+/login$">
Ficando da seguinte forma o arquivo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | # Example configuration for a trac website # # put the string SVN_TRAC in /etc/sysconfig/apache2 APACHE_SERVER_FLAGS # to enable the URL and add one of TRAC_CGI, TRAC_FCGI or TRAC_MODPYTHON # http://localhost/trac <IfDefine TRAC_CGI> ScriptAlias /trac /srv/www/cgi-bin/trac.cgi <Location "/trac"> SetEnv TRAC_ENV_PARENT_DIR "/srv/trac" Order allow,deny Allow from all </Location> <LocationMatch "/[^/]+/login$"> AuthType Basic AuthName "Trac" AuthUserFile /srv/svn/repos/.htpasswd Require valid-user </LocationMatch> </IfDefine> <IfDefine TRAC_FCGI> ScriptAlias /trac /srv/www/cgi-bin/trac.fcgi FastCgiConfig -initial-env TRAC_ENV_PARENT_DIR=/srv/trac <Location "/trac"> Order allow,deny Allow from all </Location> <LocationMatch "/[^/]+/login$"> AuthType Basic AuthName "Trac" AuthUserFile /srv/trac/user_access/passwdfile Require valid-user </LocationMatch> </IfDefine> <IfModule mod_python.c> <IfDefine TRAC_MODPYTHON> ScriptAlias /trac "/srv/trac" <Location /trac> SetHandler mod_python PythonInterpreter main_interpreter PythonHandler trac.web.modpython_frontend PythonOption TracEnvParentDir /srv/trac PythonOption TracUriRoot /trac Order allow,deny Allow from all </Location> <LocationMatch "/[^/]+/login$"> AuthType Basic AuthName "Trac" AuthUserFile /srv/trac/user_access/passwdfile Require valid-user </LocationMatch> </IfDefine> </IfModule> |
Agora reinicie o apache:
/etc/init.d/apache2 restart
Fazendo isso você deve conseguir fazer svn checkout e svn update do arquivos com prefixo login.
O que eu fiz foi alterar a expressão regular apenas, desta forma ela casa exatamente com /login, ou seja, pode dar problema ainda com diretórios que tenha o nome login, acredito que para arrumar isso seja necessário configurar o trac em um virtual host no apache, e remover essa configurações do trac.conf.

