[yocto] [AB PATCH 20/27] yoctogit.py: fix callbacks and instance attrs
Elizabeth Flanagan
elizabeth.flanagan at intel.com
Wed Mar 5 10:23:11 PST 2014
The callbacks in barecopy and movecopy were wrong. The big issue
this fixes is adding a correct resetWorkdir to each of these methods.
This ensures we are in the right place, doing the right things
depending on the name of the layer. For example, we need to be in
build for poky, but build/meta-qt3 for meta-qt3.
Also, this stops us from changing instance attrs.
Setting instance attributes (like self.todir self.workdir) when
you have a bunch of callbacks creates uglyness beyond belief.
Don't use them. Use local vars.
Signed-off-by: Elizabeth Flanagan <elizabeth.flanagan at intel.com>
---
.../buildbot/steps/source/yoctogit.py | 80 +++++++++++++++-------
1 file changed, 55 insertions(+), 25 deletions(-)
diff --git a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/steps/source/yoctogit.py b/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/steps/source/yoctogit.py
index 64dfe06..26599e7 100644
--- a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/steps/source/yoctogit.py
+++ b/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/steps/source/yoctogit.py
@@ -177,7 +177,7 @@ class YoctoGit(Source):
@defer.inlineCallbacks
def full(self):
updatable = yield self._sourcedirIsUpdatable()
-
+
if self.method == 'clobber':
yield self.clobber()
return
@@ -201,7 +201,7 @@ class YoctoGit(Source):
@defer.inlineCallbacks
def incremental(self):
updatable = yield self._sourcedirIsUpdatable()
-
+
# if not updateable, do a full checkout
if not updatable:
yield self._fullCloneOrFallback()
@@ -249,19 +249,24 @@ class YoctoGit(Source):
if self.mirrordir:
mirror = self.mirrordir + "/" + self.repourl.replace("git://", "") + "/"
if self.pathExists(mirror):
- self.srcdir=mirror
+ srcdir=mirror
else:
- self.srcdir='source/'+self.repourl
- if self.layername == "poky" or self.layername == "oecore" or "eclipse" in self.layername:
- self.todir = "build/"
+ srcdir='source/'+self.repourl
+ if "poky" in self.layername or \
+ "oecore" in self.layername or \
+ "eclipse" in self.layername:
+ todir = "."
+ self.workdir = "build"
else:
- self.todir = "build/" + self.layername
+ todir = "./" + self.layername
+ self.workdir = "build/" + self.layername
+
d.addCallback(lambda _: self.incremental())
def copy(_):
cmd = buildstep.RemoteCommand('cpdir',
- {'fromdir': self.srcdir,
- 'todir':self.todir,
+ {'fromdir': srcdir,
+ 'todir': todir,
'logEnviron': self.logEnviron,
'timeout': self.timeout,})
cmd.useLog(self.stdio_log, False)
@@ -273,8 +278,14 @@ class YoctoGit(Source):
d.addCallback(lambda _: evaluateCommand(cmd))
return d
d.addCallback(copy)
+
def resetWorkdir(_):
- self.workdir = 'build'
+ if "poky" in self.layername or \
+ "oecore" in self.layername or \
+ "eclipse" in self.layername:
+ self.workdir = 'build'
+ else:
+ self.workdir = "build/" + self.layername
return 0
d.addCallback(resetWorkdir)
@@ -289,13 +300,15 @@ class YoctoGit(Source):
# Let's make the todir difficult to have duplicate dir names. This
# method probably won't work correctly crossing filesystems, so utilize
# movecopy with caution.
-
+
+ srcdir='source/'+self.repourl
+
cmd = buildstep.RemoteCommand('mv', {'fromdir': self.workdir,
- 'todir': self.storedir + '/' + self.getProperty("DEST") + '/' +
- str(int(time.time())) + '-' +
- str(random.randrange(100, 100000, 2)) +
- self.layername,
- 'logEnviron':self.logEnviron,})
+ 'todir': self.storedir + '/' + self.getProperty("DEST") + '/' +
+ str(int(time.time())) + '-' +
+ str(random.randrange(100, 100000, 2)) +
+ self.layername,
+ 'logEnviron':self.logEnviron,})
cmd.useLog(self.stdio_log, False)
d = self.runCommand(cmd)
def evaluateCommand(cmd):
@@ -304,18 +317,29 @@ class YoctoGit(Source):
raise buildstep.BuildStepFailed()
d.addCallback(lambda _: evaluateCommand(cmd))
- todir = None
- self.workdir = 'source/'+self.repourl
- self.srcdir='source/'+self.repourl
- d.addCallback(lambda _: self.incremental())
if self.layername == "poky" or self.layername == "oecore":
- self.todir = "build"
+ todir = "build"
else:
- self.todir = "build/" + self.layername
+ todir = "build/" + self.layername
+
+ def mkdir(_):
+ cmd = buildstep.RemoteCommand('mkdir', {'dir': 'build',
+ 'logEnviron': self.logEnviron,
+ 'timeout': self.timeout,})
+ cmd.useLog(self.stdio_log, False)
+ d = self.runCommand(cmd)
+ def evaluateCommand(cmd):
+ if cmd.didFail():
+ log.msg("Source step failed while running command %s" % cmd)
+ raise buildstep.BuildStepFailed()
+ d.addCallback(lambda _: evaluateCommand(cmd))
+ return d
+ d.addCallback(mkdir)
+ d.addCallback(lambda _: self.incremental())
def copy(_):
cmd = buildstep.RemoteCommand('cpdir',
- {'fromdir': self.srcdir,
- 'todir':self.todir,
+ {'fromdir': srcdir,
+ 'todir': todir,
'logEnviron': self.logEnviron,
'timeout': self.timeout,})
cmd.useLog(self.stdio_log, False)
@@ -327,8 +351,14 @@ class YoctoGit(Source):
d.addCallback(lambda _: evaluateCommand(cmd))
return d
d.addCallback(copy)
+
def resetWorkdir(_):
- self.workdir = 'build'
+ if "poky" in self.layername or \
+ "oecore" in self.layername or \
+ "eclipse" in self.layername:
+ self.workdir = 'build.'
+ else:
+ self.workdir = "build/" + self.layername
return 0
d.addCallback(resetWorkdir)
return d
--
1.8.1.2
More information about the yocto
mailing list