Chciałbym użyć pre-commit hook, który uniemożliwia programistom ustawienie svn: mergeinfo na katalogach innych niż root. Oznacza to, że chcę wymusić, aby svn: mergeinfo można ustawić tylko na katalogach takich jak "trunk" lub "branches/branchName". Programiści czasami muszą zostać "przypomnieni", że nie jest dobrą praktyką używanie podkatalogu głównego jako celu scalania (zgodnie z najlepszymi praktykami wymienionymi here). Czy ktoś ma taki skrypt przechwytujący lub wie, gdzie mogę go znaleźć? Jestem w środowisku Windows, więc partia lub powershell byłaby lepsza, ale wszystko z pewnością byłoby pomocne.Svn pre-commit hook, aby uniemożliwić svn: mergeinfo na katalogach innych niż root
Odpowiedz
Po pierwsze, polecam użycie perla lub Pythona do wykonania zadania, partia okien pozostawia wiele do życzenia.
Możesz użyć przykładowego skryptu z http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/, aby rozpocząć. Na przykład skrypt: verify-po.py sprawdza kodowanie plików i sprawdza, czy autor ma uprawnienia do zatwierdzenia. Prawdopodobnie użyjesz svnlook diff w swoim skrypcie (tak jak w drugim), aby uzyskać zmienione właściwości katalogów i przejść przez odpowiednie ścieżki, bez względu na to, czy są to gałęzie lub tagi za pomocą wyrażeń regularnych.
Aktualizacja
Znaleziony enforcer pre-commit hook script, który wydaje się być to, czego szukasz.
Co ten skrypt robi to wykorzystuje svnlook zajrzeć do transakcji jest postęp. Przesuwając się przez transakcję , wywołuje ona zestaw haczyków , które pozwalają administratorowi repozytorium na sprawdzenie, co się dzieje, gdy jest i podjęcie decyzji, czy jest on akceptowalny.
Zawiera on kilka metod i verify_property_line_added() wśród nich, ponieważ jest to nazywany dla każdej linii, która jest dodawana do nieruchomości na pliku.
Wygląda na to, że to najbardziej prawdopodobne rozwiązanie, a tym samym zwycięzca nagrody, chyba że ktoś inny coś wymyśli. – Charles
Nawiasem mówiąc, po twoim pytaniu zacząłem interesować się svn hookami i zamierzam zaimplementować niektóre (zaczynając od zabraniających zatwierdzeń bez komunikatu logu) i prawdopodobnie osiągną właściwości sprawdzania przy zatwierdzaniu - wtedy umieszczę tu kolejną aktualizację . – pmod
Jeśli możesz CPAN na serwerze:
https://github.com/gnustavo/SVN-Hooks/blob/master/examples/check-mergeinfo.pl
Jeśli nie (na podstawie http://comments.gmane.org/gmane.comp.version-control.subversion.user/118969):
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
if !($SVNLOOK log -t "$TXN" "$REPOS" | grep -q '\[override] ';) then
# Get list of paths which have changed
TXN_PATHS=$($SVNLOOK changed -t "$TXN" "$REPOS")
# Filter those which are allowed: /trunk, /branches/*,...
TXN_PATHS=$(echo "$TXN_PATHS" | grep -Ev "^....(trunk/|branches/[^/]+/)$")
# Iterate over all paths, which are not allowed to have mergeinfo
while IFS= read -r TXN_PATH; do
ELEM_PATH=$(echo "$TXN_PATH" | cut -c 5-)
MERGEINFO=$($SVNLOOK propget "$REPOS" svn:mergeinfo -t "$TXN" "$ELEM_PATH" 2>/dev/null)
if [ ! "$MERGEINFO" = "" ]; then
echo " Cannot merge into directory that is not trunk or a branch:" >&2;
echo " $ELEM_PATH" >&2;
echo " Override by using [override]." >&2;
exit 1;
fi
done <<< "$TXN_PATHS"
# echo "Merge info check: OK"
fi
- 1. Svn mergeinfo rewizje oznaczone gwiazdką
- 2. Błąd: Pobieranie mergeinfo nieobsługiwanego przez "svn: //IP.Address"?
- 3. Jak uniknąć dużej liczby svn: mergeinfo podczas scalania tułowia do oddziału w funkcje w SVN
- 4. Jak uzyskać lokalną ścieżkę root w svn?
- 5. Jak oszukać git-svn, aby rozpoznać scalenia wykonane z svn?
- 6. Jak uniemożliwić SVN buforowanie poświadczeń dla jednego repozytorium?
- 7. SVN post-commit - brak dostępu do .svn/zablokować
- 8. SVN - całkowicie usunąć rewizję z serwera SVN
- 9. Importuj Repozytorium SVN po wyświetleniu SVN
- 10. git svn braku migracji z svn 1.8
- 11. utwórz nowy oddział svn z git-svn
- 12. Git i SVN na Windows
- 13. Migracja Git-2-SVN?
- 14. svn log brakujące wersje
- 15. Najlepsze praktyki scalania SVN
- 16. W jaki sposób zapisać w katalogu svn i odfiltrować wszystkie pliki .svn?
- 17. Jak ustalić, czy svn: mergeinfo jest uszkodzony i jak mogę to naprawić?
- 18. Konwersja repo svn na git za pomocą reposurgeon
- 19. Zmień repozytorium SVN URL
- 20. svn: dokumentacja formatu dump?
- 21. Czy mogę git svn rebase do pewnej wersji svn? (Podobne do svn up-r ...)
- 22. svn scalania z --reintegrate narzeka brakujących zakresów ale mergeinfo wydaje poprawne
- 23. svn propget svn: ignore. nic nie zwraca, ale svn oczywiście ignoruje moje pliki
- 24. Odczytaj plik w taki sposób, aby uniemożliwić modyfikację innych procesów.
- 25. svn: generic failure
- 26. Przeglądając repozytorium SVN
- 27. SVN oddział oddział
- 28. Użyj git-svn z istniejącym repo brakującym .git/svn/
- 29. Skonfiguruj (lub naśladuj) svn: externals, aby dołączyć kod z Github do projektu hostowanego przez svn
- 30. Irytujące wydanie svn, w którym folder roszczeń svn jest pod kontrolą wersji, ale nie .svn istnieje
Ściśle ciekawość - używasz Subversion 1.5 lub 1.6? (Ja też cierpiałem z powodu svn: mergeinfos na wszelkiego rodzaju katalogach/plikach z powodu scalenia z/z katalogów innych niż root, ale na 1.5) –
Jesteśmy na 1.6. Problemy, które mam, nie są spowodowane starymi błędami 1.5, w których klient svn ustawił mergeinfo na wszystko w zasięgu wzroku. Raczej problemy wynikają z "błędu użytkownika", w którym użytkownik wykonuje scalenie przy użyciu katalogu innego niż katalog główny, takiego jak "trunk/mySubProject", jako obiektu scalania, dlatego ustawia informacje o scaleniu w tym katalogu. Powoduje to kolejne scalenia, o czym jestem pewien, że jesteś świadomy. –
Rzeczywiście - dziękuję za informację. Dopiero niedawno osiągnęliśmy 1.6, więc nie miałem czasu obserwować, jak rzeczy się zmieniły. Muszę jednak rozwiązać ten sam problem. + Ulubione –