X-Git-Url: https://scripts.mit.edu/gitweb/wizard.git/blobdiff_plain/3c391e8d97efac20e9b9f52b5446bfac1b4239c2..5f835f44034f079fe644879e8c27580a48e937cd:/wizard/app/mediawiki.py diff --git a/wizard/app/mediawiki.py b/wizard/app/mediawiki.py index d77b0c3..83018ce 100644 --- a/wizard/app/mediawiki.py +++ b/wizard/app/mediawiki.py @@ -1,117 +1,248 @@ import re import distutils.version import os -import datetime +import lxml.cssselect +import lxml.etree +import StringIO import logging -import shlex -from wizard import app, deploy, install, scripts, shell, util +from wizard import app, install, resolve, shell, sql, util from wizard.app import php +# Note: Maintenance script exit codes +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# MediaWiki has notoriously spotty support for exit codes. It has +# gotten better, but there are still always cases that slip through, +# such as . +# As a result, we check both for exit codes AND for the "success" +# message in stdout. + def make_filename_regex(var): - return 'LocalSettings.php', re.compile('^(\$' + app.expand_re(var) + r'''\s*=\s*)(.*)(;)''', re.M) + """See :ref:`versioning config ` for more information.""" + return 'LocalSettings.php', php.re_var(var) -make_extractor = app.filename_regex_extractor(make_filename_regex) -make_substitution = app.filename_regex_substitution(make_filename_regex) -seed = { +seed = util.dictmap(make_filename_regex, { 'WIZARD_IP': 'IP', # obsolete, remove after we're done 'WIZARD_SITENAME': 'wgSitename', + 'WIZARD_META_NAMESPACE': 'wgMetaNamespace', 'WIZARD_SCRIPTPATH': 'wgScriptPath', + 'WIZARD_SERVER': 'wgServer', 'WIZARD_EMERGENCYCONTACT': ('wgEmergencyContact', 'wgPasswordSender'), 'WIZARD_DBSERVER': 'wgDBserver', 'WIZARD_DBNAME': 'wgDBname', 'WIZARD_DBUSER': 'wgDBuser', 'WIZARD_DBPASSWORD': 'wgDBpassword', 'WIZARD_SECRETKEY': ('wgSecretKey', 'wgProxyKey'), - } + 'WIZARD_UPGRADEKEY': 'wgUpgradeKey', + }) -class Application(deploy.Application): - parametrized_files = ['LocalSettings.php', 'php.ini'] +class Application(app.Application): + fullname = "MediaWiki" + database = "mysql" + parametrized_files = ['LocalSettings.php'] + php.parametrized_files deprecated_keys = set(['WIZARD_IP']) | php.deprecated_keys - @property - def extractors(self): - if not self._extractors: - self._extractors = util.dictmap(make_extractor, seed) - self._extractors.update(php.extractors) - return self._extractors - @property - def substitutions(self): - if not self._substitutions: - self._substitutions = util.dictkmap(make_substitution, seed) - self._substitutions.update(php.substitutions) - return self._substitutions - @property - def install_handler(self): - handler = install.ArgHandler("mysql", "admin", "email") - handler.add(install.Arg("title", help="Title of your new MediaWiki install")) - return handler + extractors = app.make_extractors(seed) + extractors.update(php.extractors) + substitutions = app.make_substitutions(seed) + substitutions.update(php.substitutions) + install_schema = install.ArgSchema("db", "admin", "email", "title") + random_keys = set(['WIZARD_SECRETKEY', 'WIZARD_UPGRADEKEY']) + def download(self, version): + series = ".".join(str(version).split(".")[:2]) + return "http://download.wikimedia.org/mediawiki/%s/mediawiki-%s.tar.gz" % (series, version) def checkConfig(self, deployment): - return os.path.isfile(os.path.join(deployment.location, "LocalSettings.php")) + return os.path.isfile("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]) + return self.detectVersionFromFile("includes/DefaultSettings.php", php.re_var("wgVersion")) + def checkWeb(self, deployment): + return self.checkWebPage(deployment, "/index.php?title=Main_Page", outputs=["