From 59ed253a0ee5e089f9883b09a3c5089f4334efad Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Sun, 4 Jun 2017 15:58:40 +0200 Subject: [PATCH] supybot-wizard: do not pollute the CWD before paths to directories are known. --- scripts/supybot-wizard | 43 ++++++++++++++++++++++++++++++++++++++---- src/conf.py | 13 +++++++++++-- src/log.py | 4 ---- 3 files changed, 50 insertions(+), 10 deletions(-) diff --git a/scripts/supybot-wizard b/scripts/supybot-wizard index 3150ec5ed..5896654e3 100644 --- a/scripts/supybot-wizard +++ b/scripts/supybot-wizard @@ -260,11 +260,8 @@ def main(): i18n.conf = fakeConf i18n.currentLocale = language i18n.reloadLocales() - import supybot.log as log - log._stdoutHandler.setLevel(100) # *Nothing* gets through this! import supybot.conf as conf i18n.import_conf() # It imports the real conf module - import supybot.plugin as plugin ### Directories. # We set these variables in cache because otherwise conf and log will @@ -284,6 +281,8 @@ def main(): make a directory named "logs" right here.""") (logDir, basedir) = getDirectoryName('logs') conf.supybot.directories.log.setValue(logDir) + import supybot.log as log + log._stdoutHandler.setLevel(100) # *Nothing* gets through this! # conf.supybot.directories.data output("""Your bot will need to put various data somewhere. Things @@ -310,6 +309,23 @@ def main(): (backupDir, basedir) = getDirectoryName('backup', basedir=basedir) conf.supybot.directories.backup.setValue(backupDir) + # conf.supybot.directories.data.tmp + output("""Your bot needs a directory to put temporary files (used + mainly to atomically update its configuration files).""") + (tmpDir, basedir) = getDirectoryName('tmp', basedir=basedir) + conf.supybot.directories.data.tmp.setValue(tmpDir) + + # conf.supybot.directories.data.web + output("""Your bot needs a directory to put files related to the web + server (templates, CSS).""") + (webDir, basedir) = getDirectoryName('web', basedir=basedir) + conf.supybot.directories.data.web.setValue(webDir) + + + # imports callbacks, which imports ircdb, which requires + # directories.conf + import supybot.plugin as plugin + # pluginDirs output("""Your bot will also need to know where to find its plugins at. Of course, it already knows where the plugins that it came with are, @@ -330,22 +346,33 @@ def main(): the various log, config, and data files.""") basedir = something("""Where would you like to create these directories?""", default=os.curdir) + # conf.supybot.directories.log (logDir, basedir) = getDirectoryName('logs', basedir=basedir, prompt=False) conf.supybot.directories.log.setValue(logDir) + # conf.supybot.directories.data (dataDir, basedir) = getDirectoryName('data', basedir=basedir, prompt=False) conf.supybot.directories.data.setValue(dataDir) + (tmpDir, basedir) = getDirectoryName('tmp', + basedir=basedir, prompt=False) + conf.supybot.directories.data.tmp.setValue(tmpDir) + (webDir, basedir) = getDirectoryName('web', + basedir=basedir, prompt=False) + conf.supybot.directories.data.web.setValue(webDir) + # conf.supybot.directories.conf (confDir, basedir) = getDirectoryName('conf', basedir=basedir, prompt=False) conf.supybot.directories.conf.setValue(confDir) + # conf.supybot.directories.backup (backupDir, basedir) = getDirectoryName('backup', basedir=basedir, prompt=False) conf.supybot.directories.backup.setValue(backupDir) + # pluginDirs pluginDirs = conf.supybot.directories.plugins() (pluginDir, _) = getDirectoryName('plugins', @@ -354,6 +381,10 @@ def main(): pluginDirs.append(pluginDir) conf.supybot.directories.plugins.setValue(pluginDirs) + import supybot.log as log + log._stdoutHandler.setLevel(100) # *Nothing* gets through this! + import supybot.plugin as plugin + output("Good! We're done with the directory stuff.") ### @@ -719,8 +750,12 @@ def main(): # We're going to need to do a darcs predist thing here. #conf.supybot.debug.generated.setValue('...') + if advanced: + basedir = '.' + filename = os.path.join(basedir, '%s.conf') + filename = something("""In which file would you like to save - this config?""", default='%s.conf' % nick) + this config?""", default=filename % nick) if not filename.endswith('.conf'): filename += '.conf' registry.close(conf.supybot, os.path.expanduser(filename)) diff --git a/src/conf.py b/src/conf.py index 42ecc0d83..1627cf459 100644 --- a/src/conf.py +++ b/src/conf.py @@ -870,6 +870,9 @@ registerGlobalValue(supybot.directories, 'backup', Directory('backup', _("""Determines what directory backup data is put into. Set it to /dev/null to disable backup (it is a special value, so it also works on Windows and systems without /dev/null)."""))) +registerGlobalValue(supybot.directories, 'log', + Directory('logs', """Determines what directory the bot will store its + logfiles in.""")) registerGlobalValue(supybot.directories.data, 'tmp', DataFilenameDirectory('tmp', _("""Determines what directory temporary files are put into."""))) @@ -877,8 +880,14 @@ registerGlobalValue(supybot.directories.data, 'web', DataFilenameDirectory('web', _("""Determines what directory files of the web server (templates, custom images, ...) are put into."""))) -utils.file.AtomicFile.default.tmpDir = supybot.directories.data.tmp -utils.file.AtomicFile.default.backupDir = supybot.directories.backup +def _update_tmp(): + utils.file.AtomicFile.default.tmpDir = supybot.directories.data.tmp +supybot.directories.data.tmp.addCallback(_update_tmp) +_update_tmp() +def _update_backup(): + utils.file.AtomicFile.default.backupDir = supybot.directories.backup +supybot.directories.backup.addCallback(_update_backup) +_update_backup() registerGlobalValue(supybot.directories, 'plugins', registry.CommaSeparatedListOfStrings([], _("""Determines what directories diff --git a/src/log.py b/src/log.py index f2581f521..5ba4325f9 100644 --- a/src/log.py +++ b/src/log.py @@ -178,10 +178,6 @@ class ColorizedFormatter(Formatter): else: return Formatter.format(self, record, *args, **kwargs) -conf.registerGlobalValue(conf.supybot.directories, 'log', - conf.Directory('logs', """Determines what directory the bot will store its - logfiles in.""")) - _logDir = conf.supybot.directories.log() if not os.path.exists(_logDir): os.mkdir(_logDir, 0o755)