summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorRichard Purdie <richard@openedhand.com>2008-01-20 12:09:31 +0000
committerRichard Purdie <richard@openedhand.com>2008-01-20 12:09:31 +0000
commit079e6825aacec7ef9b3976c9057363b690a43ce5 (patch)
treeb25054c486e11d0b293e2166f1c4cdce02eb8704 /bitbake
parent027c071fc5fbaed003d17e1d385008a5b70ee3eb (diff)
downloadpoky-079e6825aacec7ef9b3976c9057363b690a43ce5.tar.gz
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
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/ChangeLog6
-rw-r--r--bitbake/lib/bb/fetch/git.py5
-rw-r--r--bitbake/lib/bb/fetch/wget.py6
-rw-r--r--bitbake/lib/bb/runqueue.py4
-rw-r--r--bitbake/lib/bb/taskdata.py41
5 files changed, 41 insertions, 21 deletions
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:
35 - Add support for "-e target" (#3432) 35 - Add support for "-e target" (#3432)
36 - Fix shell showdata command (#3259) 36 - Fix shell showdata command (#3259)
37 - Fix shell data updating problems (#1880) 37 - Fix shell data updating problems (#1880)
38 - Properly raise errors for invalid source URI protocols
39 - Change the wget fetcher failure handling to avoid lockfile problems
40 - Add git branch support
41 - Add support for branches in git fetcher (Otavio Salvador, Michael Lauer)
42 - Make taskdata and runqueue errors more user friendly
43 - Add norecurse and fullpath options to cvs fetcher
38 44
39Changes in Bitbake 1.8.8: 45Changes in Bitbake 1.8.8:
40 - Rewrite svn fetcher to make adding extra operations easier 46 - 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):
50 if 'protocol' in ud.parm: 50 if 'protocol' in ud.parm:
51 ud.proto = ud.parm['protocol'] 51 ud.proto = ud.parm['protocol']
52 52
53 ud.branch = ud.parm.get("branch", "")
54
53 tag = Fetch.srcrev_internal_helper(ud, d) 55 tag = Fetch.srcrev_internal_helper(ud, d)
54 if tag is True: 56 if tag is True:
55 ud.tag = self.latest_revision(url, ud, d) 57 ud.tag = self.latest_revision(url, ud, d)
@@ -130,7 +132,8 @@ class Git(Fetch):
130 132
131 def _latest_revision(self, url, ud, d): 133 def _latest_revision(self, url, ud, d):
132 134
133 output = runfetchcmd("git ls-remote %s://%s%s" % (ud.proto, ud.host, ud.path), d, True) 135 bb.msg.note(1, bb.msg.domain.Fetcher, "Calling git ls-remote %s://%s%s %s" % (ud.proto, ud.host, ud.path, ud.branch ) )
136 output = runfetchcmd("git ls-remote %s://%s%s %s" % (ud.proto, ud.host, ud.path, ud.branch), d, True)
134 return output.split()[0] 137 return output.split()[0]
135 138
136 def _build_revision(self, url, ud, d): 139 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):
66 if ret != 0: 66 if ret != 0:
67 return False 67 return False
68 68
69 # check if sourceforge did send us to the mirror page 69 # Sanity check since wget can pretend it succeed when it didn't
70 # Also, this used to happen if sourceforge sent us to the mirror page
70 if not os.path.exists(ud.localpath): 71 if not os.path.exists(ud.localpath):
71 os.system("rm %s*" % ud.localpath) # FIXME shell quote it 72 bb.msg.debug(2, bb.msg.domain.Fetcher, "The fetch command for %s returned success but %s doesn't exist?..." % (uri, ud.localpath))
72 bb.msg.debug(2, bb.msg.domain.Fetcher, "sourceforge.net send us to the mirror on %s" % ud.basename)
73 return False 73 return False
74 74
75 return True 75 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:
564 # Check to make sure we still have tasks to run 564 # Check to make sure we still have tasks to run
565 if len(self.runq_fnid) == 0: 565 if len(self.runq_fnid) == 0:
566 if not taskData.abort: 566 if not taskData.abort:
567 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.") 567 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.")
568 return 568 return
569 bb.msg.fatal(bb.msg.domain.RunQueue, "No active tasks and not in --continue mode?! Please report this bug.") 569 bb.msg.fatal(bb.msg.domain.RunQueue, "No active tasks and not in --continue mode?! Please report this bug.")
570 570
@@ -630,7 +630,7 @@ class RunQueue:
630 for prov in prov_list: 630 for prov in prov_list:
631 if len(prov_list[prov]) > 1 and prov not in self.multi_provider_whitelist: 631 if len(prov_list[prov]) > 1 and prov not in self.multi_provider_whitelist:
632 error = True 632 error = True
633 bb.msg.error(bb.msg.domain.RunQueue, "Multiple files due to be built which all provide %s (%s)" % (prov, " ".join(prov_list[prov]))) 633 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])))
634 #if error: 634 #if error:
635 # bb.msg.fatal(bb.msg.domain.RunQueue, "Corrupted metadata configuration detected, aborting...") 635 # bb.msg.fatal(bb.msg.domain.RunQueue, "Corrupted metadata configuration detected, aborting...")
636 636
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:
330 self.add_provider_internal(cfgData, dataCache, item) 330 self.add_provider_internal(cfgData, dataCache, item)
331 except bb.providers.NoProvider: 331 except bb.providers.NoProvider:
332 if self.abort: 332 if self.abort:
333 bb.msg.error(bb.msg.domain.Provider, "No providers of build target %s (for %s)" % (item, self.get_dependees_str(item))) 333 bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item)))
334 raise 334 raise
335 targetid = self.getbuild_id(item) 335 targetid = self.getbuild_id(item)
336 self.remove_buildtarget(targetid) 336 self.remove_buildtarget(targetid)
@@ -348,7 +348,7 @@ class TaskData:
348 return 348 return
349 349
350 if not item in dataCache.providers: 350 if not item in dataCache.providers:
351 bb.msg.note(2, bb.msg.domain.Provider, "No providers of build target %s (for %s)" % (item, self.get_dependees_str(item))) 351 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)))
352 bb.event.fire(bb.event.NoProvider(item, cfgData)) 352 bb.event.fire(bb.event.NoProvider(item, cfgData))
353 raise bb.providers.NoProvider(item) 353 raise bb.providers.NoProvider(item)
354 354
@@ -365,7 +365,7 @@ class TaskData:
365 eligible.remove(p) 365 eligible.remove(p)
366 366
367 if not eligible: 367 if not eligible:
368 bb.msg.note(2, bb.msg.domain.Provider, "No providers of build target %s after filtering (for %s)" % (item, self.get_dependees_str(item))) 368 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)))
369 bb.event.fire(bb.event.NoProvider(item, cfgData)) 369 bb.event.fire(bb.event.NoProvider(item, cfgData))
370 raise bb.providers.NoProvider(item) 370 raise bb.providers.NoProvider(item)
371 371
@@ -376,7 +376,7 @@ class TaskData:
376 providers_list.append(dataCache.pkg_fn[fn]) 376 providers_list.append(dataCache.pkg_fn[fn])
377 bb.msg.note(1, bb.msg.domain.Provider, "multiple providers are available for %s (%s);" % (item, ", ".join(providers_list))) 377 bb.msg.note(1, bb.msg.domain.Provider, "multiple providers are available for %s (%s);" % (item, ", ".join(providers_list)))
378 bb.msg.note(1, bb.msg.domain.Provider, "consider defining PREFERRED_PROVIDER_%s" % item) 378 bb.msg.note(1, bb.msg.domain.Provider, "consider defining PREFERRED_PROVIDER_%s" % item)
379 bb.event.fire(bb.event.MultipleProviders(item,providers_list,cfgData)) 379 bb.event.fire(bb.event.MultipleProviders(item, providers_list, cfgData))
380 self.consider_msgs_cache.append(item) 380 self.consider_msgs_cache.append(item)
381 381
382 for fn in eligible: 382 for fn in eligible:
@@ -405,7 +405,7 @@ class TaskData:
405 all_p = bb.providers.getRuntimeProviders(dataCache, item) 405 all_p = bb.providers.getRuntimeProviders(dataCache, item)
406 406
407 if not all_p: 407 if not all_p:
408 bb.msg.error(bb.msg.domain.Provider, "No providers of runtime build target %s (for %s)" % (item, self.get_rdependees_str(item))) 408 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))
409 bb.event.fire(bb.event.NoProvider(item, cfgData, runtime=True)) 409 bb.event.fire(bb.event.NoProvider(item, cfgData, runtime=True))
410 raise bb.providers.NoRProvider(item) 410 raise bb.providers.NoRProvider(item)
411 411
@@ -417,7 +417,7 @@ class TaskData:
417 eligible.remove(p) 417 eligible.remove(p)
418 418
419 if not eligible: 419 if not eligible:
420 bb.msg.error(bb.msg.domain.Provider, "No providers of runtime build target %s after filtering (for %s)" % (item, self.get_rdependees_str(item))) 420 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))
421 bb.event.fire(bb.event.NoProvider(item, cfgData, runtime=True)) 421 bb.event.fire(bb.event.NoProvider(item, cfgData, runtime=True))
422 raise bb.providers.NoRProvider(item) 422 raise bb.providers.NoRProvider(item)
423 423
@@ -446,7 +446,7 @@ class TaskData:
446 fnid = self.getfn_id(fn) 446 fnid = self.getfn_id(fn)
447 if fnid in self.failed_fnids: 447 if fnid in self.failed_fnids:
448 continue 448 continue
449 bb.msg.debug(2, bb.msg.domain.Provider, "adding %s to satisfy runtime %s" % (fn, item)) 449 bb.msg.debug(2, bb.msg.domain.Provider, "adding '%s' to satisfy runtime '%s'" % (fn, item))
450 self.add_runtime_target(fn, item) 450 self.add_runtime_target(fn, item)
451 self.add_tasks(fn, dataCache) 451 self.add_tasks(fn, dataCache)
452 452
@@ -459,7 +459,9 @@ class TaskData:
459 """ 459 """
460 if fnid in self.failed_fnids: 460 if fnid in self.failed_fnids:
461 return 461 return
462 bb.msg.debug(1, bb.msg.domain.Provider, "Removing failed file %s" % self.fn_index[fnid]) 462 if not missing_list:
463 missing_list = [fnid]
464 bb.msg.debug(1, bb.msg.domain.Provider, "File '%s' is unbuildable, removing..." % self.fn_index[fnid])
463 self.failed_fnids.append(fnid) 465 self.failed_fnids.append(fnid)
464 for target in self.build_targets: 466 for target in self.build_targets:
465 if fnid in self.build_targets[target]: 467 if fnid in self.build_targets[target]:
@@ -477,13 +479,17 @@ class TaskData:
477 Mark a build target as failed (unbuildable) 479 Mark a build target as failed (unbuildable)
478 Trigger removal of any files that have this as a dependency 480 Trigger removal of any files that have this as a dependency
479 """ 481 """
480 bb.msg.note(2, bb.msg.domain.Provider, "Removing failed build target %s" % self.build_names_index[targetid]) 482 if not missing_list:
483 missing_list = [self.build_names_index[targetid]]
484 else:
485 missing_list = [self.build_names_index[targetid]] + missing_list
486 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))
481 self.failed_deps.append(targetid) 487 self.failed_deps.append(targetid)
482 dependees = self.get_dependees(targetid) 488 dependees = self.get_dependees(targetid)
483 for fnid in dependees: 489 for fnid in dependees:
484 self.fail_fnid(fnid, [self.build_names_index[targetid]]+missing_list) 490 self.fail_fnid(fnid, missing_list)
485 if self.abort and targetid in self.external_targets: 491 if self.abort and targetid in self.external_targets:
486 bb.msg.error(bb.msg.domain.Provider, "No buildable providers available for required build target %s ('%s')" % (self.build_names_index[targetid], missing_list)) 492 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))
487 raise bb.providers.NoProvider 493 raise bb.providers.NoProvider
488 494
489 def remove_runtarget(self, targetid, missing_list = []): 495 def remove_runtarget(self, targetid, missing_list = []):
@@ -491,17 +497,22 @@ class TaskData:
491 Mark a run target as failed (unbuildable) 497 Mark a run target as failed (unbuildable)
492 Trigger removal of any files that have this as a dependency 498 Trigger removal of any files that have this as a dependency
493 """ 499 """
494 bb.msg.note(1, bb.msg.domain.Provider, "Removing failed runtime build target %s ('%s')" % (self.run_names_index[targetid], missing_list)) 500 if not missing_list:
501 missing_list = [self.run_names_index[targetid]]
502 else:
503 missing_list = [self.run_names_index[targetid]] + missing_list
504
505 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))
495 self.failed_rdeps.append(targetid) 506 self.failed_rdeps.append(targetid)
496 dependees = self.get_rdependees(targetid) 507 dependees = self.get_rdependees(targetid)
497 for fnid in dependees: 508 for fnid in dependees:
498 self.fail_fnid(fnid, [self.run_names_index[targetid]]+missing_list) 509 self.fail_fnid(fnid, missing_list)
499 510
500 def add_unresolved(self, cfgData, dataCache): 511 def add_unresolved(self, cfgData, dataCache):
501 """ 512 """
502 Resolve all unresolved build and runtime targets 513 Resolve all unresolved build and runtime targets
503 """ 514 """
504 bb.msg.note(1, bb.msg.domain.TaskData, "Resolving missing task queue dependencies") 515 bb.msg.note(1, bb.msg.domain.TaskData, "Resolving any missing task queue dependencies")
505 while 1: 516 while 1:
506 added = 0 517 added = 0
507 for target in self.get_unresolved_build_targets(dataCache): 518 for target in self.get_unresolved_build_targets(dataCache):
@@ -511,7 +522,7 @@ class TaskData:
511 except bb.providers.NoProvider: 522 except bb.providers.NoProvider:
512 targetid = self.getbuild_id(target) 523 targetid = self.getbuild_id(target)
513 if self.abort and targetid in self.external_targets: 524 if self.abort and targetid in self.external_targets:
514 bb.msg.error(bb.msg.domain.Provider, "No providers of build target %s (for %s)" % (target, self.get_dependees_str(target))) 525 bb.msg.error(bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (target, self.get_dependees_str(target)))
515 raise 526 raise
516 self.remove_buildtarget(targetid) 527 self.remove_buildtarget(targetid)
517 for target in self.get_unresolved_run_targets(dataCache): 528 for target in self.get_unresolved_run_targets(dataCache):