Ver código fonte

Merge branch 'master' of github.com:jupyterlab/jupyterlab

Steven Silvester 5 anos atrás
pai
commit
b3152c6baf
1 arquivos alterados com 22 adições e 6 exclusões
  1. 22 6
      jupyterlab/commands.py

+ 22 - 6
jupyterlab/commands.py

@@ -1706,7 +1706,10 @@ class _AppHandler(object):
 
             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
 
@@ -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,
@@ -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
 
@@ -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: