Проблема относительного пути в Git - по путям не найдено файлов с возможностью преобразования - PullRequest
1 голос
/ 16 мая 2019

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

1 Ответ

2 голосов
/ 16 мая 2019

Кажется, что аргумент --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
...