-
-
Notifications
You must be signed in to change notification settings - Fork 28
/
publish.os
166 lines (119 loc) · 8.33 KB
/
publish.os
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#Использовать cmdline
#Использовать logos
Перем Лог;
Перем ДелатьКоммит;
Функция ВыполнитьКоманду(Знач КомандаЗапуска, Знач ТекстОшибки = "", Знач РабочийКаталог = "")
Лог.Информация("Выполняю команду: " + КомандаЗапуска);
ВыводКоманды = "";
Процесс = СоздатьПроцесс("cmd.exe /C " + ОбернутьВКавычки(КомандаЗапуска), РабочийКаталог, Истина, , КодировкаТекста.UTF8);
Процесс.Запустить();
Процесс.ОжидатьЗавершения();
Пока НЕ Процесс.Завершен ИЛИ Процесс.ПотокВывода.ЕстьДанные Цикл
СтрокаВывода = Процесс.ПотокВывода.ПрочитатьСтроку();
ВыводКоманды = ВыводКоманды + СтрокаВывода + Символы.ПС;
Сообщить(СтрокаВывода);
КонецЦикла;
Если Процесс.КодВозврата <> 0 Тогда
Лог.Ошибка("Код возврата: " + Процесс.КодВозврата);
ТекстВывода = Процесс.ПотокОшибок.Прочитать();
ВызватьИсключение ТекстОшибки + Символы.ПС + ТекстВывода;
КонецЕсли;
Возврат ВыводКоманды;
КонецФункции
Функция ОбернутьВКавычки(Знач Строка)
Возврат """" + Строка + """";
КонецФункции
Процедура КопироватьСодержимоеКаталога(Откуда, Куда)
КаталогНазначения = Новый Файл(Куда);
Если КаталогНазначения.Существует() Тогда
Если КаталогНазначения.ЭтоФайл() Тогда
УдалитьФайлы(КаталогНазначения.ПолноеИмя);
СоздатьКаталог(Куда);
КонецЕсли;
Иначе
СоздатьКаталог(Куда);
КонецЕсли;
Файлы = НайтиФайлы(Откуда, ПолучитьМаскуВсеФайлы());
Для Каждого Файл Из Файлы Цикл
ПутьКопирования = ОбъединитьПути(Куда, Файл.Имя);
Если Файл.ЭтоКаталог() Тогда
КопироватьСодержимоеКаталога(Файл.ПолноеИмя, ПутьКопирования);
Иначе
КопироватьФайл(Файл.ПолноеИмя, ПутьКопирования);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ОбновитьПакетРедактора(ДанныеКоманды)
Если ДелатьКоммит Тогда
ВыполнитьКоманду("git pull", , ДанныеКоманды.ПутьККаталогуРепозитория);
КонецЕсли;
ПутьККаталогуПриемнику = ДанныеКоманды.ПутьККаталогуРепозитория;
ТекстСообщения = СтрШаблон("Копирую файлы пакета в репозиторий %1", ДанныеКоманды.ПутьККаталогуРепозитория);
Лог.Информация(ТекстСообщения);
КопироватьСодержимоеКаталога(ДанныеКоманды.ПутьККаталогуИсточнику, ДанныеКоманды.ПутьККаталогуРепозитория);
Если ДелатьКоммит Тогда
ВыводКоманды = ВыполнитьКоманду("git status", , ДанныеКоманды.ПутьККаталогуРепозитория);
Если Найти(ВыводКоманды, "nothing to commit, working directory clean") Тогда
Возврат;
КонецЕсли;
ВыполнитьКоманду("git add .", , ДанныеКоманды.ПутьККаталогуРепозитория);
ВыполнитьКоманду("git commit -m ""Package update""", , ДанныеКоманды.ПутьККаталогуРепозитория);
КонецЕсли;
КонецПроцедуры
Функция Конструктор_ДанныеКомандыОбновленияПакета()
ДанныеКоманды = Новый Структура;
ДанныеКоманды.Вставить("ПутьККаталогуИсточнику", "");
ДанныеКоманды.Вставить("ПутьККаталогуРепозитория", "");
Возврат ДанныеКоманды;
КонецФункции
Лог = Логирование.ПолучитьЛог("1c-syntax.app.publish");
Лог.УстановитьУровень(УровниЛога.Информация);
Парсер = Новый ПарсерАргументовКоманднойСтроки();
Парсер.ДобавитьПараметрФлаг("-commit");
Парсер.ДобавитьПараметрФлаг("-atom");
Парсер.ДобавитьПараметрФлаг("-st");
Парсер.ДобавитьПараметрФлаг("-vsc");
Параметры = Парсер.Разобрать(АргументыКоманднойСтроки);
ДелатьКоммит = Ложь;
СобиратьAtom = Ложь;
СобиратьST = Ложь;
СобиратьVSC = Ложь;
Если Параметры.Количество() > 0 Тогда
ДелатьКоммит = Параметры["-commit"];
СобиратьAtom = Параметры["-atom"];
СобиратьST = Параметры["-st"];
СобиратьVSC = Параметры["-vsc"];
КонецЕсли;
Если НЕ (СобиратьAtom ИЛИ СобиратьST ИЛИ СобиратьVSC) Тогда
СобиратьAtom = Истина;
СобиратьST = Истина;
СобиратьVSC = Истина;
КонецЕсли;
ИмяКаталогаСборки = "build";
КаталогСборки = ОбъединитьПути(ТекущийКаталог(), ИмяКаталогаСборки);
ПапкаРепозиториев = ОбъединитьПути(ТекущийКаталог(), "..");
ИмяПакета = "language-1c-bsl";
ИмяПапки_Atom = "atom-" + ИмяПакета;
ИмяПапки_Sublime = "sublime-" + ИмяПакета;
ИмяПапки_VSC = "vsc-" + ИмяПакета;
Папка_Atom = ОбъединитьПути(ПапкаРепозиториев, ИмяПапки_Atom);
Папка_Sublime = ОбъединитьПути(ПапкаРепозиториев, ИмяПапки_Sublime);
Папка_VSC = ОбъединитьПути(ПапкаРепозиториев, ИмяПапки_VSC);
Если СобиратьAtom Тогда
ДанныеКоманды_Atom = Конструктор_ДанныеКомандыОбновленияПакета();
ДанныеКоманды_Atom.ПутьККаталогуИсточнику = ОбъединитьПути(КаталогСборки, "Atom");
ДанныеКоманды_Atom.ПутьККаталогуРепозитория = Папка_Atom;
ОбновитьПакетРедактора(ДанныеКоманды_Atom);
КонецЕсли;
Если СобиратьST Тогда
ДанныеКоманды_Sublime = Конструктор_ДанныеКомандыОбновленияПакета();
ДанныеКоманды_Sublime.ПутьККаталогуИсточнику = ОбъединитьПути(КаталогСборки, "ST");
ДанныеКоманды_Sublime.ПутьККаталогуРепозитория = Папка_Sublime;
ОбновитьПакетРедактора(ДанныеКоманды_Sublime);
КонецЕсли;
Если СобиратьVSC Тогда
ДанныеКоманды_VSC = Конструктор_ДанныеКомандыОбновленияПакета();
ДанныеКоманды_VSC.ПутьККаталогуИсточнику = ОбъединитьПути(КаталогСборки, "VSC");
ДанныеКоманды_VSC.ПутьККаталогуРепозитория = Папка_VSC;
ОбновитьПакетРедактора(ДанныеКоманды_VSC);
КонецЕсли;