Blob Blame History Raw
From 75bf654f1023e36f67b27d8e47e077400c072b84 Mon Sep 17 00:00:00 2001
From: "Endi S. Dewata" <edewata@redhat.com>
Date: Mon, 28 Oct 2013 17:21:59 -0400
Subject: [PATCH 4/6] Backup upgrade tracker.

The upgrade framework has been modified to backup the files used
to track the upgrade progress. If the tracker file is also modified
by the upgrade scriptlet, it will only keep the initial backup
(before any modifications were made).

Ticket #763
---
 base/common/python/pki/upgrade.py        | 8 ++++++--
 base/common/python/pki/util.py           | 6 +++++-
 base/server/python/pki/server/upgrade.py | 1 +
 3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/base/common/python/pki/upgrade.py b/base/common/python/pki/upgrade.py
index bd78ec9..7e48180 100644
--- a/base/common/python/pki/upgrade.py
+++ b/base/common/python/pki/upgrade.py
@@ -110,6 +110,7 @@ class PKIUpgradeTracker(object):
         index_key='PKI_UPGRADE_INDEX'):
 
         self.name = name
+        self.filename = filename
 
         self.version_key = version_key
         self.index_key = index_key
@@ -267,6 +268,7 @@ class PKIUpgradeScriptlet(object):
         # in this version, update the tracker version.
 
         tracker = self.upgrader.get_tracker()
+        self.backup(tracker.filename)
 
         if not self.last:
             tracker.set_index(self.index)
@@ -389,7 +391,8 @@ class PKIUpgradeScriptlet(object):
 
             if os.path.isfile(path):
                 if verbose: print 'Saving ' + path
-                pki.util.copyfile(path, dest)
+                # do not overwrite initial backup
+                pki.util.copyfile(path, dest, overwrite=False)
 
             else:
                 for sourcepath, _, filenames in os.walk(path):
@@ -405,7 +408,8 @@ class PKIUpgradeScriptlet(object):
                         targetfile = os.path.join(destpath, filename)
 
                         if verbose: print 'Saving ' + sourcefile
-                        pki.util.copyfile(sourcefile, targetfile)
+                        # do not overwrite initial backup
+                        pki.util.copyfile(sourcefile, targetfile, overwrite=False)
 
         else:
 
diff --git a/base/common/python/pki/util.py b/base/common/python/pki/util.py
index 4d25390..62aec2c 100644
--- a/base/common/python/pki/util.py
+++ b/base/common/python/pki/util.py
@@ -53,11 +53,15 @@ def copy(source, dest):
                 targetfile = os.path.join(destpath, filename)
                 copyfile(sourcefile, targetfile)
 
-def copyfile(source, dest):
+def copyfile(source, dest, overwrite=True):
     """
     Copy a file or link while preserving its attributes.
     """
 
+    # if dest already exists and not overwriting, do nothing
+    if os.path.exists(dest) and not overwrite:
+        return
+
     if os.path.islink(source):
         target = os.readlink(source)
         os.symlink(target, dest)
diff --git a/base/server/python/pki/server/upgrade.py b/base/server/python/pki/server/upgrade.py
index 940dbe4..ee0dfed 100644
--- a/base/server/python/pki/server/upgrade.py
+++ b/base/server/python/pki/server/upgrade.py
@@ -60,6 +60,7 @@ class PKIServerUpgradeScriptlet(pki.upgrade.PKIUpgradeScriptlet):
         # in this version, update the tracker version.
 
         tracker = self.upgrader.get_tracker(instance, subsystem)
+        self.backup(tracker.filename)
 
         if not self.last:
             tracker.set_index(self.index)
-- 
1.8.3.1