Skip to content

Добавил плагин robocopy #50

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 25, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 135 additions & 0 deletions src/Классы/roboCopy.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@

#Использовать logos
#Использовать tempfiles

Перем ВерсияПлагина;
Перем Лог;
Перем КомандыПлагина;


#Область Интерфейс_плагина

// Возвращает версию плагина
//
// Возвращаемое значение:
// Строка - текущая версия плагина
//
Функция Версия() Экспорт
Возврат "1.0.0";
КонецФункции

// Возвращает приоритет выполнения плагина
//
// Возвращаемое значение:
// Число - приоритет выполнения плагина
//
Функция Приоритет() Экспорт
Возврат 0;
КонецФункции

// Возвращает описание плагина
//
// Возвращаемое значение:
// Строка - описание функциональности плагина
//
Функция Описание() Экспорт
Возврат "(Windows-only) Плагин заменяет механизм переноса исходников из временного каталога в рабочий на robocopy, чтобы избежать ошибок с длиной пути к файлу";
КонецФункции

// Возвращает подробную справку к плагину
//
// Возвращаемое значение:
// Строка - подробная справка для плагина
//
Функция Справка() Экспорт
Возврат "Справка плагина";
КонецФункции

// Возвращает имя плагина
//
// Возвращаемое значение:
// Строка - имя плагина при подключении
//
Функция Имя() Экспорт
Возврат "roboCopy";
КонецФункции

// Возвращает имя лога плагина
//
// Возвращаемое значение:
// Строка - имя лога плагина
//
Функция ИмяЛога() Экспорт
Возврат "oscript.lib.gitsync.plugins.roboCopy";
КонецФункции

#КонецОбласти

#Область Подписки_на_события

Процедура ПриРегистрацииКомандыПриложения(ИмяКоманды, КлассРеализации, Парсер) Экспорт

Лог.Отладка("Ищу команду <%1> в списке поддерживаемых", ИмяКоманды);

Если КомандыПлагина.Найти(ИмяКоманды) = Неопределено Тогда
Возврат;
КонецЕсли;

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

Процедура ПриПолученииПараметров(ПараметрыКоманды, ДополнительныеПараметры) Экспорт

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

Процедура ПриОчисткеКаталогаРабочейКопии(КаталогРабочейКопии, СоответствиеИменФайловДляПропуска, СтандартнаяОбработка) Экспорт

СтандартнаяОбработка = Ложь;
Лог.Отладка("Удаляем файлы из каталога рабочей копии");
ВременныйКаталог = ПолучитьИмяВременногоФайла();
СоздатьКаталог(ВременныйКаталог);
Для Каждого ИмяФайлаДляПропуска Из СоответствиеИменФайловДляПропуска Цикл
Файл = Новый Файл(ОбъединитьПути(КаталогРабочейКопии, ИмяФайлаДляПропуска.Ключ));
НовыйФайл = Новый Файл(ОбъединитьПути(ВременныйКаталог, ИмяФайлаДляПропуска.Ключ));
Если Файл.Существует() Тогда
КопироватьФайл(Файл.ПолноеИмя, НовыйФайл.ПолноеИмя);
КонецЕсли;
КонецЦикла;
Команда = Новый Команда();
Команда.УстановитьКоманду("robocopy");
Команда.ДобавитьПараметр(ВременныйКаталог);
Команда.ДобавитьПараметр(КаталогРабочейКопии);
Команда.ДобавитьПараметр("/PURGE");
Команда.Исполнить();
Попытка
УдалитьФайлы(ВременныйКаталог);
Исключение
КонецПопытки;
КонецПроцедуры

Процедура ПриПеремещенииВКаталогРабочейКопии(КаталогРабочейКопии, КаталогВыгрузки, СтандартнаяОбработка) Экспорт

Лог.Отладка("Переношу исходники из %1 в %2", КаталогВыгрузки, КаталогРабочейКопии);

СтандартнаяОбработка = Ложь;

Команда = Новый Команда();
Команда.УстановитьКоманду("robocopy");
Команда.ДобавитьПараметр(КаталогВыгрузки);
Команда.ДобавитьПараметр(КаталогРабочейКопии);
Команда.ДобавитьПараметр("/E");
Команда.Исполнить();

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

#КонецОбласти

Процедура Инициализация()

ВерсияПлагина = "1.0.0";
Лог = Логирование.ПолучитьЛог(ИмяЛога());
КомандыПлагина = Новый Массив;
КомандыПлагина.Добавить("sync");

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

Инициализация();