From 64b04685b6fd029f2f70f7017bfd51d26ccb0d11 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Wed, 29 Jul 2009 14:33:14 +0100 Subject: bitbake: Add a --revisions-changed commandline option to indicate when floating srcrevs have changed Signed-off-by: Richard Purdie --- bitbake-dev/bin/bitbake | 3 +++ bitbake-dev/lib/bb/command.py | 19 +++++++++++++++++++ bitbake-dev/lib/bb/cooker.py | 6 ++++++ bitbake-dev/lib/bb/fetch/__init__.py | 23 ++++++++++++++++++++++- bitbake-dev/lib/bb/ui/knotty.py | 3 +++ 5 files changed, 53 insertions(+), 1 deletion(-) (limited to 'bitbake-dev') diff --git a/bitbake-dev/bin/bitbake b/bitbake-dev/bin/bitbake index f4cd0cb69a..d9aa910422 100755 --- a/bitbake-dev/bin/bitbake +++ b/bitbake-dev/bin/bitbake @@ -124,6 +124,9 @@ Default BBFILES are the .bb files in the current directory.""" ) parser.add_option( "-u", "--ui", help = "userinterface to use", 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) configuration = BBConfiguration(options) diff --git a/bitbake-dev/lib/bb/command.py b/bitbake-dev/lib/bb/command.py index 9226a2772f..e7c3770ffc 100644 --- a/bitbake-dev/lib/bb/command.py +++ b/bitbake-dev/lib/bb/command.py @@ -233,6 +233,14 @@ class CommandsAsync: command.finishAsyncCommand() parseFiles.needcache = True + def compareRevisions(self, command, params): + """ + Parse the .bb files + """ + command.cooker.compareRevisions() + command.finishAsyncCommand() + compareRevisions.needcache = True + # # Events # @@ -251,3 +259,14 @@ class CookerCommandFailed(bb.event.Event): def __init__(self, data, error): bb.event.Event.__init__(self, data) 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) + + + diff --git a/bitbake-dev/lib/bb/cooker.py b/bitbake-dev/lib/bb/cooker.py index bec6c3535c..b2b237b4c7 100644 --- a/bitbake-dev/lib/bb/cooker.py +++ b/bitbake-dev/lib/bb/cooker.py @@ -147,6 +147,8 @@ class BBCooker: self.commandlineAction = ["showEnvironment", self.configuration.buildfile] elif self.configuration.buildfile is not None: self.commandlineAction = ["buildFile", self.configuration.buildfile, self.configuration.cmd] + elif self.configuration.revisions_changed: + self.commandlineAction = ["compareRevisions"] elif self.configuration.show_versions: self.commandlineAction = ["showVersions"] elif self.configuration.parse_only: @@ -241,6 +243,10 @@ class BBCooker: 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 = []): """ Show the outer or per-package environment diff --git a/bitbake-dev/lib/bb/fetch/__init__.py b/bitbake-dev/lib/bb/fetch/__init__.py index 39a577b2eb..8ddcd38706 100644 --- a/bitbake-dev/lib/bb/fetch/__init__.py +++ b/bitbake-dev/lib/bb/fetch/__init__.py @@ -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) elif srcrev_policy == "clear": 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: bb.msg.fatal(bb.msg.domain.Fetcher, "Invalid SRCREV cache policy of: %s" % srcrev_policy) # Make sure our domains exist pd.addDomain("BB_URI_HEADREVS") + pd.addDomain("BB_URI_HEADREVS_PREVIOUS") 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: # 1. init # 2. go diff --git a/bitbake-dev/lib/bb/ui/knotty.py b/bitbake-dev/lib/bb/ui/knotty.py index a334c2977e..031fa71578 100644 --- a/bitbake-dev/lib/bb/ui/knotty.py +++ b/bitbake-dev/lib/bb/ui/knotty.py @@ -120,6 +120,9 @@ def init(server, eventHandler): if event[0] == 'bb.command.CookerCommandCompleted': break + if event[0] == 'bb.command.CookerCommandSetExitCode': + return_value = event[1]['exitcode'] + continue if event[0] == 'bb.command.CookerCommandFailed': return_value = 1 print "Command execution failed: %s" % event[1]['error'] -- cgit v1.2.3-54-g00ecf