From 981110d4b22a66bc60fe5f94b4326489b5de1fe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Wed, 14 Jun 2017 13:52:47 +0200 Subject: [PATCH] Devel RC release channel should also track Maintenance RCs That way people don't have to toggle between Maintenance and Devel RCs just to get _all_ RCs. --- .../plugins/softwareupdate/__init__.py | 10 ++-- .../version_checks/github_release.py | 52 +++++++++++++------ 2 files changed, 44 insertions(+), 18 deletions(-) diff --git a/src/octoprint/plugins/softwareupdate/__init__.py b/src/octoprint/plugins/softwareupdate/__init__.py index b322e184..f1dafe89 100644 --- a/src/octoprint/plugins/softwareupdate/__init__.py +++ b/src/octoprint/plugins/softwareupdate/__init__.py @@ -218,9 +218,13 @@ class SoftwareUpdatePlugin(octoprint.plugin.BlueprintPlugin, "repo": "OctoPrint", "update_script": "{{python}} \"{update_script}\" --branch={{branch}} --force={{force}} \"{{folder}}\" {{target}}".format(update_script=update_script), "restart": "octoprint", - "stable_branch": dict(branch="master", name="Stable"), - "prerelease_branches": [dict(branch="rc/maintenance", name="Maintenance RCs"), - dict(branch="rc/devel", name="Devel RCs")] + "stable_branch": dict(branch="master", commitish=["master"], name="Stable"), + "prerelease_branches": [dict(branch="rc/maintenance", + commitish=["rc/maintenance"], # maintenance RCs + name="Maintenance RCs"), + dict(branch="rc/devel", + commitish=["rc/maintenance", "rc/devel"], # devel & maintenance RCs + name="Devel RCs")] }, }, "pip_command": None, diff --git a/src/octoprint/plugins/softwareupdate/version_checks/github_release.py b/src/octoprint/plugins/softwareupdate/version_checks/github_release.py index abf86298..07493e48 100644 --- a/src/octoprint/plugins/softwareupdate/version_checks/github_release.py +++ b/src/octoprint/plugins/softwareupdate/version_checks/github_release.py @@ -15,7 +15,7 @@ logger = logging.getLogger("octoprint.plugins.softwareupdate.version_checks.gith def _filter_out_latest(releases, sort_key=None, include_prerelease=False, - prerelease_channel=None): + commitish=None): """ Filters out the newest of all matching releases. @@ -26,31 +26,43 @@ def _filter_out_latest(releases, >>> release_1_2_16rc2 = dict(name="1.2.16rc2", tag_name="1.2.16rc2", html_url="some_url", published_at="2016-08-30T12:00:00Z", prerelease=True, draft=False, target_commitish="rc/maintenance") >>> release_1_2_17rc1 = dict(name="1.2.17rc1", tag_name="1.2.17rc1", html_url="some_url", published_at="2016-08-31T12:00:00Z", prerelease=True, draft=True, target_commitish="rc/maintenance") >>> release_1_3_0rc1 = dict(name="1.3.0rc1", tag_name="1.3.0rc1", html_url="some_url", published_at="2016-12-12T12:00:00Z", prerelease=True, draft=False, target_commitish="rc/devel") + >>> release_1_3_5rc1 = dict(name="1.3.5rc1", tag_name="1.3.5rc1", html_url="some_url", published_at="2017-06-14T10:00:00Z", prerelease=True, draft=False, target_commitish="rc/maintenance") >>> release_1_2_18 = dict(name="1.2.18", tag_name="1.2.18", html_url="some_url", published_at="2016-12-13T12:00:00Z", prerelease=False, draft=False, target_commitish="master") >>> release_1_4_0rc1 = dict(name="1.4.0rc1", tag_name="1.4.0rc1", html_url="some_url", published_at="2017-12-12T12:00:00Z", prerelease=True, draft=False, target_commitish="rc/future") + >>> release_1_4_0rc1_devel = dict(name="1.4.0rc1", tag_name="1.4.0rc1", html_url="some_url", published_at="2017-12-12T12:00:00Z", prerelease=True, draft=False, target_commitish="rc/devel") >>> releases = [release_1_2_15, release_1_2_16rc1, release_1_2_16rc2, release_1_2_17rc1, release_1_3_0rc1, release_1_4_0rc1] - >>> _filter_out_latest(releases, include_prerelease=False, prerelease_channel=None) + >>> _filter_out_latest(releases, include_prerelease=False, commitish=None) ('1.2.15', '1.2.15', 'some_url') - >>> _filter_out_latest(releases, include_prerelease=True, prerelease_channel="rc/maintenance") + >>> _filter_out_latest(releases, include_prerelease=True, commitish=["rc/maintenance"]) ('1.2.16rc2', '1.2.16rc2', 'some_url') - >>> _filter_out_latest(releases, include_prerelease=True, prerelease_channel="rc/devel") + >>> _filter_out_latest(releases, include_prerelease=True, commitish=["rc/devel"]) ('1.3.0rc1', '1.3.0rc1', 'some_url') - >>> _filter_out_latest(releases, include_prerelease=True, prerelease_channel=None) + >>> _filter_out_latest(releases, include_prerelease=True, commitish=None) ('1.4.0rc1', '1.4.0rc1', 'some_url') - >>> _filter_out_latest(releases, include_prerelease=True, prerelease_channel="rc/doesntexist") + >>> _filter_out_latest(releases, include_prerelease=True, commitish=["rc/doesntexist"]) ('1.2.15', '1.2.15', 'some_url') >>> _filter_out_latest([release_1_2_17rc1]) (None, None, None) >>> _filter_out_latest([release_1_2_16rc1, release_1_2_16rc2]) (None, None, None) + >>> comparable_factory = _get_comparable_factory("python", force_base=True) >>> sort_key = lambda release: comparable_factory(_get_sanitized_version(release["tag_name"])) - >>> _filter_out_latest(releases + [release_1_2_18], include_prerelease=False, prerelease_channel=None, sort_key=sort_key) + >>> _filter_out_latest(releases + [release_1_2_18], include_prerelease=False, commitish=None, sort_key=sort_key) ('1.2.18', '1.2.18', 'some_url') - >>> _filter_out_latest(releases + [release_1_2_18], include_prerelease=True, prerelease_channel="rc/maintenance", sort_key=sort_key) + >>> _filter_out_latest(releases + [release_1_2_18], include_prerelease=True, commitish=["rc/maintenance"], sort_key=sort_key) ('1.2.18', '1.2.18', 'some_url') - >>> _filter_out_latest(releases + [release_1_2_18], include_prerelease=True, prerelease_channel="rc/devel", sort_key=sort_key) + >>> _filter_out_latest(releases + [release_1_2_18], include_prerelease=True, commitish=["rc/devel"], sort_key=sort_key) ('1.3.0rc1', '1.3.0rc1', 'some_url') + + >>> _filter_out_latest([release_1_2_18, release_1_3_5rc1], include_prerelease=True, commitish=["rc/maintenance"]) + ('1.3.5rc1', '1.3.5rc1', 'some_url') + >>> _filter_out_latest([release_1_2_18, release_1_3_5rc1], include_prerelease=True, commitish=["rc/maintenance", "rc/devel"]) + ('1.3.5rc1', '1.3.5rc1', 'some_url') + >>> _filter_out_latest([release_1_2_18, release_1_3_5rc1, release_1_4_0rc1_devel], include_prerelease=True, commitish=["rc/maintenance"]) + ('1.3.5rc1', '1.3.5rc1', 'some_url') + >>> _filter_out_latest([release_1_2_18, release_1_3_5rc1, release_1_4_0rc1_devel], include_prerelease=True, commitish=["rc/maintenance", "rc/devel"]) + ('1.4.0rc1', '1.4.0rc1', 'some_url') """ nothing = None, None, None @@ -61,9 +73,9 @@ def _filter_out_latest(releases, # filter out prereleases and drafts filter_function = lambda rel: not rel["prerelease"] and not rel["draft"] if include_prerelease: - if prerelease_channel: - filter_function = lambda rel: not rel["draft"] and ( - not rel["prerelease"] or rel["target_commitish"] == prerelease_channel) + if commitish: + filter_function = lambda rel: not rel["draft"] and \ + (not rel["prerelease"] or rel["target_commitish"] in commitish) else: filter_function = lambda rel: not rel["draft"] @@ -82,7 +94,7 @@ def _filter_out_latest(releases, def _get_latest_release(user, repo, compare_type, include_prerelease=False, - prerelease_channel=None, + commitish=None, force_base=True): nothing = None, None, None r = requests.get(RELEASE_URL.format(user=user, repo=repo), timeout=30) @@ -107,7 +119,7 @@ def _get_latest_release(user, repo, compare_type, return _filter_out_latest(releases, sort_key=sort_key, include_prerelease=include_prerelease, - prerelease_channel=prerelease_channel) + commitish=commitish) def _get_sanitized_version(version_string): @@ -257,6 +269,16 @@ def get_latest(target, check, custom_compare=None): include_prerelease = check.get("prerelease", False) prerelease_channel = check.get("prerelease_channel", None) + + # determine valid "commitish" values in case we track prereleases + commitish = None + if prerelease_channel: + prerelease_branches = check.get("prerelease_branches", None) + if prerelease_branches: + # fetch valid commitish list from configured prerelease_branches for selected channel + commitishes = dict((x["branch"], x.get("commitish", [x["branch"]])) for x in prerelease_branches) + commitish = commitishes.get(prerelease_channel, [prerelease_channel]) + force_base = check.get("force_base", True) compare_type = _get_sanitized_compare_type(check.get("release_compare", "python"), custom=custom_compare) @@ -265,7 +287,7 @@ def get_latest(target, check, custom_compare=None): check["repo"], compare_type, include_prerelease=include_prerelease, - prerelease_channel=prerelease_channel, + commitish=commitish, force_base=force_base) information =dict(