Dans un script, je voudrais purger un repository mercurial, mais être en mesure de conserver un certain nombre de templates de files (configurables) que j'ai lus à partir de $ FILENAME. La syntaxe de la command hg est
hg purge --all --exclude PATTERN1 --exclude PATTERN2 ...
Ainsi, si $ FILENAME contient une list de templates de files (un model par ligne), chaque model doit être précédé d'un "–exclude" afin de build la command line
Mon approche actuelle est d'utiliser pour la construction de la list d'arguments
grep -v -E "^[[:blank:]]*$" $FILENAME | sed "s/^/--exclude /g" | xargs echo
qui ignore également les lignes vides et celles qui contiennent uniquement des tabs ou des espaces qui entraîneraient une erreur si elle est utilisée pour build la command line ci-dessus. Ainsi au total:
hg purge --all `grep -v -E "^[[:blank:]]*$" $FILENAME | sed "s/^/--exclude /g" | xargs echo`
Y a-t-il une meilleure façon, peut-être avec quelques arguments xargs que je ne connais pas?
Il semble y avoir même un raccourci dans mercurial lui-même, en utilisant des lists de files (suggéré par mg dans #mercurial):
hg purge --all --exclude "listfile:$FILENAME"
Je ne comprends pas pourquoi vous utilisez grep
et xargs
du tout. Étant donné un file de templates comme celui-ci:
foo bar baz
Tu pourrais courir
$ echo hg purge --all $(perl -pe 's/^/--exclude /' file) hg purge --all --exclude foo --exclude bar --exclude baz
Ou même
$ echo hg purge --all $(sed 's/^/--exclude /' file) hg purge --all --exclude foo --exclude bar --exclude baz
Supprimez simplement l' echo
pour exécuter les commands.