2012-04-23 7 views
6

Sono interessato a visualizzare la topologia dei miei rami, idealmente in un modo carino (a la graphlog). Per esempio voglio vedere quanti rami (aperti) ci sono, quando si dividono, l'ultima volta che si sono fusi l'uno con l'altro, ecc. Non sono interessato a all l'unione tra di loro, né lo sviluppo lineare su ogni ramoVisualizza cronologia mercuriale con sviluppo diretto distrutto

Questo è utile quando si esaminano le forche su bitbucket, ad esempio. Il grafo di rete di Github aiuta, ma spesso la struttura delle filiali è soffocata dallo sviluppo lineare e/o dalle fusioni frequenti.

ho pensato che forse potrei usare revsets come

hg glog --rev "head() or merge() or branch_points()" 

ma poi glog mostra tutte le revisioni intermedie, per non parlare del fatto che non ho potuto capire come specificare branch_points() cioè revisioni che avere più di un figlio.

Esiste un'estensione per mercurial (o un altro DVCS) che può approssimare i miei desideri? Se no, c'è un modo migliore per ottenere queste informazioni?

risposta

2

La seguente patch aggiunge la revisione del punto di derivazione a Mercurial. Attualmente si applica solo a Mercurial 2.2, ma funziona correttamente.

Non so se avrò il tempo di spingere per l'inclusione rapidamente. Potresti andare alla mailing list e offrirti di prepararlo per l'inclusione (che mi avrebbe salvato quel lavoro).

La revisione è anche in https://bitbucket.org/ArneBab/hg-stable

# HG changeset patch 
# User [email protected] 
# Date 1343931127 -7200 
# Branch stable 
# Node ID f5e211663739e31f2e476c43992ee5335f9d8146 
# Parent 00182b3d087909e3c3ae44761efecdde8f319ef3 
revsets: added branchpoint() for revisions with more than one child. 

Reason: Get very terse information via 

    hg glog --rev "head() or merge() or branchpoint()" 

diff -r 00182b3d0879 -r f5e211663739 mercurial/revset.py 
--- a/mercurial/revset.py  Tue May 01 19:09:15 2012 +0900 
+++ b/mercurial/revset.py  Thu Aug 02 20:12:07 2012 +0200 
@@ -710,6 +710,15 @@ 
    cl = repo.changelog 
    return [r for r in subset if cl.parentrevs(r)[1] != -1] 

+def branchpoint(repo, subset, x): 
+ """``branchpoint()`` 
+ Changeset has more than one child. 
+ """ 
+ # i18n: "merge" is a keyword 
+ getargs(x, 0, 0, _("branchpoint takes no arguments")) 
+ cl = repo.changelog 
+ return [r for r in subset if cl.children(repo[r].node())[1:]] 
+ 
def minrev(repo, subset, x): 
    """``min(set)`` 
    Changeset with lowest revision number in set. 
@@ -1137,6 +1146,7 @@ 
    "bisected": bisected, 
    "bookmark": bookmark, 
    "branch": branch, 
+ "branchpoint": branchpoint, 
    "children": children, 
    "closed": closed, 
    "contains": contains, 
+0

Va bene, finalmente ho guardato questo. Sembra essere molto più lento di, per esempio, unire(), ma sembra funzionare. Non so molto sullo sviluppo mercuriale, ma vedrò se riuscirò a ottenere presto la mailing list. Tutto ciò che serve sono test giusti? –

+1

Ho inviato una patch all'elenco, ma non l'ho ancora visto negli archivi. –

+0

è entrato negli archivi, adesso? Altrimenti, puoi semplicemente inviarmelo e lo inoltrerò alla lista di sviluppo. arne_bab -ät- web -dot- de –

2
 
    $ hg log -Gr "merge() + head()" 
+0

In realtà, mercurial 2.4 ha 'branchpoint()' ora in modo che possa essere aggiunto. –

+0

Provo ** hg log -Gr "branchpoint()" ** ma fallisce con * hg: errore di parsing: non una funzione: branchpoint * Che intendi? – gavenkoa

+1

Sì, ciò che intendevo (beh, vuoi 'hg log -Gr" unione() + testa() + branchpoint() "'. Potresti dover eseguire l'aggiornamento a una versione più recente dal 2.4 [uscito nel novembre 2012] (http://mercurial.selenic.com/wiki/WhatsNew#Mercurial_2.4_.282012-11-1.29) –

Problemi correlati