2011-04-15 13 views
12

Obecnie, w celu zapewnienia właściwości subversion eol-style jest ustawiony na native dla każdego nowego pliku dodany do naszego projektu, musimy dodać do pliku ~/.subversion/config na każdej z naszych maszyn deweloperów:Force svn: eol-style = natywne na serwerze?

[miscellany] 
enable-auto-props = yes 

[auto-props] 
*.java = svn:eol-style=native 

Czy istnieje sposób na równoważne na serwerze svn?

Odpowiedz

9

Nie, nie ma.

Możesz użyć skryptów przechwytujących, aby wyszukać właściwość do ustawienia, ale poza tym nie jest to możliwe. Subversion, inaczej niż CVS, nie może zmienić treści kodu pochodzącego z zatwierdzenia.

Książka SVN zawiera notatkę o this question:

Ostrzeżenie

Nie próbuj modyfikować transakcję przy użyciu skryptów haka. Typowym przykładem tego jest automatyczne ustawianie właściwości, takich jak svn:eol-style lub svn:mime-type podczas zatwierdzania. Chociaż może to wydawać się dobrym pomysłem, powoduje problemy. Głównym problemem jest to, że klient nie wie o zmianie wprowadzonej przez skrypt przechwytujący i nie ma możliwości poinformowania klienta, że ​​jest on nieaktualny. Ta niekonsekwencja może prowadzić do zaskakującego i nieoczekiwanego zachowania.

Zamiast próbuje zmodyfikować transakcję, jest o wiele lepiej czeku transakcji w pre-commit hak i odrzucać zatwierdzenia, jeśli nie spełnia odpowiednich wymagań.

+0

Interesujące. Dzięki za link. Wygląda na to, że jest to właściwy sposób: "Zamiast próbować modyfikować transakcję, lepiej sprawdzić transakcję w haku poprzedzającym zatwierdzenie i odrzucić zatwierdzenie, jeśli nie spełnia ona pożądanych wymagań." – Bart

+0

Nieaktualna odpowiedź. – bahrep

+1

Dlaczego jest to nieaktualne? –

0

Nie mogłem znaleźć przykładu, jak sprawdzić właściwość svn: eol-style dla kodu źródłowego bezpośrednio w skrypcie przechwytywania przed zatwierdzeniem. Najbliżej znajduje się check-mime-type.pl, który wykorzystuje właściwości typu MIME do określenia, czy plik jest plikiem tekstowym.

Następujący skrypt wstawiony do pliku skryptu przed zatwierdzeniem sprawdzi, czy wszystkie pliki .cpp/.h dodane w zatwierdzeniu mają ustawioną właściwość svn: eol-style. (Można go łatwo rozszerzyć, aby sprawdzić dodatkowe rozszerzenia plików). Dostarczy również komunikaty wskazujące, które pliki nie mają właściwości svn: eol-style.

REPOS="$1" 
TXN="$2" 

# Get new cpp/h files 
ADDFILES=$(${SVNLOOK} changed "$REPOS" -t "$TXN" | sed -n -e '/^A.*\(\.cpp\|\.h\)$/s/^A *//p') 
#echo "ADDFILES=$ADDFILES" >&2 

# Check files for svn:eol-style property 
ESMISSING='' 
for f in ${ADDFILES} 
do 
    if [[ "$(${SVNLOOK} pl ${REPOS} -t ${TXN} ${f})" != *svn:eol-style* ]] 
    then 
    # output to stderr to include message in svn commit ouput 
    echo "No svn:eol-style property set on file $f" >&2 
    ESMISSING=1 
    fi 
done 

if [[ -n "$ESMISSING" ]] 
then 
    exit 1 
fi 
7

Właśnie dlatego odpowiedź Fausto teraz jest nieaktualne po zwolnieniu Subversion 1.8


W przypadku Subversion 1.8 lub nowszej można korzystać na poziomie repozytorium (nie globalnie dla wszystkich repozytoriów na serwerze) repository dictated configuration (patrz także topic in Collab's blog), a mianowicie - svn: auto-podpory w katalogu głównym każdego repozytorium

+0

Czy możesz wskazać mi, jak skonfigurować konfigurację dyktowaną przez repozytorium? Te linki pokazują tylko, jak je czytać, i nie mogę niczego uzyskać od Google. – lapis

+0

Cóż, znalazłem sposób na przeglądarkę repozytorium TortoiseSVN, ale sposób konsoli jest również interesujący. – lapis

+0

Ta odpowiedź jest pomocna, ale wymaga wyjaśnienia. OP szuka odpowiednika auto-rekwizytów, ale wymuszony na serwerze. Ta odpowiedź wskazuje na nową i użyteczną funkcję "przechowalni-klienta" SVN 1.8 'svn: auto-props', ale co ważne 1) jest to funkcja po stronie klienta - starszy klient SVN, np. 1.7 w ogóle go nie użyje, a rekwizyty nie będą egzekwowane, a 2) nawet klient SVN 1.8 może "svn add --no-auto-props", i znowu nic nie jest egzekwowane. Podsumowując, potrzebujesz haka. – javabrett