2011-03-16 9 views
20

C'è un modo in mercuriale di trovare una modifica dando un modello nella modifica (il codice modificato), in opposizione al messaggio di registro o al nome file?Trovare i changeset in mercurial estraendo la patch

Ho guardato abbastanza bene in "hg help revsets" e penso che non ci sia un buon modo per farlo. Ecco il miglior trucco che ho trovato, ma spero di aver perso una capacità, o che qualcuno possa fare un po 'meglio.

hg log -M -u goldberg -p | grep '(^changeset:\|<pattern>) '| grep -C 1 '<pattern>'

(e quindi selezionando manualmente il numero di revisione per il lavoro in seguito con quelle revisioni)

+0

dal momento che ho modificato leggermente il mio suggerimento (come una funzione zsh. Dovrebbe funzionare in bash) ho pensato di seguire. Aggiungendo anche alcune discussioni qui sotto .... hg_find_patch() {hg log -M -u goldberg -p --style default | grep '\ (^ changeset: \ |^[+ -]. *' $ {1} '\)' | grep -B 1 $ {1}} –

risposta

30

Si dovrebbe dare un'occhiata a hg grep.

Search revisions of files for a regular expression. 

This command behaves differently than Unix grep. It only accepts 
Python/Perl regexps. It searches repository history, not the working 
directory. It always prints the revision number in which a match appears. 

By default, grep only prints output for the first revision of a 
file in which it finds a match. To get it to print every revision that 
contains a change in match status ("-" for a match that becomes a non-match, 
or "+" for a non-match that becomes a match), use the --all flag. 

Returns 0 if a match is found, 1 otherwise. 

È possibile digitare hg grep --help per maggiori informazioni.

+0

Grazie! Non l'avevo visto. –

+0

Questo mi avvicina. Se ho capito bene, hg grep ti dirà se l'intero file contiene o non contiene un pattern (così puoi vedere quando l'intero file-fact è cambiato). Sto cercando tutte le mie modifiche che hanno quel modello. Per esempio, potrei scegliere una variabile con cui lavoravo da una settimana e tirare fuori tutti quei changeset rilevanti, anche se la variabile è in circolazione da anni. Ho ragione che hg grep non può proprio farlo? –

+0

Puoi usare '--all' per cercare tutti i changeset nel repository o' -r' per specificare un intervallo di revisione. Ad esempio, se si esegue 'hg grep --all" $ myvariable "percorso/tofile.php', mercurial guarderà tutte le revisioni del file dato per il pattern" $ myvariable "stampando la revisione corrispondente dove ha trovato il pattern per il prima volta. – krtek

Problemi correlati