From 33ab2be2011d813bffd80d29bf5ae091f79adbdd Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 2 Jan 2020 13:30:05 -0600 Subject: [PATCH 1/5] Compare final release versions --- jupyterlab/commands.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/jupyterlab/commands.py b/jupyterlab/commands.py index 0de688edaac8..92e1c118da51 100644 --- a/jupyterlab/commands.py +++ b/jupyterlab/commands.py @@ -1186,7 +1186,7 @@ def _populate_staging(self, name=None, version=None, static_url=None, json.dump(data, fid, indent=4) # copy known-good yarn.lock if missing - lock_path = pjoin(staging, 'yarn.lock') + lock_path = pjoin(staging, 'yarn.lock') lock_template = pjoin(HERE, 'staging', 'yarn.lock') if self.registry != YARN_DEFAULT_REGISTRY: # Replace on the fly the yarn repository see #3658 with open(lock_template, encoding='utf-8') as f: @@ -1774,7 +1774,7 @@ def _node_check(logger): def _yarn_config(logger): """Get the yarn configuration. - + Returns ------- {"yarn config": dict, "npm config": dict} if unsuccessfull the subdictionary are empty @@ -1982,6 +1982,15 @@ def _compare_ranges(spec1, spec2): y1 = r2.set[0][0].semver y2 = r2.set[0][-1].semver + # Drop prereleases in comparisons (to allow extension authors) + # to not have to update their versions for each + # Jupyterlab prerelease version. + if x1.prerelease: + x1 = x1.inc('patch') + + if x2.prelease: + x2 = x2.inc('patch') + o1 = r1.set[0][0].operator o2 = r2.set[0][0].operator From 1bf9dd19dce4c2538cc01530c7c9976e7c03f9f9 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 2 Jan 2020 13:36:47 -0600 Subject: [PATCH 2/5] update docs --- jupyterlab/commands.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jupyterlab/commands.py b/jupyterlab/commands.py index 92e1c118da51..701a4fa9bcfe 100644 --- a/jupyterlab/commands.py +++ b/jupyterlab/commands.py @@ -1982,7 +1982,7 @@ def _compare_ranges(spec1, spec2): y1 = r2.set[0][0].semver y2 = r2.set[0][-1].semver - # Drop prereleases in comparisons (to allow extension authors) + # Drop prereleases in comparisons to allow extension authors # to not have to update their versions for each # Jupyterlab prerelease version. if x1.prerelease: From 1d308c4188288568ed0eb0b4425a76fb8dbbd706 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 2 Jan 2020 13:46:50 -0600 Subject: [PATCH 3/5] fix spelling --- jupyterlab/commands.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jupyterlab/commands.py b/jupyterlab/commands.py index 701a4fa9bcfe..c245286b268c 100644 --- a/jupyterlab/commands.py +++ b/jupyterlab/commands.py @@ -1988,7 +1988,7 @@ def _compare_ranges(spec1, spec2): if x1.prerelease: x1 = x1.inc('patch') - if x2.prelease: + if x2.prerelease: x2 = x2.inc('patch') o1 = r1.set[0][0].operator From 8d517e15802dd280c22604dbe5cfc15074b70097 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 2 Jan 2020 13:53:04 -0600 Subject: [PATCH 4/5] Only affect the x1 prerelease --- jupyterlab/commands.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/jupyterlab/commands.py b/jupyterlab/commands.py index c245286b268c..3fb70d2c4655 100644 --- a/jupyterlab/commands.py +++ b/jupyterlab/commands.py @@ -1988,9 +1988,6 @@ def _compare_ranges(spec1, spec2): if x1.prerelease: x1 = x1.inc('patch') - if x2.prerelease: - x2 = x2.inc('patch') - o1 = r1.set[0][0].operator o2 = r2.set[0][0].operator From 46bce5d85356a841c3037098c73f5868ab6b2054 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 6 Jan 2020 10:09:11 -0600 Subject: [PATCH 5/5] Make the dropping of prereleases optional in the standalone functions --- jupyterlab/commands.py | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/jupyterlab/commands.py b/jupyterlab/commands.py index 3fb70d2c4655..b86084a67da8 100644 --- a/jupyterlab/commands.py +++ b/jupyterlab/commands.py @@ -1726,7 +1726,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 @@ -1942,26 +1945,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, @@ -1982,12 +1989,12 @@ def _compare_ranges(spec1, spec2): y1 = r2.set[0][0].semver y2 = r2.set[0][-1].semver - # Drop prereleases in comparisons to allow extension authors - # to not have to update their versions for each - # Jupyterlab prerelease version. - if x1.prerelease: + 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 @@ -2113,7 +2120,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: