From: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
To: openembedded-devel@lists.openembedded.org
Cc: Chris Larson <chris_larson@mentor.com>
Subject: Re: [PATCH 3/4] unpack.py: add SRC_URI parameter unpack=<bool> (default: true)
Date: Tue, 11 Jan 2011 22:48:14 +0100 [thread overview]
Message-ID: <20110111214814.GH6584@mx.loc> (raw)
In-Reply-To: <4D2CBE1D.9030303@opendreambox.org>
On Tue, Jan 11, 2011 at 09:31:25PM +0100, Andreas Oberritter wrote:
>Ping.
>
>On 01/06/2011 01:48 PM, Andreas Oberritter wrote:
>> * This allows to download compressed files without extracting them
>> * Use case: gcj requires ecj.jar, which must be downloaded separately
>> and put into the gcc source directory before configure gets executed.
>>
>> Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
>> CC: Chris Larson <chris_larson@mentor.com>
>> ---
>> classes/base.bbclass | 3 +-
>> docs/usermanual/reference/var_src_uri.xml | 13 ++++-
>> lib/oe/unpack.py | 81 +++++++++++++++++------------
>> 3 files changed, 61 insertions(+), 36 deletions(-)
>>
>> diff --git a/classes/base.bbclass b/classes/base.bbclass
>> index c76b77d..25d72d4 100644
>> --- a/classes/base.bbclass
>> +++ b/classes/base.bbclass
>> @@ -190,12 +190,11 @@ def oe_unpack(d, local, urldata):
>> bb.mkdirhier(destdir)
>> else:
>> destdir = workdir
>> - dos = urldata.parm.get("dos")
>>
>> bb.note("Unpacking %s to %s/" % (base_path_out(local, d),
>> base_path_out(destdir, d)))
>> try:
>> - unpack_file(local, destdir, env={"PATH": d.getVar("PATH", True)}, dos=dos)
>> + unpack_file(local, destdir, urldata.parm, env={"PATH": d.getVar("PATH", True)})
>> except UnpackError, exc:
>> bb.fatal(str(exc))
>>
>> diff --git a/docs/usermanual/reference/var_src_uri.xml b/docs/usermanual/reference/var_src_uri.xml
>> index 706452f..521c7d5 100644
>> --- a/docs/usermanual/reference/var_src_uri.xml
>> +++ b/docs/usermanual/reference/var_src_uri.xml
>> @@ -91,7 +91,8 @@ SRC_URI[sha256sum] = "36bdb85c97b39ac604bc58cb7857ee08295242c78a12848ef8a31
>> it is unpacked into the work directory, <command>${WORKDIR}</command>. The
>> unpacker recognises several archive and compression types and for these it
>> will decompress any compressed files and extract all of the files from
>> - archives into the work directory. The supported types are:</para>
>> + archives into the work directory, unless the option <command>unpack=no</command>
>> + is set for the given file. The supported types are:</para>
>>
>> <variablelist>
>> <varlistentry>
>> @@ -192,6 +193,16 @@ SRC_URI[sha256sum] = "36bdb85c97b39ac604bc58cb7857ee08295242c78a12848ef8a31
>> md5sum option provided.</para>
>> </listitem>
>> </varlistentry>
>> +
>> + <varlistentry>
>> + <term>unpack={yes|no}</term>
>> +
>> + <listitem>
>> + <para>If set to 'yes' (default) and the source file is an archive,
>> + then the archive will be decompressed and unpacked into the ${WORKDIR}.
>> + Otherwise, the archive will be copied into the ${WORKDIR}.</para>
mixed tab and spaces for indentation.
>> + </listitem>
>> + </varlistentry>
>> </variablelist>
>>
>> <para>Related variables:</para>
>> diff --git a/lib/oe/unpack.py b/lib/oe/unpack.py
>> index e4fe5d8..8e8bf36 100644
>> --- a/lib/oe/unpack.py
>> +++ b/lib/oe/unpack.py
>> @@ -47,47 +47,62 @@ def subprocess_setup():
>> # non-Python subprocesses expect.
>> signal.signal(signal.SIGPIPE, signal.SIG_DFL)
>>
>> -def unpack_file(file, destdir, dos=False, env=None):
>> +def unpack_file(file, destdir, parameters, env=None):
>> import subprocess, shutil
>>
>> + try:
>> + dos = to_boolean(parameters.get("dos"), False)
dict().get defaults to None. (None,'',u'',False) is False, so passing in
a default of False to to_boolean -- which will return False "if not
string" (and should
if not string or not isinstance(string, basestring):
return False
, as a sidenote)
is superfluous.
>> + except ValueError, exc:
I think the more modern for is to use 'as'
>> + bb.fatal("Invalid value for 'dos' parameter for %s: %s" %
>> + (filename, parameters.get("dos")))
I would have let to_boolean raise this through, but as you prefer.
>> +
>> + try:
>> + unpack = to_boolean(parameters.get("unpack"), True)
>> + except ValueError, exc:
>> + bb.fatal("Invalid value for 'unpack' parameter for %s: %s" %
>> + (filename, parameters.get("unpack")))
ditto.
>> +
>> dest = os.path.join(destdir, os.path.basename(file))
>> if os.path.exists(dest):
>> if os.path.samefile(file, dest):
>> return True
>>
>> cmd = None
>> - if file.endswith('.tar'):
>> - cmd = 'tar x --no-same-owner -f %s' % file
>> - elif file.endswith('.tgz') or file.endswith('.tar.gz') or file.endswith('.tar.Z'):
>> - cmd = 'tar xz --no-same-owner -f %s' % file
>> - elif file.endswith('.tbz') or file.endswith('.tbz2') or file.endswith('.tar.bz2'):
>> - cmd = 'bzip2 -dc %s | tar x --no-same-owner -f -' % file
>> - elif file.endswith('.gz') or file.endswith('.Z') or file.endswith('.z'):
>> - root, ext = os.path.splitext(file)
>> - cmd = 'gzip -dc %s > %s' % (file, os.path.basename(root))
>> - elif file.endswith('.bz2'):
>> - root, ext = os.path.splitext(file)
>> - cmd = 'bzip2 -dc %s > %s' % (file, os.path.basename(root))
>> - elif file.endswith('.tar.xz'):
>> - cmd = 'xz -dc %s | tar x --no-same-owner -f -' % file
>> - elif file.endswith('.xz'):
>> - root, ext = os.path.splitext(file)
>> - cmd = 'xz -dc %s > %s' % (file, os.path.basename(root))
>> - elif file.endswith('.tar.lz'):
>> - cmd = 'lzip -dc %s | tar x --no-same-owner -f -' % file
>> - elif file.endswith('.lz'):
>> - root, ext = os.path.splitext(file)
>> - cmd = 'lzip -dc %s > %s' % (file, os.path.basename(root))
>> - elif file.endswith('.zip') or file.endswith('.jar'):
>> - cmd = 'unzip -q -o'
>> - if dos:
>> - cmd = '%s -a' % cmd
>> - cmd = "%s '%s'" % (cmd, file)
>> - elif os.path.isdir(file):
>> - shutil.rmtree(dest, True)
>> - shutil.copytree(file, dest, True)
>> - else:
>> - shutil.copy2(file, dest)
>> + if unpack:
>> + if file.endswith('.tar'):
>> + cmd = 'tar x --no-same-owner -f %s' % file
>> + elif file.endswith('.tgz') or file.endswith('.tar.gz') or file.endswith('.tar.Z'):
>> + cmd = 'tar xz --no-same-owner -f %s' % file
>> + elif file.endswith('.tbz') or file.endswith('.tbz2') or file.endswith('.tar.bz2'):
>> + cmd = 'bzip2 -dc %s | tar x --no-same-owner -f -' % file
>> + elif file.endswith('.gz') or file.endswith('.Z') or file.endswith('.z'):
>> + root, ext = os.path.splitext(file)
>> + cmd = 'gzip -dc %s > %s' % (file, os.path.basename(root))
>> + elif file.endswith('.bz2'):
>> + root, ext = os.path.splitext(file)
>> + cmd = 'bzip2 -dc %s > %s' % (file, os.path.basename(root))
>> + elif file.endswith('.tar.xz'):
>> + cmd = 'xz -dc %s | tar x --no-same-owner -f -' % file
>> + elif file.endswith('.xz'):
>> + root, ext = os.path.splitext(file)
>> + cmd = 'xz -dc %s > %s' % (file, os.path.basename(root))
>> + elif file.endswith('.tar.lz'):
>> + cmd = 'lzip -dc %s | tar x --no-same-owner -f -' % file
>> + elif file.endswith('.lz'):
>> + root, ext = os.path.splitext(file)
>> + cmd = 'lzip -dc %s > %s' % (file, os.path.basename(root))
>> + elif file.endswith('.zip') or file.endswith('.jar'):
>> + cmd = 'unzip -q -o'
>> + if dos:
>> + cmd = '%s -a' % cmd
>> + cmd = "%s '%s'" % (cmd, file)
>> +
>> + if not unpack or not cmd:
>> + if os.path.isdir(file):
>> + shutil.rmtree(dest, True)
>> + shutil.copytree(file, dest, True)
>> + else:
>> + shutil.copy2(file, dest)
Don't know offhand but
- bb.utils.remove(dest, True)
or equivalent facility (or wrapper) in lib/oe?
>>
>> if not cmd:
>> return
Thanks && cheers,
next prev parent reply other threads:[~2011-01-11 21:48 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-06 12:48 [PATCH 1/4] python-wifi: add recipe for version 0.5.0 Andreas Oberritter
2011-01-06 12:48 ` [PATCH 2/4] python-wifi: remove version 0.3.1 Andreas Oberritter
2011-01-06 13:07 ` Dr. Michael Lauer
2011-01-06 14:18 ` Frans Meulenbroeks
2011-01-06 14:30 ` Martin Jansa
2011-01-06 12:48 ` [PATCH 3/4] unpack.py: add SRC_URI parameter unpack=<bool> (default: true) Andreas Oberritter
2011-01-11 20:31 ` Andreas Oberritter
2011-01-11 21:48 ` Bernhard Reutner-Fischer [this message]
2011-01-11 22:19 ` Andreas Oberritter
2011-01-12 8:23 ` Bernhard Reutner-Fischer
2011-01-06 12:48 ` [PATCH 4/4] gcc: replace unconditional SRC_URI_append with SRC_URI += Andreas Oberritter
2011-01-06 22:40 ` Khem Raj
2011-01-07 9:52 ` Paul Menzel
2011-01-07 12:02 ` Koen Kooi
2011-01-07 12:39 ` Andreas Oberritter
2011-01-06 13:06 ` [PATCH 1/4] python-wifi: add recipe for version 0.5.0 Dr. Michael Lauer
2011-01-06 14:19 ` Frans Meulenbroeks
2011-01-06 14:30 ` Martin Jansa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110111214814.GH6584@mx.loc \
--to=rep.dot.nop@gmail.com \
--cc=chris_larson@mentor.com \
--cc=openembedded-devel@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.