problema sed && svn

problema sed && svn

eu tenho uma cópia de trabalho do svn na qual executei o seguinte comando em

find ./source * -type f -exec sed "s/@versão 0.5.3/@versão 0.5.4/" -i {} \;

os arquivos estão todos atualizados, mas o svn não reconhece nenhuma alteração ao executar um desses

svn status ./fonte

svn diff ./source

svn commit ./source

eu também tentei escrever um script que deveria verificar o $? do sed e está tudo bem "tocar" no arquivo para atualizá-lo, mas o sed parece sempre retornar 0 -.-

O que eu posso fazer agora? -.-

Responder1

O problema está no uso de find:

find dir1 -type f

Corresponderá a todos os arquivos na estrutura de diretórios, incluindo aqueles dentro dos .svndiretórios. Os arquivos contidos .svnsão aqueles usados ​​para realizar o svn diffcontra. Então, em essência, você modificou todas as cópias dos arquivos na árvore, não apenas as cópias de trabalho.

Experimente esta sintaxe:

find ./source * -type f ! -path '*/.svn/*' -exec sed "s/@version 0.5.3/@version 0.5.4/" -I {} \;

Responder2

No meu caso, descobri que eu estava atualizando um link symlinc para o arquivo real. Eu usei a atualização in-loco do sed. Curiosamente, isso transforma um link simbólico para um arquivo normal. Então o svn não ficou feliz porque o tipo de "objeto" foi alterado, é claro.

Veja como um link simbólico é alterado para um arquivo normal:

user@host>ls -l txt*
-rw-rw-r-- 1 user user 90 Feb 28  2020 txtfile
lrwxrwxrwx 1 user user 7 Aug  5 11:07 txtln -> txtfile
user@host>sed -i "s/hello/mello/" txtln
user@host>ls -l txt*
-rw-rw-r-- 1 user user 90 Feb 28  2020 txtfile
-rw-rw-r-- 1 user user 90 Aug  5 11:08 txtln
user@host>

informação relacionada