Я пытаюсь отладить расширение Mercurial. Это расширение добавляет код, который должен быть выполнен, когда выполняется pull
. Исходный автор настраивает этот крючок, изменяя класс объекта репозитория.Перегрузка команды pull в расширении Hg
Вот соответствующий код (который на самом деле является действительным Mercurial расширение):
def reposetup(ui, repo):
class myrepo(repo.__class__):
def pull(self, remote, heads=None, force=False):
print "pull called"
return super(myrepo, self).pull(remote, heads, force)
print "reposetup called"
if repo.local():
print "repo is local"
repo.__class__ = myrepo
Когда я выполнить hg pull
с этим расширением включен, вот выход:
# hg pull
reposetup called
repo is local
pulling from ssh://hgbox/myrepo
reposetup called
searching for changes
no changes found
Это разумный способ ввести код расширения в команду pull
? Почему так называемая «тянущаяся» заявка никогда не достигала?
Я использую Mercurial 3.4.1 для Windows 7 с помощью python 2.7.5.
Спасибо за ваш ответ. Я пытаюсь адаптировать код с помощью вашего предложения, но пока не добился успеха (я не разработчик python и иногда немного теряюсь). На самом деле я пытаюсь сделать работу расширения projrc. Я представил [вопрос] (https://bitbucket.org/aragost/projrc/issue/2/no-projrc-update-on-pull#comment-18753387), описывающий мою проблему, но поскольку я не получил обратной связи Я пытаюсь исправить это самостоятельно (с помощью SO, очевидно!). – barjak
Я проверил код mercurial, и я не вижу никакого метода pull в классе localrepo, что, вероятно, является лучшим объяснением того, почему код не работает, чем мое первое предположение. Теперь я уточню свой ответ с некоторыми более конкретными идеями, которые я знаю, чего вы пытаетесь выполнить. – ryanmce
Спасибо за последующее наблюдение. Я смог заставить его работать, следуя вашему предложению использовать «exchange :: pull». Я создал запрос [pull request] (https://bitbucket.org/aragost/projrc/pull-request/5/make-projrc-compatible-with-mercurial-32/diff) в проект Projrc. Не могли бы вы взглянуть на мой diff и сказать мне, если вы думаете, что все в порядке? – barjak