|
6 | 6 | // oscript-app-template (C) EvilBeaver
|
7 | 7 | //
|
8 | 8 | ///////////////////////////////////////////////////////////////////
|
9 |
| - |
| 9 | +#Использовать gitrunner |
10 | 10 | #Область ОписаниеПеременных
|
11 | 11 |
|
12 | 12 | Перем Лог; // Экземпляр логгера
|
|
156 | 156 |
|
157 | 157 | КонецПроцедуры
|
158 | 158 |
|
159 |
| -Функция ПолучитьСтрокуИзмененныхФайлов(Знач ПутьИсходников) |
| 159 | +Функция ПолучитьСтрокуИзмененныхФайлов(Знач ПутьИсходников, МенеджерСборки) |
| 160 | + СтрокаИзмененныхФайлов = ""; |
160 | 161 |
|
161 |
| - Хэш = ПолучитьХэшПоследнегоЗагруженногоКоммита(ПутьИсходников); |
| 162 | + ИзмененныеФайлыGitDiff = ПолучитьФайлыИзGitDiff(ПутьИсходников); |
| 163 | + ИзмененныеФайлыИзКонфигурации = ПолучитьИзмененныеВКонфигурацииФайлыСМоментаПоследнейЗагрузки(ПутьИсходников, |
| 164 | + МенеджерСборки); |
162 | 165 |
|
163 |
| - Если ПустаяСтрока(Хэш) Тогда |
164 |
| - Лог.Отладка("Не найден хэш последнего загруженного коммита для инкрементальной загрузки"); |
| 166 | + СтрокаИзмененныхФайлов = ИзмененныеФайлыGitDiff + ИзмененныеФайлыИзКонфигурации; |
| 167 | + Если ИзмененныеФайлыИзКонфигурации = "FullDump" Тогда |
| 168 | + Лог.Отладка("Требуется полная загрузка конфигурации."); |
165 | 169 | Возврат "";
|
166 | 170 | КонецЕсли;
|
| 171 | + |
| 172 | + Если ЗначениеЗаполнено(СтрокаИзмененныхФайлов) Тогда |
| 173 | + СтрокаИзмененныхФайлов = Лев(СтрокаИзмененныхФайлов, СтрДлина(СтрокаИзмененныхФайлов) - 1); |
167 | 174 |
|
168 |
| - ТекущийКаталог = КорневойПутьПроекта; |
169 |
| - Лог.Отладка("ТекущийКаталог %1", ТекущийКаталог); |
| 175 | + ИзмененныеФайлыЛог = СтрСоединить(СтрРазделить(СтрокаИзмененныхФайлов, ";"), Символы.ПС); |
| 176 | + Лог.Информация( "Будет выполнена инкрементальная загрузка |
| 177 | + |Измененные файлы: |
| 178 | + |%1", |
| 179 | + ИзмененныеФайлыЛог |
| 180 | + ); // BSLLS:IncorrectLineBreak-off |
| 181 | + Иначе |
| 182 | + Лог.Отладка("Не получена строка измененных файлов для инкрементальной загрузки"); |
| 183 | + КонецЕсли; |
170 | 184 |
|
171 |
| - ОтносительныйПутьИсходников = ФС.ОтносительныйПуть(КорневойПутьПроекта, ПутьИсходников, "/"); |
| 185 | + Возврат СтрокаИзмененныхФайлов; |
172 | 186 |
|
173 |
| - КоманднаяСтрока = СтрШаблон("git diff --name-only %1 HEAD", Хэш); |
174 |
| - Лог.Отладка("Запускаю команду git получить измененные файлы %1", КоманднаяСтрока); |
| 187 | +КонецФункции |
175 | 188 |
|
176 |
| - Процесс = СоздатьПроцесс(КоманднаяСтрока, ТекущийКаталог, Истина, , КодировкаТекста.UTF8); |
177 |
| - Процесс.Запустить(); |
| 189 | +Функция ПолучитьФайлыИзGitDiff(Знач ПутьИсходников) |
| 190 | + Лог.Отладка("Получим измененные файлы в воркспейсе со времени последней загрузки."); // BSLLS:Typo-off |
| 191 | + СтрокаИзмененныхФайлов = ""; |
178 | 192 |
|
179 |
| - Процесс.ОжидатьЗавершения(); |
| 193 | + Хэш = ПолучитьХэшПоследнегоЗагруженногоКоммита(ПутьИсходников); |
180 | 194 |
|
181 |
| - СтрокаИзмененныхФайлов = ""; |
182 |
| - Пока Процесс.ПотокВывода.ЕстьДанные Цикл |
| 195 | + Если ПустаяСтрока(Хэш) Тогда |
| 196 | + Лог.Отладка("Не найден хэш последнего загруженного коммита для инкрементальной загрузки"); // BSLLS:Typo-off |
| 197 | + Возврат ""; |
| 198 | + КонецЕсли; |
183 | 199 |
|
184 |
| - СтрокаВывода = Процесс.ПотокВывода.ПрочитатьСтроку(); |
185 |
| - Лог.Отладка(" Строка вывода команды: %1", СтрокаВывода); |
186 |
| - Если СтрНачинаетсяС(СтрокаВывода, ОтносительныйПутьИсходников) |
187 |
| - И Не ФайлВСпискеИсключений(СтрокаВывода) Тогда |
| 200 | + ТекущийКаталог = КорневойПутьПроекта; |
| 201 | + Лог.Отладка("ТекущийКаталог %1", ТекущийКаталог); |
188 | 202 |
|
189 |
| - СтрокаВывода = СкорректироватьПутьКИзменениюФормы(СтрокаВывода); |
| 203 | + ОтносительныйПутьИсходников = ФС.ОтносительныйПуть(КорневойПутьПроекта, ПутьИсходников, "/"); |
190 | 204 |
|
191 |
| - ТекущаяСтрока = ОбъединитьПути(ТекущийКаталог, СтрокаВывода); |
| 205 | + Репозиторий = Новый ГитРепозиторий(); |
| 206 | + Репозиторий.УстановитьРабочийКаталог(КорневойПутьПроекта); |
| 207 | + |
| 208 | + УстановитьQuotepath(Репозиторий); |
| 209 | + |
| 210 | + Лог.Отладка("Получим все изменения в репозитории от коммита <%1>", Хэш); // BSLLS:Typo-off |
| 211 | + // Получим изменения из репозитория |
| 212 | + ПараметрыКоманды = Новый Массив; |
| 213 | + ПараметрыКоманды.Добавить("diff"); |
| 214 | + ПараметрыКоманды.Добавить("--name-only"); |
| 215 | + ПараметрыКоманды.Добавить(Хэш); |
| 216 | + Репозиторий.ВыполнитьКоманду(ПараметрыКоманды); |
| 217 | + |
| 218 | + МассивФайлов = СтрРазделить(Репозиторий.ПолучитьВыводКоманды(), Символы.ПС, Ложь); |
| 219 | + |
| 220 | + Для каждого ИзмененныйФайл Из МассивФайлов Цикл |
| 221 | + Лог.Отладка(" Изменился файл: %1", ИзмененныйФайл); |
| 222 | + ИзмененныйФайл = СокрЛП(ИзмененныйФайл); |
| 223 | + Если СтрНачинаетсяС(ИзмененныйФайл, ОтносительныйПутьИсходников) |
| 224 | + И Не ФайлВСпискеИсключений(ИзмененныйФайл) Тогда |
| 225 | + ИзмененныйФайл = СкорректироватьПутьКИзменениюФормы(ИзмененныйФайл); |
| 226 | + ИзмененныйФайл = СтрЗаменить(ИзмененныйФайл, "/", ПолучитьРазделительПути()); |
| 227 | + ТекущаяСтрока = ОбъединитьПути(ТекущийКаталог, ИзмененныйФайл); |
192 | 228 | ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, "/", ПолучитьРазделительПути());
|
193 |
| - |
| 229 | + |
194 | 230 | Если СтрНайти(СтрокаИзмененныхФайлов, ТекущаяСтрока) = 0
|
195 | 231 | И Новый Файл(ТекущаяСтрока).Существует() Тогда
|
196 | 232 |
|
197 | 233 | СтрокаИзмененныхФайлов = СтрокаИзмененныхФайлов + ТекущаяСтрока + ";";
|
198 | 234 |
|
199 | 235 | КонецЕсли;
|
200 |
| - |
201 | 236 | КонецЕсли;
|
202 | 237 |
|
203 | 238 | КонецЦикла;
|
204 |
| - Лог.Отладка("Ошибки от процесса |
205 |
| - |%1", Процесс.ПотокОшибок.Прочитать()); |
206 | 239 |
|
207 |
| - Если ЗначениеЗаполнено(СтрокаИзмененныхФайлов) Тогда |
208 |
| - СтрокаИзмененныхФайлов = Лев(СтрокаИзмененныхФайлов, СтрДлина(СтрокаИзмененныхФайлов) - 1); |
| 240 | + Возврат СтрокаИзмененныхФайлов; |
| 241 | +КонецФункции |
209 | 242 |
|
210 |
| - ИзменныеФайлыЛог = СтрСоединить(СтрРазделить(СтрокаИзмененныхФайлов, ";"), Символы.ПС); |
211 |
| - Лог.Информация( "Будет выполнена инкрементальная загрузка |
212 |
| - |Измененные файлы: |
213 |
| - |%1", |
214 |
| - ИзменныеФайлыЛог |
215 |
| - ); |
216 |
| - Иначе |
217 |
| - Лог.Отладка("Не получена строка измененных файлов для инкрементальной загрузки"); |
| 243 | +Функция ПолучитьИзмененныеВКонфигурацииФайлыСМоментаПоследнейЗагрузки(Знач ПутьИсходников, МенеджерСборки) |
| 244 | + Лог.Отладка("Получим измененные файлы в конфигурации со времени последней загрузки."); |
| 245 | + СтрокаИзмененныхФайлов = ""; |
| 246 | + ПутьКФайлуЭталона = ОбъединитьПути(КорневойПутьПроекта, ПутьИсходников, ИмяФайлаLastUploadedConfigDumpInfo()); |
| 247 | + Если ФС.ФайлСуществует(ПутьКФайлуЭталона) Тогда |
| 248 | + СтрокаИзмененныхФайлов = МенеджерСборки.ПолучитьИзмененияКонфигурации(ПутьИсходников, ПутьКФайлуЭталона); |
218 | 249 | КонецЕсли;
|
219 | 250 |
|
220 | 251 | Возврат СтрокаИзмененныхФайлов;
|
221 |
| - |
222 | 252 | КонецФункции
|
223 | 253 |
|
| 254 | +Процедура УстановитьQuotepath(Репозиторий) |
| 255 | + Лог.Отладка("Проверим git config core.quotePath"); |
| 256 | + |
| 257 | + Если Не Нрег(СокрЛП(Репозиторий.ПолучитьНастройку("core.quotePath"))) = "false" Тогда |
| 258 | + Лог.Отладка("Для корректной работы <--git-increment> необходима настройка git config core.quotePath false"); |
| 259 | + Репозиторий.УстановитьНастройку("core.quotePath", "false", РежимУстановкиНастроекGit.Локально); |
| 260 | + КонецЕсли; |
| 261 | + |
| 262 | +КонецПроцедуры |
| 263 | + |
224 | 264 | Функция ПолучитьХэшПоследнегоЗагруженногоКоммита(Знач ПутьИсходников)
|
225 | 265 |
|
226 | 266 | ИмяФайла = ФайлПредыдущегоГитКоммита(ПутьИсходников).ПолноеИмя;
|
|
264 | 304 |
|
265 | 305 | КонецПроцедуры
|
266 | 306 |
|
| 307 | +Процедура ЗаписатьlastUploadedConfigDumpInfo(Знач ПутьИсходников) // BSLLS:LatinAndCyrillicSymbolInWord-off |
| 308 | + ИсходныйФайл = ОбъединитьПути(ПутьИсходников, "ConfigDumpInfo.xml"); |
| 309 | + ФайлПреемник = ОбъединитьПути(ПутьИсходников, ИмяФайлаLastUploadedConfigDumpInfo()); |
| 310 | + КопироватьФайл(ИсходныйФайл, ФайлПреемник); |
| 311 | +КонецПроцедуры |
267 | 312 | Функция СкорректироватьПутьКИзменениюФормы(СтрокаИзмененныхФайлов)
|
268 | 313 |
|
269 | 314 | Паттерн = "(.*Forms\/.*)\/Ext.*";
|
|
300 | 345 | Возврат "lastUploadedCommit.txt";
|
301 | 346 | КонецФункции
|
302 | 347 |
|
| 348 | +Функция ИмяФайлаLastUploadedConfigDumpInfo() |
| 349 | + Возврат "lastUploadedConfigDumpInfo.xml"; |
| 350 | +КонецФункции |
| 351 | + |
303 | 352 | Функция НовыйМенеджерСборки(ПараметрыКоманды)
|
304 | 353 |
|
305 | 354 | Если ПараметрыХранилища.РежимОбновления Тогда
|
|
327 | 376 |
|
328 | 377 | Лог.Информация("Запускаем обновление конфигурации из исходников...");
|
329 | 378 | Если ИнкрементальнаяЗагрузкаGit Тогда
|
330 |
| - СписокФайлов = ПолучитьСтрокуИзмененныхФайлов(ПутьКИсходникам); |
| 379 | + СписокФайлов = ПолучитьСтрокуИзмененныхФайлов(ПутьКИсходникам, МенеджерСборки); |
331 | 380 | Иначе
|
332 | 381 | СписокФайлов = "";
|
333 | 382 | КонецЕсли;
|
|
341 | 390 |
|
342 | 391 | Если ИнкрементальнаяЗагрузкаGit Тогда
|
343 | 392 | ЗаписатьХэшПоследнегоЗагруженногоКоммита(ПутьКИсходникам);
|
| 393 | + ЗаписатьlastUploadedConfigDumpInfo(ПутьКИсходникам); |
344 | 394 | КонецЕсли;
|
345 | 395 |
|
346 | 396 | Лог.Информация("Информационная база обновлена из исходников.");
|
|
0 commit comments