Update the repo script to only list repos once 89/58289/2
authorTrevor Bramwell <tbramwell@linuxfoundation.org>
Wed, 6 Jun 2018 13:24:36 +0000 (15:24 +0200)
committerTrevor Bramwell <tbramwell@linuxfoundation.org>
Wed, 13 Jun 2018 20:11:29 +0000 (13:11 -0700)
When projects have multiple releases (ex 6.0, 6.1) the repos would be
listed multiple times when only wanting repo names. This change still
supports listing the repos when they have multiple versions.

Change-Id: I7b0c96649b5486d91b177f95cf175bebcb53815b
Signed-off-by: Trevor Bramwell <tbramwell@linuxfoundation.org>
releases/scripts/release-status.sh [changed mode: 0644->0755]
releases/scripts/repos.py

old mode 100644 (file)
new mode 100755 (executable)
index da66bc9..6790100
@@ -12,6 +12,8 @@ set -o pipefail
 TAG="${TAG:-opnfv-6.0.0}"
 RELEASE="${RELEASE:-fraser}"
 
+[ -a repos.txt ] && rm repos.txt
+
 for project in releases/$RELEASE/*; do
     python releases/scripts/repos.py -n -f $project >> repos.txt
 done
@@ -21,5 +23,3 @@ do
     tag="$(git ls-remote "https://gerrit.opnfv.org/gerrit/$repo.git" "refs/tags/$TAG")"
     echo "$repo $tag"
 done < repos.txt
-
-# rm repos.txt
index 0ded020..58454c3 100644 (file)
@@ -15,6 +15,38 @@ import argparse
 import yaml
 
 
+class Repo(object):
+    """Object representing a repo listed in the release file.
+
+    Includes eq, hash, and ne methods so set comparisons work
+    """
+
+    def __init__(self, repo=None, ref=None, version=None):
+        self.repo = repo
+        self.ref = ref
+        self.version = version
+
+    def __repr__(self):
+        if self.version:
+            return "%s %s %s" % (self.repo, self.ref, self.version)
+        elif self.ref:
+            return "%s %s" % (self.repo, self.ref)
+        return "%s" % self.repo
+
+    def __eq__(self, obj):
+        if isinstance(obj, Repo):
+            return ((self.repo == obj.repo) and
+                    (self.ref == obj.ref) and
+                    (self.version == obj.version))
+        return False
+
+    def __ne__(self, obj):
+        return (not self.__eq__(obj))
+
+    def __hash__(self):
+        return hash(self.__repr__())
+
+
 def main():
     """Given a release yamlfile list the repos it contains"""
 
@@ -45,15 +77,17 @@ def list_repos(project, args):
     if 'releases' not in project:
         exit(0)
 
+    repos = set()
     for item in lookup:
         repo, ref = next(iter(item['location'].items()))
         if args.names:
-            print(repo)
+            repos.add(Repo(repo))
         elif args.release and item['version'] == args.release:
-            print("%s %s" % (repo, ref))
+            repos.add(Repo(repo, ref))
         elif not args.release:
-            # Print all releases
-            print("%s %s %s" % (repo, item['version'], ref))
+            repos.add(Repo(repo, ref, item['version']))
+    for repo in repos:
+        print repo
 
 
 if __name__ == "__main__":