Я хочу добавить хук предварительной фиксации Subversion и отклонить коммит, который содержит определенный текст, например // IDE-generated stub
комментарии Eclipse.
Я использую svnlook
(из Subversion 1.11.0):
~> svnlook --version
svnlook, version 1.11.0 (r1845130)
compiled Dec 9 2018, 17:34:43 on x86_64-apple-darwin17.7.0
Мой хук перед фиксацией - это простой bash-скрипт:
#!/bin/bash
REPOS="$1"
TXN="$2"
set -ue
bad="// IDE-generated stub"
while read file
do
# found=$(svnlook cat --transaction "$TXN" "$REPOS" "$file" | grep "$bad")
found=$(svnlook diff --transaction "$TXN" "$file" | grep "$bad")
if [ -n "$found" ]
then
echo "Found $bad in $file" >&2
exit 1
fi
done < <(svnlook changed --transaction "$TXN" "$REPOS" | cut -c 4-)
exit 0
Когда я пытаюсь что-то зафиксировать, я получаю следующую ошибку о том, что foo/format
не существует.MCVE ниже:
~> svnadmin create repository
~> svn co file://$PWD/repository wc
Checked out revision 0.
~> echo foo > wc/foo
~> svn add wc/foo
A wc/foo
~> svn ci wc/foo -m "initial version"
Adding wc/foo
Transmitting file data .done
Committing transaction...
Committed revision 1.
~> cp ~/pre-commit repository/hooks/pre-commit
~> chmod 755 repository/hooks/pre-commit
~> echo whatever >> wc/foo
~> svn ci wc/foo -m "next one"
Sending wc/foo
Transmitting file data .done
Committing transaction...
svn: E165001: Commit failed (details follow):
svn: E165001: Commit blocked by pre-commit hook (exit code 1) with output:
svnlook: E000002: Can't open file 'foo/format': No such file or directory
Обратите внимание, что приведенный выше код работает более или менее, когда я использую закомментированную версию svnlook cat
, но тогда он также будет запускаться для любого ключевого слова, найденного в уже зафиксированном коде, а не тольков текущих изменениях.
Я видел этот вопрос , но он, кажется, около svnlook log
и имеет другой код ошибки.
Почему я получаю эту ошибку икак я могу это исправить?