From 6544e5b44158beabe55f5347279d522c8793ed5e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Aur=C3=A9lien=20Dunand?= <aurelien.dunand@smartjog.com>
Date: Mon, 25 Jul 2011 14:16:47 +0200
Subject: [PATCH] Add list command

---
 bin/is | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 62 insertions(+)

diff --git a/bin/is b/bin/is
index 0754c71..88451fc 100755
--- a/bin/is
+++ b/bin/is
@@ -134,6 +134,61 @@ def c_install(parser, args):
     dt = int(t1 - t0)
     arrow("Install time: %s" % datetime.timedelta(seconds=dt))
 
+def c_list(parser, args):
+    '''
+    List images in repository or image content
+    '''
+    args.repo_filter = None
+    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>
+    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)
+        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>
+    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>
+    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)
+
 def c_search(parser, args):
     '''
     Search in repository
@@ -241,6 +296,13 @@ p_install.set_defaults(func=c_install, subparser=p_install)
 p_get = subparsers.add_parser("get", help=c_get.__doc__.lower())
 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.set_defaults(func=c_list)
+
 # search command parser
 p_search = subparsers.add_parser("search", help=c_search.__doc__.lower())
 p_search.set_defaults(func=c_search)
-- 
GitLab