summaryrefslogtreecommitdiffstats
path: root/lib/bb/fetch2/__init__.py
diff options
context:
space:
mode:
authorYu Ke <ke.yu@intel.com>2011-01-18 22:08:09 +0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-02-10 23:36:40 +0000
commitd6fac93d81c822de09c660269430b1aabb5594ee (patch)
tree80556f4a85c51b0b25eb86d0eb56ba04831fd01f /lib/bb/fetch2/__init__.py
parentc7c143cde76cc17fc4830e18e21c89f66cc02af0 (diff)
downloadbitbake-d6fac93d81c822de09c660269430b1aabb5594ee.tar.gz
bb.fetch2: revise the Fetch.unpack API
change the unpack to use the urldata and rootdir parameter - urldata is the FetchData instance - rootdir is the dir to put the extracted source. the original unpack use current dir (os.getcwd) as destination dir, which is not flexible and error-prone (error will occur if caller not chdir to dest dir) (From Poky rev: 84ff79413a3b56f287f42b8ca1dd2ab194337c42) Signed-off-by: Yu Ke <ke.yu@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib/bb/fetch2/__init__.py')
-rw-r--r--lib/bb/fetch2/__init__.py33
1 files changed, 15 insertions, 18 deletions
diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py
index c09917dcc..e7752ee33 100644
--- a/lib/bb/fetch2/__init__.py
+++ b/lib/bb/fetch2/__init__.py
@@ -631,10 +631,9 @@ class Fetch(object):
"""
raise NoMethodError("Missing implementation for url")
- def unpack(file, data, url = None):
+ def unpack(self, urldata, rootdir, data):
import subprocess
- if not url:
- url = "file://%s" % file
+ file = urldata.localpath
dots = file.split(".")
if dots[-1] in ['gz', 'bz2', 'Z']:
efile = os.path.join(bb.data.getVar('WORKDIR', data, 1),os.path.basename('.'.join(dots[0:-1])))
@@ -657,8 +656,7 @@ class Fetch(object):
cmd = 'xz -dc %s > %s' % (file, efile)
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 urldata.parm:
cmd = '%s -a' % cmd
cmd = "%s '%s'" % (cmd, file)
elif os.path.isdir(file):
@@ -669,34 +667,33 @@ class Fetch(object):
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))
- cmd = 'cp -pPR %s %s/%s/' % (file, os.getcwd(), destdir)
+ elif not os.access("%s/%s" % (rootdir, destdir), os.F_OK):
+ os.makedirs("%s/%s" % (rootdir, destdir))
+ cmd = 'cp -pPR %s %s/%s/' % (file, rootdir, destdir)
else:
- (type, host, path, user, pswd, parm) = bb.decodeurl(url)
- if not 'patch' in parm:
+ if not 'patch' in urldata.parm:
# The "destdir" handling was specifically done for FILESPATH
# items. So, only do so for file:// entries.
- if type == "file" and path.find("/") != -1:
- destdir = path.rsplit("/", 1)[0]
+ if urldata.type == "file" and urldata.path.find("/") != -1:
+ destdir = urldata.path.rsplit("/", 1)[0]
else:
destdir = "."
- bb.mkdirhier("%s/%s" % (os.getcwd(), destdir))
- cmd = 'cp %s %s/%s/' % (file, os.getcwd(), destdir)
+ bb.mkdirhier("%s/%s" % (rootdir, destdir))
+ cmd = 'cp %s %s/%s/' % (file, rootdir, destdir)
if not cmd:
return True
- dest = os.path.join(os.getcwd(), os.path.basename(file))
+ dest = os.path.join(rootdir, 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']))
+ os.chdir(rootdir)
+ if 'subdir' in urldata.parm:
+ newdir = ("%s/%s" % (rootdir, urldata.parm['subdir']))
bb.mkdirhier(newdir)
os.chdir(newdir)