bitbake: Add a --revisions-changed commandline option to indicate when floating srcrevs have changed
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
This commit is contained in:
parent
231b5f6784
commit
64b04685b6
|
@ -124,6 +124,9 @@ Default BBFILES are the .bb files in the current directory.""" )
|
||||||
parser.add_option( "-u", "--ui", help = "userinterface to use",
|
parser.add_option( "-u", "--ui", help = "userinterface to use",
|
||||||
action = "store", dest = "ui")
|
action = "store", dest = "ui")
|
||||||
|
|
||||||
|
parser.add_option( "", "--revisions-changed", help = "Set the exit code depending on whether upstream floating revisions have changed or not",
|
||||||
|
action = "store_true", dest = "revisions_changed", default = False )
|
||||||
|
|
||||||
options, args = parser.parse_args(sys.argv)
|
options, args = parser.parse_args(sys.argv)
|
||||||
|
|
||||||
configuration = BBConfiguration(options)
|
configuration = BBConfiguration(options)
|
||||||
|
|
|
@ -233,6 +233,14 @@ class CommandsAsync:
|
||||||
command.finishAsyncCommand()
|
command.finishAsyncCommand()
|
||||||
parseFiles.needcache = True
|
parseFiles.needcache = True
|
||||||
|
|
||||||
|
def compareRevisions(self, command, params):
|
||||||
|
"""
|
||||||
|
Parse the .bb files
|
||||||
|
"""
|
||||||
|
command.cooker.compareRevisions()
|
||||||
|
command.finishAsyncCommand()
|
||||||
|
compareRevisions.needcache = True
|
||||||
|
|
||||||
#
|
#
|
||||||
# Events
|
# Events
|
||||||
#
|
#
|
||||||
|
@ -251,3 +259,14 @@ class CookerCommandFailed(bb.event.Event):
|
||||||
def __init__(self, data, error):
|
def __init__(self, data, error):
|
||||||
bb.event.Event.__init__(self, data)
|
bb.event.Event.__init__(self, data)
|
||||||
self.error = error
|
self.error = error
|
||||||
|
|
||||||
|
class CookerCommandSetExitCode(bb.event.Event):
|
||||||
|
"""
|
||||||
|
Set the exit code for a cooker command
|
||||||
|
"""
|
||||||
|
def __init__(self, data, exitcode):
|
||||||
|
bb.event.Event.__init__(self, data)
|
||||||
|
self.exitcode = int(exitcode)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -147,6 +147,8 @@ class BBCooker:
|
||||||
self.commandlineAction = ["showEnvironment", self.configuration.buildfile]
|
self.commandlineAction = ["showEnvironment", self.configuration.buildfile]
|
||||||
elif self.configuration.buildfile is not None:
|
elif self.configuration.buildfile is not None:
|
||||||
self.commandlineAction = ["buildFile", self.configuration.buildfile, self.configuration.cmd]
|
self.commandlineAction = ["buildFile", self.configuration.buildfile, self.configuration.cmd]
|
||||||
|
elif self.configuration.revisions_changed:
|
||||||
|
self.commandlineAction = ["compareRevisions"]
|
||||||
elif self.configuration.show_versions:
|
elif self.configuration.show_versions:
|
||||||
self.commandlineAction = ["showVersions"]
|
self.commandlineAction = ["showVersions"]
|
||||||
elif self.configuration.parse_only:
|
elif self.configuration.parse_only:
|
||||||
|
@ -241,6 +243,10 @@ class BBCooker:
|
||||||
|
|
||||||
bb.msg.plain("%-35s %25s %25s" % (p, lateststr, prefstr))
|
bb.msg.plain("%-35s %25s %25s" % (p, lateststr, prefstr))
|
||||||
|
|
||||||
|
def compareRevisions(self):
|
||||||
|
ret = bb.fetch.fetcher_compare_revisons(self.configuration.data)
|
||||||
|
bb.event.fire(bb.command.CookerCommandSetExitCode(self.configuration.event_data, ret))
|
||||||
|
|
||||||
def showEnvironment(self, buildfile = None, pkgs_to_build = []):
|
def showEnvironment(self, buildfile = None, pkgs_to_build = []):
|
||||||
"""
|
"""
|
||||||
Show the outer or per-package environment
|
Show the outer or per-package environment
|
||||||
|
|
|
@ -91,13 +91,34 @@ def fetcher_init(d):
|
||||||
bb.msg.debug(1, bb.msg.domain.Fetcher, "Keeping SRCREV cache due to cache policy of: %s" % srcrev_policy)
|
bb.msg.debug(1, bb.msg.domain.Fetcher, "Keeping SRCREV cache due to cache policy of: %s" % srcrev_policy)
|
||||||
elif srcrev_policy == "clear":
|
elif srcrev_policy == "clear":
|
||||||
bb.msg.debug(1, bb.msg.domain.Fetcher, "Clearing SRCREV cache due to cache policy of: %s" % srcrev_policy)
|
bb.msg.debug(1, bb.msg.domain.Fetcher, "Clearing SRCREV cache due to cache policy of: %s" % srcrev_policy)
|
||||||
pd.delDomain("BB_URI_HEADREVS")
|
pd.renameDomain("BB_URI_HEADREVS", "BB_URI_HEADREVS_PREVIOUS")
|
||||||
else:
|
else:
|
||||||
bb.msg.fatal(bb.msg.domain.Fetcher, "Invalid SRCREV cache policy of: %s" % srcrev_policy)
|
bb.msg.fatal(bb.msg.domain.Fetcher, "Invalid SRCREV cache policy of: %s" % srcrev_policy)
|
||||||
# Make sure our domains exist
|
# Make sure our domains exist
|
||||||
pd.addDomain("BB_URI_HEADREVS")
|
pd.addDomain("BB_URI_HEADREVS")
|
||||||
|
pd.addDomain("BB_URI_HEADREVS_PREVIOUS")
|
||||||
pd.addDomain("BB_URI_LOCALCOUNT")
|
pd.addDomain("BB_URI_LOCALCOUNT")
|
||||||
|
|
||||||
|
def fetcher_compare_revisons(d):
|
||||||
|
"""
|
||||||
|
Compare the revisions in the persistant cache with current values and
|
||||||
|
return true/false on whether they've changed.
|
||||||
|
"""
|
||||||
|
|
||||||
|
pd = persist_data.PersistData(d)
|
||||||
|
data = pd.getKeyValues("BB_URI_HEADREVS")
|
||||||
|
data2 = pd.getKeyValues("BB_URI_HEADREVS_PREVIOUS")
|
||||||
|
|
||||||
|
changed = False
|
||||||
|
for key in data:
|
||||||
|
if key not in data2 or data2[key] != data[key]:
|
||||||
|
bb.msg.debug(1, bb.msg.domain.Fetcher, "%s changed" % key)
|
||||||
|
changed = True
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
bb.msg.debug(2, bb.msg.domain.Fetcher, "%s did not change" % key)
|
||||||
|
return False
|
||||||
|
|
||||||
# Function call order is usually:
|
# Function call order is usually:
|
||||||
# 1. init
|
# 1. init
|
||||||
# 2. go
|
# 2. go
|
||||||
|
|
|
@ -120,6 +120,9 @@ def init(server, eventHandler):
|
||||||
|
|
||||||
if event[0] == 'bb.command.CookerCommandCompleted':
|
if event[0] == 'bb.command.CookerCommandCompleted':
|
||||||
break
|
break
|
||||||
|
if event[0] == 'bb.command.CookerCommandSetExitCode':
|
||||||
|
return_value = event[1]['exitcode']
|
||||||
|
continue
|
||||||
if event[0] == 'bb.command.CookerCommandFailed':
|
if event[0] == 'bb.command.CookerCommandFailed':
|
||||||
return_value = 1
|
return_value = 1
|
||||||
print "Command execution failed: %s" % event[1]['error']
|
print "Command execution failed: %s" % event[1]['error']
|
||||||
|
|
|
@ -108,6 +108,9 @@ Default BBFILES are the .bb files in the current directory.""" )
|
||||||
parser.add_option( "-P", "--profile", help = "profile the command and print a report",
|
parser.add_option( "-P", "--profile", help = "profile the command and print a report",
|
||||||
action = "store_true", dest = "profile", default = False )
|
action = "store_true", dest = "profile", default = False )
|
||||||
|
|
||||||
|
parser.add_option( "", "--revisions-changed", help = "Set the exit code depending on whether upstream floating revisions have changed or not",
|
||||||
|
action = "store_true", dest = "revisions_changed", default = False )
|
||||||
|
|
||||||
options, args = parser.parse_args(sys.argv)
|
options, args = parser.parse_args(sys.argv)
|
||||||
|
|
||||||
configuration = BBConfiguration(options)
|
configuration = BBConfiguration(options)
|
||||||
|
|
|
@ -612,6 +612,9 @@ class BBCooker:
|
||||||
# initialise the parsing status now we know we will need deps
|
# initialise the parsing status now we know we will need deps
|
||||||
self.updateCache()
|
self.updateCache()
|
||||||
|
|
||||||
|
if self.configuration.revisions_changed:
|
||||||
|
sys.exit(bb.fetch.fetcher_compare_revisons(self.configuration.data))
|
||||||
|
|
||||||
if self.configuration.parse_only:
|
if self.configuration.parse_only:
|
||||||
bb.msg.note(1, bb.msg.domain.Collection, "Requested parsing .bb files only. Exiting.")
|
bb.msg.note(1, bb.msg.domain.Collection, "Requested parsing .bb files only. Exiting.")
|
||||||
return 0
|
return 0
|
||||||
|
|
|
@ -97,13 +97,34 @@ def fetcher_init(d):
|
||||||
bb.msg.debug(1, bb.msg.domain.Fetcher, "Keeping SRCREV cache due to cache policy of: %s" % srcrev_policy)
|
bb.msg.debug(1, bb.msg.domain.Fetcher, "Keeping SRCREV cache due to cache policy of: %s" % srcrev_policy)
|
||||||
elif srcrev_policy == "clear":
|
elif srcrev_policy == "clear":
|
||||||
bb.msg.debug(1, bb.msg.domain.Fetcher, "Clearing SRCREV cache due to cache policy of: %s" % srcrev_policy)
|
bb.msg.debug(1, bb.msg.domain.Fetcher, "Clearing SRCREV cache due to cache policy of: %s" % srcrev_policy)
|
||||||
pd.delDomain("BB_URI_HEADREVS")
|
pd.renameDomain("BB_URI_HEADREVS", "BB_URI_HEADREVS_PREVIOUS")
|
||||||
else:
|
else:
|
||||||
bb.msg.fatal(bb.msg.domain.Fetcher, "Invalid SRCREV cache policy of: %s" % srcrev_policy)
|
bb.msg.fatal(bb.msg.domain.Fetcher, "Invalid SRCREV cache policy of: %s" % srcrev_policy)
|
||||||
# Make sure our domains exist
|
# Make sure our domains exist
|
||||||
pd.addDomain("BB_URI_HEADREVS")
|
pd.addDomain("BB_URI_HEADREVS")
|
||||||
|
pd.addDomain("BB_URI_HEADREVS_PREVIOUS")
|
||||||
pd.addDomain("BB_URI_LOCALCOUNT")
|
pd.addDomain("BB_URI_LOCALCOUNT")
|
||||||
|
|
||||||
|
def fetcher_compare_revisons(d):
|
||||||
|
"""
|
||||||
|
Compare the revisions in the persistant cache with current values and
|
||||||
|
return true/false on whether they've changed.
|
||||||
|
"""
|
||||||
|
|
||||||
|
pd = persist_data.PersistData(d)
|
||||||
|
data = pd.getKeyValues("BB_URI_HEADREVS")
|
||||||
|
data2 = pd.getKeyValues("BB_URI_HEADREVS_PREVIOUS")
|
||||||
|
|
||||||
|
changed = False
|
||||||
|
for key in data:
|
||||||
|
if key not in data2 or data2[key] != data[key]:
|
||||||
|
bb.msg.debug(1, bb.msg.domain.Fetcher, "%s changed" % key)
|
||||||
|
changed = True
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
bb.msg.debug(2, bb.msg.domain.Fetcher, "%s did not change" % key)
|
||||||
|
return False
|
||||||
|
|
||||||
# Function call order is usually:
|
# Function call order is usually:
|
||||||
# 1. init
|
# 1. init
|
||||||
# 2. go
|
# 2. go
|
||||||
|
|
Loading…
Reference in New Issue