diff --git a/GitConverter/src/CommonModules/КонвертацияХранилища/Module.bsl b/GitConverter/src/CommonModules/КонвертацияХранилища/Module.bsl index 7a97184..ea6c3c2 100644 --- a/GitConverter/src/CommonModules/КонвертацияХранилища/Module.bsl +++ b/GitConverter/src/CommonModules/КонвертацияХранилища/Module.bsl @@ -1443,33 +1443,20 @@ КонецПроцедуры -Процедура ВыгрузитьПоместитьКореньВОсновнойКаталог(Параметры, Знач КаталогФайловКонфигурации) +Процедура ВыгрузитьПоместитьКореньВОсновнойКаталог(ПараметрыОсновнойВыгрузки, Знач КаталогОсновнойВыгрузки) // Попробуем выгрузить корень отдельно - КаталогФайловКонфигурации = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогФайловКонфигурации); - ПараметрыВыгрузкиКорня = ОбщегоНазначенияКлиентСервер.СкопироватьРекурсивно(Параметры); + // Сначала выгружаем сам корень + КаталогОсновнойВыгрузки = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПараметрыОсновнойВыгрузки.КаталогФайловКонфигурации); - КаталогВыгрузкиКорня = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( - Параметры.КаталогВременныхФайлов) + "dump_configuration\"; - ИмяФайлаОбъектов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( - Параметры.КаталогВременныхФайлов) + "export_object_conf.txt"; - - Файл = Новый Файл(КаталогВыгрузкиКорня); - Если Файл.Существует() Тогда - УдалитьФайлы(КаталогВыгрузкиКорня); - КонецЕсли; - - ПараметрыВыгрузкиКорня.КаталогФайловКонфигурации = КаталогВыгрузкиКорня; - ПараметрыВыгрузкиКорня.Вставить("ВыгружатьПоСписку", Истина); - ПараметрыВыгрузкиКорня.Вставить("ФайлСпискаВыгрузки", ИмяФайлаОбъектов); - ПараметрыВыгрузкиКорня.ВыгружатьИзменения = Ложь; + ПостфиксКаталогаВыгрузки = "configuration"; - ЗаписьФайла = Новый ЗаписьТекста(ИмяФайлаОбъектов); - ЗаписьФайла.Записать("Configuration"); - ЗаписьФайла.Закрыть(); - СоздатьКаталог(КаталогВыгрузкиКорня); - - ВыгрузитьКонфигурациюВФайлы(ПараметрыВыгрузкиКорня); + ИменаМетаданныхКВыгрузке = Новый Массив(); // Массив Из Строка + ИменаМетаданныхКВыгрузке.Добавить("Configuration"); + + КаталогВыгрузкиКорня = ВыгрузитьОбъектыВКаталог(ПараметрыОсновнойВыгрузки, + ИменаМетаданныхКВыгрузке, + ПостфиксКаталогаВыгрузки); ФайлыКорняККопированию = НайтиФайлы(КаталогВыгрузкиКорня, "*.*", Ложь); Для Каждого ФайлКорняККопированию Из ФайлыКорняККопированию Цикл @@ -1478,33 +1465,36 @@ Продолжить; КонецЕсли; - ИтоговыйПуть = КаталогФайловКонфигурации + ФайлКорняККопированию.Имя; + ИтоговыйПуть = КаталогОсновнойВыгрузки + ФайлКорняККопированию.Имя; КопироватьФайл(ФайлКорняККопированию.ПолноеИмя, ИтоговыйПуть); КонецЦикла; - КаталогРасширенныхДанныхКорня = КаталогВыгрузкиКорня + "Ext"; - ФайлКаталогРасширенныхДанныхКорня = Новый Файл(КаталогРасширенныхДанныхКорня); + КаталогРасширенныхДанныхКорняИсточник = КаталогВыгрузкиКорня + "Ext"; + КаталогРасширенныхДанныхКорняПриемник = КаталогОсновнойВыгрузки + "Ext"; + ФайлКаталогРасширенныхДанныхКорня = Новый Файл(КаталогРасширенныхДанныхКорняИсточник); Если ФайлКаталогРасширенныхДанныхКорня.Существует() Тогда - - КаталогВыгруженныхРасширенныхФайловВыгрузки = КаталогВыгрузкиКорня + "Ext\"; - ПозицияВСтрокеРабочегоКаталога = СтрДлина(КаталогВыгруженныхРасширенныхФайловВыгрузки) + 1; - СоздатьКаталог(КаталогВыгруженныхРасширенныхФайловВыгрузки); - - КаталогРасширенныхФайловВыгрузки = КаталогФайловКонфигурации + "Ext\"; - - НайденныеРасширенныеФайлыКорня = НайтиФайлы(КаталогВыгруженныхРасширенныхФайловВыгрузки, "*.*", Истина); - Для Каждого РасширенныйФайлКорняИсточник Из НайденныеРасширенныеФайлыКорня Цикл - ИтоговоеИмя = КаталогФайловКонфигурации + Сред(РасширенныйФайлКорняИсточник.ПолноеИмя, - ПозицияВСтрокеРабочегоКаталога); - - Если РасширенныйФайлКорняИсточник.ЭтоКаталог() Тогда - СоздатьКаталог(ИтоговоеИмя); - Иначе - КопироватьФайл(РасширенныйФайлКорняИсточник.ПолноеИмя, ИтоговоеИмя); - КонецЕсли; - КонецЦикла; + СкопироватьКаталогЦеликом(КаталогРасширенныхДанныхКорняПриемник, КаталогРасширенныхДанныхКорняИсточник); КонецЕсли; + + // Теперь считываем из этого корня языки + // Если есть языки, выгружаем их и подкидываем туда в корень + ЯзыкиИзКорня = ЯзыкиИзКорняКонфигурации(КаталогВыгрузкиКорня + "Configuration.xml"); + Если ЯзыкиИзКорня.Количество() > 0 Тогда + ПостфиксКаталогаВыгрузки = "language"; + + ИменаМетаданныхКВыгрузке = Новый Массив(); // Массив Из Строка + ИменаМетаданныхКВыгрузке.Добавить("Configuration"); + + КаталогВыгрузкиЯзыков = ВыгрузитьОбъектыВКаталог(ПараметрыОсновнойВыгрузки, + ЯзыкиИзКорня, + ПостфиксКаталогаВыгрузки); + + КаталогИсточник = КаталогВыгрузкиЯзыков + "Languages"; + КаталогПриемник = КаталогОсновнойВыгрузки + "Languages"; + СкопироватьКаталогЦеликом(КаталогПриемник, КаталогИсточник); + КонецЕсли; + КонецПроцедуры // Загружает файлы конфигурации версии в проект EDT и составляет индекс @@ -4503,4 +4493,128 @@ КонецПроцедуры +Процедура СкопироватьКаталогЦеликом(Знач КаталогПриемник, Знач КаталогИсточник) + КаталогВыгруженныхРасширенныхФайловВыгрузки = КаталогИсточник; + ПозицияВСтрокеРабочегоКаталога = СтрДлина(КаталогВыгруженныхРасширенныхФайловВыгрузки) + 1; + + + КаталогРасширенныхФайловВыгрузки = КаталогПриемник; + СоздатьКаталог(КаталогРасширенныхФайловВыгрузки); + + НайденныеРасширенныеФайлыКорня = НайтиФайлы(КаталогВыгруженныхРасширенныхФайловВыгрузки, "*.*", Истина); + Для Каждого РасширенныйФайлКорняИсточник Из НайденныеРасширенныеФайлыКорня Цикл + ИтоговоеИмя = КаталогРасширенныхФайловВыгрузки + Сред(РасширенныйФайлКорняИсточник.ПолноеИмя, + ПозицияВСтрокеРабочегоКаталога); + + Если РасширенныйФайлКорняИсточник.ЭтоКаталог() Тогда + СоздатьКаталог(ИтоговоеИмя); + Иначе + КопироватьФайл(РасширенныйФайлКорняИсточник.ПолноеИмя, ИтоговоеИмя); + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +// Выгрузить объекты. +// +// Параметры: +// Параметры - см. ПолучитьПараметрыОбработкиВерсии +// МассивИменОбъектовМетаданных - Массив Из Строка - +// ПостфиксКаталога - Строка - Постфикс каталога. Не должен содержать запрещенных для файлов символов +// +// Возвращаемое значение: +// * Строка - Каталог выгрузки +Функция ВыгрузитьОбъектыВКаталог(ПараметрыОсновнойВыгрузки, МассивИменОбъектовМетаданных, ПостфиксКаталога) + + // Попробуем выгрузить корень отдельно + КаталогФайловКонфигурации = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогФайловКонфигурации); + ПараметрыВыгрузкиКорня = ОбщегоНазначенияКлиентСервер.СкопироватьРекурсивно(ПараметрыОсновнойВыгрузки); + + КаталогВыгрузки = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( + ПараметрыОсновнойВыгрузки.КаталогВременныхФайлов) + "dump_" + ПостфиксКаталога + "\"; + ИмяФайлаОбъектов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( + ПараметрыОсновнойВыгрузки.КаталогВременныхФайлов) + "export_object_" + ПостфиксКаталога + ".txt"; + + Файл = Новый Файл(КаталогВыгрузки); + Если Файл.Существует() Тогда + УдалитьФайлы(КаталогВыгрузки); + КонецЕсли; + + ПараметрыВыгрузкиКорня.КаталогФайловКонфигурации = КаталогВыгрузки; + ПараметрыВыгрузкиКорня.Вставить("ВыгружатьПоСписку", Истина); + ПараметрыВыгрузкиКорня.Вставить("ФайлСпискаВыгрузки", ИмяФайлаОбъектов); + ПараметрыВыгрузкиКорня.ВыгружатьИзменения = Ложь; + + ЗаписьФайла = Новый ЗаписьТекста(ИмяФайлаОбъектов); + Для Каждого ИмяМетаданных Из МассивИменОбъектовМетаданных Цикл + ЗаписьФайла.Записать(ИмяМетаданных); + КонецЦикла; + ЗаписьФайла.Закрыть(); + + СоздатьКаталог(КаталогВыгрузки); + + ВыгрузитьКонфигурациюВФайлы(ПараметрыВыгрузкиКорня); + + Возврат КаталогВыгрузки; + +КонецФункции + +// Языки из корня конфигурации. +// +// Параметры: +// ПутьККорню - Строка - +// +// Возвращаемое значение: +// Массив Из Строка - Языки из корня конфигурации +Функция ЯзыкиИзКорняКонфигурации(ПутьККорню) + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.ОткрытьФайл(ПутьККорню); + + МассивЯзыков = Новый Массив; + Если СпозиционироватьсяНаПодчиненныхОбъектах(ЧтениеXML) Тогда + ЗаполнитьПодчиненныеЯзыкиИзПодчиненныхОбъектов(ЧтениеXML, МассивЯзыков); + КонецЕсли; + ЧтениеXML.Закрыть(); + + Возврат МассивЯзыков; +КонецФункции + + +// Спозиционироваться на подчиненных объектах. +// +// Параметры: +// ЧтениеXML - ЧтениеXML - Чтение XML +// +// Возвращаемое значение: +// Булево - Спозиционироваться на подчиненных объектах +Функция СпозиционироватьсяНаПодчиненныхОбъектах(ЧтениеXML) + Пока ЧтениеXML.Прочитать() Цикл + Если ЧтениеXML.Имя = "ChildObjects" Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; +КонецФункции + +// Заполнить подчиненные языки из подчиненных объектов. +// +// Параметры: +// ЧтениеXML - ЧтениеXML - Чтение XML +// МассивЯзыков - Массив из Строка - Массив языков +Процедура ЗаполнитьПодчиненныеЯзыкиИзПодчиненныхОбъектов(ЧтениеXML, МассивЯзыков) + Пока ЧтениеXML.Прочитать() Цикл + Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента + И ЧтениеXML.Имя = "ChildObjects" Тогда + Возврат; + ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента + И ЧтениеXML.Имя = "Language" Тогда + ЧтениеXML.Прочитать(); + МассивЯзыков.Добавить(СтрШаблон("Language.%1", ЧтениеXML.Значение)); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + + #КонецОбласти