Как вы можете получить текущее состояние (историю хороших/плохих ревизий) пополам из mercurial

Когда я выполняю hg bisect в eclipse, мне нравится, что я могу видеть все плохие и хорошие вещи, которые я отметил в прошлом.
Есть ли способ получить эту информацию в командной строке?


person Joshua Goldberg    schedule 13.10.2011    source источник


Ответы (4)


Для этого есть предикат revset:

"bisected(string)"  
 Changesets marked in the specified bisect state (good, bad, skip).

источник

Для справки в будущем, Mercurial 2.0 представит улучшенную версию (старая продолжит работать):

"bisect(string)"
  Changesets marked in the specified bisect status:

  - "good", "bad", "skip": csets explicitly marked as good/bad/skip
  - "goods", "bads"      : csets topologicaly good/bad
  - "range"              : csets taking part in the bisection
  - "pruned"             : csets that are goods, bads or skipped
  - "untested"           : csets whose fate is yet unknown
  - "ignored"            : csets ignored due to DAG topology
person Idan K    schedule 13.10.2011
comment
+1 за обнаружение биссектрисы. Есть ли шанс на рабочий пример? Я бы предположил что-то вроде: hg log -r "bisected(good) or bisected(bad)"? - person icabod; 13.10.2011
comment
Спасибо! Пара замечаний: мне пришлось обновить Mercurial 1.6 до 1.9, чтобы получить эту функцию. Я также не могу найти способ (в шаблонах справки hg) увидеть хорошее или плохое, чтобы сделать что-то вроде того, что предложил icabod. Было бы обидно, если бы потребовалось делать два отдельных журнала, а затем сортировать их вместе для визуализации, но, похоже, это так. (Какой-нибудь способ получить хорошие и плохие результаты в журнале?) - person Joshua Goldberg; 13.10.2011
comment
Джошуа: то, что написал icabod, даст вам как хорошие, так и плохие наборы изменений. Что вам не хватает? - person Idan K; 13.10.2011
comment
Вывод не говорит, что есть что. (Ищем слово хороший в отзыве о хорошем.) - person Joshua Goldberg; 13.10.2011
comment
Да, это пока недоступно. Это будет в 2.0 IIRC, так что не забудьте проверить в ноябре. На данный момент два отдельных вызова - это путь. - person Idan K; 14.10.2011
comment
Просто подтверждаю, что в текущей версии mercurial теперь вы можете добавить следующее в шаблон журнала, чтобы получить информацию, которую я искал: {bisect|shortbisect}. Спасибо! (На случай, если кто-то читает это не в курсе, это был промежуточный период, когда это работало, но работало очень медленно.) - person Joshua Goldberg; 08.10.2012
comment
Я добавил еще один ответ со сценарием bash для форматирования отчета с использованием информации из предиката bisected(). - person Joshua Goldberg; 14.02.2013
comment
@icabod Мне нравится это, от моего коллеги: hg log -r "bisect(good) or bisect(bad)" --template "{node|short} {bisect}\n" это дает вам только хэш и хорошее/плохое - person adambox; 06.05.2014

Как было предложено в комментарии @adambox, это должно работать:

hg log -r "bisect(good) or bisect(bad)" --template "{rev}:{node|short} {bisect}\n"
person Kafu    schedule 30.09.2015
comment
Можете ли вы объяснить, почему и как это отличается/лучше, чем принятый ответ? - person Dipen Shah; 30.09.2015
comment
Как отрендерить и увидеть их смешанные вместе скрыто в комментариях (@adambox), поэтому я думаю, что это стоит того. Это делает то, что делает мой ответ, и гораздо проще теперь, когда {bisect} доступен в качестве формата. Я бы просто добавил или . чтобы увидеть текущую скорость, которая может быть еще не отмечена. - person Joshua Goldberg; 01.10.2015
comment
Принятый в настоящее время ответ указывает только на документацию. Как сказал Джошуа, реальный ответ на его вопрос (есть ли способ получить эту информацию в командной строке?) находится в комментарии к adambox. - person Kafu; 03.10.2015

В Mercurial 3.8.2 (и, возможно, раньше) вы можете использовать это:

hg log --template bisect
person Luke Worth    schedule 23.06.2016

Вот сценарий bash (я назвал его bisectstate), который работает теперь, когда доступен предикат bisected().

(Я использовал colorex, чтобы украсить его цветами, но вы можете удалить его, если он у вас не установлен.)

#!/bin/bash -f
style() {
    echo "{rev}$1 {author|person} {date|shortdate} {desc|firstline}\n"
}

(hg log -r 'not . and bisect(good)' --template "`style -good:`" ; 
 hg log -r '. and bisect(range) and not (bisect(good) or bisect(bad) or bisect(skip))' --template "`style -cur:`" ; 
 hg log -r "not . and bisect(bad)" --template "`style -bad:`" ; 
 hg log -r 'not . and bisect(skip)' --template "`style -skip:`" ; 
 hg log -r '. and bisect(good)' --template "`style -cur=good:`" ;
 hg log -r '. and bisect(bad)' --template "`style -cur=bad:`" ;
 hg log -r '. and bisect(skip)' --template "`style -cur=skip:`" ; 
# Include the intermediate, unmarked changes in the bisect range.
 hg log -r "bisect(range) and not (. or bisect(good) or bisect(bad) or bisect(skip))" --template "`style`"
) \
| sort | colorex -r bad: -b good: -g 'cur[=:]'

Вывод выглядит следующим образом:

выборка вывода bisectstate

person Joshua Goldberg    schedule 14.02.2013