Скрипт черепахи SVN pre-commit разрешает коммит, который содержит заданную строку - PullRequest
0 голосов
/ 26 апреля 2019

Создание сценария предварительной фиксации, который разрешает только коммиты, которые содержат определенную строку где-то в файле Test.cfg

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

REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook


$SVNLOOK diff -t "$TXN" "$REPOS" | \
   grep -i "Sting to search here" > /dev/null && { echo "String exists so block commit" 1>&2; exit 1; }

Я хочу, чтобы приведенный выше код выполнял полную противоположность, так что если строка существует, разрешите фиксацию, а если нет, то предотвратите фиксацию. Также было бы хорошо, если бы я мог указать, какой файл следует искать, так как в настоящее время он ищет каждый файл, и некоторые коммиты могут содержать тысячи файлов

1 Ответ

2 голосов
/ 26 апреля 2019

Прошу прощения, но svnlook diff в вашем случае безобразно глупо.Перечитайте подкоманды svnlook t opic в SVNBook , обратите внимание на svnlook tree / svnlook changed + svnlook cat

Полная бизнес-логика вашего теста может | быть чем-то вроде(Мне лень писать полный bashism здесь, это будет ваша обязанность)

IF $FILENAME существуют в транзакции (я предпочту svnlook tree --full-paths ... только потому, что svnlook changed ...потребуются дополнительные | gawk {print $2} для чистого имени файла) И $FILENAME содержит $STRING (svnlook cat "$FILENAME" | grep "STRING" ...) ЧТО-ТО

Не забудьте также, что процесс возможенкрайние случаи:

  • $ FILENAME не существует в транзакции, но представлен в WC с правильным значением $ STRING, но файл не изменен в соответствии со статусом svn
  • То же, что и выше, но изменено
  • стр. 1-2, но с запрещением $ STRING

Из-за вышеупомянутых примечаний я рекомендую изучить |проверить возможность замены файла + строки путем проверки свойства пользовательской ревизии в хуке (короче, проще, более управляемым)

...