Проблемы с меркуриальными 1.9 и ssh

В минувшие выходные (16 июля 2011 г.) наши меркуриальные пакеты автоматически обновлялись до новейших 1,9-меркуриальных двоичных файлов, используя устойчивые к ртутью ppa на ubuntu lucid.

Теперь вытаскивание из хранилища поверх SSH больше не работает. Отображается следующая ошибка:

remote: Traceback (most recent call last):
remote:   File "/usr/share/mercurial-server/hg-ssh", line 86, in <module>
remote:     dispatch.dispatch(['-R', repo, 'serve', '--stdio'])
remote:   File "/usr/lib/pymodules/python2.6/mercurial/dispatch.py", line 31, in dispatch
remote:     if req.ferr:
remote: AttributeError: 'list' object has no attribute 'ferr'
abort: no suitable response from remote hg!

В Mercurial 1.9 примечания об обновлении есть "интересная" заметка:

contrib/hg-ssh from older Mercurial releases will not be compatible with version 1.9, please update your copy.

Кто-нибудь знает, как обновить (если есть версия) пакет mercurial-server? Или нам нужно обновить что-то еще? (Новые скрипты python?)

Если еще нет новой версии необходимых пакетов, как перейти к предыдущему 1.7.5 (ubuntu lucid)?

Любая помощь действительно ценится, так как наши процессы развития действительно замедляются этим фактом.: S

Спасибо

Ответ 1

Хорошо, нашел (обходное) решение, отредактировав python script.

Отредактируйте script/usr/share/mercurial-server/hg-ssh В конце script замените строку:

dispatch.dispatch(['-R', repo, 'serve', '--stdio'])

с линией:

dispatch.dispatch(dispatch.request(['-R', repo, 'serve', '--stdio']))

Заменить также:

dispatch.dispatch(['init', repo])

с линией:

dispatch.dispatch(dispatch.request(['init', repo]))

Это работает для нас.

Надеюсь, это сэкономит кому-то еще 4 часа работы с принципами googleing и обучения python.: S

Ответ 2

Обновленные версии mercurial-сервера обновляются для поддержки изменений API, но может потребоваться для повторного запуска refresh-auth script для обновляемых установок.