From 079e6825aacec7ef9b3976c9057363b690a43ce5 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Sun, 20 Jan 2008 12:09:31 +0000 Subject: bitbake: sync with upstream stable branch bugfixes and enhancements git-svn-id: https://svn.o-hand.com/repos/poky/trunk@3554 311d38ba-8fff-0310-9ca6-ca027cbcb966 --- bitbake/ChangeLog | 6 ++++++ bitbake/lib/bb/fetch/git.py | 5 ++++- bitbake/lib/bb/fetch/wget.py | 6 +++--- bitbake/lib/bb/runqueue.py | 4 ++-- bitbake/lib/bb/taskdata.py | 41 ++++++++++++++++++++++++++--------------- 5 files changed, 41 insertions(+), 21 deletions(-) (limited to 'bitbake') diff --git a/bitbake/ChangeLog b/bitbake/ChangeLog index 4f3eafe2ba..8f251475aa 100644 --- a/bitbake/ChangeLog +++ b/bitbake/ChangeLog @@ -35,6 +35,12 @@ Changes in BitBake 1.8.x: - Add support for "-e target" (#3432) - Fix shell showdata command (#3259) - Fix shell data updating problems (#1880) + - Properly raise errors for invalid source URI protocols + - Change the wget fetcher failure handling to avoid lockfile problems + - Add git branch support + - Add support for branches in git fetcher (Otavio Salvador, Michael Lauer) + - Make taskdata and runqueue errors more user friendly + - Add norecurse and fullpath options to cvs fetcher Changes in Bitbake 1.8.8: - Rewrite svn fetcher to make adding extra operations easier diff --git a/bitbake/lib/bb/fetch/git.py b/bitbake/lib/bb/fetch/git.py index 21259a23b0..9cc7f4e086 100644 --- a/bitbake/lib/bb/fetch/git.py +++ b/bitbake/lib/bb/fetch/git.py @@ -50,6 +50,8 @@ class Git(Fetch): if 'protocol' in ud.parm: ud.proto = ud.parm['protocol'] + ud.branch = ud.parm.get("branch", "") + tag = Fetch.srcrev_internal_helper(ud, d) if tag is True: ud.tag = self.latest_revision(url, ud, d) @@ -130,7 +132,8 @@ class Git(Fetch): def _latest_revision(self, url, ud, d): - output = runfetchcmd("git ls-remote %s://%s%s" % (ud.proto, ud.host, ud.path), d, True) + bb.msg.note(1, bb.msg.domain.Fetcher, "Calling git ls-remote %s://%s%s %s" % (ud.proto, ud.host, ud.path, ud.branch ) ) + output = runfetchcmd("git ls-remote %s://%s%s %s" % (ud.proto, ud.host, ud.path, ud.branch), d, True) return output.split()[0] def _build_revision(self, url, ud, d): diff --git a/bitbake/lib/bb/fetch/wget.py b/bitbake/lib/bb/fetch/wget.py index 2d590ad0b2..f8ade45da7 100644 --- a/bitbake/lib/bb/fetch/wget.py +++ b/bitbake/lib/bb/fetch/wget.py @@ -66,10 +66,10 @@ class Wget(Fetch): if ret != 0: return False - # check if sourceforge did send us to the mirror page + # Sanity check since wget can pretend it succeed when it didn't + # Also, this used to happen if sourceforge sent us to the mirror page if not os.path.exists(ud.localpath): - os.system("rm %s*" % ud.localpath) # FIXME shell quote it - bb.msg.debug(2, bb.msg.domain.Fetcher, "sourceforge.net send us to the mirror on %s" % ud.basename) + bb.msg.debug(2, bb.msg.domain.Fetcher, "The fetch command for %s returned success but %s doesn't exist?..." % (uri, ud.localpath)) return False return True diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 68ef3a722f..9d27d539c1 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py @@ -564,7 +564,7 @@ class RunQueue: # Check to make sure we still have tasks to run if len(self.runq_fnid) == 0: if not taskData.abort: - bb.msg.note(1, bb.msg.domain.RunQueue, "All possible tasks have been run but build incomplete (--continue mode). See errors above for incomplete tasks.") + bb.msg.note(1, bb.msg.domain.RunQueue, "All buildable tasks have been run but the build is incomplete (--continue mode). Errors for the tasks that failed will have been printed above.") return bb.msg.fatal(bb.msg.domain.RunQueue, "No active tasks and not in --continue mode?! Please report this bug.") @@ -630,7 +630,7 @@ class RunQueue: for prov in prov_list: if len(prov_list[prov]) > 1 and prov not in self.multi_provider_whitelist: error = True - bb.msg.error(bb.msg.domain.RunQueue, "Multiple files due to be built which all provide %s (%s)" % (prov, " ".join(prov_list[prov]))) + bb.msg.error(bb.msg.domain.RunQueue, "Multiple .bb files are due to be built which each provide %s (%s).\n This usually means one provides something the other doesn't and should." % (prov, " ".join(prov_list[prov]))) #if error: # bb.msg.fatal(bb.msg.domain.RunQueue, "Corrupted metadata configuration detected, aborting...") diff --git a/bitbake/lib/bb/taskdata.py b/bitbake/lib/bb/taskdata.py index 74a8b84bd5..3dac6c26af 100644 --- a/bitbake/lib/bb/taskdata.py +++ b/bitbake/lib/bb/taskdata.py @@ -330,7 +330,7 @@ class TaskData: self.add_provider_internal(cfgData, dataCache, item) except bb.providers.NoProvider: if self.abort: - bb.msg.error(bb.msg.domain.Provider, "No providers of build target %s (for %s)" % (item, self.get_dependees_str(item))) + bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item))) raise targetid = self.getbuild_id(item) self.remove_buildtarget(targetid) @@ -348,7 +348,7 @@ class TaskData: return if not item in dataCache.providers: - bb.msg.note(2, bb.msg.domain.Provider, "No providers of build target %s (for %s)" % (item, self.get_dependees_str(item))) + bb.msg.note(2, bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item))) bb.event.fire(bb.event.NoProvider(item, cfgData)) raise bb.providers.NoProvider(item) @@ -365,7 +365,7 @@ class TaskData: eligible.remove(p) if not eligible: - bb.msg.note(2, bb.msg.domain.Provider, "No providers of build target %s after filtering (for %s)" % (item, self.get_dependees_str(item))) + bb.msg.note(2, bb.msg.domain.Provider, "No buildable provider PROVIDES '%s' but '%s' DEPENDS on or otherwise requires it. Enable debugging and see earlier logs to find unbuildable providers." % (item, self.get_dependees_str(item))) bb.event.fire(bb.event.NoProvider(item, cfgData)) raise bb.providers.NoProvider(item) @@ -376,7 +376,7 @@ class TaskData: providers_list.append(dataCache.pkg_fn[fn]) bb.msg.note(1, bb.msg.domain.Provider, "multiple providers are available for %s (%s);" % (item, ", ".join(providers_list))) bb.msg.note(1, bb.msg.domain.Provider, "consider defining PREFERRED_PROVIDER_%s" % item) - bb.event.fire(bb.event.MultipleProviders(item,providers_list,cfgData)) + bb.event.fire(bb.event.MultipleProviders(item, providers_list, cfgData)) self.consider_msgs_cache.append(item) for fn in eligible: @@ -405,7 +405,7 @@ class TaskData: all_p = bb.providers.getRuntimeProviders(dataCache, item) if not all_p: - bb.msg.error(bb.msg.domain.Provider, "No providers of runtime build target %s (for %s)" % (item, self.get_rdependees_str(item))) + bb.msg.error(bb.msg.domain.Provider, "'%s' RDEPENDS/RRECOMMENDS or otherwise requires the runtime entity '%s' but it wasn't found in any PACKAGE or RPROVIDES variables" % (self.get_rdependees_str(item), item)) bb.event.fire(bb.event.NoProvider(item, cfgData, runtime=True)) raise bb.providers.NoRProvider(item) @@ -417,7 +417,7 @@ class TaskData: eligible.remove(p) if not eligible: - bb.msg.error(bb.msg.domain.Provider, "No providers of runtime build target %s after filtering (for %s)" % (item, self.get_rdependees_str(item))) + bb.msg.error(bb.msg.domain.Provider, "'%s' RDEPENDS/RRECOMMENDS or otherwise requires the runtime entity '%s' but it wasn't found in any PACKAGE or RPROVIDES variables of any buildable targets.\nEnable debugging and see earlier logs to find unbuildable targets." % (self.get_rdependees_str(item), item)) bb.event.fire(bb.event.NoProvider(item, cfgData, runtime=True)) raise bb.providers.NoRProvider(item) @@ -446,7 +446,7 @@ class TaskData: fnid = self.getfn_id(fn) if fnid in self.failed_fnids: continue - bb.msg.debug(2, bb.msg.domain.Provider, "adding %s to satisfy runtime %s" % (fn, item)) + bb.msg.debug(2, bb.msg.domain.Provider, "adding '%s' to satisfy runtime '%s'" % (fn, item)) self.add_runtime_target(fn, item) self.add_tasks(fn, dataCache) @@ -459,7 +459,9 @@ class TaskData: """ if fnid in self.failed_fnids: return - bb.msg.debug(1, bb.msg.domain.Provider, "Removing failed file %s" % self.fn_index[fnid]) + if not missing_list: + missing_list = [fnid] + bb.msg.debug(1, bb.msg.domain.Provider, "File '%s' is unbuildable, removing..." % self.fn_index[fnid]) self.failed_fnids.append(fnid) for target in self.build_targets: if fnid in self.build_targets[target]: @@ -477,13 +479,17 @@ class TaskData: Mark a build target as failed (unbuildable) Trigger removal of any files that have this as a dependency """ - bb.msg.note(2, bb.msg.domain.Provider, "Removing failed build target %s" % self.build_names_index[targetid]) + if not missing_list: + missing_list = [self.build_names_index[targetid]] + else: + missing_list = [self.build_names_index[targetid]] + missing_list + bb.msg.note(2, bb.msg.domain.Provider, "Target '%s' is unbuildable, removing...\nMissing or unbuildable dependency chain was: %s" % (self.build_names_index[targetid], missing_list)) self.failed_deps.append(targetid) dependees = self.get_dependees(targetid) for fnid in dependees: - self.fail_fnid(fnid, [self.build_names_index[targetid]]+missing_list) + self.fail_fnid(fnid, missing_list) if self.abort and targetid in self.external_targets: - bb.msg.error(bb.msg.domain.Provider, "No buildable providers available for required build target %s ('%s')" % (self.build_names_index[targetid], missing_list)) + bb.msg.error(bb.msg.domain.Provider, "Required build target '%s' has no buildable providers.\nMissing or unbuildable dependency chain was: %s" % (self.build_names_index[targetid], missing_list)) raise bb.providers.NoProvider def remove_runtarget(self, targetid, missing_list = []): @@ -491,17 +497,22 @@ class TaskData: Mark a run target as failed (unbuildable) Trigger removal of any files that have this as a dependency """ - bb.msg.note(1, bb.msg.domain.Provider, "Removing failed runtime build target %s ('%s')" % (self.run_names_index[targetid], missing_list)) + if not missing_list: + missing_list = [self.run_names_index[targetid]] + else: + missing_list = [self.run_names_index[targetid]] + missing_list + + bb.msg.note(1, bb.msg.domain.Provider, "Runtime target '%s' is unbuildable, removing...\nMissing or unbuildable dependency chain was: %s" % (self.run_names_index[targetid], missing_list)) self.failed_rdeps.append(targetid) dependees = self.get_rdependees(targetid) for fnid in dependees: - self.fail_fnid(fnid, [self.run_names_index[targetid]]+missing_list) + self.fail_fnid(fnid, missing_list) def add_unresolved(self, cfgData, dataCache): """ Resolve all unresolved build and runtime targets """ - bb.msg.note(1, bb.msg.domain.TaskData, "Resolving missing task queue dependencies") + bb.msg.note(1, bb.msg.domain.TaskData, "Resolving any missing task queue dependencies") while 1: added = 0 for target in self.get_unresolved_build_targets(dataCache): @@ -511,7 +522,7 @@ class TaskData: except bb.providers.NoProvider: targetid = self.getbuild_id(target) if self.abort and targetid in self.external_targets: - bb.msg.error(bb.msg.domain.Provider, "No providers of build target %s (for %s)" % (target, self.get_dependees_str(target))) + bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (target, self.get_dependees_str(target))) raise self.remove_buildtarget(targetid) for target in self.get_unresolved_run_targets(dataCache): -- cgit 1.2.3-korg