Вывод оболочки в команду svn del? - PullRequest
7 голосов
/ 11 сентября 2009

У меня довольно сложная настройка развертывания для нашего сайта Drupal, которая представляет собой комбинацию CVS и SVN. Мы используем CVS для получения новейших версий модулей и разворачиваемся с помощью SVN. К сожалению, когда обновления CVS удаляют файлы, Subversions жалуется, потому что они не были удалены в SVN. Я пытаюсь выполнить некоторые сценарии оболочки и Perl запустить команду svn rm для всех этих файлов, которые уже были удалены из файловой системы, но я не продвинулся далеко То, что у меня так далеко, это:

svn st | grep !

Выводит список всех файлов, удаленных из файловой системы, следующим образом:

!       panels_views/panels_views.info
!       panels_views/panels_views.admin.inc
!       contexts/term.inc
!       contexts/vocabulary.inc
!       contexts/terms.inc
!       contexts/node_edit_form.inc
!       contexts/user.inc
!       contexts/node_add_form.inc
!       contexts/node.inc
etc. . .

Однако я хочу как-то запустить svn del для каждой из этих строк. Как я могу получить эти выходные данные в моем Perl-скрипте или, альтернативно, как я могу запустить svn del на каждой из этих строк?

Редактировать: Точная команда, которую я использовал, с некоторой помощью от всех, была

svn st | grep ^! | cut -c 9- | xargs svn del

Ответы [ 3 ]

10 голосов
/ 11 сентября 2009

Попробуйте использовать xargs, вот так:

svn st | grep ^! | cut -f2 | xargs svn rm

Команда xargs берет строки на своем стандартном вводе, переворачивает их и использует эти строки в качестве параметров командной строки на svn rm. По умолчанию xargs использует несколько строк при каждом вызове своей команды, что в случае svm rm хорошо.

Возможно, вам также придется поэкспериментировать с командой cut, чтобы получить ее правильно. По умолчанию cut использует табуляцию в качестве разделителя, и Subversion может выводить пробелы там. В этом случае вам, возможно, придется использовать cut -d' ' -f6 или что-то еще.

Как всегда при построении такого конвейера команд, запускайте порции за раз, чтобы убедиться, что все выглядит правильно. Поэтому запустите все до команды cut, чтобы убедиться, что у вас есть список имен файлов, который вы ожидаете, за до повторного запуска с "| xargs svn rm" в конце.

1 голос
/ 11 сентября 2009
svn st | egrep ^! | cut -b 9- | xargs svn del
0 голосов
/ 13 сентября 2009

Так же, как альтернатива вышеприведенным, я бы использовал что-то вроде:

svn st | awk '$1=="!"{print $2}' | xargs svn del

Я считаю, что язык соответствия шаблонов awk очень удобен для подобных задач.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...