Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
10 changes: 8 additions & 2 deletions src/core/Классы/УстановкаПакета.os
Original file line number Diff line number Diff line change
Expand Up @@ -294,9 +294,15 @@
Процедура СоздатьСкриптЗапуска(Знач ИмяСкриптаЗапуска, Знач ПутьФайлаПриложения, Знач Каталог) Экспорт

Если Это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 """ + ПутьФайлаПриложения + """ %*");
ФайлЗапуска.ЗаписатьСтроку("@exit /b %ERRORLEVEL%");
ФайлЗапуска.ЗаписатьСтроку("@set _opm_err=%ERRORLEVEL%");
// Восстанавливаем кодировку консоли, чтобы не нарушать работу других команд после вызова батника
ФайлЗапуска.ЗаписатьСтроку("@chcp %_opm_cp% > nul");
ФайлЗапуска.ЗаписатьСтроку("@exit /b %_opm_err%");
ФайлЗапуска.Закрыть();
КонецЕсли;

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)")
.Содержит("КириллицаПроект");

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

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