Sandro Bonazzola has uploaded a new change for review.

Change subject: packaging: setup: enhance line uninstall
......................................................................

packaging: setup: enhance line uninstall

Previously it was possible only remove added lines during
uninstall.
Now it is possible to re-add removed lines and restore
edited lines.

Change-Id: I69ab434de8fb675c67ac5d1907879e465e587dbf
Signed-off-by: Sandro Bonazzola <[email protected]>
---
M packaging/setup/plugins/ovirt-engine-remove/files/simple.py
M packaging/setup/plugins/ovirt-engine-setup/core/uninstall.py
M packaging/setup/plugins/ovirt-engine-setup/distro-rpm/packages.py
3 files changed, 52 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/68/16768/1

diff --git a/packaging/setup/plugins/ovirt-engine-remove/files/simple.py 
b/packaging/setup/plugins/ovirt-engine-remove/files/simple.py
index ecd34e9..a2dfb16 100644
--- a/packaging/setup/plugins/ovirt-engine-remove/files/simple.py
+++ b/packaging/setup/plugins/ovirt-engine-remove/files/simple.py
@@ -19,6 +19,7 @@
 """Simple plugin."""
 
 
+import re
 import os
 import glob
 import hashlib
@@ -40,6 +41,16 @@
 @util.export
 class Plugin(plugin.PluginBase):
     """Simple plugin."""
+
+    _RE_REMOVE = re.compile('.*<osetup_remove>(?P<removed>.*)</osetup_remove>')
+    _RE_ADD = re.compile('.*<osetup_add>(?P<added>.*)</osetup_add>')
+
+    def decodeline(self, line):
+        add_m = self._RE_ADD.match(line)
+        rem_m = self._RE_REMOVE.match(line)
+        added = (add_m.group('added') if add_m else None)
+        removed = (rem_m.group('removed') if rem_m else None)
+        return (removed, added)
 
     def _digestFile(self, filename):
         md5 = hashlib.new('md5')
@@ -72,9 +83,26 @@
         new_content = []
         with open(filename, 'r') as f:
             old_content = f.read().splitlines()
+        just_remove = []
+        just_add = []
+        replace = {}
+
+        for line in remove_lines:
+            removed, added = self.decodeline(line)
+            if not removed:
+                just_remove.append(added)
+            elif not added:
+                just_add.append(removed)
+            else:
+                replace[added] = removed
         for line in old_content:
-            if line not in remove_lines:
+            if line not in just_remove:
+                #should me updated or added
+                if line in replace:
+                    line = replace[line]
                 new_content.append(line)
+        new_content.extend(just_add)
+
         self.environment[otopicons.CoreEnv.MAIN_TRANSACTION].append(
             filetransaction.FileTransaction(
                 name=filename,
diff --git a/packaging/setup/plugins/ovirt-engine-setup/core/uninstall.py 
b/packaging/setup/plugins/ovirt-engine-setup/core/uninstall.py
index 3e9b00a..7e4c83c 100644
--- a/packaging/setup/plugins/ovirt-engine-setup/core/uninstall.py
+++ b/packaging/setup/plugins/ovirt-engine-setup/core/uninstall.py
@@ -36,11 +36,24 @@
 
 
 class RegisterGroups(object):
+
     def __init__(self, environment):
         super(RegisterGroups, self).__init__()
         self.environment = environment
         self.config = {}
 
+    def encodeline(self, removed=None, added=None):
+        line = ''
+        if removed:
+            line += '<osetup_remove>{removed}</osetup_remove>'.format(
+                removed=removed,
+            )
+        if added:
+            line += '<osetup_add>{added}</osetup_add>'.format(
+                added=added,
+            )
+        return line
+
     def createGroup(self, group, description, optional):
         self.environment.setdefault(
             osetupcons.CoreEnv.FILE_GROUP_PREFIX + group,
diff --git a/packaging/setup/plugins/ovirt-engine-setup/distro-rpm/packages.py 
b/packaging/setup/plugins/ovirt-engine-setup/distro-rpm/packages.py
index d2e64f1..d3e81f3 100644
--- a/packaging/setup/plugins/ovirt-engine-setup/distro-rpm/packages.py
+++ b/packaging/setup/plugins/ovirt-engine-setup/distro-rpm/packages.py
@@ -86,6 +86,15 @@
                 '-q',
             ] + osetupcons.Const.RPM_LOCK_LIST,
         )
+        changes = []
+        for line in out:
+            changes.append(
+                self.environment[
+                    osetupcons.CoreEnv.REGISTER_UNINSTALL_GROUPS
+                ].encodeline(
+                    added=line,
+                )
+            )
 
         self.environment[
             osetupcons.CoreEnv.UNINSTALL_UNREMOVABLE_FILES
@@ -100,7 +109,7 @@
         ).addLines(
             'versionlock',
             osetupcons.FileLocations.OVIRT_ENGINE_YUM_VERSIONLOCK,
-            out,
+            changes,
         )
 
         modified, content = self._filterVersionLock()


-- 
To view, visit http://gerrit.ovirt.org/16768
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I69ab434de8fb675c67ac5d1907879e465e587dbf
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Sandro Bonazzola <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to