Skip to content

Commit cf99ca7

Browse files
authored
Merge pull request #267 from Segate-ekb/master
2 parents 6962d55 + a8407eb commit cf99ca7

3 files changed

Lines changed: 68 additions & 3 deletions

File tree

packagedef

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
Константы_ЛокальнаяВерсия = ЗагрузитьСценарий(ПутьКСценариюКонстант);
1414
ВерсияПродукта = Константы_ЛокальнаяВерсия.ВерсияПродукта;
1515
Иначе
16-
ВерсияПродукта = "1.6.5";
16+
ВерсияПродукта = "1.6.6";
1717
КонецЕсли;
1818

1919
Описание.Имя("opm")

src/core/Классы/УстановкаПакета.os

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -294,9 +294,15 @@
294294
Процедура СоздатьСкриптЗапуска(Знач ИмяСкриптаЗапуска, Знач ПутьФайлаПриложения, Знач Каталог) Экспорт
295295

296296
Если ЭтоWindows Тогда
297-
ФайлЗапуска = Новый ЗаписьТекста(ОбъединитьПути(Каталог, ИмяСкриптаЗапуска + ".bat"), "cp866");
297+
ФайлЗапуска = Новый ЗаписьТекста(ОбъединитьПути(Каталог, ИмяСкриптаЗапуска + ".bat"), КодировкаТекста.UTF8NoBOM);
298+
// Запоминаем текущую кодировку консоли, переключаем на UTF-8 для корректной работы с кириллицей в путях
299+
ФайлЗапуска.ЗаписатьСтроку("@for /f ""tokens=2 delims=:."" %%a in ('chcp') do @set ""_opm_cp=%%a""");
300+
ФайлЗапуска.ЗаписатьСтроку("@chcp 65001 > nul");
298301
ФайлЗапуска.ЗаписатьСтроку("@call oscript """ + ПутьФайлаПриложения + """ %*");
299-
ФайлЗапуска.ЗаписатьСтроку("@exit /b %ERRORLEVEL%");
302+
ФайлЗапуска.ЗаписатьСтроку("@set _opm_err=%ERRORLEVEL%");
303+
// Восстанавливаем кодировку консоли, чтобы не нарушать работу других команд после вызова батника
304+
ФайлЗапуска.ЗаписатьСтроку("@chcp %_opm_cp% > nul");
305+
ФайлЗапуска.ЗаписатьСтроку("@exit /b %_opm_err%");
300306
ФайлЗапуска.Закрыть();
301307
КонецЕсли;
302308

tests/bat-launcher-test.os

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#Использовать "../src/core"
2+
#Использовать asserts
3+
#Использовать fs
4+
#Использовать tempfiles
5+
6+
// Тесты для воспроизведения issue #265:
7+
// BUG: Генерирует нерабочие `.bat` при кириллице в пути проекта (Windows)
8+
// https://github.com/oscript-library/opm/issues/265
9+
10+
Перем юТест;
11+
Перем мВременныеФайлы;
12+
13+
Функция ПолучитьСписокТестов(Знач Тестирование) Экспорт
14+
15+
юТест = Тестирование;
16+
17+
ИменаТестов = Новый Массив;
18+
19+
СИ = Новый СистемнаяИнформация();
20+
Если Найти(СИ.ВерсияОС, "Windows") > 0 Тогда
21+
ИменаТестов.Добавить("ТестДолжен_НеСодержатьАбсолютныйКириллицкийПутьВBatФайлеПриЛокальнойУстановке");
22+
КонецЕсли;
23+
24+
Возврат ИменаТестов;
25+
26+
КонецФункции
27+
28+
Процедура ПередЗапускомТеста() Экспорт
29+
КонецПроцедуры
30+
31+
Процедура ПослеЗапускаТеста() Экспорт
32+
мВременныеФайлы.Удалить();
33+
КонецПроцедуры
34+
35+
36+
Процедура ТестДолжен_НеСодержатьАбсолютныйКириллицкийПутьВBatФайлеПриЛокальнойУстановке() Экспорт
37+
38+
КаталогBin = мВременныеФайлы.СоздатьКаталог();
39+
40+
41+
КириллицкийПутьКСкрипту = "C:\КириллицаПроект\Новая папка\oscript_modules\testapp\testapp.os";
42+
43+
Установщик = Новый УстановкаПакета;
44+
Установщик.УстановитьРежимУстановкиПакета(РежимУстановкиПакетов.Локально);
45+
Установщик.СоздатьСкриптЗапуска("testapp", КириллицкийПутьКСкрипту, КаталогBin);
46+
47+
ПутьКBatФайлу = ОбъединитьПути(КаталогBin, "testapp.bat");
48+
49+
Чтение = Новый ЧтениеТекста(ПутьКBatФайлу, КодировкаТекста.UTF8);
50+
СодержимоеBat = Чтение.Прочитать();
51+
Чтение.Закрыть();
52+
53+
54+
Ожидаем.Что(СодержимоеBat, "Bat-файл должен корректно кодировать кириллицу в пути (UTF-8)")
55+
.Содержит("КириллицаПроект");
56+
57+
КонецПроцедуры
58+
59+
мВременныеФайлы = Новый МенеджерВременныхФайлов;

0 commit comments

Comments
 (0)