Commit e1896ce9 authored by Sebastien Luttringer's avatar Sebastien Luttringer
Browse files

add -S, --search option to list command

list -S only list images inside searchable repositories
parent a66612ad
Loading
Loading
Loading
Loading
+17 −5
Original line number Diff line number Diff line
@@ -37,8 +37,7 @@ def load_repositories(args):
        args.cache = None
    # split filter in list
    if args.repo_filter is not None:
        args.repo_filter = [f for f in  re.split("[ ,\n\t\v]+", args.repo_filter)
                            if f != ""]
        args.repo_filter = split_repositories(args.repo_filter)
    # init repo cache object
    repoman = RepositoryManager(args.cache, timeout=args.timeout, filter=args.repo_filter)
    # register repositories (order matter)
@@ -55,6 +54,14 @@ def load_repositories(args):
                         offline=hasattr(args, "force_offline") and args.force_offline)
    return repoman

def split_repositories(repos, filter=None):
    '''
    Return a list of repository from an comma/space separated list of repo
    '''
    if filter is None:
        filter = lambda x: x != ""
    return [r for r in  re.split("[ ,\n\t\v]+", repos) if filter(r)]

def select_image(name, repoman, best=False):
    '''
    Select and load a package image from a standard naming type
@@ -77,8 +84,8 @@ def select_image(name, repoman, best=False):
        if repo is None:
            # split search path as a list
            if args.repo_search is not None:
                args.repo_search = [s for s in re.split("[ ,\n\t\v]+", args.repo_search)
                                    if s in repoman.onlines]
                args.repo_search = split_repositories(args.repo_search,
                                                      lambda x: x in repoman.onlines)
            else:
                args.repo_search = []
            # if we have only one repo, search in it
@@ -285,8 +292,11 @@ def c_list(parser, args):
    List images in repository or image content
    '''
    repoman = load_repositories(args)
    if args.search is not None:
        args.search = split_repositories(args.repo_search, lambda x: x in repoman.onlines)
    for pattern in args.image:
        repoman.show_images(pattern, all_version=args.all_version, o_long=args.long, o_json=args.json,
        repoman.show_images(pattern, all_version=args.all_version, search=args.search,
                            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)

@@ -560,6 +570,8 @@ p_list.add_argument("-s", "--size", action="store_true", default=False,
                    help="display image size")
p_list.add_argument("-u", "--url", action="store_true", default=False,
                    help="display image url")
p_list.add_argument("-S", "--search", action="store_true", default=None,
                    help="only list image in search path")
p_list.add_argument("image", nargs="*", default=['*'],
                    help="image syntax is [repository/]image[:version]")
p_list.set_defaults(func=c_list)
+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 --all-version -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 -S --search --no-sync' && return 0
	    _remote_image
            ;;
	move)
+7 −4
Original line number Diff line number Diff line
@@ -597,13 +597,15 @@ class RepositoryManager(object):
        '''
        return [ r.config.name for r in self.repos if r.config.offline ]

    def images(self, pattern, all_version=True):
    def images(self, pattern, all_version=True, search=None):
        '''
        Return a list of available images
        '''
        if search is None:
            search = self.onlines
        # building image list
        images = {}
        for reponame in self.onlines:
        for reponame in search:
            for img in self[reponame].images():
                imgname = u"%s/%s:%s" % (reponame, img["name"], img["version"])
                images[imgname] = img
@@ -686,7 +688,8 @@ class RepositoryManager(object):
                s += "  (%s)" % repo.config.path
            out(s)

    def show_images(self, pattern, all_version=True, o_json=False, o_long=False,
    def show_images(self, pattern, all_version=True, search=None,
                    o_json=False, o_long=False,
                    o_md5=False, o_date=False, o_author=False, o_size=False,
                    o_url=False, o_description=False):
        '''
@@ -696,7 +699,7 @@ class RepositoryManager(object):
        all images parameter can be given in arguments to displayed
        '''
        # get image list
        images = self.images(pattern, all_version)
        images = self.images(pattern, all_version, search)
        # display result
        if o_json:
            s = json.dumps(images)