Como alterar as permissões de arquivo para arquivos recém-gerados no diretório largefiles do Mercurial?

3

Eu tenho alguns repositórios do Mercurial que são servidos pelo Apache sobre HTTP. Mas há um usuário dedicado realizando alguns testes automatizados, que precisam verificar os repositórios localmente. Recentemente, isso começou a falhar, aparentemente devido à falta de direitos para arquivos no subdiretório largefiles em .hg :

-rw------- 2 www-data www-data 6.3M 2012-01-02 17:23 9358b828fb64feb37d3599a8735320687fa8a3b2

Umask padrão deve ser 022. E eu usei as configurações de setgid para os diretórios em .hg de acordo com a página wiki de múltiplos committers , que não cobre .hg/largefiles embora. No entanto, até onde eu entendi, configurar o gid para este diretório não resolveria o problema, que hg define tais direitos restritivos nesses arquivos. Meu outro usuário tentando acessar esses repositórios através do sistema de arquivos também está no grupo www-data , portanto, um direito de leitura adicional para o grupo seria suficiente para resolver o meu problema.

Como posso convencer o Mercurial, ou o sistema a conceder esse direito adequadamente para novos arquivos?

Estou usando o: Mercurial Distributed SCM (versão 2.1)

    
por haraldkl 17.02.2012 / 14:57

2 respostas

2

Acontece que este é um problema no Mercurial e que não há uma solução fácil para o Mercurial 2.1. Acabei de enviar três patches para a lista de discussão do Mercurial para corrigir isso - esperamos que você veja a correção no Mercurial 2.1. 1 em uma semana.

O problema é que a extensão largefiles está criando os arquivos .hg/largefiles/<hash> escrevendo dados em um arquivo temporário, que depois é renomeado para o nome real. Ele cria seus arquivos temporários usando o tempfile module padrão em Python. O módulo restringe as permissões para 600 , pois você normalmente não deseja que ninguém leia seus arquivos temporários. A extensão largefiles não levou isso em conta e apenas renomeou o arquivo.

Meus patches corrigem isso, considerando as permissões de .hg/store ao criar os arquivos temporários. Isso deve trazer arquivos grandes para o resto do Mercurial.

    
por 23.02.2012 / 14:47
2

Não sei se há uma resposta do Mercurial, mas aqui está uma resposta genérica, que pode ou não funcionar dependendo de como o Mercurial escolhe as permissões de arquivo.

Habilite listas de controle de acesso (ACLs) no sistema de arquivos. (Veja esta resposta para instruções.) Em seguida, defina a ACL padrão e a ACL atual para a cópia de trabalho para permitir acesso ao usuário ou grupo adicional que requer acesso.

setfacl -R -d -m group:www-data:rwx /path/to/working/copy
setfacl -R -m group:www-data:rwx /path/to/working/copy
    
por 17.02.2012 / 18:04