All of lore.kernel.org
 help / color / mirror / Atom feed
* [yocto-autobuilder][PATCH V4 0/1] better matching for refkit ci
@ 2017-07-05 21:27 Stephano Cetola
  2017-07-05 21:27 ` [yocto-autobuilder][PATCH V4 1/1] ScrapeTargets.py: improve target search algorithm Stephano Cetola
  0 siblings, 1 reply; 5+ messages in thread
From: Stephano Cetola @ 2017-07-05 21:27 UTC (permalink / raw)
  To: yocto

changed since V3:
Remove line breaks as well.

Stephano Cetola (1):
  ScrapeTargets.py: improve target search algorithm

 .../site-packages/autobuilder/buildsteps/ScrapeTargets.py    | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

-- 
2.13.2



^ permalink raw reply	[flat|nested] 5+ messages in thread

* [yocto-autobuilder][PATCH V4 1/1] ScrapeTargets.py: improve target search algorithm
  2017-07-05 21:27 [yocto-autobuilder][PATCH V4 0/1] better matching for refkit ci Stephano Cetola
@ 2017-07-05 21:27 ` Stephano Cetola
  2017-07-06 10:47   ` Joshua Lock
  0 siblings, 1 reply; 5+ messages in thread
From: Stephano Cetola @ 2017-07-05 21:27 UTC (permalink / raw)
  To: yocto

When scraping the build targets from refkit-ci.inc, grep would only
return the first line of the search result. By replacing grep with
awk, we are now searching for multi-line variables, and should now
scrape build targets even if they have line breaks between them.

[YOCTO #11720]

Signed-off-by: Stephano Cetola <stephano.cetola@linux.intel.com>
---
 .../site-packages/autobuilder/buildsteps/ScrapeTargets.py    | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/lib/python2.7/site-packages/autobuilder/buildsteps/ScrapeTargets.py b/lib/python2.7/site-packages/autobuilder/buildsteps/ScrapeTargets.py
index 80153fe85..07e2fdcf4 100644
--- a/lib/python2.7/site-packages/autobuilder/buildsteps/ScrapeTargets.py
+++ b/lib/python2.7/site-packages/autobuilder/buildsteps/ScrapeTargets.py
@@ -41,7 +41,9 @@ 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)
-        self.command = "cat " + src + " | grep " + self.targetsvar
+        # find targetsvar then return lines up to a quote
+        self.command = ["awk",
+                '/%s/{flag=1;print;next}/"/{flag=0}flag' % self.targetsvar, src]
         ShellCommand.start(self)
 
     def commandComplete(self, cmd):
@@ -49,10 +51,10 @@ class ScrapeTargets(ShellCommand):
             return
 
         result = cmd.logs['stdio'].getText()
-        targets = result.replace(self.targetsvar, "")
-        targets = targets.strip()
-        targets = targets.replace('=', '')
-        targets = targets.strip('"')
+        targets = result.strip()
+        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



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [yocto-autobuilder][PATCH V4 1/1] ScrapeTargets.py: improve target search algorithm
  2017-07-05 21:27 ` [yocto-autobuilder][PATCH V4 1/1] ScrapeTargets.py: improve target search algorithm Stephano Cetola
@ 2017-07-06 10:47   ` Joshua Lock
  2017-07-06 15:09     ` Stephano Cetola
  0 siblings, 1 reply; 5+ messages in thread
From: Joshua Lock @ 2017-07-06 10:47 UTC (permalink / raw)
  To: Stephano Cetola, yocto

On Wed, 2017-07-05 at 14:27 -0700, Stephano Cetola wrote:
> When scraping the build targets from refkit-ci.inc, grep would only
> return the first line of the search result. By replacing grep with
> awk, we are now searching for multi-line variables, and should now
> scrape build targets even if they have line breaks between them.
> 
> [YOCTO #11720]

Thanks, I've merged and pushed this. Please see my comment below.

> 
> Signed-off-by: Stephano Cetola <stephano.cetola@linux.intel.com>
> ---
>  .../site-packages/autobuilder/buildsteps/ScrapeTargets.py    | 12
> +++++++-----
>  1 file changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/lib/python2.7/site-
> packages/autobuilder/buildsteps/ScrapeTargets.py
> b/lib/python2.7/site-packages/autobuilder/buildsteps/ScrapeTargets.py
> index 80153fe85..07e2fdcf4 100644
> --- a/lib/python2.7/site-
> packages/autobuilder/buildsteps/ScrapeTargets.py
> +++ b/lib/python2.7/site-
> packages/autobuilder/buildsteps/ScrapeTargets.py
> @@ -41,7 +41,9 @@ 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)
> -        self.command = "cat " + src + " | grep " + self.targetsvar
> +        # find targetsvar then return lines up to a quote
> +        self.command = ["awk",
> +                '/%s/{flag=1;print;next}/"/{flag=0}flag' %
> self.targetsvar, src]
>          ShellCommand.start(self)
>  
>      def commandComplete(self, cmd):
> @@ -49,10 +51,10 @@ class ScrapeTargets(ShellCommand):
>              return
>  
>          result = cmd.logs['stdio'].getText()
> -        targets = result.replace(self.targetsvar, "")
> -        targets = targets.strip()
> -        targets = targets.replace('=', '')
> -        targets = targets.strip('"')
> +        targets = result.strip()
> +        targets = targets.replace('%s="' % self.targetsvar, '')

This still leaves us a bit brittle. What if someone adds whitespace
around the assignment operator? Could you create a follow-on patch for
that?

Thanks!

> +        targets = targets.replace('\\', '')
> +        targets = targets.replace('\n', '')
>          self.setProperty("scraped_targets",
>                           targets,
>                           'Targets "%s" scraped from %s' % (targets,
> -- 
> 2.13.2
> 


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [yocto-autobuilder][PATCH V4 1/1] ScrapeTargets.py: improve target search algorithm
  2017-07-06 10:47   ` Joshua Lock
@ 2017-07-06 15:09     ` Stephano Cetola
  2017-07-06 15:27       ` Joshua Lock
  0 siblings, 1 reply; 5+ messages in thread
From: Stephano Cetola @ 2017-07-06 15:09 UTC (permalink / raw)
  To: Joshua Lock; +Cc: yocto

On 07/06, Joshua Lock wrote:
> This still leaves us a bit brittle. What if someone adds whitespace
> around the assignment operator? Could you create a follow-on patch for
> that?
> 
> Thanks!
Actually, since the awk command just searches for self.targetsvar now
instead of ``self.targetsvar="``, it will match even if there are
spaces between the equal.

I did just realize that if the variable is NOT multi-line, e.g.
REFKIT_CI_POSTBUILD_SELFTESTS, this search will fail because of the
"next" command.

I'll puzzle over this a bit.

-S


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [yocto-autobuilder][PATCH V4 1/1] ScrapeTargets.py: improve target search algorithm
  2017-07-06 15:09     ` Stephano Cetola
@ 2017-07-06 15:27       ` Joshua Lock
  0 siblings, 0 replies; 5+ messages in thread
From: Joshua Lock @ 2017-07-06 15:27 UTC (permalink / raw)
  To: Stephano Cetola; +Cc: yocto

On Thu, 2017-07-06 at 08:09 -0700, Stephano Cetola wrote:
> On 07/06, Joshua Lock wrote:
> > This still leaves us a bit brittle. What if someone adds whitespace
> > around the assignment operator? Could you create a follow-on patch
> > for
> > that?
> > 
> > Thanks!
> 
> Actually, since the awk command just searches for self.targetsvar now
> instead of ``self.targetsvar="``, it will match even if there are
> spaces between the equal.

Context is important. It's not the awk command, it's the str.replace()

> +        targets = targets.replace('%s="' % self.targetsvar, '')

we're going replace 'SOMEVARIABLE="' with '', but what if we get
'SOMEVARIABLE = "' ?

> I did just realize that if the variable is NOT multi-line, e.g.
> REFKIT_CI_POSTBUILD_SELFTESTS, this search will fail because of the
> "next" command.

Ah, yes. That could cause some surprises.

> I'll puzzle over this a bit.

Thanks!

Joshua


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-07-06 15:28 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-07-05 21:27 [yocto-autobuilder][PATCH V4 0/1] better matching for refkit ci Stephano Cetola
2017-07-05 21:27 ` [yocto-autobuilder][PATCH V4 1/1] ScrapeTargets.py: improve target search algorithm Stephano Cetola
2017-07-06 10:47   ` Joshua Lock
2017-07-06 15:09     ` Stephano Cetola
2017-07-06 15:27       ` Joshua Lock

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.