История функций с Mercurial - PullRequest
8 голосов
/ 19 июля 2011

Я бы хотел получить полную историю функции или конкретного текстового блока внутри моего кода.

Я знаю, что могу иметь различия всех моих коммитов в конкретном файле, но я хочу следить только за жизнью определенного небольшого блока текста внутри моих файлов (например, функция C ++).

Я хочу видеть, как оно меняется, несмотря на прошлые ревизии, независимо от того, перемещен ли он внутри файла или в другой файл или даже переименован (остальная часть функции остается более или менее такой же при переименовании)

Я слышал, что Mercurial может сделать это легко благодаря правильной записи истории, но я не помню, где я это слышал (во сне?), И я не могу найти какой-либо инструмент или способ сделать это, кроме традиционных инструменты истории и различий. Может быть, я не ищу правильные ключевые слова ... Кто-нибудь может помочь?

Спасибо

PS: Я все еще использую SVN для других проектов, и если кто-то знает способ сделать то же самое с SVN, я тоже так понимаю: -)

Ответы [ 2 ]

4 голосов
/ 19 июля 2011

Это на самом деле вполне выполнимо с hg grep.Пример говорит сам за себя:

$ 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):

Я попросил hg найти def revrange (определение функции).В сочетании с флагом --all, равным grep, печатается каждая ревизия, содержащая изменение в статусе совпадения.

Таким образом, мы можем легко увидеть развитие этой функции:

  • это было впервые введено в ревизии 580, в commands.py
  • 697 убрано значение по умолчанию для аргумента revs
  • 705 кажется объединением
  • 2331 убрано аргумент revlog
  • 3090 переместил функцию в cmdutil.py
  • 3707, удалил аргумент пользовательского интерфейса
  • и, наконец, 14319 переместил функцию в scmutil.py

Конечно, это не идеально, так как если функция была переименована, цепочка прекратится после переименования.Но в зависимости от вашего конкретного случая использования этого может быть достаточно.

Чтобы быть более сложным, вы можете написать относительно простой скрипт, который может даже следовать переименованиям.

0 голосов
/ 19 июля 2011

Глядя на дельты и / или журнал hg, кажется, что он не может выполнить то, что вы просите, или у вас недостаточно информации, чтобы написать скрипт для регулярного выражения информации.Если вы хотите, вы можете увидеть изменения, которые произошли с файлом за определенный период времени, и найти то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...