Поиск истории изменений частичного файла или пути в 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 я вижу, что есть миллион вариантов, но нет подсказок о том, как их использовать (ссылка на справку показывает немного больше, но ничего о том, как должен выглядеть шаблон в file(pattern) ):

введите здесь описание изображения

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


person Abel    schedule 09.06.2015    source источник


Ответы (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*'). См. часть страницы о ревсетах:

  "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.
person Mathiasdm    schedule 10.06.2015
comment
Большой! Действительно, file('**jquery*') сделал свое дело. Не могу поверить, что я попробовал синтаксис **, но без добавленного одиночного подстановочного знака *. Спасибо за подсказку, где можно найти помощь по этому вопросу. - person Abel; 10.06.2015