├── .gitignore ├── .travis.yml ├── .vscode └── settings.json ├── 1bdd.patch ├── LICENSE ├── README.md ├── features ├── install-with-alias.feature ├── install-with-clean.feature ├── integration.feature ├── list.feature └── step_definitions │ ├── install-with-alias.os │ ├── install-with-clean.os │ └── integration.os ├── lib.config ├── packagedef ├── sonar-project.properties ├── sonarlint.json ├── src ├── cmd │ ├── ovm.os │ ├── Классы │ │ ├── КомандаInstall.os │ │ ├── КомандаList.os │ │ ├── КомандаMigrate.os │ │ ├── КомандаRun.os │ │ ├── КомандаUninstall.os │ │ ├── КомандаUse.os │ │ └── КомандаWhich.os │ └── Модули │ │ └── ПараметрыПриложения.os └── core │ ├── Классы │ ├── АктиваторOneScript.os │ ├── ДеинсталляторOneScript.os │ └── УстановщикOneScript.os │ └── Модули │ ├── ВерсииOneScript.os │ ├── ЛогосАппендер.os │ └── ПараметрыOVM.os ├── tasks ├── coverage.os ├── oscript.cfg └── test.os └── travis.sh /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | oscript_modules/ 3 | 4 | src/cmd/oscript\.cfg 5 | ovm*.exe 6 | 7 | temp/ 8 | exec.log 9 | *.dll 10 | 11 | coverage/ 12 | 13 | junit-bdd\.xml 14 | 15 | \.sonar/ 16 | \.scannerwork 17 | \.sonarlint 18 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: required 2 | 3 | dist: trusty 4 | 5 | addons: 6 | sonarqube: true 7 | 8 | jdk: 9 | - oraclejdk8 10 | 11 | before_install: 12 | - sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF 13 | - echo "deb http://download.mono-project.com/repo/ubuntu trusty main" | sudo tee /etc/apt/sources.list.d/mono-official.list 14 | - sudo apt-get update 15 | - sudo apt-get install mono-complete mono-devel dos2unix 16 | - wget -O os.deb http://oscript.io/downloads/night-build/deb 17 | - sudo dpkg -i os.deb; sudo apt install -f 18 | - oscript 19 | 20 | install: 21 | - sudo opm install -l 22 | - sudo opm install -l 1bdd 23 | - sudo dos2unix oscript_modules/1bdd/features/lib/step_definitions/ВыполнениеКоманд.os 24 | - sudo patch oscript_modules/1bdd/features/lib/step_definitions/ВыполнениеКоманд.os 1bdd.patch 25 | - oscript -make src/cmd/ovm.os ovm.exe 26 | - echo -e "#!/bin/sh\nmono ./ovm.exe \"\$@\"" > ~/bin/ovm 27 | - chmod +x ~/bin/ovm 28 | - ovm 29 | 30 | cache: 31 | directories: 32 | - '$HOME/.m2/repository' 33 | - '$HOME/.sonar/cache' 34 | 35 | script: 36 | - ./travis.sh 37 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "language-1c-bsl.linterEntryPoint": "src/cmd/ovm.os", 3 | "gherkin-autocomplete.featureLibraries": [ 4 | "./oscript_modules/1bdd/features/lib" 5 | ] 6 | } -------------------------------------------------------------------------------- /1bdd.patch: -------------------------------------------------------------------------------- 1 | --- "oscript_modules/1bdd/features/lib/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.os" 2018-02-12 23:10:32.803504300 +0300 2 | +++ "oscript_modules/1bdd/features/lib/step_definitions/\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\232\320\276\320\274\320\260\320\275\320\264.1.os" 2018-02-12 23:40:38.614734300 +0300 3 | @@ -14,7 +14,7 @@ 4 | ВсеШаги.Добавить("ЯОчищаюПараметрыКомандыВКонтексте"); 5 | ВсеШаги.Добавить("ЯВключаюОтладкуЛогаСИменем"); 6 | ВсеШаги.Добавить("ЯВыключаюОтладкуЛогаСИменем"); 7 | - ВсеШаги.Добавить("ЯВыполняюКоманду"); 8 | + // ВсеШаги.Добавить("ЯВыполняюКоманду"); 9 | ВсеШаги.Добавить("ВыводКомандыСодержит"); 10 | ВсеШаги.Добавить("КодВозвратаКомандыРавен"); 11 | ВсеШаги.Добавить("ЯВыполняюКомандуCПараметрами"); 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2018, SilverBulleters, LLC 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | * Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | * Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | * Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | **Важно!** Этот репозиторий устарел! Разработка и выпуск релизов ведется в репозитории 2 | 3 | # https://github.com/oscript-library/ovm 4 | 5 | 6 | 7 | # OneScript Version Manager 8 | 9 | ## Цель 10 | 11 | ovm - утилита, предназначенная для установки, обновления и переключения между различными версиями OneScript. Вдохновение черпается из nvm (node.js version manager) 12 | 13 | ## Пререквизиты 14 | 15 | * Установленный `.Net Framework >=4.5.2` либо `Mono >=4.6` 16 | * Работающий интернет 17 | 18 | ## Установка 19 | 20 | Для упрощения миграции на ovm перед установкой рекомендуется удалить системный OneScript и выполнить выход из системы/вход в систему. 21 | 22 | ### Windows 23 | 24 | * Скачать `ovm.exe` со страницы [страницы релизов GitHub](https://github.com/silverbulleters/ovm/releases) 25 | * По желанию прописать путь к ovm.exe в переменной окружения `PATH` 26 | 27 | Если на машине установлен OneScript из msi и/или путь к установленному OneScript прописан в `PATH`, то перед началом использования `ovm` необходимо один раз в консоли с административными правами выполнить команду `ovm migrate`, после чего **перезапустить консоль**. 28 | 29 | ### Linux 30 | 31 | * Скачать `ovm.exe` со страницы [страницы релизов GitHub](https://github.com/silverbulleters/ovm/releases) 32 | * Для быстрого использования приложения можно создать sh-файл со следующим содержанием: 33 | 34 | ```sh 35 | mono path/to/ovm.exe "$@" 36 | ``` 37 | 38 | и добавить его в `$PATH` (например, в `~/.local/share/bin`) 39 | 40 | ## Поддержка различных терминалов 41 | 42 | Для каждого из терминалов активация ovm выглядит по-разному. После выполнения первичной активации в большинстве случаев необходимо переоткрыть текущий терминал (это надо сделать один раз). Для перечисленных ниже терминалов действия по активации происходят **автоматически**. 43 | 44 | ### cmd (Windows) 45 | 46 | При выполнении команды `ovm migrate` (только при наличии системной установки OneScript): 47 | 48 | создается запись в реестре по адресу `HKCU\Software\Microsoft\Command Processor\Autorun` следующего содержания: 49 | 50 | ```cmd 51 | set PATH=%OVM_OSCRIPTBIN%;%PATH% 52 | ``` 53 | 54 | ### powershell (Windows) 55 | 56 | При выполнении команды `ovm migrate` (только при наличии системной установки OneScript): 57 | 58 | создается файл (либо добавляется в существующий) по адресу `%USERPROFILE%\Documents\WindowsPowerShell\profile.ps1` со следующим содержанием: 59 | 60 | ```powershell 61 | set PATH=$OVM_OSCRIPTBIN;$PATH 62 | ``` 63 | 64 | ### sh (*nix) 65 | 66 | При первичной активации версии OneScript: 67 | 68 | создается файл (либо добавляется в существующий) по адресу `$HOME/.profile` со следующим содержанием: 69 | 70 | ```sh 71 | export $HOME/.local/share/ovm/current/bin:$PATH 72 | ``` 73 | 74 | ### bash (*nix) 75 | 76 | При первичной активации версии OneScript: 77 | 78 | создается файл (либо добавляется в существующий) по адресу `$HOME/.bashrc` со следующим содержанием: 79 | 80 | ```bash 81 | export $HOME/.local/share/ovm/current/bin:$PATH 82 | ``` 83 | 84 | ### Другие терминалы 85 | 86 | Автоматическая активация ovm в других терминалах не гарантируется. Чаще всего она будет делаться по аналогии (в конфигурационных файлах), либо в настройках самого терминала. 87 | 88 | Для `ConEmu` активация производится через `Settings` -> `Startup` -> `Environment`. В метод установки PATH необходимо добавить путь к %OVM_OSCRIPTBIN% перед текущим `%PATH%`. Например, `set PATH=%OVM_OSCRIPTBIN%;%PATH%` 89 | 90 | ## Использование 91 | 92 | ovm - утилита командной строки, основанная на библиотеке [cli](https://github.com/khorevaa/cli). Утилита содержит несколько команд с различными аргументами и опциями. Каждая команда имеет длинное имя и короткий алиас. Каждый аргумент или опция могут быть установлены из переменных окружения либо указаны непосредственно в командной строке. Более подробно - в справке по библиотеке [cli](https://github.com/khorevaa/cli). 93 | 94 | ### Установка OneScript 95 | 96 | Установка OneScript производится в пользовательский каталог, не захламляя общее системное пространство. 97 | 98 | ```sh 99 | ovm install dev # Установить последнюю ночную сборку 100 | ovm install dev stable 1.0.19 # Установить стабильную, ночную сборки и версию 1.0.19 101 | 102 | ovm use --install dev # Активировать ночную сборку и установить, если ее нет 103 | ``` 104 | 105 | ### Активация OneScript 106 | 107 | Для запуска `oscript` и прочих утилит без указания путей к ним необходимо произвести активацию версии OneScript. При этом в каталоге данных `ovm` создастся специальная символическая ссылка `current`, ведущая на активированную версию. 108 | 109 | ```sh 110 | ovm use dev # Активировать ранее установленную версию dev (ночную сборку) 111 | ovm use --install dev # установить (если ее нет) и активировать версию dev 112 | ``` 113 | 114 | ### Удаление OneScript 115 | 116 | ```sh 117 | ovm delete 1.0.19 # Удалить установленную версию 1.0.19 118 | ``` 119 | 120 | ### Вывод установленных версий OneScript 121 | 122 | ```sh 123 | $ ovm ls # Вывод установленных версий 124 | 125 | 1.0.19 -> 1.0.19.105 (C:\Users\NikitaGryzlov\AppData\Local\ovm\1.0.19) 126 | current -> 1.0.20.160 (C:\Users\NikitaGryzlov\AppData\Local\ovm\current) 127 | dev -> 1.0.20.160 (C:\Users\NikitaGryzlov\AppData\Local\ovm\dev) 128 | ``` 129 | 130 | ```sh 131 | $ ovm ls --remote # Вывод версий, доступных к установке с сайта 132 | 133 | 1.0.19 (http://oscript.io/downloads/archive/1_0_19) 134 | 1.0.18 (http://oscript.io/downloads/archive/1_0_18) 135 | ``` 136 | 137 | ```sh 138 | $ ovm ls --all # Вывод всех версий - установленных и доступных 139 | 140 | 1.0.18 -> 1.0.18.101 -> C:\Users\NikitaGryzlov\AppData\Local\ovm\1.0.18 -> http://oscript.io/downloads/archive/1_0_18 141 | 1.0.19 -> 1.0.19.105 -> C:\Users\NikitaGryzlov\AppData\Local\ovm\1.0.19 -> http://oscript.io/downloads/archive/1_0_19 142 | current -> 1.0.20.160 -> C:\Users\NikitaGryzlov\AppData\Local\ovm\current -> unknown 143 | dev -> 1.0.20.160 -> C:\Users\NikitaGryzlov\AppData\Local\ovm\dev -> http://oscript.io/downloads 144 | stable -> unknown -> not installed -> http://oscript.io/downloads 145 | ``` 146 | 147 | ### Запуск приложений в окружении конкретной версии 148 | 149 | ovm позволяет запускать приложения в окружении конкретной установленной версии OneScript. При этом происходит доустановка переменной окружения `PATH` к каталогу указанной версии. 150 | 151 | ```sh 152 | $ ovm run 1.0.19 oscript -version # Выполнение команды oscript -version в окружении 1.0.19 153 | 154 | 1.0.19.105 155 | ``` 156 | 157 | ```sh 158 | $ ovm run 1.0.19 where oscript # Вывод сторонней команды where в окружении 1.0.19 159 | 160 | C:\Users\NikitaGryzlov\AppData\Local\ovm\1.0.19\bin\oscript.exe # Путь к 1.0.19 указывается раньше, чем путь к current, благодаря запуску ovm run 161 | C:\Users\NikitaGryzlov\AppData\Local\ovm\current\bin\oscript.exe 162 | ``` 163 | 164 | ### Получение пути к исполняемому файлу oscript 165 | 166 | ```sh 167 | $ ovm which 1.0.19 168 | 169 | C:\Users\NikitaGryzlov\AppData\Local\ovm\1.0.19\bin\oscript.exe 170 | ``` 171 | 172 | ## Вывод команды ovm 173 | 174 | ``` 175 | Приложение: ovm 176 | OneScript Version Manager v1.0.0 177 | 178 | Строка запуска: ovm [OPTIONS] КОМАНДА [аргументы...] 179 | 180 | Опции: 181 | -v, --version показать версию и выйти 182 | 183 | Доступные команды: 184 | install, i Установить OneScript указанных версий 185 | use, u Использовать OneScript указанной версии 186 | uninstall, delete, d Удалить OneScript указанных версий 187 | list, ls Вывести список установленных и/или доступных версий OneScript 188 | run, r Запустить исполняемый файл в окружении указанной версии OneScript 189 | which, w Вывести путь к установленной версии OneScript 190 | migrate Поместить установленный системный OneScript под контроль ovm. Только для Windows 191 | 192 | Для вывода справки по доступным командам наберите: ovm КОМАНДА --help 193 | ``` 194 | -------------------------------------------------------------------------------- /features/install-with-alias.feature: -------------------------------------------------------------------------------- 1 | #language: ru 2 | 3 | Функциональность: Установка движка с алиасом 4 | 5 | Как разработчик библиотек 6 | Я иметь возможность установить несколько версий одного и того же движка 7 | Чтобы тестировать свою библиотеку с разным набором системных пакетов 8 | 9 | Контекст: 10 | Допустим Я устанавливаю переменной среды "OVM_INSTALL_PATH" значение "./temp/ovm" 11 | 12 | Сценарий: Установка версии с алиасом 13 | Допустим Я удаляю каталог "./temp/ovm" 14 | Когда Я выполняю команду "ovm install --name test_stable stable" 15 | И я вижу в консоли вывод "Установка OneScript stable завершена" 16 | И я вижу в консоли вывод "ovm use test_stable" 17 | 18 | Когда Я выполняю команду "ovm ls" 19 | Тогда я вижу в консоли строку подобно "^test_stable -> .*" 20 | И я не вижу в консоли строку подобно "^stable -> .*" 21 | 22 | Сценарий: Использование версии 23 | Когда Я выполняю команду "ovm use test_stable" 24 | Тогда я вижу в консоли вывод "OneScript test_stable активирован" 25 | -------------------------------------------------------------------------------- /features/install-with-clean.feature: -------------------------------------------------------------------------------- 1 | #language: ru 2 | 3 | Функциональность: Установка движка с учетом сохранения библиотек 4 | 5 | Как пользователь OneScript 6 | Я иметь возможность обновлять движок без последующей переустановки библиотек 7 | Чтобы не тратить свое время 8 | 9 | Контекст: 10 | Допустим Я устанавливаю переменной среды "OVM_INSTALL_PATH" значение "./temp/ovm" 11 | И Я устанавливаю текущий каталог как рабочий каталог 12 | 13 | Сценарий: Установка движка с сохранением библиотек 14 | Допустим Я удаляю каталог "./temp/ovm" 15 | И Я выполняю команду "ovm install stable" 16 | И Я создаю каталог "my_lib" в подкаталоге "temp/ovm/stable/lib" рабочего каталога 17 | Когда Я выполняю команду "ovm install stable" 18 | Тогда В подкаталоге "temp/ovm/stable/lib" рабочего каталога существует каталог "my_lib" 19 | 20 | Сценарий: Установка движка с удалением библиотек 21 | Допустим Я удаляю каталог "./temp/ovm" 22 | И Я выполняю команду "ovm install stable" 23 | И Я создаю каталог "my_lib" в подкаталоге "temp/ovm/stable/lib" рабочего каталога 24 | Когда Я выполняю команду "ovm install --clean stable" 25 | Тогда Каталог "./temp/ovm/stable/lib/my_lib" не существует 26 | -------------------------------------------------------------------------------- /features/integration.feature: -------------------------------------------------------------------------------- 1 | #language: ru 2 | 3 | Функциональность: Интеграционный сценарий 4 | 5 | Как Пользователь ovm 6 | Я хочу быть уверен, что оно в принципе работает 7 | Чтобы начать применять ovm в жизни 8 | 9 | Контекст: 10 | Допустим Я устанавливаю переменной среды "OVM_INSTALL_PATH" значение "./temp/ovm" 11 | 12 | Сценарий: Вывод справки 13 | Когда Я выполняю команду "ovm" 14 | Тогда я вижу в консоли вывод "OneScript Version Manager" 15 | И я вижу в консоли вывод "Строка запуска: ovm [ОПЦИИ] КОМАНДА [аргументы...]" 16 | 17 | Сценарий: Вывод версии 18 | Когда Я выполняю команду "ovm -v" 19 | Тогда я вижу в консоли строку подобно "\d+\.\d+\.\d+" 20 | 21 | Сценарий: Установка версии 22 | Когда Я выполняю команду "ovm install stable" 23 | Тогда я вижу в консоли вывод "Установка OneScript stable..." 24 | И я вижу в консоли вывод "Установка OneScript stable завершена" 25 | И я вижу в консоли вывод "ovm use stable" 26 | 27 | Когда Я выполняю команду "ovm ls" 28 | Тогда я вижу в консоли строку подобно "stable -> .*" 29 | 30 | Сценарий: Использование версии 31 | Допустим Я выполняю команду "ovm install stable" 32 | И Я выполняю команду "ovm use stable" 33 | Тогда я вижу в консоли вывод "OneScript stable активирован" 34 | 35 | Сценарий: Проверка использования версии 36 | Когда Я выполняю команду "ovm ls" 37 | И Я Показываю вывод команды 38 | Тогда я вижу в консоли строку подобно "current -> .*" 39 | И Я выполняю команду "which oscript" 40 | И я вижу в консоли строку подобно ".*oscript$" 41 | И Я выполняю команду "which opm" 42 | И я вижу в консоли строку подобно ".*opm$" 43 | -------------------------------------------------------------------------------- /features/list.feature: -------------------------------------------------------------------------------- 1 | #language: ru 2 | 3 | Функциональность: Просмотр доступных версий 4 | 5 | Как разработчик библиотек 6 | Я хочу просмотраивать список версий OneScript 7 | Чтобы понимать движками каких каких версий я могу оперировать 8 | 9 | Контекст: 10 | Допустим Я устанавливаю переменной среды "OVM_INSTALL_PATH" значение "./temp/ovm" 11 | 12 | Сценарий: Использование версии 13 | Когда Я выполняю команду "ovm ls -r" 14 | Тогда я вижу в консоли строку подобно "^\d+\.\d+\.\d+\s\(http.*\)" 15 | И я вижу в консоли строку подобно "^dev\s\(http.*\)" 16 | И я вижу в консоли строку подобно "^stable\s\(http.*\)" 17 | -------------------------------------------------------------------------------- /features/step_definitions/install-with-alias.os: -------------------------------------------------------------------------------- 1 | #Использовать fs 2 | 3 | Перем БДД; //контекст фреймворка 1bdd 4 | 5 | // Метод выдает список шагов, реализованных в данном файле-шагов 6 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 7 | БДД = КонтекстФреймворкаBDD; 8 | 9 | ВсеШаги = Новый Массив; 10 | 11 | ВсеШаги.Добавить("ЯУдаляюКаталог"); 12 | 13 | Возврат ВсеШаги; 14 | КонецФункции 15 | 16 | // Реализация шагов 17 | 18 | // Процедура выполняется перед запуском каждого сценария 19 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 20 | 21 | КонецПроцедуры 22 | 23 | // Процедура выполняется после завершения каждого сценария 24 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 25 | 26 | КонецПроцедуры 27 | 28 | //Я удаляю каталог "./temp/ovm" 29 | Процедура ЯУдаляюКаталог(Знач ПутьККаталогу) Экспорт 30 | Если ФС.Существует(ПутьККаталогу) Тогда 31 | УдалитьФайлы(Новый Файл(ПутьККаталогу).ПолноеИмя); 32 | КонецЕсли; 33 | КонецПроцедуры 34 | 35 | -------------------------------------------------------------------------------- /features/step_definitions/install-with-clean.os: -------------------------------------------------------------------------------- 1 | // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd 2 | 3 | Перем БДД; //контекст фреймворка 1bdd 4 | 5 | // Метод выдает список шагов, реализованных в данном файле-шагов 6 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 7 | БДД = КонтекстФреймворкаBDD; 8 | 9 | ВсеШаги = Новый Массив; 10 | 11 | ВсеШаги.Добавить("ЯУстанавливаюТекущийКаталогКакРабочийКаталог"); 12 | 13 | Возврат ВсеШаги; 14 | КонецФункции 15 | 16 | // Реализация шагов 17 | 18 | // Процедура выполняется перед запуском каждого сценария 19 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 20 | 21 | КонецПроцедуры 22 | 23 | // Процедура выполняется после завершения каждого сценария 24 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 25 | 26 | КонецПроцедуры 27 | 28 | //Я устанавливаю текущий каталог как рабочий каталог 29 | Процедура ЯУстанавливаюТекущийКаталогКакРабочийКаталог() Экспорт 30 | БДД.СохранитьВКонтекст("РабочийКаталог", ТекущийКаталог()); 31 | КонецПроцедуры 32 | -------------------------------------------------------------------------------- /features/step_definitions/integration.os: -------------------------------------------------------------------------------- 1 | #Использовать 1commands 2 | 3 | Перем БДД; //контекст фреймворка 1bdd 4 | 5 | // Метод выдает список шагов, реализованных в данном файле-шагов 6 | Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт 7 | БДД = КонтекстФреймворкаBDD; 8 | 9 | ВсеШаги = Новый Массив; 10 | 11 | ВсеШаги.Добавить("ЯУстанавливаюПеременнойСредыЗначение"); 12 | ВсеШаги.Добавить("ЯВыполняюКоманду"); 13 | 14 | Возврат ВсеШаги; 15 | КонецФункции 16 | 17 | // Реализация шагов 18 | 19 | // Процедура выполняется перед запуском каждого сценария 20 | Процедура ПередЗапускомСценария(Знач Узел) Экспорт 21 | 22 | КонецПроцедуры 23 | 24 | // Процедура выполняется после завершения каждого сценария 25 | Процедура ПослеЗапускаСценария(Знач Узел) Экспорт 26 | 27 | КонецПроцедуры 28 | 29 | //Я устанавливаю переменной среды "OVM_INSTALL_PATH" значение "./temp/ovm" 30 | Процедура ЯУстанавливаюПеременнойСредыЗначение(Знач ИмяПеременной, Знач ЗначениеПеременной) Экспорт 31 | УстановитьПеременнуюСреды(ИмяПеременной, ЗначениеПеременной); 32 | КонецПроцедуры 33 | 34 | //Я выполняю команду "ovm ls" 35 | Процедура ЯВыполняюКоманду(Знач ТекстКоманды) Экспорт 36 | КлючКонтекста = КлючКоманды(ТекстКоманды); 37 | Команда = Новый Команда; 38 | Команда.ПоказыватьВыводНемедленно(Ложь); 39 | 40 | Команда.УстановитьСтрокуЗапуска(ТекстКоманды); 41 | Команда.УстановитьИсполнениеЧерезКомандыСистемы(Ложь); 42 | 43 | БДД.СохранитьВКонтекст(КлючКонтекста, Команда); 44 | БДД.СохранитьВКонтекст(КлючПоследнейКоманды(), Команда); 45 | 46 | Команда.Исполнить(); 47 | 48 | Сообщить(Команда.ПолучитьВывод()); 49 | КонецПроцедуры 50 | 51 | Функция КлючКоманды(Знач ИмяКоманды) 52 | Возврат "Команда-" + ИмяКоманды; 53 | КонецФункции 54 | 55 | Функция КлючПоследнейКоманды() 56 | Возврат "ПоследняяКоманда"; 57 | КонецФункции -------------------------------------------------------------------------------- /lib.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packagedef: -------------------------------------------------------------------------------- 1 | Описание.Имя("ovm") 2 | .Версия("1.0.0") 3 | .Автор("Nikita Gryzlov") 4 | .АдресАвтора("nixel2007@gmail.com") 5 | .Описание("OneScript Version Manager") 6 | .ВерсияСреды("1.0.20") 7 | // .ВключитьФайл("src") 8 | .ЗависитОт("1commands", "1.3.2") 9 | .ЗависитОт("fluent", "0.3.1") 10 | .ЗависитОт("fs") 11 | .ЗависитОт("logos") 12 | .ЗависитОт("tempfiles") 13 | .ЗависитОт("cli", "0.9.8") 14 | .ИсполняемыйФайл("src/cmd/ovm.os", "ovm") 15 | ; 16 | -------------------------------------------------------------------------------- /sonar-project.properties: -------------------------------------------------------------------------------- 1 | # must be unique in a given SonarQube instance 2 | sonar.projectKey=ovm 3 | sonar.organization=silverbulleters 4 | 5 | # this is the name displayed in the SonarQube UI 6 | sonar.projectName=OneScript Version Manager 7 | 8 | # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. 9 | # Since SonarQube 4.2, this property is optional if sonar.modules is set. 10 | # If not set, SonarQube starts looking for source code from the directory containing 11 | # the sonar-project.properties file. 12 | 13 | sonar.sources=./src 14 | 15 | # Encoding of the source code. Default is default system encoding 16 | sonar.sourceEncoding=UTF-8 17 | 18 | sonar.coverageReportPaths=coverage/genericCoverage.xml 19 | -------------------------------------------------------------------------------- /sonarlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "serverId": "silverbulleters", 3 | "projectKey": "sonar-opensource-add-ovm" 4 | } -------------------------------------------------------------------------------- /src/cmd/ovm.os: -------------------------------------------------------------------------------- 1 | #Использовать cli 2 | #Использовать tempfiles 3 | 4 | #Использовать "." 5 | #Использовать "../core" 6 | 7 | /////////////////////////////////////////////////////////////////////////////// 8 | 9 | // Обработчик выполнения команды 10 | // 11 | // Параметры: 12 | // КомандаПриложения - КомандаПриложения - Выполняемая команда 13 | // 14 | Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт 15 | 16 | КомандаПриложения.ВывестиСправку(); 17 | 18 | КонецПроцедуры 19 | 20 | Процедура ВыполнитьПриложение() 21 | 22 | КонсольноеПриложение = Новый КонсольноеПриложение( 23 | ПараметрыПриложения.ИмяПриложения(), 24 | "OneScript Version Manager v" + ПараметрыПриложения.Версия() 25 | ); 26 | 27 | КонсольноеПриложение.Версия("v version", ПараметрыПриложения.Версия()); 28 | 29 | КонсольноеПриложение.ДобавитьКоманду( 30 | "install i", 31 | "Установить OneScript указанных версий", 32 | Новый КомандаInstall() 33 | ); 34 | КонсольноеПриложение.ДобавитьКоманду( 35 | "use u", 36 | "Использовать OneScript указанной версии", 37 | Новый КомандаUse() 38 | ); 39 | КонсольноеПриложение.ДобавитьКоманду( 40 | "uninstall delete d", 41 | "Удалить OneScript указанных версий", 42 | Новый КомандаUninstall() 43 | ); 44 | КонсольноеПриложение.ДобавитьКоманду( 45 | "list ls", 46 | "Вывести список установленных и/или доступных версий OneScript", 47 | Новый КомандаList() 48 | ); 49 | КонсольноеПриложение.ДобавитьКоманду( 50 | "run r", 51 | "Запустить исполняемый файл в окружении указанной версии OneScript", 52 | Новый КомандаRun() 53 | ); 54 | КонсольноеПриложение.ДобавитьКоманду( 55 | "which w", 56 | "Вывести путь к установленной версии OneScript", 57 | Новый КомандаWhich() 58 | ); 59 | КонсольноеПриложение.ДобавитьКоманду( 60 | "migrate", 61 | "Поместить установленный системный OneScript под контроль ovm. Только для Windows", 62 | Новый КомандаMigrate() 63 | ); 64 | 65 | КонсольноеПриложение.УстановитьОсновноеДействие(ЭтотОбъект); 66 | КонсольноеПриложение.Запустить(АргументыКоманднойСтроки); 67 | 68 | КонецПроцедуры 69 | 70 | Лог = ПараметрыOVM.ПолучитьЛог(); 71 | КодСостояния = 0; 72 | Попытка 73 | ВыполнитьПриложение(); 74 | Исключение 75 | Лог.Ошибка(ОписаниеОшибки()); 76 | КодСостояния = 1; 77 | КонецПопытки; 78 | 79 | ВременныеФайлы.Удалить(); 80 | 81 | ЗавершитьРаботу(КодСостояния); 82 | -------------------------------------------------------------------------------- /src/cmd/Классы/КомандаInstall.os: -------------------------------------------------------------------------------- 1 | #Использовать "../../core" 2 | 3 | Перем Лог; 4 | 5 | // Заполняет описание команды для библиотеки cli 6 | // 7 | // Параметры: 8 | // КомандаПриложения - КомандаПриложения - Настраиваемая команда 9 | // 10 | Процедура ОписаниеКоманды(КомандаПриложения) Экспорт 11 | 12 | КомандаПриложения.Опция("name", "", "Синоним (алиас) устанавливаемой версии для последущего использования в ovm use") 13 | .ТСтрока() 14 | .ВОкружении("OVM_INSTALL_NAME"); 15 | 16 | КомандаПриложения.Опция("clean c", Ложь, "Полностью очищать каталог установки (включая установленные библиотеки)") 17 | .ВОкружении("OVM_INSTALL_CLEAN"); 18 | 19 | КомандаПриложения.Аргумент( 20 | "VERSION", 21 | , 22 | "Устанавливаемая версия (версии) OneScript. " + 23 | "Допустимо использовать трехномерные версии (1.0.17, 1.0.18), stable, dev. " + 24 | "Может быть передано несколько значений") 25 | .ТМассивСтрок() 26 | .ВОкружении("OVM_INSTALL_VERSION"); 27 | 28 | КонецПроцедуры 29 | 30 | // Обработчик выполнения команды 31 | // 32 | // Параметры: 33 | // КомандаПриложения - КомандаПриложения - Выполняемая команда 34 | // 35 | Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт 36 | 37 | МассивВерсийКУстановке = КомандаПриложения.ЗначениеАргумента("VERSION"); 38 | АлиасВерсии = КомандаПриложения.ЗначениеОпции("name"); 39 | ОчищатьКаталогУстановки = КомандаПриложения.ЗначениеОпции("clean"); 40 | 41 | Если ЗначениеЗаполнено(АлиасВерсии) И МассивВерсийКУстановке.Количество() > 1 Тогда 42 | ВызватьИсключение "Опция <--name> может быть задана только при установке одной версии OneScript"; 43 | КонецЕсли; 44 | 45 | УстановщикOneScript = Новый УстановщикOneScript(); 46 | 47 | Для Каждого ВерсияКУстановке Из МассивВерсийКУстановке Цикл 48 | УстановщикOneScript.УстановитьOneScript(ВерсияКУстановке, АлиасВерсии, ОчищатьКаталогУстановки); 49 | КонецЦикла; 50 | 51 | Если МассивВерсийКУстановке.Количество() > 0 Тогда 52 | Лог.Информация( 53 | "Для начала использования версии OneScript, выполните команду: 54 | |ovm use %1", 55 | ?(ЗначениеЗаполнено(АлиасВерсии), АлиасВерсии, МассивВерсийКУстановке[МассивВерсийКУстановке.ВГраница()]) 56 | ); 57 | КонецЕсли; 58 | 59 | КонецПроцедуры 60 | 61 | Лог = ПараметрыOVM.ПолучитьЛог(); 62 | -------------------------------------------------------------------------------- /src/cmd/Классы/КомандаList.os: -------------------------------------------------------------------------------- 1 | #Использовать "../../core" 2 | 3 | Перем Лог; 4 | 5 | // Заполняет описание команды для библиотеки cli 6 | // 7 | // Параметры: 8 | // КомандаПриложения - КомандаПриложения - Настраиваемая команда 9 | // 10 | Процедура ОписаниеКоманды(КомандаПриложения) Экспорт 11 | 12 | КомандаПриложения 13 | .Опция("remote r", Ложь, "Вывести список доступных к установке версий") 14 | .ВОкружении("OVM_LIST_REMOTE"); 15 | 16 | КомандаПриложения 17 | .Опция("quiet q", Ложь, "Тихий режим, вывод только алиасов версий") 18 | .ВОкружении("OVM_LIST_QUIET"); 19 | 20 | КомандаПриложения 21 | .Опция("all a", Ложь, "Вывести список всех версий: установленных и доступных на сайте") 22 | .ВОкружении("OVM_LIST_ALL"); 23 | 24 | КонецПроцедуры 25 | 26 | // Обработчик выполнения команды 27 | // 28 | // Параметры: 29 | // КомандаПриложения - КомандаПриложения - Выполняемая команда 30 | // 31 | Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт 32 | 33 | ВыводитьСписокВерсийНаСайте = КомандаПриложения.ЗначениеОпции("remote"); 34 | ВыводитьВсеВерсии = КомандаПриложения.ЗначениеОпции("all"); 35 | ТихийРежим = КомандаПриложения.ЗначениеОпции("quiet"); 36 | 37 | Если ВыводитьВсеВерсии Тогда 38 | ВывестиВсеВерсии(ТихийРежим); 39 | ИначеЕсли ВыводитьСписокВерсийНаСайте Тогда 40 | ВывестиСписокДоступныхКУстановкеВерсий(ТихийРежим); 41 | Иначе 42 | ВывестиСписокУстановленныхВерсий(ТихийРежим); 43 | КонецЕсли; 44 | 45 | КонецПроцедуры 46 | 47 | Процедура ВывестиВсеВерсии(Знач ТихийРежим) 48 | 49 | ВсеВерсии = ВерсииOneScript.ПолучитьСписокВсехВерсий(); 50 | 51 | Для Каждого СтрокаВерсия Из ВсеВерсии Цикл 52 | 53 | Если ТихийРежим И СтрокаВерсия.ЭтоСимлинк Тогда 54 | Продолжить; 55 | КонецЕсли; 56 | 57 | Если ТихийРежим Тогда 58 | Сообщение = СтрокаВерсия.Алиас; 59 | Иначе 60 | Сообщение = СтрШаблон( 61 | "%1 -> %2 -> %3 -> %4", 62 | СтрокаВерсия.Алиас, 63 | ?(СтрокаВерсия.Версия = "", "unknown", СтрокаВерсия.Версия), 64 | ?(СтрокаВерсия.ПутьЛокальный = "", "not installed", СтрокаВерсия.ПутьЛокальный), 65 | ?(СтрокаВерсия.ПутьСервер = "", "unknown", СтрокаВерсия.ПутьСервер) 66 | ); 67 | КонецЕсли; 68 | 69 | УстанавливаемыйСтатусСообщения = ?( 70 | СтрокаВерсия.Алиас = "current", 71 | СтатусСообщения.Информация, 72 | СтатусСообщения.БезСтатуса 73 | ); 74 | Аппендер = ПараметрыOVM.ПолучитьОсновнойСпособВывода(); 75 | Аппендер.УстановитьСвойство("message-status", УстанавливаемыйСтатусСообщения); 76 | Лог.Информация(Сообщение); 77 | 78 | КонецЦикла; 79 | 80 | КонецПроцедуры 81 | 82 | Процедура ВывестиСписокУстановленныхВерсий(Знач ТихийРежим) 83 | СписокУстановленныхВерсий = ВерсииOneScript.ПолучитьСписокУстановленныхВерсий(); 84 | Для Каждого УстановленнаяВерсия Из СписокУстановленныхВерсий Цикл 85 | 86 | Если ТихийРежим И УстановленнаяВерсия.ЭтоСимлинк Тогда 87 | Продолжить; 88 | КонецЕсли; 89 | 90 | Если ТихийРежим Тогда 91 | Сообщение = УстановленнаяВерсия.Алиас; 92 | Иначе 93 | Сообщение = СтрШаблон( 94 | "%1 -> %2 (%3)", 95 | УстановленнаяВерсия.Алиас, 96 | УстановленнаяВерсия.Версия, 97 | УстановленнаяВерсия.Путь 98 | ); 99 | КонецЕсли; 100 | 101 | УстанавливаемыйСтатусСообщения = ?( 102 | УстановленнаяВерсия.Алиас = "current", 103 | СтатусСообщения.Информация, 104 | СтатусСообщения.БезСтатуса 105 | ); 106 | Аппендер = ПараметрыOVM.ПолучитьОсновнойСпособВывода(); 107 | Аппендер.УстановитьСвойство("message-status", УстанавливаемыйСтатусСообщения); 108 | Лог.Информация(Сообщение); 109 | 110 | КонецЦикла; 111 | КонецПроцедуры 112 | 113 | Процедура ВывестиСписокДоступныхКУстановкеВерсий(Знач ТихийРежим) 114 | 115 | СписокДоступныВерсий = ВерсииOneScript.ПолучитьСписокДоступныхКУстановкеВерсий(); 116 | Для Каждого ДоступнаяВерсия Из СписокДоступныВерсий Цикл 117 | Если ТихийРежим Тогда 118 | Сообщение = ДоступнаяВерсия.Алиас; 119 | Иначе 120 | Сообщение = СтрШаблон("%1 (%2)", ДоступнаяВерсия.Алиас, ДоступнаяВерсия.Путь); 121 | КонецЕсли; 122 | Лог.Информация(Сообщение); 123 | КонецЦикла; 124 | 125 | КонецПроцедуры 126 | 127 | Лог = ПараметрыOVM.ПолучитьЛог(); 128 | -------------------------------------------------------------------------------- /src/cmd/Классы/КомандаMigrate.os: -------------------------------------------------------------------------------- 1 | // Обработчик выполнения команды 2 | // 3 | // Параметры: 4 | // КомандаПриложения - КомандаПриложения - Выполняемая команда 5 | // 6 | Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт 7 | 8 | АктиваторOneScript = Новый АктиваторOneScript(); 9 | 10 | АктиваторOneScript.ВыполнитьМиграцию(); 11 | 12 | КонецПроцедуры 13 | -------------------------------------------------------------------------------- /src/cmd/Классы/КомандаRun.os: -------------------------------------------------------------------------------- 1 | #Использовать "../../core" 2 | 3 | Перем ЭтоWindows; 4 | 5 | // Заполняет описание команды для библиотеки cli 6 | // 7 | // Параметры: 8 | // КомандаПриложения - КомандаПриложения - Настраиваемая команда 9 | // 10 | Процедура ОписаниеКоманды(КомандаПриложения) Экспорт 11 | 12 | КомандаПриложения 13 | .Аргумент( 14 | "VERSION", 15 | "current", 16 | "Используемое окружение OneScript. " + 17 | "Допустимо использовать трехномерные версии (1.0.17, 1.0.18), stable, dev, current") 18 | .ВОкружении("OVM_RUN_VERSION"); 19 | 20 | КомандаПриложения 21 | .Аргумент("APP", "oscript", "Используемое приложение. Например, oscript, opm, vrunner...") 22 | .ВОкружении("OVM_RUN_APP"); 23 | 24 | КомандаПриложения 25 | .Аргумент("ARGS", "", "Аргументы, передаваемые приложению").ТМассивСтрок() 26 | .ВОкружении("OVM_RUN_ARGS"); 27 | 28 | // TODO: Убрать, после реализации https://github.com/khorevaa/cli/issues/10 29 | КомандаПриложения.Спек = "VERSION APP [-- ARGS...]"; 30 | 31 | КонецПроцедуры 32 | 33 | // Обработчик выполнения команды 34 | // 35 | // Параметры: 36 | // КомандаПриложения - КомандаПриложения - Выполняемая команда 37 | // 38 | Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт 39 | 40 | ИспользуемаяВерсия = КомандаПриложения.ЗначениеАргумента("VERSION"); 41 | Приложение = КомандаПриложения.ЗначениеАргумента("APP"); 42 | Аргументы = КомандаПриложения.ЗначениеАргумента("ARGS"); 43 | 44 | КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию(); 45 | КаталогУстановкиВерсии = ОбъединитьПути(КаталогУстановки, ИспользуемаяВерсия); 46 | КаталогBin = ОбъединитьПути(КаталогУстановкиВерсии, "bin"); 47 | 48 | ПеременнаяPATH = ПолучитьПеременнуюСреды("PATH"); 49 | Если ЭтоWindows Тогда 50 | ПеременнаяPATH = КаталогBin + ";" + ПеременнаяPATH; 51 | Иначе 52 | ПеременнаяPATH = КаталогBin + ":" + ПеременнаяPATH; 53 | КонецЕсли; 54 | 55 | УстановитьПеременнуюСреды("PATH", ПеременнаяPATH, РасположениеПеременнойСреды.Процесс); 56 | 57 | Команда = Новый Команда; 58 | Команда.УстановитьКоманду(Приложение); 59 | Команда.ДобавитьПараметры(Аргументы); 60 | Команда.ПоказыватьВыводНемедленно(Истина); 61 | 62 | Команда.Исполнить(); 63 | 64 | КонецПроцедуры 65 | 66 | СистемнаяИнформация = Новый СистемнаяИнформация; 67 | ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0; 68 | -------------------------------------------------------------------------------- /src/cmd/Классы/КомандаUninstall.os: -------------------------------------------------------------------------------- 1 | Перем Лог; 2 | 3 | // Заполняет описание команды для библиотеки cli 4 | // 5 | // Параметры: 6 | // КомандаПриложения - КомандаПриложения - Настраиваемая команда 7 | // 8 | Процедура ОписаниеКоманды(КомандаПриложения) Экспорт 9 | 10 | КомандаПриложения 11 | .Опция("force f", Ложь, "Удалять даже текущую используемую версию") 12 | .ВОкружении("OVM_UNINSTALL_FORCE"); 13 | 14 | КомандаПриложения 15 | .Опция("all a", Ложь, "Удаление всех установленных версий OneScript") 16 | .ВОкружении("OVM_UNINSTALL_ALL"); 17 | 18 | КомандаПриложения 19 | .Аргумент( 20 | "VERSION", 21 | , 22 | "Удаляемая версия (версии) OneScript. " + 23 | "Допустимо использовать трехномерные версии (1.0.17, 1.0.18), stable, dev. " + 24 | "Может быть передано несколько значений") 25 | .ВОкружении("OVM_UNINSTALL_VERSION") 26 | .ТМассивСтрок(); 27 | 28 | КомандаПриложения.Спек = "[--force] [--all] [VERSION...]"; 29 | КонецПроцедуры 30 | 31 | // Обработчик выполнения команды 32 | // 33 | // Параметры: 34 | // КомандаПриложения - КомандаПриложения - Выполняемая команда 35 | // 36 | Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт 37 | 38 | МассивВерсийКУдалению = КомандаПриложения.ЗначениеАргумента("VERSION"); 39 | УдалятьТекущуюВерсию = КомандаПриложения.ЗначениеОпции("force"); 40 | УдалятьВсеВерсии = КомандаПриложения.ЗначениеОпции("all"); 41 | 42 | ДеинсталляторOneScript = Новый ДеинсталляторOneScript(); 43 | 44 | Если УдалятьВсеВерсии Тогда 45 | ДеинсталляторOneScript.УдалитьВсеВерсииOneScript(); 46 | Иначе 47 | 48 | Для Каждого ВерсияКУдалению Из МассивВерсийКУдалению Цикл 49 | Если ВерсииOneScript.ЭтоТекущаяВерсия(ВерсияКУдалению) И НЕ УдалятьТекущуюВерсию Тогда 50 | Лог.Информация("Версия <%1> не удалена, т.к. является текущей.", ВерсияКУдалению); 51 | Продолжить; 52 | КонецЕсли; 53 | ДеинсталляторOneScript.УдалитьOneScript(ВерсияКУдалению); 54 | КонецЦикла; 55 | 56 | КонецЕсли; 57 | 58 | КонецПроцедуры 59 | 60 | Лог = ПараметрыOVM.ПолучитьЛог(); 61 | -------------------------------------------------------------------------------- /src/cmd/Классы/КомандаUse.os: -------------------------------------------------------------------------------- 1 | #Использовать fs 2 | 3 | Перем ЭтоWindows; 4 | 5 | // Заполняет описание команды для библиотеки cli 6 | // 7 | // Параметры: 8 | // КомандаПриложения - КомандаПриложения - Настраиваемая команда 9 | // 10 | Процедура ОписаниеКоманды(КомандаПриложения) Экспорт 11 | 12 | КомандаПриложения 13 | .Опция("install i", Ложь, "Выполнять установку требуемой версии в случае ее отсутствия") 14 | .ВОкружении("OVM_USE_INSTALL"); 15 | 16 | КомандаПриложения 17 | .Аргумент( 18 | "VERSION", 19 | , 20 | "Используемая версия OneScript. Допустимо использовать трехномерные версии (1.0.17, 1.0.18), stable, dev") 21 | .ВОкружении("OVM_USE_VERSION") 22 | .ТСтрока(); 23 | 24 | КонецПроцедуры 25 | 26 | // Обработчик выполнения команды 27 | // 28 | // Параметры: 29 | // КомандаПриложения - КомандаПриложения - Выполняемая команда 30 | // 31 | Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт 32 | ИспользуемаяВерсия = КомандаПриложения.ЗначениеАргумента("VERSION"); 33 | ВыполнятьУстановкуПриНеобходимости = КомандаПриложения.ЗначениеОпции("install"); 34 | 35 | АктиваторOneScript = Новый АктиваторOneScript(); 36 | АктиваторOneScript.ИспользоватьВерсиюOneScript(ИспользуемаяВерсия, ВыполнятьУстановкуПриНеобходимости); 37 | 38 | КонецПроцедуры 39 | -------------------------------------------------------------------------------- /src/cmd/Классы/КомандаWhich.os: -------------------------------------------------------------------------------- 1 | #Использовать "../../core" 2 | 3 | Перем Лог; 4 | 5 | // Заполняет описание команды для библиотеки cli 6 | // 7 | // Параметры: 8 | // КомандаПриложения - КомандаПриложения - Настраиваемая команда 9 | // 10 | Процедура ОписаниеКоманды(КомандаПриложения) Экспорт 11 | 12 | КомандаПриложения 13 | .Аргумент( 14 | "VERSION", 15 | "current", 16 | "Искомая версия OneScript. Допустимо использовать трехномерные версии (1.0.17, 1.0.18), stable, dev" 17 | ) 18 | .ВОкружении("OVM_WHICH_VERSION") 19 | .ТСтрока(); 20 | 21 | КонецПроцедуры 22 | 23 | // Обработчик выполнения команды 24 | // 25 | // Параметры: 26 | // КомандаПриложения - КомандаПриложения - Выполняемая команда 27 | // 28 | Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт 29 | 30 | ИскомаяВерсия = КомандаПриложения.ЗначениеАргумента("VERSION"); 31 | 32 | ПутьКУстановленнойВерсии = ВерсииOneScript.ПолучитьПутьКУстановленномуДвижкуOneScript(ИскомаяВерсия); 33 | 34 | Лог.Информация(ПутьКУстановленнойВерсии); 35 | 36 | КонецПроцедуры 37 | 38 | Лог = ПараметрыOVM.ПолучитьЛог(); 39 | -------------------------------------------------------------------------------- /src/cmd/Модули/ПараметрыПриложения.os: -------------------------------------------------------------------------------- 1 | // Имя приложения 2 | // 3 | // Возвращаемое значение: 4 | // Строка - Имя приложения 5 | // 6 | Функция ИмяПриложения() Экспорт 7 | Возврат "ovm"; 8 | КонецФункции 9 | 10 | // Версия приложения 11 | // 12 | // Возвращаемое значение: 13 | // Строка - Строковое представление версии 14 | // 15 | Функция Версия() Экспорт 16 | Версия = "1.0.0-RC9"; 17 | Возврат Версия; 18 | КонецФункции 19 | -------------------------------------------------------------------------------- /src/core/Классы/АктиваторOneScript.os: -------------------------------------------------------------------------------- 1 | #Использовать fs 2 | 3 | Перем СистемнаяИнформация; 4 | Перем ЭтоWindows; 5 | Перем Лог; 6 | 7 | // Активирует указанную версию OneScript. 8 | // Создает необходимые симлинки и оперирует PATH. 9 | // 10 | // Параметры: 11 | // ИспользуемаяВерсия - Строка - Алиас версии, которую необходимо активировать 12 | // ВыполнятьУстановкуПриНеобходимости - Булево - Флаг, управляющей запуском установки в случае, если активируемый 13 | // алиас не установлен 14 | // 15 | Процедура ИспользоватьВерсиюOneScript(Знач ИспользуемаяВерсия, Знач ВыполнятьУстановкуПриНеобходимости = Ложь) Экспорт 16 | 17 | Лог.Информация("Активация версии OneScript %1", ИспользуемаяВерсия); 18 | 19 | ПроверитьНаличиеИспользуемойВерсии(ИспользуемаяВерсия, ВыполнятьУстановкуПриНеобходимости); 20 | 21 | КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию(); 22 | КаталогУстановкиВерсии = ОбъединитьПути(КаталогУстановки, ИспользуемаяВерсия); 23 | 24 | ПутьКОбщемуКаталогуOneScript = ОбъединитьПути(КаталогУстановки, "current"); 25 | 26 | НадоВывестиИнформационноеСообщение = НЕ ФС.КаталогСуществует(ПутьКОбщемуКаталогуOneScript); 27 | 28 | СоздатьСимЛинкНаКаталог(ПутьКОбщемуКаталогуOneScript, КаталогУстановкиВерсии); 29 | ДобавитьКаталогBinВPath(ОбъединитьПути(ПутьКОбщемуКаталогуOneScript, "bin")); 30 | 31 | Если НадоВывестиИнформационноеСообщение Тогда 32 | Лог.Предупреждение("ВНИМАНИЕ: Переоткройте терминал после первого использования ovm use."); 33 | КонецЕсли; 34 | 35 | Лог.Информация("OneScript %1 активирован", ИспользуемаяВерсия); 36 | 37 | КонецПроцедуры 38 | 39 | // Выполнение необходимых операций для начала использования ovm в случае, если OneScript ранее был установлен 40 | // с добавлением в PATH. 41 | // Только для Windows. 42 | // 43 | Процедура ВыполнитьМиграцию() Экспорт 44 | 45 | Лог.Информация("Выполнение миграции системного OneScript"); 46 | 47 | Если ЭтоWindows Тогда 48 | 49 | Лог.Отладка("Определяю путь к дефолтному oscript"); 50 | 51 | Команда = Новый Команда; 52 | Команда.УстановитьКоманду("where"); 53 | Команда.ДобавитьПараметр("oscript"); 54 | Команда.УстановитьПравильныйКодВозврата(0); 55 | 56 | Команда.Исполнить(); 57 | 58 | ВыводКоманды = Команда.ПолучитьВывод(); 59 | Лог.Отладка(ВыводКоманды); 60 | 61 | ПутьКСистемномуOneScript = СтрПолучитьСтроку(ВыводКоманды, 1); 62 | Лог.Отладка("Путь к системному OneScript: %1", ПутьКСистемномуOneScript); 63 | 64 | Если СтрНайти(ПутьКСистемномуOneScript, "ovm") > 0 Тогда 65 | Лог.Информация("OneScript уже под контролем ovm"); 66 | Возврат; 67 | КонецЕсли; 68 | 69 | ПутьКBinСистемногоOscript = Новый Файл(ПутьКСистемномуOneScript).Путь; 70 | 71 | Лог.Отладка("Установка переменных среды на уровне системы"); 72 | 73 | ПеременнаяPATH = ПолучитьПеременнуюСреды("PATH", РасположениеПеременнойСреды.Машина); 74 | УстановитьПеременнуюСреды("PATH", "%OVM_OSCRIPTBIN%;" + ПеременнаяPATH, РасположениеПеременнойСреды.Машина); 75 | УстановитьПеременнуюСреды("OVM_OSCRIPTBIN", ПутьКBinСистемногоOscript, РасположениеПеременнойСреды.Машина); 76 | 77 | Лог.Отладка("Добавление ovm в автозапуск cmd"); 78 | 79 | ТекстВычислениеPATH = "set PATH=%OVM_OSCRIPTBIN%;%PATH%"; 80 | 81 | СтрокаЗапуска = СтрШаблон( 82 | "REG ADD ""HKCU\Software\Microsoft\Command Processor"" /v Autorun /t REG_SZ /f /d ""%1""", 83 | ТекстВычислениеPATH 84 | ); 85 | 86 | Лог.Отладка("Строка запуска 87 | |%1", СтрЗаменить(СтрокаЗапуска, "%", "%%")); 88 | 89 | Команда = Новый Команда; 90 | Команда.УстановитьИсполнениеЧерезКомандыСистемы(Ложь); 91 | Команда.УстановитьСтрокуЗапуска(СтрокаЗапуска); 92 | Команда.УстановитьПравильныйКодВозврата(0); 93 | 94 | Команда.Исполнить(); 95 | 96 | ВыводКоманды = Команда.ПолучитьВывод(); 97 | Лог.Отладка(ВыводКоманды); 98 | 99 | Лог.Отладка("Добавление ovm в автозапуск powershell"); 100 | 101 | ПутьКФайлу = ОбъединитьПути( 102 | СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ПрофильПользователя), 103 | "Documents", 104 | "WindowsPowerShell", 105 | "profile.ps1" 106 | ); 107 | 108 | ТекстВычислениеPATH = "set PATH=$OVM_OSCRIPTBIN;$PATH"; 109 | ДобавитьТекстВНовыйИлиИмеющийсяФайл(ТекстВычислениеPATH, ПутьКФайлу); 110 | 111 | Иначе 112 | Сообщение = "На *nix системах выполнение команды migrate не требуется."; 113 | Лог.Информация(Сообщение); 114 | Возврат; 115 | КонецЕсли; 116 | 117 | КонецПроцедуры 118 | 119 | Процедура СоздатьСимЛинкНаКаталог(Знач Ссылка, Знач ПутьНазначения) 120 | 121 | ПутьКСсылке = Новый Файл(Ссылка).ПолноеИмя; 122 | ПутьККаталогуНазначения = Новый Файл(ПутьНазначения).ПолноеИмя; 123 | 124 | Лог.Отладка("Создаю символическую ссылку %1 на %2", ПутьКСсылке, ПутьККаталогуНазначения); 125 | 126 | Если ФС.КаталогСуществует(ПутьКСсылке) Тогда 127 | 128 | Лог.Отладка("Удаляю старую символическую ссылку"); 129 | 130 | Если ЭтоWindows Тогда 131 | УдалитьФайлы(ПутьКСсылке); 132 | Иначе 133 | Команда = Новый Команда; 134 | Команда.УстановитьКоманду("unlink"); 135 | Команда.ДобавитьПараметр(ПутьКСсылке); 136 | Команда.УстановитьПравильныйКодВозврата(0); 137 | Команда.Исполнить(); 138 | 139 | Лог.Отладка(Команда.ПолучитьВывод()); 140 | КонецЕсли; 141 | КонецЕсли; 142 | 143 | Лог.Отладка("Выполняю создание символической ссылки"); 144 | 145 | Если ЭтоWindows Тогда 146 | Команда = Новый Команда; 147 | Команда.УстановитьКоманду("mklink"); 148 | Команда.ДобавитьПараметр("/J"); 149 | Команда.ДобавитьПараметр(ПутьКСсылке); 150 | Команда.ДобавитьПараметр(ПутьККаталогуНазначения); 151 | Команда.УстановитьПравильныйКодВозврата(0); 152 | 153 | Команда.Исполнить(); 154 | Лог.Отладка(Команда.ПолучитьВывод()); 155 | Иначе 156 | Команда = Новый Команда; 157 | Команда.УстановитьКоманду("ln"); 158 | Команда.ДобавитьПараметр("-s"); 159 | Команда.ДобавитьПараметр(ПутьККаталогуНазначения); 160 | Команда.ДобавитьПараметр(ПутьКСсылке); 161 | Команда.УстановитьПравильныйКодВозврата(0); 162 | 163 | Команда.Исполнить(); 164 | 165 | Лог.Отладка(Команда.ПолучитьВывод()); 166 | КонецЕсли; 167 | 168 | КонецПроцедуры 169 | 170 | Процедура ДобавитьКаталогBinВPath(Знач ПутьККаталогуBin) 171 | 172 | Лог.Отладка("Добавляю каталог %1 в PATH", ПутьККаталогуBin); 173 | 174 | ПеременнаяPATH = ПолучитьПеременнуюСреды("PATH", РасположениеПеременнойСреды.Пользователь); 175 | Если ЭтоWindows Тогда 176 | ИскомоеЗначение = "%OVM_OSCRIPTBIN%"; 177 | Иначе 178 | ПутьКаталогуHOME = ПолучитьПеременнуюСреды("HOME"); 179 | Если НЕ ПустаяСтрока(ПутьКаталогуHOME) Тогда 180 | ПутьККаталогуBin = СтрЗаменить(ПутьККаталогуBin, ПутьКаталогуHOME, "$HOME"); 181 | КонецЕсли; 182 | ИскомоеЗначение = ПутьККаталогуBin; 183 | КонецЕсли; 184 | 185 | Если СтрНайти(ПеременнаяPATH, ИскомоеЗначение) <> 0 Тогда 186 | Лог.Отладка("PATH уже содержит путь к каталогу"); 187 | Возврат; 188 | КонецЕсли; 189 | 190 | Если ЭтоWindows Тогда 191 | Лог.Отладка("Установка переменных среды на уровне пользователя"); 192 | УстановитьПеременнуюСреды("OVM_OSCRIPTBIN", ПутьККаталогуBin, РасположениеПеременнойСреды.Пользователь); 193 | УстановитьПеременнуюСреды("PATH", "%OVM_OSCRIPTBIN%;" + ПеременнаяPATH, РасположениеПеременнойСреды.Пользователь); 194 | Иначе 195 | Лог.Отладка("Добавление каталога в PATH для shell"); 196 | ТекстФайлаПрофиля = "export PATH=""" + ПутьККаталогуBin + ":$PATH"" 197 | |export OSCRIPTBIN=""" + ПутьККаталогуBin + """"; 198 | 199 | ПутьКФайлу = ОбъединитьПути( 200 | СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ПрофильПользователя), 201 | ".profile" 202 | ); 203 | 204 | ДобавитьТекстВНовыйИлиИмеющийсяФайл(ТекстФайлаПрофиля, ПутьКФайлу); 205 | 206 | ПутьКФайлу = ОбъединитьПути( 207 | СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ПрофильПользователя), 208 | ".bashrc" 209 | ); 210 | 211 | ДобавитьТекстВНовыйИлиИмеющийсяФайл(ТекстФайлаПрофиля, ПутьКФайлу); 212 | КонецЕсли; 213 | 214 | КонецПроцедуры 215 | 216 | Процедура ДобавитьТекстВНовыйИлиИмеющийсяФайл(Знач ДобавляемыйТекст, Знач ПутьКФайлу) 217 | 218 | Если ЭтоWindows Тогда 219 | РазделительСтрок = Символы.ВК + Символы.ПС; 220 | Иначе 221 | РазделительСтрок = Символы.ПС; 222 | КонецЕсли; 223 | 224 | Лог.Отладка( 225 | "Добавление текста в файл. 226 | |Текст: 227 | |%1 228 | |Файл: 229 | |%2", 230 | ДобавляемыйТекст, 231 | ПутьКФайлу 232 | ); 233 | 234 | Если НЕ ФС.ФайлСуществует(ПутьКФайлу) Тогда 235 | Лог.Отладка("Файл не существует, создаю новый"); 236 | 237 | Файл = Новый Файл(ПутьКФайлу); 238 | ФС.ОбеспечитьКаталог(Файл.Путь); 239 | 240 | ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8NoBOM, , , РазделительСтрок); 241 | ЗаписьТекста.Записать(""); 242 | ЗаписьТекста.Закрыть(); 243 | КонецЕсли; 244 | 245 | ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу); 246 | НайденныйДобавляемыйТекст = ЧтениеТекста.Прочитать(); 247 | ЧтениеТекста.Закрыть(); 248 | Если СтрНайти(НайденныйДобавляемыйТекст, ДобавляемыйТекст) <> 0 Тогда 249 | Лог.Отладка("Файл уже содержит добавляемый текст"); 250 | Возврат; 251 | КонецЕсли; 252 | 253 | ЗаписьТекста = Новый ЗаписьТекста(); 254 | ЗаписьТекста.Открыть(ПутьКФайлу, КодировкаТекста.UTF8NoBOM, , Истина, РазделительСтрок); 255 | 256 | ЗаписьТекста.ЗаписатьСтроку(ДобавляемыйТекст); 257 | ЗаписьТекста.Закрыть(); 258 | 259 | Лог.Отладка("Текст добавлен в файл"); 260 | 261 | КонецПроцедуры 262 | 263 | Процедура ПроверитьНаличиеИспользуемойВерсии(Знач ИспользуемаяВерсия, Знач ВыполнятьУстановкуПриНеобходимости) 264 | 265 | Если ВерсииOneScript.ВерсияУстановлена(ИспользуемаяВерсия) Тогда 266 | Возврат; 267 | КонецЕсли; 268 | 269 | Если ВыполнятьУстановкуПриНеобходимости Тогда 270 | УстановщикOneScript = Новый УстановщикOneScript(); 271 | УстановщикOneScript.УстановитьOneScript(ИспользуемаяВерсия); 272 | Иначе 273 | ВызватьИсключение СтрШаблон("Не обнаружена требуемая версия <%1>", ИспользуемаяВерсия); 274 | КонецЕсли; 275 | 276 | КонецПроцедуры 277 | 278 | СистемнаяИнформация = Новый СистемнаяИнформация; 279 | ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0; 280 | Лог = ПараметрыOVM.ПолучитьЛог(); 281 | -------------------------------------------------------------------------------- /src/core/Классы/ДеинсталляторOneScript.os: -------------------------------------------------------------------------------- 1 | Перем Лог; 2 | 3 | // Удалить установленную версию OneScript 4 | // 5 | // Параметры: 6 | // УдаляемаяВерсия - Строка - Алиас версии, которую необходимо удалить 7 | // 8 | Процедура УдалитьOneScript(Знач УдаляемаяВерсия) Экспорт 9 | 10 | Если НЕ ВерсииOneScript.ВерсияУстановлена(УдаляемаяВерсия) Тогда 11 | Лог.Информация("Не обнаружена требуемая версия <%1>", УдаляемаяВерсия); 12 | Возврат; 13 | КонецЕсли; 14 | 15 | КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию(); 16 | КаталогУстановкиВерсии = ОбъединитьПути(КаталогУстановки, УдаляемаяВерсия); 17 | 18 | Лог.Отладка("Удаляю файлы %1", КаталогУстановкиВерсии); 19 | 20 | УдалитьФайлы(КаталогУстановкиВерсии); 21 | 22 | Лог.Информация("Версия %1 удалена", УдаляемаяВерсия); 23 | 24 | КонецПроцедуры 25 | 26 | // Удалить все установленные версии OneScript 27 | // 28 | Процедура УдалитьВсеВерсииOneScript() Экспорт 29 | СписокУстановленныхВерсий = ВерсииOneScript.ПолучитьСписокУстановленныхВерсий(); 30 | 31 | Для Каждого ВерсияКУдалению Из СписокУстановленныхВерсий Цикл 32 | Если ВерсияКУдалению.ЭтоСимлинк Тогда 33 | Продолжить; 34 | КонецЕсли; 35 | УдалитьOneScript(ВерсияКУдалению.Алиас); 36 | КонецЦикла; 37 | 38 | КонецПроцедуры 39 | 40 | Лог = ПараметрыOVM.ПолучитьЛог(); 41 | -------------------------------------------------------------------------------- /src/core/Классы/УстановщикOneScript.os: -------------------------------------------------------------------------------- 1 | #Использовать 1commands 2 | #Использовать fs 3 | #Использовать tempfiles 4 | 5 | Перем ЭтоWindows; 6 | Перем Лог; 7 | 8 | // Установка указанной версии OneScript. 9 | // Допустимо использовать трех-разрядные номера версий и шорткаты dev и stable 10 | // 11 | // Параметры: 12 | // ВерсияКУстановке - Строка - Имя версии, которую необходимо установить 13 | // АлиасВерсии - Строка - Имя каталога, в который необходимо установить OneScript. По умолчанию совпадает и 14 | // ВерсияКУстановке 15 | // ОчищатьКаталогУстановки - Булево - Необходимость очистки каталога, в который устанавливается версия. 16 | // 17 | Процедура УстановитьOneScript(Знач ВерсияКУстановке, Знач АлиасВерсии = "", Знач ОчищатьКаталогУстановки = Истина) Экспорт 18 | 19 | Лог.Информация("Установка OneScript %1...", ВерсияКУстановке); 20 | 21 | Если НЕ ЗначениеЗаполнено(АлиасВерсии) Тогда 22 | АлиасВерсии = ВерсияКУстановке; 23 | КонецЕсли; 24 | 25 | ПроверитьКорректностьПереданнойВерсии(ВерсияКУстановке); 26 | 27 | КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию(); 28 | КаталогУстановкиВерсии = ОбъединитьПути(КаталогУстановки, АлиасВерсии); 29 | 30 | ФС.ОбеспечитьКаталог(КаталогУстановки); 31 | Если ОчищатьКаталогУстановки Тогда 32 | ФС.ОбеспечитьПустойКаталог(КаталогУстановкиВерсии); 33 | Иначе 34 | ФС.ОбеспечитьКаталог(КаталогУстановкиВерсии); 35 | КонецЕсли; 36 | 37 | Лог.Отладка("Каталог установки версии: %1", КаталогУстановкиВерсии); 38 | 39 | Попытка 40 | ФайлУстановщика = СкачатьФайлУстановщика(ВерсияКУстановке); 41 | 42 | УстановитьOneScriptИзZipАрхива(ФайлУстановщика, КаталогУстановкиВерсии); 43 | ДобавитьSHСкриптыПриНеобходимости(КаталогУстановкиВерсии); 44 | Исключение 45 | УдалитьФайлы(КаталогУстановкиВерсии); 46 | ВызватьИсключение ОписаниеОшибки(); 47 | КонецПопытки; 48 | 49 | Лог.Информация("Установка OneScript %1 завершена", ВерсияКУстановке); 50 | Лог.Информация(""); 51 | 52 | КонецПроцедуры 53 | 54 | Функция СкачатьФайлУстановщика(Знач ВерсияКУстановке) 55 | 56 | Лог.Информация("Скачиваю установщик версии %1...", ВерсияКУстановке); 57 | 58 | ПутьКСохраняемомуФайлу = ВременныеФайлы.НовоеИмяФайла("zip"); 59 | 60 | Ресурс = ПолучитьПутьКСкачиваниюФайла(ВерсияКУстановке); 61 | Соединение = Новый HTTPСоединение(ПараметрыOVM.АдресСайтаОСкрипт()); 62 | Запрос = Новый HTTPЗапрос(Ресурс); 63 | 64 | Лог.Отладка("Сервер: %1. Ресурс: %2", Соединение.Сервер, Ресурс); 65 | 66 | Ответ = Соединение.Получить(Запрос, ПутьКСохраняемомуФайлу); 67 | Лог.Отладка("Код состояния: %1", Ответ.КодСостояния); 68 | 69 | Лог.Информация("Скачивание завершено"); 70 | 71 | HTTP_OK = 200; 72 | Если Ответ.КодСостояния <> HTTP_OK Тогда 73 | Лог.Ошибка( 74 | "Ошибка скачивания установщика. Текст ответа: 75 | |%1", 76 | Ответ.ПолучитьТелоКакСтроку() 77 | ); 78 | ВызватьИсключение Ответ.КодСостояния; 79 | КонецЕсли; 80 | 81 | Лог.Отладка("Файл установщика скачан: %1", ПутьКСохраняемомуФайлу); 82 | 83 | Возврат ПутьКСохраняемомуФайлу; 84 | 85 | КонецФункции 86 | 87 | Процедура УстановитьOneScriptИзZipАрхива(Знач ПутьКФайлуУстановщика, Знач КаталогУстановкиВерсии) 88 | 89 | Лог.Информация("Распаковка OneScript..."); 90 | 91 | ЧтениеZIPФайла = Новый ЧтениеZipФайла(ПутьКФайлуУстановщика); 92 | ЧтениеZIPФайла.ИзвлечьВсе(КаталогУстановкиВерсии); 93 | ЧтениеZIPФайла.Закрыть(); 94 | 95 | КонецПроцедуры 96 | 97 | Процедура ДобавитьSHСкриптыПриНеобходимости(Знач КаталогУстановкиВерсии) 98 | 99 | Если ЭтоWindows Тогда 100 | Возврат; 101 | КонецЕсли; 102 | 103 | ПутьКСкрипту = ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript"); 104 | ТекстСкрипта = 105 | "#!/bin/sh 106 | |dirpath=`dirname $0` 107 | |mono $dirpath/oscript.exe ""$@"" 108 | |"; 109 | 110 | ДобавитьShСкрипт(ПутьКСкрипту, ТекстСкрипта); 111 | 112 | ПутьКСкрипту = ОбъединитьПути(КаталогУстановкиВерсии, "bin", "opm"); 113 | ТекстСкрипта = 114 | "#!/bin/sh 115 | |dirpath=`dirname $0` 116 | |opmpath=$dirpath/../lib/opm/src/opm.os 117 | |if [ ! -f ""$opmpath"" ]; then 118 | | opmpath=$dirpath/../lib/opm/src/cmd/opm.os 119 | |fi 120 | |oscript ""$opmpath"" ""$@"" 121 | |"; 122 | 123 | ДобавитьShСкрипт(ПутьКСкрипту, ТекстСкрипта); 124 | 125 | КонецПроцедуры 126 | 127 | Процедура ДобавитьShСкрипт(Знач ПутьКСкрипту, Знач ТекстСкрипта) 128 | 129 | Лог.Информация("Создание sh-скрипта %1...", Новый Файл(ПутьКСкрипту).ИмяБезРасширения); 130 | 131 | Лог.Отладка("Путь с sh-скрипту: %1", ПутьКСкрипту); 132 | 133 | Лог.Отладка( 134 | "Текст скрипта: 135 | |%1", 136 | ТекстСкрипта 137 | ); 138 | 139 | Если ФС.ФайлСуществует(ПутьКСкрипту) Тогда 140 | Лог.Отладка("sh-скрипт уже существует"); 141 | Возврат; 142 | КонецЕсли; 143 | 144 | ЗаписьТекста = Новый ЗаписьТекста(ПутьКСкрипту, КодировкаТекста.UTF8NoBOM, , , Символы.ПС); 145 | 146 | ЗаписьТекста.Записать(ТекстСкрипта); 147 | ЗаписьТекста.Закрыть(); 148 | 149 | Лог.Отладка("Установка флага выполнения..."); 150 | 151 | Команда = Новый Команда; 152 | Команда.УстановитьКоманду("chmod"); 153 | Команда.ДобавитьПараметр("+x"); 154 | Команда.ДобавитьПараметр(ПутьКСкрипту); 155 | Команда.УстановитьПравильныйКодВозврата(0); 156 | 157 | Команда.Исполнить(); 158 | Лог.Отладка(Команда.ПолучитьВывод()); 159 | 160 | КонецПроцедуры 161 | 162 | Процедура ПроверитьКорректностьПереданнойВерсии(Знач ВерсияКУстановке) 163 | Если СтрРазделить(ВерсияКУстановке, ".").Количество() <> ПараметрыOVM.КоличествоРазрядовВНомереВерсии() 164 | И НРег(ВерсияКУстановке) <> "stable" 165 | И НРег(ВерсияКУстановке) <> "dev" Тогда 166 | 167 | Лог.Ошибка("Версия имеет некорректный формат"); 168 | 169 | ВызватьИсключение ВерсияКУстановке; 170 | КонецЕсли; 171 | КонецПроцедуры 172 | 173 | Функция ПолучитьПутьКСкачиваниюФайла(Знач ВерсияКУстановке) 174 | 175 | Если СтрРазделить(ВерсияКУстановке, ".").Количество() = ПараметрыOVM.КоличествоРазрядовВНомереВерсии() Тогда 176 | КаталогВерсии = СтрЗаменить(ВерсияКУстановке, ".", "_"); 177 | ИначеЕсли НРег(ВерсияКУстановке) = "stable" Тогда 178 | КаталогВерсии = "latest"; 179 | ИначеЕсли НРег(ВерсияКУстановке) = "dev" Тогда 180 | КаталогВерсии = "night-build"; 181 | Иначе 182 | ВызватьИсключение "Ошибка получения пути к файлу по версии"; 183 | КонецЕсли; 184 | ИмяФайла = "zip"; 185 | 186 | Ресурс = СтрШаблон("downloads/%1/%2", КаталогВерсии, ИмяФайла); 187 | Возврат Ресурс; 188 | 189 | КонецФункции 190 | 191 | СистемнаяИнформация = Новый СистемнаяИнформация; 192 | ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0; 193 | 194 | Лог = ПараметрыOVM.ПолучитьЛог(); 195 | -------------------------------------------------------------------------------- /src/core/Модули/ВерсииOneScript.os: -------------------------------------------------------------------------------- 1 | #Использовать 1commands 2 | #Использовать fluent 3 | #Использовать fs 4 | #Использовать logos 5 | 6 | Перем Лог; 7 | Перем ЭтоWindows; 8 | 9 | // Проверить, что версия установлена 10 | // 11 | // Параметры: 12 | // ПроверяемаяВерсия - Строка - Алиас версии 13 | // 14 | // Возвращаемое значение: 15 | // Булево - Версия установлена 16 | // 17 | Функция ВерсияУстановлена(Знач ПроверяемаяВерсия) Экспорт 18 | 19 | КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию(); 20 | КаталогУстановкиВерсии = ОбъединитьПути(КаталогУстановки, ПроверяемаяВерсия); 21 | 22 | Результат = ФС.КаталогСуществует(КаталогУстановкиВерсии); 23 | Результат = Результат И ФС.ФайлСуществует(ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript.exe")); 24 | 25 | Лог.Отладка("Версия %1 установлена: %2", ПроверяемаяВерсия, Результат); 26 | Возврат Результат; 27 | 28 | КонецФункции 29 | 30 | // Проверить, что переданная версия является текущей (активированной) 31 | // 32 | // Параметры: 33 | // ПроверяемаяВерсия - Строка - Алиас 34 | // 35 | // Возвращаемое значение: 36 | // Булево - Это текущая версия 37 | // 38 | Функция ЭтоТекущаяВерсия(Знач ПроверяемаяВерсия) Экспорт 39 | 40 | Если ПроверяемаяВерсия = "current" Тогда 41 | Возврат Истина; 42 | КонецЕсли; 43 | 44 | Если НЕ ВерсияУстановлена("current") Тогда 45 | Возврат Ложь; 46 | КонецЕсли; 47 | 48 | Если НЕ ВерсияУстановлена(ПроверяемаяВерсия) Тогда 49 | Возврат Ложь; 50 | КонецЕсли; 51 | 52 | ПутьКДвижкуТекущейВерсии = ПолучитьПутьКУстановленномуДвижкуOneScript("current"); 53 | ПутьКДвижкуПроверяемойВерсии = ПолучитьПутьКУстановленномуДвижкуOneScript(ПроверяемаяВерсия); 54 | 55 | ФайлДвижкаТекущейВерсии = Новый Файл(ПутьКДвижкуТекущейВерсии); 56 | ФайлДвижкаПроверяемойВерсии = Новый Файл(ПутьКДвижкуПроверяемойВерсии); 57 | 58 | ФайлыПроверяемойВерсииСовпадаетСТекущейВерсией = 59 | ФайлДвижкаТекущейВерсии.ПолучитьВремяИзменения() = ФайлДвижкаПроверяемойВерсии.ПолучитьВремяИзменения() 60 | И ФайлДвижкаТекущейВерсии.ПолучитьВремяСоздания() = ФайлДвижкаПроверяемойВерсии.ПолучитьВремяСоздания(); 61 | 62 | Возврат ФайлыПроверяемойВерсииСовпадаетСТекущейВерсией; 63 | 64 | КонецФункции 65 | 66 | // Получить информацию об установленных версиях 67 | // 68 | // Возвращаемое значение: 69 | // ТаблицаЗначений - Информация об установленных версиях: 70 | // * Алиас - Строка - Алиас версии (имя каталога) 71 | // * Путь - Строка - Полный путь к каталогу версии 72 | // * Версия - Строка - Точная версия OneScript 73 | // * ЭтоСимлинк - Булево - Каталог является символической ссылкой 74 | // 75 | Функция ПолучитьСписокУстановленныхВерсий() Экспорт 76 | 77 | УстановленныеВерсии = Новый ТаблицаЗначений; 78 | УстановленныеВерсии.Колонки.Добавить("Алиас"); 79 | УстановленныеВерсии.Колонки.Добавить("Путь"); 80 | УстановленныеВерсии.Колонки.Добавить("Версия"); 81 | УстановленныеВерсии.Колонки.Добавить("ЭтоСимлинк"); 82 | 83 | // TODO: определение симлинка на основании аттрибутов файла? 84 | МассивИменСимлинков = Новый Массив; 85 | МассивИменСимлинков.Добавить("current"); 86 | 87 | КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию(); 88 | НайденныеФайлы = НайтиФайлы(КаталогУстановки, ПолучитьМаскуВсеФайлы()); 89 | Для Каждого НайденныйФайл Из НайденныеФайлы Цикл 90 | Если НЕ ВерсияУстановлена(НайденныйФайл.Имя) Тогда 91 | Продолжить; 92 | КонецЕсли; 93 | 94 | СтрокаВерсии = УстановленныеВерсии.Добавить(); 95 | СтрокаВерсии.Алиас = НайденныйФайл.Имя; 96 | СтрокаВерсии.Путь = НайденныйФайл.ПолноеИмя; 97 | СтрокаВерсии.Версия = ПолучитьТочнуюВерсиюOneScript(СтрокаВерсии.Алиас); 98 | СтрокаВерсии.ЭтоСимлинк = МассивИменСимлинков.Найти(НайденныйФайл.Имя) <> Неопределено; 99 | 100 | КонецЦикла; 101 | 102 | Возврат УстановленныеВерсии; 103 | 104 | КонецФункции 105 | 106 | // Получить информацию о версиях, доступных к установке 107 | // 108 | // Возвращаемое значение: 109 | // ТаблицаЗначений - Информация об установленных версиях: 110 | // * Алиас - Строка - Алиас версии (имя каталога) 111 | // * Путь - Строка - Полный путь к каталогу версии 112 | // 113 | Функция ПолучитьСписокДоступныхКУстановкеВерсий() Экспорт 114 | 115 | ДоступныеВерсии = Новый ТаблицаЗначений; 116 | ДоступныеВерсии.Колонки.Добавить("Алиас"); 117 | ДоступныеВерсии.Колонки.Добавить("Путь"); 118 | 119 | АдресСайтаОСкрипт = ПараметрыOVM.АдресСайтаОСкрипт(); 120 | 121 | Соединение = Новый HTTPСоединение(АдресСайтаОСкрипт); 122 | Запрос = Новый HTTPЗапрос("downloads/archive"); 123 | 124 | Ответ = Соединение.Получить(Запрос); 125 | HTTP_OK = 200; 126 | Если Ответ.КодСостояния <> HTTP_OK Тогда 127 | ВызватьИсключение Ответ.КодСостояния; 128 | КонецЕсли; 129 | 130 | ТелоСтраницы = Ответ.ПолучитьТелоКакСтроку(); 131 | 132 | РегулярноеВыражение = Новый РегулярноеВыражение("(\d+\.\d+\.\d+(\.\d+)?)"); 133 | ИндексГруппыАдрес = 1; 134 | ИндексГруппыВерсия = 2; 135 | 136 | Совпадения = РегулярноеВыражение.НайтиСовпадения(ТелоСтраницы); 137 | Для Каждого СовпадениеРегулярногоВыражения Из Совпадения Цикл 138 | ГруппаАдрес = СовпадениеРегулярногоВыражения.Группы[ИндексГруппыАдрес]; 139 | ГруппаВерсия = СовпадениеРегулярногоВыражения.Группы[ИндексГруппыВерсия]; 140 | 141 | // TODO: Убрать после решения https://github.com/EvilBeaver/OneScript/issues/667 142 | Если ГруппаВерсия.Значение = "1.0.9" Тогда 143 | Продолжить; 144 | КонецЕсли; 145 | 146 | ДоступнаяВерсия = ДоступныеВерсии.Добавить(); 147 | ДоступнаяВерсия.Алиас = ГруппаВерсия.Значение; 148 | ДоступнаяВерсия.Путь = АдресСайтаОСкрипт + ГруппаАдрес.Значение; 149 | КонецЦикла; 150 | 151 | ОбеспечитьСтрокуВерсииПоАлиасу(ДоступныеВерсии, "dev", "Путь"); 152 | ОбеспечитьСтрокуВерсииПоАлиасу(ДоступныеВерсии, "stable", "Путь"); 153 | 154 | Возврат ДоступныеВерсии; 155 | 156 | КонецФункции 157 | 158 | // <Описание функции> 159 | // 160 | // Возвращаемое значение: 161 | // ТаблицаЗначений - Информация об установленных версиях: 162 | // * Алиас - Строка - Алиас версии (имя каталога) 163 | // * ПутьЛокальный - Строка - Полный путь к каталогу версии 164 | // * ПутьСервер - Строка - Полный путь к каталогу версии на сайте OneScript 165 | // * Версия - Строка - Точная версия OneScript (только для установленных версий) 166 | // * ЭтоСимлинк - Булево - Каталог является символической ссылкой 167 | // * ВерсияУстановлена - Булево - Установлена ли текущая версия 168 | // 169 | Функция ПолучитьСписокВсехВерсий() Экспорт 170 | 171 | СписокУстановленныхВерсий = ПолучитьСписокУстановленныхВерсий(); 172 | СписокДоступныхВерсий = ПолучитьСписокДоступныхКУстановкеВерсий(); 173 | 174 | ВсеВерсии = Новый ТаблицаЗначений; 175 | ВсеВерсии.Колонки.Добавить("Алиас", Новый ОписаниеТипов("Строка")); 176 | ВсеВерсии.Колонки.Добавить("Версия", Новый ОписаниеТипов("Строка")); 177 | ВсеВерсии.Колонки.Добавить("ПутьЛокальный", Новый ОписаниеТипов("Строка")); 178 | ВсеВерсии.Колонки.Добавить("ПутьСервер", Новый ОписаниеТипов("Строка")); 179 | ВсеВерсии.Колонки.Добавить("ЭтоСимлинк", Новый ОписаниеТипов("Булево")); 180 | ВсеВерсии.Колонки.Добавить("ВерсияУстановлена", Новый ОписаниеТипов("Булево")); 181 | 182 | Для Каждого ДоступнаяВерсия Из СписокДоступныхВерсий Цикл 183 | СтрокаВсеВерсии = ВсеВерсии.Найти(ДоступнаяВерсия.Алиас, "Алиас"); 184 | Если СтрокаВсеВерсии = Неопределено Тогда 185 | СтрокаВсеВерсии = ВсеВерсии.Добавить(); 186 | СтрокаВсеВерсии.Алиас = ДоступнаяВерсия.Алиас; 187 | СтрокаВсеВерсии.ЭтоСимлинк = Ложь; 188 | КонецЕсли; 189 | 190 | СтрокаВсеВерсии.ПутьСервер = ДоступнаяВерсия.Путь; 191 | КонецЦикла; 192 | 193 | Для Каждого УстановленнаяВерсия Из СписокУстановленныхВерсий Цикл 194 | СтрокаВсеВерсии = ВсеВерсии.Найти(УстановленнаяВерсия.Алиас, "Алиас"); 195 | Если СтрокаВсеВерсии = Неопределено Тогда 196 | СтрокаВсеВерсии = ВсеВерсии.Добавить(); 197 | СтрокаВсеВерсии.Алиас = УстановленнаяВерсия.Алиас; 198 | СтрокаВсеВерсии.ЭтоСимлинк = УстановленнаяВерсия.ЭтоСимлинк; 199 | КонецЕсли; 200 | 201 | СтрокаВсеВерсии.Версия = УстановленнаяВерсия.Версия; 202 | СтрокаВсеВерсии.ПутьЛокальный = УстановленнаяВерсия.Путь; 203 | СтрокаВсеВерсии.ВерсияУстановлена = Истина; 204 | КонецЦикла; 205 | 206 | ОбеспечитьСтрокуВерсииПоАлиасу(ВсеВерсии, "dev"); 207 | ОбеспечитьСтрокуВерсииПоАлиасу(ВсеВерсии, "stable"); 208 | 209 | ВсеВерсии.Сортировать("Алиас"); 210 | 211 | Возврат ВсеВерсии; 212 | 213 | КонецФункции 214 | 215 | // Получить полный путь к установленному движку OneScript (файлу oscript.exe) 216 | // 217 | // Параметры: 218 | // УстановленнаяВерсия - Строка - Алиас проверяемой версии 219 | // 220 | // Возвращаемое значение: 221 | // Строка - Полный путь к файлу oscript.exe 222 | // 223 | Функция ПолучитьПутьКУстановленномуДвижкуOneScript(Знач УстановленнаяВерсия) Экспорт 224 | 225 | УстановленныеВерсии = ПолучитьСписокУстановленныхВерсий(); 226 | 227 | ПутьКУстановленнойВерсии = ПроцессорыКоллекций.ИзКоллекции(УстановленныеВерсии) 228 | .Фильтровать( 229 | "Результат = Элемент.Алиас = ДополнительныеПараметры.УстановленнаяВерсия", 230 | Новый Структура("УстановленнаяВерсия", УстановленнаяВерсия)) 231 | .Первые(1) 232 | .Обработать("Результат = ОбъединитьПути(Элемент.Путь, ""bin"", ""oscript.exe"")") 233 | .ПолучитьПервый(); 234 | 235 | Возврат ПутьКУстановленнойВерсии; 236 | 237 | КонецФункции 238 | 239 | Процедура ОбеспечитьСтрокуВерсииПоАлиасу(ТаблицаВерсий, Алиас, ИмяРеквизитаПуть = "ПутьСервер") 240 | 241 | СтрокаВерсии = ТаблицаВерсий.Найти(Алиас, "Алиас"); 242 | 243 | Если СтрокаВерсии = Неопределено Тогда 244 | СтрокаВерсии = ТаблицаВерсий.Добавить(); 245 | СтрокаВерсии.Алиас = Алиас; 246 | КонецЕсли; 247 | 248 | СтрокаВерсии[ИмяРеквизитаПуть] = ПараметрыOVM.ПолныйАдресККаталогуДистрибутивов(); 249 | 250 | КонецПроцедуры 251 | 252 | Функция ПолучитьТочнуюВерсиюOneScript(Знач ПроверяемаяВерсия) 253 | 254 | КаталогУстановки = ПараметрыOVM.КаталогУстановкиПоУмолчанию(); 255 | КаталогУстановкиВерсии = ОбъединитьПути(КаталогУстановки, ПроверяемаяВерсия); 256 | ПутьКИсполняемомуФайлу = ОбъединитьПути(КаталогУстановкиВерсии, "bin", "oscript.exe"); 257 | 258 | Команда = Новый Команда(); 259 | 260 | Если ЭтоWindows Тогда 261 | Команда.УстановитьКоманду(ПутьКИсполняемомуФайлу); 262 | Иначе 263 | Команда.УстановитьКоманду("mono"); 264 | Команда.ДобавитьПараметр(ПутьКИсполняемомуФайлу); 265 | КонецЕсли; 266 | 267 | Команда.ДобавитьПараметр("-version"); 268 | 269 | Команда.Исполнить(); 270 | 271 | ВыводКоманды = СокрЛП(Команда.ПолучитьВывод()); 272 | Если СтрЧислоСтрок(ВыводКоманды) > 1 Тогда 273 | РегулярноеВыражение = Новый РегулярноеВыражение("Version (\d+\.\d+\.\d+\.\d+)"); 274 | Совпадения = РегулярноеВыражение.НайтиСовпадения(ВыводКоманды); 275 | Если Совпадения.Количество() = 1 Тогда 276 | ВыводКоманды = Совпадения[0].Группы[1].Значение; 277 | Иначе 278 | ВыводКоманды = "unknown"; 279 | КонецЕсли; 280 | КонецЕсли; 281 | 282 | Возврат ВыводКоманды; 283 | 284 | КонецФункции 285 | 286 | СистемнаяИнформация = Новый СистемнаяИнформация; 287 | ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0; 288 | // TODO: После фикса движка вернуться на получение лога из ПараметровOVM 289 | Лог = Логирование.ПолучитьЛог("oscript.app.ovm"); 290 | -------------------------------------------------------------------------------- /src/core/Модули/ЛогосАппендер.os: -------------------------------------------------------------------------------- 1 | ////////////////////////////////////////////////////////////////////////// 2 | // 3 | // LOGOS: вывод в консоль 4 | // 5 | ////////////////////////////////////////////////////////////////////////// 6 | 7 | Перем КартаСтатусовИУровней; 8 | 9 | // Вывести сообщение через аппендер 10 | // 11 | // Параметры: 12 | // Сообщение - Строка - Выводимое сообщение 13 | // 14 | Процедура Вывести(Знач Сообщение, УровеньСообщения) Экспорт 15 | 16 | Сообщить(Сообщение, КартаСтатусовИУровней[УровеньСообщения]); 17 | 18 | КонецПроцедуры 19 | 20 | // Закрыть аппендер 21 | // 22 | Процедура Закрыть() Экспорт 23 | // NO-OP 24 | КонецПроцедуры 25 | 26 | // Устанавливает свойство аппендера, заданное в конфигурационном файле 27 | // 28 | // Параметры: 29 | // ИмяСвойства - Строка - Имя свойства 30 | // Значение - Произвольный - Значение свойства 31 | // 32 | Процедура УстановитьСвойство(Знач ИмяСвойства, Знач Значение) Экспорт 33 | Если ИмяСвойства = "message-status" Тогда 34 | УстанавливаемыйСтатусСообщения = Значение; 35 | КонецЕсли; 36 | КонецПроцедуры // УстановитьСвойство() 37 | 38 | КартаСтатусовИУровней = Новый Соответствие; 39 | КартаСтатусовИУровней.Вставить(УровниЛога.Отладка, СтатусСообщения.БезСтатуса); 40 | КартаСтатусовИУровней.Вставить(УровниЛога.Информация, СтатусСообщения.Обычное); 41 | КартаСтатусовИУровней.Вставить(УровниЛога.Предупреждение, СтатусСообщения.Внимание); 42 | КартаСтатусовИУровней.Вставить(УровниЛога.Ошибка, СтатусСообщения.Важное); 43 | КартаСтатусовИУровней.Вставить(УровниЛога.КритичнаяОшибка, СтатусСообщения.ОченьВажное); 44 | -------------------------------------------------------------------------------- /src/core/Модули/ПараметрыOVM.os: -------------------------------------------------------------------------------- 1 | #Использовать logos 2 | 3 | Перем СистемнаяИнформация; 4 | Перем Лог; 5 | Перем ОсновнойСпособВывода; 6 | 7 | // Путь к каталогу установки версий OneScript по умолчанию 8 | // 9 | // Возвращаемое значение: 10 | // Строка - Путь к каталогу установки по умолчанию 11 | // 12 | Функция КаталогУстановкиПоУмолчанию() Экспорт 13 | 14 | КаталогУстановкиПоУмолчанию = ПолучитьПеременнуюСреды("OVM_INSTALL_PATH"); 15 | Если НЕ ЗначениеЗаполнено(КаталогУстановкиПоУмолчанию) Тогда 16 | КаталогУстановкиПоУмолчанию = ОбъединитьПути( 17 | СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ЛокальныйКаталогДанныхПриложений), 18 | "ovm" 19 | ); 20 | КонецЕсли; 21 | 22 | Возврат КаталогУстановкиПоУмолчанию; 23 | 24 | КонецФункции 25 | 26 | // Адрес сайта OneScript 27 | // 28 | // Возвращаемое значение: 29 | // Строка - Адрес сайта OneScript 30 | // 31 | Функция АдресСайтаОСкрипт() Экспорт 32 | Возврат "http://oscript.io"; 33 | КонецФункции 34 | 35 | // Полный адрес к каталогу дистрибутивов OneScript 36 | // 37 | // Возвращаемое значение: 38 | // Строка - Полный адрес к каталогу дистрибутивов OneScript 39 | // 40 | Функция ПолныйАдресККаталогуДистрибутивов() Экспорт 41 | Возврат АдресСайтаОСкрипт() + "/downloads"; 42 | КонецФункции 43 | 44 | // Количество разрядов в номере версии. 45 | // В приложении используется версионирование вида 1.0.20 46 | // 47 | // Возвращаемое значение: 48 | // Число - Количество разрядов в номере версии 49 | // 50 | Функция КоличествоРазрядовВНомереВерсии() Экспорт 51 | Возврат 3; 52 | КонецФункции 53 | 54 | // Получить основной лог приложения 55 | // 56 | // Возвращаемое значение: 57 | // Лог - Основной лог приложения 58 | // 59 | Функция ПолучитьЛог() Экспорт 60 | Возврат Лог; 61 | КонецФункции 62 | 63 | // Получить основной способ вывода 64 | // 65 | // Возвращаемое значение: 66 | // СпособВывода - Способ вывода фреймворка логирования logos 67 | // 68 | Функция ПолучитьОсновнойСпособВывода() Экспорт 69 | Возврат ОсновнойСпособВывода; 70 | КонецФункции 71 | 72 | // Форматирование строки, выводимой в лог (раскладка). 73 | // 74 | // Параметры: 75 | // Уровень - УровниЛога - Уровень логирования выводимого сообщения 76 | // Сообщение - Строка - Выводимое сообщение 77 | // 78 | // Возвращаемое значение: 79 | // Строка - Сообщение, отформатированное с учетом раскладки 80 | // 81 | Функция Форматировать(Знач Уровень, Знач Сообщение) Экспорт 82 | 83 | Если Уровень = УровниЛога.Отладка ИЛИ Уровень = УровниЛога.Ошибка Тогда 84 | Сообщение = СтрШаблон("%1 - %2", УровниЛога.НаименованиеУровня(Уровень), Сообщение); 85 | КонецЕсли; 86 | 87 | Возврат Сообщение; 88 | 89 | КонецФункции 90 | 91 | СистемнаяИнформация = Новый СистемнаяИнформация; 92 | ОсновнойСпособВывода = ЛогосАппендер; 93 | 94 | Лог = Логирование.ПолучитьЛог("oscript.app.ovm"); 95 | Лог.УстановитьРаскладку(ЭтотОбъект); 96 | Лог.ДобавитьСпособВывода(ОсновнойСпособВывода); 97 | -------------------------------------------------------------------------------- /tasks/coverage.os: -------------------------------------------------------------------------------- 1 | #Использовать 1commands 2 | #Использовать asserts 3 | #Использовать fs 4 | #Использовать json 5 | 6 | СистемнаяИнформация = Новый СистемнаяИнформация; 7 | ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; 8 | 9 | ФС.ОбеспечитьПустойКаталог("coverage"); 10 | ПутьКСтат = "coverage/stat.json"; 11 | 12 | Команда = Новый Команда; 13 | Команда.УстановитьКоманду("oscript"); 14 | Если НЕ ЭтоWindows Тогда 15 | Команда.ДобавитьПараметр("-encoding=utf-8"); 16 | КонецЕсли; 17 | Команда.ДобавитьПараметр(СтрШаблон("-codestat=%1", ПутьКСтат)); 18 | Команда.ДобавитьПараметр("tasks/test.os"); 19 | Команда.ПоказыватьВыводНемедленно(Истина); 20 | 21 | КодВозврата = Команда.Исполнить(); 22 | 23 | Файл_Стат = Новый Файл(ПутьКСтат); 24 | Ожидаем.Что(Файл_Стат.Существует(), СтрШаблон("Файл <%1> с результатами покрытия не существует!", Файл_Стат.ПолноеИмя)).ЭтоИстина(); 25 | 26 | ЧтениеТекста = Новый ЧтениеТекста(ПутьКСтат, КодировкаТекста.UTF8); 27 | 28 | СтрокаJSON = ЧтениеТекста.Прочитать(); 29 | ЧтениеТекста.Закрыть(); 30 | 31 | Парсер = Новый ПарсерJSON(); 32 | ДанныеПокрытия = Парсер.ПрочитатьJSON(СтрокаJSON); 33 | 34 | ЗаписьXML = Новый ЗаписьXML; 35 | ЗаписьXML.ОткрытьФайл("coverage/genericCoverage.xml"); 36 | ЗаписьXML.ЗаписатьОбъявлениеXML(); 37 | ЗаписьXML.ЗаписатьНачалоЭлемента("coverage"); 38 | ЗаписьXML.ЗаписатьАтрибут("version", "1"); 39 | 40 | Для Каждого Файл Из ДанныеПокрытия Цикл 41 | 42 | ДанныеФайла = Файл.Значение; 43 | 44 | ЗаписьXML.ЗаписатьНачалоЭлемента("file"); 45 | ЗаписьXML.ЗаписатьАтрибут("path", ДанныеФайла.Получить("#path")); 46 | 47 | Для Каждого КлючИЗначение Из ДанныеФайла Цикл 48 | 49 | Если КлючИЗначение.Ключ = "#path" Тогда 50 | Продолжить; 51 | КонецЕсли; 52 | 53 | ДанныеПроцедуры = КлючИЗначение.Значение; 54 | Для Каждого ДанныеСтроки Из ДанныеПроцедуры Цикл 55 | 56 | ЗаписьXML.ЗаписатьНачалоЭлемента("lineToCover"); 57 | 58 | ЗаписьXML.ЗаписатьАтрибут("lineNumber", ДанныеСтроки.Ключ); 59 | Покрыто = Число(ДанныеСтроки.Значение.Получить("count")) > 0; 60 | ЗаписьXML.ЗаписатьАтрибут("covered", Формат(Покрыто, "БИ=true; БЛ=false")); 61 | 62 | ЗаписьXML.ЗаписатьКонецЭлемента(); // lineToCover 63 | КонецЦикла 64 | КонецЦикла; 65 | 66 | ЗаписьXML.ЗаписатьКонецЭлемента(); // file 67 | 68 | КонецЦикла; 69 | 70 | ЗаписьXML.ЗаписатьКонецЭлемента(); // coverage 71 | ЗаписьXML.Закрыть(); 72 | 73 | ЗавершитьРаботу(КодВозврата); 74 | -------------------------------------------------------------------------------- /tasks/oscript.cfg: -------------------------------------------------------------------------------- 1 | lib.additional=../oscript_modules 2 | -------------------------------------------------------------------------------- /tasks/test.os: -------------------------------------------------------------------------------- 1 | #Использовать 1bdd 2 | 3 | КаталогФич = ОбъединитьПути(".", "features"); 4 | 5 | Файл_КаталогФич = Новый Файл(КаталогФич); 6 | 7 | ИсполнительБДД = Новый ИсполнительБДД; 8 | РезультатВыполнения = ИсполнительБДД.ВыполнитьФичу(Файл_КаталогФич, Файл_КаталогФич); 9 | ИтоговыйРезультатВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатВыполнения); 10 | 11 | ГенераторОтчетаJUnit = Новый ГенераторОтчетаJUnit; 12 | ГенераторОтчетаJUnit.Сформировать(РезультатВыполнения, ИтоговыйРезультатВыполнения, "junit-bdd.xml"); 13 | 14 | Сообщить(ИтоговыйРезультатВыполнения); 15 | Если ИтоговыйРезультатВыполнения = ИсполнительБДД.ВозможныеСтатусыВыполнения().Сломался Тогда 16 | ВызватьИсключение 1; 17 | КонецЕсли; 18 | -------------------------------------------------------------------------------- /travis.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | oscript tasks/coverage.os 5 | 6 | temp=`cat src/cmd/Модули/ПараметрыПриложения.os | grep "Версия = " | sed 's|[^"]*"||' | sed -r 's/".+//'` 7 | version=${temp##*|} 8 | 9 | if [ "$TRAVIS_BRANCH" == "develop" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then 10 | sonar-scanner \ 11 | -Dsonar.host.url=https://opensonar.silverbulleters.org \ 12 | -Dsonar.login=$SONAR_TOKEN \ 13 | -Dsonar.projectVersion=$version\ 14 | -Dsonar.scanner.skip=false 15 | fi 16 | --------------------------------------------------------------------------------