Как получить историю изменений между определенным периодом времени или после определенной версии или идентификатора коммита до последней версии с использованием Mercurial API? - PullRequest
2 голосов
/ 15 декабря 2011

Я хочу получить все коммиты с их набором изменений после определенного идентификатора коммита или времени.Есть ли прямой способ сделать это с помощью Mercurial API?

1 Ответ

1 голос
/ 08 февраля 2012

Как вы, наверное, знаете, для Mercurial нет стабильного API уровня Python . Командная строка действительно является единственным поддерживаемым API (если только вы не используете библиотеку-оболочку, такую ​​как JavaHg или python-hglib ).

Итак, в командной строке вы запустите

$ hg log -r "ID::"

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

Используя JavaHg, вы можете создать экземпляр Repository объекта и использовать LogCommand:

List<Changeset> changesets = LogCommand.on(repo).rev(id + "::").execute();

Затем можно выполнить итерацию по списку changesets. С python-hglib это выглядит как

changesets = client.log(id + "::")

Наконец, если вы импортируете код Mercurial напрямую, вы можете сделать

ctxs = repo.set(id + "::")

, чтобы получить итератор, выдающий changectx объектов. Хотя мы не даем никаких гарантий относительно Python API, я ожидаю, что он также будет очень стабильным.

Вышесказанное сфокусировано на поиске по номеру ревизии или номеру ревизии. Если вы хотите выполнить поиск по дате, вам нужно вызвать эквивалент

$ hg log -d '>YOUR-DATE'

В JavaHg вы можете просто использовать метод date(String date) для LogCommand, в python-hglib вы задаете ключевой аргумент date, а внутри вы используете предикат revset date - см. hg help revsets .

...