У меня Debian 6 x64, python 2.6, Apache 2.2, Mercurial 1.8. Доступ к Mercurial осуществляется через HTTPS, Python использует mod_wsgi
, Apache выполняет «Аутентификацию: базовую» с mod_authnz_external
.
Мне нужно заменить предоставленное пользователем имя пользователя Mercurial. Итак, если пользователь настроил имя пользователя как «J.D.», но входит в систему с именем «john.doe@company.com», я хочу видеть «john.doe@company.com» в истории коммитов Mercurial.
Вы не можете сделать это. Вы не можете ничего изменить в наборах изменений, поступающих на сервер, вы можете только проверить их (с pretxnchangegroup
крючок) и отклоняйте их, если вам не нравится то, что вы видите.
Причина, по которой вы не можете ничего изменить, заключается в том, что идентификаторы наборов изменений зависят от всей информации в самих наборах изменений: имя пользователя, дата фиксации, сообщение фиксации, измененные файлы, сами изменения. Если вы что-то измените, вы также измените хеши набора изменений.
Изменение хэшей ревизий вызывает сожаление, если ревизии уже были перенесены в другие места - вы получаете дублирующиеся ревизии, так как вы не можете сообщить клиенту, что вы изменили его ревизии.
Вы можете сказать, что это ошибка, если Алиса отправляет наборы изменений на сервер без своего настоящего имени, но на самом деле это особенность. При использовании распределенной системы контроля версий Алиса может напрямую обращаться к Бобу, чтобы просмотреть его изменения. Затем она может добавить другие ревизии поверх его и отправить все на сервер. Поэтому, если вы запрещаете пользователям выдвигать что-либо, кроме их собственных наборов изменений, вы предотвращаете такое прямое сотрудничество.