Skip to content

Commit 96dfb48

Browse files
committed
Доработка плагинов unpackForm и tool1CD
1 parent aca6fdb commit 96dfb48

10 files changed

+529
-3
lines changed

src/Классы/internal/bindata/Классы/cTool_1CD_gitsync_plugins.os

Lines changed: 34 additions & 0 deletions
Large diffs are not rendered by default.

src/Классы/internal/bindata/Классы/v8unpack_gitsync_plugins.os

Lines changed: 34 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
#Область ПрограммныйИнтерфейс
2+
3+
Функция ПолучитьПутьКФайлу(Знач ИмяФайла) Экспорт
4+
5+
МенеджерЗапакованныхФайлов = Новый МенеджерЗапакованныхФайловGitsyncPlugins;
6+
ИндексФайлов = МенеджерЗапакованныхФайлов.ПолучитьИндексФайлов();
7+
8+
ИмяКлассаФайла = ИндексФайлов[ИмяФайла];
9+
10+
Если ИмяКлассаФайла = Неопределено Тогда
11+
ВызватьИсключение СтрШаблон("Не удалось найти двоичные данные для файла <%1>", ИмяФайла);
12+
КонецЕсли;
13+
14+
КлассФайла = Новый (ИмяКлассаФайла);
15+
16+
ПутьКФайлу = "";
17+
18+
НайтиФайлИлиРаспаковать(КлассФайла, ПутьКФайлу);
19+
20+
Возврат ПутьКФайлу;
21+
22+
КонецФункции
23+
24+
#КонецОбласти
25+
26+
#Область Упакованные_файлы
27+
28+
Процедура РаспаковатьДанные(Знач ПутьКФайлу, КлассФайла)
29+
30+
ДвоичныеДанные = Base64Значение(КлассФайла.ДвоичныеДанные());
31+
32+
ОбеспечитьКаталог(ПутьКФайлу);
33+
34+
ДвоичныеДанные.Записать(ПутьКФайлу);
35+
36+
КонецПроцедуры
37+
38+
Функция ВычислитьХешФайла(Знач ПутьКФайлу)
39+
40+
ХешФайла = Новый ХешированиеДанных(ХешФункция.MD5);
41+
ХешФайла.ДобавитьФайл(ПутьКФайлу);
42+
43+
Возврат ХешФайла.ХешСуммаСтрокой;
44+
45+
КонецФункции
46+
47+
Процедура НайтиФайлИлиРаспаковать(КлассФайла, ПутьКФайлу)
48+
49+
ИмяФайла = КлассФайла.ИмяФайла();
50+
51+
ПутьКФайлу = ПолучитьПутьКВременномуФайлу(ИмяФайла);
52+
53+
ВременныйФайл = Новый Файл(ПутьКФайлу);
54+
55+
Если Не ВременныйФайл.Существует()
56+
Тогда// ИЛИ Не ВычислитьХешФайла(ПутьКФайлу) = ДанныеDll.Хеш() Тогда
57+
РаспаковатьДанные(ПутьКФайлу, КлассФайла);
58+
КонецЕсли;
59+
60+
КонецПроцедуры
61+
62+
Функция ПолучитьПутьКВременномуФайлу(Знач ИмяФайла)
63+
ПутьКФайлу = ОбъединитьПути(КаталогВременныхФайлов(), ".gitsync-plugins", ИмяФайла);
64+
Возврат ПутьКФайлу;
65+
КонецФункции
66+
67+
Процедура ОбеспечитьКаталог(ПутьККаталогу)
68+
69+
ВременныйКаталог = Новый Файл(ПутьККаталогу);
70+
71+
Если ВременныйКаталог.Существует() Тогда
72+
Возврат;
73+
КонецЕсли;
74+
75+
СоздатьКаталог(ВременныйКаталог.Путь);
76+
77+
КонецПроцедуры
78+
79+
#КонецОбласти
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
Функция ПолучитьИндексФайлов() Экспорт
2+
3+
ИндексФайлов = Новый Соответствие;
4+
ИндексФайлов.Вставить("v8unpack.dll", "v8unpack_gitsync_plugins");
5+
ИндексФайлов.Вставить("cTool_1CD.exe", "cTool_1CD_gitsync_plugins");
6+
7+
Возврат ИндексФайлов;
8+
9+
КонецФункции
Lines changed: 229 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,229 @@
1+
#Использовать 1commands
2+
#Использовать tempfiles
3+
#Использовать "../../bindata"
4+
5+
Перем мИмяФайлаБазы;
6+
Перем мКаталогВнешнихПрограмм;
7+
Перем мРабочийКаталог;
8+
Перем Лог;
9+
Перем ЭтоWindows;
10+
11+
Процедура ОткрытьФайл(Знач ИмяФайла) Экспорт
12+
мИмяФайлаБазы = ИмяФайла;
13+
КонецПроцедуры
14+
15+
Процедура ЗакрытьФайл() Экспорт
16+
мИмяФайлаБазы = Неопределено;
17+
ВременныеФайлы.УдалитьФайл(мРабочийКаталог);
18+
КонецПроцедуры
19+
20+
Функция ПрочитатьТаблицу(Знач ИмяТаблицы) Экспорт
21+
22+
ВыгрузитьТаблицыВXML(ИмяТаблицы);
23+
24+
Возврат ПрочитатьТаблицуИзXml(ФайлВыгрузкиТаблицы(ИмяТаблицы));
25+
26+
КонецФункции
27+
28+
Функция ВыгрузитьТаблицыВXML(Знач ИменаТаблиц) Экспорт
29+
30+
ЛогTool1CD = ВременныеФайлы.НовоеИмяФайла("txt");
31+
ПрефиксПути = ?(ЭтоWindows = Ложь, "Z:", "");
32+
// СтрокаЗапуска = """" + ПутьTool1CD() + """ "
33+
СтрокаЗапуска = """"+ ПрефиксПути + мИмяФайлаБазы + """"
34+
+ " -l """ +ПрефиксПути+ ЛогTool1CD + """"
35+
+ " -q -ne -ex "
36+
+ """" + ПрефиксПути + РабочийКаталог() + """ """ + ИменаТаблиц + """";
37+
38+
ПутьПриложения = ПутьTool1CD();
39+
Если Не ЭтоWindows Тогда
40+
СтрокаЗапуска = СтрШаблон("""%1"" %2", ПутьПриложения, СтрокаЗапуска);
41+
ПутьПриложения = "wine";
42+
КонецЕсли;
43+
44+
Лог.Отладка(ПутьПриложения);
45+
Лог.Отладка(СтрокаЗапуска);
46+
47+
Команда = Новый Команда;
48+
Команда.УстановитьКоманду(ПутьПриложения);
49+
Команда.УстановитьПараметры(СтрокаЗапуска);
50+
// Команда.УстановитьСтрокуЗапуска(СтрокаЗапуска);
51+
Команда.УстановитьКодировкуВывода(КодировкаТекста.UTF8);
52+
Команда.ПоказыватьВыводНемедленно(Истина);
53+
КодВозврата = Команда.Исполнить();
54+
55+
Если КодВозврата <> 0 Тогда
56+
Лог.Ошибка(Команда.ПолучитьВывод());
57+
ПоказатьЛог(ЛогTool1CD);
58+
ВызватьИсключение "Tool_1CD вернул код: " + КодВозврата;
59+
60+
КонецЕсли;
61+
62+
МассивИменТаблиц = РазложитьИменаТаблицВМассив(ИменаТаблиц);
63+
ФайлыВыгрузки = Новый Соответствие;
64+
Для Каждого ИмяТаблицы Из МассивИменТаблиц Цикл
65+
66+
ФайлТаблицы = Новый Файл(ФайлВыгрузкиТаблицы(ИмяТаблицы));
67+
Если Не ФайлТаблицы.Существует() Тогда
68+
ВызватьИсключение "Таблица " + ИмяТаблицы + " не была выгружена Tool_1CD";
69+
КонецЕсли;
70+
71+
ФайлыВыгрузки[ИмяТаблицы] = ФайлТаблицы.ПолноеИмя;
72+
73+
КонецЦикла;
74+
75+
Возврат ФайлыВыгрузки;
76+
77+
КонецФункции
78+
79+
Функция ПрочитатьТаблицуИзXml(Знач ФайлТаблицы) Экспорт
80+
81+
ЧтениеXML = Новый ЧтениеXML;
82+
ЧтениеXML.ОткрытьФайл(ФайлТаблицы);
83+
84+
Попытка
85+
86+
ЧтениеXML.ПерейтиКСодержимому();
87+
ЧтениеXML.Прочитать();
88+
89+
ПоляТаблицы = ПрочитатьПоляТаблицыИзXML(ЧтениеXML);
90+
ДанныеТаблицы = Новый ТаблицаЗначений;
91+
Для Каждого Поле Из ПоляТаблицы Цикл
92+
ДанныеТаблицы.Колонки.Добавить(Поле);
93+
КонецЦикла;
94+
95+
Пока ЧтениеXML.Прочитать() Цикл
96+
97+
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента
98+
И ЧтениеXML.Имя = "Record" Тогда
99+
100+
НоваяСтрока = ДанныеТаблицы.Добавить();
101+
Пока ЧтениеXML.Прочитать() Цикл
102+
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
103+
НоваяСтрока[ЧтениеXML.Имя] = ПолучитьТекст(ЧтениеXML);
104+
КонецЕсли;
105+
106+
Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "Record" Тогда
107+
Прервать;
108+
КонецЕсли;
109+
110+
КонецЦикла;
111+
112+
КонецЕсли;
113+
КонецЦикла;
114+
115+
ЧтениеXML.Закрыть();
116+
117+
Исключение
118+
ЧтениеXML.Закрыть();
119+
ВызватьИсключение;
120+
КонецПопытки;
121+
122+
Возврат ДанныеТаблицы;
123+
124+
КонецФункции
125+
126+
Функция ПрочитатьПоляТаблицыИзXML(Знач ЧтениеXML)
127+
ИменаПолей = Новый Массив;
128+
Пока ЧтениеXML.Прочитать() Цикл
129+
130+
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента
131+
И ЧтениеXML.Имя = "Field" Тогда
132+
133+
ИменаПолей.Добавить(ЧтениеXML.ЗначениеАтрибута("Name"));
134+
135+
КонецЕсли;
136+
137+
Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "Fields" Тогда
138+
Прервать;
139+
КонецЕсли;
140+
141+
КонецЦикла;
142+
143+
Возврат ИменаПолей;
144+
145+
КонецФункции
146+
147+
Функция ПолучитьТекст(ЧтениеXML)
148+
Результат = "";
149+
Пока ЧтениеXML.Прочитать() Цикл
150+
151+
Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
152+
Результат = ЧтениеXML.Значение;
153+
КонецЕсли;
154+
Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
155+
Прервать;
156+
КонецЕсли;
157+
КонецЦикла;
158+
159+
Возврат Результат;
160+
161+
КонецФункции
162+
163+
Функция РабочийКаталог()
164+
Если мРабочийКаталог = Неопределено Тогда
165+
мРабочийКаталог = ВременныеФайлы.СоздатьКаталог();
166+
КонецЕсли;
167+
168+
Возврат мРабочийКаталог;
169+
170+
КонецФункции
171+
172+
Функция ПутьTool1CD()
173+
Если мКаталогВнешнихПрограмм = Неопределено Тогда
174+
мКаталогВнешнихПрограмм = Загрузчик_tool1CD.ПутьКФайлу();
175+
КонецЕсли;
176+
177+
Возврат мКаталогВнешнихПрограмм;
178+
179+
КонецФункции
180+
181+
Функция ФайлВыгрузкиТаблицы(Знач Таблица)
182+
Возврат ОбъединитьПути(РабочийКаталог(), Таблица+".xml");
183+
КонецФункции
184+
185+
Процедура ПоказатьЛог(Знач ЛогTool1CD)
186+
ТекстЛога = ПрочитатьФайл(ЛогTool1CD);
187+
Сообщить(ТекстЛога);
188+
189+
Попытка
190+
УдалитьФайлы(ЛогTool1CD);
191+
Исключение
192+
КонецПопытки;
193+
КонецПроцедуры
194+
195+
Функция ПрочитатьФайл(Знач ИмяФайла)
196+
Чтение = Новый ЧтениеТекста(ИмяФайла);
197+
Текст = Чтение.Прочитать();
198+
Чтение.Закрыть();
199+
200+
Возврат Текст;
201+
КонецФункции
202+
203+
Функция РазложитьИменаТаблицВМассив(Знач ИменаТаблиц)
204+
205+
МассивИмен = Новый Массив;
206+
Хвост = ИменаТаблиц;
207+
Пока Истина Цикл
208+
Поз = Найти(Хвост, ";");
209+
Если Поз > 0 Тогда
210+
Голова = СокрЛП(Лев(Хвост, Поз-1));
211+
Хвост = Сред(Хвост, Поз+1);
212+
МассивИмен.Добавить(Голова);
213+
Иначе
214+
Голова = СокрЛП(Хвост);
215+
Если Не ПустаяСтрока(Голова) Тогда
216+
МассивИмен.Добавить(Голова);
217+
КонецЕсли;
218+
Прервать;
219+
КонецЕсли;
220+
КонецЦикла;
221+
222+
Возврат МассивИмен;
223+
224+
КонецФункции
225+
226+
СистемнаяИнформация = Новый СистемнаяИнформация;
227+
ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0;
228+
229+
Лог = Логирование.ПолучитьЛог("oscript.lib.tool1cd");
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
#Использовать 1commands
2+
#Использовать tempfiles
3+
#Использовать logos
4+
#Использовать "../../bindata"
5+
6+
Перем мКаталогВнешнихПрограмм;
7+
Перем Лог;
8+
Перем ЭтоWindows;
9+
10+
//////////////////////////////////////////////////////////////////////////////////////////////////
11+
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
12+
13+
Процедура ВыгрузитьВерсиюКонфигурации(Знач ФайлХранилища, Знач ВыходнойФайл, Знач НомерВерсии = 0) Экспорт
14+
15+
ЛогTool1CD = ВременныеФайлы.НовоеИмяФайла("txt");
16+
ПрефиксПути = ?(ЭтоWindows = Ложь, "Z:", "");
17+
СтрокаЗапуска = """" + ПутьTool1CD() + """ """ + ПрефиксПути + ФайлХранилища
18+
+ """ -l """ + ПрефиксПути + ЛогTool1CD
19+
+ """ -q -ne -drc "
20+
+ Строка(НомерВерсии)
21+
+" """ + ПрефиксПути + ВыходнойФайл +"""";
22+
23+
ФайлИсходника = Новый Файл(ВыходнойФайл);
24+
ФайлЛога = Новый Файл(ЛогTool1CD);
25+
26+
КодВозврата = "";
27+
Если НЕ ЭтоWindows Тогда
28+
СтрокаЗапуска = "wine "+СтрокаЗапуска;
29+
КонецЕсли;
30+
Лог.Отладка(СтрокаЗапуска);
31+
32+
Команда = Новый Команда;
33+
34+
Команда.УстановитьСтрокуЗапуска(СтрокаЗапуска);
35+
Команда.УстановитьКодировкуВывода(КодировкаТекста.UTF8);
36+
Команда.ПоказыватьВыводНемедленно(Истина);
37+
КодВозврата = Команда.Исполнить();
38+
ВыводКоманды = Команда.ПолучитьВывод();
39+
40+
Если ФайлЛога.Существует() Тогда
41+
ТекстЛогаTool1CD = (ПрочитатьФайл(ЛогTool1CD));
42+
УдалитьФайлы(ФайлЛога.ПолноеИмя);
43+
Иначе
44+
ВызватьИсключение "Tool_1CD не выгрузил файл конфигурации." + ВыводКоманды;
45+
КонецЕсли;
46+
47+
Если КодВозврата <> 0 Тогда
48+
Лог.Ошибка(ТекстЛогаTool1CD);
49+
ВызватьИсключение "Tool_1CD вернул код возврата " + КодВозврата;
50+
КонецЕсли;
51+
52+
КонецПроцедуры
53+
54+
//////////////////////////////////////////////////////////////////////////////////////////////////
55+
//
56+
57+
Функция ПутьTool1CD()
58+
Если мКаталогВнешнихПрограмм = Неопределено Тогда
59+
мКаталогВнешнихПрограмм = Загрузчик_tool1CD.ПутьКФайлу();
60+
КонецЕсли;
61+
62+
Возврат мКаталогВнешнихПрограмм;
63+
64+
КонецФункции
65+
66+
Функция ПрочитатьФайл(Знач ИмяФайла)
67+
ЧтениеТекста = Новый ЧтениеТекста(ИмяФайла);
68+
Текст = ЧтениеТекста.Прочитать();
69+
ЧтениеТекста.Закрыть();
70+
71+
Возврат Текст;
72+
КонецФункции
73+
74+
СистемнаяИнформация = Новый СистемнаяИнформация;
75+
ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0;
76+
77+
Лог = Логирование.ПолучитьЛог("oscript.lib.tool1cd");

0 commit comments

Comments
 (0)