summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2015-02-18 11:19:20 +0000
committerSam Thursfield <sam.thursfield@codethink.co.uk>2015-02-18 16:32:50 +0000
commit51afd2289db20bcf5063ad9512ab1164154ff093 (patch)
tree58bda7648497b25e20bf523c9dd9ab22c4dd7e81
parent1a9707b0ff27e13db49a2329043752f8cf436bb4 (diff)
downloadmorph-51afd2289db20bcf5063ad9512ab1164154ff093.tar.gz
distbuild: Create a new directory to store build logs for each build.
It gets messy having hundreds of build-step-xx.log files in the current directory, and if two builds are run in parallel from the same directory the logs for a given chunk will be mixed together in one file. Now, a new directory named build-0, build-1, build-2 etc is created for each new build. If the user passes --initiator-step-output-dir the logs will be placed in that directory, instead. This behaviour is the same as before.
-rw-r--r--distbuild/initiator.py21
-rw-r--r--morphlib/plugins/distbuild_plugin.py1
2 files changed, 20 insertions, 2 deletions
diff --git a/distbuild/initiator.py b/distbuild/initiator.py
index ddea8cb3..378c2cae 100644
--- a/distbuild/initiator.py
+++ b/distbuild/initiator.py
@@ -17,6 +17,7 @@
import cliapp
+import itertools
import logging
import os
import random
@@ -37,6 +38,20 @@ class _Failed(object):
self.msg = msg
+def create_build_directory(prefix='build'):
+ '''Create a new directory to store build logs.
+
+ The directory will be named build-0, unless that directory already exists,
+ in which case it will be named build-1, and so on.
+
+ '''
+ for i in itertools.count():
+ path = '%s-%02i' % (prefix, i)
+ if not os.path.exists(path):
+ os.mkdir(path)
+ return path
+
+
class Initiator(distbuild.StateMachine):
def __init__(self, cm, conn, app, repo_name, ref, morphology,
@@ -51,9 +66,13 @@ class Initiator(distbuild.StateMachine):
self._original_ref = original_ref
self._steps = None
self._step_outputs = {}
- self._step_output_dir = app.settings['initiator-step-output-dir']
self.debug_transitions = False
+ if app.settings['initiator-step-output-dir'] == '':
+ self._step_output_dir = create_build_directory()
+ else:
+ self._step_output_dir = app.settings['initiator-step-output-dir']
+
def setup(self):
distbuild.crash_point()
diff --git a/morphlib/plugins/distbuild_plugin.py b/morphlib/plugins/distbuild_plugin.py
index a7d69472..24d5584c 100644
--- a/morphlib/plugins/distbuild_plugin.py
+++ b/morphlib/plugins/distbuild_plugin.py
@@ -180,7 +180,6 @@ class ControllerDaemon(cliapp.Plugin):
self.app.settings.string(
['initiator-step-output-dir'],
'write build output to files in DIR',
- default='.',
group=group_distbuild)
self.app.settings.string(