Как получить самую близкую ревизию к данной, которая содержит другие изменения, кроме только .hgtags? - PullRequest
2 голосов
/ 17 ноября 2011

У меня есть ключ хэширования ревизии.Я хотел бы получить ближайшую ревизию, которая содержит что-нибудь, кроме .hgtags.

Например, рассмотрим следующий фрагмент истории Mercurial:

D:\CI\NC\8.0>hg log -l3 -b 8.0 -v
changeset:   1768:633cf1f61665
branch:      8.0
tag:         tip
user:        ci
date:        Wed Nov 16 21:06:20 2011 +0200
files:       .hgtags
description:
Replaced tag 'good.NC.16' with 'rejected.NC.16' for changeset 9451e8f187b1


changeset:   1767:6cad328c622c
branch:      8.0
parent:      1765:9451e8f187b1
user:        ci
date:        Wed Nov 16 21:04:26 2011 +0200
files:       .hgtags
description:
Added tag 'good.NC.16' for changeset 9451e8f187b1


changeset:   1765:9451e8f187b1
branch:      8.0
tag:         rejected.NC.16
user:        gilad
date:        Tue Nov 15 18:26:09 2011 +0200
files:       .hgignore
description:
update

В этом случае, еслиданная ревизия 633cf1f61665, тогда я ищу ревизию 9451e8f187b1, потому что она самая близкая, которая содержит не только .hgtags, но что-то еще.

Каким образом, учитывая 633cf1f61665, можноЯ нахожу 9451e8f187b1, используя как можно меньше вызовов hg.exe?

РЕДАКТИРОВАТЬ

Я исправил вывод, он должен был отображать ревизии из той же ветви.

РЕДАКТИРОВАТЬ2

Я постараюсь объяснить себя.Давайте определим два понятия:

  • Скучный набор изменений - тот, который создан действием hg tag.
  • Интересный набор изменений - любой не скучный набор изменений.

Итак, мой вопрос можно перефразировать следующим образом:

Given an arbitrary revision (dull or interesting) I need to find the closest
interesting revision belonging to the same named branch using as few hg invocations
as possible.

Например, с учетом 633cf1f61665 или 6cad328c622c или 9451e8f187b1 необходимая редакция 9451e8f187b1.

1 Ответ

5 голосов
/ 17 ноября 2011

Попробуйте с

$ hg log -r "max(::REV and not file(.hgtags))"

и посмотрите, будет ли это то, что вы хотите.См. hg help revsets для получения дополнительной информации о языке запросов.

Вы можете создать псевдоним revset для этого, если будете часто его использовать:

[revsetalias]
interesting($1) = max(::$1 and not file(.hgtags))

, а затем использовать hg log -r "interesting(123)" в будущем..

...