bitbake: fetch2: remove localcount and use AUTOINC instead
- do not use the BB_URI_LOCALCOUNT database for computing revision incremental numbers anymore - sortable_revision now generates "AUTOINC+${latest_rev}" - use one incrementing value rather than several - PV becomes 0.1+gitAUTOINC+deadbeefdecafbad_decafbaddeadbeef - remove all localcount code and simplify the fetcher - this patch addresses the following proposal: http://lists.linuxtogo.org/pipermail/bitbake-devel/2012-November/003878.html (Bitbake rev: 61cf01c5c236b4218f40cfae7c059c2b86765dbd) Signed-off-by: Constantin Musca <constantinx.musca@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
f39e75ddef
commit
d0f35207f9
|
@ -422,10 +422,18 @@ def get_srcrev(d):
|
||||||
if not format:
|
if not format:
|
||||||
raise FetchError("The SRCREV_FORMAT variable must be set when multiple SCMs are used.")
|
raise FetchError("The SRCREV_FORMAT variable must be set when multiple SCMs are used.")
|
||||||
|
|
||||||
|
autoinc = False
|
||||||
|
autoinc_templ = 'AUTOINC+'
|
||||||
for scm in scms:
|
for scm in scms:
|
||||||
ud = urldata[scm]
|
ud = urldata[scm]
|
||||||
for name in ud.names:
|
for name in ud.names:
|
||||||
rev = ud.method.sortable_revision(scm, ud, d, name)
|
rev = ud.method.sortable_revision(scm, ud, d, name)
|
||||||
|
if rev.startswith(autoinc_templ):
|
||||||
|
if not autoinc:
|
||||||
|
autoinc = True
|
||||||
|
format = "%s%s" % (autoinc_templ, format)
|
||||||
|
rev = rev[len(autoinc_templ):]
|
||||||
|
|
||||||
format = format.replace(name, rev)
|
format = format.replace(name, rev)
|
||||||
|
|
||||||
return format
|
return format
|
||||||
|
@ -1036,23 +1044,6 @@ class FetchMethod(object):
|
||||||
logger.info("URL %s could not be checked for status since no method exists.", url)
|
logger.info("URL %s could not be checked for status since no method exists.", url)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def localcount_internal_helper(ud, d, name):
|
|
||||||
"""
|
|
||||||
Return:
|
|
||||||
a) a locked localcount if specified
|
|
||||||
b) None otherwise
|
|
||||||
"""
|
|
||||||
|
|
||||||
localcount = None
|
|
||||||
if name != '':
|
|
||||||
pn = d.getVar("PN", True)
|
|
||||||
localcount = d.getVar("LOCALCOUNT_" + name, True)
|
|
||||||
if not localcount:
|
|
||||||
localcount = d.getVar("LOCALCOUNT", True)
|
|
||||||
return localcount
|
|
||||||
|
|
||||||
localcount_internal_helper = staticmethod(localcount_internal_helper)
|
|
||||||
|
|
||||||
def latest_revision(self, url, ud, d, name):
|
def latest_revision(self, url, ud, d, name):
|
||||||
"""
|
"""
|
||||||
Look in the cache for the latest revision, if not present ask the SCM.
|
Look in the cache for the latest revision, if not present ask the SCM.
|
||||||
|
@ -1075,36 +1066,8 @@ class FetchMethod(object):
|
||||||
if hasattr(self, "_sortable_revision"):
|
if hasattr(self, "_sortable_revision"):
|
||||||
return self._sortable_revision(url, ud, d)
|
return self._sortable_revision(url, ud, d)
|
||||||
|
|
||||||
localcounts = bb.persist_data.persist('BB_URI_LOCALCOUNT', d)
|
|
||||||
key = self.generate_revision_key(url, ud, d, name)
|
|
||||||
|
|
||||||
latest_rev = self._build_revision(url, ud, d, name)
|
latest_rev = self._build_revision(url, ud, d, name)
|
||||||
last_rev = localcounts.get(key + '_rev')
|
return 'AUTOINC+%s' % str(latest_rev)
|
||||||
uselocalcount = d.getVar("BB_LOCALCOUNT_OVERRIDE", True) or False
|
|
||||||
count = None
|
|
||||||
if uselocalcount:
|
|
||||||
count = FetchMethod.localcount_internal_helper(ud, d, name)
|
|
||||||
if count is None:
|
|
||||||
count = localcounts.get(key + '_count') or "0"
|
|
||||||
|
|
||||||
if last_rev == latest_rev:
|
|
||||||
return str(count + "+" + latest_rev)
|
|
||||||
|
|
||||||
buildindex_provided = hasattr(self, "_sortable_buildindex")
|
|
||||||
if buildindex_provided:
|
|
||||||
count = self._sortable_buildindex(url, ud, d, latest_rev)
|
|
||||||
|
|
||||||
if count is None:
|
|
||||||
count = "0"
|
|
||||||
elif uselocalcount or buildindex_provided:
|
|
||||||
count = str(count)
|
|
||||||
else:
|
|
||||||
count = str(int(count) + 1)
|
|
||||||
|
|
||||||
localcounts[key + '_rev'] = latest_rev
|
|
||||||
localcounts[key + '_count'] = count
|
|
||||||
|
|
||||||
return str(count + "+" + latest_rev)
|
|
||||||
|
|
||||||
def generate_revision_key(self, url, ud, d, name):
|
def generate_revision_key(self, url, ud, d, name):
|
||||||
key = self._revision_key(url, ud, d, name)
|
key = self._revision_key(url, ud, d, name)
|
||||||
|
|
|
@ -71,11 +71,8 @@ from bb.fetch2 import logger
|
||||||
class Git(FetchMethod):
|
class Git(FetchMethod):
|
||||||
"""Class to fetch a module or modules from git repositories"""
|
"""Class to fetch a module or modules from git repositories"""
|
||||||
def init(self, d):
|
def init(self, d):
|
||||||
#
|
pass
|
||||||
# Only enable _sortable revision if the key is set
|
|
||||||
#
|
|
||||||
if d.getVar("BB_GIT_CLONE_FOR_SRCREV", True):
|
|
||||||
self._sortable_buildindex = self._sortable_buildindex_disabled
|
|
||||||
def supports(self, url, ud, d):
|
def supports(self, url, ud, d):
|
||||||
"""
|
"""
|
||||||
Check to see if a given url can be fetched with git.
|
Check to see if a given url can be fetched with git.
|
||||||
|
@ -316,38 +313,6 @@ class Git(FetchMethod):
|
||||||
def _build_revision(self, url, ud, d, name):
|
def _build_revision(self, url, ud, d, name):
|
||||||
return ud.revisions[name]
|
return ud.revisions[name]
|
||||||
|
|
||||||
def _sortable_buildindex_disabled(self, url, ud, d, rev):
|
|
||||||
"""
|
|
||||||
Return a suitable buildindex for the revision specified. This is done by counting revisions
|
|
||||||
using "git rev-list" which may or may not work in different circumstances.
|
|
||||||
"""
|
|
||||||
|
|
||||||
cwd = os.getcwd()
|
|
||||||
|
|
||||||
# Check if we have the rev already
|
|
||||||
|
|
||||||
if not os.path.exists(ud.clonedir):
|
|
||||||
logger.debug(1, "GIT repository for %s does not exist in %s. \
|
|
||||||
Downloading.", url, ud.clonedir)
|
|
||||||
self.download(None, ud, d)
|
|
||||||
if not os.path.exists(ud.clonedir):
|
|
||||||
logger.error("GIT repository for %s does not exist in %s after \
|
|
||||||
download. Cannot get sortable buildnumber, using \
|
|
||||||
old value", url, ud.clonedir)
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
os.chdir(ud.clonedir)
|
|
||||||
if not self._contains_ref(rev, d):
|
|
||||||
self.download(None, ud, d)
|
|
||||||
|
|
||||||
output = runfetchcmd("%s rev-list %s -- 2> /dev/null | wc -l" % (ud.basecmd, rev), d, quiet=True)
|
|
||||||
os.chdir(cwd)
|
|
||||||
|
|
||||||
buildindex = "%s" % output.split()[0]
|
|
||||||
logger.debug(1, "GIT repository for %s in %s is returning %s revisions in rev-list before %s", url, ud.clonedir, buildindex, rev)
|
|
||||||
return buildindex
|
|
||||||
|
|
||||||
def checkstatus(self, uri, ud, d):
|
def checkstatus(self, uri, ud, d):
|
||||||
fetchcmd = "%s ls-remote %s" % (ud.basecmd, uri)
|
fetchcmd = "%s ls-remote %s" % (ud.basecmd, uri)
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in New Issue