add sorting to object models and fix list-deliverables

Some of the previous changes in the series broke assumptions made by
list-deliverables, so fix things.

Change-Id: I703154199de38667801bcfe789cb7a46adf4e53e
Signed-off-by: Doug Hellmann <doug@doughellmann.com>
This commit is contained in:
Doug Hellmann
2018-02-21 09:26:08 -05:00
parent c8d367b6be
commit 6dd966a1a6
2 changed files with 48 additions and 9 deletions

View File

@@ -196,11 +196,11 @@ def main():
if args.no_stable_branch: if args.no_stable_branch:
if deliv.get_branch_location('stable/' + series) is not None: if deliv.get_branch_location('stable/' + series) is not None:
continue continue
if args.unreleased and (deliv.versions or not deliv.is_releasable): if args.unreleased and (deliv.is_released or not deliv.is_releasable):
continue continue
if version_ending and deliv.latest_release and deliv.latest_release.endswith(version_ending): if version_ending and deliv.is_released and deliv.latest_release.endswith(version_ending):
continue continue
if args.missing_rc and deliv.latest_release and 'rc' in deliv.latest_release: if args.missing_rc and deliv.is_released and 'rc' in deliv.latest_release:
continue continue
if args.tag: if args.tag:
tags = deliv.tags tags = deliv.tags

View File

@@ -16,6 +16,7 @@
import collections import collections
import copy import copy
import functools
import glob import glob
import os import os
import os.path import os.path
@@ -198,6 +199,7 @@ class Deliverables(object):
) )
@functools.total_ordering
class Repo(object): class Repo(object):
def __init__(self, name, data, deliv): def __init__(self, name, data, deliv):
@@ -221,7 +223,17 @@ class Repo(object):
def pypi_name(self): def pypi_name(self):
return self._data.get('pypi-name') return self._data.get('pypi-name')
def __eq__(self, other):
return self.name == other.name
def __gt__(self, other):
return self.name > other.name
def __str__(self):
return self.name
@functools.total_ordering
class ReleaseProject(object): class ReleaseProject(object):
def __init__(self, repo, hash, data, release=None): def __init__(self, repo, hash, data, release=None):
@@ -235,12 +247,19 @@ class ReleaseProject(object):
def tarball_base(self): def tarball_base(self):
return self._data.get('tarball-base') return self._data.get('tarball-base')
def __eq__(self, other):
return self.repo == other.repo
def __gt__(self, other):
return self.repo > other.repo
class Release(object): class Release(object):
def __init__(self, version, projects, deliv): def __init__(self, version, projects, data, deliv):
self.version = version self.version = version
self.deliv = weakref.proxy(deliv) self.deliv = weakref.proxy(deliv)
self._data = data
self._projects = { self._projects = {
p['repo']: ReleaseProject(p['repo'], p['hash'], p, self) p['repo']: ReleaseProject(p['repo'], p['hash'], p, self)
for p in projects for p in projects
@@ -248,9 +267,10 @@ class Release(object):
@property @property
def projects(self): def projects(self):
return sorted(self._projects.values(), key=lambda p: p.repo.name) return sorted(self._projects.values())
@functools.total_ordering
class Deliverable(object): class Deliverable(object):
_governance_data = None _governance_data = None
@@ -291,7 +311,7 @@ class Deliverable(object):
@property @property
def repos(self): def repos(self):
return sorted(self._repos.values(), key=lambda r: r.name) return sorted(self._repos.values())
@property @property
def known_repo_names(self): def known_repo_names(self):
@@ -314,6 +334,10 @@ class Deliverable(object):
def is_releasable(self): def is_releasable(self):
return self.model != 'untagged' return self.model != 'untagged'
@property
def is_released(self):
return len(self._data.get('releases', [])) > 0
@property @property
def is_cycle_based(self): def is_cycle_based(self):
return self.model.startswith('cycle-') return self.model.startswith('cycle-')
@@ -328,8 +352,9 @@ class Deliverable(object):
@property @property
def latest_release(self): def latest_release(self):
rel = (self.releases or [{}])[-1] if not self.is_released:
return rel.get('version') return ''
return self.releases[-1].version
@property @property
def release_notes(self): def release_notes(self):
@@ -353,7 +378,12 @@ class Deliverable(object):
@property @property
def releases(self): def releases(self):
return [ return [
Release(deliv=self, **r) Release(
version=r['version'],
projects=r['projects'],
data=r,
deliv=self,
)
for r in self._data.get('releases', []) for r in self._data.get('releases', [])
] ]
@@ -378,3 +408,12 @@ class Deliverable(object):
@property @property
def data(self): def data(self):
return copy.deepcopy(self._data) return copy.deepcopy(self._data)
def __eq__(self, other):
return self.name == other.name
def __gt__(self, other):
return self.name > other.name
def __str__(self):
return self.name