Я хочу получить все коммиты с их набором изменений после определенного идентификатора фиксации или времени. Есть ли какой-либо прямой способ сделать это с помощью Mercurial API?Как получить историю изменений между конкретным временным интервалом или после определенной ревизии или зафиксировать идентификатор до последнего, используя Mercurial API?
ответ
Как вы, наверное, знаете, есть no stable Python-level API для Mercurial. Командная строка на самом деле является единственным поддерживаемым API (если вы не используете библиотеку обертки, например JavaHg или python-hglib).
Так в командной строке будет работать
$ hg log -r "ID::"
, чтобы получить все ревизии после ID
. Оператор ::
дает вам потомки, используйте ID:
, если вы просто хотите, чтобы ревизии с более высоким номером ревизии, даже если они не являются потомком ID
.
Использование JavaHg, вы бы создать экземпляр объекта Repository
и использовать LogCommand
:
List<Changeset> changesets = LogCommand.on(repo).rev(id + "::").execute();
Вы можете перебирать changesets
списка. С питона-hglib это выглядит как
changesets = client.log(id + "::")
Наконец, если вы импортировать Mercurial код непосредственно вы можете сделать
ctxs = repo.set(id + "::")
, чтобы получить итератор, дающую changectx
объектов. Хотя мы не даем никаких гарантий относительно API Python, я ожидаю, что это тоже будет очень стабильным.
Вышеуказанное сосредоточено на поиске идентификатора набора изменений или номера версии. Если вы хотите, для поиска по дате, то вам нужно позвонить эквивалент
$ hg log -d '>YOUR-DATE'
В JavaHg вы можете просто использовать метод date(String date)
на LogCommand
, в питон-hglib установить аргумент date
ключевое слово, и внутренне вы используете предикат обрезания date
- см. hg help revsets
.