Git grep url regex
Я пытаюсь создать bash-скрипт, который проверяет мой исходный код, чтобы пометить абсолютно URL-адреса, так как все наши разработчики должны использовать относительные URL-адреса, когда речь идет о внутренних ссылках.
Я думал о создании bash-скрипта, который затем мог бы быть включен как часть наших ловушек перед фиксацией, поэтому использование git grep также казалось логичным. У меня все работает, однако у меня возникли некоторые трудности с регулярным выражением для git grep.
Вот что у меня так далеко:
`# Set's the regex test & files
readonly FORBIDDEN_RE="\((\|'\|\"\)\(http\|https\):\/\/\(www\.\)\?example\.com"
readonly FORBIDDEN_FILES="'*.md' '*.html' ':!README.md'"
# Adds double quotes around regex since without them git grep doesn't work,
# However, even trying to put the re_test variable in place of FORBIDDEN_RE
# is not working in the actual git grep.
# re_test="\"""$FORBIDDEN_RE""\""
if [ "$(git grep -n --cached -i -e "$FORBIDDEN_RE" -- "$FORBIDDEN_FILES")" != 0 ]; then
git grep -n --cached -i -e "$FORBIDDEN_RE" -- "$FORBIDDEN_FILES"
echo "ERROR: You're trying to make a commit that contains a hardcoded internal URL. Please make it relative."
exit 1
fi`
И вот тесты, которые я делаю, и если я ожидаю, что они будут помечены регулярным выражением или нет:
http://www.example.com
- не помечено
(http://www.example.com
- помечено (мы используем уценку, так что это будет ссылка в файле уценки)
"http://www.example.com
- помечено (потому что эта двойная кавычка означает, что это, вероятно, значение href)
'http://www.example.com
- помечено (поскольку это также может означать, что URL-адрес находится в значении href)
http://example.com
- не помечено
(http://example.com
- помечено
"http://example.com
- помечено
'http://example.com
- помечено
(http://example.com?param=abc
- помечено
"http://example.com?param=abc
- помечено
'http://example.com?param=abc
- помечено
(http://subdomain.example.com
- не помечено
Что работает для меня идеально, просто с помощью командной строки:git grep -n --cached -i -e "\((\|'\|\"\)\(http\|https\):\/\/\(www\.\)\?example\.com" -- '*.html' '*.md' ':!README.md'
Тем не менее, из-за того, что все символы уходят от меня, и я пытаюсь получить кавычки вокруг регулярного выражения, когда делаю это в файле bash, я просто не могу заставить это работать в файле bash.
Я повторил что $FORBIDDEN_RE
это и есть, кажется, вынимает \"
в первой группе захвата, которая ищет "(", одинарные или двойные кавычки. Вот значение $FORBIDDEN_RE
когда я повторяю:git grep -n --cached -i -e "\((\|'\|"\)\(http\|https\):\/\/\(www\.\)\?example\.com" -- '*.md' '*.html' ':!README.md'
Любые идеи, что я делаю не так или, может быть, как сделать регулярное выражение проще для работы с git grep?