2015-06-17 28 views
8

W moim repozytorium mam tagi w postaci version-1.2.3. Chciałbym zrobić alias revset new() że nazywa się tak:Jak utworzyć alias rewizji dla znaczników, których nazwy są zgodne ze wzorcem?

hg log -r 'new(1.2.3, 1.2.4)' 

... i rozszerza się do tego:

hg log -r '::version-1.2.4 - ::version-1.2.3' # What's new in 1.2.4? 

Kiedy próbowałem to zrobić:

[revsetalias] 
new($1, $2) = ::version-$2 - ::version-$1 

... Mercurial zinterpretował to jako odjęcie wersji $2 (np. 1.2.3) od wersji version, co nie było moim zamiarem.

Próbowałem to również, za pomocą operatora ## konkatenacji:

new($1, $2) = ::"version-" ## $2 - ::"version-" ## $1 

Ale wtedy hg log -r 'new(1.2.3, 1.2.4)' daje mi ten błąd:

hg: parse error at 13: syntax error 

Próbowałem też za pomocą ancestors() zamiast składni ::, ale nadal wystąpił błąd składni. Czy to się da zrobić?

Odpowiedz

5

I przetestowała następujące, które działa:

new($1, $2) = (::"version-" ## $2) - (::"version-" ## $1) 

Dla porównania $1::$2 nie daje to samo, oznacza to korektę w między $1 nd $2 Równoważny revset że wolałbym to:

new($1, $2) = only("version-" ## $2, "version-" ## $1) 

Według doc jest ściśle odpowiadające co chcesz:

"only(set, [set])" 
     Changesets that are ancestors of the first set that are not ancestors of 
     any other head in the repo. If a second set is specified, the result is 
     ancestors of the first set that are not ancestors of the second set 
     (i.e. ::<set1> - ::<set2>). 
+0

'$ 1 :: $ 2' nie jest "rewizja pomiędzy" w ścisłej formie - to DAG od 1 $ do 2 $ - i nie mogę sobie wyobrazić rzeczywistego przypadku użycia, gdy różni się on od tylko(). Dangling mergeset od dalekiego przodka 1 $? –

+1

Rozważ dwie wersje z tej samej bazy: http: //pastebin.com/kBqniLt8 hg log -r "e2b7d1 :: aedc1a" nic nie zwraca hg log -r "only (e2b7d1, aedc1a)" zwraca b oraz c – lc2817

+0

@LazyBadger: 1 $ to * nie * przodek 2 $. Obydwie gałęzie znajdują się poza pniem. 1 $ :: 2 $ ** nie zadziała dla mnie **. – Kevin

-1

uwaga Side: $1::$2 będzie bardziej czytelny i daje taką samą część DAG Tylko only() zapewnia prawidłowy wynik we wszystkich przypadkach, DAG może zawieść według dyskusji @ lc2817 odpowiedź)

byłem prawie sukces w uzyskaniu odpowiedzi, ale mają pewne problemy (i nie znają sposoby debugowania) przy ostatnim kroku: sumując wszystko w [revsetalias]

Przedmowa

Ponieważ parametry są znaczniki i tag() orzeczenie pozwalają używać wyrażeń regularnych w parametrze - użyję ich

Revset tag("re:version\-") pokazać wszystkie znaczniki, rozpoczął się „Wersja”

Revset z numerem zakodowanego na stałe jako ciąg pokaż pojedynczy zestaw zmian

hg log -r "tag('re:version\-1.7$') 
changeset: 2912:454a12f024f3 

(końcowe $ jest obowiązkowe, w przeciwnym razie będzie to 1.7 * tags)

Moja najlepsza próba w revsetalias był tag('re:version\-\$1$') - bez błędów i bez wyjścia: nie mogę się w pełni rozwinięty polecenie, aby zobaczyć wszystkie przeróbki i podstawienia i wykrywania błędów z moich parametryzowane revsetalias

HTH