Pergunta

Como você armazena permissões de arquivo em um repositório?Alguns arquivos precisam ser somente leitura para impedir que um programa de terceiros os destrua, mas após fazer check-out do repositório, eles são configurados para leitura e gravação.

Procurei no Google e encontrei um postagem no blog de 2005 que afirma que o Subversion não armazena permissões de arquivo.Existem patches e scripts de gancho listados (ainda existe apenas um URL).Três anos depois, o Subversion ainda não armazena permissões de arquivo e os ganchos são a única maneira de fazer isso?(Nunca fiz ganchos e prefiro usar algo nativo do Subversion.)

Foi útil?

Solução

Uma solução possível seria escrever um script que você verifica com o restante do seu código e que é executado como a primeira etapa do seu processo de construção.

Este script é executado em sua cópia da base de código e define permissões de leitura em determinados arquivos.

Idealmente, o script leria a lista de arquivos de um arquivo de entrada simples.Isso tornaria mais fácil a manutenção e para outros desenvolvedores entenderem quais arquivos são marcados como somente leitura.

Outras dicas

SVN tem a capacidade de armazenar metadados (propriedades) junto com um arquivo.As propriedades são basicamente pares chave/valor, no entanto, existem algumas chaves especiais como 'svn:executable'. Se esta propriedade existir para um arquivo, o Subversion definirá o bit executável do sistema de arquivos para esse arquivo ao fazer o check-out do arquivo.Embora eu saiba que isso não é exatamente o que você está procurando, pode ser o suficiente (era para mim).

Existem outras propriedades para final de linha (svn:eol-style) e tipo mime(svn:mime-type).

Não existe uma maneira nativa de armazenar permissões de arquivo no SVN.

Ambos asvn e o remendo daquela postagem do blog parece estar ativa (e hospedada no repositório SVN oficial), e isso é uma coisa boa, mas não acho que eles terão esse tratamento de metadados na versão principal tão cedo.

SVN teve a capacidade de lidar links simbólicos e executáveis especialmente por um longo tempo, mas nenhum deles funciona corretamente no Win32.Eu não esperaria por outro recurso não portátil (embora não fosse muito difícil implementá-lo no sistema de metadados já existente).

Eu consideraria escrever um script de shell para ajustar manualmente as permissões do arquivo e depois colocá-lo no repositório.

Uma vez que isso ainda não foi totalmente dito nas respostas anteriores.Eu odeio ressuscitar tópicos zumbis.

Como adicionar suporte de permissão para SVN teria que acomodar vários sistemas operacionais e tipos de permissão, NFS, POSIX, ARWED e RACF

Isso tornaria o SVN inchado, possivelmente entraria em conflito com tipos de permissão conflitantes, como NFS e POSIX, ou abriria possíveis explorações/vulnerabilidades de segurança.

Existem algumas soluções alternativas.pre-commit, post-commit, start-commit são os mais comumente usados ​​e fazem parte do sistema Subversion.Mas permitirá que você controle as permissões com qualquer linguagem de programação que desejar.

O sistema que implementei é o que chamo de empacotador, que valida os arquivos confirmados da cópia de trabalho e, em seguida, analisa um arquivo de metadados, que lista as permissões padrão desejadas para arquivos/pastas e quaisquer alterações que você também desejar.

Owner, Group, Folders, Files
default: <user> www-user 750 640
/path/to/file: <user> non-www 770 770
/path/to/file2: <user> <user> 700 700

Você também pode expandir isso e permitir coisas como movimentação automatizada, renomeá-las, marcar revisões por tipos, como alfa, beta, release candidate, release

No que diz respeito a oferecer suporte aos clientes para fazer check-out dos arquivos do seu repositório com permissões anexadas a eles.É melhor você criar um instalador do seu pacote e oferecê-lo como um recurso.

Imagine pessoas configurando seus repositórios com um executável definido com permissões de root:www-user 4777

Esse é o link atualizado para o patch SVN que lida corretamente com as permissões de arquivo no estilo Unix.Eu testei no fedora12 e parece funcionar conforme o esperado:

Acabei de salvá-lo /usr/bin/asvn e uso asvn em vez do comando svn se precisar de permissões tratadas corretamente.

Muitas respostas afirmaram que o svn não armazena permissões de arquivo.Isso pode ser verdade, mas consegui resolver um arquivo DLL sem problemas de permissões de execução simplesmente seguindo estas etapas:

  1. chmod 755 badpermission.dll
  2. mv badpermission.dll ../
  3. atualização svn
  4. svn rm badpermission.dll
  5. svn commit badpermission.dll -m "Remover dll para corrigir permissões"
  6. mv ../badpermission.dll .
  7. svn adicionar badpermission.dll
  8. svn commit badpermission.dll -m "Adicione a dll de volta para corrigir as permissões"
  9. rm badpermission.dll
  10. atualização svn
  11. badpermission.dll volta com permissões de execução

@morechilli:

O wrapper asvn da minha postagem anterior e o blog na postagem do OP parecem fazer o que você está sugerindo.Embora armazene as permissões nas propriedades do repositório dos arquivos correspondentes, em oposição a um único arquivo externo.

Eu recomendaria gerar o mapa de permissões usando o utilitário mtree (o FreeBSD o possui por padrão), armazenar o mapa no repositório e, como foi mencionado acima, executar um script que restauraria as permissões de arquivo adequadas do mapa como a primeira etapa do processo de construção.

O bloqueio não resolveria esse problema.O bloqueio impede que outras pessoas editem o arquivo.Este é um aplicativo de terceiros que é executado como parte do processo de construção que tenta gravar em um arquivo - alterando-o - o que interrompe o processo de construção.Portanto, precisamos impedir que o programa altere o arquivo, que está simplesmente marcando o arquivo como somente leitura.Gostaríamos que essas informações fossem mantidas no repositório e transportadas através de checkins, filiais, etc.

Graham, svn não armazena permissões.Sua única opção é encerrar sua ligação para svn em um roteiro.O script deve chamar svn com seus argumentos e, em seguida, defina as permissões.Dependendo do seu ambiente, talvez seja necessário chamar seu script svn e ajuste seu PATH para garantir que ele seja chamado.

Eu gosto bastante da ideia do morechilli de ter a lista de arquivos e permissões verificadas no próprio repositório.

Criamos um arquivo em lote para fazer isso para nós.Preferiria suporte real no subversão ...

Considere usar svn lock para impedir que outras pessoas gravem no arquivo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top