-
Notifications
You must be signed in to change notification settings - Fork 2
Поддержка semver в части пререлизов и метаданных билда #7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
31 commits
Select commit
Hold shift + click to select a range
74c855f
Finish 0.5.0
khorevaa 5a36bc6
Finish 0.5.1
khorevaa 4b72bd0
Finish 0.5.1
khorevaa cbc8fa1
Finish 0.5.2
khorevaa 9e38162
Merge remote-tracking branch 'remotes/origin/master' into develop
EvilBeaver a0450cf
Модули добавлены в игнор
EvilBeaver 2f8ab48
Бамп версии
EvilBeaver 3cedf48
Новый парсер сегментов версии
EvilBeaver 4b2545f
Отказ от fluent в поиске максимума версий
EvilBeaver b104f24
Исправлена ошибка при поиске максимальной версии
sfaqer ad99219
Поднята зависимость от движка
sfaqer 073ede0
Merge branch 'develop'
sfaqer a118bb5
Влиты изменения из ствола
EvilBeaver 9b33f59
Работоспособный парсер семвера
EvilBeaver 1a9e7c3
Немножко рефакторинга
EvilBeaver afae911
Ошибочно вкоммичен launch.json
EvilBeaver ef1ade3
Добавил тесты на склейку дефисов и исправил ошибку
EvilBeaver 655a983
Замечания по ревью
EvilBeaver 10fc0a0
Красный тест сравнения пререлизов
EvilBeaver a678273
Сравнение версий с учетом пререлизов
EvilBeaver 7ba53eb
Тестирование OneUnit для dev
sfaqer 882b3d2
ПолучитьСписокТестов -> &Тест
sfaqer 03cc185
Убран импорт fluent
nixel2007 dedad74
Create qa.yaml
nixel2007 25d4331
Create sonar-project.properties
nixel2007 5dfe792
Потерянный экспорт
nixel2007 2ae472e
Зависимость от coverage
sfaqer d08cb2e
Update coverage.os
nixel2007 40dd5f7
Исправление замечаний кролика
sfaqer 6dc7e61
Исправлена ошибка сравнения релизной версии и однокомпонентного RC
sfaqer e9683ab
Merge branch 'master' into feature/prereleases-2
sfaqer File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
name: Контроль качества | ||
|
||
on: | ||
push: | ||
pull_request: | ||
workflow_dispatch: | ||
|
||
jobs: | ||
sonar: | ||
uses: autumn-library/workflows/.github/workflows/sonar.yml@v1 | ||
with: | ||
github_repository: oscript-library/semver | ||
coveralls: true | ||
secrets: | ||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
sonar.projectKey=semver | ||
sonar.projectName=semver | ||
sonar.sources=./src | ||
sonar.tests=./tests | ||
sonar.sourceEncoding=UTF-8 | ||
sonar.coverageReportPaths=out/genericCoverage.xml |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,7 +8,7 @@ | |
Перем Патч Экспорт; // число | ||
|
||
Перем ПреРелиз Экспорт; // Массив | ||
Перем НомерБилда Экспорт; // Массив; | ||
Перем МетаданныеСборки Экспорт; // Массив; | ||
Перем ОшибкаЧтенияВерсии Экспорт; | ||
|
||
Процедура ПриСозданииОбъекта(Знач ВерсияСтрокой) | ||
|
@@ -17,6 +17,7 @@ | |
Второстепенная = 0; | ||
Патч = 0; | ||
ПреРелиз = Новый Массив; | ||
МетаданныеСборки = Новый Массив; | ||
|
||
Прочитать(ВерсияСтрокой); | ||
|
||
|
@@ -47,6 +48,14 @@ | |
Функция ВСтроку() Экспорт | ||
|
||
СтрокаВерсии = СтрШаблон("%1.%2.%3", Строка(Основная), Строка(Второстепенная), Строка(Патч)); | ||
|
||
Если ПреРелиз.Количество() Тогда | ||
СтрокаВерсии = СтрокаВерсии + "-" + СтрСоединить(ПреРелиз, "."); | ||
КонецЕсли; | ||
|
||
Если МетаданныеСборки.Количество() Тогда | ||
СтрокаВерсии = СтрокаВерсии + "+" + СтрСоединить(МетаданныеСборки, "."); | ||
КонецЕсли; | ||
|
||
Возврат СтрокаВерсии; | ||
|
||
|
@@ -64,7 +73,7 @@ | |
|
||
Если НЕ Основная = ВходящаяВерсия.Основная Тогда | ||
|
||
Возврат ?(Основная > ВходящаяВерсия.Основная,1,-1); | ||
Возврат ?(Основная > ВходящаяВерсия.Основная, 1,-1); | ||
|
||
КонецЕсли; | ||
|
||
|
@@ -86,12 +95,7 @@ | |
КонецЕсли; | ||
|
||
Если ПреРелиз.Количество() = 0 | ||
И ВходящаяВерсия.ПреРелиз.Количество() = 0 Тогда | ||
Возврат 0; | ||
КонецЕсли; | ||
|
||
Если ПреРелиз.Количество() = 0 | ||
И ВходящаяВерсия.ПреРелиз.Количество() > 1 Тогда | ||
И ВходящаяВерсия.ПреРелиз.Количество() > 0 Тогда | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. А тест? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Предыдущим коммитом |
||
Возврат 1; | ||
КонецЕсли; | ||
|
||
|
@@ -100,7 +104,7 @@ | |
Возврат -1; | ||
КонецЕсли; | ||
|
||
Возврат 0; | ||
Возврат СравнитьПререлизы(ВходящаяВерсия.ПреРелиз); | ||
|
||
КонецФункции | ||
|
||
|
@@ -164,6 +168,38 @@ | |
Возврат Сравнить(ВходящаяВерсия) >= 0; | ||
КонецФункции | ||
|
||
Функция СравнитьПреРелизы(Знач Сравниваемое) | ||
// Поэлементное сравнение | ||
Для Сч = 0 По Макс(ПреРелиз.ВГраница(), Сравниваемое.ВГраница()) Цикл | ||
// Больший набор предрелизных символов имеет больший приоритет, | ||
sfaqer marked this conversation as resolved.
Show resolved
Hide resolved
|
||
// чем меньший набор, если сравниваемые идентификаторы равны => | ||
// если компоненты будут равны, побеждает тот, у кого компонентов больше | ||
sfaqer marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
Если Сч > ПреРелиз.ВГраница() Тогда | ||
Возврат -1; | ||
ИначеЕсли Сч > Сравниваемое.ВГраница() Тогда | ||
Возврат 1; | ||
КонецЕсли; | ||
|
||
Текущий = ПреРелиз[Сч]; | ||
Входящий = Сравниваемое[Сч]; | ||
|
||
Если Текущий = Входящий Тогда | ||
Продолжить; | ||
КонецЕсли; | ||
|
||
// Численные идентификаторы имеют низший приоритет | ||
Если ТипЗнч(Текущий) <> ТипЗнч(Входящий) Тогда | ||
Возврат ?(ТипЗнч(Текущий) = Тип("Строка"), 1, -1); | ||
КонецЕсли; | ||
|
||
Возврат ?(Текущий > Входящий, 1, -1); | ||
|
||
КонецЦикла; | ||
|
||
Возврат 0; | ||
КонецФункции | ||
|
||
Процедура Прочитать(Знач ВерсияСтрокой) | ||
|
||
Если СтрДлина(ВерсияСтрокой) = 0 Тогда | ||
|
@@ -173,64 +209,128 @@ | |
|
||
ВерсияСтрокой = ПодготовитьКЧтению(ВерсияСтрокой); | ||
|
||
МассивСтрокВерсии = СтрРазделить(ВерсияСтрокой, "."); | ||
|
||
Если МассивСтрокВерсии.Количество() < 3 Тогда | ||
ОшибкаЧтенияВерсии = "Не найдены все составляющие версии"; | ||
Возврат; | ||
КонецЕсли; | ||
Парсер = Новый ПарсерВерсии(ВерсияСтрокой); | ||
Парсер.Следующий(); | ||
|
||
СтрокаОсновнаяВерсия = МассивСтрокВерсии[0]; | ||
Попытка | ||
ПрочитатьЧислоДоРазделителя(Парсер, Основная, "Основная версия"); | ||
ПрочитатьРазделитель(Парсер, "."); | ||
ПрочитатьЧислоДоРазделителя(Парсер, Второстепенная, "Второстепенная версия"); | ||
ПрочитатьРазделитель(Парсер, "."); | ||
ПрочитатьЧислоДоРазделителя(Парсер, Патч, "Версия патча"); | ||
ПрочитатьХвостовыеМассивы(Парсер); | ||
Исключение | ||
ОшибкаЧтенияВерсии = ИнформацияОбОшибке().Описание; | ||
КонецПопытки; | ||
|
||
Если Не СтроковыеФункции.ТолькоЦифрыВСтроке(СтрокаОсновнаяВерсия) Тогда | ||
|
||
ОшибкаЧтенияВерсии = СтрШаблон("Основная версия <%1> должна содержать только цифры",СтрокаОсновнаяВерсия); | ||
Возврат; | ||
КонецПроцедуры | ||
|
||
Процедура ПрочитатьРазделитель(Знач Парсер, Знач Разделитель) | ||
EvilBeaver marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
ТекущийТокен = Парсер.Текущий(); | ||
Если ТекущийТокен.Тип = Парсер.ТипКонецТекста Тогда | ||
Возврат; | ||
КонецЕсли; | ||
|
||
Если ТекущийТокен.Тип = Парсер.ТипРазделитель Тогда | ||
Если Разделитель = ТекущийТокен.Значение Тогда | ||
СледующийТокен = Парсер.Следующий(); | ||
Если СледующийТокен.Тип = Парсер.ТипКонецТекста Тогда | ||
ВызватьИсключение СтрШаблон("Неожиданный конец строки версии, нет данных после разделителя <%1>", Разделитель); | ||
КонецЕсли; | ||
Возврат; | ||
КонецЕсли; | ||
КонецЕсли; | ||
|
||
Основная = Число(СтрокаОсновнаяВерсия); | ||
|
||
СтрокаВторостепеннаяВерсия = МассивСтрокВерсии[1]; | ||
ВызватьИсключение СтрШаблон("Ожидается разделитель <%1>, но получен <%2>", Разделитель, ТекущийТокен.Значение); | ||
|
||
КонецПроцедуры | ||
|
||
Если Не СтроковыеФункции.ТолькоЦифрыВСтроке(СтрокаВторостепеннаяВерсия) Тогда | ||
|
||
ОшибкаЧтенияВерсии = СтрШаблон("Второстепенная версия <%1> должна содержать только цифры",СтрокаОсновнаяВерсия); | ||
Возврат; | ||
|
||
Процедура ПрочитатьЧислоДоРазделителя(Знач Парсер, Результат, Знач УточнениеИсключения) | ||
Токен = Парсер.Текущий(); | ||
Если Токен.Тип = Парсер.ТипКонецТекста Тогда | ||
Возврат; | ||
КонецЕсли; | ||
|
||
Второстепенная = Число(СтрокаВторостепеннаяВерсия); | ||
Если Токен.Тип = Парсер.ТипЧисло Тогда | ||
Результат = Число(Токен.Значение); | ||
ИначеЕсли Токен.Тип = Парсер.ТипОшибка Тогда | ||
ВызватьИсключение Токен.Значение; | ||
Иначе | ||
ВызватьИсключение СтрШаблон("%1 <%2> должна содержать только цифры", УточнениеИсключения, Токен.Значение); | ||
КонецЕсли; | ||
|
||
СтрокаПатчаВерсии = МассивСтрокВерсии[2]; | ||
Парсер.Следующий(); | ||
КонецПроцедуры | ||
|
||
Если Не СтроковыеФункции.ТолькоЦифрыВСтроке(СтрокаПатчаВерсии) Тогда | ||
|
||
ОшибкаЧтенияВерсии = СтрШаблон("Версия патча <%1> должна содержать только цифры",СтрокаОсновнаяВерсия); | ||
Возврат; | ||
|
||
Процедура ПрочитатьХвостовыеМассивы(Знач Парсер) | ||
Токен = Парсер.Текущий(); | ||
Если Токен.Тип = Парсер.ТипКонецТекста Тогда | ||
Возврат; | ||
КонецЕсли; | ||
|
||
Если Токен.Тип <> Парсер.ТипРазделитель или Токен.Значение = "." Тогда | ||
ВызватьИсключение "Ожидается разделитель пререлизной версии <-> или метаданных сборки <+>, получен <" + Токен.Значение + ">"; | ||
КонецЕсли; | ||
|
||
Патч = Число(СтрокаПатчаВерсии); | ||
ПрочитатьПреРелиз(Парсер); | ||
ПрочитатьМетаданныеСборки(Парсер); | ||
|
||
КонецПроцедуры | ||
|
||
Функция ПодготовитьКЧтению(Знач СтрокаВерсии) | ||
|
||
Если СтрНачинаетсяС(СтрокаВерсии, "v") Тогда | ||
СтрокаВерсии = СтрЗаменить(СтрокаВерсии, "v", ""); | ||
Процедура ПрочитатьПреРелиз(Знач Парсер) | ||
Если Парсер.Текущий().Значение = "-" Тогда | ||
Парсер.Следующий(); | ||
СобратьМассивИзКомпонентов(Парсер, ПреРелиз, "+"); | ||
КонецЕсли; | ||
КонецПроцедуры | ||
|
||
Процедура ПрочитатьМетаданныеСборки(Знач Парсер) | ||
Если Парсер.Текущий().Значение = "+" Тогда | ||
Парсер.Следующий(); | ||
СобратьМассивИзКомпонентов(Парсер, МетаданныеСборки, ""); | ||
КонецЕсли; | ||
КонецПроцедуры | ||
|
||
МассивСтрокВерсии = СтрРазделить(СтрокаВерсии, "."); | ||
Процедура СобратьМассивИзКомпонентов(Знач Парсер, Знач МассивКомпонентов, Знач ПрерватьПо) | ||
|
||
Пока Истина Цикл | ||
МассивКомпонентов.Добавить(ПрочитатьКомпонент(Парсер)); | ||
Если Парсер.Текущий().Значение = ПрерватьПо или Парсер.Текущий().Тип = Парсер.ТипКонецТекста Тогда | ||
Прервать; | ||
КонецЕсли; | ||
|
||
КоличествоДобавления = 3 - МассивСтрокВерсии.Количество(); | ||
ПрочитатьРазделитель(Парсер, "."); | ||
|
||
Для ИИ = 1 ПО КоличествоДобавления Цикл | ||
МассивСтрокВерсии.Добавить(0); | ||
КонецЦикла; | ||
|
||
Возврат СтрСоединить(МассивСтрокВерсии, "."); | ||
КонецПроцедуры | ||
|
||
Функция ПрочитатьКомпонент(Знач Парсер) | ||
Токен = Парсер.Текущий(); | ||
Если Токен.Тип = Парсер.ТипЧисло Тогда | ||
Парсер.Следующий(); | ||
Возврат Число(Токен.Значение); | ||
ИначеЕсли Токен.Тип = Парсер.ТипТекст Тогда | ||
Текст = ""; | ||
ТекТокен = Парсер.Текущий(); | ||
Пока ТекТокен.Тип = Парсер.ТипТекст или ТекТокен.Значение = "-" Цикл | ||
Текст = Текст + ТекТокен.Значение; | ||
ТекТокен = Парсер.Следующий(); | ||
КонецЦикла; | ||
Возврат Текст; | ||
Иначе | ||
ВызватьИсключение СтрШаблон("Ожидается компонент версии, но получен <%1>", ?(Токен.Значение = "", "EOF", Токен.Значение)); | ||
КонецЕсли; | ||
КонецФункции | ||
|
||
Функция ПодготовитьКЧтению(Знач СтрокаВерсии) | ||
|
||
Если СтрНачинаетсяС(СтрокаВерсии, "v") Тогда | ||
СтрокаВерсии = Сред(СтрокаВерсии, 2); | ||
КонецЕсли; | ||
|
||
Возврат СтрокаВерсии; | ||
|
||
КонецФункции | ||
|
||
|
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.