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?

0 ответов

Другие вопросы по тегам