Commit 77a4826a authored by Sebastien Luttringer's avatar Sebastien Luttringer
Browse files

list only last version of one image by repo by default

parent 86173182
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -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")
+1 −1
Original line number Diff line number Diff line
@@ -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)
+14 −3
Original line number Diff line number Diff line
@@ -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)