From cb6160df90dfcfa857e5f093fee6ab24f56755ce Mon Sep 17 00:00:00 2001 From: "Edward Z. Yang" Date: Fri, 21 Aug 2009 22:21:35 -0400 Subject: [PATCH] Add version detection. Signed-off-by: Edward Z. Yang --- wizard/app/mediawiki.py | 7 +++++++ wizard/command/upgrade.py | 2 ++ wizard/deploy.py | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/wizard/app/mediawiki.py b/wizard/app/mediawiki.py index 40358ce..ef7c1ea 100644 --- a/wizard/app/mediawiki.py +++ b/wizard/app/mediawiki.py @@ -1,4 +1,5 @@ import re +import distutils.version import os from wizard import app, deploy, install, shell, util @@ -43,6 +44,12 @@ class Application(deploy.Application): return handler def checkConfig(self, deployment): return os.path.isfile(os.path.join(deployment.location, "LocalSettings.php")) + def detectVersion(self, deployment): + contents = deployment.read("includes/DefaultSettings.php") + regex = make_filename_regex("wgVersion")[1] + match = regex.search(contents) + if not match: return None + return distutils.version.LooseVersion(match.group(2)[1:-1]) def install(self, options): try: os.unlink("LocalSettings.php") diff --git a/wizard/command/upgrade.py b/wizard/command/upgrade.py index 1867d51..ab7bfc7 100644 --- a/wizard/command/upgrade.py +++ b/wizard/command/upgrade.py @@ -28,6 +28,7 @@ def main(argv, baton): d.verifyTag(options.srv_path) d.verifyGit(options.srv_path) d.verifyConfigured() + d.verifyVersion() repo = d.application.repository(options.srv_path) version = calculate_newest_version(sh, repo) if version == d.app_version.scripts_tag: @@ -183,3 +184,4 @@ temporary directory, finding conflicted files with `git status`, resolving the files, adding them using `git add`, and then committing your changes with `git commit` (your log message will be ignored), and then running `wizard upgrade --continue`.""" + diff --git a/wizard/deploy.py b/wizard/deploy.py index e591d36..89f8232 100644 --- a/wizard/deploy.py +++ b/wizard/deploy.py @@ -174,6 +174,17 @@ class Deployment(object): if not self.configured: raise NotConfiguredError(self.location) + def verifyVersion(self): + """ + Checks if our version and the version number recorded in a file + are consistent. + """ + real = self.application.detectVersion(self) + if not real: + raise VersionDetectionError + elif not str(real) == self.app_version.pristine_tag.partition('-')[2]: + raise VersionMismatchError(real, self.version) + @property def configured(self): """Whether or not an autoinstall has been configured/installed for use.""" @@ -340,6 +351,11 @@ class Application(object): non-versioned data in an application. """ raise NotImplemented + def detectVersion(self, deployment): + """ + Checks source files to determine the version manually. + """ + return None @property def extractors(self): """ @@ -582,6 +598,22 @@ ERROR: HEAD is not a descendant of %s. This probably means that an upstream rebase occurred, and new tags were pulled, but local user commits were never rebased.""" % self.tag +class VersionDetectionError(Error): + def __str__(self): + return """ + +ERROR: Could not detect the real version of the application.""" + +class VersionMismatchError(Error): + def __init__(self, real_version, git_version): + self.real_version = real_version + self.git_version = git_version + def __str__(self): + return """ + +ERROR: The detected version %s did not match the Git +version %s.""" % (self.real_version, self.git_version) + _application_list = [ "mediawiki", "wordpress", "joomla", "e107", "gallery2", "phpBB", "advancedbook", "phpical", "trac", "turbogears", "django", -- 2.45.0