Open AlexPCRus opened 3 years ago
Все ок, только не пойму, откуда столько сторонних изменений от @artbear и @nixel2007. Как сделать, чтобы в PR были только коммиты, присущие ему?
Все ок, только не пойму, откуда столько сторонних изменений от @artbear и @nixel2007. Как сделать, чтобы в PR были только коммиты, присущие ему?
Я базовую ветку менял, может в этом причина. Могу заново PR сделать, а этот закрыть.
Я проглядел конструктор. Да, не надо менять конструктор, лучше просто встроиться в стандартный функционал установки искомой версии.
- Я не совсем понимаю, где здесь сообщение об ошибке. Нет ни вывода лога, ни выброса исключения.
- Установка версии платформы есть через отдельный сеттер, не совсем понимаю, зачем это делать в конструкторе.
- Перед выполнением команд вызывается метод ПроверитьВозможностьВыполненияКоманды, который в том числе проверяет заполненность пути к платформе. Можно вынести из него проверку на заполненности пути к платформе в сеттер. Тогда можно будет не менять апи конструктора, просто сеттер по версии платформы начнет бросать исключение.
Дело в том, что инициализация выполняется командой Инициализация() внутри которой выполняется поиск любой установленной версии платформы 8.3 вне зависимости от того какая версия указана в параметрах. И если будет найдена любая установленная версия, а требуемой версии не будет установлено на компьютере, то для выполнения команд будет использована она, что противоречит переданным параметрам на мой взгляд. Если инициализировать переданной в параметрах версией сразу, то ошибку в случае ее отсутствия выкинет v8runner позже.
Может быть вместе с выводом в отладку кидать исключения прямо в инициализации?
Лог.Ошибка("Не найдена платформа " + ВерсияПлатформы); ВызватьИсключение "Не найдена платформа " + ВерсияПлатформы;
и вывод будет вроде этого:
vanessa-runner v1.10.0
ОТЛАДКА - [oscript.lib.v8runner] - Ищу платформу 8.3.20
ОШИБКА - [oscript.lib.v8runner] - Не найдена платформа 8.3.20
КРИТИЧНАЯОШИБКА - {Модуль C:\Program Files\OneScript\lib\vanessa-runner\oscript_modules\v8runner\src\v8runner.os / Ошибка в строке: 2154 / Не найдена платформа 8.3.20}
И если будет найдена любая установленная версия, а требуемой версии не будет установлено на компьютере, то для выполнения команд будет использована она, что противоречит переданным параметрам на мой взгляд.
я вот этот тезис не понимаю. vanessa-runner у экземпляра УправлениеКонфигуратором вызывает метод установки версии платформы. v8runner будет пытаться ее найти и если не найдет, сразу из сеттера выкинет исключение. откуда противоречие?
Пишу по памяти, прошу простить. Если ничего не путаю, то проблема в функции ПутьКПлатформе1С(Знач Путь = "") файла v8runner.os. Изначально при инициализации находится любая доступная версия 8.3, при этом путь сохраняется в переменной мПутьКПлатформе1С. В дальнейшем при вызове ПолучитьПутьКВерсииПлатформы если в качестве параметра передается Путь = "" (по памяти - это видимо случай когда конкретная версия не найдена) возвращается сохраненный ранее путь к некорректной версии платформы. И, соответственно, исключение не возникает, выполнение продолжается.
но ведь vanessa runner всегда передает путь к платформе, если он указан в параметрах?
Может быть у меня не самый актуальный код. Я смотрю здесь:
**ИспользоватьВерсиюПлатформы**:
Процедура ИспользоватьВерсиюПлатформы(Знач МаскаВерсии, Знач Разрядность = Неопределено) Экспорт
Путь = ПолучитьПутьКВерсииПлатформы(МаскаВерсии, Разрядность);
ПутьКПлатформе1С(Путь);
КонецПроцедуры
**ПолучитьПутьКВерсииПлатформы**:
Функция ПолучитьПутьКВерсииПлатформы(Знач ВерсияПлатформы, Знач Разрядность = Неопределено) Экспорт
Если Лев(ВерсияПлатформы, 2) <> "8." Тогда
ВызватьИсключение "Неверная версия платформы <"+ ВерсияПлатформы + ">";
КонецЕсли;
ПутьКПредприятию = Платформа1С.ПутьКПредприятию(ВерсияПлатформы, Разрядность);
Возврат ПутьКПредприятию;
КонецФункции
**ПутьКПредприятию**:
Функция ПутьКПредприятию(Знач НомерВерсии, Знач Разрядность = Неопределено) Экспорт
Возврат ПутьКПриложению(НомерВерсии, ПриложенияПлатформы.Предприятие, Разрядность);
КонецФункции
**ПутьКПриложению**:
Функция ПутьКПриложению(Знач НомерВерсии, Знач ПриложениеПлатформы, Знач Разрядность)
ПутьКФайлу = "";
ВерсияПлатформы = ПолучитьВерсию(НомерВерсии, ПриложениеПлатформы, Разрядность);
Если Не ВерсияПлатформы = Неопределено Тогда
ПутьКФайлу = ВерсияПлатформы.ПутьКПриложению(ПриложениеПлатформы);
КонецЕсли;
Возврат ПутьКФайлу;
КонецФункции
отсюда видно кмк что Путь может быть пустым, если не будет найдена версия платформы.
Спасибо, что научили форматированию :)
Посыл ПР правильный, лучше выдавать исключение.
а вот с реализацией проблемы.
возможно, это связано с проблемой неверной инициализации переменной мПутьКПлатформе1С
вроде бы был такой ишуз, но я его не нашел (
Я малой кровью хотел :) Чтобы остальное не пострадало. Или нужно отказаться от установки пути при инициализации вовсе, и в любом случае вызывать функцию ИспользоватьВерсиюПлатформы или с переданным параметром или со значением по умолчанию (8.3), но если вносить такие изменения в v8runner, то возможно пострадают зависимые плагины, которые не рассчитывают на то, что нужно обязательно вызывать эту функцию.
Изначально при инициализации находится любая доступная версия 8.3, при этом путь сохраняется в переменной мПутьКПлатформе1С. В дальнейшем при вызове ПолучитьПутьКВерсииПлатформы если в качестве параметра передается Путь = "" (по памяти - это видимо случай когда конкретная версия не найдена) возвращается сохраненный ранее путь к некорректной версии платформы. И, соответственно, исключение не возникает, выполнение продолжается.
Подтверждаю указанные проблемы, нужно исправлять, правда, ПР их полностью не решает (
вообще хочу в ванесса-раннер сделать следующий тикет
При использовании vanessa runner в случае если передаваемая в параметрах версия платформы отсутствует, то используется одна из других установленных версий, тогда как логичнее было бы выдавать сообщение об ошибке. Это происходит из-за того что при инициализации ищется любая установленная версия платформы 8.3.