diff options
Diffstat (limited to 'bitbake/lib')
| -rw-r--r-- | bitbake/lib/bb/fetch2/__init__.py | 62 |
1 files changed, 38 insertions, 24 deletions
diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py index ee3476bcc8..9a4acc2ede 100644 --- a/bitbake/lib/bb/fetch2/__init__.py +++ b/bitbake/lib/bb/fetch2/__init__.py | |||
| @@ -628,6 +628,7 @@ class FetchMethod(object): | |||
| 628 | 628 | ||
| 629 | def unpack(self, urldata, rootdir, data): | 629 | def unpack(self, urldata, rootdir, data): |
| 630 | import subprocess | 630 | import subprocess |
| 631 | iterate = False | ||
| 631 | file = urldata.localpath | 632 | file = urldata.localpath |
| 632 | dots = file.split(".") | 633 | dots = file.split(".") |
| 633 | if dots[-1] in ['gz', 'bz2', 'Z']: | 634 | if dots[-1] in ['gz', 'bz2', 'Z']: |
| @@ -635,6 +636,7 @@ class FetchMethod(object): | |||
| 635 | else: | 636 | else: |
| 636 | efile = file | 637 | efile = file |
| 637 | cmd = None | 638 | cmd = None |
| 639 | |||
| 638 | if file.endswith('.tar'): | 640 | if file.endswith('.tar'): |
| 639 | cmd = 'tar x --no-same-owner -f %s' % file | 641 | cmd = 'tar x --no-same-owner -f %s' % file |
| 640 | elif file.endswith('.tgz') or file.endswith('.tar.gz') or file.endswith('.tar.Z'): | 642 | elif file.endswith('.tgz') or file.endswith('.tar.gz') or file.endswith('.tar.Z'): |
| @@ -654,36 +656,43 @@ class FetchMethod(object): | |||
| 654 | if 'dos' in urldata.parm: | 656 | if 'dos' in urldata.parm: |
| 655 | cmd = '%s -a' % cmd | 657 | cmd = '%s -a' % cmd |
| 656 | cmd = "%s '%s'" % (cmd, file) | 658 | cmd = "%s '%s'" % (cmd, file) |
| 657 | elif os.path.isdir(file): | 659 | elif file.endswith('.src.rpm') or file.endswith('.srpm'): |
| 658 | filesdir = os.path.realpath(bb.data.getVar("FILESDIR", data, True)) | 660 | if 'unpack' in urldata.parm: |
| 659 | destdir = "." | 661 | unpack_file = ("%s" % urldata.parm['unpack']) |
| 660 | if file[0:len(filesdir)] == filesdir: | 662 | cmd = 'rpm2cpio.sh %s | cpio -i %s' % (file, unpack_file) |
| 661 | destdir = file[len(filesdir):file.rfind('/')] | 663 | iterate = True |
| 662 | destdir = destdir.strip('/') | 664 | iterate_file = unpack_file |
| 663 | if len(destdir) < 1: | 665 | else: |
| 664 | destdir = "." | 666 | cmd = 'rpm2cpio.sh %s | cpio -i' % (file) |
| 665 | elif not os.access("%s/%s" % (rootdir, destdir), os.F_OK): | ||
| 666 | os.makedirs("%s/%s" % (rootdir, destdir)) | ||
| 667 | cmd = 'cp -pPR %s %s/%s/' % (file, rootdir, destdir) | ||
| 668 | else: | 667 | else: |
| 669 | if not 'patch' in urldata.parm: | 668 | # If file == dest, then avoid any copies, as we already put the file into dest! |
| 670 | # The "destdir" handling was specifically done for FILESPATH | 669 | dest = os.path.join(rootdir, os.path.basename(file)) |
| 671 | # items. So, only do so for file:// entries. | 670 | if (file != dest) and not (os.path.exists(dest) and os.path.samefile(file, dest)): |
| 672 | if urldata.type == "file" and urldata.path.find("/") != -1: | 671 | if os.path.isdir(file): |
| 673 | destdir = urldata.path.rsplit("/", 1)[0] | 672 | filesdir = os.path.realpath(bb.data.getVar("FILESDIR", data, True)) |
| 674 | else: | ||
| 675 | destdir = "." | 673 | destdir = "." |
| 676 | bb.mkdirhier("%s/%s" % (rootdir, destdir)) | 674 | if file[0:len(filesdir)] == filesdir: |
| 677 | cmd = 'cp %s %s/%s/' % (file, rootdir, destdir) | 675 | destdir = file[len(filesdir):file.rfind('/')] |
| 676 | destdir = destdir.strip('/') | ||
| 677 | if len(destdir) < 1: | ||
| 678 | destdir = "." | ||
| 679 | elif not os.access("%s/%s" % (rootdir, destdir), os.F_OK): | ||
| 680 | os.makedirs("%s/%s" % (rootdir, destdir)) | ||
| 681 | cmd = 'cp -pPR %s %s/%s/' % (file, rootdir, destdir) | ||
| 682 | else: | ||
| 683 | if not 'patch' in urldata.parm: | ||
| 684 | # The "destdir" handling was specifically done for FILESPATH | ||
| 685 | # items. So, only do so for file:// entries. | ||
| 686 | if urldata.type == "file" and urldata.path.find("/") != -1: | ||
| 687 | destdir = urldata.path.rsplit("/", 1)[0] | ||
| 688 | else: | ||
| 689 | destdir = "." | ||
| 690 | bb.mkdirhier("%s/%s" % (rootdir, destdir)) | ||
| 691 | cmd = 'cp %s %s/%s/' % (file, rootdir, destdir) | ||
| 678 | 692 | ||
| 679 | if not cmd: | 693 | if not cmd: |
| 680 | return | 694 | return |
| 681 | 695 | ||
| 682 | dest = os.path.join(rootdir, os.path.basename(file)) | ||
| 683 | if os.path.exists(dest): | ||
| 684 | if os.path.samefile(file, dest): | ||
| 685 | return | ||
| 686 | |||
| 687 | # Change to subdir before executing command | 696 | # Change to subdir before executing command |
| 688 | save_cwd = os.getcwd(); | 697 | save_cwd = os.getcwd(); |
| 689 | os.chdir(rootdir) | 698 | os.chdir(rootdir) |
| @@ -701,6 +710,11 @@ class FetchMethod(object): | |||
| 701 | if ret != 0: | 710 | if ret != 0: |
| 702 | raise UnpackError("Unpack command %s failed with return value %s" % (cmd, ret), urldata.url) | 711 | raise UnpackError("Unpack command %s failed with return value %s" % (cmd, ret), urldata.url) |
| 703 | 712 | ||
| 713 | if iterate is True: | ||
| 714 | iterate_urldata = urldata | ||
| 715 | iterate_urldata.localpath = "%s/%s" % (rootdir, iterate_file) | ||
| 716 | self.unpack(urldata, rootdir, data) | ||
| 717 | |||
| 704 | return | 718 | return |
| 705 | 719 | ||
| 706 | def try_premirror(self, url, urldata, d): | 720 | def try_premirror(self, url, urldata, d): |
