@@ -153,9 +153,6 @@ class PrefixLoggerAdapter(logging.LoggerAdapter):
# can result in construction of the various loggers.
import bb.msg
-from bb import fetch2 as fetch
-sys.modules['bb.fetch'] = sys.modules['bb.fetch2']
-
# Messaging convenience functions
def plain(*args):
"""
similarity index 100%
rename from lib/bb/fetch2/README
rename to lib/bb/fetch/README
similarity index 99%
rename from lib/bb/fetch2/__init__.py
rename to lib/bb/fetch/__init__.py
@@ -543,8 +543,8 @@ def fetcher_init(d, servercontext=True):
try:
# fetcher_init is called multiple times, so make sure we only save the
# revs the first time it is called.
- if not bb.fetch2.saved_headrevs:
- bb.fetch2.saved_headrevs = _revisions_cache.get_revs()
+ if not bb.fetch.saved_headrevs:
+ bb.fetch.saved_headrevs = _revisions_cache.get_revs()
except:
pass
@@ -578,7 +578,7 @@ def fetcher_compare_revisions(d):
"""
headrevs = _revisions_cache.get_revs()
- return headrevs != bb.fetch2.saved_headrevs
+ return headrevs != bb.fetch.saved_headrevs
def mirror_from_string(data):
mirrors = (data or "").replace('\\n',' ').split()
@@ -885,7 +885,7 @@ def get_srcrev(d, method_name='sortable_revision'):
return pkgv
def localpath(url, d):
- fetcher = bb.fetch2.Fetch([url], d)
+ fetcher = bb.fetch.Fetch([url], d)
return fetcher.localpath(url)
# Need to export PATH as binary could be in metadata paths
@@ -926,7 +926,7 @@ FETCH_EXPORT_VARS = ['HOME', 'PATH',
def get_fetcher_environment(d):
newenv = {}
origenv = d.getVar("BB_ORIGENV")
- for name in bb.fetch2.FETCH_EXPORT_VARS:
+ for name in bb.fetch.FETCH_EXPORT_VARS:
value = d.getVar(name)
if not value and origenv:
value = origenv.getVar(name)
@@ -1059,7 +1059,7 @@ def build_mirroruris(origud, mirrors, ld):
newud.setup_localpath(ld)
if hasattr(ud, 'unpack_tracer'):
newud.unpack_tracer = ud.unpack_tracer
- except bb.fetch2.BBFetchException as e:
+ except bb.fetch.BBFetchException as e:
logger.debug("Mirror fetch failure for url %s (original url: %s)" % (newuri, origud.url))
logger.debug(str(e))
try:
@@ -1154,10 +1154,10 @@ def try_mirror_url(fetch, origud, ud, ld, check = False):
update_stamp(origud, ld)
return ud.localpath
- except bb.fetch2.NetworkAccess:
+ except bb.fetch.NetworkAccess:
raise
- except bb.fetch2.BBFetchException as e:
+ except bb.fetch.BBFetchException as e:
if isinstance(e, ChecksumError):
logger.warning("Mirror checksum failure for url %s (original url: %s)\nCleaning and trying again." % (ud.url, origud.url))
logger.warning(str(e))
@@ -1814,7 +1814,7 @@ class DummyUnpackTracer(object):
class Fetch(object):
def __init__(self, urls, d, cache = True, localonly = False, connection_cache = None):
if localonly and cache:
- raise Exception("bb.fetch2.Fetch.__init__: cannot set cache and localonly at same time")
+ raise Exception("bb.fetch.Fetch.__init__: cannot set cache and localonly at same time")
if not urls:
urls = d.getVar("SRC_URI").split()
@@ -1934,7 +1934,7 @@ class Fetch(object):
# fetcher still have chance to fetch from mirror
m.update_donestamp(ud, d)
- except bb.fetch2.NetworkAccess:
+ except bb.fetch.NetworkAccess:
raise
except BBFetchException as e:
similarity index 96%
rename from lib/bb/fetch2/az.py
rename to lib/bb/fetch/az.py
@@ -5,7 +5,7 @@ BitBake 'Fetch' Azure Storage implementation
# Copyright (C) 2021 Alejandro Hernandez Samaniego
#
-# Based on bb.fetch2.wget:
+# Based on bb.fetch.wget:
# Copyright (C) 2003, 2004 Chris Larson
#
# SPDX-License-Identifier: GPL-2.0-only
@@ -15,9 +15,9 @@ BitBake 'Fetch' Azure Storage implementation
import shlex
import os
import bb
-from bb.fetch2 import FetchError
-from bb.fetch2 import logger
-from bb.fetch2.wget import Wget
+from bb.fetch import FetchError
+from bb.fetch import logger
+from bb.fetch.wget import Wget
class Az(Wget):
similarity index 95%
rename from lib/bb/fetch2/clearcase.py
rename to lib/bb/fetch/clearcase.py
@@ -52,12 +52,12 @@ import os
import shlex
import shutil
import bb
-from bb.fetch2 import FetchMethod
-from bb.fetch2 import FetchError
-from bb.fetch2 import MissingParameterError
-from bb.fetch2 import ParameterError
-from bb.fetch2 import runfetchcmd
-from bb.fetch2 import logger
+from bb.fetch import FetchMethod
+from bb.fetch import FetchError
+from bb.fetch import MissingParameterError
+from bb.fetch import ParameterError
+from bb.fetch import runfetchcmd
+from bb.fetch import logger
class ClearCase(FetchMethod):
"""Class to fetch urls via 'clearcase'"""
@@ -189,7 +189,7 @@ class ClearCase(FetchMethod):
if os.path.exists(ud.viewdir):
cmd = self._build_ccase_command(ud, 'rmview');
logger.info("cleaning up [VOB=%s label=%s view=%s]", ud.vob, ud.label, ud.viewname)
- bb.fetch2.check_network_access(d, cmd, ud.url)
+ bb.fetch.check_network_access(d, cmd, ud.url)
output = runfetchcmd(cmd, d, workdir=ud.ccasedir)
logger.info("rmview output: %s", output)
@@ -215,7 +215,7 @@ class ClearCase(FetchMethod):
self._write_configspec(ud, d)
cmd = self._build_ccase_command(ud, 'mkview')
logger.info("creating view [VOB=%s label=%s view=%s]", ud.vob, ud.label, ud.viewname)
- bb.fetch2.check_network_access(d, cmd, ud.url)
+ bb.fetch.check_network_access(d, cmd, ud.url)
try:
runfetchcmd(cmd, d)
except FetchError as e:
@@ -227,7 +227,7 @@ class ClearCase(FetchMethod):
# Set configspec: Setting the configspec effectively fetches the files as defined in the configspec
cmd = self._build_ccase_command(ud, 'setcs');
logger.info("fetching data [VOB=%s label=%s view=%s]", ud.vob, ud.label, ud.viewname)
- bb.fetch2.check_network_access(d, cmd, ud.url)
+ bb.fetch.check_network_access(d, cmd, ud.url)
output = runfetchcmd(cmd, d, workdir=ud.viewdir)
logger.info("%s", output)
similarity index 97%
rename from lib/bb/fetch2/crate.py
rename to lib/bb/fetch/crate.py
@@ -26,8 +26,8 @@ import subprocess
import re
from functools import cmp_to_key
import bb
-from bb.fetch2 import logger, subprocess_setup, UnpackError, runfetchcmd
-from bb.fetch2.wget import Wget
+from bb.fetch import logger, subprocess_setup, UnpackError, runfetchcmd
+from bb.fetch.wget import Wget
class Crate(Wget):
@@ -76,7 +76,7 @@ class Crate(Wget):
# break the URL apart by /
parts = ud.url.split('/')
if len(parts) < 5:
- raise bb.fetch2.ParameterError("Invalid URL: Must be crate://HOST/NAME/VERSION", ud.url)
+ raise bb.fetch.ParameterError("Invalid URL: Must be crate://HOST/NAME/VERSION", ud.url)
# version is expected to be the last token
# but ignore possible url parameters which will be used
similarity index 92%
rename from lib/bb/fetch2/gcp.py
rename to lib/bb/fetch/gcp.py
@@ -10,7 +10,7 @@ Additionally, gsutil must also be installed.
# Copyright (C) 2023, Snap Inc.
#
-# Based in part on bb.fetch2.s3:
+# Based in part on bb.fetch.s3:
# Copyright (C) 2017 Andre McCurdy
#
# SPDX-License-Identifier: GPL-2.0-only
@@ -20,9 +20,9 @@ Additionally, gsutil must also be installed.
import os
import bb
import urllib.parse, urllib.error
-from bb.fetch2 import FetchMethod
-from bb.fetch2 import FetchError
-from bb.fetch2 import logger
+from bb.fetch import FetchMethod
+from bb.fetch import FetchError
+from bb.fetch import logger
class GCP(FetchMethod):
"""
@@ -62,7 +62,7 @@ class GCP(FetchMethod):
if self.gcp_client is None:
self.get_gcp_client()
- bb.fetch2.check_network_access(d, "blob.download_to_filename", f"gs://{ud.host}{ud.path}")
+ bb.fetch.check_network_access(d, "blob.download_to_filename", f"gs://{ud.host}{ud.path}")
# Path sometimes has leading slash, so strip it
path = ud.path.lstrip("/")
@@ -101,7 +101,7 @@ class GCP(FetchMethod):
if self.gcp_client is None:
self.get_gcp_client()
- bb.fetch2.check_network_access(d, "gcp_client.bucket(ud.host).blob(path).exists()", f"gs://{ud.host}{ud.path}")
+ bb.fetch.check_network_access(d, "gcp_client.bucket(ud.host).blob(path).exists()", f"gs://{ud.host}{ud.path}")
# Path sometimes has leading slash, so strip it
path = ud.path.lstrip("/")
similarity index 92%
rename from lib/bb/fetch2/git.py
rename to lib/bb/fetch/git.py
@@ -76,10 +76,10 @@ import urllib
import bb
import bb.progress
from contextlib import contextmanager
-from bb.fetch2 import FetchMethod
-from bb.fetch2 import runfetchcmd
-from bb.fetch2 import logger
-from bb.fetch2 import trusted_network
+from bb.fetch import FetchMethod
+from bb.fetch import runfetchcmd
+from bb.fetch import logger
+from bb.fetch import trusted_network
git_hash_re = re.compile(r'^[0-9a-f]{40,64}$')
@@ -162,7 +162,7 @@ class Git(FetchMethod):
bb.warn("URL: %s uses git protocol which is no longer supported by github. Please change to ;protocol=https in the url." % ud.url)
if not ud.proto in ('git', 'file', 'ssh', 'http', 'https', 'rsync'):
- raise bb.fetch2.ParameterError(f"Invalid protocol type: '{ud.proto}'", ud.url)
+ raise bb.fetch.ParameterError(f"Invalid protocol type: '{ud.proto}'", ud.url)
ud.nocheckout = ud.parm.get("nocheckout","0") == "1"
@@ -174,7 +174,7 @@ class Git(FetchMethod):
ud.usehead = ud.parm.get("usehead","0") == "1"
if ud.usehead:
if ud.proto != "file":
- raise bb.fetch2.ParameterError("The usehead option is only for use with local ('protocol=file') git repositories", ud.url)
+ raise bb.fetch.ParameterError("The usehead option is only for use with local ('protocol=file') git repositories", ud.url)
ud.nobranch = 1
# bareclone implies nocheckout
@@ -185,7 +185,7 @@ class Git(FetchMethod):
ud.unresolvedrev = ""
ud.branch = ud.parm.get("branch", "")
if not ud.branch and not ud.nobranch:
- raise bb.fetch2.ParameterError("The url does not set any branch parameter or set nobranch=1.", ud.url)
+ raise bb.fetch.ParameterError("The url does not set any branch parameter or set nobranch=1.", ud.url)
ud.noshared = d.getVar("BB_GIT_NOSHARED") == "1"
@@ -206,10 +206,10 @@ class Git(FetchMethod):
try:
depth_default = int(depth_default or 0)
except ValueError:
- raise bb.fetch2.FetchError("Invalid depth for BB_GIT_SHALLOW_DEPTH: %s" % depth_default)
+ raise bb.fetch.FetchError("Invalid depth for BB_GIT_SHALLOW_DEPTH: %s" % depth_default)
else:
if depth_default < 0:
- raise bb.fetch2.FetchError("Invalid depth for BB_GIT_SHALLOW_DEPTH: %s" % depth_default)
+ raise bb.fetch.FetchError("Invalid depth for BB_GIT_SHALLOW_DEPTH: %s" % depth_default)
else:
depth_default = 1
ud.shallow_depths = collections.defaultdict(lambda: depth_default)
@@ -224,10 +224,10 @@ class Git(FetchMethod):
try:
shallow_depth = int(shallow_depth or 0)
except ValueError:
- raise bb.fetch2.FetchError("Invalid depth for BB_GIT_SHALLOW_DEPTH_%s: %s" % (ud.name, shallow_depth))
+ raise bb.fetch.FetchError("Invalid depth for BB_GIT_SHALLOW_DEPTH_%s: %s" % (ud.name, shallow_depth))
else:
if shallow_depth < 0:
- raise bb.fetch2.FetchError("Invalid depth for BB_GIT_SHALLOW_DEPTH_%s: %s" % (ud.name, shallow_depth))
+ raise bb.fetch.FetchError("Invalid depth for BB_GIT_SHALLOW_DEPTH_%s: %s" % (ud.name, shallow_depth))
ud.shallow_depths[ud.name] = shallow_depth
revs = d.getVar("BB_GIT_SHALLOW_REVS_%s" % ud.name)
@@ -343,7 +343,7 @@ class Git(FetchMethod):
for rev in ud.shallow_revs:
try:
runfetchcmd(ud.basecmd + ['rev-parse', '-q', '--verify', rev], d, quiet=True, workdir=ud.clonedir)
- except bb.fetch2.FetchError:
+ except bb.fetch.FetchError:
return rev
return None
@@ -415,7 +415,7 @@ class Git(FetchMethod):
if not bb.utils.path_is_descendant(toplevel, ud.clonedir):
logger.warning("Top level directory '%s' is not a descendant of '%s'. Re-cloning", toplevel, ud.clonedir)
needs_clone = True
- except bb.fetch2.FetchError as e:
+ except bb.fetch.FetchError as e:
logger.warning("Unable to get top level for %s (not a git directory?): %s", ud.clonedir, e)
needs_clone = True
except FileNotFoundError as e:
@@ -438,7 +438,7 @@ class Git(FetchMethod):
repourl = repourl_path
clone_cmd = ud.basecmd + ['clone', '--bare', '--mirror', repourl, ud.clonedir, '--progress']
if ud.proto.lower() != 'file':
- bb.fetch2.check_network_access(d, clone_cmd, ud.url)
+ bb.fetch.check_network_access(d, clone_cmd, ud.url)
progresshandler = GitProgressHandler(d)
# Try creating a fast initial shallow clone
@@ -473,7 +473,7 @@ class Git(FetchMethod):
else:
fetch_cmd = ud.basecmd + ['fetch', '-f', '--progress', repourl, 'refs/heads/*:refs/heads/*', 'refs/tags/*:refs/tags/*']
if ud.proto.lower() != 'file':
- bb.fetch2.check_network_access(d, fetch_cmd, ud.url)
+ bb.fetch.check_network_access(d, fetch_cmd, ud.url)
progresshandler = GitProgressHandler(d)
runfetchcmd(fetch_cmd, d, log=progresshandler, workdir=ud.clonedir, extraenv={'LANG':'C'})
runfetchcmd(ud.basecmd + ['repack','-adk'], d, workdir=ud.clonedir)
@@ -486,12 +486,12 @@ class Git(FetchMethod):
raise
if not self._contains_ref(ud, d, ud.name, ud.clonedir):
- raise bb.fetch2.FetchError("Unable to find revision %s in branch %s even from upstream" % (ud.revision, ud.branch))
+ raise bb.fetch.FetchError("Unable to find revision %s in branch %s even from upstream" % (ud.revision, ud.branch))
if ud.shallow and ud.write_shallow_tarballs:
missing_rev = self.clonedir_need_shallow_revs(ud, d)
if missing_rev:
- raise bb.fetch2.FetchError("Unable to find revision %s even from upstream" % missing_rev)
+ raise bb.fetch.FetchError("Unable to find revision %s even from upstream" % missing_rev)
if self.lfs_need_update(ud, d):
self.lfs_fetch(ud, d, ud.clonedir, ud.revision)
@@ -595,7 +595,7 @@ class Git(FetchMethod):
# The --depth and --shallow-exclude can't be used together
if depth and shallow_exclude:
- raise bb.fetch2.FetchError("BB_GIT_SHALLOW_REVS is set, but BB_GIT_SHALLOW_DEPTH is not 0.")
+ raise bb.fetch.FetchError("BB_GIT_SHALLOW_REVS is set, but BB_GIT_SHALLOW_DEPTH is not 0.")
# For nobranch, we need a ref, otherwise the commits will be
# removed, and for non-nobranch, we truncate the branch to our
@@ -673,7 +673,7 @@ class Git(FetchMethod):
# If 'subdir' param exists, create a dir and use it as destination for unpack cmd
if os.path.isabs(subdir):
if not os.path.realpath(subdir).startswith(os.path.realpath(destdir)):
- raise bb.fetch2.UnpackError("subdir argument isn't a subdirectory of unpack root %s" % destdir, ud.url)
+ raise bb.fetch.UnpackError("subdir argument isn't a subdirectory of unpack root %s" % destdir, ud.url)
destdir = subdir
else:
destdir = os.path.join(destdir, subdir)
@@ -721,35 +721,35 @@ class Git(FetchMethod):
source_error.append("shallow clone not enabled")
if not source_found:
- raise bb.fetch2.UnpackError("No up to date source found: " + "; ".join(source_error), ud.url)
+ raise bb.fetch.UnpackError("No up to date source found: " + "; ".join(source_error), ud.url)
if update_mode:
if ud.shallow:
- raise bb.fetch2.UnpackError("Can't update shallow clones checkouts without network access, not supported.", ud.url)
+ raise bb.fetch.UnpackError("Can't update shallow clones checkouts without network access, not supported.", ud.url)
output = runfetchcmd(ud.basecmd + ['status', '--untracked-files=no', '--porcelain'], d, workdir=destdir, extraenv=extraenv)
if output:
- raise bb.fetch2.LocalModificationsError(destdir, ud.url, output)
+ raise bb.fetch.LocalModificationsError(destdir, ud.url, output)
# Set up remote for the download location if it doesn't exist
try:
runfetchcmd(ud.basecmd + ['remote', 'get-url', 'dldir'], d, workdir=destdir)
- except bb.fetch2.FetchError:
+ except bb.fetch.FetchError:
if ud.clonedir:
runfetchcmd(ud.basecmd + ['remote', 'add', 'dldir', 'file://' + ud.clonedir], d, workdir=destdir)
try:
runfetchcmd(ud.basecmd + ['fetch', 'dldir'], d, workdir=destdir, extraenv=extraenv)
- except bb.fetch2.FetchError as e:
- raise bb.fetch2.UnpackError("Failed to fetch from dldir remote: %s" % str(e), ud.url)
+ except bb.fetch.FetchError as e:
+ raise bb.fetch.UnpackError("Failed to fetch from dldir remote: %s" % str(e), ud.url)
try:
runfetchcmd(ud.basecmd + ['rebase', '--no-autosquash', '--no-autostash', ud.revision], d, workdir=destdir, extraenv=extraenv)
- except bb.fetch2.FetchError as e:
+ except bb.fetch.FetchError as e:
# If rebase failed, abort it
try:
runfetchcmd(ud.basecmd + ['rebase', '--abort'], d, workdir=destdir)
except Exception:
pass
- raise bb.fetch2.RebaseError(destdir, ud.url, str(e))
+ raise bb.fetch.RebaseError(destdir, ud.url, str(e))
return True
# If there is a tag parameter in the url and we also have a fixed srcrev, check the tag
@@ -763,14 +763,14 @@ class Git(FetchMethod):
output2 = runfetchcmd(ud.basecmd + ['rev-list', '-n', '1', ud.revision], d, workdir=destdir)
output2 = output2.strip()
if output != output2:
- raise bb.fetch2.FetchError("The revision the git tag '%s' resolved to didn't match the SRCREV in use (%s vs %s)" % (ud.parm['tag'], output, ud.revision), ud.url)
+ raise bb.fetch.FetchError("The revision the git tag '%s' resolved to didn't match the SRCREV in use (%s vs %s)" % (ud.parm['tag'], output, ud.revision), ud.url)
repourl = self._get_repo_url(ud)
runfetchcmd(ud.basecmd + ['remote', 'set-url', 'origin', repourl], d, workdir=destdir)
if ud.clonedir:
try:
runfetchcmd(ud.basecmd + ['remote', 'get-url', 'dldir'], d, workdir=destdir)
- except bb.fetch2.FetchError:
+ except bb.fetch.FetchError:
runfetchcmd(ud.basecmd + ['remote', 'add', 'dldir', "file://" + ud.clonedir], d, workdir=destdir)
if self._contains_lfs(ud, d, destdir):
@@ -830,7 +830,7 @@ class Git(FetchMethod):
cmd = ud.basecmd + ['branch', '--contains', git_ref_name, '--list', ud.branch]
try:
output = runfetchcmd(cmd, d, workdir=wd)
- except (bb.fetch2.FetchError):
+ except (bb.fetch.FetchError):
return False
return len(output.splitlines()) > 0
@@ -876,7 +876,7 @@ class Git(FetchMethod):
output = runfetchcmd(cmd, d, quiet=True, workdir=wd)
if len(output.splitlines()) > 0:
return True
- except (bb.fetch2.FetchError,ValueError):
+ except (bb.fetch.FetchError,ValueError):
pass
return False
@@ -885,7 +885,7 @@ class Git(FetchMethod):
Ensures that git-lfs is available, raising a FetchError if it isn't.
"""
if shutil.which("git-lfs", path=d.getVar('PATH')) is None:
- raise bb.fetch2.FetchError(
+ raise bb.fetch.FetchError(
"Repository %s has LFS content, install git-lfs on host to download (or set lfs=0 "
"to ignore it)" % self._get_repo_url(ud))
@@ -930,10 +930,10 @@ class Git(FetchMethod):
if search:
cmd.append(search)
if ud.proto.lower() != 'file':
- bb.fetch2.check_network_access(d, cmd, repourl)
+ bb.fetch.check_network_access(d, cmd, repourl)
output = runfetchcmd(cmd, d, True)
if not output:
- raise bb.fetch2.FetchError("The command %s gave empty output unexpectedly" % cmd, ud.url)
+ raise bb.fetch.FetchError("The command %s gave empty output unexpectedly" % cmd, ud.url)
finally:
d.delVar('_BB_GIT_IN_LSREMOTE')
return output
@@ -943,10 +943,10 @@ class Git(FetchMethod):
Compute the HEAD revision for the url
"""
if not d.getVar("__BBSRCREV_SEEN"):
- raise bb.fetch2.FetchError("Recipe uses a floating tag/branch '%s' for repo '%s' without a fixed SRCREV yet doesn't call bb.fetch2.get_srcrev() (use SRCPV in PV for OE)." % (ud.unresolvedrev, ud.host+ud.path))
+ raise bb.fetch.FetchError("Recipe uses a floating tag/branch '%s' for repo '%s' without a fixed SRCREV yet doesn't call bb.fetch.get_srcrev() (use SRCPV in PV for OE)." % (ud.unresolvedrev, ud.host+ud.path))
# Ensure we mark as not cached
- bb.fetch2.mark_recipe_nocache(d)
+ bb.fetch.mark_recipe_nocache(d)
output = self._lsremote(ud, d, "")
# Tags of the form ^{} may not work, need to fallback to other form
@@ -961,7 +961,7 @@ class Git(FetchMethod):
sha1, ref = l.split()
if s == ref:
return sha1
- raise bb.fetch2.FetchError("Unable to resolve '%s' in upstream git repository in git ls-remote output for %s" % \
+ raise bb.fetch.FetchError("Unable to resolve '%s' in upstream git repository in git ls-remote output for %s" % \
(ud.unresolvedrev, ud.host+ud.path))
def latest_versionstring(self, ud, d, filter_regex=None):
@@ -974,7 +974,7 @@ class Git(FetchMethod):
try:
output = self._lsremote(ud, d, "refs/tags/*")
- except (bb.fetch2.FetchError, bb.fetch2.NetworkAccess) as e:
+ except (bb.fetch.FetchError, bb.fetch.NetworkAccess) as e:
bb.note("Could not list remote: %s" % str(e))
return pupver
@@ -1031,7 +1031,7 @@ class Git(FetchMethod):
commits = None
else:
if not os.path.exists(rev_file) or not os.path.getsize(rev_file):
- commits = len(bb.fetch2.runfetchcmd(['git', 'rev-list', rev, '--'], d).splitlines())
+ commits = len(bb.fetch.runfetchcmd(['git', 'rev-list', rev, '--'], d).splitlines())
if commits:
open(rev_file, "w").write("%d\n" % commits)
else:
@@ -1045,5 +1045,5 @@ class Git(FetchMethod):
try:
self._lsremote(ud, d, "")
return True
- except bb.fetch2.FetchError:
+ except bb.fetch.FetchError:
return False
similarity index 97%
rename from lib/bb/fetch2/gitannex.py
rename to lib/bb/fetch/gitannex.py
@@ -9,8 +9,8 @@ BitBake 'Fetch' git annex implementation
#
import bb
-from bb.fetch2.git import Git
-from bb.fetch2 import runfetchcmd
+from bb.fetch.git import Git
+from bb.fetch import runfetchcmd
class GitANNEX(Git):
def supports(self, ud, d):
similarity index 97%
rename from lib/bb/fetch2/gitsm.py
rename to lib/bb/fetch/gitsm.py
@@ -22,10 +22,10 @@ import bb
import copy
import shutil
import tempfile
-from bb.fetch2.git import Git
-from bb.fetch2 import runfetchcmd
-from bb.fetch2 import logger
-from bb.fetch2 import Fetch
+from bb.fetch.git import Git
+from bb.fetch import runfetchcmd
+from bb.fetch import logger
+from bb.fetch import Fetch
class GitSM(Git):
def supports(self, ud, d):
@@ -115,7 +115,7 @@ class GitSM(Git):
proto = "file"
url = "gitsm://" + uris[module]
if url.endswith("{}{}".format(ud.host, ud.path)):
- raise bb.fetch2.FetchError("Submodule refers to the parent repository. This will cause deadlock situation in current version of Bitbake." \
+ raise bb.fetch.FetchError("Submodule refers to the parent repository. This will cause deadlock situation in current version of Bitbake." \
"Consider using git fetcher instead.")
url += ';protocol=%s' % proto
similarity index 97%
rename from lib/bb/fetch2/gomod.py
rename to lib/bb/fetch/gomod.py
@@ -67,12 +67,12 @@ import subprocess
import zipfile
import bb
-from bb.fetch2 import FetchError
-from bb.fetch2 import MissingParameterError
-from bb.fetch2 import runfetchcmd
-from bb.fetch2 import subprocess_setup
-from bb.fetch2.git import Git
-from bb.fetch2.wget import Wget
+from bb.fetch import FetchError
+from bb.fetch import MissingParameterError
+from bb.fetch import runfetchcmd
+from bb.fetch import subprocess_setup
+from bb.fetch.git import Git
+from bb.fetch.wget import Wget
def escape(path):
@@ -115,7 +115,7 @@ class GoMod(Wget):
else:
ext = '.zip'
path = escape(f"{module}/@v/{version}{ext}")
- ud.url = bb.fetch2.encodeurl(
+ ud.url = bb.fetch.encodeurl(
('https', proxy, '/' + path, None, None, None))
ud.parm['downloadfilename'] = f"{module.replace('/', '.')}@{version}{ext}"
similarity index 95%
rename from lib/bb/fetch2/hg.py
rename to lib/bb/fetch/hg.py
@@ -16,11 +16,11 @@ import os
import bb
import errno
import shlex
-from bb.fetch2 import FetchMethod
-from bb.fetch2 import FetchError
-from bb.fetch2 import MissingParameterError
-from bb.fetch2 import runfetchcmd
-from bb.fetch2 import logger
+from bb.fetch import FetchMethod
+from bb.fetch import FetchError
+from bb.fetch import MissingParameterError
+from bb.fetch import runfetchcmd
+from bb.fetch import logger
class Hg(FetchMethod):
"""Class to fetch from mercurial repositories"""
@@ -159,13 +159,13 @@ class Hg(FetchMethod):
logger.debug("Running %s", updatecmd)
try:
runfetchcmd(updatecmd, d, workdir=ud.moddir)
- except bb.fetch2.FetchError:
+ except bb.fetch.FetchError:
# Runnning pull in the repo
pullcmd = self._buildhgcommand(ud, d, "pull")
logger.info("Pulling " + ud.url)
# update sources there
logger.debug("Running %s", pullcmd)
- bb.fetch2.check_network_access(d, pullcmd, ud.url)
+ bb.fetch.check_network_access(d, pullcmd, ud.url)
runfetchcmd(pullcmd, d, workdir=ud.moddir)
try:
os.unlink(ud.fullmirror)
@@ -180,7 +180,7 @@ class Hg(FetchMethod):
# check out sources there
bb.utils.mkdirhier(ud.pkgdir)
logger.debug("Running %s", fetchcmd)
- bb.fetch2.check_network_access(d, fetchcmd, ud.url)
+ bb.fetch.check_network_access(d, fetchcmd, ud.url)
runfetchcmd(fetchcmd, d, workdir=ud.pkgdir)
# Even when we clone (fetch), we still need to update as hg's clone
@@ -203,7 +203,7 @@ class Hg(FetchMethod):
"""
Compute tip revision for the url
"""
- bb.fetch2.check_network_access(d, self._buildhgcommand(ud, d, "info"), ud.url)
+ bb.fetch.check_network_access(d, self._buildhgcommand(ud, d, "info"), ud.url)
output = runfetchcmd(self._buildhgcommand(ud, d, "info"), d)
return output.strip()
similarity index 91%
rename from lib/bb/fetch2/local.py
rename to lib/bb/fetch/local.py
@@ -17,8 +17,8 @@ import os
import urllib.request, urllib.parse, urllib.error
import bb
import bb.utils
-from bb.fetch2 import FetchMethod, FetchError, ParameterError
-from bb.fetch2 import logger
+from bb.fetch import FetchMethod, FetchError, ParameterError
+from bb.fetch import logger
class Local(FetchMethod):
def supports(self, urldata, d):
@@ -33,7 +33,7 @@ class Local(FetchMethod):
ud.basepath = ud.path
ud.needdonestamp = False
if "*" in ud.path:
- 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)
+ raise bb.fetch.ParameterError("file:// urls using globbing are no longer supported. Please place the files in a directory and reference that instead.", ud.url)
return
def localpath(self, urldata, d):
similarity index 97%
rename from lib/bb/fetch2/npm.py
rename to lib/bb/fetch/npm.py
@@ -35,15 +35,15 @@ import re
import shlex
import tempfile
import bb
-from bb.fetch2 import Fetch
-from bb.fetch2 import FetchError
-from bb.fetch2 import FetchMethod
-from bb.fetch2 import MalformedUrl
-from bb.fetch2 import MissingParameterError
-from bb.fetch2 import ParameterError
-from bb.fetch2 import URI
-from bb.fetch2 import check_network_access
-from bb.fetch2 import runfetchcmd
+from bb.fetch import Fetch
+from bb.fetch import FetchError
+from bb.fetch import FetchMethod
+from bb.fetch import MalformedUrl
+from bb.fetch import MissingParameterError
+from bb.fetch import ParameterError
+from bb.fetch import URI
+from bb.fetch import check_network_access
+from bb.fetch import runfetchcmd
from bb.utils import is_semver
# Preference order matches strength; the first one present in SRC_URI wins.
similarity index 96%
rename from lib/bb/fetch2/npmsw.py
rename to lib/bb/fetch/npmsw.py
@@ -21,15 +21,15 @@ import json
import os
import re
import bb
-from bb.fetch2 import FetchError
-from bb.fetch2 import Fetch
-from bb.fetch2 import FetchMethod
-from bb.fetch2 import ParameterError
-from bb.fetch2 import runfetchcmd
-from bb.fetch2 import URI
-from bb.fetch2.npm import npm_integrity
-from bb.fetch2.npm import npm_localfile
-from bb.fetch2.npm import npm_unpack
+from bb.fetch import FetchError
+from bb.fetch import Fetch
+from bb.fetch import FetchMethod
+from bb.fetch import ParameterError
+from bb.fetch import runfetchcmd
+from bb.fetch import URI
+from bb.fetch.npm import npm_integrity
+from bb.fetch.npm import npm_localfile
+from bb.fetch.npm import npm_unpack
from bb.utils import is_semver
from bb.utils import lockfile
from bb.utils import unlockfile
similarity index 96%
rename from lib/bb/fetch2/perforce.py
rename to lib/bb/fetch/perforce.py
@@ -27,10 +27,10 @@ Supported SRC_URI options are:
import os
import bb
import shlex
-from bb.fetch2 import FetchMethod
-from bb.fetch2 import FetchError
-from bb.fetch2 import logger
-from bb.fetch2 import runfetchcmd
+from bb.fetch import FetchMethod
+from bb.fetch import FetchError
+from bb.fetch import logger
+from bb.fetch import runfetchcmd
class PerforceProgressHandler (bb.progress.BasicProgressHandler):
"""
@@ -97,7 +97,7 @@ class Perforce(FetchMethod):
logger.debug('Trying to use P4CONFIG to automatically set P4PORT...')
ud.usingp4config = True
p4cmd = ud.basecmd + ['info']
- bb.fetch2.check_network_access(d, p4cmd, ud.url)
+ bb.fetch.check_network_access(d, p4cmd, ud.url)
output = runfetchcmd(p4cmd, d, True)
ud.host = None
for line in output.splitlines():
@@ -201,7 +201,7 @@ class Perforce(FetchMethod):
'p4 files' command, including trailing '#rev' file revision indicator
"""
p4cmd = self._buildp4command(ud, d, 'files')
- bb.fetch2.check_network_access(d, p4cmd, ud.url)
+ bb.fetch.check_network_access(d, p4cmd, ud.url)
p4fileslist = runfetchcmd(p4cmd, d, True)
p4fileslist = [f.rstrip() for f in p4fileslist.splitlines()]
@@ -234,7 +234,7 @@ class Perforce(FetchMethod):
for afile in filelist:
p4fetchcmd = self._buildp4command(ud, d, 'print', afile)
- bb.fetch2.check_network_access(d, p4fetchcmd, ud.url)
+ bb.fetch.check_network_access(d, p4fetchcmd, ud.url)
runfetchcmd(p4fetchcmd, d, workdir=ud.pkgdir, log=progresshandler)
runfetchcmd(['tar', '-czf', ud.localpath, 'p4'], d, cleanup=[ud.localpath], workdir=ud.pkgdir)
@@ -254,7 +254,7 @@ class Perforce(FetchMethod):
def _latest_revision(self, ud, d, name):
""" Return the latest upstream scm revision number """
p4cmd = self._buildp4command(ud, d, "changes")
- bb.fetch2.check_network_access(d, p4cmd, ud.url)
+ bb.fetch.check_network_access(d, p4cmd, ud.url)
tip = runfetchcmd(p4cmd, d, True)
if not tip:
similarity index 89%
rename from lib/bb/fetch2/repo.py
rename to lib/bb/fetch/repo.py
@@ -14,9 +14,9 @@ BitBake "Fetch" repo (git) implementation
import os
import bb
import shlex
-from bb.fetch2 import FetchMethod
-from bb.fetch2 import runfetchcmd
-from bb.fetch2 import logger
+from bb.fetch import FetchMethod
+from bb.fetch import runfetchcmd
+from bb.fetch import logger
class Repo(FetchMethod):
"""Class to fetch a module or modules from repo (git) repositories"""
@@ -63,10 +63,10 @@ class Repo(FetchMethod):
repodir = os.path.join(codir, "repo")
bb.utils.mkdirhier(repodir)
if not os.path.exists(os.path.join(repodir, ".repo")):
- bb.fetch2.check_network_access(d, "%s init -m %s -b %s -u %s://%s%s%s" % (ud.basecmd, ud.manifest, ud.branch, ud.proto, username, ud.host, ud.path), ud.url)
+ bb.fetch.check_network_access(d, "%s init -m %s -b %s -u %s://%s%s%s" % (ud.basecmd, ud.manifest, ud.branch, ud.proto, username, ud.host, ud.path), ud.url)
runfetchcmd(ud.basecmd + ['init', '-m', ud.manifest, '-b', ud.branch, '-u', '%s://%s%s%s' % (ud.proto, username, ud.host, ud.path)], d, workdir=repodir)
- bb.fetch2.check_network_access(d, ud.basecmd + ['sync'], ud.url)
+ bb.fetch.check_network_access(d, ud.basecmd + ['sync'], ud.url)
runfetchcmd(ud.basecmd + ['sync'], d, workdir=repodir)
scmdata = ud.parm.get("scmdata", "")
similarity index 93%
rename from lib/bb/fetch2/s3.py
rename to lib/bb/fetch/s3.py
@@ -8,7 +8,7 @@ The aws tool must be correctly installed and configured prior to use.
# Copyright (C) 2017, Andre McCurdy <armccurdy@gmail.com>
#
-# Based in part on bb.fetch2.wget:
+# Based in part on bb.fetch.wget:
# Copyright (C) 2003, 2004 Chris Larson
#
# SPDX-License-Identifier: GPL-2.0-only
@@ -20,9 +20,9 @@ import bb
import urllib.request, urllib.parse, urllib.error
import re
import shlex
-from bb.fetch2 import FetchMethod
-from bb.fetch2 import FetchError
-from bb.fetch2 import runfetchcmd
+from bb.fetch import FetchMethod
+from bb.fetch import FetchError
+from bb.fetch import runfetchcmd
def convertToBytes(value, unit):
value = float(value)
@@ -89,7 +89,7 @@ class S3(FetchMethod):
"""
cmd = ud.basecmd + ['cp', 's3://%s%s' % (ud.host, ud.path), ud.localpath]
- bb.fetch2.check_network_access(d, cmd, ud.url)
+ bb.fetch.check_network_access(d, cmd, ud.url)
progresshandler = S3ProgressHandler(d)
runfetchcmd(cmd, d, False, log=progresshandler)
@@ -113,7 +113,7 @@ class S3(FetchMethod):
"""
cmd = ud.basecmd + ['ls', 's3://%s%s' % (ud.host, ud.path)]
- bb.fetch2.check_network_access(d, cmd, ud.url)
+ bb.fetch.check_network_access(d, cmd, ud.url)
output = runfetchcmd(cmd, d)
# "aws s3 ls s3://mybucket/foo" will exit with success even if the file
similarity index 93%
rename from lib/bb/fetch2/sftp.py
rename to lib/bb/fetch/sftp.py
@@ -39,7 +39,7 @@ SRC_URI = "sftp://user@host.example.com/dir/path.file.txt"
# Copyright (C) 2013, Olof Johansson <olof.johansson@axis.com>
#
-# Based in part on bb.fetch2.wget:
+# Based in part on bb.fetch.wget:
# Copyright (C) 2003, 2004 Chris Larson
#
# SPDX-License-Identifier: GPL-2.0-only
@@ -49,9 +49,9 @@ SRC_URI = "sftp://user@host.example.com/dir/path.file.txt"
import os
import bb
import urllib.request, urllib.parse, urllib.error
-from bb.fetch2 import URI
-from bb.fetch2 import FetchMethod
-from bb.fetch2 import runfetchcmd
+from bb.fetch import URI
+from bb.fetch import FetchMethod
+from bb.fetch import runfetchcmd
class SFTP(FetchMethod):
"""Class to fetch urls via 'sftp'"""
@@ -67,7 +67,7 @@ class SFTP(FetchMethod):
def urldata_init(self, ud, d):
if 'protocol' in ud.parm and ud.parm['protocol'] == 'git':
- raise bb.fetch2.ParameterError(
+ raise bb.fetch.ParameterError(
"Invalid protocol - if you wish to fetch from a " +
"git repository using ssh, you need to use the " +
"git:// prefix with protocol=ssh", ud.url)
@@ -106,6 +106,6 @@ class SFTP(FetchMethod):
cmd = basecmd + [remote, lpath]
- bb.fetch2.check_network_access(d, cmd, ud.url)
+ bb.fetch.check_network_access(d, cmd, ud.url)
runfetchcmd(cmd, d)
return True
similarity index 98%
rename from lib/bb/fetch2/ssh.py
rename to lib/bb/fetch/ssh.py
@@ -31,7 +31,7 @@ IETF secsh internet draft:
#
import re, os
-from bb.fetch2 import check_network_access, FetchMethod, ParameterError, runfetchcmd
+from bb.fetch import check_network_access, FetchMethod, ParameterError, runfetchcmd
import urllib
similarity index 94%
rename from lib/bb/fetch2/svn.py
rename to lib/bb/fetch/svn.py
@@ -14,11 +14,11 @@ import os
import bb
import re
import shlex
-from bb.fetch2 import FetchMethod
-from bb.fetch2 import FetchError
-from bb.fetch2 import MissingParameterError
-from bb.fetch2 import runfetchcmd
-from bb.fetch2 import logger
+from bb.fetch import FetchMethod
+from bb.fetch import FetchError
+from bb.fetch import MissingParameterError
+from bb.fetch import runfetchcmd
+from bb.fetch import logger
class Svn(FetchMethod):
"""Class to fetch a module or modules from svn repositories"""
@@ -141,7 +141,7 @@ class Svn(FetchMethod):
except FetchError:
pass
logger.debug("Running %s", svncmd)
- bb.fetch2.check_network_access(d, svncmd, ud.url)
+ bb.fetch.check_network_access(d, svncmd, ud.url)
runfetchcmd(svncmd, d, workdir=ud.moddir, extraenv=extraenv)
else:
svncmd, extraenv = self._buildsvncommand(ud, d, "fetch")
@@ -149,7 +149,7 @@ class Svn(FetchMethod):
# check out sources there
bb.utils.mkdirhier(ud.pkgdir)
logger.debug("Running %s", svncmd)
- bb.fetch2.check_network_access(d, svncmd, ud.url)
+ bb.fetch.check_network_access(d, svncmd, ud.url)
runfetchcmd(svncmd, d, workdir=ud.pkgdir, extraenv=extraenv)
if not ("externals" in ud.parm and ud.parm["externals"] == "nowarn"):
@@ -164,7 +164,7 @@ class Svn(FetchMethod):
bb.warn("To disable this warning add ';externals=nowarn' to the url.")
else:
bb.debug(1, "svn repository has externals:\n%s" % output)
- except bb.fetch2.FetchError:
+ except bb.fetch.FetchError:
passs
scmdata = ud.parm.get("scmdata", "")
if scmdata == "keep":
@@ -199,7 +199,7 @@ class Svn(FetchMethod):
Return the latest upstream revision number
"""
cmd, extraenv = self._buildsvncommand(ud, d, "log1")
- bb.fetch2.check_network_access(d, cmd, ud.url)
+ bb.fetch.check_network_access(d, cmd, ud.url)
extraenv['LANG'] = 'C'
extraenv['LC_ALL'] = 'C'
output = runfetchcmd(cmd, d, True, extraenv=extraenv)
similarity index 98%
rename from lib/bb/fetch2/wget.py
rename to lib/bb/fetch/wget.py
@@ -23,10 +23,10 @@ import socket
import http.client
import urllib.request, urllib.parse, urllib.error
import subprocess
-from bb.fetch2 import FetchMethod
-from bb.fetch2 import FetchError
-from bb.fetch2 import logger
-from bb.fetch2 import runfetchcmd
+from bb.fetch import FetchMethod
+from bb.fetch import FetchError
+from bb.fetch import logger
+from bb.fetch import runfetchcmd
from bb._vendor.bs4 import BeautifulSoup
from bb._vendor.bs4 import SoupStrainer
@@ -94,7 +94,7 @@ class Wget(FetchMethod):
def urldata_init(self, ud, d):
if 'protocol' in ud.parm:
if ud.parm['protocol'] == 'git':
- raise bb.fetch2.ParameterError("Invalid protocol - if you wish to fetch from a git repository using http, you need to instead use the git:// prefix with protocol=http", ud.url)
+ raise bb.fetch.ParameterError("Invalid protocol - if you wish to fetch from a git repository using http, you need to instead use the git:// prefix with protocol=http", ud.url)
if 'downloadfilename' in ud.parm:
ud.basename = ud.parm['downloadfilename']
@@ -118,7 +118,7 @@ class Wget(FetchMethod):
progresshandler = WgetProgressHandler(d)
logger.debug2("Fetching %s using command '%s'" % (ud.url, command))
- bb.fetch2.check_network_access(d, command, ud.url)
+ bb.fetch.check_network_access(d, command, ud.url)
runfetchcmd(command + ['--progress=dot', '--verbose'], d, quiet, log=progresshandler, workdir=workdir)
@@ -167,7 +167,7 @@ class Wget(FetchMethod):
# Try and verify any checksum now, meaning if it isn't correct, we don't remove the
# original file, which might be a race (imagine two recipes referencing the same
# source, one with an incorrect checksum)
- bb.fetch2.verify_checksum(ud, d, localpath=localpath, fatal_nochecksum=False)
+ bb.fetch.verify_checksum(ud, d, localpath=localpath, fatal_nochecksum=False)
# Remove the ".tmp" and move the file into position atomically
# Our lock prevents multiple writers but mirroring code may grab incomplete files
@@ -177,7 +177,7 @@ class Wget(FetchMethod):
def checkstatus(self, fetch, ud, d, try_again=True):
check_certs = self.check_certs(d)
- newenv = bb.fetch2.get_fetcher_environment(d)
+ newenv = bb.fetch.get_fetcher_environment(d)
class HTTPConnectionCache(http.client.HTTPConnection):
def cache_id(self):
@@ -568,7 +568,7 @@ class Wget(FetchMethod):
try:
self._runwget(ud, d, fetchcmd, True, workdir=workdir)
fetchresult = f.read()
- except bb.fetch2.BBFetchException:
+ except bb.fetch.BBFetchException:
fetchresult = ""
return fetchresult
new file mode 100644
@@ -0,0 +1,19 @@
+#
+# Copyright (C) 2026 Agilent Technologies, Inc.
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import sys
+import warnings
+
+import bb.fetch
+
+warnings.warn(
+ "bb.fetch2 is deprecated; use bb.fetch instead",
+ DeprecationWarning,
+ stacklevel=2,
+)
+
+# Compatibility shim for code using bb.fetch2
+sys.modules[__name__] = bb.fetch