Maneira adequada de adicionar svn: executável

107

Tenho alguns arquivos que foram executáveis ​​antes de adicioná-los por svn. Eles têm a propriedade svn: executable definida. Agora, alguns outros arquivos foram verificados sem que o bit executável não o tenha, e eu quero definir a propriedade svn: executable:

$ svn propset svn:executable on *.cgi

Então eu verifico o status e até mesmo os arquivos com svn: executável foram modificados:

$ svn diff
Property changes on: a.cgi
___________________________________________________________________
Modified: svn:executable
   - 
   + *


Property changes on: b.cgi
___________________________________________________________________
Added: svn:executable
   + *

a.cgi não deve ser modificado. Quero adicionar o bit svn: executável para ser definido da mesma maneira que nos outros arquivos, mas não consigo descobrir o comando para fazer isso.

Jake
fonte
2
Abro esta página sempre que não quero digitar svn propset svn:executable on (...). E a resposta para a pergunta deve ser for f in *.cgi; do if [ ! -x $f ]; then svn ps (...); fi; done, e apenas enviar os arquivos modificados. Então siga em frente.
Tomasz Gandor
@TomaszGandor Pense que você está faltando svn:executableem algum lugar nesse segundo trecho. Talvez svn ps svn:executable on $f;?
Keith M de
1
en.wikipedia.org/wiki/Ellipsis_(linguistics) - sim, foi deixado como um exercício para o leitor.
Tomasz Gandor

Respostas:

166

Você está certo em usar os comandos de edição de propriedade svn. A propriedade é svn: executável.

Para adicionar o "bit executável" no svn

svn propset svn:executable on <list of files>

Para remover o "bit executável" no svn

svn propdel svn:executable <list of files>

A documentação do SVN para isso está localizada aqui.

Quanto a não modificar os executáveis, você não está modificando o executável (uma soma de verificação irá verificar isso), mas está modificando o repositório SVN. Lembre-se de que o SVN revisa os sistemas de arquivos, não apenas os arquivos; portanto, uma modificação dos bits de permissão aumentará o número de revisão do SVN, mesmo que seja apenas uma modificação das propriedades de um arquivo (e não uma modificação do próprio arquivo).

Edwin Buck
fonte
Quando eu executo svn propset da maneira mostrada acima, ele os define como "*", mas da maneira natural define svn: executable como nada, mas que ainda está definido. Eu quero que essa propriedade seja igual àquelas cujo bit executável foi definido antes de adicioná-los ao subversion.
Jake
2
Desculpe por todas as edições, mas se bem me lembro, defini-lo como qualquer coisa ativará o bit executável, excluí-lo (e possivelmente defini-lo como nulo ou espaço em branco) irá desativá-lo. Para obter o valor que seu cliente SVN estava usando, um propget svn pode ser usado.
Edwin Buck,
-2

Aqui está como eu defino a propriedade executável em todos os arquivos * .py em meu projeto que possuem bits de execução definidos neles. Eu executo isso a partir do diretório de nível superior

for f in `find ./ -name '*.py'`; do echo $f; if [ -x $f ]; then echo $f 'is executable setting svn:executable'; svn propset svn:executable on $f; else echo $f 'is not executable'; fi; done;
Isaac Jessop
fonte
Como o atributo executável é definido sem usar propset? Eu não o usei e, pelo que sei, ninguém mais o fez. Ele aparece em três arquivos no mesmo diretório e em nenhum outro lugar, e parece não haver nada de especial sobre esses arquivos. (Eles são arquivos java, não sh ou exe ou morcego ou jar ou qualquer outro.)
Jerry Miller
Acredito que se o arquivo tiver o bit executável definido quando for inicialmente importado, a propriedade svn executável será definida.
Isaac Jessop
com certeza o find tem um switch -perm que pode ser um pouco mais elegante do que if / then, mas é claro que seria mais para lembrar
Never Sleep Again