]> git.ipfire.org Git - pakfire.git/commitdiff
Add grouplist command.
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 22 Mar 2011 11:34:10 +0000 (12:34 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 22 Mar 2011 11:34:10 +0000 (12:34 +0100)
pakfire/__init__.py
pakfire/cli.py
pakfire/repository/__init__.py
pakfire/repository/base.py
pakfire/repository/local.py

index ccca46159947cf8c2d00240f0facd06928f8c96d..267e13f9a26afd03fa8b228323662b86ffa19222 100644 (file)
@@ -262,3 +262,11 @@ class Pakfire(object):
                        repo._collect_packages(input_path)
 
                repo.save()
+
+       def grouplist(self, group):
+               pkgs = self.repos.get_by_group(group)
+
+               pkgs = packages.PackageListing(pkgs)
+               pkgs.unique()
+
+               return [p.name for p in pkgs]
index 4f1693c3b2c6880becbc61a1c636cc5159ed3f8d..c303631028f01af682116eb8aebd485e9889ad9a 100644 (file)
@@ -51,6 +51,7 @@ class Cli(object):
                self.parse_command_search()
                self.parse_command_update()
                self.parse_command_provides()
+               self.parse_command_grouplist()
 
                # Finally parse all arguments from the command line and save them.
                self.args = self.parser.parse_args()
@@ -69,6 +70,7 @@ class Cli(object):
                        "info"         : self.handle_info,
                        "search"       : self.handle_search,
                        "provides"     : self.handle_provides,
+                       "grouplist"    : self.handle_grouplist,
                }
 
        def parse_common_arguments(self):
@@ -129,6 +131,14 @@ class Cli(object):
                        help=_("File or feature to search for."))
                sub_provides.add_argument("action", action="store_const", const="provides")
 
+       def parse_command_grouplist(self):
+               # Implement the "grouplist" command
+               sub_grouplist = self.sub_commands.add_parser("grouplist",
+                       help=_("Get list of packages that belong to the given group."))
+               sub_grouplist.add_argument("group", nargs=1,
+                       help=_("Group name to search for."))
+               sub_grouplist.add_argument("action", action="store_const", const="grouplist")
+
        def run(self):
                action = self.args.action
 
@@ -184,6 +194,12 @@ class Cli(object):
                for pkg in pkgs:
                        print pkg.dump()
 
+       def handle_grouplist(self):
+               pkgs = self.pakfire.grouplist(self.args.group[0])
+
+               for pkg in pkgs:
+                       print " * %s" % pkg
+
 
 class CliBuilder(Cli):
        def __init__(self):
index a3d689948e307d1124cc5c66cc645ca22e9cac6b..ef50507333cf15732f75573bf6c258055a510b26 100644 (file)
@@ -119,6 +119,11 @@ class Repositories(object):
                        for pkg in repo.get_by_file(filename):
                                yield pkg
 
+       def get_by_group(self, group):
+               for repo in self.enabled:
+                       for pkg in repo.get_by_group(group):
+                               yield pkg
+
        def search(self, pattern):
                pkg_names = []
 
index 1cd57e604c96eaf5d240c894b182052f96301ea7..e6d4e9afefca3650475f5ebac0b71dd8a4783948 100644 (file)
@@ -88,6 +88,14 @@ class RepositoryFactory(object):
                        if match:
                                yield pkg
 
+       def get_by_group(self, group):
+               """
+                       Get all packages that belong to a specific group.
+               """
+               for pkg in self.packages:
+                       if group in pkg.groups:
+                               yield pkg
+
        def search(self, pattern):
                """
                        Returns a list of packages, that match the given pattern,
index 588e65b52ce666f0ffe9078fe47f77c7ab15d9d1..dcee556c9a10cf021f871c93ad7fd06f4eb636de 100644 (file)
@@ -56,6 +56,10 @@ class LocalRepository(RepositoryFactory):
                if not isinstance(pkg, packages.BinaryPackage):
                        raise Exception
 
+               # Skip everything but binary packages.
+               if pkg.type == "source":
+                       return
+
                repo_filename = os.path.join(self.path, os.path.basename(pkg.filename))
 
                # Do we need to copy the package files?