Gerar uma lista de arquivos de um arquivo contendo uma série de padrões de globbing

1

Estou procurando uma maneira de criar uma lista de arquivos analisando um arquivo que contenha uma seqüência de zsh globbing patterns.

O objetivo final é passar essa lista de arquivos para hg add in mercurial. Para os interessados nessa parte específica, minha pergunta é motivada por essa outra pergunta que fiz no StackOverflow:

Um arquivo de amostra (vamos chamá-lo de .hginclude ) teria a seguinte aparência:

.zshrc                                                                                                                                                                                                                                                                                    
.zprofile                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
.less*                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
.emacs*/**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
src*/**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
.hg*                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
.bash*                                                                                                                                                                                                                                                                             
.inputrc                                                                                                                                                                                                                                                                                  
.ssh

e a saída do script deve ser uma lista de arquivos obtidos coletando a saída de

print globbing_pattern

em todas as linhas, em que globbing_pattern se refere a cada linha no arquivo .hginclude acima.

Por fim, a lista de arquivos deve ser uma lista que eu possa passar para hg add para rastrear esses arquivos no mercurial.

A suposição para essa parte é que eu tenho um .hgignore com o seguinte:

syntax: glob
*

, o que significa: não rastreie nada, a menos que seja explicitamente adicionado por meio de um comando hg add .

    
por Amelio Vazquez-Reina 13.12.2011 / 21:44

2 respostas

4

Consulte os hg padrões de ajuda . O Mercurial suporta a leitura de nomes de arquivo de um arquivo, assim você pode fazer

$ hg add listfile:myfiles.txt

e tem myfiles.txt contendo os nomes dos arquivos para adicionar. O que é ainda mais interessante para você é que um "nome de arquivo" no Mercurial pode ser um padrão glob. Então você pode ter myfiles.txt contain

.zshrc
.zprofile
glob:.less*
glob:.emacs*/**

etc, e o comando hg add acima fará a coisa certa.

Você pode até usar conjuntos de arquivos para selecionar os arquivos. Esta é uma linguagem find -like que permite fazer coisas como

set:exec() and not binary()

para selecionar arquivos executáveis que não sejam binários, ou seja, scripts.

Os comandos acima irão respeitar o arquivo .hgignore e você não pode usá-los diretamente para resolver o seu problema. No entanto, você pode usar

$ hg status --all --no-status listfile:myfiles.txt

para obter uma lista de correspondências de arquivos pelos padrões, incluindo quaisquer arquivos que normalmente seriam ignorados. Você pode então usar essa lista de arquivos com hg add :

$ hg status -A -n -0 listfile:myfiles.txt | xargs -0 hg add
    
por 14.12.2011 / 09:00
0

Tente isto:

 hg add 'for i in 'cat myfiles.txt' ; do ls $i ; done'

onde myfiles.txt contém os globs. Mas é claro que a sugestão do initrpc é mais limpa.

    
por 14.12.2011 / 09:33