У меня есть несколько пользователей, использующих Mercurial поверх общих ресурсов Linux Samba, установленных на их компьютерах Mac.
Сервер Samba имеет следующие правила вето (хорошо обсуждаемые как здесь, на этом сайте, так и в других местах), чтобы предотвратить создание Mac-системами вилок ресурсов, которые наносят ущерб всем видам вещей, особенно в каталогах разработчиков:
veto files = /._*/.DS_Store/
delete veto files = yes
Проблема в том, что иногда Mercurial случайным образом подавляется этой ошибкой:
$ hg ci
trouble committing stylesheets/custom.css!
transaction abort!
rollback completed
abort: Permission denied: '/Volumes/xxx/yyy/.hg/store/data/stylesheets/._custom.css.i-JdxA5R'
Почему Mercurial пытается создать вилку ресурсов внутри собственного хранилища данных?
Если я прокомментирую правило вето, фиксация будет успешной, но на сервере не останется такой вилки ресурсов. Таким образом, это похоже на временную вилку ресурса или временный файл.
Как я могу предотвратить его создание hg, или проигнорировать ошибку, или заставить Samba проглотить ее молча?
Изменить: я полагаю (но я не уверен) hg создает временный файл с именем custom.css.i-JdxA5R, и по какой-то причине OS X пытается прикрепить к нему вилку ресурсов. Когда это не удается, поскольку Samba наложила вето на это, OS X возвращает ошибку для всей операции с временным файлом.
Вы не поняли синтаксис veto files
(ссылка на документ) вариант. В /
фактически разделяет два правила и не имеет значения разделителя dir, как в путях unix.
По сути, у вас есть два правила, первое блокирует ._*
, что соответствует ._custom.css.i-JdxA5R
.