Проблема с относительным путем Git — по путям не найдены файлы lintable

У меня есть проект 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.


person Sazzad Hissain Khan    schedule 16.05.2019    source источник


Ответы (1)


Кажется, что аргумент --path принимает только абсолютные пути. Я не знаю, как вы можете заставить его использовать относительный путь, но вы можете немного изменить скрипт, чтобы добавить остальную часть пути к имени файла, например:

git diff --cached --name-only | grep "\.swift" | while read filename; do
    echo "swiftlinting file $filename";
    swiftlint lint --path "$(git rev-parse --show-toplevel)/${filename}";
done
person marosoaie    schedule 16.05.2019