[oe] [PATCH] packaged-staging.bbclass: use 'os.unlink()' instead of spawning 'rm'

Tom Rini tom_rini at mentor.com
Wed Mar 17 17:05:36 UTC 2010


On Tue, 2010-03-16 at 13:23 +0100, Enrico Scholz wrote:
> Doing a '-c clean' operation on a staged package with very much files
> (e.g. glibc) took several minutes because
> 
> * every removed file was reported
> * an 'rm' instance was spawned for every file
> 
> This patch uses the native 'os.unlink()' method for removing files and
> reports only the removed root directory instead of the single files.
> 
> Signed-off-by: Enrico Scholz <enrico.scholz at sigma-chemnitz.de>

Acked-by: Tom Rini <tom_rini at mentor.com>

> ---
>  classes/packaged-staging.bbclass |   21 ++++++++++++++++-----
>  1 files changed, 16 insertions(+), 5 deletions(-)
> 
> diff --git a/classes/packaged-staging.bbclass b/classes/packaged-staging.bbclass
> index 1ede25c..5ab9eb5 100644
> --- a/classes/packaged-staging.bbclass
> +++ b/classes/packaged-staging.bbclass
> @@ -26,6 +26,14 @@ PSTAGE_NATIVEDEPENDS = "\
>  
>  BB_STAMP_WHITELIST = "${PSTAGE_NATIVEDEPENDS}"
>  
> +def _package_unlink (f):
> +    import os
> +    try:
> +	os.unlink(f)
> +	return True
> +    except:
> +	return False
> +
>  python () {
>      pstage_allowed = True
>  
> @@ -87,10 +95,10 @@ def pstage_manualclean(srcname, destvarname, d):
>  	dest = bb.data.getVar(destvarname, d, True)
>  
>  	for walkroot, dirs, files in os.walk(src):
> +		bb.note("rm %s" % walkroot)
>  		for file in files:
>  			filepath = os.path.join(walkroot, file).replace(src, dest)
> -			bb.note("rm %s" % filepath)
> -			os.system("rm %s" % filepath)
> +			_package_unlink(filepath)
>  
>  def pstage_set_pkgmanager(d):
>      path = bb.data.getVar("PATH", d, 1)
> @@ -162,6 +170,7 @@ PSTAGE_TASKS_COVERED = "fetch unpack munge patch configure qa_configure rig_loca
>  SCENEFUNCS += "packagestage_scenefunc"
>  
>  python packagestage_scenefunc () {
> +    import glob
>      if bb.data.getVar("PSTAGING_ACTIVE", d, 1) == "0":
>          return
>  
> @@ -217,7 +226,9 @@ python packagestage_scenefunc () {
>  
>          # Remove the stamps and files we added above
>          # FIXME - we should really only remove the stamps we added
> -        os.system('rm -f ' + stamp + '.*')
> +	for fname in glob.glob(stamp + '.*'):
> +	    _package_unlink(fname)
> +
>          os.system(bb.data.expand("rm -rf ${WORKDIR}/tstage", d))
>  
>          if stageok:
> @@ -251,8 +262,8 @@ python packagedstage_stampfixing_eventhandler() {
>                      # so we need to remove the autogenerated stamps.
>                      for task in taskscovered:
>                          dir = "%s.do_%s" % (e.stampPrefix[fn], task)
> -                        os.system('rm -f ' + dir)
> -                    os.system('rm -f ' + stamp)
> +			_package_unlink(dir)
> +		    _package_unlink(stamp)
>  
>      return NotHandled
>  }


-- 
Tom Rini <tom_rini at mentor.com>
Mentor Graphics Corporation




More information about the Openembedded-devel mailing list