[OE-core] [PATCH v2 1/3] devtool: second fix for running from a different directory

2015-09-23 Thread Paul Eggleton
From: Markus Lehtonen 

Do not change change current working directory permanently, but, only
for the duration of tinfoil initialization instead. The previous fix
caused very unintuitive behavior where using relative paths were solved
with respect to the builddir instead of the current working directory.
E.g. calling "devtool extract zlib ./zlib" would always create create
srctree in ${TOPDIR}/zlib, independent of the users cwd.

(From OE-Core rev: 4c7f159b0e17a0475a4a4e9dc4dd012e3d2e6a1f)

Signed-off-by: Markus Lehtonen 
Signed-off-by: Ross Burton 
Signed-off-by: Paul Eggleton 
---
 scripts/devtool|  5 +
 scripts/lib/devtool/__init__.py|  6 +-
 scripts/lib/devtool/build-image.py |  2 +-
 scripts/lib/devtool/deploy.py  |  2 +-
 scripts/lib/devtool/package.py |  2 +-
 scripts/lib/devtool/runqemu.py |  2 +-
 scripts/lib/devtool/search.py  |  2 +-
 scripts/lib/devtool/standard.py| 10 +-
 scripts/lib/devtool/upgrade.py |  2 +-
 9 files changed, 17 insertions(+), 16 deletions(-)

diff --git a/scripts/devtool b/scripts/devtool
index 87df951..e4d9db3 100755
--- a/scripts/devtool
+++ b/scripts/devtool
@@ -221,9 +221,6 @@ def main():
 if not config.read():
 return -1
 
-# We need to be in this directory or we won't be able to initialise tinfoil
-os.chdir(basepath)
-
 bitbake_subdir = config.get('General', 'bitbake_subdir', '')
 if bitbake_subdir:
 # Normally set for use within the SDK
@@ -244,7 +241,7 @@ def main():
 scriptutils.logger_setup_color(logger, global_args.color)
 
 if global_args.bbpath is None:
-tinfoil = setup_tinfoil(config_only=True)
+tinfoil = setup_tinfoil(config_only=True, basepath=basepath)
 global_args.bbpath = tinfoil.config_data.getVar('BBPATH', True)
 else:
 tinfoil = None
diff --git a/scripts/lib/devtool/__init__.py b/scripts/lib/devtool/__init__.py
index f815ef2..7b1ab11 100644
--- a/scripts/lib/devtool/__init__.py
+++ b/scripts/lib/devtool/__init__.py
@@ -96,9 +96,12 @@ def exec_fakeroot(d, cmd, **kwargs):
 newenv[splitval[0]] = splitval[1]
 return subprocess.call("%s %s" % (fakerootcmd, cmd), env=newenv, **kwargs)
 
-def setup_tinfoil(config_only=False):
+def setup_tinfoil(config_only=False, basepath=None):
 """Initialize tinfoil api from bitbake"""
 import scriptpath
+orig_cwd = os.path.abspath(os.curdir)
+if basepath:
+os.chdir(basepath)
 bitbakepath = scriptpath.add_bitbake_lib_path()
 if not bitbakepath:
 logger.error("Unable to find bitbake by searching parent directory of 
this script or PATH")
@@ -108,6 +111,7 @@ def setup_tinfoil(config_only=False):
 tinfoil = bb.tinfoil.Tinfoil()
 tinfoil.prepare(config_only)
 tinfoil.logger.setLevel(logger.getEffectiveLevel())
+os.chdir(orig_cwd)
 return tinfoil
 
 def get_recipe_file(cooker, pn):
diff --git a/scripts/lib/devtool/build-image.py 
b/scripts/lib/devtool/build-image.py
index 05c1d75..e53239d 100644
--- a/scripts/lib/devtool/build-image.py
+++ b/scripts/lib/devtool/build-image.py
@@ -59,7 +59,7 @@ def build_image(args, config, basepath, workspace):
 if os.path.isfile(appendfile):
 os.unlink(appendfile)
 
-tinfoil = setup_tinfoil()
+tinfoil = setup_tinfoil(basepath=basepath)
 rd = parse_recipe(config, tinfoil, image, True)
 if not rd:
 # Error already shown
diff --git a/scripts/lib/devtool/deploy.py b/scripts/lib/devtool/deploy.py
index 41b666f..c90c6b1 100644
--- a/scripts/lib/devtool/deploy.py
+++ b/scripts/lib/devtool/deploy.py
@@ -40,7 +40,7 @@ def deploy(args, config, basepath, workspace):
 deploy_dir = os.path.join(basepath, 'target_deploy', args.target)
 deploy_file = os.path.join(deploy_dir, args.recipename + '.list')
 
-tinfoil = setup_tinfoil()
+tinfoil = setup_tinfoil(basepath=basepath)
 try:
 rd = oe.recipeutils.parse_recipe_simple(tinfoil.cooker, 
args.recipename, tinfoil.config_data)
 except Exception as e:
diff --git a/scripts/lib/devtool/package.py b/scripts/lib/devtool/package.py
index 28ecfed..b8d8423 100644
--- a/scripts/lib/devtool/package.py
+++ b/scripts/lib/devtool/package.py
@@ -34,7 +34,7 @@ def package(args, config, basepath, workspace):
 
 image_pkgtype = config.get('Package', 'image_pkgtype', '')
 if not image_pkgtype:
-tinfoil = setup_tinfoil()
+tinfoil = setup_tinfoil(basepath=basepath)
 try:
 tinfoil.prepare(config_only=True)
 image_pkgtype = tinfoil.config_data.getVar('IMAGE_PKGTYPE', True)
diff --git a/scripts/lib/devtool/runqemu.py b/scripts/lib/devtool/runqemu.py
index e7f26ab..4d08d8c 100644
--- a/scripts/lib/devtool/runqemu.py
+++ b/scripts/lib/devtool/runqemu.py
@@ -29,7 +29,7 @@ logger = logging.getLogger('devtool')
 def runqemu(args, 

Re: [OE-core] [PATCH v2 1/3] devtool: second fix for running from a different directory

2015-09-23 Thread Christopher Larson
On Wed, Sep 23, 2015 at 3:05 AM, Paul Eggleton <
paul.eggle...@linux.intel.com> wrote:

> -def setup_tinfoil(config_only=False):
> +def setup_tinfoil(config_only=False, basepath=None):
>  """Initialize tinfoil api from bitbake"""
>  import scriptpath
> +orig_cwd = os.path.abspath(os.curdir)
> +if basepath:
> +os.chdir(basepath)
>  bitbakepath = scriptpath.add_bitbake_lib_path()
>  if not bitbakepath:
>  logger.error("Unable to find bitbake by searching parent
> directory of this script or PATH")
> @@ -108,6 +111,7 @@ def setup_tinfoil(config_only=False):
>  tinfoil = bb.tinfoil.Tinfoil()
>  tinfoil.prepare(config_only)
>  tinfoil.logger.setLevel(logger.getEffectiveLevel())
> +os.chdir(orig_cwd)
>  return tinfoil
>

Just from a correctness standpoint, this will not go back to orig_cwd if an
exception is raised. We should be using a try/finally block for things like
this.
-- 
Christopher Larson
clarson at kergoth dot com
Founder - BitBake, OpenEmbedded, OpenZaurus
Maintainer - Tslib
Senior Software Engineer, Mentor Graphics
-- 
___
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core


Re: [OE-core] [PATCH v2 1/3] devtool: second fix for running from a different directory

2015-09-23 Thread Paul Eggleton
On Wednesday 23 September 2015 08:09:37 Christopher Larson wrote:
> On Wed, Sep 23, 2015 at 3:05 AM, Paul Eggleton <
> 
> paul.eggle...@linux.intel.com> wrote:
> > -def setup_tinfoil(config_only=False):
> > 
> > +def setup_tinfoil(config_only=False, basepath=None):
> >  """Initialize tinfoil api from bitbake"""
> >  import scriptpath
> > 
> > +orig_cwd = os.path.abspath(os.curdir)
> > +if basepath:
> > +os.chdir(basepath)
> > 
> >  bitbakepath = scriptpath.add_bitbake_lib_path()
> >  
> >  if not bitbakepath:
> >  logger.error("Unable to find bitbake by searching parent
> > 
> > directory of this script or PATH")
> > 
> > @@ -108,6 +111,7 @@ def setup_tinfoil(config_only=False):
> >  tinfoil = bb.tinfoil.Tinfoil()
> >  tinfoil.prepare(config_only)
> >  tinfoil.logger.setLevel(logger.getEffectiveLevel())
> > 
> > +os.chdir(orig_cwd)
> > 
> >  return tinfoil
> 
> Just from a correctness standpoint, this will not go back to orig_cwd if an
> exception is raised. We should be using a try/finally block for things like
> this.

That is a good point yes. I can send out a v3.

Cheers,
Paul

-- 

Paul Eggleton
Intel Open Source Technology Centre
-- 
___
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core