diff options
author | Richard Purdie <richard@openedhand.com> | 2008-01-20 12:09:31 +0000 |
---|---|---|
committer | Richard Purdie <richard@openedhand.com> | 2008-01-20 12:09:31 +0000 |
commit | 079e6825aacec7ef9b3976c9057363b690a43ce5 (patch) | |
tree | b25054c486e11d0b293e2166f1c4cdce02eb8704 /bitbake | |
parent | 027c071fc5fbaed003d17e1d385008a5b70ee3eb (diff) | |
download | poky-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/ChangeLog | 6 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch/git.py | 5 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch/wget.py | 6 | ||||
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 4 | ||||
-rw-r--r-- | bitbake/lib/bb/taskdata.py | 41 |
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 | ||
39 | Changes in Bitbake 1.8.8: | 45 | Changes 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): |