diff options
Diffstat (limited to 'bitbake/lib')
| -rw-r--r-- | bitbake/lib/bb/fetch2/git.py | 25 | ||||
| -rw-r--r-- | bitbake/lib/bb/fetch2/gitannex.py | 10 | ||||
| -rw-r--r-- | bitbake/lib/bb/fetch2/gitsm.py | 20 |
3 files changed, 33 insertions, 22 deletions
diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py index 0fcdb19df1..0c8c63ecc4 100644 --- a/bitbake/lib/bb/fetch2/git.py +++ b/bitbake/lib/bb/fetch2/git.py | |||
| @@ -656,30 +656,37 @@ class Git(FetchMethod): | |||
| 656 | # The url is local ud.clonedir, set it to upstream one | 656 | # The url is local ud.clonedir, set it to upstream one |
| 657 | runfetchcmd("%s remote set-url origin %s" % (ud.basecmd, shlex.quote(repourl)), d, workdir=dest) | 657 | runfetchcmd("%s remote set-url origin %s" % (ud.basecmd, shlex.quote(repourl)), d, workdir=dest) |
| 658 | 658 | ||
| 659 | def unpack(self, ud, destdir, d): | 659 | def destdir(self, ud, destdir, d): |
| 660 | """ unpack the downloaded src to destdir""" | ||
| 661 | |||
| 662 | subdir = ud.parm.get("subdir") | 660 | subdir = ud.parm.get("subdir") |
| 663 | subpath = ud.parm.get("subpath") | 661 | subpath = ud.parm.get("subpath") |
| 664 | readpathspec = "" | ||
| 665 | def_destsuffix = (d.getVar("BB_GIT_DEFAULT_DESTSUFFIX") or "git") + "/" | 662 | def_destsuffix = (d.getVar("BB_GIT_DEFAULT_DESTSUFFIX") or "git") + "/" |
| 666 | 663 | ||
| 667 | if subpath: | 664 | if subpath: |
| 668 | readpathspec = ":%s" % subpath | ||
| 669 | def_destsuffix = "%s/" % os.path.basename(subpath.rstrip('/')) | 665 | def_destsuffix = "%s/" % os.path.basename(subpath.rstrip('/')) |
| 670 | 666 | ||
| 671 | if subdir: | 667 | if subdir: |
| 672 | # If 'subdir' param exists, create a dir and use it as destination for unpack cmd | ||
| 673 | if os.path.isabs(subdir): | 668 | if os.path.isabs(subdir): |
| 674 | if not os.path.realpath(subdir).startswith(os.path.realpath(destdir)): | ||
| 675 | raise bb.fetch2.UnpackError("subdir argument isn't a subdirectory of unpack root %s" % destdir, ud.url) | ||
| 676 | destdir = subdir | 669 | destdir = subdir |
| 677 | else: | 670 | else: |
| 678 | destdir = os.path.join(destdir, subdir) | 671 | destdir = os.path.join(destdir, subdir) |
| 679 | def_destsuffix = "" | 672 | def_destsuffix = "" |
| 680 | 673 | ||
| 681 | destsuffix = ud.parm.get("destsuffix", def_destsuffix) | 674 | destsuffix = ud.parm.get("destsuffix", def_destsuffix) |
| 682 | destdir = ud.destdir = os.path.join(destdir, destsuffix) | 675 | return os.path.join(destdir, destsuffix) |
| 676 | |||
| 677 | def unpack(self, ud, destdir, d): | ||
| 678 | """ unpack the downloaded src to destdir""" | ||
| 679 | |||
| 680 | subpath = ud.parm.get("subpath") | ||
| 681 | readpathspec = "" | ||
| 682 | if subpath: | ||
| 683 | readpathspec = ":%s" % subpath | ||
| 684 | |||
| 685 | root = destdir | ||
| 686 | destdir = self.destdir(ud, root, d) | ||
| 687 | if not os.path.realpath(destdir).startswith(os.path.realpath(root)): | ||
| 688 | raise bb.fetch2.UnpackError("subdir argument isn't a subdirectory of unpack root %s" % root, ud.url) | ||
| 689 | |||
| 683 | if os.path.exists(destdir): | 690 | if os.path.exists(destdir): |
| 684 | bb.utils.prunedir(destdir) | 691 | bb.utils.prunedir(destdir) |
| 685 | if not ud.bareclone: | 692 | if not ud.bareclone: |
diff --git a/bitbake/lib/bb/fetch2/gitannex.py b/bitbake/lib/bb/fetch2/gitannex.py index 80a808d88f..dbb74e35dd 100644 --- a/bitbake/lib/bb/fetch2/gitannex.py +++ b/bitbake/lib/bb/fetch2/gitannex.py | |||
| @@ -65,13 +65,15 @@ class GitANNEX(Git): | |||
| 65 | def unpack(self, ud, destdir, d): | 65 | def unpack(self, ud, destdir, d): |
| 66 | Git.unpack(self, ud, destdir, d) | 66 | Git.unpack(self, ud, destdir, d) |
| 67 | 67 | ||
| 68 | destdir = self.destdir(ud, destdir, d) | ||
| 69 | |||
| 68 | try: | 70 | try: |
| 69 | runfetchcmd("%s annex init" % (ud.basecmd), d, workdir=ud.destdir) | 71 | runfetchcmd("%s annex init" % (ud.basecmd), d, workdir=destdir) |
| 70 | except bb.fetch.FetchError: | 72 | except bb.fetch.FetchError: |
| 71 | pass | 73 | pass |
| 72 | 74 | ||
| 73 | annex = self.uses_annex(ud, d, ud.destdir) | 75 | annex = self.uses_annex(ud, d, destdir) |
| 74 | if annex: | 76 | if annex: |
| 75 | runfetchcmd("%s annex get" % (ud.basecmd), d, workdir=ud.destdir) | 77 | runfetchcmd("%s annex get" % (ud.basecmd), d, workdir=destdir) |
| 76 | runfetchcmd("chmod u+w -R %s/.git/annex" % (ud.destdir), d, quiet=True, workdir=ud.destdir) | 78 | runfetchcmd("chmod u+w -R %s/.git/annex" % (destdir), d, quiet=True, workdir=destdir) |
| 77 | 79 | ||
diff --git a/bitbake/lib/bb/fetch2/gitsm.py b/bitbake/lib/bb/fetch2/gitsm.py index 5869e1b99b..d9ebe8d186 100644 --- a/bitbake/lib/bb/fetch2/gitsm.py +++ b/bitbake/lib/bb/fetch2/gitsm.py | |||
| @@ -205,14 +205,16 @@ class GitSM(Git): | |||
| 205 | self.call_process_submodules(ud, d, self.need_update(ud, d), download_submodule) | 205 | self.call_process_submodules(ud, d, self.need_update(ud, d), download_submodule) |
| 206 | 206 | ||
| 207 | def unpack(self, ud, destdir, d): | 207 | def unpack(self, ud, destdir, d): |
| 208 | subdestdir = self.destdir(ud, destdir, d) | ||
| 209 | |||
| 208 | def unpack_submodules(ud, url, module, modpath, workdir, d): | 210 | def unpack_submodules(ud, url, module, modpath, workdir, d): |
| 209 | url += ";bareclone=1;nobranch=1" | 211 | url += ";bareclone=1;nobranch=1" |
| 210 | 212 | ||
| 211 | # Figure out where we clone over the bare submodules... | 213 | # Figure out where we clone over the bare submodules... |
| 212 | if ud.bareclone: | 214 | if ud.bareclone: |
| 213 | repo_conf = ud.destdir | 215 | repo_conf = '' |
| 214 | else: | 216 | else: |
| 215 | repo_conf = os.path.join(ud.destdir, '.git') | 217 | repo_conf = '.git' |
| 216 | 218 | ||
| 217 | try: | 219 | try: |
| 218 | newfetch = Fetch([url], d, cache=False) | 220 | newfetch = Fetch([url], d, cache=False) |
| @@ -220,7 +222,7 @@ class GitSM(Git): | |||
| 220 | # checkout dir | 222 | # checkout dir |
| 221 | new_ud = newfetch.ud[url] | 223 | new_ud = newfetch.ud[url] |
| 222 | new_ud.modpath = modpath | 224 | new_ud.modpath = modpath |
| 223 | newfetch.unpack(root=os.path.dirname(os.path.join(repo_conf, 'modules', module))) | 225 | newfetch.unpack(root=os.path.dirname(os.path.join(subdestdir, repo_conf, 'modules', module))) |
| 224 | except Exception as e: | 226 | except Exception as e: |
| 225 | logger.error('gitsm: submodule unpack failed: %s %s' % (type(e).__name__, str(e))) | 227 | logger.error('gitsm: submodule unpack failed: %s %s' % (type(e).__name__, str(e))) |
| 226 | raise | 228 | raise |
| @@ -228,28 +230,28 @@ class GitSM(Git): | |||
| 228 | local_path = newfetch.localpath(url) | 230 | local_path = newfetch.localpath(url) |
| 229 | 231 | ||
| 230 | # Correct the submodule references to the local download version... | 232 | # Correct the submodule references to the local download version... |
| 231 | runfetchcmd("%(basecmd)s config submodule.%(module)s.url %(url)s" % {'basecmd': ud.basecmd, 'module': module, 'url' : local_path}, d, workdir=ud.destdir) | 233 | runfetchcmd("%(basecmd)s config submodule.%(module)s.url %(url)s" % {'basecmd': ud.basecmd, 'module': module, 'url' : local_path}, d, workdir=subdestdir) |
| 232 | 234 | ||
| 233 | if ud.shallow: | 235 | if ud.shallow: |
| 234 | runfetchcmd("%(basecmd)s config submodule.%(module)s.shallow true" % {'basecmd': ud.basecmd, 'module': module}, d, workdir=ud.destdir) | 236 | runfetchcmd("%(basecmd)s config submodule.%(module)s.shallow true" % {'basecmd': ud.basecmd, 'module': module}, d, workdir=subdestdir) |
| 235 | 237 | ||
| 236 | # Ensure the submodule repository is NOT set to bare, since we're checking it out... | 238 | # Ensure the submodule repository is NOT set to bare, since we're checking it out... |
| 237 | try: | 239 | try: |
| 238 | runfetchcmd("%s config core.bare false" % (ud.basecmd), d, quiet=True, workdir=os.path.join(repo_conf, 'modules', module)) | 240 | runfetchcmd("%s config core.bare false" % (ud.basecmd), d, quiet=True, workdir=os.path.join(subdestdir, repo_conf, 'modules', module)) |
| 239 | except: | 241 | except: |
| 240 | logger.error("Unable to set git config core.bare to false for %s" % os.path.join(repo_conf, 'modules', module)) | 242 | logger.error("Unable to set git config core.bare to false for %s" % os.path.join(subdestdir, repo_conf, 'modules', module)) |
| 241 | raise | 243 | raise |
| 242 | 244 | ||
| 243 | Git.unpack(self, ud, destdir, d) | 245 | Git.unpack(self, ud, destdir, d) |
| 244 | 246 | ||
| 245 | ret = self.process_submodules(ud, ud.destdir, unpack_submodules, d) | 247 | ret = self.process_submodules(ud, subdestdir, unpack_submodules, d) |
| 246 | 248 | ||
| 247 | if not ud.bareclone and ret: | 249 | if not ud.bareclone and ret: |
| 248 | cmdprefix = "" | 250 | cmdprefix = "" |
| 249 | # Avoid LFS smudging (replacing the LFS pointers with the actual content) when LFS shouldn't be used but git-lfs is installed. | 251 | # Avoid LFS smudging (replacing the LFS pointers with the actual content) when LFS shouldn't be used but git-lfs is installed. |
| 250 | if not self._need_lfs(ud): | 252 | if not self._need_lfs(ud): |
| 251 | cmdprefix = "GIT_LFS_SKIP_SMUDGE=1 " | 253 | cmdprefix = "GIT_LFS_SKIP_SMUDGE=1 " |
| 252 | runfetchcmd("%s%s submodule update --recursive --no-fetch" % (cmdprefix, ud.basecmd), d, quiet=True, workdir=ud.destdir) | 254 | runfetchcmd("%s%s submodule update --recursive --no-fetch" % (cmdprefix, ud.basecmd), d, quiet=True, workdir=subdestdir) |
| 253 | def clean(self, ud, d): | 255 | def clean(self, ud, d): |
| 254 | def clean_submodule(ud, url, module, modpath, workdir, d): | 256 | def clean_submodule(ud, url, module, modpath, workdir, d): |
| 255 | url += ";bareclone=1;nobranch=1" | 257 | url += ";bareclone=1;nobranch=1" |
