From 77a4826a3e9904b26a4fb83850384c0d7a553125 Mon Sep 17 00:00:00 2001 From: Sebastien Luttringer <sebastien.luttringer@smartjog.com> Date: Fri, 9 Dec 2011 20:11:53 +0100 Subject: [PATCH] list only last version of one image by repo by default --- bin/is | 6 ++++-- completion/bash/is | 2 +- installsystems/repository.py | 17 ++++++++++++++--- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/bin/is b/bin/is index 0e095e4..4c7909a 100755 --- a/bin/is +++ b/bin/is @@ -257,7 +257,7 @@ def c_list(parser, args): ''' repoman = load_repositories(args) for pattern in args.image: - repoman.show_images(pattern, o_long=args.long, o_json=args.json, + repoman.show_images(pattern, all_version=args.all_version, o_long=args.long, o_json=args.json, o_md5=args.md5, o_date=args.date, o_author=args.author, o_size=args.size, o_url=args.url, o_description=args.description) @@ -505,7 +505,9 @@ p_install.set_defaults(func=c_install, subparser=p_install) # list command parser p_list = subparsers.add_parser("list", help=c_list.__doc__.lower()) -p_list.add_argument("-a", "--author", action="store_true", default=False, +p_list.add_argument("-a", "--all-version", action="store_true", default=False, + help="list all versions of the same image") +p_list.add_argument("-A", "--author", action="store_true", default=False, help="display image author") p_list.add_argument("-d", "--date", action="store_true", default=False, help="display image date") diff --git a/completion/bash/is b/completion/bash/is index 87d5f3c..4c0e0f0 100644 --- a/completion/bash/is +++ b/completion/bash/is @@ -127,7 +127,7 @@ _is() { (( args > 2 )) && _filedir ;; list) - [[ "$cur" == -* ]] && _opt '-h --help -l --long -j --json -m --md5 -s --size -d --date -a --author -u --url -D --description --no-sync' && return 0 + [[ "$cur" == -* ]] && _opt '-h --help -l --long -j --json -m --md5 -s --size -d --date -a --all-version -A --author -u --url -D --description --no-sync' && return 0 _remote_image ;; move) diff --git a/installsystems/repository.py b/installsystems/repository.py index 1caf4d5..ede1ac9 100644 --- a/installsystems/repository.py +++ b/installsystems/repository.py @@ -595,7 +595,7 @@ class RepositoryManager(object): ''' return [ r.config.name for r in self.repos if r.config.offline ] - def images(self, pattern): + def images(self, pattern, all_version=True): ''' Return a list of available images ''' @@ -609,6 +609,17 @@ class RepositoryManager(object): for k in images.keys(): if not fnmatch.fnmatch(k, pattern): del images[k] + # filter multiple versions + if not all_version: + for repo in set((images[i]["repo"] for i in images)): + for img in set((images[i]["name"] for i in images if images[i]["repo"] == repo)): + versions = [ images[i]['version'] + for i in images if images[i]["repo"] == repo and images[i]["name"] == img ] + f = lambda x,y: x if istools.compare_versions(x, y) > 0 else y + last = reduce(f, versions) + versions.remove(last) + for rmv in versions: + del images["%s/%s:%s" % (repo, img, rmv)] return images def get(self, name, version=None, best=False): @@ -671,7 +682,7 @@ class RepositoryManager(object): s += " (%s)" % repo.config.path out(s) - def show_images(self, pattern, o_json=False, o_long=False, + def show_images(self, pattern, all_version=True, o_json=False, o_long=False, o_md5=False, o_date=False, o_author=False, o_size=False, o_url=False, o_description=False): ''' @@ -681,7 +692,7 @@ class RepositoryManager(object): all images parameter can be given in arguments to displayed ''' # get image list - images = self.images(pattern) + images = self.images(pattern, all_version) # display result if o_json: s = json.dumps(images) -- GitLab