summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/fetch2
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2022-02-07 13:16:39 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2022-02-17 17:51:03 +0000
commitebfa1700f41b3411aec040144605166c35b8dd14 (patch)
tree37e9b4aba5a8c07e677bf1b982091ad835479821 /bitbake/lib/bb/fetch2
parentd09e2e05a0391ad4d718214516d92a160f89767e (diff)
downloadpoky-ebfa1700f41b3411aec040144605166c35b8dd14.tar.gz
bitbake: fetch2/cooker: Fix source revision handling with floating upstreams
Where a git url uses a tag instead of a full source revision, breakage can currently occur in builds. Issues include: * the revision being looked up in multiple tasks (fetch and unpack) * the risk a different revision may be obtained in those tasks * that some tasks may not be allowed to access the network * that a revision may not be consistent throughout a given build * rerunning a specific task may given inconsistent results To fix this, stop the workers from cleaning out the source revision store. This should only be done in the cooker itself (based on current policy). Also, where the code "sees" an upstream access, mark the recipe as not to be cached. The reparse re-triggers the upstream lookup by the server. Add a test to ensure that if get_srcrev isn't called, the user is told they're using a configuration that is known to break. (Bitbake rev: 4b5eed1626709ef3dc06b32fd55d40a2a6edd179) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/fetch2')
-rw-r--r--bitbake/lib/bb/fetch2/__init__.py1
-rw-r--r--bitbake/lib/bb/fetch2/git.py6
2 files changed, 7 insertions, 0 deletions
diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py
index 28a3e54c7f..d099cd1092 100644
--- a/bitbake/lib/bb/fetch2/__init__.py
+++ b/bitbake/lib/bb/fetch2/__init__.py
@@ -765,6 +765,7 @@ def get_srcrev(d, method_name='sortable_revision'):
765 that fetcher provides a method with the given name and the same signature as sortable_revision. 765 that fetcher provides a method with the given name and the same signature as sortable_revision.
766 """ 766 """
767 767
768 d.setVar("__BBSEENSRCREV", "1")
768 recursion = d.getVar("__BBINSRCREV") 769 recursion = d.getVar("__BBINSRCREV")
769 if recursion: 770 if recursion:
770 raise FetchError("There are recursive references in fetcher variables, likely through SRC_URI") 771 raise FetchError("There are recursive references in fetcher variables, likely through SRC_URI")
diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py
index 30da8e95b7..836ef1c49a 100644
--- a/bitbake/lib/bb/fetch2/git.py
+++ b/bitbake/lib/bb/fetch2/git.py
@@ -727,6 +727,12 @@ class Git(FetchMethod):
727 """ 727 """
728 Compute the HEAD revision for the url 728 Compute the HEAD revision for the url
729 """ 729 """
730 if not d.getVar("__BBSEENSRCREV"):
731 raise bb.fetch2.FetchError("Recipe uses a floating tag/branch without a fixed SRCREV yet doesn't call bb.fetch2.get_srcrev() (use SRCPV in PV for OE).")
732
733 # Ensure we mark as not cached
734 bb.fetch2.get_autorev(d)
735
730 output = self._lsremote(ud, d, "") 736 output = self._lsremote(ud, d, "")
731 # Tags of the form ^{} may not work, need to fallback to other form 737 # Tags of the form ^{} may not work, need to fallback to other form
732 if ud.unresolvedrev[name][:5] == "refs/" or ud.usehead: 738 if ud.unresolvedrev[name][:5] == "refs/" or ud.usehead: