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

Leave a Reply

Your email address will not be published. Required fields are marked *