Devtool fails if SRCREV is set to ${AUTOREV} #kirkstone #devtool #yocto


Hello Everyone

We perform yocto build and do devtool modify for one of package it works
if we perform devtool modify for another package without resetting the previously modified package we are getting below error in modified package during parsing bb step 
PV = "5.10+git${SRCPV}"
Yocto version: Kirkstone
ERROR: /local/home/test/workspace/poky/../sources/meta-mulberry/recipes-kernel/linux/ Error executing a python function in <code>:                                                                                                                   | ETA:  --:--:--
The stack trace of python calls that resulted in this exception/failure was:
File: '<code>', lineno: 21, function: <module>
 *** 0021:__anon_145__local_home_test_workspace_poky_meta_classes_externalsrc_bbclass(d)
File: '/local/home/shibikri/mulberry_workspace/poky/meta/classes/externalsrc.bbclass', lineno: 66, function: __anon_145__local_home_test_workspace_poky_meta_classes_externalsrc_bbclass
     0062:        else:
     0063:            d.setVar('B', '${WORKDIR}/${BPN}-${PV}/')
     0065:        local_srcuri = []
 *** 0066:        fetch = bb.fetch2.Fetch((d.getVar('SRC_URI') or '').split(), d)
     0067:        for url in fetch.urls:
     0068:            url_data = fetch.ud[url]
     0069:            parm = url_data.parm
     0070:            if (url_data.type == 'file' or
File: '/local/home/test/workspace/poky/bitbake/lib/bb/fetch2/', lineno: 1680, function: __init__
     1677:        for url in urls:
     1678:            if url not in self.ud:
     1679:                try:
 *** 1680:                    self.ud[url] = FetchData(url, d, localonly)
     1681:                except NonLocalMethod:
     1682:                    if localonly:
     1683:                        self.ud[url] = None
     1684:                        pass
File: '/local/home/test/workspace/poky/bitbake/lib/bb/fetch2/', lineno: 1317, function: __init__
     1313:            logger.warning('Consider updating %s recipe to use "protocol" not "proto" in SRC_URI.', d.getVar('PN'))
     1314:            self.parm["protocol"] = self.parm.get("proto", None)
     1316:        if hasattr(self.method, "urldata_init"):
 *** 1317:            self.method.urldata_init(self, d)
     1319:        if "localpath" in self.parm:
     1320:            # if user sets localpath for file, use it instead.\
     1321:            self.localpath = self.parm["localpath"]
File: '/local/home/shibikri/test/workspace/poky/bitbake/lib/bb/fetch2/', lineno: 249, function: urldata_init
     0245:        write_tarballs = d.getVar("BB_GENERATE_MIRROR_TARBALLS") or "0"
     0246:        ud.write_tarballs = write_tarballs != "0" or ud.rebaseable
     0247:        ud.write_shallow_tarballs = (d.getVar("BB_GENERATE_SHALLOW_TARBALLS") or write_tarballs) != "0"
 *** 0249:        ud.setup_revisions(d)
     0251:        for name in ud.names:
     0252:            # Ensure anything that doesn't look like a sha256 checksum/revision is translated into one
     0253:            if not ud.revisions[name] or len(ud.revisions[name]) != 40  or (False in [c in "abcdef0123456789" for c in ud.revisions[name]]):
File: '/local/home/test/workspace/poky/bitbake/lib/bb/fetch2/', lineno: 1347, function: setup_revisions
     1344:    def setup_revisions(self, d):
     1345:        self.revisions = {}
     1346:        for name in self.names:
 *** 1347:            self.revisions[name] = srcrev_internal_helper(self, d, name)
     1349:        # add compatibility code for non name specified case
     1350:        if len(self.names) == 1:
     1351:            self.revision = self.revisions[self.names[0]]
File: '/local/home/test/workspace/poky/bitbake/lib/bb/fetch2/', lineno: 1212, function: srcrev_internal_helper
     1209:    if srcrev == "INVALID" or not srcrev:
     1210:        raise FetchError("Please set a valid SRCREV for url %s (possible key names are %s, or use a ;rev=X URL parameter)" % (str(attempts), ud.url), ud.url)
     1211:    if srcrev == "AUTOINC":
 *** 1212:        srcrev = ud.method.latest_revision(ud, d, name)
     1214:    return srcrev
     1216:def get_checksum_file_list(d):
File: '/local/home/test/workspace/poky/bitbake/lib/bb/fetch2/', lineno: 1624, function: latest_revision
     1620:        key = self.generate_revision_key(ud, d, name)
     1621:        try:
     1622:            return revs[key]
     1623:        except KeyError:
 *** 1624:            revs[key] = rev = self._latest_revision(ud, d, name)
     1625:            return rev
     1627:    def sortable_revision(self, ud, d, name):
     1628:        latest_rev = self._build_revision(ud, d, name)
File: '/local/home/test/workspace/poky/bitbake/lib/bb/fetch2/', lineno: 734, function: _latest_revision
     0730:        """
     0731:        Compute the HEAD revision for the url
     0732:        """
     0733:        if not d.getVar("__BBSEENSRCREV"):
 *** 0734:            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).")
     0736:        # Ensure we mark as not cached
     0737:        bb.fetch2.get_autorev(d)
Exception: bb.fetch2.FetchError: Fetcher failure: Recipe uses a floating tag/branch without a fixed SRCREV yet doesn't call bb.fetch2.get_srcrev() (use SRCPV in PV for OE).
ERROR: Parsing halted due to errors, see error messages above


I'm having the exact same issue when just modifying a custom linux recipie which is essntially the same as the one provided but referencing 5.15 after transposing recipies from dunfell to kirkstone. The builds without any devtool modify sources work fine but the second I am working with a devtool'd linux it produces that error. So the current best workflow seems to be to make changes in a branch on the remote repository which will require forking the kernel sources and then pointing the branch at the branch created on the fork of the repository.

In my naieve attempts to troubleshoot this I tried changing SRCREV to the same branch name I was referencing and changed the error message to the new format where it changes the raise line to the following it seemed to be using SRCREV for ud.unresolvedrev[name], that doesn't seem correct to me as if I changed the SRCREV to "5.15" (different from the git branch) it would output "5.15". Not sure if this is expected.

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[name],