2010-12-20 2 views
5

Ich möchte in der Lage sein, ein "Hg-Protokoll" jedes Changeset zwischen changeset1 und changeset2 im Diagramm angezeigt werden. Ich kann nicht einen Weg finden, es zu tun, ohne entweder a) Weglassen Knoten genannt Zweige, die zwischen changeset1 verschmolzen: changset2 oder b) einschließlich Knoten genannt Zweige, die NICHT Vorfahren changeset2 SINDmercurial-Protokoll von Changests auf zusammengeschlossenen benannten Verzweigungen, aber nicht zusammengeführt

Hier ist ein „hg glog“ eines einfachen Beispiels mit 2 benannten Verzweigungen plus dem Standardzweig. Eine benannte Zweig wird verschmolzen und so seine Knoten sind relevant, die andere ist irrelevant:

@ changeset: 5:e384fe418e9b 
|\ tag:   tip 
| | parent:  2:7dc7af503071 
| | parent:  3:0a9be59d576e 
| | summary:  merge somefeature branch into default 
| | 
| | o changeset: 4:4e8c9ca127c9 
| | | branch:  unmerged_feature 
| | | parent:  1:ef98ad136fa8 
| | | summary:  change that is not merged into ending changeset 
| | | 
| o | changeset: 3:0a9be59d576e 
| |/ branch:  somefeature 
| | parent:  1:ef98ad136fa8 
| | summary:  changed b.txt 
| | 
o | changeset: 2:7dc7af503071 
| summary:  changed a.txt 
| 
o changeset: 1:ef98ad136fa8 
| summary:  added b.txt 
| 
o changeset: 0:271b22b4ad30 
    summary:  added a.txt 

ich eine Log-Befehl wollen, die mir geben alle Knoten, die Nachkomme von rev sind 0 und Vorfahren von rev 5. Dies wird alles außer rev 4.

ich zu viele Informationen bekommen:

hg log -r 0:5 --template "{rev}:branch={branches},desc={desc}\n" 

Das gibt mir einen Protokolleintrag für rev 4, die nicht ein Vorfahre von rev 5:

0:branch=,desc=added a.txt 
1:branch=,desc=added b.txt 
2:branch=,desc=changed a.txt 
3:branch=somefeature,desc=changed b.txt 
4:branch=unmerged_feature,desc=change that is not merged into ending changeset 
5:branch=,desc=merge somefeature branch into default 

Ich kann zu wenig Informationen erhalten:

hg log -b default -r 0:5 --template "{rev}:branch={branches},desc={desc}\n" 

auslässt 3 rev, die ein Nachkomme von rev 0 und Vorfahre von rev

0:branch=,desc=added a.txt 
1:branch=,desc=added b.txt 
2:branch=,desc=changed a.txt 
5:branch=,desc=merge somefeature branch into default 

Antwort

6

Wenn Sie eine neuere Version von Mercurial 5 ist mit (1.6.0 oder höher) können Sie die Funktion revsets verwenden. In diesem Fall müssen Sie die Vorfahren() Operator:

hg log --rev ancestors(5) 

hg help revsets Siehe für weitere Informationen.

+0

Danke. Das hatte ich vorher nicht gesehen. Was ich wirklich will, ist: hg log --rev 'Vorfahren (changeset2) und Nachkommen (changeset1)' –

+3

Eigentlich sieht es so aus, als würde der doppelte Doppelpunkt tun, was ich will einfacher: hg log --rev 'changeset1 :: changeset2' –

+3

Ja, Sie wollen die 'X :: Y'-Syntax - ich setze es für diesen Zweck ein :-) –