Uszkodzenie repozytorium Mercurial


14

Jest to nieco związane z tym pytaniem, ale jest innym pytaniem.

Mamy centralne repozytorium Hg, podawane użytkownikom za pośrednictwem SSH i serwera mercurial . Łączymy się z nim kilkoma klientami Mac, Linux i Windows.

Dwukrotnie zdarzyło się teraz, gdy jeden z użytkowników systemu Windows uszkodził swoje repozytorium, a następnie zepchnął z powrotem do centralnego, który je uszkodził. Chcę napisać przychodzący skrypt przechwytujący w centralnym repozytorium, aby zapobiec akceptacji transakcji, jeśli spowoduje ona uszkodzenie centralnego repozytorium.

Chociaż niestety nie wiem wystarczająco dużo o Mercurial, aby napisać taki skrypt. Czy jest jakaś możliwość, że spotkał się z tym ktoś inny? Osobiście nie jestem pewien, dlaczego hg domyślnie tego nie robi.


Znalazłem tutaj rozwiązanie: davidherron.com/blog/topics/…, które należałoby wykonać na wszystkich klientach. Ale jeśli ktoś ma lepsze rozwiązanie, które można zrobić dla samego centralnego repozytorium, byłoby lepiej.
— bobinabottle,

Podaj nam więcej szczegółów: jakiej wersji Mercurial używasz na serwerze i na każdym z klientów?
— Martin Geisler

2
Byłoby to również bardzo przydatne dla nas (deweloperów Mercurial), gdybyście mogli to odtworzyć. Prosimy również zgłaszać nam takie problemy bezpośrednio za pośrednictwem naszej listy mailingowej: mercurial.selenic.com/wiki/MailingLists lub narzędzia do śledzenia błędów: selenic.com/mercurial/bts Jest to o wiele bardziej produktywne niż publikowanie tutaj :-)
— Martin Geisler

Odpowiedzi:


4

Najnowsze wersje Mercurial (od 1.5) obsługują sprawdzanie poprawności danych przychodzących. Dodaj

[server]
validate = True

do konfiguracji hg serwera (albo .hg/hgrckonfiguracja hgwebdir powinna działać poprawnie), aby serwer mógł zweryfikować przychodzące dane i odrzucić nieprawidłowe wypychania. Klient zobaczy wtedy błąd podobny do:

remote: abort: missing file data for beta:dddc47b3ba30e54484720ce0f4f768a0f4b6efb9 - run hg verify

Mam nadzieję, że to pomaga!


2

Może powinieneś całkowicie unikać pchania do repozytorium. Dzięki Mercurial i jego rozproszonej naturze każdy może mieć swoją gałąź, a kiedy czuje, że jest gotowy, mówi ci, a ty od niego odsuwasz. Brak problemów z dostępem do zatwierdzenia, brak wypychania, które mogłoby popsuć ...

To przynajmniej rada, której udzielił mi mój przyjaciel, kiedy migrowałem z SVN do Mercurial.

Nie wiem, czy jest to dla ciebie opcja, ale utworzenie osobistego repozytorium dla wszystkich, a następnie wyciągnięcie ludzi, których potrzebujesz, może wymagać mniej pracy niż próba złapania niebezpiecznych popychaczy.


Nie naciskać na HG, pokonuje cały swój cel - wielu użytkowników współpracuje
— Anonymouse,

0

Czy nie mógłbyś zrobić tego samego, co blog Davida Herrona , ale zamiast robić to w trakcie przygotowywania trasy, zrób to na specjalnym haczyku na centralnym repozytorium?


Nie :-( Próbowałem tego, ale kończy się to impasem. Gdy klient próbuje pchnąć, zastrzega sobie blokadę w repozytorium. Uruchomienie funkcji „weryfikacji hg” również wymaga blokady, więc kończy się to czekaniem na zawsze w niekończąca się pętla
— bobinabottle

Ponadto, nawet jeśli zadziałało to w przypadku polecenia wstępnego, sprawdziłoby to repozytorium, upewniło się, że jest w porządku, a następnie zatwierdzi zmiany, które by go uszkodziły. Naprawdę potrzebowałbym haka, aby ocenić, czy nadchodzące zmiany spowodują uszkodzenie repozytoriów, jeśli tak, wycofaj transakcję. Dlatego sensowniej byłoby być na haku grupy zmian.
— bobinabottle

(Użycie haka grupy zmian nadal powoduje zakleszczenia)
— bobinabottle

Ciekawe - haki wydają się być oparte na pythonie. Czy wiesz, co psuje repozytorium? Czy za każdym razem to samo?
— Ryan Gibbons,

0

Jedną z możliwych alternatyw jest:

  1. Sklonuj repozytorium PO wypchnięciu.
  2. Sprawdź to.
  3. Jeśli repozytorium jest dobre, zarchiwizuj je jako najnowsze dobre
  4. Jeśli repozytorium jest uszkodzone, podnieś alarm
  5. W razie alarmu przywróć ostatnie znane dobre repozytorium.

To rozwiązanie nie jest tym, czego potrzebujesz, ale przynajmniej masz sposób na wycofanie repozytorium w przypadku uszkodzenia.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.