Skip to content

Commit

Permalink
Merge pull request #7723 from blink1073/extension-compat
Browse files Browse the repository at this point in the history
Fix Compatibility Check for Prereleases
  • Loading branch information
jasongrout committed Jan 7, 2020
2 parents c5a560e + 46bce5d commit 3c2f3cb
Showing 1 changed file with 22 additions and 6 deletions.
28 changes: 22 additions & 6 deletions jupyterlab/commands.py
Expand Up @@ -1706,7 +1706,10 @@ def sort_key(key_value):

for (key, value) in latest_deps.items():
if key in singletons:
c = _compare_ranges(core_deps[key], value)
# Drop prereleases in comparisons to allow extension authors
# to not have to update their versions for each
# Jupyterlab prerelease version.
c = _compare_ranges(core_deps[key], value, drop_prerelease1=True)
lab_newer_than_latest = lab_newer_than_latest or c < 0
latest_newer_than_lab = latest_newer_than_lab or c > 0

Expand Down Expand Up @@ -1922,26 +1925,30 @@ def _validate_compatibility(extension, deps, core_data):

for (key, value) in deps.items():
if key in singletons:
overlap = _test_overlap(core_deps[key], value)
# Drop prereleases in comparisons to allow extension authors
# to not have to update their versions for each
# Jupyterlab prerelease version.
overlap = _test_overlap(core_deps[key], value, drop_prerelease1=True)
if overlap is False:
errors.append((key, core_deps[key], value))

return errors


def _test_overlap(spec1, spec2):
def _test_overlap(spec1, spec2, drop_prerelease1=False, drop_prerelease2=False):
"""Test whether two version specs overlap.
Returns `None` if we cannot determine compatibility,
otherwise whether there is an overlap
"""
cmp = _compare_ranges(spec1, spec2)
cmp = _compare_ranges(spec1, spec2, drop_prerelease1=drop_prerelease1,
drop_prerelease2=drop_prerelease2)
if cmp is None:
return
return cmp == 0


def _compare_ranges(spec1, spec2):
def _compare_ranges(spec1, spec2, drop_prerelease1=False, drop_prerelease2=False):
"""Test whether two version specs overlap.
Returns `None` if we cannot determine compatibility,
Expand All @@ -1962,6 +1969,12 @@ def _compare_ranges(spec1, spec2):
y1 = r2.set[0][0].semver
y2 = r2.set[0][-1].semver

if x1.prerelease and drop_prerelease1:
x1 = x1.inc('patch')

if y1.prerelease and drop_prerelease2:
y1 = y1.inc('patch')

o1 = r1.set[0][0].operator
o2 = r2.set[0][0].operator

Expand Down Expand Up @@ -2087,7 +2100,10 @@ def _compat_error_age(errors):
any_newer = False

for _, jlab, ext in errors:
c = _compare_ranges(ext, jlab)
# Drop prereleases in comparisons to allow extension authors
# to not have to update their versions for each
# Jupyterlab prerelease version.
c = _compare_ranges(ext, jlab, drop_prerelease1=True)
any_newer = any_newer or c < 0
any_older = any_older or c > 0
if any_older and not any_newer:
Expand Down

0 comments on commit 3c2f3cb

Please sign in to comment.