Skip to contentSkip to conversation

ScrapeTargets.py: Use python instead of awk

PATCH Applied Stephano Cetola 2 participants 2 messages Jul 10, 2017 – Jul 11, 2017

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ScrapeTargets.py: Use python instead of awk

Using awk, sed, or grep to pull a shell variable out of stdio proved complex. Instead, simply cat the entire "inc" file to stdio and use python/regex to find the variable.

---
 .../autobuilder/buildsteps/ScrapeTargets.py             | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)
lib/python2.7/site-packages/autobuilder/buildsteps/ScrapeTargets.py +10 -7
index 07e2fdcf4..8844c6366 100644
@@ -15,6 +15,7 @@ from buildbot.steps.shell import ShellCommand
 from buildbot.status.results import SUCCESS, FAILURE
 from autobuilder.config import *
 import os
+import re
 
 class ScrapeTargets(ShellCommand):
     haltOnFailure = False
@@ -41,9 +42,7 @@ class ScrapeTargets(ShellCommand):
         workerdir = os.path.join(os.path.join(YOCTO_ABBASE, "yocto-worker"))
         buildername = self.getProperty("buildername")
         src = os.path.join(workerdir, buildername, "build", self.source)
-        # find targetsvar then return lines up to a quote
-        self.command = ["awk",
-                '/%s/{flag=1;print;next}/"/{flag=0}flag' % self.targetsvar, src]
+        self.command = ["cat", src]
         ShellCommand.start(self)
 
     def commandComplete(self, cmd):
@@ -51,10 +50,14 @@ class ScrapeTargets(ShellCommand):
             return
 
         result = cmd.logs['stdio'].getText()
-        targets = result.strip()
-        targets = targets.replace('%s="' % self.targetsvar, '')
-        targets = targets.replace('\\', '')
-        targets = targets.replace('\n', '')
+        start = result.find(self.targetsvar) + len(self.targetsvar)
+        res = re.search('"([^"]*)"', result[start:])
+        targets = ""
+        if res:
+            targets = res.group()
+            targets = targets.replace('%s="' % self.targetsvar, '')
+            targets = targets.replace('\\', '')
+            targets = targets.replace('\n', '')
         self.setProperty("scraped_targets",
                          targets,
                          'Targets "%s" scraped from %s' % (targets,
Signature · 1 line
2.13.2
Applied
#1 lore raw
Quoted 3 lines · Stephano Cetola

Using awk, sed, or grep to pull a shell variable out of stdio proved complex. Instead, simply cat the entire "inc" file to stdio and use python/regex to find the variable.

Merged, thanks!

Quoted 58 lines

---
 .../autobuilder/buildsteps/ScrapeTargets.py             | 17
++++++++++-------

 1 file changed, 10 insertions(+), 7 deletions(-)
(quoted diff) +0 -0

packages/autobuilder/buildsteps/ScrapeTargets.py b/lib/python2.7/site-packages/autobuilder/buildsteps/ScrapeTargets.py index 07e2fdcf4..8844c6366 100644
--- a/lib/python2.7/site- packages/autobuilder/buildsteps/ScrapeTargets.py
+++ b/lib/python2.7/site- packages/autobuilder/buildsteps/ScrapeTargets.py

(quoted diff) +0 -0
@@ -15,6 +15,7 @@ from buildbot.steps.shell import ShellCommand

 from buildbot.status.results import SUCCESS, FAILURE from autobuilder.config import *
 import os
+import re

 class ScrapeTargets(ShellCommand):
     haltOnFailure = False

(quoted diff) +0 -0
@@ -41,9 +42,7 @@ class ScrapeTargets(ShellCommand):

         workerdir = os.path.join(os.path.join(YOCTO_ABBASE, "yocto- worker"))
         buildername = self.getProperty("buildername") src = os.path.join(workerdir, buildername, "build", self.source)
-        # find targetsvar then return lines up to a quote -        self.command = ["awk",
-                '/%s/{flag=1;print;next}/"/{flag=0}flag' % self.targetsvar, src]
+        self.command = ["cat", src] ShellCommand.start(self)

     def commandComplete(self, cmd):

(quoted diff) +0 -0
@@ -51,10 +50,14 @@ class ScrapeTargets(ShellCommand):

             return

         result = cmd.logs['stdio'].getText()
-        targets = result.strip()
-        targets = targets.replace('%s="' % self.targetsvar, '') -        targets = targets.replace('\\', '')
-        targets = targets.replace('\n', '')
+        start = result.find(self.targetsvar) + len(self.targetsvar) +        res = re.search('"([^"]*)"', result[start:])
+        targets = ""
+        if res:
+            targets = res.group()
+            targets = targets.replace('%s="' % self.targetsvar, '') +            targets = targets.replace('\\', '')
+            targets = targets.replace('\n', '') self.setProperty("scraped_targets",
                          targets,
                          'Targets "%s" scraped from %s' % (targets, --
2.13.2