From 75bf654f1023e36f67b27d8e47e077400c072b84 Mon Sep 17 00:00:00 2001 From: "Endi S. Dewata" 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