Repository navigation
fix(powershell): bind positional scan paths to -Paths - #316
Merged
Merged
Conversation
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Что и зачем
Обёртка сканировала не то дерево, о котором её просили. Документированный вызов из её же
.EXAMPLE:--завершает разбор параметров в PowerShell, дальше аргументы связываются позиционно, а$Rootбыл объявлен первым — поэтомуsrc\MyAppстановился корнем чекаута Own.NET, а сканирование уходило в.. Голая позиционная форма делала то же самое. Корректно связывал только явный-Paths.Отказ тихий, и это главное. Просишь каталог A — анализируется каталог B, и если в B чисто, пользователь получает зелёный результат без единой ошибки. Это та же ложь, которую арки A1 и A4 выжигали два среза подряд: «не посмотрел» под видом «посмотрел и ничего не нашёл». Здесь, правда, инструмент посмотрел — просто не туда, куда его отправили.
Как починено
Контракт объявлен, а не унаследован из порядка объявления:
Перестановка параметров дала бы тот же результат сегодня и оставила бы смысл висеть на той же неявной механике, которая уже дважды устроила представление.
Проверено на настоящем скрипте (пробник собран из его же блока параметров, обрезанного перед первой стадией):
-Format github -- /t/aRoot=/t/aPaths=[/t/a]-Format github /t/aRoot=/t/aPaths=[/t/a]-Format github -Paths /t/aPaths=[/t/a]-Root /checkout -Format github -Paths /t/a-Format githubPaths=[.]-Format github -- /t/a /t/bRoot=/t/aPaths=[/t/a|/t/b]Граница:
pwsh -FileПри запуске через
pwsh -File script.ps1 ... -- <path>литерал--перехватывается хостом ещё до связывания параметров и отвергается как неоднозначное имя. Это поведение PowerShell для-File, а не дефект скрипта и не повод раздувать срез. Поддерживаемые формы для такого запуска:В интерактивной сессии и при
& own-check.ps1работают все три формы, включая--.Строка, отбрасывающая литерал
--из$Paths, сохранена: в сессии PowerShell съедает токен сам, но при сплаттинге (& own-check.ps1 @args) он реально доходит как значение. Комментарий приведён в соответствие.Что добавлено в CI
Сквозной тест именно тихой подмены цели, а не наличия какой-то находки: стоя в чистом рабочем каталоге, просим цель с гарантированным OWN001 и требуем, чтобы находка вернулась, а файл из cwd не появился в выводе вовсе. Плюс:
-- <target>и-Paths <target>обязаны дать идентичный вывод — эквивалентность публичных форм, а не «обе что-то сказали»;[string[]]заявлен как тип, доказательство на одной строке его не устанавливает);..Заодно исправлен устаревший комментарий над джобой: обёртка исполняется на Linux достаточно далеко, чтобы доказать ярус отказа первой стадии, — Windows требуется её успешному extraction path.
Тип изменения
Как проверено
Локально с PowerShell 7.4.6 против настоящего скрипта — вся матрица связывания выше, включая множественные пути и дефолт
.Ярус отказа первой стадии после правки держится в обеих формах:
LASTEXITCODE = 2Фикстуры проверены на верность вердиктов до пуша: целевой файл действительно даёт OWN001, файл рабочего каталога действительно чист
Тело каждого шага проверено парсером PowerShell
CI ветки зелёный на
bfcab5e— 19 джоб, ни одной не-успешной; Windows-джоба прошла всеми шестью шагами с первой попытки:python tests/run_tests.py/ruff— не применимо: Python и продуктовый код не менялисьСвязанные issue
Closes #315. Refs #313, #314 (где дефект был найден исполнением обёртки).
Чеклист
feat:,fix:,docs:…)Generated by Claude Code