2011-03-16 6 views
20

Y a-t-il un moyen de trouver un changement en donnant un pattern dans le edit (le code changé), par opposition au message de log ou au nom de fichier?Trouver des changesets dans mercurial en grepping le patch

J'ai regardé à fond dans "hg help revsets" et je pense que ce n'est pas une bonne façon de le faire. Voici le meilleur bidouillage que j'ai trouvé, mais j'espère que j'ai manqué une capacité, ou que quelqu'un peut faire un peu mieux.

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

(puis sélectionner manuellement le numéro de révision pour les travaux plus tard avec ces révisions)

+0

depuis que j'ai modifié un peu ma propre suggestion (comme une fonction zsh devrait fonctionner dans bash) je pensais que je suivrais. En ajoutant également une discussion ci-dessous .... hg_find_patch() {hg log -M -u goldberg -p --style par défaut | grep '\ (^ changeset: \ |^[+ -]. *' $ {1} '\)' | grep -B 1 $ {1}} –

Répondre

30

Vous devriez jeter un oeil à 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. 

Vous pouvez taper hg grep --help pour plus d'informations.

+0

Merci! Je n'avais pas vu ça. –

+0

Cela me rapproche. Si je comprends bien, hg grep vous dira si le fichier entier contient ou ne contient pas un motif (ainsi vous pouvez voir quand ce fait de fichier entier a changé). Je cherche toutes mes modifications qui ont ce modèle. Par exemple, je pourrais choisir une variable avec laquelle je travaillais pendant une semaine et récupérer tous les changements pertinents, même si la variable existe depuis des années. Ai-je raison que hg grep ne puisse pas faire ça? –

+0

Vous pouvez utiliser '--all' pour rechercher tous les changesets dans le dépôt ou' -r' pour spécifier une plage de révision. Par exemple, si vous faites 'hg grep --all" $ myvariable "chemin/tofile.php', mercurial cherchera dans toutes les révisions du fichier donné pour le motif" $ myvariable "en imprimant la révision correspondante où il a trouvé le motif pour le première fois. – krtek

Questions connexes