2011-07-18 12 views
8

Chciałbym móc uzyskać pełną historię funkcji lub określonego bloku tekstu w moim kodzie.Historia funkcji z Mercurialem

Wiem, że mogę mieć różnice wszystkich moich zatwierdzeń na konkretnym pliku, ale chcę tylko śledzić życie określonego małego bloku tekstu wewnątrz moich plików (na przykład funkcja C++).

chcę zobaczyć to zmienić chociaż ostatnich zmian, bez względu na to czy jest przesuwana wewnątrz pliku lub do innego pliku lub nawet przemianowany (resztę funkcji pozostały mniej więcej to samo, gdy zmiana nazwy)

słyszałem Mercurial może to zrobić łatwo dzięki odpowiedniemu zapisowi historii, ale nie pamiętam, gdzie to usłyszałem (w moich snach?) I nie mogę znaleźć żadnego narzędzia ani sposobu, aby to zrobić, z wyjątkiem tradycyjnych narzędzi historii i różnic. Może nie szukam właściwych słów kluczowych ... Ktoś może pomóc?

Dzięki

PS: I nadal korzystać z SVN dla innych projektów, a jeśli ktoś zna sposób, aby osiągnąć to samo z SVN, biorę go zbyt :-)

Odpowiedz

0

Patrząc na delt i/lub log hg, który wydaje się nie być w stanie zrobić to, co pytasz lub masz wystarczająco dużo informacji, aby napisać skrypt, aby wyodrębnić informacje. Jeśli chcesz, możesz zobaczyć zmiany, które nastąpiły w pliku przez pewien okres czasu i przeszukać to, czego szukasz.

4

Jest to całkiem wykonalne z hg grep. Przykładem mówi sama za siebie:

$ hg grep 'def revrange' --all 
mercurial/cmdutil.py:14319:-:def revrange(repo, revs): 
mercurial/scmutil.py:14319:+:def revrange(repo, revs): 
mercurial/cmdutil.py:3707:-:def revrange(ui, repo, revs): 
mercurial/cmdutil.py:3707:+:def revrange(repo, revs): 
mercurial/cmdutil.py:3090:+:def revrange(ui, repo, revs): 
mercurial/commands.py:3090:-:def revrange(ui, repo, revs): 
mercurial/commands.py:2331:-:def revrange(ui, repo, revs, revlog=None): 
mercurial/commands.py:2331:+:def revrange(ui, repo, revs): 
mercurial/commands.py:705:-:def revrange(ui, repo, revs = [], revlog = None): 
mercurial/commands.py:705:+:def revrange(ui, repo, revs, revlog=None): 
mercurial/commands.py:697:-:def revrange(ui, repo, revs = [], revlog = None): 
mercurial/commands.py:697:+:def revrange(ui, repo, revs, revlog=None): 
mercurial/commands.py:580:+:def revrange(ui, repo, revs = [], revlog = None): 

Poprosiłem hg znaleźć def revrange (definicji funkcji). W połączeniu z flagą --all do grep, drukuje każdą wersję zawierającą zmianę stanu dopasowania.

Tak więc możemy łatwo zobaczyć ewolucję tej funkcji:

  • został po raz pierwszy wprowadzony w rewizji 580, w commands.py
  • 697 usuwa domyślny do argumentu obr
  • 705 wydaje się być scalania
  • 2331 usunięto revlog argumentu
  • 3090 przemieszczane funkcja cmdutil.py
  • 3707 usunięto argument ui
  • wreszcie 14319 przeniósł funkcję scmutil.py

Oczywiście, to nie jest idealne, ponieważ jeżeli funkcja została zmieniona, łańcuch skończy po zmiany nazwy. Ale w zależności od konkretnego przypadku użycia może to wystarczyć.

Aby być bardziej wyrafinowanym, można napisać stosunkowo prosty skrypt, który może być nawet zgodny z nazwami.