xDrivenDevelopment / precommit1c

Набор утилит для автоматической разборки/сборки внешних обработок и отчетов, при помещении (commit) в git
Other
223 stars 60 forks source link

Ошибка при запуске хука в репозитории на сетевом диске #157

Open yukon39 opened 3 years ago

yukon39 commented 3 years ago

Если репозиторий находится на сетевом диске, то при коммите возникает ошибка запуска приложения:

ОШИБКА - Получен ненулевой код возврата 1. Выполнение скрипта остановлено!
ОШИБКА - {Модуль C:\Program Files\OneScript\lib\gitrunner\src\ГитРепозиторий.os / Ошибка в строке: 868 / '\\server\data\repo'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported.  Defaulting to Windows directory.}

Precommit1c - версия 2.3.0 oscript - 1.4.0 x64 git - 2.28 x64

Дополнительный issue по этой теме - https://github.com/git-for-windows/git/issues/2638

Вкратце - теперь при получении каталога репозитория git разрешает все символические имена, включая алиасы сетевых дисков.

zeratulayuris commented 3 years ago

@yukon39 а можно подробный лог выполнения?

yukon39 commented 3 years ago

Конечно:

S:\repo>git commit -m "test"
Start hooks before commit to unpack erf, epf and cfe
ИНФОРМАЦИЯ - precommit1c v2.3.0

ОШИБКА - Получен ненулевой код возврата 1. Выполнение скрипта остановлено!
ОШИБКА - {Модуль C:\Program Files\OneScript\lib\gitrunner\src\ГитРепозиторий.os / Ошибка в строке: 868 / '\\server\data\repo'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported.  Defaulting to Windows directory.}
nixel2007 commented 3 years ago

добавьте в хук перед прекоммитом

set LOGOS_CONFIG=logger.rootLogger=DEBUG
Dezmont51 commented 3 years ago

В хук что-то не срабатывает

V:\git\tb_tests>git commit -m"g"
Start hooks before commit to unpack erf, epf and cfe
ОТЛАДКА - [o.lib.gitrunner] - РабочийКаталог: \\FS3-MAIN\data\git\tb_tests
ИНФОРМАЦИЯ - [o.a.~files-extractor] - precommit1c v2.3.0

ОТЛАДКА - [oscript.lib.cmdline] - ДобавитьИменованныйПараметр: ИмяПараметра <--ib-connection-string>
ОТЛАДКА - [oscript.lib.cmdline] - ДобавитьИменованныйПараметр: ИмяПараметра <--ib-user>
ОТЛАДКА - [oscript.lib.cmdline] - ДобавитьИменованныйПараметр: ИмяПараметра <--ib-pwd>
ОТЛАДКА - [oscript.lib.cmdline] - ДобавитьИменованныйПараметр: ИмяПараметра <--v8version>
ОТЛАДКА - [oscript.lib.cmdline] - ДобавитьПараметрФлаг: ИмяПараметра <--use-designer>
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю позиционный параметр ПутьВходящихДанных
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю позиционный параметр ВыходнойКаталог
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю позиционный параметр ВыходнойКаталог
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю параметр-флаг --remove-orig-bin-files
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю позиционный параметр ПутьВходящихДанных
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю позиционный параметр ВыходнойКаталог
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю параметр-флаг --recursive
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю параметр-флаг --remove-orig-bin-files
ОТЛАДКА - [oscript.lib.cmdline] - Разбор команды: --git-precommit
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю глобальный параметр: --ib-connection-string
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю глобальный параметр: --ib-user
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю глобальный параметр: --ib-pwd
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю глобальный параметр: --v8version
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю глобальный параметр: --use-designer
ОТЛАДКА - [oscript.lib.cmdline] - Попадаю в РазобратьАргументы
ОТЛАДКА - [oscript.lib.cmdline] - Сбрасываю параметр-флаг: --remove-orig-bin-files
ОТЛАДКА - [oscript.lib.cmdline] - Сбрасываю параметр-флаг: --use-designer
ОТЛАДКА - [oscript.lib.cmdline] - Выбран токен: src
ОТЛАДКА - [oscript.lib.cmdline] - Ищу именованный параметр src
ОТЛАДКА - [oscript.lib.cmdline] - Ищу параметр-флаг src
ОТЛАДКА - [oscript.lib.cmdline] - Установлено значение позиционного параметра <ВыходнойКаталог = src>
ОТЛАДКА - [oscript.lib.cmdline] - Выбран токен:
ОТЛАДКА - [oscript.lib.cmdline] - Закончились токены
ОТЛАДКА - [oscript.lib.cmdline] - Трассировка РезультатРазбора:
ОТЛАДКА - [oscript.lib.cmdline] -               --remove-orig-bin-files:Нет
ОТЛАДКА - [oscript.lib.cmdline] -               --use-designer:Нет
ОТЛАДКА - [oscript.lib.cmdline] -               ВыходнойКаталог:src
ОТЛАДКА - [oscript.lib.cmdline] - Трассировка РезультатКоманды.ЗначенияПараметров:
ОТЛАДКА - [oscript.lib.cmdline] -               --remove-orig-bin-files:Нет
ОТЛАДКА - [oscript.lib.cmdline] -               --use-designer:Нет
ОТЛАДКА - [oscript.lib.cmdline] -               ВыходнойКаталог:src
ОТЛАДКА - [o.a.~files-extractor] - ТипЗнч(Аргументы)= Структура
ОТЛАДКА - [o.a.~files-extractor] - Передана команда: --git-precommit
ОТЛАДКА - [o.a.~files-extractor] - --remove-orig-bin-files = Нет
ОТЛАДКА - [o.a.~files-extractor] - --use-designer = Нет
ОТЛАДКА - [o.a.~files-extractor] - ВыходнойКаталог = src
ОТЛАДКА - [o.a.~files-extractor] - Текущий каталог \\FS3-MAIN\data\git\tb_tests
ОТЛАДКА - [o.a.~files-extractor] - Каталог выгрузки src
ОТЛАДКА - [o.a.~files-extractor] - Выполняю проверку настройки core.quotepath
ОТЛАДКА - [o.lib.gitrunner] - Команда git
ОТЛАДКА - [o.lib.gitrunner] - Параметр команды config
ОТЛАДКА - [o.lib.gitrunner] - Параметр команды core.quotepath
ОТЛАДКА - [o.lib.gitrunner] - Рабочий каталог команды \\FS3-MAIN\data\git\tb_tests
ОТЛАДКА - [oscript.lib.commands] - РабочийКаталог: \\FS3-MAIN\data\git\tb_tests
ОТЛАДКА - [oscript.lib.commands] - Строка запуска <git config core.quotepath>
ОТЛАДКА - [oscript.lib.commands] - Полная строка запуска <cmd /c "git config core.quotepath">
ОТЛАДКА - [oscript.lib.commands] - Строка запуска <git config core.quotepath>
ОТЛАДКА - [oscript.lib.commands] - Полная строка запуска <cmd /c "git config core.quotepath">
ОТЛАДКА - [oscript.lib.commands] - Длина вывода 174, количество строк 4
ОТЛАДКА - [oscript.lib.commands] - Код возврата равен 1
ОШИБКА - [o.lib.gitrunner] - Получен ненулевой код возврата 1. Выполнение скрипта остановлено!
ОШИБКА - [o.a.~files-extractor] - {Модуль C:\Program Files\OneScript\lib\gitrunner\src\ГитРепозиторий.os / Ошибка в строке: 868 / "\\FS3-MAIN\data\git\tb_tests"
�������� ���� �� �ᯮ�짮��� �� ����᪥ CMD.EXE � ����⢥ ⥪�饩 �����.
CMD.EXE �� �����ন���� ��� UNC. �� 㬮�砭�� ��࠭� ��⥬��� ����� Windows.}
ОТЛАДКА - [o.a.~files-extractor] - Очищаем временные файлы
zeratulayuris commented 3 years ago

@yukon39 попробуйте вручную запустить прекоммит с такой же настройкой лога.

yukon39 commented 3 years ago

@zeratulayuris В принципе такой же вывод как и выше:

S:\repo>git commit -m "test"
Start hooks before commit to unpack erf, epf and cfe
ОТЛАДКА - [o.lib.gitrunner] - РабочийКаталог: \\server\data\repo
ИНФОРМАЦИЯ - [o.a.~files-extractor] - precommit1c v2.3.0

ОТЛАДКА - [oscript.lib.cmdline] - ДобавитьИменованныйПараметр: ИмяПараметра <--ib-connection-string>
ОТЛАДКА - [oscript.lib.cmdline] - ДобавитьИменованныйПараметр: ИмяПараметра <--ib-user>
ОТЛАДКА - [oscript.lib.cmdline] - ДобавитьИменованныйПараметр: ИмяПараметра <--ib-pwd>
ОТЛАДКА - [oscript.lib.cmdline] - ДобавитьИменованныйПараметр: ИмяПараметра <--v8version>
ОТЛАДКА - [oscript.lib.cmdline] - ДобавитьПараметрФлаг: ИмяПараметра <--use-designer>
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю позиционный параметр ПутьВходящихДанных
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю позиционный параметр ВыходнойКаталог
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю позиционный параметр ВыходнойКаталог
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю параметр-флаг --remove-orig-bin-files
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю позиционный параметр ПутьВходящихДанных
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю позиционный параметр ВыходнойКаталог
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю параметр-флаг --recursive
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю параметр-флаг --remove-orig-bin-files
ОТЛАДКА - [oscript.lib.cmdline] - Разбор команды: --git-precommit
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю глобальный параметр: --ib-connection-string
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю глобальный параметр: --ib-user
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю глобальный параметр: --ib-pwd
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю глобальный параметр: --v8version
ОТЛАДКА - [oscript.lib.cmdline] - Добавляю глобальный параметр: --use-designer
ОТЛАДКА - [oscript.lib.cmdline] - Попадаю в РазобратьАргументы
ОТЛАДКА - [oscript.lib.cmdline] - Сбрасываю параметр-флаг: --remove-orig-bin-files
ОТЛАДКА - [oscript.lib.cmdline] - Сбрасываю параметр-флаг: --use-designer
ОТЛАДКА - [oscript.lib.cmdline] - Выбран токен: src
ОТЛАДКА - [oscript.lib.cmdline] - Ищу именованный параметр src
ОТЛАДКА - [oscript.lib.cmdline] - Ищу параметр-флаг src
ОТЛАДКА - [oscript.lib.cmdline] - Установлено значение позиционного параметра <ВыходнойКаталог = src>
ОТЛАДКА - [oscript.lib.cmdline] - Выбран токен:
ОТЛАДКА - [oscript.lib.cmdline] - Закончились токены
ОТЛАДКА - [oscript.lib.cmdline] - Трассировка РезультатРазбора:
ОТЛАДКА - [oscript.lib.cmdline] -               --remove-orig-bin-files:Нет
ОТЛАДКА - [oscript.lib.cmdline] -               --use-designer:Нет
ОТЛАДКА - [oscript.lib.cmdline] -               ВыходнойКаталог:src
ОТЛАДКА - [oscript.lib.cmdline] - Трассировка РезультатКоманды.ЗначенияПараметров:
ОТЛАДКА - [oscript.lib.cmdline] -               --remove-orig-bin-files:Нет
ОТЛАДКА - [oscript.lib.cmdline] -               --use-designer:Нет
ОТЛАДКА - [oscript.lib.cmdline] -               ВыходнойКаталог:src
ОТЛАДКА - [o.a.~files-extractor] - ТипЗнч(Аргументы)= Структура
ОТЛАДКА - [o.a.~files-extractor] - Передана команда: --git-precommit
ОТЛАДКА - [o.a.~files-extractor] - --remove-orig-bin-files = Нет
ОТЛАДКА - [o.a.~files-extractor] - --use-designer = Нет
ОТЛАДКА - [o.a.~files-extractor] - ВыходнойКаталог = src
ОТЛАДКА - [o.a.~files-extractor] - Текущий каталог \\server\data\repo
ОТЛАДКА - [o.a.~files-extractor] - Каталог выгрузки src
ОТЛАДКА - [o.a.~files-extractor] - Выполняю проверку настройки core.quotepath
ОТЛАДКА - [o.lib.gitrunner] - Команда git
ОТЛАДКА - [o.lib.gitrunner] - Параметр команды config
ОТЛАДКА - [o.lib.gitrunner] - Параметр команды core.quotepath
ОТЛАДКА - [o.lib.gitrunner] - Рабочий каталог команды \\server\data\repo
ОТЛАДКА - [oscript.lib.commands] - РабочийКаталог: \\server\data\repo
ОТЛАДКА - [oscript.lib.commands] - Строка запуска <git config core.quotepath>
ОТЛАДКА - [oscript.lib.commands] - Полная строка запуска <cmd /c "git config core.quotepath">
ОТЛАДКА - [oscript.lib.commands] - Строка запуска <git config core.quotepath>
ОТЛАДКА - [oscript.lib.commands] - Полная строка запуска <cmd /c "git config core.quotepath">
ОТЛАДКА - [oscript.lib.commands] - Длина вывода 180, количество строк 4
ОТЛАДКА - [oscript.lib.commands] - Код возврата равен 1
ОШИБКА - [o.lib.gitrunner] - Получен ненулевой код возврата 1. Выполнение скрипта остановлено!
ОШИБКА - [o.a.~files-extractor] - {Модуль C:\Program Files\OneScript\lib\gitrunner\src\ГитРепозиторий.os / Ошибка в строке: 868 / '\\server\data\repo'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported.  Defaulting to Windows directory.}
ОТЛАДКА - [o.a.~files-extractor] - Очищаем временные файлы
EvilBeaver commented 3 years ago

Оно же пишет: UNC paths are not supported - и перекидывает в директорию C:Windows. Нельзя установить CWD в сетевую папку. Это всегда так работало на винде

yukon39 commented 3 years ago

@EvilBeaver Мы работаем из каталога S:\repo, а не из сетевой папки.

Причем если в файле .git\hooks\pre-commit указать каталог в явном виде, то все работает:

#!/bin/sh
echo "Start hooks before commit to unpack erf, epf and cfe"
cd S:/repo
oscript -encoding=utf-8 S:/repo/.git/hooks/v8files-extractor.os --git-precommit src
Dezmont51 commented 3 years ago

Если в pre-commit исправить код на такой

#!/bin/sh
echo "Start hooks before commit to unpack erf, epf and cfe"
oscript .git/hooks/test.os
#oscript -encoding=utf-8 .git/hooks/v8files-extractor.os --git-precommit src

test.os Сообщить(ТекущийКаталог());

И если запустить одну и туже команду но с разными версиями гита

V:\TestManagerExt>git version & git commit -m "1"
git version 2.23.0.windows.1
Start hooks before commit to unpack erf, epf and cfe
V:\TestManagerExt
V:\TestManagerExt>git version & git commit -m "1"
git version 2.28.0.windows.1
Start hooks before commit to unpack erf, epf and cfe
\\tsclient\Obrabot\git\TestManagerExt
zeratulayuris commented 3 years ago

@Dezmont51 ну мы уже выяснили, что git в новой версии отдаёт пути иначе. Теперь осталось понять, поможет ли установка абсолютных путей. У @yukon39 помогла.

MikPetrov commented 3 years ago

Тоже попали на эту проблему только при использовании GitHub Desktop: при коммите через gui выдается ошибка, при коммите через cmd - все проходит. Причем на другом компе все с точностью наоборот.

Спасибо автору за тему, она навела на мысль проверить git. Выяснилось, что ошибки нет при git 2.23, а при git 2.25 - есть. При этом GitHub Desktop использует собственный git (.\resources\app\git). Т.о. коммит в gui и в cmd - это м.б. разные git! И соответственно один может работать, а другой - нет.

У меня сработало с минимальными изменениями (только добавить "cd s:\repo")

!/bin/sh

echo "Start hooks before commit to unpack erf, epf and cfe" cd S:/repo oscript -encoding=utf-8 .git/hooks/v8files-extractor.os --git-precommit src

yukon39 commented 3 years ago

Может реализовать добавление абсолютного пути в хук как доп.опцию? Типа такого: precommit1c --install --absolute-path или precommit1c --install --absolute-path "S:/repo"

Появится требование, что для такого репозитория перемещение или монтирование с другим именем диска будет требовать переустановки прекоммита.

Т.к. проблема актуальна только для сетевых дисков, то такое требование представляется вполне логичным.