hgでエラーが出てbitbucketにつながらない
mercurial + bitbucket.org で開発してたんですが、気がついたらhg
がエラー吐くようになってた。
びっくりしたのがmac、debian、 raspberrypi全部で同じ現象なので、bitbucket.org側を疑ったんだけど、とりあえずmacでmercurial更新してみたら直った。
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
>>> 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)
とりあえずmacのmercurialを最新版にしてみる...
$ 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へ繫がるようになって良く分かってないけど解決。