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

9

Dada uma configuração típica do Subversion / Apache usando o SVNParentPath, com repositórios hospedados sob /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 por repositórios sem ter que hospedá-los em um caminho diferente? que é, existe alguma maneira eu posso adicionar um bloco Location 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 faça com que substitua a configuração fornecida no Location de /svn ? Minhas tentativas de fazer isso com o acima configuração foram atendidas com erros estranhos e inúteis no Log de erro 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 que o mod_dav_svn me diz que eu não posso fazer o que estou tentando fazer. Estou aberto a soluções ou alternativas!

EDIT : Bem, eu posso ver que esta questão gerou muita emoção entre os leitores. Para o registro, o que posso fazer é gerar configurações por repositório para todos os nossos repositórios existentes e, em seguida, abandonar a configuração baseada em SVNParentPath . A configuração do Apache por repo é mínima, especialmente usando algo como mod_macro ; a parte difícil será dividir o arquivo authz global. Se você já fez isso antes, as dicas são bem-vindas.

    
por larsks 02.02.2011 / 17:55

1 resposta

4

Eu odeio ver minha própria pergunta definhando 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_macro para 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>
    

    O RewriteRule permite que a configuração do repositório substitua o <Location /svn/> na configuração principal que, de outra forma, corresponderia à solicitação.

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

    
por 13.08.2012 / 03:48