├── .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 |
--------------------------------------------------------------------------------