Misturando configurações do Subversion “SVNParentPath” e por repositório?

9

Dada uma configuração típica do Subversion / Apache usando SVNParentPath, com repositórios hospedados /svn/assim:

<Location /svn>
    DAV svn

    SVNParentPath /srv/source/svn/repos
    SVNReposName "Subversion Repository"

    AuthzSVNAccessFile /srv/source/svn/authz
    Satisfy Any

    AuthType                Basic
    AuthBasicProvider       file
    AuthName "Subversion Repository"
    AuthUserFile /srv/source/svn/htpasswd

    Require valid-user
</Location>

Existe uma maneira de substituir essa configuração para repositórios específicos sem precisar hospedá-los em um caminho diferente? Ou seja, existe alguma maneira de adicionar um Locationbloco como este ...

<Location /svn/my_special_repo>
    SVNPath /srv/source/svn/repos/my_special_repo
    AuthzSVNAccessFile /srv/source/svn/repos/my_special_repo/conf/authz
</Location>

... e substituiu a configuração fornecida no Locationbloco /svn? Minhas tentativas de fazer isso com a configuração acima foram recebidas com erros estranhos e inúteis no log de erros do Apache, como:

[Wed Feb 02 11:28:35 2011] [error] [client 10.10.209.120]
(20014)Internal error: Can't open file '/srv/source/svn/repos/svn/format':
No such file or directory

Tudo isso parece ser a maneira de mod_dav_svn me dizer que não posso fazer o que estou tentando fazer. Estou aberto a soluções ou alternativas!

EDIT : Bem, posso ver que essa pergunta gerou muita empolgação entre os leitores. Para o registro, o que posso acabar fazendo é gerar configurações por repositório para todos os repositórios existentes e abandonar a SVNParentPathconfiguração baseada. A configuração do Apache por repo é mínima, especialmente usando algo como mod_macro ; a parte mais difícil será dividir o arquivo authz global. Se você já fez isso antes, as dicas são apreciadas.

larsks
fonte
Eu tenho o mesmo problema e resolvi-o usando mod_macro. Obrigado!!! (Parece ser um velho bug em qualquer Apache ou Subversion.)
Achimnol

Respostas:

4

Eu odeio ver minha própria pergunta definhando lá na lista de perguntas não respondidas, então aqui está o que fizemos:

  • Na nossa configuração principal do servidor, temos:

      <Location /svn/>
            SVNParentPath /srv/source/svn/repos
      </Location>
    
  • Adotamos o seguinte mod_macropara replicar esse comportamento para novos repositórios:

    <Macro LegacySubversionRepo $name>
        # Override SVNParentPath block in main vhost config.
        RewriteRule ^/svn/$name /repo/$name [PT]
    
        <Location /repo/$name>
                Order                   deny,allow
                Allow                   from all
    
                Use LdapAuth \
                        "$name svn repository" \
                        /srv/source/svn/htpasswd
    
                DAV svn
                SVNPath /srv/source/svn/repos/$name
                AuthzSVNAccessFile /srv/source/svn/authz
                SVNAutoversioning On
                Satisfy Any
        </Location>
    </Macro>
    

    A RewriteRulepermite que a configuração do repositório para substituir o <Location /svn/>na configuração principal que de outra forma corresponder ao pedido.

Com isso, torna-se relativamente fácil adotar a configuração de autenticação e autorização por repositório (em vez do htpasswdarquivo global usado aqui).

larsks
fonte
mod_macro rocks
vinnyjames