
hg diff – показывает, что изменилось в файле. Однако не очень удобно смотреть на изменения в файлах при этом.
Всегда хотелось, чтобы diff’ы в mercurial были более наглядными и понятными. К счастью, это можно сделать. Нам потребуется одна небольшая утилита, и скрипты, которую сделают нашу работу еще лучше.
Установите icdiff.
Большую часть работы выполнит icdiff, это небольшая утилита, которая была написана Jeff Kaufman. Скачайте и установите эту утилиту.
Скрипты для каталогов.
У icdiff есть небольшой недостаток – он работает только с файлами. Для того чтобы мы могли работать с папками, потребуется небольшая адаптация этой утилиты. Мы воспользуемся скриптом hg-interdiff. Создайте файл
~/scripts/hg-icdiff
и сделайте его выполняемым
chmod +x ~/scripts/hg-icdiff
!/usr/bin/env python
#
Adapter for using interdiff with mercurial's extdiff extension.
#
Copyright 2006 Bryan O'Sullivan <[email protected]>
#
This software may be used and distributed according to the terms of
the GNU General Public License, incorporated herein by reference.
import os, sys
def walk(base):
yield all non-directories below the base path.
for root, dirs, files in os.walk(base):
for f in files:
path = os.path.join(root, f)
yield path[len(base)+1:], path
else:
if os.path.isfile(base):
yield '', base
create list of unique file names under both directories.
files = dict(walk(sys.argv[1]))
files.update(walk(sys.argv[2]))
files = files.keys()
files.sort()
def name(base, f):
if f:
path = os.path.join(base, f)
else:
path = base
interdiff requires two files; use /dev/null if one is missing.
if os.path.exists(path):
return path
return '/dev/null'
ret = 0
for f in files:
if os.system('interdiff "%s" "%s"' % (name(sys.argv[1], f),
name(sys.argv[2], f))):
ret = 1
sys.exit(ret)
Большие файлы просматривать не очень удобно, нам нужна своего рода пагинация (постраничный просмотр). Для этого мы используем утилиту less. Создайте файл
~/scripts/hg-icdiff-wrapper
и сделайте его исполняемым. Команда -F предотвращает пагинацию, если размер текста умещается на экране.
$HOME/scripts/hg-icdiff "[email protected]"|less -F -X
Вот, собственно и все!
Настройки mercurial.
Теперь у нас все готово, и осталось научить mercurial пользоваться этим. Открываем файл
~/.hgrc
и добавляем следующие строки
[extensions]
extdiff=
[extdiff]
cmd.icdiff=/home/iano/scripts/hg-icdiff-wrapper
Теперь можно использовать hg icdiff.
Псевдонимы.
Последнюю команду можно сократить. Вот список alias’ов:
side-by-side diffs for uncommitted files
alias ic='hg icdiff'# diff all changes since the base revision, including uncommitted
(from master if you are using bookmarks, for example)
alias ica='hg icdiff -r .^'
diff the existing changes, excluding uncommitted
alias ice='hg icdiff --ch .'
Leave a Reply