2013-03-13 16 views
6

L'annotazione ti porta fino a vedere la modifica più recente a quella linea, se quella modifica è un'unione quindi non ho altra scelta che scorrere nella cronologia delle revisioni e trovare la la prossima volta è stato modificato.Mercuriale - Visualizza tutti i changeset che modificano la riga specifica nel file

Ho anche provato hg grep -l '[contents of line]' ma:

  • a) Non riesco a capire come indirizzare i file specifici (quindi ci vuole per sempre in un repo di dimensioni modeste)
  • b) Sembra solo tornare l'ultimo numero di revisione

il seguente link è vagamente simile - How to find all changsets where a reference to a function was modified?

risposta

8

Uso TortoiseHg:

012.
  1. Visualizza -> Manifesto
  2. fare clic destro sul file di interesse e fare clic su "File History"
  3. click "annotare con numeri di revisione"

Il pannello superiore permette di visualizzare rapidamente la storia del file in termini di commit, il pannello in basso mostra il file annotato in base alla versione selezionata nel pannello superiore.

+1

Forse è perché sono in una versione successiva di TortoiseHg (3.2.3), ma non vedo come questo aiuti a isolare le modifiche di una singola riga? (Non riesco più a trovare l'opzione manifest, ma annotare il comportamento dei file dal menu di scelta rapida di explorer/plugin sembra fare ciò che questa risposta suggerisce, che è proprio il modo in cui un file guarda alle varie revisioni: devi ancora trovare la linea domanda in ogni revisione.) – downwitch

+1

per manifest mancante - http://stackoverflow.com/questions/23457746/manifest-button-missing-in-tortoise-hg – Tom

1

penso che questo requ un po 'di programmazione (in due fasi).

Il seguente script di shell funziona piuttosto bene per me. Stampa sia le revisioni che le linee corrispondenti. Se si desidera che solo l'elenco revisioni, è possibile aggiungere un passo per mettere a nudo il testo corrispondente e lasciare solo il prefisso di revisione, ed eventualmente tubo attraverso 'sort -u':

#!/bin/bash 
# 
# script to grep for a pattern in all revisions of a file 
# Usage: scriptname 'pattern' filepath 
# 
function fatal() { 
    echo "[email protected]" 1>&2 
    exit 1 
} 

function usage() { 
    echo "[email protected]" 1>&2 
    fatal Usage: $0 pattern file 
} 

case "$1" in 
    '') usage 'missing pattern to search for' ;; 
    *) Pat="$1" ;; 
esac 

if [ "$2" != '' ]; then 
    File="$2" 
else 
    usage 'must pass file as 2nd argument' 
fi 

# -- generate list of revisions (change-sets) involving $File 
for rev in `hg log --template '{rev}\n' $File`; do 
    # -- grep the wanted pattern in that particular revision 
    hg grep "$Pat" -r $rev $File 
done 

Note:

  • non completamente infallibile (ad esempio le citazioni nel modello)
  • non verificare la presenza di file di esistenza per supportare file rinominati/rimosso così
+0

Vorrei che ci fosse un modo per farlo in un modo più semplice. Non uso TortoiseHg – ganeshran

2

Utilizzando la risposta di arielf senza uno script in più:

UNIX:

  • comando:

    hg log --template '{rev}\n' <FILE> | 
        xargs -I @ hg grep <PATTERN> -r @ <FILE> 
    
  • è possibile utilizzare questo per aggiungere un alias al file di configurazione (.hgrc):

    [alias] 
    _grep_line_in_history = ! $HG log --template '{rev}\n' $2 | 
        xargs -I @ hg grep '$1' -r @ $2 
    

WINDOWS:

  • comando:

    FOR /F "usebackq" %i IN (`hg log --template "{rev}\n" <FILE>`) DO 
    @(echo %i & hg grep <PATTERN> -r %i <FILE>) 
    
  • alias:

    [alias] 
    _grep_line_in_history = ! FOR /F "usebackq" %i IN 
        (`%HG% log --template "{rev}\n" "$2"`) DO @(echo %i & %HG% grep "$1" -r %i "$2") 
    
Problemi correlati