У меня есть проект 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
Проблема:
Некоторые файлы swift печатаются с помощью echo, но swiftlint
не может найти файлы и выдает ошибку ниже,
По путям не найдено файлов с возможностью преобразования: ''
Например, ниже приведен вывод из журнала сборки,
файл проекта swiftlinting / a.swift
По путям: 'project / a.swift
файлов не найдено.
Но когда я применяю cd home/user/git_root
в начале скрипта, он работает отлично. Но я не могу знать фактический корень git, потому что другие товарищи по команде могут переименовать его самостоятельно, и поэтому я не могу использовать жестко заданный путь в скрипте.
Почему git diff
создает пути к файлам, которые не распознаются swiftlint
из того же каталога в скрипте? Как я могу решить эту проблему?
Дополнительная информация:
Цель сценария - запуск swiftlint только во вновь измененных неустановленных файлах swift Также обратите внимание, что я не использую любые .swiftlint.yaml
файлы для конфигураций swiftlint.