Tenho alguns usuários usando compartilhamentos Mercurial sobre Linux Samba, montados em seus Macs.
O servidor Samba tem as seguintes regras de veto (bem discutidas aqui neste site e em outros lugares) para evitar que Macs criem forks de recursos, que causam estragos em todo tipo de coisa, especialmente em diretórios de desenvolvedores:
veto files = /._*/.DS_Store/
delete veto files = yes
O problema é que às vezes, aleatoriamente, o Mercurial irá engasgar com este erro:
$ 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'
Por que o Mercurial está tentando criar uma bifurcação de recursos dentro de seu próprio armazenamento de dados?
Se eu comentar a regra de veto, o commit será bem-sucedido, mas não deixará tal bifurcação de recursos no servidor. Portanto, parece ser uma bifurcação de recurso temporário ou um arquivo temporário.
Como posso evitar que o hg o crie, ou ignore o erro, ou faça o Samba engoli-lo silenciosamente?
Editar: suponho (mas não tenho certeza) que hg está criando um arquivo temporário chamado custom.css.i-JdxA5R e, por algum motivo, o OS X tenta anexar uma bifurcação de recursos a ele. Quando isso falha, como é vetado pelo Samba, o OS X retorna um erro para toda a operação do arquivo temporário.
Responder1
Você não entendeu a sintaxe do veto files
(link do documento) opção. Na /
verdade, separa duas regras e não tem o significado do separador dir como nos caminhos unix.
Essencialmente, você tem duas regras, a primeira bloqueando ._*
, que corresponde a ._custom.css.i-JdxA5R
.