diff --git a/bin/is b/bin/is index 03a1f137619b31c1e32771af186350a72a42ecdc..069a646b6ea3930d23e9dbdf27da7c02dff8de51 100755 --- a/bin/is +++ b/bin/is @@ -139,56 +139,39 @@ def c_list(parser, args): ''' List images in repository or image content ''' - args.repo_filter = None + # List available repositories if len(args.list_args) == 0: - # List available repository repoman = load_repositories(args) - arrow('#light##green#[Repos]#reset#') - for repo in repoman: - out(repo.config.name) - # <repo> | <image> | <image file> + repoman.show(verbose=args.detail) + return + # list direct image or reposity content elif len(args.list_args) == 1: - # <image file> - if istools.pathtype(args.list_args[0]) == 'file' and\ - os.path.isfile(args.list_args[0]): - pkg = PackageImage(istools.abspath(args.list_args[0])) - arrow('#light##green#[Image]#reset# %s' % pkg.name) - pkg.show(verbose=args.verbose_list, list=True) + # list image file content + if (istools.pathtype(args.list_args[0]) == 'file' and + os.path.isfile(args.list_args[0])): + pkg = PackageImage(args.list_args[0]) + pkg.show(verbose=args.detail) + # list repository content else: args.repo_filter = args.list_args[0] repoman = load_repositories(args) - # <repo> - if len(repoman) != 0: - for repo in repoman: - arrow('#light##green#[Repo]#reset# %s' % repo.config.name) - repo.show(args.verbose_list) - # <image> - else: - args.repo_filter = None - args.image = args.list_args[0] - args.image_version = None - # <repo> <image> | <image> <version> + for repo in repoman: + repo.show(args.detail) + return + # list last image version elif len(args.list_args) == 2: - # <repo> <image> - if not PackageImage.check_image_version(args.list_args[1]): - args.repo_filter = args.list_args[0] - args.image = args.list_args[1] - args.image_version = None - # <image> <version> - else: - args.image = args.list_args[0] - args.image_version = args.list_args[1] - # <repo> <image> <version> + args.repo_filter = args.list_args[0] + args.image = args.list_args[1] + args.image_version = None + # list specific image version elif len(args.list_args) == 3: args.repo_filter = args.list_args[0] args.image = args.list_args[1] args.image_version = args.list_args[2] - - if hasattr(args, 'image'): - repoman = load_repositories(args) - pkg = repoman.get(args.image, args.image_version) - arrow('#light##green#[Image]#reset# %s' % pkg.name) - pkg.show(verbose=args.verbose_list, list=True) + # display content of image accross a repositories + repoman = load_repositories(args) + pkg = repoman.get(args.image, args.image_version) + pkg.show(verbose=args.detail) def c_cat(parser, args): ''' @@ -321,9 +304,9 @@ p_get.set_defaults(func=c_get) # list command parser p_list = subparsers.add_parser("list", help=c_list.__doc__.lower()) -p_list.add_argument("-l", action="store_true", dest='verbose_list', - default=False, help='Detailled list output') -p_list.add_argument("list_args", nargs="*", help="Repo or image to list") +p_list.add_argument("-l", action="store_true", dest='detail', + default=False, help='detailled list output') +p_list.add_argument("list_args", nargs="*", help="list content of image or repositories") p_list.set_defaults(func=c_list) # search command parser diff --git a/installsystems/image.py b/installsystems/image.py index c40b144e8cce2b30fc9e49e73fbe933870d8a20c..a1ee0a8806ea0a5ce55017907913cbbb1840c8ae 100644 --- a/installsystems/image.py +++ b/installsystems/image.py @@ -417,30 +417,26 @@ class PackageImage(Image): arrowlevel(-1) return desc - def show(self, verbose=False, list=False): + def show(self, verbose=False): ''' Display image content ''' - out('Name : %s' % self.name) - out('Version : %s' % self.version) - out('Date : %s' % time.asctime(time.gmtime(self.date))) + out('#light##yellow#Name:#reset# %s' % self.name) + out('#light##yellow#Version:#reset# %s' % self.version) + out('#yellow#Date:#reset# %s' % time.asctime(time.gmtime(self.date))) + out('#yellow#Description:#reset# %s' % self.description) + out('#yellow#Author:#reset# %s' % self.author) + out('#yellow#MD5:#reset# %s' % self.md5) if verbose: - out('Description : %s' % self.description) - out('Author : %s' % self.author) - out('MD5 : %s' % self.md5 ) - out('Payload :') payloads = self.payload for payload_name in payloads: payload = payloads[payload_name] - out(' Name : %s' % payload_name) - out(' Date : %s' % time.asctime(time.gmtime(payload.mtime))) - out(' Size : %s' % (istools.human_size(payload.size))) - out(' MD5 : %s' % payload.md5) - out('') - out('') - if list: - out('Content : ') - self._tarball.list(verbose) + out('#light##yellow#Payload:#reset# %s' % payload_name) + out(' #yellow#Date:#reset# %s' % time.asctime(time.gmtime(payload.mtime))) + out(' #yellow#Size:#reset# %s' % (istools.human_size(payload.size))) + out(' #yellow#MD5:#reset# %s' % payload.md5) + out('#light##yellow#Content:#reset#') + self._tarball.list(verbose) def check(self, message="Check MD5"): ''' diff --git a/installsystems/repository.py b/installsystems/repository.py index 8c5d9d9cb6845fa201b2f631d87b5e393b9290c1..cc7f107fa90fb9bf054bebbea5064a2bfd4cc13b 100644 --- a/installsystems/repository.py +++ b/installsystems/repository.py @@ -185,26 +185,22 @@ class Repository(object): List images in repository ''' images = self.db.ask("SELECT md5, name, version, date,\ - author, description, size FROM image").fetchall() + author, description, size FROM image ORDER BY name, version").fetchall() - for image_md5, image_name, image_version, image_date, image_author,\ - image_description, image_size in images: - out('Name : %s' % image_name) - out('Version : %s' % image_version) - out('Date : %s' % time.asctime(time.gmtime(image_date))) + for (image_md5, image_name, image_version, image_date, image_author, + image_description, image_size) in images: + out('#light##yellow#%s #reset#v%s' % (image_name, image_version)) if verbose: - out('Description : %s' % image_description) - out('Author : %s' % image_author) - out('MD5 : %s' % image_md5) - out('Payload :') + out(' #yellow#Date:#reset# %s' % time.asctime(time.gmtime(image_date))) + out(' #yellow#Description:#reset# %s' % image_description) + out(' #yellow#Author:#reset# %s' % image_author) + out(' #yellow#MD5:#reset# %s' % image_md5) payloads = self.db.ask("SELECT md5, name, size FROM payload\ WHERE image_md5 = ?", (image_md5,)).fetchall() for payload_md5, payload_name, payload_size in payloads: - out(' Name : %s' % payload_name) - out(' Size : %s' % (istools.human_size(payload_size))) - out(' MD5 : %s' % payload_md5) - out('') - out('') + out(' #light##yellow#Payload:#reset# %s' % payload_name) + out(' #yellow#Size:#reset# %s' % (istools.human_size(payload_size))) + out(' #yellow#MD5:#reset# %s' % payload_md5) def _remove_file(self, filename): ''' @@ -534,3 +530,14 @@ class RepositoryManager(object): if repo.has(name, version): return repo.get(name, version) raise Exception("Unable to find %s v%s" % (name, version)) + + def show(self, verbose=False): + ''' + Show repository inside manager + ''' + for repo in self.repos: + repo.config.name + s = "#light##blue#%s#reset#"% repo.config.name + if verbose: + s += ' (%s)' % repo.config.path + out(s)