summaryrefslogtreecommitdiff
path: root/classes
diff options
context:
space:
mode:
authorChris Larson <chris_larson@mentor.com>2010-03-17 08:05:40 -0700
committerChris Larson <chris_larson@mentor.com>2010-04-23 14:20:41 -0700
commit5c8bfd6873939024d57278343035cfab0257bdb3 (patch)
tree6c4fcea025d8f27da70cf0e06513384e4705a09c /classes
parent241a98e1771cdf4037b4534be67dcdba01e066d5 (diff)
do_unpack: shift some responsibility around, clean things up
- Move the unpacking message printing into do_unpack - Move the destination directory determination into do_unpack - Use subprocess's ability to pass in PATH and cwd rather than mangling the cmd - Use shutil.copy2/copytree for ordinary file "unpack" - Use the existing urldata from bb.fetch.init rather than re-decodeurl'ing the urls - Only display the unpack destdir to the user when debugging is enabled, as we all know they unpack into WORKDIR Signed-off-by: Chris Larson <chris_larson@mentor.com>
Diffstat (limited to 'classes')
-rw-r--r--classes/base.bbclass104
1 files changed, 42 insertions, 62 deletions
diff --git a/classes/base.bbclass b/classes/base.bbclass
index b8499b9db8..c43f2b2b35 100644
--- a/classes/base.bbclass
+++ b/classes/base.bbclass
@@ -152,92 +152,72 @@ def oe_unpack_file(file, data, url = None):
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'):
- cmd = 'gzip -dc %s > %s' % (file, efile)
+ base, ext = os.path.splitext(file)
+ cmd = 'gzip -dc %s > %s' % (file, base)
elif file.endswith('.bz2'):
- cmd = 'bzip2 -dc %s > %s' % (file, efile)
+ base, ext = os.path.splitext(file)
+ cmd = 'bzip2 -dc %s > %s' % (file, base)
elif file.endswith('.tar.xz'):
cmd = 'xz -dc %s | tar x --no-same-owner -f -' % file
elif file.endswith('.xz'):
- cmd = 'xz -dc %s > %s' % (file, efile)
+ base, ext = os.path.splitext(file)
+ cmd = 'xz -dc %s > %s' % (file, base)
elif file.endswith('.zip') or file.endswith('.jar'):
cmd = 'unzip -q -o'
- (type, host, path, user, pswd, parm) = bb.decodeurl(url)
- if 'dos' in parm:
+ if 'dos' in options:
cmd = '%s -a' % cmd
cmd = "%s '%s'" % (cmd, file)
elif os.path.isdir(file):
- destdir = "."
- filespath = bb.data.getVar("FILESPATH", data, 1).split(":")
- for fp in filespath:
- if file[0:len(fp)] == fp:
- destdir = file[len(fp):file.rfind('/')]
- destdir = destdir.strip('/')
- if len(destdir) < 1:
- destdir = "."
- elif not os.access("%s/%s" % (os.getcwd(), destdir), os.F_OK):
- os.makedirs("%s/%s" % (os.getcwd(), destdir))
- break
-
- cmd = 'cp -pPR %s %s/%s/' % (file, os.getcwd(), destdir)
+ shutil.rmtree(dest, True)
+ shutil.copytree(file, dest, True)
else:
- (type, host, path, user, pswd, parm) = bb.decodeurl(url)
- if not 'patch' in parm:
- # The "destdir" handling was specifically done for FILESPATH
- # items. So, only do so for file:// entries.
- if type == "file":
- destdir = bb.decodeurl(url)[1] or "."
- else:
- destdir = "."
- bb.mkdirhier("%s/%s" % (os.getcwd(), destdir))
- cmd = 'cp %s %s/%s/' % (file, os.getcwd(), destdir)
+ if not "patch" in options:
+ shutil.copy2(file, dest)
if not cmd:
return True
- dest = os.path.join(os.getcwd(), os.path.basename(file))
- if os.path.exists(dest):
- if os.path.samefile(file, dest):
- return True
-
- # Change to subdir before executing command
- save_cwd = os.getcwd();
- parm = bb.decodeurl(url)[5]
- if 'subdir' in parm:
- newdir = ("%s/%s" % (os.getcwd(), parm['subdir']))
- bb.mkdirhier(newdir)
- os.chdir(newdir)
-
- cmd = "PATH=\"%s\" %s" % (bb.data.getVar('PATH', data, 1), cmd)
- bb.note("Unpacking %s to %s/" % (base_path_out(file, data), base_path_out(os.getcwd(), data)))
- ret = subprocess.call(cmd, preexec_fn=subprocess_setup, shell=True)
-
- os.chdir(save_cwd)
+ ret = subprocess.call(cmd, preexec_fn=subprocess_setup, shell=True,
+ cwd=destdir, env=options.get("env"))
return ret == 0
addtask unpack after do_fetch
do_unpack[dirs] = "${WORKDIR}"
python base_do_unpack() {
- import re
+ workdir = d.getVar("WORKDIR", True)
+ urldatadict = bb.fetch.init(d.getVar("SRC_URI", True).split(), d, True)
- localdata = bb.data.createCopy(d)
- bb.data.update_data(localdata)
+ env = {
+ "PATH": d.getVar("PATH", True),
+ }
+ for url, urldata in urldatadict.iteritems():
+ if not urldata.setup:
+ urldata.setup_localpath(d)
- src_uri = bb.data.getVar('SRC_URI', localdata)
- if not src_uri:
- return
- src_uri = bb.data.expand(src_uri, localdata)
- for url in src_uri.split():
- try:
- local = bb.data.expand(bb.fetch.localpath(url, localdata), localdata)
- except bb.MalformedUrl, e:
- raise bb.build.FuncFailed('Unable to generate local path for malformed uri: %s' % e)
+ local = urldata.localpath
if not local:
raise bb.build.FuncFailed('Unable to locate local file for %s' % url)
- local = os.path.realpath(local)
- ret = oe_unpack_file(local, localdata, url)
- if not ret:
- raise bb.build.FuncFailed()
+
+ if bb.msg.debug_level['default']:
+ bb.note("Unpacking %s to %s/" % (base_path_out(local, d),
+ base_path_out(destdir)))
+ else:
+ bb.note("Unpacking %s" % base_path_out(local, d))
+
+ subdirs = []
+ if "subdir" in urldata.parm:
+ subdirs.append(urldata.parm["subdir"])
+ if urldata.type == "file":
+ if urldata.host:
+ subdirs.append(urldata.host)
+
+ if subdirs:
+ destdir = os.path.join(workdir, *subdirs)
+ bb.mkdirhier(destdir)
+ else:
+ destdir = workdir
+ oe_unpack_file(local, destdir, env=env, **urldata.parm)
}
addhandler base_eventhandler