2011-06-27 13 views

Odpowiedz

2

Prawdopodobnie jest to możliwe, ale trochę trudne. Musiałbyś w zasadzie napisać własne narzędzie tag (być może jako rozszerzenie Mercurial), aby pomóc w zebraniu dodatkowych potrzebnych informacji i wykonać dodatkowe połączenia z hg tag. Jednak nie wiem zbyt wiele o interfejsie API podczas pisania rozszerzenia, więc wszelkie pomysły, które oferuję, będą oparte na wywoływaniu hg bezpośrednio za pomocą poleceń.

Domyślnie po zatwierdzeniu w głównym repozytorium podrzadniki są zatwierdzane jako pierwsze. Następnie zajmuje nowy identyfikator changeset dla każdego subrepo i umieszcza je w pliku .hgsubstate w formacie jak poniżej:

77ba00000fe8e9ca033d97dc07b85a50dd106837 nested 

Rekurencyjne tagging musiałby uzyskać zawartość pliku .hgsubstate jak to było w changeset ty są oznaczane w głównym repozytorium. Możesz pomyśleć o hg revert, ale to byłby zły pomysł, ponieważ mógłby łatwo zepsuć twój katalog roboczy (hg nie lubię robić tego na .hgsubstate tak czy inaczej). Najlepszym wyjściem jest wykonanie hg export dla tej wersji i parsowanie wynikowego porównania dla linii + w pliku .hgsubstate.

Następnie należy wziąć identyfikator i nazwę subskrypcji każdego z nich, aby zadzwonić pod numer hg -R <subrepopath> tag -r <id> <tag>. I oczywiście w końcu oznacz główne repozytorium.

Nadal istnieją potencjalne problemy z tym, rzeczy, które będziesz musiał pozostać świadomy lub dowiedzieć się, jak żyć z. Na przykład: Co się stanie, jeśli popełnisz błąd w głównym repozytorium, ale nie na 1 lub więcej podsposób? Teraz masz więcej niż jeden zestaw zmian w głównym repo, gdzie .hgsubstate wyświetla ten sam identyfikator zestawu zmian w subrepo. Jeśli więc tagujesz oba na głównym repo, zestaw zmian na subrepo będzie miał 2 znaczniki.

Używam TortoisHg 2.0.5 w/Mercurial 1.8.4. Samodzielne tagowanie pod-składnic nie powoduje konieczności dokonywania commitów na głównym repozytorium, powinno być w większości sprawne.

Powiązane problemy