diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-08-25 14:49:12 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-08-26 09:05:38 +0100 |
commit | 1560a4b0cbb8b7ad12623635c64ce43d962e8dce (patch) | |
tree | 1e78e359a8f93bd7fe4e3e534ea1f7fabbaaa692 /bitbake/lib/bb/fetch2/local.py | |
parent | 3cfc4e9fa92ac594a137a4b6b29ae6ca980b26d6 (diff) | |
download | poky-1560a4b0cbb8b7ad12623635c64ce43d962e8dce.tar.gz |
bitbake: fetch2: Drop globbing supprt in file:// SRC_URIs
Globbing in file:// urls is terminally broken. Currently when its used, the
file checksum code is basically bypassed. This means changes to the source
files don't change the task checksum, the task doesn't rebuild when the
inputs change and things generally break.
To make globbing work generically, we'd have to scan the file system for
all possible matches to the glob and log whether they exist or not. We can't
simply log the files which exist, we have to also know which files could
later exist and influence the choice of file so we know when to reparse.
For a simple file://xxx/*, this could be done but for bigger patterns,
it becomes much more problemtic. We already support file://xxx/ in urls.
So, lets decide we'll not support globs in file://urls. Worse case users
can put files in a directory and reference that, moving files into place
if needed.
Remove all the glob special cases (see the comments if anyone doesn't
believe this is terminally broken) and error to the user if they have
such urls.
(Bitbake rev: 0c9302d950c6f37bfcc4256b41001d63f668bdf7)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/fetch2/local.py')
-rw-r--r-- | bitbake/lib/bb/fetch2/local.py | 15 |
1 files changed, 3 insertions, 12 deletions
diff --git a/bitbake/lib/bb/fetch2/local.py b/bitbake/lib/bb/fetch2/local.py index 01d9ff9f8f..25d4557db6 100644 --- a/bitbake/lib/bb/fetch2/local.py +++ b/bitbake/lib/bb/fetch2/local.py | |||
@@ -17,7 +17,7 @@ import os | |||
17 | import urllib.request, urllib.parse, urllib.error | 17 | import urllib.request, urllib.parse, urllib.error |
18 | import bb | 18 | import bb |
19 | import bb.utils | 19 | import bb.utils |
20 | from bb.fetch2 import FetchMethod, FetchError | 20 | from bb.fetch2 import FetchMethod, FetchError, ParameterError |
21 | from bb.fetch2 import logger | 21 | from bb.fetch2 import logger |
22 | 22 | ||
23 | class Local(FetchMethod): | 23 | class Local(FetchMethod): |
@@ -33,6 +33,8 @@ class Local(FetchMethod): | |||
33 | ud.basename = os.path.basename(ud.decodedurl) | 33 | ud.basename = os.path.basename(ud.decodedurl) |
34 | ud.basepath = ud.decodedurl | 34 | ud.basepath = ud.decodedurl |
35 | ud.needdonestamp = False | 35 | ud.needdonestamp = False |
36 | if "*" in ud.decodedurl: | ||
37 | raise bb.fetch2.ParameterError("file:// urls using globbing are no longer supported. Please place the files in a directory and reference that instead.", ud.url) | ||
36 | return | 38 | return |
37 | 39 | ||
38 | def localpath(self, urldata, d): | 40 | def localpath(self, urldata, d): |
@@ -55,12 +57,6 @@ class Local(FetchMethod): | |||
55 | logger.debug(2, "Searching for %s in paths:\n %s" % (path, "\n ".join(filespath.split(":")))) | 57 | logger.debug(2, "Searching for %s in paths:\n %s" % (path, "\n ".join(filespath.split(":")))) |
56 | newpath, hist = bb.utils.which(filespath, path, history=True) | 58 | newpath, hist = bb.utils.which(filespath, path, history=True) |
57 | searched.extend(hist) | 59 | searched.extend(hist) |
58 | if (not newpath or not os.path.exists(newpath)) and path.find("*") != -1: | ||
59 | # For expressions using '*', best we can do is take the first directory in FILESPATH that exists | ||
60 | newpath, hist = bb.utils.which(filespath, ".", history=True) | ||
61 | searched.extend(hist) | ||
62 | logger.debug(2, "Searching for %s in path: %s" % (path, newpath)) | ||
63 | return searched | ||
64 | if not os.path.exists(newpath): | 60 | if not os.path.exists(newpath): |
65 | dldirfile = os.path.join(d.getVar("DL_DIR"), path) | 61 | dldirfile = os.path.join(d.getVar("DL_DIR"), path) |
66 | logger.debug(2, "Defaulting to %s for %s" % (dldirfile, path)) | 62 | logger.debug(2, "Defaulting to %s for %s" % (dldirfile, path)) |
@@ -70,8 +66,6 @@ class Local(FetchMethod): | |||
70 | return searched | 66 | return searched |
71 | 67 | ||
72 | def need_update(self, ud, d): | 68 | def need_update(self, ud, d): |
73 | if ud.url.find("*") != -1: | ||
74 | return False | ||
75 | if os.path.exists(ud.localpath): | 69 | if os.path.exists(ud.localpath): |
76 | return False | 70 | return False |
77 | return True | 71 | return True |
@@ -95,9 +89,6 @@ class Local(FetchMethod): | |||
95 | """ | 89 | """ |
96 | Check the status of the url | 90 | Check the status of the url |
97 | """ | 91 | """ |
98 | if urldata.localpath.find("*") != -1: | ||
99 | logger.info("URL %s looks like a glob and was therefore not checked.", urldata.url) | ||
100 | return True | ||
101 | if os.path.exists(urldata.localpath): | 92 | if os.path.exists(urldata.localpath): |
102 | return True | 93 | return True |
103 | return False | 94 | return False |