Skip to content

Commit 710bf28

Browse files
committed
Merge pull request xDrivenDevelopment#55 from nixel2007/issue-41
Fix xDrivenDevelopment#41 В команду --git-precommit добавлена функциональность по удалению бинарных файлов обработок при коммите
2 parents 29bc2dd + 8f87695 commit 710bf28

File tree

3 files changed

+89
-4
lines changed

3 files changed

+89
-4
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,9 @@ oscript v8files-extractor.os ?
7070
Разбор файлов на исходники
7171
--help
7272
Показ этого экрана
73-
--git-precommit outputPath
73+
--git-precommit outputPath [--remove-orig-bin-files]
7474
Запустить чтение индекса из git и определить список файлов для разбора, разложить их и добавить исходники в индекс
75+
Если передан флаг --remove-orig-bin-files, обработанные файлы epf/ert будут удалены из индекса git
7576
--compile inputPath outputPath [--recursive]
7677
Собрать внешний файл/обработку.
7778
Если указан параметр --recursive, скрипт будет рекурсивно искать исходные коды отчетов и обработок в указанном каталоге и собирать их, повторяя структуру каталога

tests/v8files-extractor-test.os

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
ВсеТесты.Добавить("Тест_ДолженСоздатьРепозитарийГит");
2424
ВсеТесты.Добавить("Тест_ДолженПроверитьНастройкиРепозитарияГит");
2525
ВсеТесты.Добавить("Тест_ДолженОбработатьИзмененияИзГитДляКаталогаСВложеннымиКаталогами");
26+
ВсеТесты.Добавить("Тест_ДолженОбработатьИзмененияИзГитДляКаталогаСВложеннымиКаталогамиИУдалитьИзКеша");
2627
ВсеТесты.Добавить("Тест_ДолженСобратьФайлОбработкиИзЗаданнойПапки");
2728

2829
Возврат ВсеТесты;
@@ -168,6 +169,75 @@
168169

169170
КонецПроцедуры
170171

172+
Процедура Тест_ДолженОбработатьИзмененияИзГитДляКаталогаСВложеннымиКаталогамиИУдалитьИзКеша() Экспорт
173+
174+
КаталогПроекта = КаталогПроекта();
175+
176+
КаталогВыгрузки = ВременныеФайлы.СоздатьКаталог();
177+
178+
СоздатьРепозитарийГит(КаталогВыгрузки, КаталогПроекта);
179+
180+
КаталогХуков = ОбъединитьПути(КаталогВыгрузки, ".git", "hooks");
181+
ПутьКФайлуПрекоммит = ОбъединитьПути(КаталогХуков, "pre-commit");
182+
ТекстПрекоммит = Новый ТекстовыйДокумент;
183+
ТекстПрекоммит.Прочитать(ПутьКФайлуПрекоммит);
184+
185+
КоличествоСтрок = ТекстПрекоммит.КоличествоСтрок();
186+
Для сч = 1 По КоличествоСтрок Цикл
187+
188+
Строка = ТекстПрекоммит.ПолучитьСтроку(сч);
189+
ЭтоСтрокаЗапускаРаспаковщика = СтрНайти(Строка, "v8files-extractor.os --git-precommit") > 0;
190+
Если ЭтоСтрокаЗапускаРаспаковщика Тогда
191+
Строка = Строка + " --remove-orig-bin-files";
192+
ТекстПрекоммит.ЗаменитьСтроку(сч, Строка);
193+
Прервать;
194+
КонецЕсли;
195+
196+
КонецЦикла;
197+
ТекстПрекоммит.Записать(ПутьКФайлуПрекоммит, КодировкаТекста.UTF8NoBOM);
198+
199+
ФайлОбработки = ПолучитьФайлТестовойОбработки();
200+
201+
ИмяВложенногоКаталога = "1";
202+
203+
КаталогИсходников = ВременныеФайлы.СоздатьКаталог();
204+
205+
ВложенныйКаталогВыгрузки = ОбъединитьПути(КаталогВыгрузки, ИмяВложенногоКаталога);
206+
СоздатьКаталог(ВложенныйКаталогВыгрузки);
207+
208+
ПутьВложеннойОбработки = ОбъединитьПути(ВложенныйКаталогВыгрузки, ФайлОбработки.Имя);
209+
Лог.Отладка("ПутьВложеннойОбработки "+ПутьВложеннойОбработки);
210+
211+
КопироватьФайл(ФайлОбработки.ПолноеИмя, ПутьВложеннойОбработки);
212+
213+
ФайлВложеннойОбработки = Новый Файл(ПутьВложеннойОбработки);
214+
Ожидаем.Что(ФайлВложеннойОбработки.Существует(), "Должны были найти имя вложенной обработки").ЭтоИстина();
215+
Ожидаем.Что(ФайлВложеннойОбработки.ЭтоФайл(), "Должны были найти признак файла для вложенной обработки").ЭтоИстина();
216+
217+
КомандаГит = "git add -A .";
218+
ВыполнитьКомандуГит(КомандаГит);
219+
220+
КомандаГит = "git status";
221+
ВыполнитьКомандуГит(КомандаГит);
222+
223+
КомандаГит = "git commit -m ""init commit""";
224+
ВыводКоманды = ВыполнитьКомандуГит(КомандаГит);
225+
226+
// git использует "/" как разделитель каталогов, а не стандартный разделитель пути ОС
227+
СтрокаПоиска = "create mode 100644 " + ИмяВложенногоКаталога + "/" + ФайлОбработки.Имя;
228+
ФайлУдаленИзИндексаГит = СтрНайти(ВыводКоманды, СтрокаПоиска) = 0;
229+
Ожидаем.Что(ФайлУдаленИзИндексаГит, "ожидаем, что файла обработки удален из индекса git").ЭтоИстина();
230+
231+
КаталогИсходниковВложенногоКаталога = ОбъединитьПути(КаталогВыгрузки, "src", ИмяВложенногоКаталога);
232+
ФайлКаталогИсходниковВложенногоКаталога = Новый Файл(КаталогИсходниковВложенногоКаталога);
233+
Ожидаем.Что(ФайлКаталогИсходниковВложенногоКаталога.Существует(), "Должны были найти имя вложенного каталога").ЭтоИстина();
234+
Ожидаем.Что(ФайлКаталогИсходниковВложенногоКаталога.ЭтоКаталог(), "Должны были найти вложенный каталог").ЭтоИстина();
235+
236+
ПутьКаталогаВыгрузкиДляОбработки = ОбъединитьПути(КаталогИсходниковВложенногоКаталога, ФайлОбработки.ИмяБезРасширения);
237+
Ожидаем.Что(КаталогСодержитИсходникиОбработки(ПутьКаталогаВыгрузкиДляОбработки), "ожидаем, что КаталогСодержитИсходникиОбработки(ПутьКаталогаВыгрузкиДляОбработки) это Истина").ЭтоИстина();
238+
239+
КонецПроцедуры
240+
171241
Процедура Тест_ДолженРазобратьФайлыПоЖурналуИзмененийГит() Экспорт
172242

173243
ФайлОбработки = ПолучитьФайлТестовойОбработки();

v8files-extractor.os

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
ИначеЕсли Команда = ВозможныеКоманды().Помощь Тогда
6363
ВывестиСправку();
6464
ИначеЕсли Команда = ВозможныеКоманды().ОбработатьИзмененияИзГит Тогда
65-
ОбработатьИзмененияИзГит(Аргументы.ЗначенияПараметров["ВыходнойКаталог"]);
65+
ОбработатьИзмененияИзГит(Аргументы.ЗначенияПараметров["ВыходнойКаталог"], Аргументы.ЗначенияПараметров["--remove-orig-bin-files"]);
6666
ИначеЕсли Команда = ВозможныеКоманды().Компилировать Тогда
6767
Компилировать(
6868
Аргументы.ЗначенияПараметров["ПутьВходящихДанных"],
@@ -98,6 +98,7 @@
9898

9999
ОписаниеКоманды = Парсер.ОписаниеКоманды(ВозможныеКоманды().ОбработатьИзмененияИзГит);
100100
Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "ВыходнойКаталог");
101+
Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--remove-orig-bin-files");
101102
Парсер.ДобавитьКоманду(ОписаниеКоманды);
102103

103104
КонецПроцедуры
@@ -277,15 +278,16 @@
277278

278279
Сообщить(" --help");
279280
Сообщить(" Показ этого экрана");
280-
Сообщить(" --git-precommit outputPath");
281+
Сообщить(" --git-precommit outputPath [--remove-orig-bin-files]");
281282
Сообщить(" Запустить чтение индекса из git и определить список файлов для разбора, разложить их и добавить исходники в индекс");
283+
Сообщить(" Если передан флаг --remove-orig-bin-files, обработанные файлы epf/ert будут удалены из индекса git");
282284
Сообщить(" --compile inputPath outputPath [--recursive]");
283285
Сообщить(" Собрать внешний файл/обработку.");
284286
Сообщить(" Если указан параметр --recursive, скрипт будет рекурсивно искать исходные коды отчетов и обработок в указанном каталоге и собирать их, повторяя структуру каталога");
285287
КонецПроцедуры
286288

287289

288-
Процедура ОбработатьИзмененияИзГит(Знач ВыходнойКаталог) Экспорт
290+
Процедура ОбработатьИзмененияИзГит(Знач ВыходнойКаталог, Знач УдалятьФайлыИзИндексаГит) Экспорт
289291

290292
Если ПустаяСтрока(ВыходнойКаталог) Тогда
291293
ВыходнойКаталог = "src";
@@ -307,13 +309,25 @@
307309
Лог.Отладка("Получен из журнала git файл " + Файл);
308310
ПолныйПуть = ОбъединитьПути(КореньРепо, Файл);
309311
СписокНовыхКаталогов.Добавить(РазобратьФайл(Новый Файл(ПолныйПуть), КаталогИсходников, КореньРепо));
312+
Если УдалятьФайлыИзИндексаГит Тогда
313+
УдалитьФайлИзИндексаГит(ПолныйПуть);
314+
КонецЕсли;
310315
КонецЕсли;
311316
КонецЦикла;
312317

313318
ДобавитьИсходникиВГит(СписокНовыхКаталогов);
314319

315320
КонецПроцедуры
316321

322+
Процедура УдалитьФайлИзИндексаГит(Знач ПолныйПуть)
323+
Лог.Отладка("Удаляю файл из индекса");
324+
Вывод = ПолучитьВыводПроцесса("git rm --cached """ + ПолныйПуть + """", КодВозврата);
325+
Лог.Отладка("Вывод git rm --cached: " + Вывод);
326+
Если КодВозврата <> 0 Тогда
327+
ВызватьИсключение "Не удалось удалить файл из журнала изменений git";
328+
КонецЕсли;
329+
КонецПроцедуры
330+
317331
Процедура ПроверитьНастройкиРепозитарияГит() Экспорт
318332
Перем КодВозврата;
319333

0 commit comments

Comments
 (0)