git фаза предварительной фиксации не выполняется с использованием пряжи - PullRequest
0 голосов
/ 08 мая 2020

У меня есть эти 2 сценария в моем package.json файле:

"get-staged-files": "git diff --name-only --staged --diff-filter=d | grep \".*\\.ts\\(x\\)\\?\" | sed 'N;s/\\n/ /'",
"lint-staged-files": "yarn --silent get-staged-files | xargs ./node_modules/eslint/bin/eslint.js"  

, а также в этом хаски-разделе:

"husky": {
    "hooks": {
      "pre-commit": "yarn lint-staged-files"
    }
  }  

по какой-то причине, когда я пытаюсь зафиксировать, я получаю следующая ошибка:

No files matching the pattern "src/api/blabla/file_name.ts" were found  

скрипт lint-staged-files не работает, странно то, что если я запускаю значение скрипта, такое явное:

git diff --name-only --staged --diff-filter=d | grep ".*\.ts\(x\)\?" | sed 'N;s/\\n/ /' | xargs ./node_modules/eslint/bin/eslint.js  

все работает нормально, похоже yarn изменяет вывод или что-то в этом роде.
Я использую версию MacOS 10.15.3 версия пряжи 1.22.4

Обновление # 1 : после изучения вывода 2 команды с использованием more Я нашел это:
git diff --name-only --staged --diff-filter=d | grep ".*\.ts\(x\)\?" | sed 'N;s/\\n/ /' | more
дает src/api/blabla/file_name.ts

yarn get-staged-files | more
дает ESC[1;35;40mESC[Ksrc/api/blabla/file_name.tsESC[mESC[K
Так что я думаю, что вызывает eslint to fails - это цветовые коды консоли пряжи!

Обновление # 2 : хорошо, поэтому мне удалось решить эту проблему, удалив все цветовые коды консоли пряжи, используя sed и perl:

gsed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2})?)?[mGK]//g" | perl -pe '$b="\e";s/$b//g' | gsed "s/\[1;35;40m//g"  

Мне пришлось использовать perl, потому что не удалось найти, как удалить escape-символ \e с помощью sed.

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