Показать коммиты Mercurial, изменяющие часть кода (несколько строк)

Итак, предположим, у меня есть фрагмент кода, состоящий из нескольких последовательных строк в файле, и я хочу найти в истории все коммиты, которые повлияли на этот фрагмент кода. Есть ли способ сделать это с помощью mercurial?

Я не имею в виду одну встроенную команду, потому что, насколько мне известно, Mercurial не предоставляет для этого команды, поэтому для этого, вероятно, нужен небольшой скрипт, включающий несколько команд.


person Tom    schedule 05.11.2014    source источник


Ответы (2)


Вероятно, вы захотите начать с hg blame. Это даст вам самую последнюю версию, которая изменила каждую строку. Затем вы можете использовать опцию -r для hg blame, чтобы пройти назад по истории.

Любое количество программ обработки текста может извлечь номера ревизий из blame и автоматизировать этот процесс.

person Kevin    schedule 05.11.2014

Если вы знаете какую-либо неизменяемую часть строки (строк) по истории, вы можете попробовать вместо порицания в цикле (и некоторой логики внутри) использовать hg grep --all ... (ШАБЛОН может быть регулярным выражением, а не просто текстовой строкой).

Просто самый простой пример (для жестко закодированного шаблона мне лень создавать любое регулярное выражение)

>hg grep --all DATE_FORMAT_ENTRY serendipity_lang_ru.inc.php
lang/UTF-8/serendipity_lang_ru.inc.php:9:-:@define('DATE_FORMAT_ENTRY', '%A, %e %B. %Y');
lang/UTF-8/serendipity_lang_ru.inc.php:9:+:@define('DATE_FORMAT_ENTRY', '%A, %e %B %Y');
lang/UTF-8/serendipity_lang_ru.inc.php:7:-:@define('DATE_FORMAT_ENTRY', '%A, %e %B %Y');
lang/UTF-8/serendipity_lang_ru.inc.php:7:+:@define('DATE_FORMAT_ENTRY', '%A, %e %B. %Y');
lang/UTF-8/serendipity_lang_ru.inc.php:3:-:@define('DATE_FORMAT_ENTRY', '%A, %e %B. %Y');
lang/UTF-8/serendipity_lang_ru.inc.php:3:+:@define('DATE_FORMAT_ENTRY', '%A, %e %B %Y');
lang/UTF-8/serendipity_lang_ru.inc.php:0:+:@define('DATE_FORMAT_ENTRY', '%A, %e %B. %Y');

(это самый очевидный вывод, не так ли?)

person Lazy Badger    schedule 10.11.2014