Генерация списка каталогов, содержащих файлы, измененные между ревизиями - PullRequest
1 голос
/ 14 октября 2019

Я знаю из этого ответа , что я могу сделать

hg status --rev x:y

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

Например, если приведенная выше команда выдаст

A Foo\Bar\SomeFile.txt
A Foo\Bar\AnotherFile.cs
M Baz\AnotherFile.txt

Я хочу получить

Foo\Bar
Baz

вместо.

1 Ответ

2 голосов
/ 14 октября 2019

Не готовое решение (см. Примечания), только подсказки

  • Вы можете использовать шаблоны для изменения формата вывода hg st, как это можно сделать для любого "журнала". как "hg команды (см. параметр -T) *
  • в шаблоне, вы можете фильтровать вывод (имена файлов) с помощью фильтра" dirname ", который удалит часть имени файла из файла

, ноЯ попробовал это и обнаружил (в моих репозиториях) некоторые "странности" (и ожидаемые проблемы)

Конечные заметки:

  1. При выводе по умолчанию hg st исключает повторяющиеся имена файлов (если они появляются) в результате, ваш шаблон не будет (опять же, «по умолчанию»)
  2. Я увидел неправильный (абсолютно неправильный) результат шаблонного вывода для того же диапазона состояния

хорошо

>hg st --rev 1170:tip
M hggit\__init__.py
M hggit\compat.py
M hggit\git_handler.py
M hggit\gitdirstate.py
M hggit\hg2git.py
M tests\test-illegal-contents.t

my

>hg st --rev 1170:tip --template "{files % '{file}\n'}"
hggit/__init__.py
hggit/__init__.py
hggit/__init__.py
hggit/__init__.py
hggit/__init__.py
hggit/__init__.py

(шесть файлов только из наконечника вместо диапазона)

Даже с hg log -T вместо st (что дает всех файлов ) у вас возникнет проблема из п. 1: "более одной записи в файле для одного и того же файла"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...