[Yum-devel] [PATCH 4/4] Add group mark* commands, so we can test environments with groups as objects.

James Antill james at and.org
Fri Aug 10 20:02:15 UTC 2012


---
 yumcommands.py |   93 ++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 81 insertions(+), 12 deletions(-)

diff --git a/yumcommands.py b/yumcommands.py
index e83f426..52c3127 100644
--- a/yumcommands.py
+++ b/yumcommands.py
@@ -858,12 +858,18 @@ class GroupsCommand(YumCommand):
             ocmds_arg = ('mark-install', 'mark-remove',
                          'mark-packages', 'mark-packages-force',
                          'unmark-packages',
-                         'mark-packages-sync', 'mark-packages-sync-force')
+                         'mark-packages-sync', 'mark-packages-sync-force',
+                         'mark-groups', 'mark-groups-force',
+                         'unmark-groups',
+                         'mark-groups-sync', 'mark-groups-sync-force')
 
             ocmds_all = ('mark-install', 'mark-remove', 'mark-convert',
                          'mark-packages', 'mark-packages-force',
                          'unmark-packages',
-                         'mark-packages-sync', 'mark-packages-sync-force')
+                         'mark-packages-sync', 'mark-packages-sync-force',
+                         'mark-groups', 'mark-groups-force',
+                         'unmark-groups',
+                         'mark-groups-sync', 'mark-groups-sync-force')
 
         if cmd in ('install', 'remove', 'info') or cmd in ocmds_arg:
             checkGroupArg(base, cmd, extcmds)
@@ -925,18 +931,23 @@ class GroupsCommand(YumCommand):
                 return base.removeGroups(extcmds)
 
             if cmd == 'mark-install':
-                for strng in extcmds:
-                    for group in base.comps.return_groups(strng):
-                        base.igroups.add_group(group.groupid, group.packages)
+                gRG = base._groupReturnGroups(extcmds,ignore_case=False)
+                igrps, grps, ievgrps, evgrps = gRG
+                for evgrp in evgrps:
+                    base.igroups.add_environment(evgrp.environmentid,
+                                                 evgrp.allgroups)
+                for grp in grps:
+                    base.igroups.add_group(grp.groupid, grp.packages)
                 base.igroups.save()
                 return 0, ['Marked install: ' + ','.join(extcmds)]
 
             if cmd in ('mark-packages', 'mark-packages-force'):
                 if len(extcmds) < 2:
                     return 1, ['No group or package given']
-                igrps, grps = base._groupReturnGroups([extcmds[0]],
-                                                      ignore_case=False)
-                if igrps is not None and len(igrps) != 1:
+                gRG = base._groupReturnGroups([extcmds[0]],
+                                              ignore_case=False)
+                igrps, grps, ievgrps, evgrps = gRG
+                if igrps is None or len(igrps) != 1:
                     return 1, ['No group matched']
                 grp = igrps[0]
                 force = cmd == 'mark-packages-force'
@@ -956,7 +967,8 @@ class GroupsCommand(YumCommand):
                 return 0, ['UnMarked packages: ' + ','.join(extcmds)]
 
             if cmd in ('mark-packages-sync', 'mark-packages-sync-force'):
-                igrps, grps = base._groupReturnGroups(extcmds,ignore_case=False)
+                gRG = base._groupReturnGroups(extcmds,ignore_case=False)
+                igrps, grps, ievgrps, evgrps = gRG
                 if not igrps:
                     return 1, ['No group matched']
                 force = cmd == 'mark-packages-sync-force'
@@ -970,6 +982,60 @@ class GroupsCommand(YumCommand):
                 else:
                     return 0, ['Marked packages-sync: ' + ','.join(extcmds)]
 
+            if cmd in ('mark-groups', 'mark-groups-force'):
+                if len(extcmds) < 2:
+                    return 1, ['No environment or group given']
+                gRG = base._groupReturnGroups([extcmds[0]],
+                                              ignore_case=False)
+                igrps, grps, ievgrps, evgrps = gRG
+                if ievgrps is None or len(ievgrps) != 1:
+                    return 1, ['No environment matched']
+                evgrp = ievgrps[0]
+                force = cmd == 'mark-groups-force'
+                gRG = base._groupReturnGroups(extcmds[1:], ignore_case=False)
+                for grp in gRG[1]:
+                    # Packages full or empty?
+                    self.igroups.add_group(grp.groupid,
+                                           grp.packages, ievgrp)
+                if force:
+                    for grp in gRG[0]:
+                        grp.environment = evgrp.evgid
+                        base.igroups.changed = True
+                base.igroups.save()
+                return 0, ['Marked groups: ' + ','.join(extcmds[1:])]
+
+            if cmd == 'unmark-groups':
+                gRG = base._groupReturnGroups([extcmds[0]],
+                                              ignore_case=False)
+                igrps, grps, ievgrps, evgrps = gRG
+                if igrps is None:
+                    return 1, ['No groups matched']
+                for grp in igrps:
+                    grp.environment = None
+                    base.igroups.changed = True
+                base.igroups.save()
+                return 0, ['UnMarked groups: ' + ','.join(extcmds)]
+
+            if cmd in ('mark-groups-sync', 'mark-groups-sync-force'):
+                gRG = base._groupReturnGroups(extcmds,ignore_case=False)
+                igrps, grps, ievgrps, evgrps = gRG
+                if not ievgrps:
+                    return 1, ['No environment matched']
+                force = cmd == 'mark-groups-sync-force'
+                for evgrp in ievgrps:
+                    grp_names = ",".join(sorted(evgrp.grp_names))
+                    for grp in base.igroups.return_groups(grp_names):
+                        if not force and grp.environment is not None:
+                            continue
+                        grp.environment = evgrp.evgid
+                        base.igroups.changed = True
+                base.igroups.save()
+                if force:
+                    return 0, ['Marked groups-sync-force: '+','.join(extcmds)]
+                else:
+                    return 0, ['Marked groups-sync: ' + ','.join(extcmds)]
+
+            # FIXME: This doesn't do environment groups atm.
             if cmd == 'mark-convert':
                 # Convert old style info. into groups as objects.
 
@@ -1019,9 +1085,12 @@ class GroupsCommand(YumCommand):
                 return 0, ['Converted old style groups to objects.']
 
             if cmd == 'mark-remove':
-                for strng in extcmds:
-                    for group in base.comps.return_groups(strng):
-                        base.igroups.del_group(group.groupid)
+                gRG = base._groupReturnGroups(extcmds,ignore_case=False)
+                igrps, grps, ievgrps, evgrps = gRG
+                for evgrp in ievgrps:
+                    base.igroups.del_environment(evgrp.evgid)
+                for grp in igrps:
+                    base.igroups.del_group(grp.gid)
                 base.igroups.save()
                 return 0, ['Marked remove: ' + ','.join(extcmds)]
 
-- 
1.7.6.5



More information about the Yum-devel mailing list