Search code examples
mercurialtortoisehg

In mercurial how can I find changesets that contain a string?


Let's say I have the following revisions:

rev 1:
+ Dim Foo as integer

rev 2:
+ I like big butts, I cannot lie

rev 3
- Dim Foo as integer

Foo is in rev 1 & 2, and removed from three. What command can I issue that will return all changesets that Foo was added or deleted?

Ideally I'd like to be able to do this from toroisehg as well


Solution

  • You can use the grep command :

    hg grep --all Foo
    

    To address Lazy Badger concerns in comments.

    $ hg init
    $ echo "Dim Foo as integer" > test 
    $ hg commit -m "1"
    $ echo "I like big butts, I cannot lie" > test 
    $ hg commit -m "2"
    $ echo "Dim Foo as integer" > test 
    $ hg commit -m "3"
    $ hg grep --all Foo
    

    The output of the grep command is :

    test:2:+:Dim Foo as integer
    test:1:-:Dim Foo as integer
    test:0:+:Dim Foo as integer
    

    Which means, Foo was first seen in the file test on revision 0 (the + sign tells us that), then it dissapeared on revision 1 (the - signs), and reappear again on revision 2.

    I don't know if it is what you want, but it clearly indicates revision on which the searched word was added or deleted.