2009-05-12 6 views
5

Я делаю много обзоров кода в основном с помощью команды «hg in -p/path/to/repo», и было бы очень приятно, если бы ее вывод можно было просмотреть в некоторая внешняя программа (например, vimdiff). Есть ли способ достичь этого?Просмотр результатов команд Mercurial in/out во внешнем внешнем просмотре

ответ

2

Мой быстрый и грязный первый ответ был: «См. Extdiff extension, распространяемый с помощью ртути и документированный на их сайте». Это было всего лишь около 15% ответа.

Ближайший ответ, который я видел до сих пор, начинается с расширения, называемого rdiff. rdiff использует «входящий» код и поэтому адресует эту половину вашего вопроса. Это расширение было упомянуто в earlier SO thread, в котором приведен пример сценария bash для реализации rdiff против текущей рабочей копии (в отличие от текущей копии репозитория). Сценарий заканчивается использованием «hg diff», поэтому на него повлияет все, на что у вас установлен extdiff.

rdiff.py всего 146 строк и достаточно понятный, а скрипт bash имеет длину 5 строк. Хотя это не полный ответ на ваш вопрос, я думаю, он указывает путь.

+0

Пожалуйста, исправьте меня, если я ошибаюсь, но extdiff работает только с вашими местными изменениями. Кажется, он не может использоваться с командами «входящих/исходящих» ... – pachanga

+0

Вы правы - я действительно не читал ваш вопрос. Выполняя некоторые исследования (которые я должен был сделать до того, как я ответил), похоже, что «крючки» могут содержать начало ответа. В настоящее время я читаю http://hgbook.red-bean.com/read/handling-repository-events-with-hooks.html с учетом вашего вопроса. Я отредактирую свой ответ, если найду что-то стоящее. –

0

Я задал тот же вопрос в списке адресов ртути и получил interesting suggestions. Лучший один я любил пришел из Мэтт Mackall, который сводится к тому:

1) использовать «рт.ст. входящие --bundle in.hg», чтобы сохранить связку входящих изменений

2) использовать «-R в рт.ст. .hg extdiff», чтобы просмотреть изменения

Хотя это звучит как хорошая идея, к сожалению, я получаю исключение:

[email protected] $ hg -R /tmp/in.bundle extdiff 
** unknown exception encountered, details follow 
** report bug details to http://www.selenic.com/mercurial/bts 
** or [email protected] 
** Mercurial Distributed SCM (version 1.1.2) 
** Extensions loaded: alias, fetch, extdiff, graphlog, hgk, rdiff 
Traceback (most recent call last): 
File "/usr/bin/hg", line 20, in <module> 
    mercurial.dispatch.run() 
File "/var/lib/python-support/python2.6/mercurial/dispatch.py", line 
20, in run 
    sys.exit(dispatch(sys.argv[1:])) 
File "/var/lib/python-support/python2.6/mercurial/dispatch.py", line 
29, in dispatch 
    return _runcatch(u, args) 
File "/var/lib/python-support/python2.6/mercurial/dispatch.py", line 
45, in _runcatch 
    return _dispatch(ui, args) 
File "/var/lib/python-support/python2.6/mercurial/dispatch.py", line 
367, in _dispatch 
    ret = _runcommand(ui, options, cmd, d) 
File "/var/lib/python-support/python2.6/mercurial/dispatch.py", line 
416, in _runcommand 
    return checkargs() 
File "/var/lib/python-support/python2.6/mercurial/dispatch.py", line 
376, in checkargs 
    return cmdfunc() 
File "/var/lib/python-support/python2.6/mercurial/dispatch.py", line 
361, in <lambda> 
    d = lambda: util.checksignature(func)(ui, *args, **cmdoptions) 
File "/var/lib/python-support/python2.6/mercurial/util.py", line 715, in check 
    return func(*args, **kwargs) 
File "/var/lib/python-support/python2.6/hgext/extdiff.py", line 203, 
in extdiff 
    return dodiff(ui, repo, program, option, pats, opts) 
File "/var/lib/python-support/python2.6/hgext/extdiff.py", line 123, in dodiff 
    node1, node2 = cmdutil.revpair(repo, opts['rev']) 
File "/var/lib/python-support/python2.6/mercurial/cmdutil.py", line 
123, in revpair 
    return repo.dirstate.parents()[0], None 
File "/var/lib/python-support/python2.6/mercurial/bundlerepo.py", 
line 229, in __getattr__ 
    raise AttributeError(name) 
AttributeError: dirstate 

Я отправил эту ошибку в список рассылки, а также, но не получил никаких ответов до сих пор ...