summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@linux.intel.com>2009-07-29 14:33:14 +0100
committerRichard Purdie <rpurdie@linux.intel.com>2009-07-29 14:33:14 +0100
commit64b04685b6fd029f2f70f7017bfd51d26ccb0d11 (patch)
tree5d525e2b58e5a9b27ea3096a0047770446baaf29
parent231b5f67844da39949e04ae53557cea04aacffdd (diff)
downloadopenembedded-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-xbitbake-dev/bin/bitbake3
-rw-r--r--bitbake-dev/lib/bb/command.py19
-rw-r--r--bitbake-dev/lib/bb/cooker.py6
-rw-r--r--bitbake-dev/lib/bb/fetch/__init__.py23
-rw-r--r--bitbake-dev/lib/bb/ui/knotty.py3
-rwxr-xr-xbitbake/bin/bitbake3
-rw-r--r--bitbake/lib/bb/cooker.py3
-rw-r--r--bitbake/lib/bb/fetch/__init__.py23
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