Как ограничить N новейшими записями с помощью Hg Log при указании Revset?

Этот вопрос не является дубликатом журнала hg - Как получить последние 5 записей журнала? - предел легко применить. Проблема заключается в том, что выход журнала, если он ограничен, не всегда представляется упорядоченным по убыванию к дате журнала - поведение меняется с добавлением revset.

Например, простой журнал работает "как положено" и отображает пять последних записей журнала.

hg log -l5

Тем не менее, при использовании revset результатом являются сначала самые старые узлы (как это наблюдается без -l); следовательно, следующее показывает самые старые пять записей, которые не желательны.

hg log -r "user('Me')" -l5

Как можно hg log, с revset, получить указание упорядочить по дате регистрации по убыванию ("как ожидается"), чтобы предел имел предсказуемый1 и значимый эффект?


$ hg --version
Mercurial Distributed SCM (version 3.6.1)

1 Я не считаю, что бросать случайно reverse вызовы внаборе оборотов предсказуемы, но если это "лучший" способ..

2 ответа

Решение

У вас есть несколько вариантов.

Во-первых, вы можете использовать reverse() в сочетании с вашим существующим revset, например:

hg log -r 'reverse(user("me"))' -l 5

В качестве стенограммы вы также можете использовать -f или же --follow, который - при использовании в сочетании с -r - завернут ревизию в reverse(...), Пример:

hg log -f -r 'user("me")' -l 5

Или вы можете закодировать предел в наборе изменений, например:

hg log -r 'last(user("me"), 5)'

Обратите внимание, что псевдонимы revset могут быть полезны, чтобы избежать необходимости набирать revset снова и снова. Таким образом, вы можете положить что-то вроде этого в свой .hgrc:

[revsetalias]
lastby($1) = last(user($1), 5)

А затем сделайте:

hg log -r 'lastby("me")`

Важный ответ: не используйте reverse вслепую для этой задачи. Хотя это будет работать во многих случаях, лучшее / надежное общее решение заключается в использовании sort, как в:

hg log -r 'sort(user("me"), "-date")' -l 5

Это потому что reverse не гарантирует, что порядок набора источников правильно упорядочен - как таковой он все же может привести к окончательному выводу, который не соответствует запрошенным критериям "новейших".

Использование sort выше гарантирует поведение при сортировке по дате, по убыванию, а затем выбирает верхний 5 за предел журнала журнала hg.

(В противном случае см. Ответ Реймера.)

Другие вопросы по тегам