[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