Какова цель предиката contains() в наборах ревизий Mercurial?

#mercurial

#mercurial

Вопрос:

Я не могу вспомнить случаи, когда предикат contains() полезен. Похоже, что предикаты file(), addes(), removes() и modifies() охватывают все запросы, связанные с файлом. Можете ли вы привести пример того, когда contains() полезен?

Ответ №1:

Contains просматривает содержимое, а не имена файлов:

 "contains(pattern)"
  Revision contains pattern.
  

по сравнению с:

 "file(pattern)"
  Changesets affecting files matched by pattern.
  

Итак, что-то вроде:

 hg log -r 'contains("spam")'
  

покажет мне все наборы изменений, в которых добавлен или удален строковый спам. Обратите внимание, что аналогичная keyword команда проверяет сообщение о фиксации, а не содержимое.

Комментарии:

1. Вы написали: «Contains просматривает содержимое, а не имена файлов»: должно быть, я делаю что-то неправильно, потому что это не то, с чем я здесь экспериментирую. Для меня он выводит что-то только тогда, когда я использую шаблон файла в качестве аргумента. Также в TortoiseHg этот предикат показан в категории «Шаблон файла». Мое понимание того, что делает contains(), заключается в том, что он выводит все ревизии, в которых репозиторий содержит файл, соответствующий заданному шаблону файла.

2. Hrm, я думал, что это аналог команды ‘hg grep’. Я посмотрю на это снова.