mirror of
https://github.com/1C-Company/GitConverter.git
synced 2025-01-12 01:22:25 +02:00
Merge pull request #12 from 1C-Company/features/issue-11
Features/issue #11
This commit is contained in:
commit
bd642a0f37
@ -21,7 +21,7 @@
|
|||||||
<defaultRoles>Role.АдминистраторСистемы</defaultRoles>
|
<defaultRoles>Role.АдминистраторСистемы</defaultRoles>
|
||||||
<defaultRoles>Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок</defaultRoles>
|
<defaultRoles>Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок</defaultRoles>
|
||||||
<vendor>Фирма "1С"</vendor>
|
<vendor>Фирма "1С"</vendor>
|
||||||
<version>1.0.3.1</version>
|
<version>1.0.4.1</version>
|
||||||
<updateCatalogAddress>http://downloads.v8.1c.ru/tmplts/</updateCatalogAddress>
|
<updateCatalogAddress>http://downloads.v8.1c.ru/tmplts/</updateCatalogAddress>
|
||||||
<help>
|
<help>
|
||||||
<pages>
|
<pages>
|
||||||
@ -97,6 +97,7 @@
|
|||||||
<enums>Enum.СостоянияВерсии</enums>
|
<enums>Enum.СостоянияВерсии</enums>
|
||||||
<reports>Report.СкоростьКонвертации</reports>
|
<reports>Report.СкоростьКонвертации</reports>
|
||||||
<dataProcessors>DataProcessor.РегламентныеИФоновыеЗадания</dataProcessors>
|
<dataProcessors>DataProcessor.РегламентныеИФоновыеЗадания</dataProcessors>
|
||||||
|
<dataProcessors>DataProcessor.КонвертацияВФорматEDT</dataProcessors>
|
||||||
<informationRegisters>InformationRegister.ИнформацияПользователей</informationRegisters>
|
<informationRegisters>InformationRegister.ИнформацияПользователей</informationRegisters>
|
||||||
<informationRegisters>InformationRegister.СостоянияВерсии</informationRegisters>
|
<informationRegisters>InformationRegister.СостоянияВерсии</informationRegisters>
|
||||||
</mdclass:Configuration>
|
</mdclass:Configuration>
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,766 @@
|
|||||||
|
|
||||||
|
#Область ОбработчикиСобытийФормы
|
||||||
|
|
||||||
|
&НаСервере
|
||||||
|
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||||||
|
|
||||||
|
ОтключитьРегламентныеЗадания = Истина;
|
||||||
|
ОтключитьКоммиты = Истина;
|
||||||
|
ОтключитьОчереди = Истина;
|
||||||
|
email = "anonimous@localhost";
|
||||||
|
ИмяПользователя = "Anonimous";
|
||||||
|
Комментарий = НСтр("ru = 'Конвертация в формат EDT'");
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&НаСервере
|
||||||
|
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
|
||||||
|
|
||||||
|
МассивНеПроверяемыхРеквизитов = Новый Массив;
|
||||||
|
|
||||||
|
СегментыПути = СтрРазделить(СокрЛП(ПутьКФайламEDT), ПолучитьРазделительПути());
|
||||||
|
Если СегментыПути.Количество() > 0 И НЕ ЗначениеЗаполнено(СегментыПути[СегментыПути.ВГраница()]) Тогда
|
||||||
|
СегментыПути.Удалить(СегментыПути.ВГраница());
|
||||||
|
КонецЕсли;
|
||||||
|
Путь = Новый Файл(ПутьКФайламEDT);
|
||||||
|
|
||||||
|
Если СегментыПути.Количество() = 0 ИЛИ НЕ Путь.Существует() ИЛИ НЕ Путь.ЭтоКаталог() Тогда
|
||||||
|
|
||||||
|
Сообщение = Новый СообщениеПользователю();
|
||||||
|
Сообщение.Текст = НСтр("ru = 'Не верный путь к файлам EDT';");
|
||||||
|
Сообщение.Сообщить();
|
||||||
|
Отказ = Истина;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если СегментыПути.Количество() > 0 И СегментыПути[СегментыПути.ВГраница()] <> "src" Тогда
|
||||||
|
Сообщение = Новый СообщениеПользователю();
|
||||||
|
Сообщение.Текст = НСтр("ru = 'Необходимо указать каталог к исходным файлам src';");
|
||||||
|
Сообщение.Сообщить();
|
||||||
|
Отказ = Истина;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если НЕ Отказ И ЗначениеЗаполнено(Хранилище) Тогда
|
||||||
|
КаталогВыгрузкиВРепозитории = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Хранилище, "КаталогВыгрузкиВРепозитории");
|
||||||
|
СегментыПутиВРепозитории = СтрРазделить(СокрЛП(КаталогВыгрузкиВРепозитории), ПолучитьРазделительПути());
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(КаталогВыгрузкиВРепозитории)
|
||||||
|
И СегментыПути.Количество() = 0 Тогда
|
||||||
|
|
||||||
|
Сообщение = Новый СообщениеПользователю();
|
||||||
|
Сообщение.Текст = НСтр("ru = 'Не корректный путь к каталога выгрузки в репозитории';");
|
||||||
|
Сообщение.Сообщить();
|
||||||
|
Отказ = Истина;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если НЕ Отказ И ЗначениеЗаполнено(КаталогВыгрузкиВРепозитории)
|
||||||
|
И СегментыПутиВРепозитории.Количество() > 0 И СегментыПути.Количество() > 2
|
||||||
|
И СегментыПути[СегментыПути.ВГраница()
|
||||||
|
- 1] <> СегментыПутиВРепозитории[СегментыПутиВРепозитории.ВГраница()] Тогда
|
||||||
|
|
||||||
|
Сообщение = Новый СообщениеПользователю();
|
||||||
|
Сообщение.Текст = НСтр("ru = 'Каталог проекта EDT не совпадает с каталогом выгрузки';");
|
||||||
|
Сообщение.Сообщить();
|
||||||
|
Отказ = Истина;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНеПроверяемыхРеквизитов);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область ОбработчикиСобытийЭлементовШапкиФормы
|
||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Процедура ХранилищеПриИзменении(Элемент)
|
||||||
|
|
||||||
|
ХранилищеПриИзмененииНаСервере();
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Процедура ИмяФайлаКомандыGitОткрытие(Элемент, СтандартнаяОбработка)
|
||||||
|
|
||||||
|
СтандартнаяОбработка = Ложь;
|
||||||
|
Если Не ЗначениеЗаполнено(ИмяФайлаКомандыGit) Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Текст = Новый ТекстовыйДокумент();
|
||||||
|
|
||||||
|
ИмяФайла = "";
|
||||||
|
ПрочитатьТекстовыйФайлНаСервере(ИмяФайлаКомандыGit, Текст, ИмяФайла, Истина);
|
||||||
|
|
||||||
|
Текст.Показать(ИмяФайла, ИмяФайла);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Процедура ИмяФайлаКомментарияОткрытие(Элемент, СтандартнаяОбработка)
|
||||||
|
|
||||||
|
СтандартнаяОбработка = Ложь;
|
||||||
|
Если Не ЗначениеЗаполнено(ИмяФайлаКомментария) Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Текст = Новый ТекстовыйДокумент();
|
||||||
|
|
||||||
|
ИмяФайла = "";
|
||||||
|
|
||||||
|
ПрочитатьТекстовыйФайлНаСервере(ИмяФайлаКомментария, Текст, ИмяФайла);
|
||||||
|
|
||||||
|
Текст.Показать(ИмяФайла, ИмяФайла);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Процедура ИмяФайлаЛогаОткрытие(Элемент, СтандартнаяОбработка)
|
||||||
|
|
||||||
|
СтандартнаяОбработка = Ложь;
|
||||||
|
Если Не ЗначениеЗаполнено(ИмяФайлаЛога) Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Текст = Новый ТекстовыйДокумент();
|
||||||
|
|
||||||
|
ИмяФайла = "";
|
||||||
|
|
||||||
|
ПрочитатьТекстовыйФайлНаСервере(ИмяФайлаЛога, Текст, ИмяФайла);
|
||||||
|
|
||||||
|
Текст.Показать(ИмяФайла, ИмяФайла);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область ОбработчикиКомандФормы
|
||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Процедура КонвертироватьВФорматEDT(Команда)
|
||||||
|
|
||||||
|
Если НЕ ПроверитьЗаполнение() Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонвертироватьВФорматEDTНаСервере();
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область СлужебныеПроцедурыИФункции
|
||||||
|
|
||||||
|
&НаСервере
|
||||||
|
Процедура КонвертироватьВФорматEDTНаСервере()
|
||||||
|
|
||||||
|
ОтключитьХранилище();
|
||||||
|
|
||||||
|
РеквизитыХранилища = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Хранилище, "КаталогВыгрузкиВерсий, ЛокальныйКаталогGit, КаталогВыгрузкиВРепозитории, АдресРепозиторияGit, ИмяВетки");
|
||||||
|
|
||||||
|
ПутьКИсходнымФайлам = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(РеквизитыХранилища.ЛокальныйКаталогGit);
|
||||||
|
|
||||||
|
ПутьКИсходнымФайлам = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКИсходнымФайлам
|
||||||
|
+ КонвертацияХранилища.КаталогВыгрузкиВРепозитории(РеквизитыХранилища));
|
||||||
|
Файл = Новый Файл(ПутьКИсходнымФайлам);
|
||||||
|
Если Не Файл.Существует() Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
СистемнаяИнформация = Новый СистемнаяИнформация;
|
||||||
|
ЭтоWindowsСервер = (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86
|
||||||
|
Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64);
|
||||||
|
|
||||||
|
СформироватьИменаФайлов(РеквизитыХранилища, ЭтоWindowsСервер);
|
||||||
|
|
||||||
|
ЗаписатьФайлыКонвертации(РеквизитыХранилища, ЭтоWindowsСервер);
|
||||||
|
|
||||||
|
ЗапуститьПриложение(?(ЭтоWindowsСервер, "", "bash ")
|
||||||
|
+ ИмяФайлаКомандыGit, РеквизитыХранилища.ЛокальныйКаталогGit, Истина);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
// Формирует имена файлов для конвертации
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// КаталогВыгрузкиВерсий - Строка - Каталог выгрузки версий проекта
|
||||||
|
// ЭтоWindowsСервер - Булево - признак ОС Windows
|
||||||
|
&НаСервере
|
||||||
|
Процедура СформироватьИменаФайлов(КаталогВыгрузкиВерсий, ЭтоWindowsСервер)
|
||||||
|
|
||||||
|
ИмяФайлаЛога = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогВыгрузкиВерсий)
|
||||||
|
+ "git_convert_to_edt_log" + ".txt";
|
||||||
|
ИмяФайлаКомандыGit = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогВыгрузкиВерсий)
|
||||||
|
+ "git_convert_to_edt" + ?(ЭтоWindowsСервер, ".bat", ".sh");
|
||||||
|
ИмяФайлаКомментария = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогВыгрузкиВерсий)
|
||||||
|
+ "git_convert_to_edt_comment" + ".txt";
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&НаСервере
|
||||||
|
Процедура ХранилищеПриИзмененииНаСервере()
|
||||||
|
|
||||||
|
Если ЗначениеЗаполнено(Хранилище) Тогда
|
||||||
|
СистемнаяИнформация = Новый СистемнаяИнформация;
|
||||||
|
ЭтоWindowsСервер = (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86
|
||||||
|
Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64);
|
||||||
|
|
||||||
|
КаталогВыгрузкиВерсий = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Хранилище, "КаталогВыгрузкиВерсий");
|
||||||
|
|
||||||
|
СформироватьИменаФайлов(КаталогВыгрузкиВерсий, ЭтоWindowsСервер);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
ИмяФайлаКомандыGit = "";
|
||||||
|
ИмяФайлаКомментария = "";
|
||||||
|
ИмяФайлаЛога = "";
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&НаСервере
|
||||||
|
Процедура ОтключитьХранилище()
|
||||||
|
|
||||||
|
ХранилищеОбъект = Хранилище.ПолучитьОбъект();
|
||||||
|
|
||||||
|
Если ОтключитьКоммиты Тогда
|
||||||
|
ХранилищеОбъект.ВыполнятьКоммиты = Ложь;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ОтключитьОчереди Тогда
|
||||||
|
ХранилищеОбъект.ОбрабатыватьВсеОчереди = Ложь;
|
||||||
|
ХранилищеОбъект.ЗапретитьИспользованиеОбщихОчередей = Истина;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ОтключитьРегламентныеЗадания Тогда
|
||||||
|
ХранилищеОбъект.ДополнительныеСвойства.Вставить("Использование", Ложь);
|
||||||
|
КонецЕсли;
|
||||||
|
ХранилищеОбъект.Записать();
|
||||||
|
Если ОтключитьРегламентныеЗадания Тогда
|
||||||
|
|
||||||
|
Запрос = Новый Запрос;
|
||||||
|
Запрос.Текст =
|
||||||
|
"ВЫБРАТЬ
|
||||||
|
| КопииХранилищКонфигурации.Ссылка
|
||||||
|
|ИЗ
|
||||||
|
| Справочник.КопииХранилищКонфигурации КАК КопииХранилищКонфигурации
|
||||||
|
|ГДЕ
|
||||||
|
| КопииХранилищКонфигурации.Владелец = &Хранилище
|
||||||
|
|ОБЪЕДИНИТЬ ВСЕ
|
||||||
|
|ВЫБРАТЬ
|
||||||
|
| ОчередиВыполнения.Ссылка
|
||||||
|
|ИЗ
|
||||||
|
| Справочник.ОчередиВыполнения КАК ОчередиВыполнения
|
||||||
|
|ГДЕ
|
||||||
|
| ОчередиВыполнения.Хранилище = &Хранилище";
|
||||||
|
|
||||||
|
Запрос.УстановитьПараметр("Хранилище", Хранилище);
|
||||||
|
|
||||||
|
РезультатЗапроса = Запрос.Выполнить();
|
||||||
|
|
||||||
|
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
|
||||||
|
|
||||||
|
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
|
||||||
|
ЗаданиеОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
|
||||||
|
ЗаданиеОбъект.ДополнительныеСвойства.Вставить("Использование", Ложь);
|
||||||
|
ЗаданиеОбъект.Записать();
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&НаСервере
|
||||||
|
Процедура ЗаписатьФайлыКонвертации(РеквизитыХранилища, ЭтоWindowsСервер)
|
||||||
|
|
||||||
|
ПутьКФайламEDT = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(СокрЛП(ПутьКФайламEDT));
|
||||||
|
ЛокальныйКаталогGit = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(РеквизитыХранилища.ЛокальныйКаталогGit);
|
||||||
|
|
||||||
|
ДлиннаПути = СтрДлина(ЛокальныйКаталогGit);
|
||||||
|
|
||||||
|
ПутьКИсходнымФайлам = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ЛокальныйКаталогGit
|
||||||
|
+ КонвертацияХранилища.КаталогВыгрузкиВРепозитории(РеквизитыХранилища));
|
||||||
|
Файл = Новый Файл(ПутьКИсходнымФайлам);
|
||||||
|
Если Не Файл.Существует() Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ФайлКоманды = Новый ТекстовыйДокумент;
|
||||||
|
|
||||||
|
Если ЭтоWindowsСервер Тогда
|
||||||
|
ТекстКоманды = "@ECHO OFF";
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
Иначе
|
||||||
|
ТекстКоманды = "#!/bin/bash";
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ТекстКоманды = ?(ЭтоWindowsСервер, "set ", "") + "LOGFILE=""%ФайлЛога%""";
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%ФайлЛога%", ИмяФайлаЛога);
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
|
||||||
|
Если ЭтоWindowsСервер Тогда
|
||||||
|
ТекстКомандыУстановкиКаталога = "cd /D ""%ЛокальныйКаталогGit%"" >> %LOGFILE%";
|
||||||
|
Иначе
|
||||||
|
ТекстКомандыУстановкиКаталога = "cd ""%ЛокальныйКаталогGit%"" >> %LOGFILE%";
|
||||||
|
КонецЕсли;
|
||||||
|
ТекстКомандыУстановкиКаталога = СтрЗаменить(ТекстКомандыУстановкиКаталога, "%ЛокальныйКаталогGit%",
|
||||||
|
РеквизитыХранилища.ЛокальныйКаталогGit);
|
||||||
|
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКомандыУстановкиКаталога);
|
||||||
|
|
||||||
|
Если ВыполнитьPushПослеКонвертации И ЗначениеЗаполнено(РеквизитыХранилища.АдресРепозиторияGit) Тогда
|
||||||
|
ТекстКоманды = "git pull >> %LOGFILE%";
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Переименования = Новый ТаблицаЗначений();
|
||||||
|
Переименования.Колонки.Добавить("Источник");
|
||||||
|
Переименования.Колонки.Добавить("Приемник");
|
||||||
|
|
||||||
|
РазделительПути = ПолучитьРазделительПути();
|
||||||
|
ШаблонExt = РазделительПути + "Ext" + РазделительПути;
|
||||||
|
|
||||||
|
// Перемещение файлов корня конфигурации
|
||||||
|
ПутьПоиска = ПутьКИсходнымФайлам + "Ext" + РазделительПути;
|
||||||
|
Файлы = НайтиФайлы(ПутьПоиска, "*", Истина);
|
||||||
|
Для Каждого Файл Из Файлы Цикл
|
||||||
|
Если Файл.ЭтоКаталог() Тогда
|
||||||
|
Продолжить;
|
||||||
|
КонецЕсли;
|
||||||
|
Источник = Сред(Файл.ПолноеИмя, ДлиннаПути);
|
||||||
|
Приемник = СтрЗаменить(Источник, ШаблонExt, РазделительПути + "Configuration" + РазделительПути);
|
||||||
|
|
||||||
|
Если Файл.Имя = "ClientApplicationInterface.xml" Тогда
|
||||||
|
Приемник = СтрЗаменить(Приемник, "ClientApplicationInterface.xml", "ClientApplicationInterface.cai");
|
||||||
|
ИначеЕсли Файл.Имя = "CommandInterface.xml" Тогда
|
||||||
|
Приемник = СтрЗаменить(Приемник, "CommandInterface.xml", "CommandInterface.cmi");
|
||||||
|
ИначеЕсли Файл.Имя = "HomePageWorkArea.xml" Тогда
|
||||||
|
Приемник = СтрЗаменить(Приемник, "HomePageWorkArea.xml", "HomePageWorkArea.hpwa");
|
||||||
|
ИначеЕсли Файл.Имя = "MainSectionCommandInterface.xml" Тогда
|
||||||
|
Приемник = СтрЗаменить(Приемник, "MainSectionCommandInterface.xml", "MainSectionCommandInterface.cmi");
|
||||||
|
ИначеЕсли Файл.Имя = "Picture.png" И (СтрНайти(Приемник, "MainSectionPicture") > 0 ИЛИ СтрНайти(Приемник, "Splash") > 0) Тогда
|
||||||
|
Приемник = СтрЗаменить(Приемник, РазделительПути + "Picture", "");
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
НоваяСтрока = Переименования.Добавить();
|
||||||
|
НоваяСтрока.Источник = Источник;
|
||||||
|
НоваяСтрока.Приемник = Приемник;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Файл = Новый Файл(ПутьКИсходнымФайлам + "Configuration.xml");
|
||||||
|
Если Файл.Существует() Тогда
|
||||||
|
НоваяСтрока = Переименования.Добавить();
|
||||||
|
НоваяСтрока.Источник = Сред(Файл.ПолноеИмя, ДлиннаПути);
|
||||||
|
НоваяСтрока.Приемник = СтрЗаменить(НоваяСтрока.Источник, "Configuration.xml", "Configuration" + РазделительПути + "Configuration.mdo");
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
СоответствиеТиповМакетов = СоответствиеТиповМакетов();
|
||||||
|
|
||||||
|
// Перемещение всех поддерживаемых типов
|
||||||
|
Для Каждого Контейнер Из ПоддерживаемыеКонтейнеры() Цикл
|
||||||
|
ПутьПоиска = ПутьКИсходнымФайлам + Контейнер + РазделительПути;
|
||||||
|
Файлы = НайтиФайлы(ПутьПоиска, "*", Истина);
|
||||||
|
|
||||||
|
Для Каждого Файл Из Файлы Цикл
|
||||||
|
Если Файл.ЭтоКаталог() Тогда
|
||||||
|
Продолжить;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Источник = Сред(Файл.ПолноеИмя, ДлиннаПути);
|
||||||
|
Приемник = СтрЗаменить(Источник, ШаблонExt, РазделительПути);
|
||||||
|
|
||||||
|
Если Файл.Имя = "Form.xml" Тогда
|
||||||
|
Приемник = СтрЗаменить(Приемник, Файл.Имя, "Form.form");
|
||||||
|
ИначеЕсли Файл.Имя = "Module.bsl" И СтрНайти(Приемник, РазделительПути + "Form" + РазделительПути + Файл.Имя) > 0 Тогда
|
||||||
|
Приемник = СтрЗаменить(Приемник, РазделительПути + "Form" + РазделительПути + Файл.Имя, РазделительПути + Файл.Имя);
|
||||||
|
ИначеЕсли Файл.Имя = "Template.xml" Тогда
|
||||||
|
ИмяФайлаМакета = Файл.ПолноеИмя;
|
||||||
|
СегментыИмени = СтрРазделить(ИмяФайлаМакета, РазделительПути);
|
||||||
|
Если СегментыИмени.Количество() > 3 Тогда
|
||||||
|
СегментыИмени.Удалить(СегментыИмени.ВГраница()); // Имя файла Template.xml
|
||||||
|
СегментыИмени.Удалить(СегментыИмени.ВГраница()); // Каталог Ext
|
||||||
|
ИмяФайлаМакета = СтрСоединить(СегментыИмени, РазделительПути) + ".xml";
|
||||||
|
ТипМакета = ПрочитатьТипМакета(ИмяФайлаМакета);
|
||||||
|
Расширение = "";
|
||||||
|
Если ЗначениеЗаполнено(ТипМакета) И СоответствиеТиповМакетов.Свойство(ТипМакета, Расширение) Тогда
|
||||||
|
Приемник = СтрЗаменить(Приемник, Файл.Имя, "Template." + Расширение);
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЕсли;
|
||||||
|
ИначеЕсли Файл.Имя = "Package.bin" И Контейнер = "XDTOPackages" Тогда
|
||||||
|
Приемник = СтрЗаменить(Приемник, Файл.Имя, "Package.xdto");
|
||||||
|
ИначеЕсли Файл.Имя = "WSDefinition.xml" И Контейнер = "WSReferences" Тогда
|
||||||
|
Приемник = СтрЗаменить(Приемник, Файл.Имя, "WsDefinitions.wsdl");
|
||||||
|
ИначеЕсли Файл.Имя = "Flowchart.xml" И Контейнер = "BusinessProcesses" Тогда
|
||||||
|
Приемник = СтрЗаменить(Приемник, Файл.Имя, "Flowchart.scheme");
|
||||||
|
ИначеЕсли Файл.Имя = "Rights.xml" И Контейнер = "Roles" Тогда
|
||||||
|
Приемник = СтрЗаменить(Приемник, Файл.Имя, "Rights.rights");
|
||||||
|
ИначеЕсли Файл.Расширение = ".xml" И Файл.ПолноеИмя = ПутьПоиска + Файл.Имя Тогда
|
||||||
|
Приемник = СтрЗаменить(Приемник, Файл.Имя, Файл.ИмяБезРасширения + РазделительПути + Файл.ИмяБезРасширения + ".mdo");
|
||||||
|
ИначеЕсли Файл.ИмяБезРасширения = "Picture" И Контейнер = "CommonPictures"
|
||||||
|
И СтрНайти(Приемник, РазделительПути + Файл.ИмяБезРасширения + РазделительПути + Файл.ИмяБезРасширения) > 0 Тогда
|
||||||
|
Приемник = СтрЗаменить(Приемник, РазделительПути + Файл.ИмяБезРасширения + РазделительПути + Файл.ИмяБезРасширения, РазделительПути + Файл.ИмяБезРасширения + "." + Файл.ИмяБезРасширения);
|
||||||
|
ИначеЕсли Файл.Имя = "Schedule.xml" И Контейнер = "ScheduledJobs" Тогда
|
||||||
|
Приемник = СтрЗаменить(Приемник, Файл.Имя, "Schedule.schedule");
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Источник <> Приемник Тогда
|
||||||
|
НоваяСтрока = Переименования.Добавить();
|
||||||
|
НоваяСтрока.Источник = Источник;
|
||||||
|
НоваяСтрока.Приемник = Приемник;
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЦикла;
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
// Перемещение подсистем
|
||||||
|
ПутьПоиска = ПутьКИсходнымФайлам + "Subsystems" + РазделительПути;
|
||||||
|
Файлы = НайтиФайлы(ПутьПоиска, "*", Истина);
|
||||||
|
Для Каждого Файл Из Файлы Цикл
|
||||||
|
Если Файл.ЭтоКаталог() Тогда
|
||||||
|
Продолжить;
|
||||||
|
КонецЕсли;
|
||||||
|
Источник = Сред(Файл.ПолноеИмя, ДлиннаПути);
|
||||||
|
Приемник = СтрЗаменить(Источник, ШаблонExt, РазделительПути);
|
||||||
|
|
||||||
|
Если Файл.Расширение = ".xml" И Файл.Имя <> "CommandInterface.xml" И Файл.Имя <> "Help.xml" Тогда
|
||||||
|
Приемник = СтрЗаменить(Приемник, Файл.Имя, Файл.ИмяБезРасширения + РазделительПути + Файл.ИмяБезРасширения + ".mdo");
|
||||||
|
ИначеЕсли Файл.Имя = "CommandInterface.xml" Тогда
|
||||||
|
Приемник = СтрЗаменить(Приемник, "CommandInterface.xml", "CommandInterface.cmi");
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Источник <> Приемник Тогда
|
||||||
|
НоваяСтрока = Переименования.Добавить();
|
||||||
|
НоваяСтрока.Источник = Источник;
|
||||||
|
НоваяСтрока.Приемник = Приемник;
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
// Перемещение неподдерживаемых метаданных в директорию unknown
|
||||||
|
ШаблонSRC = РазделительПути + "src" + РазделительПути;
|
||||||
|
ЗаменаSRC = РазделительПути + "unknown" + РазделительПути;
|
||||||
|
|
||||||
|
Для Каждого Контейнер Из НеПоддерживаемыеКонтейнеры() Цикл
|
||||||
|
ПутьПоиска = ПутьКИсходнымФайлам + Контейнер + РазделительПути;
|
||||||
|
Файлы = НайтиФайлы(ПутьПоиска, "*", Истина);
|
||||||
|
|
||||||
|
Для Каждого Файл Из Файлы Цикл
|
||||||
|
Если Файл.ЭтоКаталог() Тогда
|
||||||
|
Продолжить;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Источник = Сред(Файл.ПолноеИмя, ДлиннаПути);
|
||||||
|
Приемник = СтрЗаменить(Источник, ШаблонSRC, ЗаменаSRC);
|
||||||
|
|
||||||
|
Если Источник <> Приемник Тогда
|
||||||
|
НоваяСтрока = Переименования.Добавить();
|
||||||
|
НоваяСтрока.Источник = Источник;
|
||||||
|
НоваяСтрока.Приемник = Приемник;
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЦикла;
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Каталоги = Новый Соответствие();
|
||||||
|
|
||||||
|
Для Каждого Переименование Из Переименования Цикл
|
||||||
|
ТекстКоманды = "git mv -f "".%Источник%"" "".%Приемник%"" >> %LOGFILE%";
|
||||||
|
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Источник%", Переименование.Источник);
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Приемник%", Переименование.Приемник);
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
|
||||||
|
Сегменты = СтрРазделить(Переименование.Приемник, РазделительПути);
|
||||||
|
Если Сегменты.Количество() > 2 Тогда
|
||||||
|
Сегменты.Удалить(Сегменты.ВГраница());
|
||||||
|
Каталоги.Вставить(СтрСоединить(Сегменты, РазделительПути), Сегменты);
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
// Создать все отсутствующие директории в src
|
||||||
|
Для Каждого КлючИЗначение Из Каталоги Цикл
|
||||||
|
Каталог = Новый Файл(ЛокальныйКаталогGit + КлючИЗначение.Ключ);
|
||||||
|
Если НЕ Каталог.Существует() Тогда
|
||||||
|
СоздатьКаталогиРекурсивно(ЛокальныйКаталогGit, КлючИЗначение.Значение, РазделительПути);
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ТекстКоманды = "git commit -F ""%ИмяФайлаКомментария%"" --allow-empty-message --cleanup=verbatim >> %LOGFILE%";
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%ИмяФайлаКомментария%", ИмяФайлаКомментария);
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
|
||||||
|
// Удаляем исходную директорию src и копируем все файлы из EDT
|
||||||
|
Если ЭтоWindowsСервер Тогда
|
||||||
|
ТекстКоманды = "rmdir /S /Q ""%Приемник%"" >> %LOGFILE%";
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Приемник%", ПутьКИсходнымФайлам);
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
ТекстКоманды = "mkdir ""%Приемник%"" >> %LOGFILE%";
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Приемник%", ПутьКИсходнымФайлам);
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
Источник = СокрЛП(ПутьКФайламEDT);
|
||||||
|
Если Прав(Источник, 1) = ПолучитьРазделительПути() Тогда
|
||||||
|
Источник = Лев(Источник, СтрДлина(Источник) - 1);
|
||||||
|
КонецЕсли;
|
||||||
|
Приемник = СокрЛП(ПутьКИсходнымФайлам);
|
||||||
|
Если Прав(Приемник, 1) = ПолучитьРазделительПути() Тогда
|
||||||
|
Приемник = Лев(Приемник, СтрДлина(Приемник) - 1);
|
||||||
|
КонецЕсли;
|
||||||
|
ТекстКоманды = "robocopy ""%Источник%"" ""%Приемник%"" /E /NFL /NDL /NJH /NJS /NC /NS /NP >> %LOGFILE%";
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Источник%", Источник);
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Приемник%", Приемник);
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
Иначе
|
||||||
|
ТекстКоманды = "rm -rf ""%Приемник%"" >> %LOGFILE%";
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Приемник%", ПутьКИсходнымФайлам);
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
|
||||||
|
ТекстКоманды = "cp -Rf ""%Источник%"" ""%Приемник%"" >> %LOGFILE%";
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Источник%", ПутьКФайламEDT);
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Приемник%", ПутьКИсходнымФайлам);
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
// Копирование файла проекта, DT-INF и настроек
|
||||||
|
Если ЗначениеЗаполнено(РеквизитыХранилища.КаталогВыгрузкиВРепозитории) Тогда
|
||||||
|
ПутьКПроектуEDT = СтрЗаменить(ПутьКФайламEDT, ШаблонSRC, РазделительПути);
|
||||||
|
ПутьКПроекту = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(РеквизитыХранилища.ЛокальныйКаталогGit);
|
||||||
|
ПутьКПроекту = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКПроекту
|
||||||
|
+ РеквизитыХранилища.КаталогВыгрузкиВРепозитории);
|
||||||
|
|
||||||
|
Если ЭтоWindowsСервер Тогда
|
||||||
|
ТекстКоманды = "copy /Y ""%Источник%"" ""%Приемник%"" >> %LOGFILE%";
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Источник%", ПутьКПроектуEDT + ".project");
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Приемник%", ПутьКПроекту + ".project");
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
ТекстКоманды = "robocopy ""%Источник%"" ""%Приемник%"" /E /NFL /NDL /NJH /NJS /NC /NS /NP >> %LOGFILE%";
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Источник%", ПутьКПроектуEDT + ".settings");
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Приемник%", ПутьКПроекту + ".settings");
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
ТекстКоманды = "robocopy ""%Источник%"" ""%Приемник%"" /E /NFL /NDL /NJH /NJS /NC /NS /NP >> %LOGFILE%";
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Источник%", ПутьКПроектуEDT + "DT-INF");
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Приемник%", ПутьКПроекту + "DT-INF");
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
Иначе
|
||||||
|
ТекстКоманды = "cp -f ""%Источник%"" ""%Приемник%"" >> %LOGFILE%";
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Источник%", ПутьКПроектуEDT + ".project");
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Приемник%", ПутьКПроекту + ".project");
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
ТекстКоманды = "cp -Rf ""%Источник%"" ""%Приемник%"" >> %LOGFILE%";
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Источник%", ПутьКПроектуEDT + ".settings" + РазделительПути);
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Приемник%", ПутьКПроекту + ".settings" + РазделительПути);
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
ТекстКоманды = "cp -Rf ""%Источник%"" ""%Приемник%"" >> %LOGFILE%";
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Источник%", ПутьКПроектуEDT + "DT-INF" + РазделительПути);
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%Приемник%", ПутьКПроекту + "DT-INF" + РазделительПути);
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
|
||||||
|
// Все файлы новой версии добавляем в индекс
|
||||||
|
ТекстКоманды = "git add --all ./ >> %LOGFILE%";
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
|
||||||
|
ТекстКоманды = "git commit -F ""%ИмяФайлаКомментария%"" --allow-empty-message --cleanup=verbatim >> %LOGFILE%";
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%ИмяФайлаКомментария%", ИмяФайлаКомментария);
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
|
||||||
|
ФайлКомментария = Новый ТекстовыйДокумент;
|
||||||
|
ФайлКомментария.УстановитьТекст(Комментарий);
|
||||||
|
ФайлКомментария.Записать(ИмяФайлаКомментария, КодировкаТекста.UTF8);
|
||||||
|
|
||||||
|
// Выполнение регламентных действий с репозиторием, если необходимо
|
||||||
|
ТекстКоманды = "git gc --auto >> %LOGFILE%";
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
|
||||||
|
Если ВыполнитьPushПослеКонвертации И ЗначениеЗаполнено(РеквизитыХранилища.АдресРепозиторияGit) Тогда
|
||||||
|
ТекстКоманды = "git push -u origin %ИмяВетки% >> %LOGFILE%";
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%ИмяВетки%", РеквизитыХранилища.ИмяВетки);
|
||||||
|
ФайлКоманды.ДобавитьСтроку(ТекстКоманды);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если НЕ ЭтоWindowsСервер Тогда
|
||||||
|
ТекстКоманды = ФайлКоманды.ПолучитьТекст();
|
||||||
|
ТекстКоманды = СтрЗаменить(ТекстКоманды, "%LOGFILE%", "$LOGFILE");
|
||||||
|
ФайлКоманды.УстановитьТекст(ТекстКоманды);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если ЭтоWindowsСервер Тогда
|
||||||
|
ФайлКоманды.Записать(ИмяФайлаКомандыGit, КодировкаТекста.OEM);
|
||||||
|
Иначе
|
||||||
|
ФайлКоманды.Записать(ИмяФайлаКомандыGit, КодировкаТекста.Системная);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
// Создание отсутствующих каталогов рекурсивно
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// ЛокальныйКаталогGit - Начальный каталог проверки
|
||||||
|
// Сегменты - Массив - Сегменты пути в репозитории
|
||||||
|
// РазделительПути - Строка - Разделитель пути
|
||||||
|
&НаСервере
|
||||||
|
Процедура СоздатьКаталогиРекурсивно(ЛокальныйКаталогGit, Сегменты, РазделительПути)
|
||||||
|
Путь = ЛокальныйКаталогGit;
|
||||||
|
Для Каждого Сегмент Из Сегменты Цикл
|
||||||
|
Если НЕ ЗначениеЗаполнено(Сегмент) Тогда
|
||||||
|
Продолжить;
|
||||||
|
КонецЕсли;
|
||||||
|
Путь = Путь + Сегмент + РазделительПути;
|
||||||
|
Каталог = Новый Файл(Путь);
|
||||||
|
Если НЕ Каталог.Существует() Тогда
|
||||||
|
СоздатьКаталог(Путь);
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЦикла;
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
// Состав поддерживаемых контейнеров конфигурации
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Массив - список контейнеров
|
||||||
|
&НаСервере
|
||||||
|
Функция ПоддерживаемыеКонтейнеры()
|
||||||
|
|
||||||
|
Состав = Новый Массив;
|
||||||
|
Состав.Добавить("AccountingRegisters");
|
||||||
|
Состав.Добавить("AccumulationRegisters");
|
||||||
|
Состав.Добавить("CalculationRegisters");
|
||||||
|
Состав.Добавить("BusinessProcesses");
|
||||||
|
Состав.Добавить("Catalogs");
|
||||||
|
Состав.Добавить("ChartsOfAccounts");
|
||||||
|
Состав.Добавить("ChartsOfCalculationTypes");
|
||||||
|
Состав.Добавить("ChartsOfCharacteristicTypes");
|
||||||
|
Состав.Добавить("CommandGroups");
|
||||||
|
Состав.Добавить("CommonAttributes");
|
||||||
|
Состав.Добавить("CommonCommands");
|
||||||
|
Состав.Добавить("CommonForms");
|
||||||
|
Состав.Добавить("CommonModules");
|
||||||
|
Состав.Добавить("CommonPictures");
|
||||||
|
Состав.Добавить("CommonTemplates");
|
||||||
|
Состав.Добавить("Constants");
|
||||||
|
Состав.Добавить("DataProcessors");
|
||||||
|
Состав.Добавить("DefinedTypes");
|
||||||
|
Состав.Добавить("DocumentJournals");
|
||||||
|
Состав.Добавить("DocumentNumerators");
|
||||||
|
Состав.Добавить("Documents");
|
||||||
|
Состав.Добавить("Enums");
|
||||||
|
Состав.Добавить("EventSubscriptions");
|
||||||
|
Состав.Добавить("ExchangePlans");
|
||||||
|
Состав.Добавить("FilterCriteria");
|
||||||
|
Состав.Добавить("FunctionalOptions");
|
||||||
|
Состав.Добавить("FunctionalOptionsParameters");
|
||||||
|
Состав.Добавить("HTTPServices");
|
||||||
|
Состав.Добавить("InformationRegisters");
|
||||||
|
//Состав.Добавить("Languages"); // Перемещается в Configuration.mdo
|
||||||
|
Состав.Добавить("Reports");
|
||||||
|
Состав.Добавить("Roles");
|
||||||
|
Состав.Добавить("ScheduledJobs");
|
||||||
|
Состав.Добавить("SessionParameters");
|
||||||
|
Состав.Добавить("SettingsStorages");
|
||||||
|
Состав.Добавить("Sequences");
|
||||||
|
Состав.Добавить("StyleItems");
|
||||||
|
//Состав.Добавить("Subsystems"); // Обрабатывается отдельно
|
||||||
|
Состав.Добавить("Tasks");
|
||||||
|
Состав.Добавить("XDTOPackages");
|
||||||
|
Состав.Добавить("WSReferences");
|
||||||
|
Состав.Добавить("WebServices");
|
||||||
|
|
||||||
|
Возврат Состав;
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
|
||||||
|
// Состав не поддерживаемых контейнеров конфигурации
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Массив - список контейнеров
|
||||||
|
&НаСервере
|
||||||
|
Функция НеПоддерживаемыеКонтейнеры()
|
||||||
|
|
||||||
|
Состав = Новый Массив;
|
||||||
|
Состав.Добавить("ExternalDataSources");
|
||||||
|
Состав.Добавить("Interfaces");
|
||||||
|
Состав.Добавить("Styles");
|
||||||
|
|
||||||
|
Возврат Состав;
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Соответствие типов макетов и расширений файлов Template.*
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Структура - Соответствие типов и расширений
|
||||||
|
&НаСервере
|
||||||
|
Функция СоответствиеТиповМакетов()
|
||||||
|
Соответствие = Новый Структура;
|
||||||
|
|
||||||
|
Соответствие.Вставить("BinaryData", "bin");
|
||||||
|
Соответствие.Вставить("SpreadsheetDocument", "mxlx");
|
||||||
|
Соответствие.Вставить("DataCompositionSchema", "dcs");
|
||||||
|
Соответствие.Вставить("FileAwareTextDocument", "txt");
|
||||||
|
Соответствие.Вставить("HtmlDocument", "htmldoc");
|
||||||
|
Соответствие.Вставить("AddIn", "addin");
|
||||||
|
Соответствие.Вставить("GraphicalScheme", "scheme");
|
||||||
|
Соответствие.Вставить("GraphicalSchema", "scheme");
|
||||||
|
Соответствие.Вставить("ActiveDocument", "axdt");
|
||||||
|
Соответствие.Вставить("GeographicalSchema", "geos");
|
||||||
|
Соответствие.Вставить("DataCompositionAppearanceTemplate", "dcsat");
|
||||||
|
|
||||||
|
Возврат Соответствие;
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
&НаСервере
|
||||||
|
Функция ПрочитатьТипМакета(ИмяФайлаМакета)
|
||||||
|
|
||||||
|
Файл = Новый Файл(ИмяФайлаМакета);
|
||||||
|
Если НЕ Файл.Существует() Тогда
|
||||||
|
Возврат Неопределено;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ТипМакета = Неопределено;
|
||||||
|
|
||||||
|
ЧтениеXML = Новый ЧтениеXML();
|
||||||
|
ЧтениеXML.ОткрытьФайл(ИмяФайлаМакета);
|
||||||
|
|
||||||
|
Пока ЧтениеXML.Прочитать() Цикл
|
||||||
|
|
||||||
|
Если ЧтениеXML.Имя = "TemplateType" Тогда
|
||||||
|
ЧтениеXML.Прочитать();
|
||||||
|
Если ЧтениеXML.ИмеетЗначение Тогда
|
||||||
|
ТипМакета = ЧтениеXML.Значение;
|
||||||
|
КонецЕсли;
|
||||||
|
Прервать;
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ЧтениеXML.Закрыть();
|
||||||
|
|
||||||
|
Возврат ТипМакета;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
|
||||||
|
&НаСервереБезКонтекста
|
||||||
|
Процедура ПрочитатьТекстовыйФайлНаСервере(ПутьКФайлу, Текст, ИмяФайла, КодировкаСистемы = Ложь)
|
||||||
|
|
||||||
|
Файл = новый Файл(ПутьКФайлу);
|
||||||
|
ИмяФайла = Файл.Имя;
|
||||||
|
Если Файл.Существует() Тогда
|
||||||
|
Если КодировкаСистемы Тогда
|
||||||
|
СистемнаяИнформация = Новый СистемнаяИнформация;
|
||||||
|
ЭтоWindowsСервер = (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86
|
||||||
|
Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64);
|
||||||
|
Если ЭтоWindowsСервер Тогда
|
||||||
|
Текст.Прочитать(ПутьКФайлу, КодировкаТекста.OEM);
|
||||||
|
Иначе
|
||||||
|
Текст.Прочитать(ПутьКФайлу, КодировкаТекста.Системная);
|
||||||
|
КонецЕсли;
|
||||||
|
Иначе
|
||||||
|
Текст.Прочитать(ПутьКФайлу, КодировкаТекста.UTF8);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
#КонецОбласти
|
@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mdclass:DataProcessor xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="67e0b965-0c45-4581-92a0-c0a62357865a">
|
||||||
|
<producedTypes>
|
||||||
|
<objectType typeId="fbf85225-badf-4b91-b973-09794d91fafb" valueTypeId="a9789f99-a162-414b-8eec-7ad36832b1d3"/>
|
||||||
|
<managerType typeId="49ea87d8-a728-424e-b7f9-a54660829a7e" valueTypeId="0993d3aa-ff8b-4411-8f8b-39a24139f7ac"/>
|
||||||
|
</producedTypes>
|
||||||
|
<name>КонвертацияВФорматEDT</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Конвертация в формат EDT</value>
|
||||||
|
</synonym>
|
||||||
|
<useStandardCommands>true</useStandardCommands>
|
||||||
|
<defaultForm>DataProcessor.КонвертацияВФорматEDT.Form.Форма</defaultForm>
|
||||||
|
<forms uuid="9a2e455c-19d1-4220-a93a-e3cc78e9abe3">
|
||||||
|
<name>Форма</name>
|
||||||
|
<synonym>
|
||||||
|
<key>ru</key>
|
||||||
|
<value>Форма</value>
|
||||||
|
</synonym>
|
||||||
|
<usePurposes>PersonalComputer</usePurposes>
|
||||||
|
<usePurposes>MobileDevice</usePurposes>
|
||||||
|
</forms>
|
||||||
|
</mdclass:DataProcessor>
|
177
README.md
177
README.md
@ -1,24 +1,28 @@
|
|||||||
# 1С:ГитКонвертер
|
# 1С:ГитКонвертер
|
||||||
|
|
||||||
Конфигурация 1С, односторонняя синхронизация хранилища конфигураций 1С в репозиторий Git.
|
Конфигурация предназначена для односторонней синхронизации хранилища конфигурации "1С:Предприятия" с репозиторием Git и последующим переходом на разработку в [1C:Enterprise Development Tools (1C:EDT)](http://v8.1c.ru/overview/release_EDT_17/) с сохранением истории.
|
||||||
|
|
||||||
Корректное переименование истории объектов метаданных при переименовании их в хранилище 1С по UUID'дам.
|
Корректное переименование истории объектов метаданных при переименовании их в хранилище конфигураций "1С:Предприятия" по UUID'дам.
|
||||||
|
Git отслеживает контент файлов, а не пути файлов. В случае с выгрузкой 1С конфигурации - в ней присутствует множество файлов, очень похожих по контенту и именам (например `ФормаСписка.xml`), отличающихся только внутренним идентификатором (UUID). Поэтому если в одной версии хранилища были удалены одни объекты (файлы), добавлены и/или переименованы другие - в Git нужно явно сообщить, что удалять, несмотря на похожие файлы в других каталогах, а так же то, какие файлы переименовываются.
|
||||||
|
Таким образом, одна версия хранилища 1С может превращаться в 3 коммита: удаление файлов, переименование, и все остальные изменения контента в файлах и добавления файлов.
|
||||||
|
|
||||||
### Основные возможности
|
### Основные возможности
|
||||||
|
|
||||||
* Сконвертировать существующее хранилище 1С в репозиторий git
|
* Конвертирование существующего хранилища конфигурации 1С в репозиторий Git
|
||||||
* Обновлять изменения из хранилища в репозиторий
|
* Обновлять изменения из хранилища 1С в репозиторий Git
|
||||||
* Параллелизировать загрузку истории хранилища из копий хранилища
|
* Параллелизировать загрузку истории хранилища из копий хранилища
|
||||||
* Ограничение нагрузки на сервер с помощью очередей
|
* Ограничение нагрузки на сервер с помощью очередей
|
||||||
* Возможно "сращивать" историю в git, если хранилище 1С обрезалось или начиналось заново.
|
* Возможно "сращивать" историю в Git, если хранилище конфигураций "1С:Предприятия" обрезалось или начиналось заново.
|
||||||
* Сообщение гиту команды ```git mv старый_файл новый_файл``` при переименовании метаданных
|
* Сообщение гиту команды ```git mv старый_файл новый_файл``` при переименовании метаданных
|
||||||
* Выгружать только изменения конфигурации. Доступно для Платформы 8.3.10 и выше, требуется использовать "очереди"
|
* Выгружать только изменения конфигурации. Доступно для Платформы 8.3.10 и выше, требуется использовать "очереди"
|
||||||
|
* Создание сквозной история изменений для "хранилищ исправительных версий" если вы используете [Технологию разветвленной разработки конфигураций](https://its.1c.ru/db/v8std/content/2149184358/hdoc) или аналогичный процесс - хранилище версии можно загружать в "ветку" Git, получив сквозную историю в ветке.
|
||||||
|
* Конвертация репозитория выгрузки 1С:Предприятия в формат 1C:EDT с сохранением истории там, где это возможно
|
||||||
|
|
||||||
### Необходимые компоненты
|
### Необходимые компоненты
|
||||||
|
|
||||||
* Конфигурацию можно запустить, используя 1C:Enterprise Development Tools 1.7 (https://releases.1c.ru/project/DevelopmentTools10)
|
* Конфигурацию можно запустить, используя 1C:Enterprise Development Tools 1.7 (https://releases.1c.ru/project/DevelopmentTools10)
|
||||||
* Платформа 1С:Предприятия 8.3.11 и выше (https://releases.1c.ru/project/Platform83)
|
* Платформа 1С:Предприятия 8.3.11 и выше (https://releases.1c.ru/project/Platform83)
|
||||||
* СУБД поддерживаемая 1С:Предприятием
|
* СУБД, поддерживаемая 1С:Предприятием
|
||||||
* OS Windows 7 или выше, ОС Linux и macOS - в бета-режиме.
|
* OS Windows 7 или выше, ОС Linux и macOS - в бета-режиме.
|
||||||
|
|
||||||
## Начальная настройка
|
## Начальная настройка
|
||||||
@ -27,39 +31,39 @@
|
|||||||
|
|
||||||
1. Разместите базу ГитКонвертера на сервере 1С. Работа в файловом режиме может быть использована только в демонстрационных целях.
|
1. Разместите базу ГитКонвертера на сервере 1С. Работа в файловом режиме может быть использована только в демонстрационных целях.
|
||||||
2. Заполните константу __"Путь к версиям платформы на сервере"__, где располагаются файлы Конфигуратора 1cv8(.exe) в формате: `C:\Program files (x86)\1cv8\%ВерсияПлатформы%\bin`
|
2. Заполните константу __"Путь к версиям платформы на сервере"__, где располагаются файлы Конфигуратора 1cv8(.exe) в формате: `C:\Program files (x86)\1cv8\%ВерсияПлатформы%\bin`
|
||||||
%ВерсияПлатформы% - в параметр будет подставлена текущая версия хранилища.
|
где в параметр %ВерсияПлатформы% - будет подставлена текущая версия хранилища из настроек.
|
||||||
4. Для ограничения производительности можно включить константу __"Использовать очереди выполнения"__
|
4. Для ограничения производительности можно включить константу __"Использовать очереди выполнения"__ - количеством очередей можно балансировать нагрузку на сервер.
|
||||||
|
|
||||||
### Настройка сервера 1С
|
### Настройка сервера 1С
|
||||||
|
|
||||||
Для ИБ ГитКонвертера на сервере 1С необходимо переключить формат журнала регистрации на старый режим.
|
Для ИБ ГитКонвертера на сервере 1С рекомендуется настроить удаление, перенос в архив или полностью отключить журнал регистрации, т.к. интесивность событий в ИБ может быть очень высокой, а ценность истории ЖР за прошлые периоды - низкая.
|
||||||
|
|
||||||
Для этого необходимо в каталог журнала регистрации ИБ скопировать пустой файл с именем: __1Cv8.lgf__.
|
Для легкого удаления и архивирования ЖР можно переключить его формат на старый режим. Для этого необходимо в каталог журнала регистрации ИБ скопировать пустой файл с именем: __1Cv8.lgf__.
|
||||||
Для больших проектов рекомендуется настроить удаление или бэкапирование файлов журнала регистрации.
|
Для больших проектов рекомендуется выполнить такую настройку (удаление/бэкапирование файлов журнала регистрации).
|
||||||
|
|
||||||
Так же рекомендуется переключить регистрацию событий - только ошибки: __Конфигуратор - Администрирование - Настройка журнала регистрации... = Регистрировать ошибки__ с минимальной периодичностью.
|
Так же рекомендуется переключить регистрацию событий - только ошибки. Для этого следует выбрать команду __Конфигуратор - Администрирование - Настройка журнала регистрации... = Регистрировать ошибки__ и в открывшемся диалоге установить минимально необходимую вам периодичностью.
|
||||||
|
|
||||||
|
|
||||||
## Настройка конвертации хранилища 1С
|
## Настройка конвертации хранилища 1С
|
||||||
|
|
||||||
Рекомендуется использовать сервер хранилищ конфигураций 1С.
|
Рекомендуется использовать сервер хранилищ конфигураций 1С.
|
||||||
|
|
||||||
Для оптимальной работы сервера хранилищ настройте __Размер глобального кэша__ в "Администрировании" в 1,5-2 раза больше __количества__ параллельных потоков (если используются "копии хранилища") __получения версий * размер одной версии__.
|
Для оптимальной работы сервера хранилищ настройте __Размер глобального кэша__ в "Администрировании" в 1,5-2 раза больше __количества__ параллельных потоков (если используются "копии хранилища") __получения версий * размер одной версии, Мб__.
|
||||||
|
|
||||||
### Параметры конвертации
|
### Параметры конвертации
|
||||||
|
|
||||||
* Укажите адрес хранилища. При использовании сервера хранилища рекомендуется настроить в администрировании хранилища параметр "Глобальный кэш версий конфигурации" чтобы количество кэшированных версий было больше параллельно получаемых версий.
|
* Укажите адрес хранилища. При использовании сервера хранилища рекомендуется настроить в администрировании хранилища параметр "Глобальный кэш версий конфигурации" чтобы количество кэшированных версий было больше параллельно получаемых версий.
|
||||||
* Укажите версию платформы, рекомендуется использовать 8.3.9.1818 и выше.
|
* Укажите версию платформы, рекомендуется использовать 8.3.9.1818 и выше.
|
||||||
* Укажите начальную версию в хранилище, если текущее хранилище было обрезано и первая версия больше 1.
|
* Укажите начальную версию в хранилище конфигураций, если текущее хранилище было обрезано и первая версия больше 1.
|
||||||
* Если указана версия окончания - не будет выполняться запрос новых версий.
|
* Если указана версия окончания - не будет выполняться запрос новых версий.
|
||||||
* Укажите расписание запусков
|
* Укажите расписание запусков.
|
||||||
* Укажите __Каталог выгрузки версий__, в котором будут создаваться временные каталоги с номерами версий и выгрузкой данных.
|
* Укажите __Каталог выгрузки версий__, в котором будут создаваться временные каталоги с номерами версий и выгрузкой данных.
|
||||||
* Желательно ограничить количество подготавливаемых (выгружаемых) версий - рекомендуется установить значение исходя из __Размер базы с версией + Размер выгрузки в xml__ и размера жесткого диска.
|
* Желательно ограничить количество подготавливаемых (выгружаемых) версий - рекомендуется установить значение исходя из __Размер базы с версией + Размер выгрузки в xml__ и размера жесткого диска.
|
||||||
* Укажите __Минимальное количество метаданных__ - число файлов и каталогов выгрузки в xml - необходимо для контроля, что все файлы выгружены. Рекомендуется устанавливать 90-95% от текущей версии, чтобы учесть возможность удаления метаданных (т.е. сокращения количества файлов)
|
* Укажите __Минимальное количество метаданных__ - число файлов и каталогов выгрузки в xml - необходимо для контроля, что все файлы выгружены. Рекомендуется устанавливать 90-95% от текущей версии, чтобы учесть возможность удаления метаданных (т.е. сокращения количества файлов)
|
||||||
* Не рекомендуется устанавливать __Удаление конфигураций поставщиков__, если планируется загружать конфигурацию из файлов и обновлять конфигурации поставщиков. Опция позволяет оптимизировать размер хранилища git и не хранить объемные файлы *.cf.
|
* Не рекомендуется устанавливать __Удаление конфигураций поставщиков__, если планируется загружать конфигурацию из файлов и обновлять конфигурации поставщиков. Опция позволяет оптимизировать размер хранилища Git и не хранить объемные файлы *.cf.
|
||||||
* Установите __Удалять временные данные версии после коммита__ - рекомендуется на реальных проектах.
|
* Установите __Удалять временные данные версии после коммита__ - рекомендуется на реальных проектах.
|
||||||
* __Выгружать изменения__ - позволяет на Платформе 8.3.10 и выше выгружать только изменения. Доступно при использовании __"Очередей"__
|
* __Выгружать изменения__ - позволяет на Платформе 8.3.10 и выше выгружать только изменения. Доступно при использовании __"Очередей"__
|
||||||
* __Локальный каталог git__ рекомендуется указывать на одном логическом диске с __Каталогом выгрузки версий__ - будет использовано перемещение версий возможностями ОС, иначе будет выполняться копирование.
|
* __Локальный каталог Git__ рекомендуется указывать на одном логическом диске с __Каталогом выгрузки версий__ - будет использовано перемещение версий возможностями ОС, иначе будет выполняться копирование.
|
||||||
* __Каталог выгрузки в репозитории__ - относительный путь к каталогу выгрузки внутри репозитория. Рекомендуется указывать имя проекта для будущей совместимости с рабочим пространством 1C:EDT или оставить пустым.
|
* __Каталог выгрузки в репозитории__ - относительный путь к каталогу выгрузки внутри репозитория. Рекомендуется указывать имя проекта для будущей совместимости с рабочим пространством 1C:EDT или оставить пустым.
|
||||||
* Установите флаг __Выполнять коммиты__ для выполнения коммитов. Отключение может быть необходимо с целью временно приостановить работу конвертера.
|
* Установите флаг __Выполнять коммиты__ для выполнения коммитов. Отключение может быть необходимо с целью временно приостановить работу конвертера.
|
||||||
* Установите флаг __Обрабатывать все очереди__, если используются очереди в ИБ.
|
* Установите флаг __Обрабатывать все очереди__, если используются очереди в ИБ.
|
||||||
@ -70,7 +74,38 @@
|
|||||||
|
|
||||||
По умолчанию создается файл исключений __.gitignore__, в который добавляются файлы `DumpFilesIndex.txt` и `ConfigDumpInfo.xml` - не требуемые для работы с исходными файлами конфигурации 1С.
|
По умолчанию создается файл исключений __.gitignore__, в который добавляются файлы `DumpFilesIndex.txt` и `ConfigDumpInfo.xml` - не требуемые для работы с исходными файлами конфигурации 1С.
|
||||||
|
|
||||||
Для увеличения быстродействия репозитория git можно использовать расширение __git lfs__ (https://git-lfs.github.com)
|
Если репозиторий был создан с помощью кнопки в карточке хранилища, в локальный конфиг репозитория добавляются настройки для более комфортной работы:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git config --local core.quotepath false
|
||||||
|
git config --local gui.encoding utf-8
|
||||||
|
git config --local i18n.commitEncoding utf-8
|
||||||
|
git config --local diff.renameLimit 1
|
||||||
|
git config --local diff.renames false
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Символы окончания строк.
|
||||||
|
Если разработчики, работающие с репозиторием, используют разные операционные системы (Microsoft Windows, Linux, macOS), нужно настроить конвертацию символов окончания строк при чтении из репозитория. Следующие команды настраивают Git таким образом, что в рабочей копии разработчика будут использоваться "родные" для его операционной системы символы, а в репозитории всегда будет использоваться LF.
|
||||||
|
|
||||||
|
Для операционной системы Microsoft Windows:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git config --global core.autocrlf true
|
||||||
|
git config --global core.safecrlf true
|
||||||
|
```
|
||||||
|
|
||||||
|
Для операционных систем Linux и macOS:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git config --global core.autocrlf input
|
||||||
|
git config --global core.safecrlf true
|
||||||
|
```
|
||||||
|
|
||||||
|
Подробнее о назначении этих параметров вы можете прочитать в документации Git на английском языке [git config core.safecrlf](http://git-scm.com/docs/git-config#git-config-coresafecrlf) и [git config core.autocrlf](http://git-scm.com/docs/git-config#git-config-coreautocrlf).
|
||||||
|
|
||||||
|
#### Git LFS
|
||||||
|
|
||||||
|
Для увеличения быстродействия репозитория Git можно использовать расширение __git lfs__ (https://git-lfs.github.com)
|
||||||
|
|
||||||
Если используется сервер репозиториев Git, необходимо убедиться, что он поддерживает это расширение и включить настройки для проекта. Например, GitLab, GitHub, BitBucket - поддерживают.
|
Если используется сервер репозиториев Git, необходимо убедиться, что он поддерживает это расширение и включить настройки для проекта. Например, GitLab, GitHub, BitBucket - поддерживают.
|
||||||
|
|
||||||
@ -92,13 +127,20 @@ git lfs track "*.zip"
|
|||||||
```
|
```
|
||||||
В этом примере - все файлы конфигураций поставщиков, файлы макетов с "Двоичными данными" и картинки из конфигурации попадут в lfs.
|
В этом примере - все файлы конфигураций поставщиков, файлы макетов с "Двоичными данными" и картинки из конфигурации попадут в lfs.
|
||||||
|
|
||||||
|
Например, чтобы переносить в LFS только некоторые типы файлов с расширением `*.bin` можно включить отслеживание только шаблонов и модулей без исходного кода по маске:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git lfs track "*/Ext/Template.bin"
|
||||||
|
git lfs track "*/Ext/Module.bin"
|
||||||
|
```
|
||||||
|
|
||||||
### Копии хранилища
|
### Копии хранилища
|
||||||
|
|
||||||
Копии хранилища используются для ускорения получения версий из хранилища.
|
Копии хранилища используются для ускорения получения версий из хранилища.
|
||||||
|
|
||||||
* Возможно использовать тот же адрес серверного хранилища конфигураций, но с разными пользователями. Количество "копий" влияет на размер создаваемого глобального кэша версий на сервере хранилища 1С. Желательно установить кэш в настройках сервера хранилищ 1С в __полтора раза__ больше, чем количество копий в ГитКонвертере.
|
* Возможно использовать тот же адрес серверного хранилища конфигураций, но с разными пользователями. Количество "копий" влияет на размер создаваемого глобального кэша версий на сервере хранилища 1С. Желательно установить кэш в настройках сервера хранилищ 1С в __полтора раза__ больше, чем количество копий в ГитКонвертере.
|
||||||
|
|
||||||
* Укажите другой адрес архивной копии хранилища, если в текущем хранилище выполнялось сокращение версий, и установите ограничение номеров версий в этой копии.
|
* Укажите другой адрес архивной копии хранилища, если в текущем хранилище конфигураций выполнялось сокращение версий, и установите ограничение номеров версий в этой копии.
|
||||||
* Укажите расписание получения версий из этой копии. Если в "копии" указан адрес основного хранилища, необходимо в расписании учесть возможность работы разработчиков с хранилищем - запуски на получение выполнять с промежутками, обеспечивающими комфортную работу разработчиков.
|
* Укажите расписание получения версий из этой копии. Если в "копии" указан адрес основного хранилища, необходимо в расписании учесть возможность работы разработчиков с хранилищем - запуски на получение выполнять с промежутками, обеспечивающими комфортную работу разработчиков.
|
||||||
|
|
||||||
### Очереди выполнения
|
### Очереди выполнения
|
||||||
@ -116,8 +158,101 @@ git lfs track "*.zip"
|
|||||||
|
|
||||||
### Информация пользователей
|
### Информация пользователей
|
||||||
|
|
||||||
Хранилище 1С использует для идентификации __Пользователя__, а в репозитории git основным идентификатором является __email__ и имя пользователя. Для этих целей предназначен регистр сведений __Информация пользователей__, позволяющий указать соответствие пользователей хранилищ пользователям репозитория git.
|
Хранилище конфигураций "1С:Предприятия" использует для идентификации __Пользователя__, а в репозитории Git основным идентификатором является __email__ и имя пользователя. Для этих целей предназначен регистр сведений __Информация пользователей__, позволяющий указать соответствие пользователей хранилищ пользователям репозитория Git.
|
||||||
|
|
||||||
Можно выполнять коммиты анонимно, с потерей информации об авторстве. Пользователь хранилища будет указан в дополнении к комментарию к каждой версии.
|
Можно выполнять коммиты анонимно, с потерей информации об авторстве. Пользователь хранилища будет указан в дополнении к комментарию к каждой версии.
|
||||||
|
|
||||||
Пользователи могут быть указаны общие для всех хранилищ или с уточнением по хранилищам.
|
Пользователи могут быть указаны общие для всех хранилищ или с уточнением по хранилищам.
|
||||||
|
|
||||||
|
## Конвертация выгрузки 1С:Предприятия в формат 1C:Enterprise Development Tools
|
||||||
|
|
||||||
|
Выполнить конвертацию необходимо, если процесс разработки полностью переносится из __Хранилища конфигураций 1С__ в Git репозиторий.
|
||||||
|
|
||||||
|
__Внимание!__ Конвертация в формат 1C:EDT необратима, поэтому последующая синхронизация с хранилищем конфигураций "1С:Предприятия" невозможна. Конечно, можно сделать "checkout" на коммит до конвертации и продолжить конвертацию в другой ветке, или откатить все изменения с помощью `git reset --hard <sha_commit>` и т.д.
|
||||||
|
Можно так же, в тестовых целях, создать копию элемента справочника "Хранилищ" и копию репозитория - создать ветку и конвертировать в формат 1C:EDT, оставляя возможность синхронизировать хранилище конфигураций с основной веткой Git.
|
||||||
|
|
||||||
|
Структура каталогов выгрузки 1С:Предприятия и формата 1C:EDT похожи, но немного различаются. Для сохранения истории разработки в формате 1C:EDT запустите обработку __"Конвертация в формат EDT"__. Она выполняет перемещение файлов в соответствии с форматом 1C:EDT, выполняет коммит в гит, заменяет каталог `src` выгрузки 1С:Предприятия каталогом из 1C:EDT и выполняет второй коммит с изменением контента файлов.
|
||||||
|
Стоит отметить, что содержание xml-файлов 1C:EDT и 1С:Предприятия в некоторых случаях различается существенно, поэтому построчное авторство сохранить не удастся.
|
||||||
|
|
||||||
|
1. Откройте 1C:EDT в новом Workspace и выполните импорт конфигурации из файлов: __File -> Import -> 1C:Enterprise Development Tools -> Configuration Files__, указав директорию к фалам `Локальный каталог Git/Каталог выгрузки в репозитории/src/`.
|
||||||
|
2. Укажите имя проекта соответствующее __Каталогу выгрузки в репозитории__ из настроек, если изначально было указано. Настройки проекта будут скопированы в репозиторий.
|
||||||
|
* Если изначально каталог с именем проекта не был указан (ну забыли, не знали...) можно заполнить имя проекта в карточке хранилища и выполнить перемещение `git mv ./src ./ИмяПроектаEDT/src` и коммит `git commit -m "EDT project name"` вручную, до конвертации.
|
||||||
|
3. Дождитесь окончания импорта и конвертации в 1C:EDT.
|
||||||
|
4. Если использовали __Git LFS__ - убедитесь что типы файлов, вынесенные в __LFS__, после конвертации с новыми именами/расширениями так же попадут в __LFS__.
|
||||||
|
5. Выполните конвертацию репозитория с помощью обработки __Сервис -> Конвертация в формат EDT__, указав путь к папке __src__ c исходными файлами в workspace из 1C:EDT.
|
||||||
|
|
||||||
|
Если изначально был указан __"Каталог выгрузки в репозитории"__ соответствующий имени проекта, после конвертации можно открыть 1C:EDT в новом Workspace и выполнить импорт проекта из Git: __File -> Import -> Git -> Projects from Git__ и убедиться в корректности конвертации.
|
||||||
|
|
||||||
|
__Внимание!__ Рекомендуется читать документацию к 1C:EDT о настройках Git, работе с проектом, импорте и др.
|
||||||
|
|
||||||
|
Соответствие имен файлов формата выгрузки 1С:Предприятия и формата 1C:EDT
|
||||||
|
|
||||||
|
```
|
||||||
|
Configuration.xml -> Configuration.mdo
|
||||||
|
ClientApplicationInterface.xml -> ClientApplicationInterface.cai
|
||||||
|
CommandInterface.xml -> CommandInterface.cmi
|
||||||
|
HomePageWorkArea.xml -> HomePageWorkArea.hpwa
|
||||||
|
MainSectionCommandInterface.xml -> MainSectionCommandInterface.cmi
|
||||||
|
Form.xml -> Form.form
|
||||||
|
Template.xml -> Template.bin // BinaryData
|
||||||
|
Template.xml -> Template.mxlx // SpreadsheetDocument
|
||||||
|
Template.xml -> Template.dcs // DataCompositionSchema
|
||||||
|
Template.xml -> Template.txt // FileAwareTextDocument
|
||||||
|
Template.xml -> Template.htmldoc // HtmlDocument
|
||||||
|
Template.xml -> Template.addin // AddIn
|
||||||
|
Template.xml -> Template.scheme // GraphicalScheme
|
||||||
|
Template.xml -> Template.axdt // ActiveDocument
|
||||||
|
Template.xml -> Template.geos // GeographicalSchema
|
||||||
|
Template.xml -> Template.dcsat // DataCompositionAppearanceTemplate
|
||||||
|
Package.bin -> Package.xdto
|
||||||
|
WSDefinition.xml -> WsDefinitions.wsdl
|
||||||
|
Flowchart.xml -> Flowchart.scheme
|
||||||
|
Rights.xml -> Rights.rights
|
||||||
|
Schedule.xml -> Schedule.schedule
|
||||||
|
```
|
||||||
|
|
||||||
|
Другие файлы изменят имена не значительно, в соответствии с форматом 1C:EDT. Часть файлов (`Help.xml`, `Language.xml`, `Picture.xml`, `ФормаСписка.xml` и др.) будут удалены, т.к. контент файлов теперь хранится в составе других файлов.
|
||||||
|
|
||||||
|
## Если что-то пошло не так (FAQ)
|
||||||
|
|
||||||
|
#### Расписание конвертации включено, но список версий пуст
|
||||||
|
|
||||||
|
* Проверьте, что задана константа __"Путь к версиям платформы на сервере"__ и в настройках хранилища указана версия, соответствующая версии сервера хранилища конфигураций 1С:Предприятия.
|
||||||
|
* Проверьте файл логов `log.txt` в каталоге выгрузок - там может быть написано что-то вразумительное.
|
||||||
|
* Проверьте журнал регистрации базы 1С:ГитКонвертера - на наличие ошибок. Все мы - люди :)
|
||||||
|
|
||||||
|
#### Версии в списке ИБ 1С:ГитКонвертера есть, но конкретная версия зависла (зациклилась) на этапе выгрузки конфигурации в xml
|
||||||
|
|
||||||
|
* Можно посмотреть в лог пакетной операции для этой версии `/каталог выгрузки версий/ХХХ/log.txt` - пакетная операция Конфигуратора может сообщить что-то полезное
|
||||||
|
* Если база версии "развалилась" в контекстном меню формы списка версий __сбросить состояние__ версии - она будет получена заново из хранилища.
|
||||||
|
|
||||||
|
#### Версии обрабатываются, но не коммитятся в Git
|
||||||
|
|
||||||
|
* Проверьте, разрешен ли анонимный коммит в Git
|
||||||
|
* Проверьте список версий хранилища - красным подсвечиваются версии, для авторов которых не указана контактная информация в регистре "Информация пользователей"
|
||||||
|
* Нажмите кнопку "Выполнить коммиты" - для принудительного запуска коммитов обработанных версий в статусе "Метаданные загружены"
|
||||||
|
|
||||||
|
#### Коммиты не появляются на сервере Git
|
||||||
|
|
||||||
|
* Адрес Git-сервера был добавлен после создания хранилища? Нужно нажать кнопку "Установить адрес репозитория Git" чтобы настройки появились в config-файле.
|
||||||
|
* Откройте гит-клиент - проверьте, есть ли коммиты в локальном репозитории
|
||||||
|
* Посмотрите лог коммита на Git-сервер, расположенные `/каталог выгрузки версий/gi_log_ver_XXX.txt`
|
||||||
|
* Выполните команду `git push -u origin <branch name>` в консоли, чтобы проверить push вручную
|
||||||
|
* Проверьте права доступа для пользователя от которого запущен сервер 1С - от его имени выполняется запуск скриптов `*.bat/*.sh` и глобальные настройки Git для этого пользователя.
|
||||||
|
|
||||||
|
#### В какой-то версии произошел сбой и файлы версии закомичены не полностью
|
||||||
|
|
||||||
|
Т.е. в этой версии часть файлов или все были сначала удалены в репозитории, а следующая версия добавила файлы заново - сквозная история потерялась :(
|
||||||
|
|
||||||
|
* Можно установить контроль минимального количества файлов в выгрузке, чтобы такого не случалось в будущем.
|
||||||
|
* Т.к. это "односторонняя синхронизация" - то можно беспрепятственно откатить изменения `git reset --hard <commit>` на версию, до проблемной.
|
||||||
|
* Далее в карточке хранилища установить поле "Версия в Git" на текущую в Git.
|
||||||
|
* Для всех версий, начиная с "проблемной" и последующих, выполнить команду в контекстном меню "Сбросить состояние"
|
||||||
|
* В каталоге `src` удалить файлы `DumpFilesIndex.txt` и `ConfigDumpInfo.xml` т.к. они не хранятся в репозитории и не откатились.
|
||||||
|
* Проверить что командные файлы `*.bat` (или `*.sh`) удалены для всех версий, начиная с проблемной.
|
||||||
|
* Если была установлена настройка Git-сервера, необходимо на сервере отключить защиту ветки (если есть такое) и выполнить `git push -u -f origin <branch name>` принудительную передачу данных с заменой репозитория на сервере.
|
||||||
|
|
||||||
|
#### В хранилище версия есть, а в Git она пропущена
|
||||||
|
|
||||||
|
* Хранилище Конфигураций 1С:Предприятия позволяет сохранять новую версию без фактического изменения контента файлов, если меняется внутренняя версия объекта метаданных. Для Git в этом случае нечего коммитить.
|
||||||
|
* Откройте файлы логов и убедитесь в том, что версия была обработана корректно
|
||||||
|
Loading…
Reference in New Issue
Block a user