Поиск истории изменений частичного файла или пути в 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.