Как ограничить 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.
(В противном случае см. Ответ Реймера.)