У меня есть проект iOS/Swift под системой контроля версий git. Иерархия ниже,
home/user/git_root/docs
home/user/git_root/project
home/user/git_root/project/project.xcodeproj
Как вы видите, мой каталог git_root
содержит некоторые другие документы в папке docs
вместе с фактическим каталогом проекта.
Я установил swiftlint
на свой Mac с помощью homebrew,
brew install swiftlint
Текущее местоположение установленного swiftlint:
which swiftlint
/usr/local/bin/swiftlint
Когда я запускаю приведенный ниже скрипт, который был добавлен в Build phase -> Run scripts
, происходит странная вещь,
Скрипт:
if which swiftlint >/dev/null; then
echo "swiftlint already installed in machine";
git diff --cached --name-only | grep "\.swift" | while read filename; do
echo "swiftlinting file $filename";
swiftlint lint --path "$filename";
done
fi
Проблема:
Некоторые быстрые файлы печатаются эхом, но swiftlint
не может найти файлы и выдает следующую ошибку:
Файлы lintable не найдены по путям: ''
Например, ниже приведен вывод из журнала сборки,
проект файла swiftlinting/a.swift
Файлы lintable не найдены по путям: 'project/a.swift
Но когда я применяю cd home/user/git_root
в начале скрипта, он работает отлично. Но я не могу знать фактический корень git, потому что другие товарищи по команде могут переименовать его самостоятельно, и поэтому я не могу использовать жестко заданный путь в сценарии.
Почему git diff
создает пути к файлам, которые не распознаются swiftlint
из того же каталога в скрипте? Как я могу решить эту проблему?
Дополнительная информация:
Цель скрипта — запускать swiftlint только во вновь измененных неустановленных файлах swift. Также обратите внимание, что я не использую файлы .swiftlint.yaml
для конфигураций swiftlint.