Parece que existe uma forma abreviada no próprio mercurial, fazendo uso de listas de arquivos (sugerido por mg em #mercurial):
hg purge --all --exclude "listfile:$FILENAME"
Em um script, eu gostaria de limpar um repositório mercurial, mas ser capaz de reter vários padrões de arquivo (configuráveis) que li em $ FILENAME. A sintaxe do comando hg é
hg purge --all --exclude PATTERN1 --exclude PATTERN2 ...
Assim, se $ FILENAME contiver uma lista de padrões de arquivo (um padrão por linha), cada padrão deverá ser prefixado por um "--exclude" para construir a linha de comando
Minha abordagem atual é usar para construção da lista de argumentos
grep -v -E "^[[:blank:]]*$" $FILENAME | sed "s/^/--exclude /g" | xargs echo
que também irá omitir as linhas vazias e aquelas que contêm apenas tabulações ou espaços que resultariam em um erro se usado para construir a linha de comando acima. Assim, no total:
hg purge --all 'grep -v -E "^[[:blank:]]*$" $FILENAME | sed "s/^/--exclude /g" | xargs echo'
Existe uma maneira mais agradável, talvez com alguns argumentos xargs que eu desconheço?
Não entendo por que você está usando grep
e xargs
. Dado um arquivo de padrões como este:
foo
bar
baz
Você pode correr
$ echo hg purge --all $(perl -pe 's/^/--exclude /' file)
hg purge --all --exclude foo --exclude bar --exclude baz
Ou até mesmo
$ echo hg purge --all $(sed 's/^/--exclude /' file)
hg purge --all --exclude foo --exclude bar --exclude baz
Basta remover o echo
para executar os comandos.