Skip to content

Commit 684a1d9

Browse files
committed
Скрипт запаковки
1 parent ac7cc8d commit 684a1d9

File tree

1 file changed

+151
-0
lines changed

1 file changed

+151
-0
lines changed

tasks/packdata.os

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
Перем ИндексКлассов;
2+
Перем КаталогBin;
3+
Перем КаталогКлассов;
4+
Перем ПрефиксКлассов;
5+
Перем ИмяМенеджераФайлов;
6+
7+
Процедура ВыполнитьЗапаковку()
8+
9+
ТекущийКаталогЗадачи = ТекущийСценарий().Каталог;
10+
11+
КаталогПроекта = Новый Файл(ОбъединитьПути(ТекущийКаталогЗадачи, "..")).ПолноеИмя;
12+
13+
ПрефиксКлассов = "gitsync_plugins";
14+
15+
КаталогКлассов = ОбъединитьПути(КаталогПроекта, "src/Классы/internal/bindata/Классы");
16+
КаталогBin = ОбъединитьПути(КаталогПроекта, "bin");
17+
18+
Каталогv8unpack = ОбъединитьПути(КаталогBin, "v8unpack");
19+
КаталогcTool_1CD = ОбъединитьПути(КаталогBin, "cTool_1CD");
20+
21+
ИмяМенеджераФайлов = "МенеджерЗапакованныхФайловGitsyncPlugins.os";
22+
23+
ИндексКлассов = Новый Соответствие;
24+
ОбработатьКаталог(Каталогv8unpack, "*.dll");
25+
ОбработатьКаталог(КаталогcTool_1CD, "*.exe");
26+
27+
ЗаписатьКлассИндексаЗапаковки(ИндексКлассов);
28+
29+
КонецПроцедуры
30+
31+
Процедура ЗаписатьКлассИндексаЗапаковки(ИндексКлассов)
32+
33+
ТекстБлока = "Функция ПолучитьИндексФайлов() Экспорт
34+
|
35+
| ИндексФайлов = Новый Соответствие;
36+
|";
37+
38+
ШаблонДобавленияВИндекс = " ИндексФайлов.Вставить(""%1"", ""%2"");";
39+
40+
Для каждого ДанныеКласса Из ИндексКлассов Цикл
41+
42+
ТекстБлока = ТекстБлока + СтрШаблон(ШаблонДобавленияВИндекс, ДанныеКласса.Ключ, ДанныеКласса.Значение) + Символы.ПС;
43+
44+
КонецЦикла;
45+
46+
ТекстБлока = ТекстБлока + "
47+
| Возврат ИндексФайлов;
48+
|
49+
|КонецФункции";
50+
51+
ФайлКлассаМенеджерЗапакованныхФайлов = ОбъединитьПути(КаталогКлассов, ИмяМенеджераФайлов);
52+
53+
ЗаписьТекста = Новый ЗаписьТекста(ФайлКлассаМенеджерЗапакованныхФайлов);
54+
ЗаписьТекста.ЗаписатьСтроку(ТекстБлока);
55+
ЗаписьТекста.Закрыть();
56+
57+
Сообщить("Обработки запакованы в классы");
58+
59+
КонецПроцедуры
60+
61+
Процедура ОбработатьКаталог(Знач КаталогОбработки, Знач МаскаПоискаФайлов)
62+
63+
МассивНайденныхФайлов = НайтиФайлы(КаталогОбработки, МаскаПоискаФайлов);
64+
65+
Для каждого НайденныйФайл Из МассивНайденныхФайлов Цикл
66+
67+
Если НайденныйФайл.ЭтоКаталог() Тогда
68+
Продолжить;
69+
КонецЕсли;
70+
71+
ИмяФайла = СтрЗаменить(НайденныйФайл.ИмяБезРасширения, ".", "_");
72+
ПолныйПутьКФайлу = НайденныйФайл.ПолноеИмя;
73+
74+
ИмяКлассаФайла = СтрШаблон("%1_%2", ИмяФайла, ПрефиксКлассов);
75+
76+
ПутьКФайлуКласса = ОбъединитьПути(КаталогКлассов, ИмяКлассаФайла + ".os");
77+
ДанныеФайла = ПолучитBase64Строка(ПолныйПутьКФайлу);
78+
ХешСтрока = ПолучитьХешСтроку(ПолныйПутьКФайлу);
79+
80+
ЗаписатьКласс(ПутьКФайлуКласса, НайденныйФайл.Имя, "1.0.0", ХешСтрока, ДанныеФайла);
81+
82+
ИндексКлассов.Вставить(НайденныйФайл.Имя, ИмяКлассаФайла);
83+
84+
КонецЦикла;
85+
86+
87+
КонецПроцедуры
88+
89+
Функция ПолучитьХешСтроку(ПутьКФайлу)
90+
91+
ХешФайла = Новый ХешированиеДанных(ХешФункция.MD5);
92+
ХешФайла.ДобавитьФайл(ПутьКФайлу);
93+
94+
Возврат ХешФайла.ХешСуммаСтрокой;
95+
96+
КонецФункции
97+
98+
Процедура ЗаписатьКласс(ПутьКФайлуКласса, ИмяФайла, ВерсияФайла, ХешСтрока, ДанныеФайла)
99+
100+
ШаблонТекст = "
101+
|///////////////////////////////////////////
102+
|// ФАЙЛ СОЗДАН АВТОМАТИЧЕСКИ //
103+
|///////////////////////////////////////////
104+
|//
105+
|// ФАЙЛ: <%1>
106+
|//
107+
|
108+
|// Возвращает версию запакованного файла
109+
|//
110+
|Функция Версия() Экспорт
111+
| Возврат ""%2"";
112+
|КонецФункции
113+
|
114+
|// Возвращает имя запакованного файла
115+
|//
116+
|Функция ИмяФайла() Экспорт
117+
| Возврат ""%1"";
118+
|КонецФункции
119+
|
120+
|// Возвращает хеш строку запакованного файла
121+
|//
122+
|Функция Хеш() Экспорт
123+
| Возврат ""%3"";
124+
|КонецФункции
125+
|
126+
|// Возвращает запакованные данные файла
127+
|//
128+
|Функция ДвоичныеДанные() Экспорт
129+
| ЗапакованныеДанные = ""%4"";
130+
| Возврат ЗапакованныеДанные;
131+
|КонецФункции
132+
|
133+
|";
134+
135+
ТекстКласса = СтрШаблон(ШаблонТекст, ИмяФайла, ВерсияФайла, ХешСтрока, ДанныеФайла);
136+
137+
ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлуКласса);
138+
ЗаписьТекста.ЗаписатьСтроку(ТекстКласса);
139+
ЗаписьТекста.Закрыть();
140+
141+
КонецПроцедуры
142+
143+
Функция ПолучитBase64Строка(ПутьКФайлу)
144+
145+
ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ПутьКФайлу);
146+
Строка = Base64Строка(ДвоичныеДанныеФайла);
147+
Возврат Строка;
148+
149+
КонецФункции
150+
151+
ВыполнитьЗапаковку();

0 commit comments

Comments
 (0)