hgでエラーが出てbitbucketにつながらない

mercurial + bitbucket.org で開発してたんですが、気がついたらhgがエラー吐くようになってた。

びっくりしたのがmacdebian、 raspberrypi全部で同じ現象なので、bitbucket.org側を疑ったんだけど、とりあえずmacmercurial更新してみたら直った。

SSLエラーが出たので、証明期限切れなのかもしれない(よくわかってない)

$ hg version
mercurial 3.1.2

$ hg incoming
Traceback (most recent call last):
File "/usr/bin/hg", line 43, in <module>
    mercurial.dispatch.run()
File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 28, in run
    sys.exit((dispatch(request(sys.argv[1:])) or 0) & 255)
File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 69, in dispatch
    ret = _runcatch(req)
File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 227, in _runcatch
    ui.warn(_("abort: error: %s\n") % reason)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)

エンコードの問題かと思い、LANG=Cや、pythonのデフォルトエンコードutf-8にしても解決せず別エラーが発生。

$ LANG=C;hg incoming
abort: error: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:581)

pythonのデフォルトエンコードを変更。

$ python
>>> import sys
>>> sys.getdefaultencoding()
'ascii'

>>> import site
>>> site.getusersitepackages()
'/home/USERNAME/.local/lib/python2.7/site-packages'

フォルダ自体がないので作成してusercustomize.pyを作成。

参考:sitecustomize.py を使わず usercustomize.py を使おうね

mkdir -p /home/USERNAME/.local/lib/python2.7/site-packages
cd /home/USERNAME/.local/lib/python2.7/site-packages
echo -e "import sys\nsys.setdefaultencoding('utf-8') > usercustomize.py

>>> import sys
>>> sys.getdefaultencoding()
'utf-8'

これでデフォルトエンコードutf-8になった。で試すと同じ_ssl.cでエラー。

$ hg incoming
中止: エラー: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:581)

とりあえずmacmercurialを最新版にしてみる...

$ brew update
$ brew upgrade mercurial

$ hg version
mercurial 4.8.1

$ hg incoming
(正常な反応が帰ってくる)

3.1.2 => 4.8.1 に更新で解決した。

手動で最新版を入れる

次、debianとraspberrypi。両方jessieで、パッケージリストの最新版が3.1.2だったのでapt-get install update, upgradeしても解決せず。

手動で取得して入れてみる。

$ sudo apt-get install python-dev python-docutils //パッケージ不足

$ wget http://mercurial-scm.org/release/mercurial-4.8.1.tar.gz
$ tar xvzf mercurial-4.8.1.tar.gz
$ cd mercurial-4.8.1
$ sudo make install  //sudoないとpermissonエラーが起きる
....
make 成功。

上記作業終了時点でhg実行しても謎エラーがでる。

$ hg version
Traceback (most recent call last):
File "/usr/bin/hg", line 41, in <module>
    mercurial.util.setbinary(fp)
File "/usr/local/lib/python2.7/dist-packages/hgdemandimport/demandimportpy2.py", line 151, in __getattr__
    return getattr(self._module, attr)
AttributeError: 'module' object has no attribute 'setbinary'

原因がさっぱりわからんですが、とりあえずばコンソール開き直したら直った(resetコマンドでは直らなかった)

$ hg version
mercurial 4.8.1

debian, raspberrypiからでもエラーなくbitbucket.orgへ繫がるようになって良く分かってないけど解決。