supybot-wizard: do not pollute the CWD before paths to directories are known.

This commit is contained in:
Valentin Lorentz 2017-06-04 15:58:40 +02:00
parent 2caf8e4072
commit 59ed253a0e
3 changed files with 50 additions and 10 deletions

View File

@ -260,11 +260,8 @@ def main():
i18n.conf = fakeConf i18n.conf = fakeConf
i18n.currentLocale = language i18n.currentLocale = language
i18n.reloadLocales() i18n.reloadLocales()
import supybot.log as log
log._stdoutHandler.setLevel(100) # *Nothing* gets through this!
import supybot.conf as conf import supybot.conf as conf
i18n.import_conf() # It imports the real conf module i18n.import_conf() # It imports the real conf module
import supybot.plugin as plugin
### Directories. ### Directories.
# We set these variables in cache because otherwise conf and log will # 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.""") make a directory named "logs" right here.""")
(logDir, basedir) = getDirectoryName('logs') (logDir, basedir) = getDirectoryName('logs')
conf.supybot.directories.log.setValue(logDir) conf.supybot.directories.log.setValue(logDir)
import supybot.log as log
log._stdoutHandler.setLevel(100) # *Nothing* gets through this!
# conf.supybot.directories.data # conf.supybot.directories.data
output("""Your bot will need to put various data somewhere. Things output("""Your bot will need to put various data somewhere. Things
@ -310,6 +309,23 @@ def main():
(backupDir, basedir) = getDirectoryName('backup', basedir=basedir) (backupDir, basedir) = getDirectoryName('backup', basedir=basedir)
conf.supybot.directories.backup.setValue(backupDir) 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 # pluginDirs
output("""Your bot will also need to know where to find its plugins at. 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, 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.""") the various log, config, and data files.""")
basedir = something("""Where would you like to create these basedir = something("""Where would you like to create these
directories?""", default=os.curdir) directories?""", default=os.curdir)
# conf.supybot.directories.log # conf.supybot.directories.log
(logDir, basedir) = getDirectoryName('logs', (logDir, basedir) = getDirectoryName('logs',
basedir=basedir, prompt=False) basedir=basedir, prompt=False)
conf.supybot.directories.log.setValue(logDir) conf.supybot.directories.log.setValue(logDir)
# conf.supybot.directories.data # conf.supybot.directories.data
(dataDir, basedir) = getDirectoryName('data', (dataDir, basedir) = getDirectoryName('data',
basedir=basedir, prompt=False) basedir=basedir, prompt=False)
conf.supybot.directories.data.setValue(dataDir) 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 # conf.supybot.directories.conf
(confDir, basedir) = getDirectoryName('conf', (confDir, basedir) = getDirectoryName('conf',
basedir=basedir, prompt=False) basedir=basedir, prompt=False)
conf.supybot.directories.conf.setValue(confDir) conf.supybot.directories.conf.setValue(confDir)
# conf.supybot.directories.backup # conf.supybot.directories.backup
(backupDir, basedir) = getDirectoryName('backup', (backupDir, basedir) = getDirectoryName('backup',
basedir=basedir, prompt=False) basedir=basedir, prompt=False)
conf.supybot.directories.backup.setValue(backupDir) conf.supybot.directories.backup.setValue(backupDir)
# pluginDirs # pluginDirs
pluginDirs = conf.supybot.directories.plugins() pluginDirs = conf.supybot.directories.plugins()
(pluginDir, _) = getDirectoryName('plugins', (pluginDir, _) = getDirectoryName('plugins',
@ -354,6 +381,10 @@ def main():
pluginDirs.append(pluginDir) pluginDirs.append(pluginDir)
conf.supybot.directories.plugins.setValue(pluginDirs) 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.") 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. # We're going to need to do a darcs predist thing here.
#conf.supybot.debug.generated.setValue('...') #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 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'): if not filename.endswith('.conf'):
filename += '.conf' filename += '.conf'
registry.close(conf.supybot, os.path.expanduser(filename)) registry.close(conf.supybot, os.path.expanduser(filename))

View File

@ -870,6 +870,9 @@ registerGlobalValue(supybot.directories, 'backup',
Directory('backup', _("""Determines what directory backup data is put Directory('backup', _("""Determines what directory backup data is put
into. Set it to /dev/null to disable backup (it is a special value, 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)."""))) 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', registerGlobalValue(supybot.directories.data, 'tmp',
DataFilenameDirectory('tmp', _("""Determines what directory temporary files DataFilenameDirectory('tmp', _("""Determines what directory temporary files
are put into."""))) are put into.""")))
@ -877,8 +880,14 @@ registerGlobalValue(supybot.directories.data, 'web',
DataFilenameDirectory('web', _("""Determines what directory files of the DataFilenameDirectory('web', _("""Determines what directory files of the
web server (templates, custom images, ...) are put into."""))) web server (templates, custom images, ...) are put into.""")))
utils.file.AtomicFile.default.tmpDir = supybot.directories.data.tmp def _update_tmp():
utils.file.AtomicFile.default.backupDir = supybot.directories.backup 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', registerGlobalValue(supybot.directories, 'plugins',
registry.CommaSeparatedListOfStrings([], _("""Determines what directories registry.CommaSeparatedListOfStrings([], _("""Determines what directories

View File

@ -178,10 +178,6 @@ class ColorizedFormatter(Formatter):
else: else:
return Formatter.format(self, record, *args, **kwargs) 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() _logDir = conf.supybot.directories.log()
if not os.path.exists(_logDir): if not os.path.exists(_logDir):
os.mkdir(_logDir, 0o755) os.mkdir(_logDir, 0o755)