Skip to content
This repository has been archived by the owner on May 25, 2021. It is now read-only.

Commit

Permalink
Команда migrate #21
Browse files Browse the repository at this point in the history
  • Loading branch information
nixel2007 committed Jan 25, 2018
1 parent dbf9a9a commit 9e9e7ac
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 13 deletions.
3 changes: 2 additions & 1 deletion src/cmd/ovm.os
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
КонсольноеПриложение.ДобавитьКоманду("list ls", "Вывести список установленных версий", Новый КомандаList());
КонсольноеПриложение.ДобавитьКоманду("run r", "Запустить исполняемый файл в окружении указанной версии", Новый КомандаRun());
КонсольноеПриложение.ДобавитьКоманду("which w", "Вывести путь к установленной версии OneScript", Новый КомандаWhich());

КонсольноеПриложение.ДобавитьКоманду("migrate", "Поместить установленный OneScript под контроль ovm", Новый КомандаMigrate());

КонсольноеПриложение.Запустить(АргументыКоманднойСтроки);

КонецПроцедуры
Expand Down
7 changes: 7 additions & 0 deletions src/cmd/Классы/КомандаMigrate.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт

АктиваторOneScript = Новый АктиваторOneScript();

АктиваторOneScript.ВыполнитьМиграцию();

КонецПроцедуры
89 changes: 77 additions & 12 deletions src/core/Классы/АктиваторOneScript.os
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,56 @@

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

Процедура ВыполнитьМиграцию() Экспорт

Если ЭтоWindows Тогда

Команда = Новый Команда;
Команда.УстановитьКоманду("where");
Команда.ДобавитьПараметр("oscript");

Команда.Исполнить();

ВыводКоманды = Команда.ПолучитьВывод();
ПутьКСистемномуOneScript = СтрПолучитьСтроку(ВыводКоманды, 1);
Если СтрНайти(ПутьКСистемномуOneScript, "ovm") > 0 Тогда
Возврат;
КонецЕсли;

ПутьКBinСистемногоOscript = Новый Файл(ПутьКСистемномуOneScript).Путь;

ПеременнаяPATH = ПолучитьПеременнуюСреды("PATH", РасположениеПеременнойСреды.Машина);
УстановитьПеременнуюСреды("PATH", "%OVM_OSCRIPTBIN%;" + ПеременнаяPATH, РасположениеПеременнойСреды.Машина);
УстановитьПеременнуюСреды("OVM_OSCRIPTBIN", ПутьКBinСистемногоOscript, РасположениеПеременнойСреды.Машина);

ТекстВычислениеPATH = "set PATH=%%OVM_OSCRIPTBIN%%;%%PATH%%";

Команда = Новый Команда;
Команда.УстановитьСтрокуЗапуска("REG ADD ""HKCU\Software\Microsoft\Command Processor"" /v Autorun /t REG_SZ /f /d """ + ТекстВычислениеPATH + """");
Команда.Исполнить();

Если Команда.ПолучитьКодВозврата() <> 0 Тогда
Сообщить(Команда.ПолучитьВывод());
КонецЕсли;

ПутьКФайлу = ОбъединитьПути(
СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ПрофильПользователя),
"Documents",
"WindowsPowerShell",
"profile.ps1"
);

ТекстВычислениеPATH = "set PATH=$OVM_OSCRIPTBIN;$PATH";
ДобавитьТекстВНовыйИлиИмеющийсяФайл(ТекстВычислениеPATH, ПутьКФайлу);

Иначе
Сообщение = "На *nix системах выполнение команды migrate не требуется.";
Сообщить(Сообщение);
Возврат;
КонецЕсли;

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

Процедура СоздатьСимЛинкНаКаталог(Знач Ссылка, Знач ПутьНазначения)

Если ФС.КаталогСуществует(Ссылка) Тогда
Expand Down Expand Up @@ -61,29 +111,44 @@
КонецЕсли;

Если ЭтоWindows Тогда
УстановитьПеременнуюСреды("PATH", ПеременнаяPATH + ";" + ПутьККаталогуBin, РасположениеПеременнойСреды.Пользователь);
УстановитьПеременнуюСреды("OVM_OSCRIPTBIN", ПутьККаталогуBin, РасположениеПеременнойСреды.Пользователь);
УстановитьПеременнуюСреды("PATH", "%OVM_OSCRIPTBIN%;" + ПеременнаяPATH, РасположениеПеременнойСреды.Пользователь);
Иначе
ТекстФайлаПрофиля = "export PATH=""" + ПутьККаталогуBin + ":$PATH""";
ПутьКФайлу = ОбъединитьПути(
СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ПрофильПользователя),
".profile"
);

ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу);
НайденныйТекстФайлаПрофиля = ЧтениеТекста.Прочитать();
ЧтениеТекста.Закрыть();
Если СтрНайти(НайденныйТекстФайлаПрофиля, ТекстФайлаПрофиля) <> 0 Тогда
Возврат;
КонецЕсли;

ЗаписьТекста = Новый ЗаписьТекста();
ЗаписьТекста.Открыть(ПутьКФайлу, , , Истина);
ДобавитьТекстВНовыйИлиИмеющийсяФайл(ТекстФайлаПрофиля, ПутьКФайлу);
КонецЕсли;

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

Процедура ДобавитьТекстВНовыйИлиИмеющийсяФайл(Знач ДобавляемыйТекст, Знач ПутьКФайлу)

Если НЕ ФС.ФайлСуществует(ПутьКФайлу) Тогда
Файл = Новый Файл(ПутьКФайлу);
ФС.ОбеспечитьКаталог(Файл.Путь);

ЗаписьТекста.ЗаписатьСтроку(ТекстФайлаПрофиля);
ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу);
ЗаписьТекста.Записать("");
ЗаписьТекста.Закрыть();

КонецЕсли;

ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу);
НайденныйДобавляемыйТекст = ЧтениеТекста.Прочитать();
ЧтениеТекста.Закрыть();
Если СтрНайти(НайденныйДобавляемыйТекст, ДобавляемыйТекст) <> 0 Тогда
Возврат;
КонецЕсли;

ЗаписьТекста = Новый ЗаписьТекста();
ЗаписьТекста.Открыть(ПутьКФайлу, , , Истина);

ЗаписьТекста.ЗаписатьСтроку(ДобавляемыйТекст);
ЗаписьТекста.Закрыть();

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

Процедура ПроверитьНаличиеИспользуемойВерсии(Знач ИспользуемаяВерсия, Знач ВыполнятьУстановкуПриНеобходимости)
Expand Down

0 comments on commit 9e9e7ac

Please sign in to comment.