[yum-git] yum/comps.py
Seth Vidal
skvidal at linux.duke.edu
Mon May 5 03:48:27 UTC 2008
yum/comps.py | 45 +++++++++++++++++++++++----------------------
1 file changed, 23 insertions(+), 22 deletions(-)
New commits:
commit 4a519a294fd5a77405b25d65d6464ded528eea6c
Author: Seth Vidal <skvidal at fedoraproject.org>
Date: Sun May 4 23:48:04 2008 -0400
make groups returning support wildcards and commas - just like repos do.
diff --git a/yum/comps.py b/yum/comps.py
index d00ef39..146d817 100755
--- a/yum/comps.py
+++ b/yum/comps.py
@@ -23,7 +23,8 @@ iterparse = cElementTree.iterparse
from Errors import CompsException
#FIXME - compsexception isn't caught ANYWHERE so it's pointless to raise it
# switch all compsexceptions to grouperrors after api break
-
+import fnmatch
+import re
from yum.misc import to_unicode
lang_attr = '{http://www.w3.org/XML/1998/namespace}lang'
@@ -394,31 +395,31 @@ class Comps(object):
return False
def return_group(self, grpid):
- if self._groups.has_key(grpid):
- return self._groups[grpid]
-
- # do matches against group names and ids, too
- for group in self.groups:
- names = [ group.name, group.groupid ]
- names.extend(group.translated_name.values())
- if grpid in names:
- return group
+ """Return the first group which matches"""
+ grps = self.return_groups(grpid)
+ if grps:
+ return grps[0]
-
return None
- def return_groups(self, grpid):
+ def return_groups(self, group_pattern):
+ """return all groups which match either by glob or exact match"""
returns = {}
- if self._groups.has_key(grpid):
- thisgroup = self._groups[grpid]
- returns[thisgroup.groupid] = thisgroup
-
- # do matches against group names and ids, too
- for group in self.groups:
- names = [ group.name, group.groupid ]
- names.extend(group.translated_name.values())
- if grpid in names:
- returns[group.groupid] = group
+
+ for item in group_pattern.split(','):
+ item = item.strip()
+ if self._groups.has_key(item):
+ thisgroup = self._groups[item]
+ returns[thisgroup.groupid] = thisgroup
+ continue
+
+ match = re.compile(fnmatch.translate(item)).match
+ for group in self.groups:
+ names = [ group.name, group.groupid ]
+ names.extend(group.translated_name.values())
+ for name in names:
+ if match(name):
+ returns[group.groupid] = group
return returns.values()
More information about the Yum-cvs-commits
mailing list