Уже не помню когда у меня перестал ратотать клиент к mercurial (hg) - после перехода на Python 2.7 или апгрейда дла Lion. Но так, как я им не пользовался, то решил не тратить время на восстановлние работоспособности. Но тут на проекте решили использовать Mercurial в качестве source control. Соответственно пришлось разбираться с hg. Сразу скажу что установка последней версии проблему не решила.

Шаг 1. Выполняем команду hg и получаем ошибку:

 

$ hg
abort: couldn't find mercurial libraries in [/usr/platlib/Library/Python/2.7/site-packages /usr/local/bin ...

Тут понятно что клиент написан на Python и при запуске не может импортировать нужные модули.

 

Шаг 2. Смотрим исходники:

Выполняем команду

$ sudo vim `which hg`

и практически в самом начале файла (не считая комменатиев - 3-я строка) видем такую строчку:

libdir = '../../platlib/Library/Python/2.7/site-packages/'

Для тех кто знаком с расположением биболиотек, в частности Python'а, в MacOS сразу поймет что путь к Python указан неправильно, соответственно меняем его на:

libdir = '/Library/Python/2.7/site-packages/'

Шаг 3. Пользуемся mercurial:

 

$ hg
Mercurial Distributed SCM
...

 


На днях узнал об одной интересной особенности типа bool в python:

>>> b = True
>>> b + 1
2

Поведение достатчно логичное, если учесть, что:

>>>> isinstance(b, int)
True

Всё дело в том, что тип bool - это всего-лишь синтаксический сахар и наследник от типа int, который, для удобства использования, может иметь всего два значения - 0 (False) и 1 (True). Пример выше врядли встретится в коде, но зать об этом стоит на случай если где-то случайно поменяется тип переменной с bool на int или наоборот.


Сама презентация:

Невоторые полезные ссылки