diff options
| -rw-r--r-- | bitbake/lib/bb/fetch2/git.py | 27 | ||||
| -rw-r--r-- | bitbake/lib/bb/tests/fetch.py | 4 |
2 files changed, 21 insertions, 10 deletions
diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py index e8ddf2c761..51b616bad7 100644 --- a/bitbake/lib/bb/fetch2/git.py +++ b/bitbake/lib/bb/fetch2/git.py | |||
| @@ -516,13 +516,24 @@ class Git(FetchMethod): | |||
| 516 | def unpack(self, ud, destdir, d): | 516 | def unpack(self, ud, destdir, d): |
| 517 | """ unpack the downloaded src to destdir""" | 517 | """ unpack the downloaded src to destdir""" |
| 518 | 518 | ||
| 519 | subdir = ud.parm.get("subpath", "") | 519 | subdir = ud.parm.get("subdir") |
| 520 | if subdir != "": | 520 | subpath = ud.parm.get("subpath") |
| 521 | readpathspec = ":%s" % subdir | 521 | readpathspec = "" |
| 522 | def_destsuffix = "%s/" % os.path.basename(subdir.rstrip('/')) | 522 | def_destsuffix = "git/" |
| 523 | else: | 523 | |
| 524 | readpathspec = "" | 524 | if subpath: |
| 525 | def_destsuffix = "git/" | 525 | readpathspec = ":%s" % subpath |
| 526 | def_destsuffix = "%s/" % os.path.basename(subpath.rstrip('/')) | ||
| 527 | |||
| 528 | if subdir: | ||
| 529 | # If 'subdir' param exists, create a dir and use it as destination for unpack cmd | ||
| 530 | if os.path.isabs(subdir): | ||
| 531 | if not os.path.realpath(subdir).startswith(os.path.realpath(destdir)): | ||
| 532 | raise bb.fetch2.UnpackError("subdir argument isn't a subdirectory of unpack root %s" % destdir, ud.url) | ||
| 533 | destdir = subdir | ||
| 534 | else: | ||
| 535 | destdir = os.path.join(destdir, subdir) | ||
| 536 | def_destsuffix = "" | ||
| 526 | 537 | ||
| 527 | destsuffix = ud.parm.get("destsuffix", def_destsuffix) | 538 | destsuffix = ud.parm.get("destsuffix", def_destsuffix) |
| 528 | destdir = ud.destdir = os.path.join(destdir, destsuffix) | 539 | destdir = ud.destdir = os.path.join(destdir, destsuffix) |
| @@ -569,7 +580,7 @@ class Git(FetchMethod): | |||
| 569 | bb.note("Repository %s has LFS content but it is not being fetched" % (repourl)) | 580 | bb.note("Repository %s has LFS content but it is not being fetched" % (repourl)) |
| 570 | 581 | ||
| 571 | if not ud.nocheckout: | 582 | if not ud.nocheckout: |
| 572 | if subdir != "": | 583 | if subpath: |
| 573 | runfetchcmd("%s read-tree %s%s" % (ud.basecmd, ud.revisions[ud.names[0]], readpathspec), d, | 584 | runfetchcmd("%s read-tree %s%s" % (ud.basecmd, ud.revisions[ud.names[0]], readpathspec), d, |
| 574 | workdir=destdir) | 585 | workdir=destdir) |
| 575 | runfetchcmd("%s checkout-index -q -f -a" % ud.basecmd, d, workdir=destdir) | 586 | runfetchcmd("%s checkout-index -q -f -a" % ud.basecmd, d, workdir=destdir) |
diff --git a/bitbake/lib/bb/tests/fetch.py b/bitbake/lib/bb/tests/fetch.py index a008e7cc5b..e1638bc478 100644 --- a/bitbake/lib/bb/tests/fetch.py +++ b/bitbake/lib/bb/tests/fetch.py | |||
| @@ -2157,7 +2157,7 @@ class GitLfsTest(FetcherTest): | |||
| 2157 | def test_lfs_enabled(self): | 2157 | def test_lfs_enabled(self): |
| 2158 | import shutil | 2158 | import shutil |
| 2159 | 2159 | ||
| 2160 | uri = 'git://%s;protocol=file;subdir=${S};lfs=1' % self.srcdir | 2160 | uri = 'git://%s;protocol=file;lfs=1' % self.srcdir |
| 2161 | self.d.setVar('SRC_URI', uri) | 2161 | self.d.setVar('SRC_URI', uri) |
| 2162 | 2162 | ||
| 2163 | # Careful: suppress initial attempt at downloading until | 2163 | # Careful: suppress initial attempt at downloading until |
| @@ -2182,7 +2182,7 @@ class GitLfsTest(FetcherTest): | |||
| 2182 | def test_lfs_disabled(self): | 2182 | def test_lfs_disabled(self): |
| 2183 | import shutil | 2183 | import shutil |
| 2184 | 2184 | ||
| 2185 | uri = 'git://%s;protocol=file;subdir=${S};lfs=0' % self.srcdir | 2185 | uri = 'git://%s;protocol=file;lfs=0' % self.srcdir |
| 2186 | self.d.setVar('SRC_URI', uri) | 2186 | self.d.setVar('SRC_URI', uri) |
| 2187 | 2187 | ||
| 2188 | # In contrast to test_lfs_enabled(), allow the implicit download | 2188 | # In contrast to test_lfs_enabled(), allow the implicit download |
