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.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))

View File

@ -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

View File

@ -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)