diff options
author | Richard Purdie <rpurdie@linux.intel.com> | 2009-07-29 14:33:14 +0100 |
---|---|---|
committer | Richard Purdie <rpurdie@linux.intel.com> | 2009-07-29 14:33:14 +0100 |
commit | 64b04685b6fd029f2f70f7017bfd51d26ccb0d11 (patch) | |
tree | 5d525e2b58e5a9b27ea3096a0047770446baaf29 | |
parent | 231b5f67844da39949e04ae53557cea04aacffdd (diff) | |
download | openembedded-core-64b04685b6fd029f2f70f7017bfd51d26ccb0d11.tar.gz openembedded-core-64b04685b6fd029f2f70f7017bfd51d26ccb0d11.tar.bz2 openembedded-core-64b04685b6fd029f2f70f7017bfd51d26ccb0d11.zip |
bitbake: Add a --revisions-changed commandline option to indicate when floating srcrevs have changed
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
-rwxr-xr-x | bitbake-dev/bin/bitbake | 3 | ||||
-rw-r--r-- | bitbake-dev/lib/bb/command.py | 19 | ||||
-rw-r--r-- | bitbake-dev/lib/bb/cooker.py | 6 | ||||
-rw-r--r-- | bitbake-dev/lib/bb/fetch/__init__.py | 23 | ||||
-rw-r--r-- | bitbake-dev/lib/bb/ui/knotty.py | 3 | ||||
-rwxr-xr-x | bitbake/bin/bitbake | 3 | ||||
-rw-r--r-- | bitbake/lib/bb/cooker.py | 3 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch/__init__.py | 23 |
8 files changed, 81 insertions, 2 deletions
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'] diff --git a/bitbake/bin/bitbake b/bitbake/bin/bitbake index f3294106ef..842ba0441e 100755 --- a/bitbake/bin/bitbake +++ b/bitbake/bin/bitbake @@ -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", 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) configuration = BBConfiguration(options) diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index 1f31d1203a..b0692431bb 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py @@ -612,6 +612,9 @@ class BBCooker: # initialise the parsing status now we know we will need deps self.updateCache() + if self.configuration.revisions_changed: + sys.exit(bb.fetch.fetcher_compare_revisons(self.configuration.data)) + if self.configuration.parse_only: bb.msg.note(1, bb.msg.domain.Collection, "Requested parsing .bb files only. Exiting.") return 0 diff --git a/bitbake/lib/bb/fetch/__init__.py b/bitbake/lib/bb/fetch/__init__.py index 39a8180a89..a97138d271 100644 --- a/bitbake/lib/bb/fetch/__init__.py +++ b/bitbake/lib/bb/fetch/__init__.py @@ -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) 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 |