Revision: 4312 http://trac.macosforge.org/projects/calendarserver/changeset/4312 Author: sagen@apple.com Date: 2009-05-27 18:07:23 -0700 (Wed, 27 May 2009) Log Message: ----------- Rather than just copy old plist over from previous system, merge the keys we care about into the new plist. Modified Paths: -------------- CalendarServer/trunk/contrib/migration/59_calendarmigrator.py Modified: CalendarServer/trunk/contrib/migration/59_calendarmigrator.py =================================================================== --- CalendarServer/trunk/contrib/migration/59_calendarmigrator.py 2009-05-27 22:57:03 UTC (rev 4311) +++ CalendarServer/trunk/contrib/migration/59_calendarmigrator.py 2009-05-28 01:07:23 UTC (rev 4312) @@ -149,16 +149,73 @@ os.symlink(link, newPath) elif os.path.isfile(oldPath): - # Copy the file over, overwriting copy in newConfigDir - log("Copying file %s to %s" % (oldPath, newConfigDir)) - shutil.copy2(oldPath, newConfigDir) + if name == "caldavd.plist": + # Migrate certain settings from the old plist to new: + log("Parsing %s" % (oldPath,)) + oldPlist = plistlib.readPlist(oldPath) + if os.path.exists(newPath): + log("Parsing %s" % (newPath,)) + newPlist = plistlib.readPlist(newPath) + log("Removing %s" % (newPath,)) + os.remove(newPath) + else: + newPlist = { } + log("Processing %s" % (oldPath,)) + mergePlist(oldPlist, newPlist) + log("Writing %s" % (newPath,)) + plistlib.writePlist(newPlist, newPath) + + else: + # Copy the file over, overwriting copy in newConfigDir + log("Copying file %s to %s" % (oldPath, newConfigDir)) + shutil.copy2(oldPath, newConfigDir) + + elif os.path.isdir(oldPath) and not os.path.exists(newPath): # Copy the dir over, but only if new one doesn't exist log("Copying directory %s to %s" % (oldPath, newPath)) shutil.copytree(oldPath, newPath, symlinks=True) +def mergePlist(oldPlist, newPlist): + # The following CalendarServer v1.x keys are ignored: + # EnableNotifications, Verbose + + # These keys are copied verbatim: + for key in ( + "AccessLogFile", "AdminPrincipals", "BindAddresses", "BindHTTPPorts", + "BindSSLPorts", "ControlSocket", "DocumentRoot", "EnableDropBox", + "EnableProxyPrincipals", "EnableSACLs", "ErrorLogFile", "GroupName", + "HTTPPort", "MaximumAttachmentSize", "MultiProcess", "PIDFile", + "ProcessType", "ResponseCompression", "RotateAccessLog", + "SSLAuthorityChain", "SSLCertificate", "SSLPort", "SSLPrivateKey", + "ServerHostName", "ServerStatsFile", "SudoersFile", "UserName", + "UserQuota", + ): + if key in oldPlist: + newPlist[key] = oldPlist[key] + + # "Wiki" is a new authentication in v2.x; copy all "Authentication" sub-keys # over, and "Wiki" will be picked up from the new plist: + if "Authentication" in oldPlist: + for key in oldPlist["Authentication"]: + newPlist["Authentication"][key] = oldPlist["Authentication"][key] + + # Strip out any unknown params from the DirectoryService: + if "DirectoryService" in oldPlist: + newPlist["DirectoryService"] = oldPlist["DirectoryService"] + for key in newPlist["DirectoryService"]["params"].keys(): + if key not in ( + "node", "restrictEnabledRecords", "restrictToGroup", + "cacheTimeout", "xmlFile" + ): + del newPlist["DirectoryService"]["params"][key] + + # Place DataRoot as a sibling of DocumentRoot: + parent = os.path.dirname(newPlist["DocumentRoot"].rstrip("/")) + newPlist["DataRoot"] = os.path.join(parent, "Data") + + def isServiceDisabled(source, service): """ Returns whether or not a service is disabled
participants (1)
-
source_changes@macosforge.org