2012-03-26 19 views
13

Come si ottiene un elenco di file modificati tra due changeset arbitrari?Mercurial: elenca i file "hg diff"

mia unica congettura è qualcosa di orribile come questo:

# files where something has been added 
hg diff -r AA -r BB|grep -- +++|cut -f1|cut -d/ -f2- >/tmp/ka 

# files where something has been removed 
hg diff -r AA -r BB|grep -- ---|cut -f1|cut -d/ -f2- >>/tmp/ka 

# filtering out "dev/null": it appears when a file is added or removed from the repository 
sort -u /tmp/ka |grep -v dev/null 

Forse c'è un comando Mercurial non ho notato?


NON i file modificati di un singolo changeset.
edit: ho bisogno di fare questo perché sto lavorando con alcuni programmatori dell'età del bronzo che non capiscono quello che un .diff è, si prega di portare con me ...

+0

Si prega di scrivere in italiano. Perché "modificato da due changeset arbitrari" è un pezzo di rumore imprevedibile e un'errata interpretazione. Tra due, o solo questi due? –

+1

Abbastanza sicuro che stia cercando di esaminare cosa è successo in un repository cambia-per-changeset, simile all'esaminare la cronologia delle differenze per un singolo file cambia-per-cambia. –

+0

I file modificati tra changeset AA e changeset BB. Qualcosa come "hg diff -r AA -r BB" ma solo i nomi dei file, invece di un intero diff, cioè, quello che ho suggerito con quella riga di comando. –

risposta

30

hg diff -r 182 -r 193 --stat

o

hg status --rev 182:193

+0

oh, grazie, è tutto! –

+0

'--rev' e' -r' si comportano allo stesso modo sul mio sistema ... era un bug nel 2012? – mpen

+0

Sembra che sia stato risolto ora, sì. –

0

Soluzione uno. Diff-based

>hg diff -r 3 -r 4 --stat 
comments.php | 14 +++----------- 
functions.php | 15 +++++++++++++-- 
header.php | 2 +- 
readme.txt | 17 ++++++++++++++--- 
sidebar.php | 43 ++++--------------------------------------- 
style.css  | 18 ++++++++++++------ 
6 files changed, 47 insertions(+), 62 deletions(-) 

è possibile ottenere i file modificati da grep su "|" char, o (approccio migliore e più bello dal mio POV) Uscita tubo per gawk, che, per record con esattamente 4 campi, print $ 1

soluzione dei due. Log + template + revsets

>hg log -r "3::4" --template "{file_mods}\n" 
footer.php functions.php header.php search.php style.css 
comments.php functions.php header.php readme.txt sidebar.php style.css 

convertire alla lista, rimuovere (possibili) duplicati Lascio per te

8

Il comando di base per cercare quando si vuole sapere qualcosa di stato del file è hg status. Il comando di stato è il comando nome file orientato e si desidera conoscere alcuni nomi di file.

Quando si esegue come

$ hg status 

allora confronta lo stato della copia di lavoro con la revisione genitore copia di lavoro (.). Ma se lo si esegue come

$ hg status --rev AA:BB 

allora mostrerà i file modificati tra AA e BB! Non c'è bisogno di grepping, cutting, sorting o templates.

(ho già spiegato prima here, here, e here, vedere quelle domande e risposte per ulteriori suggerimenti.)

+0

Non funziona con -r perché "-r --removed mostra solo i file rimossi" - si tratta di un errore dell'interfaccia utente difficile. –

+0

@asaddude: ups! Mi dispiace, l'ho corretto per usare '--rev' invece. –

Problemi correlati