формат журнала mercurial со статусами файлов

Мне было интересно, как мне вернуть файлы добавленные/измененные/удаленные для фиксации в таком формате:

<modifier> file
<modifier> path/to/a/file
<modifier> path/to/another/file

В git я делаю так: "git show --pretty="format:" --name-status commitish" и получаю:

D       file
A       path/to/a/file
M       path/to/another/file

Для mercurial я не могу понять, как это сделать с помощью шаблонов. У меня есть файл стиля:

changeset = "{file_mods}{file_adds}{file_dels}"
file_add  = "A {file_add}\n"
file_mod  = "M {file_mod}\n"
file_del  = "D {file_del}\n"

и с этим стилем и командой "hg log -r commitish --style ~/.hgstyle" я получаю почти то, что хочу:

M path/to/another/file
A path/to/a/file
D file

Есть еще одна проблема с mercurial — файлы не отсортированы в правильном порядке.

Как получить тот же результат, что и в команде git (с модификаторами и правильно отсортированными) в mercurial?


person Titas    schedule 12.05.2011    source источник


Ответы (4)


Нет прямого способа использовать механизм шаблонов, но вы можете попробовать:

hg log --style ~/.hgstyle -r <rev> | sort -k2

Это отсортирует вывод команды журнала по второму столбцу данных (т. е. по именам файлов).

person Tim Henigan    schedule 12.05.2011
comment
да, это именно то, что я хочу;), но я хотел бы сделать это без конвейерной сортировки, если это возможно - person Titas; 12.05.2011
comment
на самом деле конвейерная сортировка не сортирует по буквам и цифрам, поэтому позже мне пришлось выполнять сортировку в ruby ​​в коде. - person Titas; 28.05.2011
comment
Привет, ребята, здесь есть ссылка на мой вопрос: я предполагаю, что нет --template способа сделать это, верно? - person Boaz; 15.02.2012

Попробуй это:

hg stat --change THE_REV_YOU_WANT
person Ry4an Brase    schedule 12.05.2011
comment
По-прежнему кажется, что список сначала сортируется по статусу, поэтому передача в sort -k2 по-прежнему необходима. - person Tim Henigan; 12.05.2011
comment
Это задокументировано как во встроенной справке (hg help status), так и на справочной странице selenic. com/mercurial/hg.1.html#commands . Он относительно новый, но если он работает в вашей версии, он там задокументирован. - person Ry4an Brase; 12.05.2011
comment
Я только заметил это в строке документации. Мой локальный исходный репозиторий Hg был обновлен до более старой версии. - person Tim Henigan; 12.05.2011
comment
Это хороший подход (я не знал, что вы можете передать --change на st), но он не сортируется для моей версии hg... 1.6.3 - person Titas; 12.05.2011
comment
Да, вы должны сделать сортировку извне — Mercurial группирует по статусу, но sort -k2, на который указывает Тим, поможет вам в остальном. - person Ry4an Brase; 12.05.2011

Возможно, я не правильно понял, но если вы хотите сначала удалить, затем добавить и, наконец, изменить, просто измените первую строку вашего файла стиля:

changeset = "{file_dels}{file_adds}{file_mods}"

Вы также можете добавить табуляцию (\t) вместо пробела, если хотите быть ближе к Git:

file_add  = "A\t{file_add}\n"
person krtek    schedule 12.05.2011
comment
Я не хочу сначала удалять, я хочу отсортировать по алфавиту, как в {files} - person Titas; 12.05.2011

Добавьте это в свой .hgrc файл

[alias]
prettylog = log -r : --template "{rev} | {date|shortdate} | {desc|strip|firstline}\n{file_dels % '  - {file}\n'}{file_adds % '  + {file}\n'}{file_mods % '  ~ {file}\n'}\n"

Он напечатает аккуратно отформатированный вывод, подобный этому (2 — номер версии):

2 | 2014-03-21 | my new log format
  - js/remove_me.js
  + js/add_me.js
  ~ doc/modified_me.txt
  ~ www/index.html
person user    schedule 21.03.2014