Patchwork [bitbake-devel,1/1] perforce.py: fix the perforce fetcher

login
register
mail settings
Submitter Robert Yang
Date Feb. 4, 2013, 9:27 a.m.
Message ID <9d21459877d1d94bdaff1cbe8ca4dd84f5f692fd.1359948771.git.liezhi.yang@windriver.com>
Download mbox | patch
Permalink /patch/43949/
State New
Headers show

Comments

Robert Yang - Feb. 4, 2013, 9:27 a.m.
The bb.process.run() will return one tuple, e.g:

p4file = ('strA\nStrB\nstrC\n'), then there will be an iteration on p4file:

for i in p4file:
	[snip]

The i will be 's t r A ...', this is incorrect. use:

p4file = p4file.splitlines()

will fix the problem.

[YOCTO #3619]

Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
---
 bitbake/lib/bb/fetch2/perforce.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Chris Larson - Feb. 4, 2013, 3:46 p.m.
On Mon, Feb 4, 2013 at 2:27 AM, Robert Yang <liezhi.yang@windriver.com>wrote:

> The bb.process.run() will return one tuple, e.g:
>
> p4file = ('strA\nStrB\nstrC\n'), then there will be an iteration on p4file:
>
> for i in p4file:
>         [snip]
>
> The i will be 's t r A ...', this is incorrect. use:
>
> p4file = p4file.splitlines()
>
> will fix the problem.
>
> [YOCTO #3619]
>
> Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
> ---
>  bitbake/lib/bb/fetch2/perforce.py | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/bitbake/lib/bb/fetch2/perforce.py
> b/bitbake/lib/bb/fetch2/perforce.py
> index df3a3a3..86ec9ba 100644
> --- a/bitbake/lib/bb/fetch2/perforce.py
> +++ b/bitbake/lib/bb/fetch2/perforce.py
> @@ -170,7 +170,7 @@ class Perforce(FetchMethod):
>          logger.info("Fetch " + loc)
>          logger.info("%s%s files %s", p4cmd, p4opt, depot)
>          p4file, errors = bb.process.run("%s%s files %s" % (p4cmd, p4opt,
> depot))
> -        p4file = p4file.strip()
> +        p4file = p4file.splitlines()
>

Note that splitlines doesn't chop off the trailing newlines from the
individual strings. It *probably* wont cause an issue in this case due to
how it's passed to the shell in the subsequent subprocess call, but from a
correctness standpoint, I'd suggest changing this to something like p4files
= [f.rstrip() for f in p4file.splitlines], or doing an rstrip on the
individual files in the later iteration.

Patch

diff --git a/bitbake/lib/bb/fetch2/perforce.py b/bitbake/lib/bb/fetch2/perforce.py
index df3a3a3..86ec9ba 100644
--- a/bitbake/lib/bb/fetch2/perforce.py
+++ b/bitbake/lib/bb/fetch2/perforce.py
@@ -170,7 +170,7 @@  class Perforce(FetchMethod):
         logger.info("Fetch " + loc)
         logger.info("%s%s files %s", p4cmd, p4opt, depot)
         p4file, errors = bb.process.run("%s%s files %s" % (p4cmd, p4opt, depot))
-        p4file = p4file.strip()
+        p4file = p4file.splitlines()
 
         if not p4file:
             raise FetchError("Fetch: unable to get the P4 files from %s" % depot, loc)