Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
Константы_ЛокальнаяВерсия = ЗагрузитьСценарий(ПутьКСценариюКонстант);
ВерсияПродукта = Константы_ЛокальнаяВерсия.ВерсияПродукта;
Иначе
ВерсияПродукта = "1.6.5";
ВерсияПродукта = "1.6.6";
КонецЕсли;

Описание.Имя("opm")
Expand Down
7 changes: 6 additions & 1 deletion src/core/Классы/УстановкаПакета.os
Original file line number Diff line number Diff line change
Expand Up @@ -294,8 +294,13 @@
Процедура СоздатьСкриптЗапуска(Знач ИмяСкриптаЗапуска, Знач ПутьФайлаПриложения, Знач Каталог) Экспорт

Если ЭтоWindows Тогда
ФайлЗапуска = Новый ЗаписьТекста(ОбъединитьПути(Каталог, ИмяСкриптаЗапуска + ".bat"), "cp866");
ФайлЗапуска = Новый ЗаписьТекста(ОбъединитьПути(Каталог, ИмяСкриптаЗапуска + ".bat"), КодировкаТекста.UTF8NoBOM);
// Запоминаем текущую кодировку консоли, переключаем на UTF-8 для корректной работы с кириллицей в путях
ФайлЗапуска.ЗаписатьСтроку("@for /f ""tokens=2 delims=:."" %%a in ('chcp') do @set ""_opm_cp=%%a""");
ФайлЗапуска.ЗаписатьСтроку("@chcp 65001 > nul");
ФайлЗапуска.ЗаписатьСтроку("@call oscript """ + ПутьФайлаПриложения + """ %*");
// Восстанавливаем кодировку консоли, чтобы не нарушать работу других команд после вызова батника
ФайлЗапуска.ЗаписатьСтроку("@chcp %_opm_cp% > nul");
ФайлЗапуска.ЗаписатьСтроку("@exit /b %ERRORLEVEL%");
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
ФайлЗапуска.Закрыть();
КонецЕсли;
Expand Down
59 changes: 59 additions & 0 deletions tests/bat-launcher-test.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#Использовать "../src/core"
#Использовать asserts
#Использовать fs
#Использовать tempfiles

// Тесты для воспроизведения issue #265:
// BUG: Генерирует нерабочие `.bat` при кириллице в пути проекта (Windows)
// https://github.com/oscript-library/opm/issues/265

Перем юТест;
Перем мВременныеФайлы;

Функция ПолучитьСписокТестов(Знач Тестирование) Экспорт

юТест = Тестирование;

ИменаТестов = Новый Массив;

СИ = Новый СистемнаяИнформация();
Если Найти(СИ.ВерсияОС, "Windows") > 0 Тогда
ИменаТестов.Добавить("ТестДолжен_НеСодержатьАбсолютныйКириллицкийПутьВBatФайлеПриЛокальнойУстановке");
КонецЕсли;

Возврат ИменаТестов;

КонецФункции

Процедура ПередЗапускомТеста() Экспорт
КонецПроцедуры

Процедура ПослеЗапускаТеста() Экспорт
мВременныеФайлы.Удалить();
КонецПроцедуры


Процедура ТестДолжен_НеСодержатьАбсолютныйКириллицкийПутьВBatФайлеПриЛокальнойУстановке() Экспорт

КаталогBin = мВременныеФайлы.СоздатьКаталог();


КириллицкийПутьКСкрипту = "C:\КириллицаПроект\Новая папка\oscript_modules\testapp\testapp.os";

Установщик = Новый УстановкаПакета;
Установщик.УстановитьРежимУстановкиПакета(РежимУстановкиПакетов.Локально);
Установщик.СоздатьСкриптЗапуска("testapp", КириллицкийПутьКСкрипту, КаталогBin);

ПутьКBatФайлу = ОбъединитьПути(КаталогBin, "testapp.bat");

Чтение = Новый ЧтениеТекста(ПутьКBatФайлу, КодировкаТекста.UTF8);
СодержимоеBat = Чтение.Прочитать();
Чтение.Закрыть();


Ожидаем.Что(СодержимоеBat, "Bat-файл должен корректно кодировать кириллицу в пути (UTF-8)")
.Содержит("КириллицаПроект");

КонецПроцедуры

мВременныеФайлы = Новый МенеджерВременныхФайлов;