Mieszanie Subversion „SVNParentPath” i konfiguracji dla repozytorium?

9

Biorąc pod uwagę typową konfigurację Subversion / Apache przy użyciu SVNParentPath, z repozytoriami hostowanymi w /svn/następujący sposób:

<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>

Czy istnieje sposób na zastąpienie tej konfiguracji dla określonych repozytoriów bez konieczności hostowania ich na innej ścieżce? To znaczy, czy jest jakiś sposób, aby dodać taki Locationblok ...

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

... i czy zastępuje konfigurację podaną w Locationbloku dla /svn? Moje próby zrobienia tego z powyższą konfiguracją spotkały się z dziwnymi i niepomocnymi błędami w dzienniku błędów Apache, takimi jak:

[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

Wszystko to wydaje się być sposobem, w jaki mod_dav_svn mówi mi, że nie mogę zrobić tego, co próbuję. Jestem otwarty na rozwiązania lub alternatywy!

EDYCJA : Widzę, że to pytanie wywołało wiele emocji wśród czytelników. Dla przypomnienia, generowanie konfiguracji na repozytorium dla wszystkich naszych istniejących repozytoriów, a następnie rezygnacja z SVNParentPathkonfiguracji bazowej. Konfiguracja Apache dla repo jest minimalna, szczególnie przy użyciu czegoś takiego jak mod_macro ; trudną częścią będzie podział globalnego pliku authz. Jeśli zrobiłeś to wcześniej, wskazówki są mile widziane.

Larsks
źródło
Mam ten sam problem i rozwiązałem go za pomocą mod_macro. Dzięki!!! (Wygląda na stary błąd w Apache lub Subversion).
Achimnol

Odpowiedzi:

4

Nienawidzę patrzeć, jak moje własne pytanie leniuchuje tam na liście pytań bez odpowiedzi, więc oto co zrobiliśmy:

  • W naszej głównej konfiguracji serwera mamy:

      <Location /svn/>
            SVNParentPath /srv/source/svn/repos
      </Location>
    
  • Przyjęliśmy następujące zasady w mod_macrocelu zreplikowania tego zachowania dla nowych repozytoriów:

    <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>
    

    RewriteRulePozwala repozytorium konfiguracji do przesłonić <Location /svn/>w głównej konfiguracji, które inaczej byłoby dopasować żądanie.

Po wprowadzeniu tej konfiguracji stosunkowo łatwo można zaimplementować konfigurację uwierzytelniania i autoryzacji dla poszczególnych repozytoriów (zamiast htpasswdwykorzystywanego tutaj pliku globalnego ).

Larsks
źródło
skały mod_macro
vinnyjames