diff options
author | Yu Ke <ke.yu@intel.com> | 2011-01-18 22:08:09 +0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2011-01-25 12:25:46 +0000 |
commit | 84ff79413a3b56f287f42b8ca1dd2ab194337c42 (patch) | |
tree | 36711f4fdaf3c08b8f90b6cbc5ea8d4fb1d7c00b | |
parent | d8698b92ffcc2cbd29b57d3dc8e851d3d6c137f2 (diff) | |
download | openembedded-core-84ff79413a3b56f287f42b8ca1dd2ab194337c42.tar.gz openembedded-core-84ff79413a3b56f287f42b8ca1dd2ab194337c42.tar.bz2 openembedded-core-84ff79413a3b56f287f42b8ca1dd2ab194337c42.zip |
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)
Signed-off-by: Yu Ke <ke.yu@intel.com>
-rw-r--r-- | bitbake/lib/bb/fetch2/__init__.py | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py index c09917dcca..e7752ee336 100644 --- a/bitbake/lib/bb/fetch2/__init__.py +++ b/bitbake/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) |