wbond / package_control

The Sublime Text package manager
https://packagecontrol.io
4.79k stars 816 forks source link

SemVer version selection error #1578

Closed deathaxe closed 3 years ago

deathaxe commented 3 years ago

It appears version selection algorithm gets confused with first two release patterns if running on a ST built which exactly matches the edge case. I'd read second rule as "use 3176- tag for all ST builts from 3176 to 4106. But it actually seems to be 3177 to 4106 atm.

Package Control 3.4.1

Configured releases

{
    "sublime_text": "<3176",
    "tags": true
},
{
    "sublime_text": "3176 - 4106",
    "tags": "3176-"
},
{
    "sublime_text": ">=4107",
    "tags": "4107-"
}

ST 3143 / ST 3177+

Displays semver correctly.

grafik

ST 3176

Shows timestamp instead of semver version.

grafik

deathaxe commented 3 years ago

As a result ST3176 users can't even opt-in to pre-releases.

deathaxe commented 3 years ago

Wrote some tests and most of them fail. Appears `is_compatible_version()´ is seriously broken.

Running Package Control Tests

FFFF......FF
======================================================================
FAIL: test_version_greater_or_equal_than (Package Control.package_control.tests.providers.VersionSelectorTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Apps\Sublime Text\Data\Packages\Package Control\package_control\tests\providers.py", line 2245, in test_version_greater_or_equal_than
    self.assertTrue(is_compatible_version(">=3176", 3176))
AssertionError: False is not true

======================================================================
FAIL: test_version_greater_than (Package Control.package_control.tests.providers.VersionSelectorTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Apps\Sublime Text\Data\Packages\Package Control\package_control\tests\providers.py", line 2239, in test_version_greater_than
    self.assertTrue(is_compatible_version(">3176", 3177))
AssertionError: False is not true

======================================================================
FAIL: test_version_less_or_equal_than (Package Control.package_control.tests.providers.VersionSelectorTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Apps\Sublime Text\Data\Packages\Package Control\package_control\tests\providers.py", line 2233, in test_version_less_or_equal_than
    self.assertTrue(is_compatible_version("<=3176", 3176))
AssertionError: False is not true

======================================================================
FAIL: test_version_less_than (Package Control.package_control.tests.providers.VersionSelectorTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Apps\Sublime Text\Data\Packages\Package Control\package_control\tests\providers.py", line 2226, in test_version_less_than
    self.assertTrue(is_compatible_version("<3176", 3175))
AssertionError: False is not true

======================================================================
FAIL: test_version_range_lower_bound (Package Control.package_control.tests.providers.VersionSelectorTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Apps\Sublime Text\Data\Packages\Package Control\package_control\tests\providers.py", line 2255, in test_version_range_lower_bound
    self.assertTrue(is_compatible_version("3176 - 3211", 3176))
AssertionError: False is not true

======================================================================
FAIL: test_version_range_upper_bound (Package Control.package_control.tests.providers.VersionSelectorTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Apps\Sublime Text\Data\Packages\Package Control\package_control\tests\providers.py", line 2258, in test_version_range_upper_bound
    self.assertTrue(is_compatible_version("3176 - 3211", 3211))
AssertionError: False is not true

----------------------------------------------------------------------