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/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 +++ 4 files changed, 50 insertions(+), 1 deletion(-) (limited to 'bitbake-dev/lib/bb') diff --git a/bitbake-dev/lib/bb/command.py b/bitbake-dev/lib/bb/command.py index 9226a2772..e7c3770ff 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 bec6c3535..b2b237b4c 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 39a577b2e..8ddcd3870 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 a334c2977..031fa7157 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