Поиск истории изменений частичного файла или пути в Mercurial или TortoiseHg

Каждый раз, когда мне нужно что-то, кроме стандартного поиска, я пытаюсь сделать несколько вещей, искать в Google и в итоге ужасно терпеть неудачу. По-видимому, синтаксис поиска Hg довольно обширный, и я хотел бы использовать его мощь, но мне кажется, что я не могу найти хорошую ссылку.

Например, довольно часто я хочу найти все изменения в хранилище, связанные с частичным совпадением пути. Я знаю, что работает следующее:

file('path:full/path/file.txt')

Но я хотел бы искать файлы по частичному совпадению, и ни одно из следующих действий не сработало:

jquery                  -- seems to find everything
file(jquery*)           -- finds nothing
file('jquery*')         -- finds nothing
file('path:jquery.*')   -- finds nothing
file('name:jquery.*')   -- finds nothing
file('path:jquery.js')  -- finds every revision, it seems

Из всплывающего окна в TortoiseHg я вижу, что есть варианты gazillion, но нет подсказки о том, как их использовать (ссылка на справку показывает немного больше, но ничего о том, как шаблон должен выглядеть в file(pattern)):

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

1 ответ

Решение

Я могу очень посоветовать использовать справочную систему hg для этого. Самые полезные страницы для просмотра (на мой взгляд):

hg help revsets
hg help filesets
hg help patterns

На странице о шаблонах вы можете найти информацию о 'path:':

To use a plain path name without any pattern matching, start it with
"path:". These path names must completely match starting at the current
repository root.

Другими словами: использование 'path:' не подходит для этой цели. Чуть ниже упоминается 'glob:':

To use an extended glob, start a name with "glob:". Globs are rooted at
the current directory; a glob such as "*.c" will only match files in the
current directory ending with ".c".

The supported glob syntax extensions are "**" to match any string across
path separators and "{a,b}" to mean "a or b".

Другими словами, должна быть возможность использовать шаблон file('glob:**jquery*'), Фактически, вышеприведенный шаблон также будет работать без префикса glob, поэтому: file('**jquery*'), Смотрите часть страницы о revsets:

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

  For a faster but less accurate result, consider using "filelog()"
  instead.

  This predicate uses "glob:" as the default kind of pattern.
Другие вопросы по тегам