From 1c7d6584a7811b7785ae5c1e378f14b5ba0971cf Mon Sep 17 00:00:00 2001 From: takeshi_hoshina Date: Mon, 2 Nov 2020 11:07:33 +0900 Subject: basesystem-jj recipes --- external/poky/bitbake/.gitattributes | 2 + external/poky/bitbake/COPYING | 339 --- external/poky/bitbake/HEADER | 19 - external/poky/bitbake/LICENSE | 12 +- external/poky/bitbake/LICENSE.GPL-2.0-only | 288 +++ external/poky/bitbake/LICENSE.MIT | 25 + external/poky/bitbake/bin/bitbake | 16 +- external/poky/bitbake/bin/bitbake-diffsigs | 14 +- external/poky/bitbake/bin/bitbake-hashclient | 170 ++ external/poky/bitbake/bin/bitbake-hashserv | 62 + external/poky/bitbake/bin/bitbake-layers | 16 +- external/poky/bitbake/bin/bitbake-prserv | 4 + external/poky/bitbake/bin/bitbake-selftest | 16 +- external/poky/bitbake/bin/bitbake-worker | 22 +- external/poky/bitbake/bin/bitdoc | 14 +- external/poky/bitbake/bin/git-make-shallow | 4 + external/poky/bitbake/bin/toaster | 31 +- external/poky/bitbake/bin/toaster-eventreplay | 17 +- external/poky/bitbake/contrib/autobuilderlog.json | 13 + external/poky/bitbake/contrib/dump_cache.py | 2 - .../poky/bitbake/contrib/vim/indent/bitbake.vim | 343 +++ .../bitbake-user-manual-execution.xml | 185 +- .../bitbake-user-manual-fetching.xml | 63 +- .../bitbake-user-manual-hello.xml | 42 +- .../bitbake-user-manual-intro.xml | 45 +- .../bitbake-user-manual-metadata.xml | 219 +- .../bitbake-user-manual-ref-variables.xml | 435 ++-- external/poky/bitbake/doc/poky.ent | 8 - external/poky/bitbake/lib/bb/COW.py | 16 - external/poky/bitbake/lib/bb/__init__.py | 28 +- external/poky/bitbake/lib/bb/build.py | 177 +- external/poky/bitbake/lib/bb/cache.py | 138 +- external/poky/bitbake/lib/bb/cache_extra.py | 14 +- external/poky/bitbake/lib/bb/checksum.py | 18 +- external/poky/bitbake/lib/bb/codeparser.py | 39 +- external/poky/bitbake/lib/bb/command.py | 114 +- external/poky/bitbake/lib/bb/compat.py | 4 + external/poky/bitbake/lib/bb/cooker.py | 234 +- external/poky/bitbake/lib/bb/cookerdata.py | 38 +- external/poky/bitbake/lib/bb/daemonize.py | 4 + external/poky/bitbake/lib/bb/data.py | 29 +- external/poky/bitbake/lib/bb/data_smart.py | 97 +- external/poky/bitbake/lib/bb/event.py | 40 +- external/poky/bitbake/lib/bb/exceptions.py | 3 + external/poky/bitbake/lib/bb/fetch2/__init__.py | 324 +-- external/poky/bitbake/lib/bb/fetch2/bzr.py | 14 +- external/poky/bitbake/lib/bb/fetch2/clearcase.py | 28 +- external/poky/bitbake/lib/bb/fetch2/cvs.py | 18 +- external/poky/bitbake/lib/bb/fetch2/git.py | 99 +- external/poky/bitbake/lib/bb/fetch2/gitannex.py | 16 +- external/poky/bitbake/lib/bb/fetch2/gitsm.py | 36 +- external/poky/bitbake/lib/bb/fetch2/hg.py | 47 +- external/poky/bitbake/lib/bb/fetch2/local.py | 16 +- external/poky/bitbake/lib/bb/fetch2/npm.py | 552 +++-- external/poky/bitbake/lib/bb/fetch2/npmsw.py | 255 +++ external/poky/bitbake/lib/bb/fetch2/osc.py | 9 +- external/poky/bitbake/lib/bb/fetch2/perforce.py | 18 +- external/poky/bitbake/lib/bb/fetch2/repo.py | 16 +- external/poky/bitbake/lib/bb/fetch2/s3.py | 15 +- external/poky/bitbake/lib/bb/fetch2/sftp.py | 15 +- external/poky/bitbake/lib/bb/fetch2/ssh.py | 18 +- external/poky/bitbake/lib/bb/fetch2/svn.py | 54 +- external/poky/bitbake/lib/bb/fetch2/wget.py | 113 +- external/poky/bitbake/lib/bb/main.py | 39 +- external/poky/bitbake/lib/bb/methodpool.py | 15 +- external/poky/bitbake/lib/bb/monitordisk.py | 29 +- external/poky/bitbake/lib/bb/msg.py | 198 +- .../poky/bitbake/lib/bb/namedtuple_with_abc.py | 4 +- external/poky/bitbake/lib/bb/parse/__init__.py | 14 +- external/poky/bitbake/lib/bb/parse/ast.py | 41 +- .../bitbake/lib/bb/parse/parse_py/BBHandler.py | 61 +- .../bitbake/lib/bb/parse/parse_py/ConfHandler.py | 61 +- .../poky/bitbake/lib/bb/parse/parse_py/__init__.py | 17 +- external/poky/bitbake/lib/bb/persist_data.py | 237 +- external/poky/bitbake/lib/bb/process.py | 4 + external/poky/bitbake/lib/bb/progress.py | 29 +- external/poky/bitbake/lib/bb/providers.py | 24 +- external/poky/bitbake/lib/bb/pysh/builtin.py | 710 ------ external/poky/bitbake/lib/bb/pysh/interp.py | 1367 ----------- external/poky/bitbake/lib/bb/pysh/lsprof.py | 116 - external/poky/bitbake/lib/bb/pysh/pysh.py | 167 -- external/poky/bitbake/lib/bb/pysh/pyshlex.py | 5 - external/poky/bitbake/lib/bb/pysh/pyshyacc.py | 18 +- external/poky/bitbake/lib/bb/pysh/sherrors.py | 26 - .../poky/bitbake/lib/bb/pysh/subprocess_fix.py | 77 - external/poky/bitbake/lib/bb/remotedata.py | 61 +- external/poky/bitbake/lib/bb/runqueue.py | 1561 +++++++------ external/poky/bitbake/lib/bb/server/__init__.py | 14 +- external/poky/bitbake/lib/bb/server/process.py | 44 +- .../poky/bitbake/lib/bb/server/xmlrpcclient.py | 15 +- .../poky/bitbake/lib/bb/server/xmlrpcserver.py | 15 +- external/poky/bitbake/lib/bb/siggen.py | 474 +++- external/poky/bitbake/lib/bb/taskdata.py | 19 +- external/poky/bitbake/lib/bb/tests/codeparser.py | 22 +- external/poky/bitbake/lib/bb/tests/cooker.py | 16 +- external/poky/bitbake/lib/bb/tests/cow.py | 19 +- external/poky/bitbake/lib/bb/tests/data.py | 180 +- external/poky/bitbake/lib/bb/tests/event.py | 23 +- .../bb/tests/fetch-testdata/apple/cups/releases | 2400 ++++++++++++++++++++ .../debian/pool/main/d/db5.3/index.html | 509 +++++ .../downloads/enchant/1.6.0/index.html | 15 + .../bb/tests/fetch-testdata/files/v2.8/index.html | 774 +++++++ .../bb/tests/fetch-testdata/files/v3.0/index.html | 209 ++ .../bb/tests/fetch-testdata/files/v3.1/index.html | 156 ++ .../bb/tests/fetch-testdata/files/v3.10/index.html | 131 ++ .../bb/tests/fetch-testdata/files/v3.11/index.html | 131 ++ .../bb/tests/fetch-testdata/files/v3.12/index.html | 118 + .../bb/tests/fetch-testdata/files/v3.13/index.html | 131 ++ .../bb/tests/fetch-testdata/files/v3.14/index.html | 170 ++ .../bb/tests/fetch-testdata/files/v3.15/index.html | 157 ++ .../bb/tests/fetch-testdata/files/v3.16/index.html | 86 + .../bb/tests/fetch-testdata/files/v3.2/index.html | 132 ++ .../bb/tests/fetch-testdata/files/v3.3/index.html | 163 ++ .../bb/tests/fetch-testdata/files/v3.4/index.html | 127 ++ .../bb/tests/fetch-testdata/files/v3.5/index.html | 111 + .../bb/tests/fetch-testdata/files/v3.6/index.html | 159 ++ .../bb/tests/fetch-testdata/files/v3.7/index.html | 92 + .../bb/tests/fetch-testdata/files/v3.8/index.html | 105 + .../bb/tests/fetch-testdata/files/v3.9/index.html | 183 ++ .../pub/linux/utils/util-linux/v2.23/index.html | 45 + .../pub/linux/utils/util-linux/v2.24/index.html | 43 + .../pub/linux/utils/util-linux/v2.25/index.html | 46 + .../pub/linux/utils/util-linux/v2.26/index.html | 42 + .../pub/linux/utils/util-linux/v2.27/index.html | 35 + .../pub/linux/utils/util-linux/v2.28/index.html | 42 + .../pub/linux/utils/util-linux/v2.29/index.html | 42 + .../pub/linux/utils/util-linux/v2.30/index.html | 42 + .../pub/linux/utils/util-linux/v2.31/index.html | 35 + .../pub/linux/utils/util-linux/v2.32/index.html | 35 + .../pub/linux/utils/util-linux/v2.33/index.html | 42 + .../pub/linux/utils/util-linux/v2.34/index.html | 28 + .../pub/linux/utils/util-linux/v2.35/index.html | 18 + .../fetch-testdata/releases/eglibc/index.html | 21 + .../fetch-testdata/releases/gnu-config/index.html | 9 + .../releases/individual/xserver/index.html | 609 +++++ .../software/pulseaudio/releases/index.html | 383 ++++ external/poky/bitbake/lib/bb/tests/fetch.py | 757 +++++- external/poky/bitbake/lib/bb/tests/parse.py | 33 +- external/poky/bitbake/lib/bb/tests/persist_data.py | 129 ++ .../bb/tests/runqueue-tests/classes/base.bbclass | 262 +++ .../bb/tests/runqueue-tests/classes/image.bbclass | 5 + .../bb/tests/runqueue-tests/classes/native.bbclass | 2 + .../lib/bb/tests/runqueue-tests/conf/bitbake.conf | 16 + .../tests/runqueue-tests/conf/multiconfig/mc1.conf | 1 + .../tests/runqueue-tests/conf/multiconfig/mc2.conf | 1 + .../lib/bb/tests/runqueue-tests/recipes/a1.bb | 0 .../lib/bb/tests/runqueue-tests/recipes/b1.bb | 1 + .../lib/bb/tests/runqueue-tests/recipes/c1.bb | 0 .../lib/bb/tests/runqueue-tests/recipes/d1.bb | 3 + .../lib/bb/tests/runqueue-tests/recipes/e1.bb | 1 + external/poky/bitbake/lib/bb/tests/runqueue.py | 322 +++ .../bitbake/lib/bb/tests/support/httpserver.py | 65 + external/poky/bitbake/lib/bb/tests/utils.py | 89 +- external/poky/bitbake/lib/bb/tinfoil.py | 195 +- external/poky/bitbake/lib/bb/ui/__init__.py | 12 +- external/poky/bitbake/lib/bb/ui/buildinfohelper.py | 30 +- external/poky/bitbake/lib/bb/ui/knotty.py | 310 ++- external/poky/bitbake/lib/bb/ui/ncurses.py | 17 +- external/poky/bitbake/lib/bb/ui/taskexp.py | 29 +- external/poky/bitbake/lib/bb/ui/teamcity.py | 396 ++++ external/poky/bitbake/lib/bb/ui/toasterui.py | 14 +- external/poky/bitbake/lib/bb/ui/uievent.py | 17 +- external/poky/bitbake/lib/bb/ui/uihelper.py | 55 +- external/poky/bitbake/lib/bb/utils.py | 195 +- external/poky/bitbake/lib/bblayers/__init__.py | 4 + external/poky/bitbake/lib/bblayers/action.py | 4 + external/poky/bitbake/lib/bblayers/common.py | 6 +- external/poky/bitbake/lib/bblayers/layerindex.py | 21 +- external/poky/bitbake/lib/bblayers/query.py | 57 +- external/poky/bitbake/lib/bs4/__init__.py | 2 +- external/poky/bitbake/lib/bs4/builder/_html5lib.py | 3 +- external/poky/bitbake/lib/bs4/dammit.py | 20 +- external/poky/bitbake/lib/bs4/element.py | 23 +- external/poky/bitbake/lib/bs4/testing.py | 1 - external/poky/bitbake/lib/bs4/tests/test_docs.py | 4 - .../poky/bitbake/lib/bs4/tests/test_htmlparser.py | 1 - external/poky/bitbake/lib/bs4/tests/test_lxml.py | 8 +- external/poky/bitbake/lib/bs4/tests/test_soup.py | 6 +- external/poky/bitbake/lib/bs4/tests/test_tree.py | 11 +- external/poky/bitbake/lib/hashserv/__init__.py | 115 + external/poky/bitbake/lib/hashserv/client.py | 191 ++ external/poky/bitbake/lib/hashserv/server.py | 489 ++++ external/poky/bitbake/lib/hashserv/tests.py | 165 ++ .../poky/bitbake/lib/layerindexlib/__init__.py | 33 +- external/poky/bitbake/lib/layerindexlib/cooker.py | 17 +- external/poky/bitbake/lib/layerindexlib/plugin.py | 16 +- external/poky/bitbake/lib/layerindexlib/restapi.py | 12 +- .../poky/bitbake/lib/layerindexlib/tests/common.py | 12 +- .../poky/bitbake/lib/layerindexlib/tests/cooker.py | 15 +- .../lib/layerindexlib/tests/layerindexobj.py | 18 +- .../bitbake/lib/layerindexlib/tests/restapi.py | 15 +- external/poky/bitbake/lib/ply/yacc.py | 6 +- external/poky/bitbake/lib/progressbar/__init__.py | 2 + external/poky/bitbake/lib/progressbar/compat.py | 2 + .../poky/bitbake/lib/progressbar/progressbar.py | 2 + external/poky/bitbake/lib/progressbar/widgets.py | 2 + external/poky/bitbake/lib/prserv/__init__.py | 4 + external/poky/bitbake/lib/prserv/db.py | 20 +- external/poky/bitbake/lib/prserv/serv.py | 42 +- external/poky/bitbake/lib/pyinotify.py | 24 +- .../poky/bitbake/lib/toaster/bldcollector/admin.py | 4 + .../poky/bitbake/lib/toaster/bldcollector/urls.py | 15 +- .../poky/bitbake/lib/toaster/bldcollector/views.py | 22 +- .../poky/bitbake/lib/toaster/bldcontrol/admin.py | 5 +- .../bitbake/lib/toaster/bldcontrol/bbcontroller.py | 20 +- .../toaster/bldcontrol/localhostbecontroller.py | 27 +- .../management/commands/checksettings.py | 10 +- .../bldcontrol/management/commands/runbuilds.py | 10 +- .../toaster/bldcontrol/migrations/0001_initial.py | 18 +- .../poky/bitbake/lib/toaster/bldcontrol/models.py | 25 +- .../poky/bitbake/lib/toaster/bldcontrol/views.py | 4 + external/poky/bitbake/lib/toaster/manage.py | 4 + .../bitbake/lib/toaster/orm/fixtures/oe-core.xml | 24 +- .../poky/bitbake/lib/toaster/orm/fixtures/poky.xml | 36 +- .../toaster/orm/management/commands/lsupdates.py | 17 +- .../lib/toaster/orm/migrations/0001_initial.py | 100 +- .../orm/migrations/0002_customimagerecipe.py | 6 +- .../orm/migrations/0003_customimagepackage.py | 2 +- .../lib/toaster/orm/migrations/0004_provides.py | 4 +- .../migrations/0008_refactor_artifact_models.py | 4 +- .../orm/migrations/0011_delete_layersource.py | 2 +- .../0012_use_release_instead_of_up_branch.py | 2 +- .../toaster/orm/migrations/0017_distro_clone.py | 2 +- .../lib/toaster/orm/migrations/0019_django_2_2.py | 23 + external/poky/bitbake/lib/toaster/orm/models.py | 127 +- .../lib/toaster/tests/browser/selenium_helpers.py | 17 +- .../toaster/tests/browser/selenium_helpers_base.py | 18 +- .../toaster/tests/browser/test_all_builds_page.py | 18 +- .../tests/browser/test_all_projects_page.py | 18 +- .../tests/browser/test_builddashboard_page.py | 18 +- .../browser/test_builddashboard_page_artifacts.py | 18 +- .../browser/test_builddashboard_page_recipes.py | 18 +- .../browser/test_builddashboard_page_tasks.py | 18 +- .../toaster/tests/browser/test_js_unit_tests.py | 18 +- .../lib/toaster/tests/browser/test_landing_page.py | 20 +- .../tests/browser/test_layerdetails_page.py | 20 +- .../browser/test_most_recent_builds_states.py | 20 +- .../tests/browser/test_new_custom_image_page.py | 18 +- .../toaster/tests/browser/test_new_project_page.py | 18 +- .../tests/browser/test_project_builds_page.py | 18 +- .../tests/browser/test_project_config_page.py | 24 +- .../lib/toaster/tests/browser/test_project_page.py | 18 +- .../lib/toaster/tests/browser/test_sample.py | 18 +- .../lib/toaster/tests/browser/test_task_page.py | 18 +- .../toaster/tests/browser/test_toastertable_ui.py | 18 +- .../bitbake/lib/toaster/tests/builds/buildtest.py | 16 +- .../toaster/tests/builds/test_core_image_min.py | 17 +- .../lib/toaster/tests/commands/test_loaddata.py | 16 +- .../lib/toaster/tests/commands/test_lsupdates.py | 16 +- .../lib/toaster/tests/commands/test_runbuilds.py | 16 +- .../poky/bitbake/lib/toaster/tests/db/test_db.py | 2 + .../lib/toaster/tests/eventreplay/__init__.py | 16 +- .../toaster/tests/functional/functional_helpers.py | 16 +- .../tests/functional/test_functional_basic.py | 17 +- .../bitbake/lib/toaster/tests/views/test_views.py | 18 +- .../poky/bitbake/lib/toaster/toastergui/api.py | 18 +- .../bitbake/lib/toaster/toastergui/buildtables.py | 15 +- .../toaster/toastergui/static/js/importlayer.js | 12 +- .../bitbake/lib/toaster/toastergui/tablefilter.py | 15 +- .../poky/bitbake/lib/toaster/toastergui/tables.py | 24 +- .../toastergui/templatetags/field_values_filter.py | 4 + .../templatetags/objects_to_dictionaries_filter.py | 5 +- .../toastergui/templatetags/project_url_tag.py | 6 +- .../toaster/toastergui/templatetags/projecttags.py | 25 +- .../bitbake/lib/toaster/toastergui/typeaheads.py | 14 +- .../poky/bitbake/lib/toaster/toastergui/urls.py | 17 +- .../poky/bitbake/lib/toaster/toastergui/views.py | 61 +- .../poky/bitbake/lib/toaster/toastergui/widgets.py | 17 +- .../toastermain/management/commands/builddelete.py | 8 +- .../toastermain/management/commands/buildimport.py | 37 +- .../toastermain/management/commands/buildslist.py | 7 +- .../toastermain/management/commands/checksocket.py | 16 +- .../toastermain/management/commands/perf.py | 4 + .../bitbake/lib/toaster/toastermain/settings.py | 32 +- .../toastermain/settings_production_example.py | 15 +- .../lib/toaster/toastermain/settings_test.py | 15 +- .../poky/bitbake/lib/toaster/toastermain/urls.py | 19 +- .../poky/bitbake/lib/toaster/toastermain/wsgi.py | 7 +- external/poky/bitbake/toaster-requirements.txt | 2 +- 279 files changed, 16387 insertions(+), 7752 deletions(-) create mode 100644 external/poky/bitbake/.gitattributes delete mode 100644 external/poky/bitbake/COPYING delete mode 100644 external/poky/bitbake/HEADER create mode 100644 external/poky/bitbake/LICENSE.GPL-2.0-only create mode 100644 external/poky/bitbake/LICENSE.MIT create mode 100755 external/poky/bitbake/bin/bitbake-hashclient create mode 100755 external/poky/bitbake/bin/bitbake-hashserv create mode 100644 external/poky/bitbake/contrib/autobuilderlog.json create mode 100644 external/poky/bitbake/contrib/vim/indent/bitbake.vim create mode 100644 external/poky/bitbake/lib/bb/fetch2/npmsw.py delete mode 100644 external/poky/bitbake/lib/bb/pysh/builtin.py delete mode 100644 external/poky/bitbake/lib/bb/pysh/interp.py delete mode 100644 external/poky/bitbake/lib/bb/pysh/lsprof.py delete mode 100644 external/poky/bitbake/lib/bb/pysh/pysh.py delete mode 100644 external/poky/bitbake/lib/bb/pysh/subprocess_fix.py create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/apple/cups/releases create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/debian/pool/main/d/db5.3/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/downloads/enchant/1.6.0/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v2.8/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.0/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.1/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.10/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.11/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.12/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.13/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.14/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.15/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.16/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.2/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.3/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.4/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.5/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.6/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.7/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.8/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.9/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.23/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.24/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.25/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.26/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.27/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.28/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.29/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.30/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.31/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.32/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.33/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.34/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.35/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/releases/eglibc/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/releases/gnu-config/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/releases/individual/xserver/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/fetch-testdata/software/pulseaudio/releases/index.html create mode 100644 external/poky/bitbake/lib/bb/tests/persist_data.py create mode 100644 external/poky/bitbake/lib/bb/tests/runqueue-tests/classes/base.bbclass create mode 100644 external/poky/bitbake/lib/bb/tests/runqueue-tests/classes/image.bbclass create mode 100644 external/poky/bitbake/lib/bb/tests/runqueue-tests/classes/native.bbclass create mode 100644 external/poky/bitbake/lib/bb/tests/runqueue-tests/conf/bitbake.conf create mode 100644 external/poky/bitbake/lib/bb/tests/runqueue-tests/conf/multiconfig/mc1.conf create mode 100644 external/poky/bitbake/lib/bb/tests/runqueue-tests/conf/multiconfig/mc2.conf create mode 100644 external/poky/bitbake/lib/bb/tests/runqueue-tests/recipes/a1.bb create mode 100644 external/poky/bitbake/lib/bb/tests/runqueue-tests/recipes/b1.bb create mode 100644 external/poky/bitbake/lib/bb/tests/runqueue-tests/recipes/c1.bb create mode 100644 external/poky/bitbake/lib/bb/tests/runqueue-tests/recipes/d1.bb create mode 100644 external/poky/bitbake/lib/bb/tests/runqueue-tests/recipes/e1.bb create mode 100644 external/poky/bitbake/lib/bb/tests/runqueue.py create mode 100644 external/poky/bitbake/lib/bb/tests/support/httpserver.py create mode 100644 external/poky/bitbake/lib/bb/ui/teamcity.py create mode 100644 external/poky/bitbake/lib/hashserv/__init__.py create mode 100644 external/poky/bitbake/lib/hashserv/client.py create mode 100644 external/poky/bitbake/lib/hashserv/server.py create mode 100644 external/poky/bitbake/lib/hashserv/tests.py create mode 100644 external/poky/bitbake/lib/toaster/orm/migrations/0019_django_2_2.py (limited to 'external/poky/bitbake') diff --git a/external/poky/bitbake/.gitattributes b/external/poky/bitbake/.gitattributes new file mode 100644 index 00000000..e4f8f62f --- /dev/null +++ b/external/poky/bitbake/.gitattributes @@ -0,0 +1,2 @@ +*min.js binary +*min.css binary diff --git a/external/poky/bitbake/COPYING b/external/poky/bitbake/COPYING deleted file mode 100644 index d511905c..00000000 --- a/external/poky/bitbake/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/external/poky/bitbake/HEADER b/external/poky/bitbake/HEADER deleted file mode 100644 index 9859255d..00000000 --- a/external/poky/bitbake/HEADER +++ /dev/null @@ -1,19 +0,0 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- -# -# -# Copyright (C) -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - diff --git a/external/poky/bitbake/LICENSE b/external/poky/bitbake/LICENSE index 7d4e5f44..84580423 100644 --- a/external/poky/bitbake/LICENSE +++ b/external/poky/bitbake/LICENSE @@ -1,4 +1,13 @@ -BitBake is licensed under the GNU General Public License version 2.0. See COPYING for further details. +BitBake is licensed under the GNU General Public License version 2.0. See +LICENSE.GPL-2.0-only for further details. + +Individual files contain the following style tags instead of the full license text: + + SPDX-License-Identifier: GPL-2.0-only + +This enables machine processing of license information based on the SPDX +License Identifiers that are here available: http://spdx.org/licenses/ + The following external components are distributed with this software: @@ -17,3 +26,4 @@ Foundation and individual contributors. * Font Awesome fonts redistributed under the SIL Open Font License 1.1 * simplediff is distributed under the zlib license. + diff --git a/external/poky/bitbake/LICENSE.GPL-2.0-only b/external/poky/bitbake/LICENSE.GPL-2.0-only new file mode 100644 index 00000000..5db3c0a2 --- /dev/null +++ b/external/poky/bitbake/LICENSE.GPL-2.0-only @@ -0,0 +1,288 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + +Note: +Individual files contain the following tag instead of the full license text. + + SPDX-License-Identifier: GPL-2.0-only + +This enables machine processing of license information based on the SPDX +License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/external/poky/bitbake/LICENSE.MIT b/external/poky/bitbake/LICENSE.MIT new file mode 100644 index 00000000..a6919eb7 --- /dev/null +++ b/external/poky/bitbake/LICENSE.MIT @@ -0,0 +1,25 @@ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Note: +Individual files contain the following tag instead of the full license text. + + SPDX-License-Identifier: MIT + +This enables machine processing of license information based on the SPDX +License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/external/poky/bitbake/bin/bitbake b/external/poky/bitbake/bin/bitbake index 57dec2a4..6c73710c 100755 --- a/external/poky/bitbake/bin/bitbake +++ b/external/poky/bitbake/bin/bitbake @@ -1,6 +1,4 @@ #!/usr/bin/env python3 -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # Copyright (C) 2003, 2004 Chris Larson # Copyright (C) 2003, 2004 Phil Blundell @@ -9,18 +7,8 @@ # Copyright (C) 2005 ROAD GmbH # Copyright (C) 2006 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import os import sys @@ -38,7 +26,7 @@ from bb.main import bitbake_main, BitBakeConfigParameters, BBMainException if sys.getfilesystemencoding() != "utf-8": sys.exit("Please use a locale setting which supports UTF-8 (such as LANG=en_US.UTF-8).\nPython can't change the filesystem locale after loading so we need a UTF-8 when Python starts or things won't work.") -__version__ = "1.40.0" +__version__ = "1.46.0" if __name__ == "__main__": if __version__ != bb.__version__: diff --git a/external/poky/bitbake/bin/bitbake-diffsigs b/external/poky/bitbake/bin/bitbake-diffsigs index fa430bb3..19420a2d 100755 --- a/external/poky/bitbake/bin/bitbake-diffsigs +++ b/external/poky/bitbake/bin/bitbake-diffsigs @@ -5,18 +5,8 @@ # # Copyright (C) 2012-2013, 2017 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import os import sys @@ -105,7 +95,7 @@ def recursecb(key, hash1, hash2): out2 = bb.siggen.compare_sigfiles(hashfiles[hash1], hashfiles[hash2], recursecb, color=color) for change in out2: for line in change.splitlines(): - recout.append(' ' + line) + recout.append(' ' + line) return recout diff --git a/external/poky/bitbake/bin/bitbake-hashclient b/external/poky/bitbake/bin/bitbake-hashclient new file mode 100755 index 00000000..29ab65f1 --- /dev/null +++ b/external/poky/bitbake/bin/bitbake-hashclient @@ -0,0 +1,170 @@ +#! /usr/bin/env python3 +# +# Copyright (C) 2019 Garmin Ltd. +# +# SPDX-License-Identifier: GPL-2.0-only +# + +import argparse +import hashlib +import logging +import os +import pprint +import sys +import threading +import time + +try: + import tqdm + ProgressBar = tqdm.tqdm +except ImportError: + class ProgressBar(object): + def __init__(self, *args, **kwargs): + pass + + def __enter__(self): + return self + + def __exit__(self, *args, **kwargs): + pass + + def update(self): + pass + +sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(__file__)), 'lib')) + +import hashserv + +DEFAULT_ADDRESS = 'unix://./hashserve.sock' +METHOD = 'stress.test.method' + + +def main(): + def handle_stats(args, client): + if args.reset: + s = client.reset_stats() + else: + s = client.get_stats() + pprint.pprint(s) + return 0 + + def handle_stress(args, client): + def thread_main(pbar, lock): + nonlocal found_hashes + nonlocal missed_hashes + nonlocal max_time + + client = hashserv.create_client(args.address) + + for i in range(args.requests): + taskhash = hashlib.sha256() + taskhash.update(args.taskhash_seed.encode('utf-8')) + taskhash.update(str(i).encode('utf-8')) + + start_time = time.perf_counter() + l = client.get_unihash(METHOD, taskhash.hexdigest()) + elapsed = time.perf_counter() - start_time + + with lock: + if l: + found_hashes += 1 + else: + missed_hashes += 1 + + max_time = max(elapsed, max_time) + pbar.update() + + max_time = 0 + found_hashes = 0 + missed_hashes = 0 + lock = threading.Lock() + total_requests = args.clients * args.requests + start_time = time.perf_counter() + with ProgressBar(total=total_requests) as pbar: + threads = [threading.Thread(target=thread_main, args=(pbar, lock), daemon=False) for _ in range(args.clients)] + for t in threads: + t.start() + + for t in threads: + t.join() + + elapsed = time.perf_counter() - start_time + with lock: + print("%d requests in %.1fs. %.1f requests per second" % (total_requests, elapsed, total_requests / elapsed)) + print("Average request time %.8fs" % (elapsed / total_requests)) + print("Max request time was %.8fs" % max_time) + print("Found %d hashes, missed %d" % (found_hashes, missed_hashes)) + + if args.report: + with ProgressBar(total=args.requests) as pbar: + for i in range(args.requests): + taskhash = hashlib.sha256() + taskhash.update(args.taskhash_seed.encode('utf-8')) + taskhash.update(str(i).encode('utf-8')) + + outhash = hashlib.sha256() + outhash.update(args.outhash_seed.encode('utf-8')) + outhash.update(str(i).encode('utf-8')) + + client.report_unihash(taskhash.hexdigest(), METHOD, outhash.hexdigest(), taskhash.hexdigest()) + + with lock: + pbar.update() + + parser = argparse.ArgumentParser(description='Hash Equivalence Client') + parser.add_argument('--address', default=DEFAULT_ADDRESS, help='Server address (default "%(default)s")') + parser.add_argument('--log', default='WARNING', help='Set logging level') + + subparsers = parser.add_subparsers() + + stats_parser = subparsers.add_parser('stats', help='Show server stats') + stats_parser.add_argument('--reset', action='store_true', + help='Reset server stats') + stats_parser.set_defaults(func=handle_stats) + + stress_parser = subparsers.add_parser('stress', help='Run stress test') + stress_parser.add_argument('--clients', type=int, default=10, + help='Number of simultaneous clients') + stress_parser.add_argument('--requests', type=int, default=1000, + help='Number of requests each client will perform') + stress_parser.add_argument('--report', action='store_true', + help='Report new hashes') + stress_parser.add_argument('--taskhash-seed', default='', + help='Include string in taskhash') + stress_parser.add_argument('--outhash-seed', default='', + help='Include string in outhash') + stress_parser.set_defaults(func=handle_stress) + + args = parser.parse_args() + + logger = logging.getLogger('hashserv') + + level = getattr(logging, args.log.upper(), None) + if not isinstance(level, int): + raise ValueError('Invalid log level: %s' % args.log) + + logger.setLevel(level) + console = logging.StreamHandler() + console.setLevel(level) + logger.addHandler(console) + + func = getattr(args, 'func', None) + if func: + client = hashserv.create_client(args.address) + # Try to establish a connection to the server now to detect failures + # early + client.connect() + + return func(args, client) + + return 0 + + +if __name__ == '__main__': + try: + ret = main() + except Exception: + ret = 1 + import traceback + traceback.print_exc() + sys.exit(ret) diff --git a/external/poky/bitbake/bin/bitbake-hashserv b/external/poky/bitbake/bin/bitbake-hashserv new file mode 100755 index 00000000..1bc1f91f --- /dev/null +++ b/external/poky/bitbake/bin/bitbake-hashserv @@ -0,0 +1,62 @@ +#! /usr/bin/env python3 +# +# Copyright (C) 2018 Garmin Ltd. +# +# SPDX-License-Identifier: GPL-2.0-only +# + +import os +import sys +import logging +import argparse +import sqlite3 + +sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(__file__)), 'lib')) + +import hashserv + +VERSION = "1.0.0" + +DEFAULT_BIND = 'unix://./hashserve.sock' + + +def main(): + parser = argparse.ArgumentParser(description='Hash Equivalence Reference Server. Version=%s' % VERSION, + epilog='''The bind address is the path to a unix domain socket if it is + prefixed with "unix://". Otherwise, it is an IP address + and port in form ADDRESS:PORT. To bind to all addresses, leave + the ADDRESS empty, e.g. "--bind :8686". To bind to a specific + IPv6 address, enclose the address in "[]", e.g. + "--bind [::1]:8686"''' + ) + + parser.add_argument('--bind', default=DEFAULT_BIND, help='Bind address (default "%(default)s")') + parser.add_argument('--database', default='./hashserv.db', help='Database file (default "%(default)s")') + parser.add_argument('--log', default='WARNING', help='Set logging level') + + args = parser.parse_args() + + logger = logging.getLogger('hashserv') + + level = getattr(logging, args.log.upper(), None) + if not isinstance(level, int): + raise ValueError('Invalid log level: %s' % args.log) + + logger.setLevel(level) + console = logging.StreamHandler() + console.setLevel(level) + logger.addHandler(console) + + server = hashserv.create_server(args.bind, args.database) + server.serve_forever() + return 0 + + +if __name__ == '__main__': + try: + ret = main() + except Exception: + ret = 1 + import traceback + traceback.print_exc() + sys.exit(ret) diff --git a/external/poky/bitbake/bin/bitbake-layers b/external/poky/bitbake/bin/bitbake-layers index d184011e..149f1b1a 100755 --- a/external/poky/bitbake/bin/bitbake-layers +++ b/external/poky/bitbake/bin/bitbake-layers @@ -7,18 +7,8 @@ # Copyright (C) 2011 Mentor Graphics Corporation # Copyright (C) 2011-2015 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import logging import os @@ -62,7 +52,9 @@ def main(): # Need to re-run logger_create with color argument # (will be the same logger since it has the same name) - bb.msg.logger_create('bitbake-layers', output=sys.stdout, color=global_args.color) + bb.msg.logger_create('bitbake-layers', output=sys.stdout, + color=global_args.color, + level=logger.getEffectiveLevel()) plugins = [] tinfoil = bb.tinfoil.Tinfoil(tracking=True) diff --git a/external/poky/bitbake/bin/bitbake-prserv b/external/poky/bitbake/bin/bitbake-prserv index f38d2dd8..1e9b6cbc 100755 --- a/external/poky/bitbake/bin/bitbake-prserv +++ b/external/poky/bitbake/bin/bitbake-prserv @@ -1,4 +1,8 @@ #!/usr/bin/env python3 +# +# SPDX-License-Identifier: GPL-2.0-only +# + import os import sys,logging import optparse diff --git a/external/poky/bitbake/bin/bitbake-selftest b/external/poky/bitbake/bin/bitbake-selftest index cfa7ac53..041a2719 100755 --- a/external/poky/bitbake/bin/bitbake-selftest +++ b/external/poky/bitbake/bin/bitbake-selftest @@ -2,18 +2,8 @@ # # Copyright (C) 2012 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import os import sys, logging @@ -22,6 +12,7 @@ sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(__file__)), 'lib import unittest try: import bb + import hashserv import layerindexlib except RuntimeError as exc: sys.exit(str(exc)) @@ -33,7 +24,10 @@ tests = ["bb.tests.codeparser", "bb.tests.event", "bb.tests.fetch", "bb.tests.parse", + "bb.tests.persist_data", + "bb.tests.runqueue", "bb.tests.utils", + "hashserv.tests", "layerindexlib.tests.layerindexobj", "layerindexlib.tests.restapi", "layerindexlib.tests.cooker"] diff --git a/external/poky/bitbake/bin/bitbake-worker b/external/poky/bitbake/bin/bitbake-worker index 0e669054..97cc0fd6 100755 --- a/external/poky/bitbake/bin/bitbake-worker +++ b/external/poky/bitbake/bin/bitbake-worker @@ -1,4 +1,7 @@ #!/usr/bin/env python3 +# +# SPDX-License-Identifier: GPL-2.0-only +# import os import sys @@ -62,7 +65,6 @@ if 0: format_str = "%(levelname)s: %(message)s" conlogformat = bb.msg.BBLogFormatter(format_str) consolelog = logging.FileHandler(logfilename) - bb.msg.addDefaultlogFilter(consolelog) consolelog.setFormatter(conlogformat) logger.addHandler(consolelog) @@ -136,7 +138,7 @@ def sigterm_handler(signum, frame): os.killpg(0, signal.SIGTERM) sys.exit() -def fork_off_task(cfg, data, databuilder, workerdata, fn, task, taskname, appends, taskdepdata, extraconfigdata, quieterrors=False, dry_run_exec=False): +def fork_off_task(cfg, data, databuilder, workerdata, fn, task, taskname, taskhash, unihash, appends, taskdepdata, extraconfigdata, quieterrors=False, dry_run_exec=False): # We need to setup the environment BEFORE the fork, since # a fork() or exec*() activates PSEUDO... @@ -233,10 +235,13 @@ def fork_off_task(cfg, data, databuilder, workerdata, fn, task, taskname, append the_data.setVar(varname, value) bb.parse.siggen.set_taskdata(workerdata["sigdata"]) + if "newhashes" in workerdata: + bb.parse.siggen.set_taskhashes(workerdata["newhashes"]) ret = 0 the_data = bb_cache.loadDataFull(fn, appends) - the_data.setVar('BB_TASKHASH', workerdata["runq_hash"][task]) + the_data.setVar('BB_TASKHASH', taskhash) + the_data.setVar('BB_UNIHASH', unihash) bb.utils.set_process_name("%s:%s" % (the_data.getVar("PN"), taskname.replace("do_", ""))) @@ -375,6 +380,7 @@ class BitbakeWorker(object): self.handle_item(b"cookerconfig", self.handle_cookercfg) self.handle_item(b"extraconfigdata", self.handle_extraconfigdata) self.handle_item(b"workerdata", self.handle_workerdata) + self.handle_item(b"newtaskhashes", self.handle_newtaskhashes) self.handle_item(b"runtask", self.handle_runtask) self.handle_item(b"finishnow", self.handle_finishnow) self.handle_item(b"ping", self.handle_ping) @@ -407,12 +413,16 @@ class BitbakeWorker(object): def handle_workerdata(self, data): self.workerdata = pickle.loads(data) - bb.msg.loggerDefaultDebugLevel = self.workerdata["logdefaultdebug"] + bb.msg.loggerDefaultLogLevel = self.workerdata["logdefaultlevel"] bb.msg.loggerDefaultVerbose = self.workerdata["logdefaultverbose"] bb.msg.loggerVerboseLogs = self.workerdata["logdefaultverboselogs"] bb.msg.loggerDefaultDomains = self.workerdata["logdefaultdomain"] for mc in self.databuilder.mcdata: self.databuilder.mcdata[mc].setVar("PRSERV_HOST", self.workerdata["prhost"]) + self.databuilder.mcdata[mc].setVar("BB_HASHSERVE", self.workerdata["hashservaddr"]) + + def handle_newtaskhashes(self, data): + self.workerdata["newhashes"] = pickle.loads(data) def handle_ping(self, _): workerlog_write("Handling ping\n") @@ -427,10 +437,10 @@ class BitbakeWorker(object): sys.exit(0) def handle_runtask(self, data): - fn, task, taskname, quieterrors, appends, taskdepdata, dry_run_exec = pickle.loads(data) + fn, task, taskname, taskhash, unihash, quieterrors, appends, taskdepdata, dry_run_exec = pickle.loads(data) workerlog_write("Handling runtask %s %s %s\n" % (task, fn, taskname)) - pid, pipein, pipeout = fork_off_task(self.cookercfg, self.data, self.databuilder, self.workerdata, fn, task, taskname, appends, taskdepdata, self.extraconfigdata, quieterrors, dry_run_exec) + pid, pipein, pipeout = fork_off_task(self.cookercfg, self.data, self.databuilder, self.workerdata, fn, task, taskname, taskhash, unihash, appends, taskdepdata, self.extraconfigdata, quieterrors, dry_run_exec) self.build_pids[pid] = task self.build_pipes[pid] = runQueueWorkerPipe(pipein, pipeout) diff --git a/external/poky/bitbake/bin/bitdoc b/external/poky/bitbake/bin/bitdoc index 27446788..9bd02be6 100755 --- a/external/poky/bitbake/bin/bitdoc +++ b/external/poky/bitbake/bin/bitdoc @@ -1,21 +1,9 @@ #!/usr/bin/env python3 -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # Copyright (C) 2005 Holger Hans Peter Freyther # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import optparse, os, sys diff --git a/external/poky/bitbake/bin/git-make-shallow b/external/poky/bitbake/bin/git-make-shallow index 296d3a3d..57069f7e 100755 --- a/external/poky/bitbake/bin/git-make-shallow +++ b/external/poky/bitbake/bin/git-make-shallow @@ -1,4 +1,8 @@ #!/usr/bin/env python3 +# +# SPDX-License-Identifier: GPL-2.0-only +# + """git-make-shallow: make the current git repository shallow Remove the history of the specified revisions, then optionally filter the diff --git a/external/poky/bitbake/bin/toaster b/external/poky/bitbake/bin/toaster index ecf66fa5..6b90ee18 100755 --- a/external/poky/bitbake/bin/toaster +++ b/external/poky/bitbake/bin/toaster @@ -3,27 +3,18 @@ # toaster - shell script to start Toaster # Copyright (C) 2013-2015 Intel Corp. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# SPDX-License-Identifier: GPL-2.0-or-later # -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. HELP=" -Usage: source toaster start|stop [webport=] [noweb] [nobuild] [toasterdir] +Usage 1: source toaster start|stop [webport=] [noweb] [nobuild] [toasterdir] Optional arguments: [nobuild] Setup the environment for capturing builds with toaster but disable managed builds [noweb] Setup the environment for capturing builds with toaster but don't start the web server [webport] Set the development server (default: localhost:8000) [toasterdir] Set absolute path to be used as TOASTER_DIR (default: BUILDDIR/../) +Usage 2: source toaster manage [createsuperuser|lsupdates|migrate|makemigrations|checksettings|collectstatic|...] " custom_extention() @@ -218,13 +209,21 @@ for param in $*; do toasterdir=*) TOASTERDIR="${param#*=}" ;; + manage ) + CMD=$param + manage_cmd="" + ;; --help) echo "$HELP" return 0 ;; *) - echo "$HELP" - return 1 + if [ "manage" == "$CMD" ] ; then + manage_cmd="$manage_cmd $param" + else + echo "$HELP" + exit 1 + fi ;; esac @@ -316,6 +315,10 @@ case $CMD in stop_system echo "Successful ${CMD}." ;; + manage ) + cd $BBBASEDIR/lib/toaster + $MANAGE $manage_cmd + ;; esac custom_extention toaster_postpend $CMD $ADDR_PORT diff --git a/external/poky/bitbake/bin/toaster-eventreplay b/external/poky/bitbake/bin/toaster-eventreplay index 80967a09..8fa4ab71 100755 --- a/external/poky/bitbake/bin/toaster-eventreplay +++ b/external/poky/bitbake/bin/toaster-eventreplay @@ -1,25 +1,12 @@ #!/usr/bin/env python3 -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # Copyright (C) 2014 Alex Damian # +# SPDX-License-Identifier: GPL-2.0-only +# # This file re-uses code spread throughout other Bitbake source files. # As such, all other copyrights belong to their own right holders. # -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. """ This command takes a filename as a single parameter. The filename is read diff --git a/external/poky/bitbake/contrib/autobuilderlog.json b/external/poky/bitbake/contrib/autobuilderlog.json new file mode 100644 index 00000000..193a675a --- /dev/null +++ b/external/poky/bitbake/contrib/autobuilderlog.json @@ -0,0 +1,13 @@ +{ + "version": 1, + "loggers": { + "BitBake.SigGen.HashEquiv": { + "level": "VERBOSE", + "handlers": ["BitBake.verbconsole"] + }, + "BitBake.RunQueue.HashEquiv": { + "level": "VERBOSE", + "handlers": ["BitBake.verbconsole"] + } + } +} diff --git a/external/poky/bitbake/contrib/dump_cache.py b/external/poky/bitbake/contrib/dump_cache.py index 8963ca4b..c6723cbf 100755 --- a/external/poky/bitbake/contrib/dump_cache.py +++ b/external/poky/bitbake/contrib/dump_cache.py @@ -1,6 +1,4 @@ #!/usr/bin/env python3 -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # Copyright (C) 2012, 2018 Wind River Systems, Inc. # diff --git a/external/poky/bitbake/contrib/vim/indent/bitbake.vim b/external/poky/bitbake/contrib/vim/indent/bitbake.vim new file mode 100644 index 00000000..13810340 --- /dev/null +++ b/external/poky/bitbake/contrib/vim/indent/bitbake.vim @@ -0,0 +1,343 @@ +" Vim indent file +" Language: BitBake +" Copyright: Copyright (C) 2019 Agilent Technologies, Inc. +" Maintainer: Chris Laplante +" License: You may redistribute this under the same terms as Vim itself + + +if exists("b:did_indent") + finish +endif + +if exists("*BitbakeIndent") + finish +endif + +runtime! indent/sh.vim +unlet b:did_indent + +setlocal indentexpr=BitbakeIndent(v:lnum) +setlocal autoindent nolisp + +function s:is_bb_python_func_def(lnum) + let stack = synstack(a:lnum, 1) + if len(stack) == 0 + return 0 + endif + + let top = synIDattr(stack[0], "name") + echo top + + return synIDattr(stack[0], "name") == "bbPyFuncDef" +endfunction + +"""" begin modified from indent/python.vim, upstream commit 7a9bd7c1e0ce1baf5a02daf36eeae3638aa315c7 +"""" This copied code is licensed the same as Vim itself. +setlocal indentkeys+=<:>,=elif,=except + +let s:keepcpo= &cpo +set cpo&vim + +let s:maxoff = 50 " maximum number of lines to look backwards for () + +function GetPythonIndent(lnum) + + " If this line is explicitly joined: If the previous line was also joined, + " line it up with that one, otherwise add two 'shiftwidth' + if getline(a:lnum - 1) =~ '\\$' + if a:lnum > 1 && getline(a:lnum - 2) =~ '\\$' + return indent(a:lnum - 1) + endif + return indent(a:lnum - 1) + (exists("g:pyindent_continue") ? eval(g:pyindent_continue) : (shiftwidth() * 2)) + endif + + " If the start of the line is in a string don't change the indent. + if has('syntax_items') + \ && synIDattr(synID(a:lnum, 1, 1), "name") =~ "String$" + return -1 + endif + + " Search backwards for the previous non-empty line. + let plnum = prevnonblank(v:lnum - 1) + + if plnum == 0 + " This is the first non-empty line, use zero indent. + return 0 + endif + + call cursor(plnum, 1) + + " Identing inside parentheses can be very slow, regardless of the searchpair() + " timeout, so let the user disable this feature if he doesn't need it + let disable_parentheses_indenting = get(g:, "pyindent_disable_parentheses_indenting", 0) + + if disable_parentheses_indenting == 1 + let plindent = indent(plnum) + let plnumstart = plnum + else + " searchpair() can be slow sometimes, limit the time to 150 msec or what is + " put in g:pyindent_searchpair_timeout + let searchpair_stopline = 0 + let searchpair_timeout = get(g:, 'pyindent_searchpair_timeout', 150) + + " If the previous line is inside parenthesis, use the indent of the starting + " line. + " Trick: use the non-existing "dummy" variable to break out of the loop when + " going too far back. + let parlnum = searchpair('(\|{\|\[', '', ')\|}\|\]', 'nbW', + \ "line('.') < " . (plnum - s:maxoff) . " ? dummy :" + \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')" + \ . " =~ '\\(Comment\\|Todo\\|String\\)$'", + \ searchpair_stopline, searchpair_timeout) + if parlnum > 0 + " We may have found the opening brace of a BitBake Python task, e.g. 'python do_task {' + " If so, ignore it here - it will be handled later. + if s:is_bb_python_func_def(parlnum) + let parlnum = 0 + let plindent = indent(plnum) + let plnumstart = plnum + else + let plindent = indent(parlnum) + let plnumstart = parlnum + endif + else + let plindent = indent(plnum) + let plnumstart = plnum + endif + + " When inside parenthesis: If at the first line below the parenthesis add + " two 'shiftwidth', otherwise same as previous line. + " i = (a + " + b + " + c) + call cursor(a:lnum, 1) + let p = searchpair('(\|{\|\[', '', ')\|}\|\]', 'bW', + \ "line('.') < " . (a:lnum - s:maxoff) . " ? dummy :" + \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')" + \ . " =~ '\\(Comment\\|Todo\\|String\\)$'", + \ searchpair_stopline, searchpair_timeout) + if p > 0 + if s:is_bb_python_func_def(p) + " Handle first non-empty line inside a BB Python task + if p == plnum + return shiftwidth() + endif + + " Handle the user actually trying to close a BitBake Python task + let line = getline(a:lnum) + if line =~ '^\s*}' + return -2 + endif + + " Otherwise ignore the brace + let p = 0 + else + if p == plnum + " When the start is inside parenthesis, only indent one 'shiftwidth'. + let pp = searchpair('(\|{\|\[', '', ')\|}\|\]', 'bW', + \ "line('.') < " . (a:lnum - s:maxoff) . " ? dummy :" + \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')" + \ . " =~ '\\(Comment\\|Todo\\|String\\)$'", + \ searchpair_stopline, searchpair_timeout) + if pp > 0 + return indent(plnum) + (exists("g:pyindent_nested_paren") ? eval(g:pyindent_nested_paren) : shiftwidth()) + endif + return indent(plnum) + (exists("g:pyindent_open_paren") ? eval(g:pyindent_open_paren) : (shiftwidth() * 2)) + endif + if plnumstart == p + return indent(plnum) + endif + return plindent + endif + endif + + endif + + + " Get the line and remove a trailing comment. + " Use syntax highlighting attributes when possible. + let pline = getline(plnum) + let pline_len = strlen(pline) + if has('syntax_items') + " If the last character in the line is a comment, do a binary search for + " the start of the comment. synID() is slow, a linear search would take + " too long on a long line. + if synIDattr(synID(plnum, pline_len, 1), "name") =~ "\\(Comment\\|Todo\\)$" + let min = 1 + let max = pline_len + while min < max + let col = (min + max) / 2 + if synIDattr(synID(plnum, col, 1), "name") =~ "\\(Comment\\|Todo\\)$" + let max = col + else + let min = col + 1 + endif + endwhile + let pline = strpart(pline, 0, min - 1) + endif + else + let col = 0 + while col < pline_len + if pline[col] == '#' + let pline = strpart(pline, 0, col) + break + endif + let col = col + 1 + endwhile + endif + + " If the previous line ended with a colon, indent this line + if pline =~ ':\s*$' + return plindent + shiftwidth() + endif + + " If the previous line was a stop-execution statement... + " TODO: utilize this logic to deindent when ending a bbPyDefRegion + if getline(plnum) =~ '^\s*\(break\|continue\|raise\|return\|pass\|bb\.fatal\)\>' + " See if the user has already dedented + if indent(a:lnum) > indent(plnum) - shiftwidth() + " If not, recommend one dedent + return indent(plnum) - shiftwidth() + endif + " Otherwise, trust the user + return -1 + endif + + " If the current line begins with a keyword that lines up with "try" + if getline(a:lnum) =~ '^\s*\(except\|finally\)\>' + let lnum = a:lnum - 1 + while lnum >= 1 + if getline(lnum) =~ '^\s*\(try\|except\)\>' + let ind = indent(lnum) + if ind >= indent(a:lnum) + return -1 " indent is already less than this + endif + return ind " line up with previous try or except + endif + let lnum = lnum - 1 + endwhile + return -1 " no matching "try"! + endif + + " If the current line begins with a header keyword, dedent + if getline(a:lnum) =~ '^\s*\(elif\|else\)\>' + + " Unless the previous line was a one-liner + if getline(plnumstart) =~ '^\s*\(for\|if\|try\)\>' + return plindent + endif + + " Or the user has already dedented + if indent(a:lnum) <= plindent - shiftwidth() + return -1 + endif + + return plindent - shiftwidth() + endif + + " When after a () construct we probably want to go back to the start line. + " a = (b + " + c) + " here + if parlnum > 0 + return plindent + endif + + return -1 + +endfunction + +let &cpo = s:keepcpo +unlet s:keepcpo + +""" end of stuff from indent/python.vim + + +let b:did_indent = 1 +setlocal indentkeys+=0\" + + +function BitbakeIndent(lnum) + if !has('syntax_items') + return -1 + endif + + let stack = synstack(a:lnum, 1) + if len(stack) == 0 + return -1 + endif + + let name = synIDattr(stack[0], "name") + + " TODO: support different styles of indentation for assignments. For now, + " we only support like this: + " VAR = " \ + " value1 \ + " value2 \ + " " + " + " i.e. each value indented by shiftwidth(), with the final quote " completely unindented. + if name == "bbVarValue" + " Quote handling is tricky. kernel.bbclass has this line for instance: + " EXTRA_OEMAKE = " HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" " HOSTCPP="${BUILD_CPP}"" + " Instead of trying to handle crazy cases like that, just assume that a + " double-quote on a line by itself (following an assignment) means the + " user is closing the assignment, and de-dent. + if getline(a:lnum) =~ '^\s*"$' + return 0 + endif + + let prevstack = synstack(a:lnum - 1, 1) + if len(prevstack) == 0 + return -1 + endif + + let prevname = synIDattr(prevstack[0], "name") + + " Only indent if there was actually a continuation character on + " the previous line, to avoid misleading indentation. + let prevlinelastchar = synIDattr(synID(a:lnum - 1, col([a:lnum - 1, "$"]) - 1, 1), "name") + let prev_continued = prevlinelastchar == "bbContinue" + + " Did the previous line introduce an assignment? + if index(["bbVarDef", "bbVarFlagDef"], prevname) != -1 + if prev_continued + return shiftwidth() + endif + endif + + if !prev_continued + return 0 + endif + + " Autoindent can take it from here + return -1 + endif + + if index(["bbPyDefRegion", "bbPyFuncRegion"], name) != -1 + let ret = GetPythonIndent(a:lnum) + " Should normally always be indented by at least one shiftwidth; but allow + " return of -1 (defer to autoindent) or -2 (force indent to 0) + if ret == 0 + return shiftwidth() + elseif ret == -2 + return 0 + endif + return ret + endif + + " TODO: GetShIndent doesn't detect tasks prepended with 'fakeroot' + " Need to submit a patch upstream to Vim to provide an extension point. + " Unlike the Python indenter, the Sh indenter is way too large to copy and + " modify here. + if name == "bbShFuncRegion" + return GetShIndent() + endif + + " TODO: + " + heuristics for de-denting out of a bbPyDefRegion? e.g. when the user + " types an obvious BB keyword like addhandler or addtask, or starts + " writing a shell task. Maybe too hard to implement... + + return -1 +endfunction diff --git a/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-execution.xml b/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-execution.xml index f1caaecd..e4251dff 100644 --- a/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-execution.xml +++ b/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-execution.xml @@ -31,7 +31,7 @@ Prior to executing BitBake, you should take advantage of available parallel thread execution on your build host by setting the - BB_NUMBER_THREADS + BB_NUMBER_THREADS variable in your project's local.conf configuration file. @@ -87,9 +87,9 @@ The layer.conf files are used to construct key variables such as - BBPATH + BBPATH and - BBFILES. + BBFILES. BBPATH is used to search for configuration and class files under the conf and classes @@ -113,23 +113,23 @@ - Prior to parsing configuration files, Bitbake looks + Prior to parsing configuration files, BitBake looks at certain variables, including: - BB_ENV_WHITELIST + BB_ENV_WHITELIST - BB_ENV_EXTRAWHITE + BB_ENV_EXTRAWHITE - BB_PRESERVE_ENV + BB_PRESERVE_ENV - BB_ORIGENV + BB_ORIGENV - BITBAKE_UI + BITBAKE_UI The first four variables in this list relate to how BitBake treats shell @@ -156,7 +156,7 @@ BitBake first searches the current working directory for an optional conf/bblayers.conf configuration file. This file is expected to contain a - BBLAYERS + BBLAYERS variable that is a space-delimited list of 'layer' directories. Recall that if BitBake cannot find a bblayers.conf file, then it is assumed the user has set the BBPATH @@ -166,10 +166,10 @@ For each directory (layer) in this list, a conf/layer.conf file is located and parsed with the - LAYERDIR + LAYERDIR variable being set to the directory where the layer was found. The idea is these files automatically set up - BBPATH + BBPATH and other variables correctly for a given build directory. @@ -189,7 +189,7 @@ depending on the environment variables previously mentioned or set in the configuration files. The - "Variables Glossary" + "Variables Glossary" chapter presents a full list of variables. @@ -204,7 +204,7 @@ The base.bbclass file is always included. Other classes that are specified in the configuration using the - INHERIT + INHERIT variable are also included. BitBake searches for class files in a classes subdirectory under @@ -270,7 +270,7 @@ During the configuration phase, BitBake will have set - BBFILES. + BBFILES. BitBake now uses it to construct a list of recipes to parse, along with any append files (.bbappend) to apply. @@ -292,7 +292,7 @@ Any inherit statements cause BitBake to find and then parse class files (.bbclass) using - BBPATH + BBPATH as the search path. Finally, BitBake parses in order any append files found in BBFILES. @@ -303,8 +303,8 @@ pieces of metadata. For example, in bitbake.conf the recipe name and version are used to set the variables - PN and - PV: + PN and + PV: PN = "${@bb.parse.BBHandler.vars_from_file(d.getVar('FILE', False),d)[0] or 'defaultpkgname'}" PV = "${@bb.parse.BBHandler.vars_from_file(d.getVar('FILE', False),d)[1] or '1.0'}" @@ -336,10 +336,10 @@ recipe information. The validity of this cache is determined by first computing a checksum of the base configuration data (see - BB_HASHCONFIG_WHITELIST) + BB_HASHCONFIG_WHITELIST) and then checking if the checksum matches. If that checksum matches what is in the cache and the recipe - and class files have not changed, Bitbake is able to use + and class files have not changed, BitBake is able to use the cache. BitBake then reloads the cached information about the recipe instead of reparsing it from scratch. @@ -384,9 +384,9 @@ the recipe can be known. Each recipe's PROVIDES list is created implicitly through the recipe's - PN variable + PN variable and explicitly through the recipe's - PROVIDES + PROVIDES variable, which is optional. @@ -427,9 +427,9 @@ PREFERRED_PROVIDER_virtual/kernel = "linux-yocto" The default - PREFERRED_PROVIDER + PREFERRED_PROVIDER is the provider with the same name as the target. - Bitbake iterates through each target it needs to build and + BitBake iterates through each target it needs to build and resolves them and their dependencies using this process. @@ -439,10 +439,10 @@ BitBake defaults to the highest version of a provider. Version comparisons are made using the same method as Debian. You can use the - PREFERRED_VERSION + PREFERRED_VERSION variable to specify a particular version. You can influence the order by using the - DEFAULT_PREFERENCE + DEFAULT_PREFERENCE variable. @@ -464,7 +464,7 @@ BitBake defaults to selecting the most recent version, unless otherwise specified. If the recipe in question has a - DEFAULT_PREFERENCE + DEFAULT_PREFERENCE set lower than the other recipes (default is 0), then it will not be selected. This allows the person or persons maintaining @@ -475,9 +475,9 @@ If the first recipe is named a_1.1.bb, then the - PN variable + PN variable will be set to “a”, and the - PV + PV variable will be set to 1.1. @@ -532,11 +532,11 @@ Dependencies are defined through several variables. You can find information about variables BitBake uses in - the Variables Glossary + the Variables Glossary near the end of this manual. At a basic level, it is sufficient to know that BitBake uses the - DEPENDS and - RDEPENDS variables when + DEPENDS and + RDEPENDS variables when calculating dependencies. @@ -560,7 +560,7 @@ The build now starts with BitBake forking off threads up to the limit set in the - BB_NUMBER_THREADS + BB_NUMBER_THREADS variable. BitBake continues to fork threads as long as there are tasks ready to run, those tasks have all their dependencies met, and the thread threshold has not been @@ -574,7 +574,7 @@ As each task completes, a timestamp is written to the directory specified by the - STAMP variable. + STAMP variable. On subsequent runs, BitBake looks in the build directory within tmp/stamps and does not rerun tasks that are already completed unless a timestamp is found to be invalid. @@ -618,12 +618,12 @@ Tasks can be either a shell task or a Python task. For shell tasks, BitBake writes a shell script to - ${T}/run.do_taskname.pid + ${T}/run.do_taskname.pid and then executes the script. The generated shell script contains all the exported variables, and the shell functions with all variables expanded. Output from the shell script goes to the file - ${T}/log.do_taskname.pid. + ${T}/log.do_taskname.pid. Looking at the expanded shell functions in the run file and the output in the log files is a useful debugging technique. @@ -645,10 +645,10 @@ behavior: - BB_SCHEDULER + BB_SCHEDULER - BB_SCHEDULERS + BB_SCHEDULERS It is possible to have functions run before and after a task's main @@ -684,7 +684,7 @@ The simplistic approach for excluding the working directory is to set it to some fixed value and create the checksum for the "run" script. BitBake goes one step better and uses the - BB_HASHBASE_WHITELIST + BB_HASHBASE_WHITELIST variable to define a list of variables that should never be included when generating the signatures. @@ -795,7 +795,7 @@ This results in any metadata change that changes the task hash, automatically causing the task to be run again. This removes the need to bump - PR + PR values, and changes to metadata automatically ripple across the build. @@ -821,7 +821,7 @@ It is worth noting that BitBake's "-S" option lets you - debug Bitbake's processing of signatures. + debug BitBake's processing of signatures. The options passed to -S allow different debugging modes to be used, either using BitBake's own debug functions or possibly those defined in the metadata/signature handler @@ -884,7 +884,7 @@ BitBake first calls the function defined by the - BB_HASHCHECK_FUNCTION + BB_HASHCHECK_FUNCTION variable with a list of tasks and corresponding hashes it wants to build. This function is designed to be fast and returns a list @@ -908,7 +908,7 @@ For example, it is pointless to obtain a compiler if you already have the compiled binary. To handle this, BitBake calls the - BB_SETSCENE_DEPVALID + BB_SETSCENE_DEPVALID function for each successful setscene task to know whether or not it needs to obtain the dependencies of that task. @@ -916,7 +916,7 @@ Finally, after all the setscene tasks have executed, BitBake calls the function listed in - BB_SETSCENE_VERIFY_FUNCTION2 + BB_SETSCENE_VERIFY_FUNCTION2 with the list of tasks BitBake thinks has been "covered". The metadata can then ensure that this list is correct and can inform BitBake that it wants specific tasks to be run regardless @@ -929,4 +929,101 @@ section. + +
+ Logging + + In addition to the standard command line option to control how + verbose builds are when execute, bitbake also supports user defined + configuration of the + Python logging + facilities through the + BB_LOGCONFIG + variable. This variable defines a json or yaml + logging configuration + that will be intelligently merged into the default configuration. + The logging configuration is merged using the following rules: + + + The user defined configuration will completely replace the default + configuration if top level key + bitbake_merge is set to the value + False. In this case, all other rules + are ignored. + + + The user configuration must have a top level + version which must match the value of + the default configuration. + + + Any keys defined in the handlers, + formatters, or filters, + will be merged into the same section in the default + configuration, with the user specified keys taking + replacing a default one if there is a conflict. In + practice, this means that if both the default configuration + and user configuration specify a handler named + myhandler, the user defined one will + replace the default. To prevent the user from inadvertently + replacing a default handler, formatter, or filter, all of + the default ones are named with a prefix of + "BitBake." + + + If a logger is defined by the user with the key + bitbake_merge set to + False, that logger will be completely + replaced by user configuration. In this case, no other + rules will apply to that logger. + + + All user defined filter and + handlers properties for a given logger + will be merged with corresponding properties from the + default logger. For example, if the user configuration adds + a filter called myFilter to the + BitBake.SigGen, and the default + configuration adds a filter called + BitBake.defaultFilter, both filters + will be applied to the logger + + + + + + As an example, consider the following user logging configuration + file which logs all Hash Equivalence related messages of VERBOSE or + higher to a file called hashequiv.log + + { + "version": 1, + "handlers": { + "autobuilderlog": { + "class": "logging.FileHandler", + "formatter": "logfileFormatter", + "level": "DEBUG", + "filename": "hashequiv.log", + "mode": "w" + } + }, + "formatters": { + "logfileFormatter": { + "format": "%(name)s: %(levelname)s: %(message)s" + } + }, + "loggers": { + "BitBake.SigGen.HashEquiv": { + "level": "VERBOSE", + "handlers": ["autobuilderlog"] + }, + "BitBake.RunQueue.HashEquiv": { + "level": "VERBOSE", + "handlers": ["autobuilderlog"] + } + } + } + + +
diff --git a/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-fetching.xml b/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-fetching.xml index 92b2c3d1..d1bfc233 100644 --- a/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-fetching.xml +++ b/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-fetching.xml @@ -44,7 +44,7 @@ This code sets up an instance of the fetch class. The instance uses a space-separated list of URLs from the - SRC_URI + SRC_URI variable and then calls the download method to download the files.
@@ -78,7 +78,7 @@ Pre-mirror Sites: BitBake first uses pre-mirrors to try and find source files. These locations are defined using the - PREMIRRORS + PREMIRRORS variable. Source URI: @@ -88,7 +88,7 @@ Mirror Sites: If fetch failures occur, BitBake next uses mirror locations as defined by the - MIRRORS + MIRRORS variable. @@ -139,12 +139,12 @@ - Since network accesses are slow, Bitbake maintains a + Since network accesses are slow, BitBake maintains a cache of files downloaded from the network. Any source files that are not local (i.e. downloaded from the Internet) are placed into the download directory, which is specified by the - DL_DIR + DL_DIR variable. @@ -184,11 +184,11 @@ If - BB_STRICT_CHECKSUM + BB_STRICT_CHECKSUM is set, any download without a checksum triggers an error message. The - BB_NO_NETWORK + BB_NO_NETWORK variable can be used to make any attempted network access a fatal error, which is useful for checking that mirrors are complete as well as other things. @@ -265,11 +265,11 @@ The filename you specify within the URL can be either an absolute or relative path to a file. If the filename is relative, the contents of the - FILESPATH + FILESPATH variable is used in the same way PATH is used to find executables. If the file cannot be found, it is assumed that it is available in - DL_DIR + DL_DIR by the time the download() method is called. @@ -304,7 +304,7 @@ allows the name of the downloaded file to be specified. Specifying the name of the downloaded file is useful for avoiding collisions in - DL_DIR + DL_DIR when dealing with multiple files that have the same name. @@ -355,7 +355,7 @@ A special value of "now" causes the checkout to be updated on every build. - CVSDIR: + CVSDIR: Specifies where a temporary checkout is saved. The location is often DL_DIR/cvs. @@ -395,7 +395,7 @@ "date": Specifies a date. If no "date" is specified, the - SRCDATE + SRCDATE of the configuration is used to checkout a specific date. The special value of "now" causes the checkout to be updated on every build. @@ -406,7 +406,7 @@ to which the module is unpacked. You are forcing the module into a special directory relative to - CVSDIR. + CVSDIR. "rsh" Used in conjunction with the "method" parameter. @@ -448,7 +448,7 @@ FETCHCMD_svn, which defaults to "svn". The fetcher's temporary working directory is set by - SVNDIR, + SVNDIR, which is usually DL_DIR/svn. @@ -509,7 +509,7 @@ source control system. The fetcher works by creating a bare clone of the remote into - GITDIR, + GITDIR, which is usually DL_DIR/git2. This bare clone is then cloned into the work directory during the unpack stage when a specific tree is checked out. @@ -612,7 +612,7 @@ This fetcher submodule inherits from the Git fetcher and extends that fetcher's behavior by fetching a repository's submodules. - SRC_URI + SRC_URI is passed to the Git fetcher as described in the "Git Fetcher (git://)" section. @@ -647,9 +647,9 @@ To use this fetcher, make sure your recipe has proper - SRC_URI, - SRCREV, and - PV settings. + SRC_URI, + SRCREV, and + PV settings. Here is an example: SRC_URI = "ccrc://cc.example.org/ccrc;vob=/example_vob;module=/example_module" @@ -734,15 +734,15 @@ FETCHCMD_p4, which defaults to "p4". The fetcher's temporary working directory is set by - P4DIR, + P4DIR, which defaults to "DL_DIR/p4". To use this fetcher, make sure your recipe has proper - SRC_URI, - SRCREV, and - PV values. + SRC_URI, + SRCREV, and + PV values. The p4 executable is able to use the config file defined by your system's P4CONFIG environment variable in order to define the Perforce server URL and port, username, and @@ -793,9 +793,9 @@ google-repo source control system. The fetcher works by initiating and syncing sources of the repository into - REPODIR, + REPODIR, which is usually - DL_DIR/repo. + DL_DIR/repo. @@ -832,19 +832,22 @@ Bazaar (bzr://) - Trees using Git Annex (gitannex://) + Mercurial (hg://) - Secure FTP (sftp://) + npm (npm://) - Secure Shell (ssh://) + OSC (osc://) - OSC (osc://) + Secure FTP (sftp://) - Mercurial (hg://) + Secure Shell (ssh://) + + + Trees using Git Annex (gitannex://) No documentation currently exists for these lesser used diff --git a/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-hello.xml b/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-hello.xml index 9076f0fc..11eb36aa 100644 --- a/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-hello.xml +++ b/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-hello.xml @@ -166,7 +166,7 @@ Having a project directory is a good way to isolate your project. - Run Bitbake: + Run BitBake: At this point, you have nothing but a project directory. Run the bitbake command and see what it does: @@ -194,10 +194,10 @@ When you run BitBake, it begins looking for metadata files. The - BBPATH + BBPATH variable is what tells BitBake where to look for those files. BBPATH is not set and you need to set it. - Without BBPATH, Bitbake cannot + Without BBPATH, BitBake cannot find any configuration files (.conf) or recipe files (.bb) at all. BitBake also cannot find the bitbake.conf @@ -225,7 +225,7 @@ as the shell would. - Run Bitbake: + Run BitBake: Now that you have BBPATH defined, run the bitbake command again: @@ -273,14 +273,14 @@ some editor to create the bitbake.conf so that it contains the following: - PN = "${@bb.parse.BBHandler.vars_from_file(d.getVar('FILE', False),d)[0] or 'defaultpkgname'}" + PN = "${@bb.parse.BBHandler.vars_from_file(d.getVar('FILE', False),d)[0] or 'defaultpkgname'}" - TMPDIR = "${TOPDIR}/tmp" - CACHE = "${TMPDIR}/cache" - STAMP = "${TMPDIR}/${PN}/stamps" - T = "${TMPDIR}/${PN}/work" - B = "${TMPDIR}/${PN}" + TMPDIR = "${TOPDIR}/tmp" + CACHE = "${TMPDIR}/cache" + STAMP = "${TMPDIR}/${PN}/stamps" + T = "${TMPDIR}/${PN}/work" + B = "${TMPDIR}/${PN}" Without a value for PN, the @@ -313,7 +313,7 @@ example, click on the links to take you to the definitions in the glossary. - Run Bitbake: + Run BitBake: After making sure that the conf/bitbake.conf file exists, you can run the bitbake command again: @@ -364,7 +364,7 @@ more depending on which build environments BitBake is supporting. - Run Bitbake: + Run BitBake: After making sure that the classes/base.bbclass file exists, you can run the bitbake command again: @@ -402,12 +402,12 @@ Move to the conf directory and create a layer.conf file that has the following: - BBPATH .= ":${LAYERDIR}" + BBPATH .= ":${LAYERDIR}" - BBFILES += "${LAYERDIR}/*.bb" + BBFILES += "${LAYERDIR}/*.bb" - BBFILE_COLLECTIONS += "mylayer" - BBFILE_PATTERN_mylayer := "^${LAYERDIR_RE}/" + BBFILE_COLLECTIONS += "mylayer" + BBFILE_PATTERN_mylayer := "^${LAYERDIR_RE}/" For information on these variables, click the links to go to the definitions in the glossary. @@ -416,9 +416,9 @@ a recipe file named printhello.bb that has the following: - DESCRIPTION = "Prints Hello World" - PN = 'printhello' - PV = '1' + DESCRIPTION = "Prints Hello World" + PN = 'printhello' + PV = '1' python do_build() { bb.plain("********************"); @@ -434,7 +434,7 @@ For more information on these variables, follow the links to the glossary. - Run Bitbake With a Target: + Run BitBake With a Target: Now that a BitBake target exists, run the command and provide that target: @@ -468,7 +468,7 @@ You need to provide your own information for you in the file. - Run Bitbake With a Target: + Run BitBake With a Target: Now that you have supplied the bblayers.conf file, run the bitbake command and provide the target: diff --git a/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-intro.xml b/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-intro.xml index f7d312a3..995c2fa7 100644 --- a/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-intro.xml +++ b/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-intro.xml @@ -127,7 +127,7 @@ (e.g. Cygwin, the BSDs, and so forth). - Be self contained, rather than tightly + Be self-contained, rather than tightly integrated into the build machine's root filesystem. @@ -221,6 +221,8 @@ them How to configure and compile the source code + How to assemble the generated artifacts into + one or more installable packages Where on the target machine to install the package or packages created @@ -229,7 +231,7 @@ Within the context of BitBake, or any project utilizing BitBake as its build system, files with the .bb - extension are referred to as recipes. + extension are referred to as recipes. The term "package" is also commonly used to describe recipes. However, since the same word is used to describe packaged @@ -252,9 +254,9 @@ various configuration variables that govern the project's build process. These files fall into several areas that define - machine configuration options, distribution configuration - options, compiler tuning options, general common - configuration options, and user configuration options. + machine configuration, distribution configuration, + possible compiler tuning, general common + configuration, and user configuration. The main configuration file is the sample bitbake.conf file, which is located within the BitBake source tree @@ -292,7 +294,7 @@ Layers allow you to isolate different types of customizations from each other. While you might find it tempting to keep everything in one layer - when working on a single project, the more modular you organize + when working on a single project, the more modular your metadata, the easier it is to cope with future changes. @@ -300,8 +302,8 @@ To illustrate how you can use layers to keep things modular, consider customizations you might make to support a specific target machine. These types of customizations typically reside in a special layer, - rather than a general layer, called a Board Support Package (BSP) - Layer. + rather than a general layer, called a Board Support Package (BSP) + layer. Furthermore, the machine customizations should be isolated from recipes and metadata that support a new GUI environment, for example. @@ -448,7 +450,7 @@ Using the BitBake that Comes With Your Build Checkout: A final possibility for getting a copy of BitBake is that it - already comes with your checkout of a larger Bitbake-based build + already comes with your checkout of a larger BitBake-based build system, such as Poky. Rather than manually checking out individual layers and gluing them together yourself, you can check @@ -692,14 +694,9 @@ - When you generate a dependency graph, BitBake writes three files + When you generate a dependency graph, BitBake writes two files to the current working directory: - - recipe-depends.dot: - Shows dependencies between recipes (i.e. a collapsed version of - task-depends.dot). - task-depends.dot: Shows dependencies between tasks. @@ -781,7 +778,7 @@ target, you must also enable BitBake to perform multiple configuration builds. Enabling is accomplished by setting the - BBMULTICONFIG + BBMULTICONFIG variable in the local.conf configuration file. As an example, suppose you had configuration files @@ -791,7 +788,7 @@ The following statement in the local.conf file both enables BitBake to perform multiple configuration builds and - specifies the two multiconfigs: + specifies the two extra multiconfigs: BBMULTICONFIG = "target1 target2" @@ -803,13 +800,13 @@ builds, use the following command form to start the builds: - $ bitbake [multiconfig:multiconfigname:]target [[[multiconfig:multiconfigname:]target] ... ] + $ bitbake [mc:multiconfigname:]target [[[mc:multiconfigname:]target] ... ] - Here is an example for two multiconfigs: + Here is an example for two extra multiconfigs: target1 and target2: - $ bitbake multiconfig:target1:target multiconfig:target2:target + $ bitbake mc::target mc:target1:target mc:target2:target @@ -837,13 +834,13 @@ build, you must declare the dependencies in the recipe using the following statement form: - task_or_package[mcdepends] = "multiconfig:from_multiconfig:to_multiconfig:recipe_name:task_on_which_to_depend" + task_or_package[mcdepends] = "mc:from_multiconfig:to_multiconfig:recipe_name:task_on_which_to_depend" To better show how to use this statement, consider an example with two multiconfigs: target1 and target2: - image_task[mcdepends] = "multiconfig:target1:target2:image2:rootfs_task" + image_task[mcdepends] = "mc:target1:target2:image2:rootfs_task" In this example, the from_multiconfig is "target1" and @@ -859,7 +856,7 @@ Once you set up this dependency, you can build the "target1" multiconfig using a BitBake command as follows: - $ bitbake multiconfig:target1:image1 + $ bitbake mc:target1:image1 This command executes all the tasks needed to create image1 for the "target1" @@ -875,7 +872,7 @@ Consider this change to the statement in the image1 recipe: - image_task[mcdepends] = "multiconfig:target1:target2:image2:image_task" + image_task[mcdepends] = "mc:target1:target2:image2:image_task" In this case, BitBake must create image2 for the "target2" diff --git a/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml b/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml index d91f437d..0ca53216 100644 --- a/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml +++ b/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml @@ -5,7 +5,7 @@ Syntax and Operators - Bitbake files have their own syntax. + BitBake files have their own syntax. The syntax has similarities to several other languages but also has some unique features. This section describes the available syntax and operators @@ -61,6 +61,78 @@ +
+ Modifying Existing Variables + + + Sometimes you need to modify existing variables. + Following are some cases where you might find you want to + modify an existing variable: + + + Customize a recipe that uses the variable. + + + Change a variable's default value used in a + *.bbclass file. + + + Change the variable in a *.bbappend + file to override the variable in the original recipe. + + + Change the variable in a configuration file so that the + value overrides an existing configuration. + + + + + + Changing a variable value can sometimes depend on how the + value was originally assigned and also on the desired + intent of the change. + In particular, when you append a value to a variable that + has a default value, the resulting value might not be what + you expect. + In this case, the value you provide might replace the value + rather than append to the default value. + + + + If after you have changed a variable's value and something + unexplained occurs, you can use BitBake to check the actual + value of the suspect variable. + You can make these checks for both configuration and recipe + level changes: + + + For configuration changes, use the following: + + $ bitbake -e + + This command displays variable values after the + configuration files (i.e. local.conf, + bblayers.conf, + bitbake.conf and so forth) have + been parsed. + + Variables that are exported to the environment are + preceded by the string "export" in the command's + output. + + + + For recipe changes, use the following: + + $ bitbake recipe -e | grep VARIABLE=" + + This command checks to see if the variable actually + makes it into a specific recipe. + + + +
+
Line Joining @@ -222,17 +294,20 @@ rather than when the variable is actually used: T = "123" - A := "${B} ${A} test ${T}" + A := "test ${T}" T = "456" - B = "${T} bval" + B := "${T} ${C}" C = "cval" C := "${C}append" In this example, A contains - "test 123" because ${B} and - ${A} at the time of parsing are undefined, - which leaves "test 123". - And, the variable C + "test 123", even though the final value of T + is "456". + The variable B will end up containing "456 cvalappend". + This is because references to undefined variables are preserved as is + during (immediate)expansion. This is in contrast to GNU Make, where undefined + variables expand to nothing. + The variable C contains "cvalappend" since ${C} immediately expands to "cval". @@ -297,9 +372,8 @@ These operators differ from the ":=", ".=", "=.", "+=", and "=+" - operators in that their effects are deferred - until after parsing completes rather than being immediately - applied. + operators in that their effects are applied at variable + expansion time rather than being immediately applied. Here are some examples: B = "bval" @@ -348,18 +422,22 @@ FOO = "123 456 789 123456 123 456 123 456" FOO_remove = "123" FOO_remove = "456" - FOO2 = "abc def ghi abcdef abc def abc def" - FOO2_remove = "abc def" + FOO2 = " abc def ghi abcdef abc def abc def def" + FOO2_remove = " \ + def \ + abc \ + ghi \ + " The variable FOO becomes - "  789 123456    " + "  789 123456    " and FOO2 becomes - "  ghi abcdef    ". + "     abcdef      ". Like "_append" and "_prepend", "_remove" - is deferred until after parsing completes. + is applied at variable expansion time.
@@ -595,7 +673,7 @@ BitBake uses - OVERRIDES + OVERRIDES to control what variables are overridden after BitBake parses recipes and configuration files. This section describes how you can use @@ -705,7 +783,7 @@ Internally, this is implemented by prepending the task (e.g. "task-compile:") to the value of - OVERRIDES + OVERRIDES for the local datastore of the do_compile task. @@ -724,17 +802,15 @@ Key Expansion - Key expansion happens when the BitBake datastore is finalized - just before BitBake expands overrides. + Key expansion happens when the BitBake datastore is finalized. To better understand this, consider the following example: A${B} = "X" B = "2" A2 = "Y" - In this case, after all the parsing is complete, and - before any overrides are handled, BitBake expands - ${B} into "2". + In this case, after all the parsing is complete, + BitBake expands ${B} into "2". This expansion causes A2, which was set to "Y" before the expansion, to become "X". @@ -868,7 +944,7 @@ BitBake uses the - BBPATH + BBPATH variable to locate needed include and class files. Additionally, BitBake searches the current directory for include and require @@ -1086,7 +1162,7 @@ When creating a configuration file (.conf), you can use the - INHERIT + INHERIT configuration directive to inherit a class. BitBake only supports this directive when used within a configuration file. @@ -1341,7 +1417,7 @@
- Bitbake-Style Python Functions Versus Python Functions + BitBake-Style Python Functions Versus Python Functions Following are some important differences between @@ -1370,7 +1446,7 @@ BitBake-style Python functions generate a separate - ${T}/run.function-name.pid + ${T}/run.function-name.pid script that is executed to run the function, and also generate a log file in ${T}/log.function-name.pid @@ -1773,7 +1849,7 @@ things exported or listed in its whitelist to ensure that the build environment is reproducible and consistent. You can prevent this "cleaning" by setting the - BB_PRESERVE_ENV + BB_PRESERVE_ENV variable. Consequently, if you do want something to get passed into the @@ -1783,15 +1859,15 @@ Tell BitBake to load what you want from the environment into the datastore. You can do so through the - BB_ENV_WHITELIST + BB_ENV_WHITELIST and - BB_ENV_EXTRAWHITE + BB_ENV_EXTRAWHITE variables. For example, assume you want to prevent the build system from accessing your $HOME/.ccache directory. The following command "whitelists" the environment variable - CCACHE_DIR causing BitBack to allow that + CCACHE_DIR causing BitBake to allow that variable into the datastore: export BB_ENV_EXTRAWHITE="$BB_ENV_EXTRAWHITE CCACHE_DIR" @@ -1822,9 +1898,9 @@ Sometimes, it is useful to be able to obtain information from the original execution environment. - Bitbake saves a copy of the original environment into + BitBake saves a copy of the original environment into a special variable named - BB_ORIGENV. + BB_ORIGENV. @@ -1883,7 +1959,7 @@ [depends]: Controls inter-task dependencies. See the - DEPENDS + DEPENDS variable and the "Inter-Task Dependencies" section for more information. @@ -1891,7 +1967,7 @@ [deptask]: Controls task build-time dependencies. See the - DEPENDS + DEPENDS variable and the "Build Dependencies" section for more information. @@ -1937,7 +2013,7 @@ of cores but certain tasks need to be rate-limited due to various kinds of resource constraints (e.g. to avoid network throttling). number_threads works similarly to the - BB_NUMBER_THREADS + BB_NUMBER_THREADS variable but is task-specific. Set the value globally. @@ -1971,9 +2047,9 @@ [rdepends]: Controls inter-task runtime dependencies. See the - RDEPENDS + RDEPENDS variable, the - RRECOMMENDS + RRECOMMENDS variable, and the "Inter-Task Dependencies" section for more information. @@ -1981,9 +2057,9 @@ [rdeptask]: Controls task runtime dependencies. See the - RDEPENDS + RDEPENDS variable, the - RRECOMMENDS + RRECOMMENDS variable, and the "Runtime Dependencies" section for more information. @@ -1996,9 +2072,9 @@ [recrdeptask]: Controls task recursive runtime dependencies. See the - RDEPENDS + RDEPENDS variable, the - RRECOMMENDS + RRECOMMENDS variable, and the "Recursive Dependencies" section for more information. @@ -2127,7 +2203,7 @@ Any given datastore only has one such event executed against it, however. If - BB_INVALIDCONF + BB_INVALIDCONF is set in the datastore by the event handler, the configuration is reparsed and a new event triggered, allowing the metadata to update configuration. @@ -2256,17 +2332,17 @@ from a single recipe file multiple incarnations of that recipe file where all incarnations are buildable. These features are enabled through the - BBCLASSEXTEND + BBCLASSEXTEND and - BBVERSIONS + BBVERSIONS variables. The mechanism for this class extension is extremely specific to the implementation. Usually, the recipe's - PROVIDES, - PN, and - DEPENDS + PROVIDES, + PN, and + DEPENDS variables would need to be modified by the extension class. For specific examples, see the OE-Core native, nativesdk, @@ -2287,7 +2363,7 @@ project from a single recipe file. You can also specify conditional metadata (using the - OVERRIDES + OVERRIDES mechanism) for a single version, or an optionally named range of versions. Here is an example: @@ -2306,7 +2382,7 @@ into overrides, but it is also made available for the metadata to use in the variable that defines the base recipe versions for use in file:// search paths - (FILESPATH). + (FILESPATH). @@ -2408,7 +2484,7 @@ BitBake uses the - DEPENDS + DEPENDS variable to manage build time dependencies. The [deptask] varflag for tasks signifies the task of each @@ -2429,9 +2505,9 @@ BitBake uses the - PACKAGES, - RDEPENDS, and - RRECOMMENDS + PACKAGES, + RDEPENDS, and + RRECOMMENDS variables to manage runtime dependencies. @@ -2450,6 +2526,9 @@ In the previous example, the do_packagedata task of each item in RDEPENDS must have completed before do_package_qa can execute. + Although RDEPENDS contains entries from the + runtime dependency namespace, BitBake knows how to map them back + to the build-time dependency namespace, in which the tasks are defined.
@@ -2486,15 +2565,17 @@
- You might want to not only have BitBake look for - dependencies of those tasks, but also have BitBake look - for build-time and runtime dependencies of the dependent - tasks as well. - If that is the case, you need to reference the task name - itself in the task list: + BitBake allows a task to recursively depend on itself by + referencing itself in the task list: do_a[recrdeptask] = "do_a do_b" + In the same way as before, this means that the do_a + and do_b tasks of the current recipe and all + recipes reachable (by way of dependencies) from the recipe + must run before the do_a task can run. In this + case BitBake will ignore the current recipe's do_a + task circular dependency on itself. @@ -2543,7 +2624,7 @@ It is often necessary to access variables in the BitBake datastore using Python functions. - The Bitbake datastore has an API that allows you this + The BitBake datastore has an API that allows you this access. Here is a list of available operations: @@ -2686,7 +2767,7 @@ These checksums are stored in - STAMP. + STAMP. You can examine the checksums using the following BitBake command: $ bitbake-dumpsigs @@ -2708,44 +2789,44 @@ The following list describes related variables: - BB_HASHCHECK_FUNCTION: + BB_HASHCHECK_FUNCTION: Specifies the name of the function to call during the "setscene" part of the task's execution in order to validate the list of task hashes. - BB_SETSCENE_DEPVALID: + BB_SETSCENE_DEPVALID: Specifies a function BitBake calls that determines whether BitBake requires a setscene dependency to be met. - BB_SETSCENE_VERIFY_FUNCTION2: + BB_SETSCENE_VERIFY_FUNCTION2: Specifies a function to call that verifies the list of planned task execution before the main task execution happens. - BB_STAMP_POLICY: + BB_STAMP_POLICY: Defines the mode for comparing timestamps of stamp files. - BB_STAMP_WHITELIST: + BB_STAMP_WHITELIST: Lists stamp files that are looked at when the stamp policy is "whitelist". - BB_TASKHASH: + BB_TASKHASH: Within an executing task, this variable holds the hash of the task as returned by the currently enabled signature generator. - STAMP: + STAMP: The base path to create stamp files. - STAMPCLEAN: + STAMPCLEAN: Again, the base path to create stamp files but can use wildcards for matching a range of files for clean operations. diff --git a/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.xml b/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.xml index a84b2bc9..c4bd1f25 100644 --- a/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.xml +++ b/external/poky/bitbake/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.xml @@ -3,7 +3,7 @@ [ %poky; ] > - + Variables Glossary @@ -34,29 +34,29 @@ - + - A - B - C - D - E - F - G - H - + A + B + C + D + E + F + G + H + I - L - M + L + M - O - P + O + P - R - S - T + R + S + T @@ -65,13 +65,13 @@ - A + A - ASSUME_PROVIDED + ASSUME_PROVIDED Lists recipe names - (PN + (PN values) BitBake does not attempt to build. Instead, BitBake assumes these recipes have already been built. @@ -91,9 +91,9 @@ - B + B - B + B The directory in which BitBake executes functions @@ -102,7 +102,7 @@ - BB_ALLOWED_NETWORKS + BB_ALLOWED_NETWORKS Specifies a space-delimited list of hosts that the fetcher @@ -111,7 +111,7 @@ This host list is only used if - BB_NO_NETWORK + BB_NO_NETWORK is either not set or set to "0". @@ -151,13 +151,13 @@ Using BB_ALLOWED_NETWORKS in conjunction with - PREMIRRORS + PREMIRRORS is very useful. Adding the host you want to use to PREMIRRORS results in the source code being fetched from an allowed location and avoids raising an error when a host that is not allowed is in a - SRC_URI + SRC_URI statement. This is because the fetcher does not attempt to use the host listed in SRC_URI after a @@ -167,7 +167,7 @@ - BB_CONSOLELOG + BB_CONSOLELOG Specifies the path to a log file into which BitBake's user @@ -176,7 +176,7 @@ - BB_CURRENTTASK + BB_CURRENTTASK Contains the name of the currently running task. @@ -186,7 +186,7 @@ - BB_DANGLINGAPPENDS_WARNONLY + BB_DANGLINGAPPENDS_WARNONLY Defines how BitBake handles situations where an append @@ -208,7 +208,7 @@ - BB_DEFAULT_TASK + BB_DEFAULT_TASK The default task to use when none is specified (e.g. @@ -219,7 +219,7 @@ - BB_DISKMON_DIRS + BB_DISKMON_DIRS Monitors disk space and available inodes during the build @@ -245,7 +245,7 @@ build when a threshold is broken. Subsequent warnings are issued as defined by the - BB_DISKMON_WARNINTERVAL variable, + BB_DISKMON_WARNINTERVAL variable, which must be defined. <dir> is: @@ -275,7 +275,7 @@ BB_DISKMON_DIRS = "ABORT,${TMPDIR},,100K" The first example works only if you also set - the BB_DISKMON_WARNINTERVAL variable. + the BB_DISKMON_WARNINTERVAL variable. This example causes the build system to immediately abort when either the disk space in ${TMPDIR} drops below 1 Gbyte or the available free inodes drops below @@ -309,7 +309,7 @@ - BB_DISKMON_WARNINTERVAL + BB_DISKMON_WARNINTERVAL Defines the disk space and free inode warning intervals. @@ -319,7 +319,7 @@ If you are going to use the BB_DISKMON_WARNINTERVAL variable, you must also use the - BB_DISKMON_DIRS variable + BB_DISKMON_DIRS variable and define its action as "WARN". During the build, subsequent warnings are issued each time disk space or number of free inodes further reduces by @@ -374,7 +374,7 @@ - BB_ENV_WHITELIST + BB_ENV_WHITELIST Specifies the internal whitelist of variables to allow @@ -382,11 +382,11 @@ datastore. If the value of this variable is not specified (which is the default), the following list is used: - BBPATH, - BB_PRESERVE_ENV, - BB_ENV_WHITELIST, + BBPATH, + BB_PRESERVE_ENV, + BB_ENV_WHITELIST, and - BB_ENV_EXTRAWHITE. + BB_ENV_EXTRAWHITE. You must set this variable in the external environment in order for it to work. @@ -395,7 +395,7 @@ - BB_ENV_EXTRAWHITE + BB_ENV_EXTRAWHITE Specifies an additional set of variables to allow through @@ -403,7 +403,7 @@ datastore. This list of variables are on top of the internal list set in - BB_ENV_WHITELIST. + BB_ENV_WHITELIST. You must set this variable in the external environment in order for it to work. @@ -412,22 +412,22 @@ - BB_FETCH_PREMIRRORONLY + BB_FETCH_PREMIRRORONLY When set to "1", causes BitBake's fetcher module to only search - PREMIRRORS + PREMIRRORS for files. BitBake will not search the main - SRC_URI + SRC_URI or - MIRRORS. + MIRRORS. - BB_FILENAME + BB_FILENAME Contains the filename of the recipe that owns the currently @@ -440,12 +440,12 @@ - BB_GENERATE_MIRROR_TARBALLS + BB_GENERATE_MIRROR_TARBALLS Causes tarballs of the Git repositories, including the Git metadata, to be placed in the - DL_DIR + DL_DIR directory. Anyone wishing to create a source mirror would want to enable this variable. @@ -461,7 +461,7 @@ - BB_HASHCONFIG_WHITELIST + BB_HASHCONFIG_WHITELIST Lists variables that are excluded from base configuration @@ -485,7 +485,7 @@ - BB_HASHBASE_WHITELIST + BB_HASHBASE_WHITELIST Lists variables that are excluded from checksum and @@ -500,7 +500,7 @@ - BB_HASHCHECK_FUNCTION + BB_HASHCHECK_FUNCTION Specifies the name of the function to call during the @@ -524,7 +524,7 @@ - BB_INVALIDCONF + BB_INVALIDCONF Used in combination with the @@ -539,11 +539,22 @@ - BB_LOGFMT + BB_LOGCONFIG + + + Specifies the name of a config file that contains the user + logging configuration. See + Logging for additional + information + + + + + BB_LOGFMT Specifies the name of the log files saved into - ${T}. + ${T}. By default, the BB_LOGFMT variable is undefined and the log file names get created using the following form: @@ -556,7 +567,7 @@ - BB_NICE_LEVEL + BB_NICE_LEVEL Allows BitBake to run at a specific priority @@ -564,13 +575,13 @@ System permissions usually mean that BitBake can reduce its priority but not raise it again. See - BB_TASK_NICE_LEVEL + BB_TASK_NICE_LEVEL for additional information. - BB_NO_NETWORK + BB_NO_NETWORK Disables network access in the BitBake fetcher modules. @@ -587,7 +598,7 @@ - BB_NUMBER_THREADS + BB_NUMBER_THREADS The maximum number of tasks BitBake should run in parallel @@ -599,7 +610,7 @@ - BB_NUMBER_PARSE_THREADS + BB_NUMBER_PARSE_THREADS Sets the number of threads BitBake uses when parsing. @@ -609,7 +620,7 @@ - BB_ORIGENV + BB_ORIGENV Contains a copy of the original external environment in @@ -625,7 +636,7 @@ - BB_PRESERVE_ENV + BB_PRESERVE_ENV Disables whitelisting and instead allows all variables @@ -639,12 +650,12 @@ - BB_RUNFMT + BB_RUNFMT Specifies the name of the executable script files (i.e. run files) saved into - ${T}. + ${T}. By default, the BB_RUNFMT variable is undefined and the run file names get created using the following form: @@ -657,7 +668,7 @@ - BB_RUNTASK + BB_RUNTASK Contains the name of the currently executing task. @@ -669,7 +680,7 @@ - BB_SCHEDULER + BB_SCHEDULER Selects the name of the scheduler to use for the @@ -695,7 +706,7 @@ - BB_SCHEDULERS + BB_SCHEDULERS Defines custom schedulers to import. @@ -705,13 +716,13 @@ For information how to select a scheduler, see the - BB_SCHEDULER + BB_SCHEDULER variable. - BB_SETSCENE_DEPVALID + BB_SETSCENE_DEPVALID Specifies a function BitBake calls that determines @@ -731,7 +742,7 @@ - BB_SETSCENE_VERIFY_FUNCTION2 + BB_SETSCENE_VERIFY_FUNCTION2 Specifies a function to call that verifies the list of @@ -752,7 +763,7 @@ - BB_SIGNATURE_EXCLUDE_FLAGS + BB_SIGNATURE_EXCLUDE_FLAGS Lists variable flags (varflags) @@ -771,7 +782,7 @@ - BB_SIGNATURE_HANDLER + BB_SIGNATURE_HANDLER Defines the name of the signature handler BitBake uses. @@ -790,7 +801,7 @@ - BB_SRCREV_POLICY + BB_SRCREV_POLICY Defines the behavior of the fetcher when it interacts with @@ -817,7 +828,7 @@ - BB_STAMP_POLICY + BB_STAMP_POLICY Defines the mode used for how timestamps of stamp files @@ -836,7 +847,7 @@ whitelist - Identical to "full" mode except timestamp comparisons are made for recipes listed in the - BB_STAMP_WHITELIST + BB_STAMP_WHITELIST variable.
@@ -848,19 +859,19 @@ - BB_STAMP_WHITELIST + BB_STAMP_WHITELIST Lists files whose stamp file timestamps are compared when the stamp policy mode is set to "whitelist". For information on stamp policies, see the - BB_STAMP_POLICY + BB_STAMP_POLICY variable. - BB_STRICT_CHECKSUM + BB_STRICT_CHECKSUM Sets a more strict checksum mechanism for non-local URLs. @@ -871,7 +882,7 @@ - BB_TASK_IONICE_LEVEL + BB_TASK_IONICE_LEVEL Allows adjustment of a task's Input/Output priority. @@ -882,7 +893,7 @@ variable to adjust the I/O priority of these tasks. This variable works similarly to the - BB_TASK_NICE_LEVEL + BB_TASK_NICE_LEVEL variable except with a task's I/O priorities. @@ -921,7 +932,7 @@ - BB_TASK_NICE_LEVEL + BB_TASK_NICE_LEVEL Allows specific tasks to change their priority @@ -940,7 +951,7 @@ - BB_TASKHASH + BB_TASKHASH Within an executing task, this variable holds the hash @@ -950,7 +961,7 @@ - BB_VERBOSE_LOGS + BB_VERBOSE_LOGS Controls how verbose BitBake is during builds. @@ -960,7 +971,7 @@ - BB_WORKERCONTEXT + BB_WORKERCONTEXT Specifies if the current context is executing a task. @@ -973,7 +984,7 @@ - BBCLASSEXTEND + BBCLASSEXTEND Allows you to extend a recipe so that it builds variants @@ -1009,7 +1020,7 @@ _class-native. For example, to generate a native version of a recipe, a - DEPENDS + DEPENDS on "foo" is rewritten to a DEPENDS on "foo-native". @@ -1028,7 +1039,7 @@ - BBDEBUG + BBDEBUG Sets the BitBake debug output level to a specific value @@ -1042,7 +1053,7 @@ - BBFILE_COLLECTIONS + BBFILE_COLLECTIONS Lists the names of configured layers. These names are used to find the other BBFILE_* @@ -1053,10 +1064,10 @@ - BBFILE_PATTERN + BBFILE_PATTERN Variable that expands to match files from - BBFILES + BBFILES in a particular layer. This variable is used in the conf/layer.conf file and must be suffixed with the name of the specific layer (e.g. @@ -1064,7 +1075,7 @@ - BBFILE_PRIORITY + BBFILE_PRIORITY Assigns the priority for recipe files in each layer. This variable is useful in situations where the same recipe appears in @@ -1074,7 +1085,7 @@ letting you control the precedence for the multiple layers. The precedence established through this variable stands regardless of a recipe's version - (PV variable). + (PV variable). For example, a layer that has a recipe with a higher PV value but for which the BBFILE_PRIORITY is set to have a lower precedence still has a lower precedence. @@ -1083,7 +1094,7 @@ For example, the value 6 has a higher precedence than the value 5. If not specified, the BBFILE_PRIORITY variable is set based on layer dependencies (see the - LAYERDEPENDS variable for + LAYERDEPENDS variable for more information. The default priority, if unspecified for a layer with no dependencies, is the lowest defined priority + 1 @@ -1095,7 +1106,7 @@ - BBFILES + BBFILES A space-separated list of recipe files BitBake uses to @@ -1113,7 +1124,7 @@ - BBINCLUDED + BBINCLUDED Contains a space-separated list of all of all files that @@ -1123,7 +1134,7 @@ - BBINCLUDELOGS + BBINCLUDELOGS If set to a value, enables printing the task log when @@ -1132,11 +1143,11 @@ - BBINCLUDELOGS_LINES + BBINCLUDELOGS_LINES If - BBINCLUDELOGS + BBINCLUDELOGS is set, specifies the maximum number of lines from the task log file to print when reporting a failed task. If you do not set BBINCLUDELOGS_LINES, @@ -1145,7 +1156,7 @@ - BBLAYERS + BBLAYERS Lists the layers to enable during the build. This variable is defined in the bblayers.conf configuration @@ -1166,7 +1177,7 @@ - BBLAYERS_FETCH_DIR + BBLAYERS_FETCH_DIR Sets the base location where layers are stored. @@ -1178,7 +1189,7 @@ - BBMASK + BBMASK Prevents BitBake from processing recipes and recipe @@ -1236,7 +1247,7 @@ - BBMULTICONFIG + BBMULTICONFIG BBMULTICONFIG[doc] = "Enables BitBake to perform multiple configuration builds and lists each separate configuration (multiconfig)." @@ -1275,7 +1286,7 @@ - BBPATH + BBPATH Used by BitBake to locate class @@ -1302,7 +1313,7 @@ - BBSERVER + BBSERVER Points to the server that runs memory-resident BitBake. @@ -1312,7 +1323,7 @@ - BBTARGETS + BBTARGETS Allows you to use a configuration file to add to the list @@ -1321,14 +1332,14 @@ - BBVERSIONS + BBVERSIONS Allows a single recipe to build multiple versions of a project from a single recipe file. You also able to specify conditional metadata using the - OVERRIDES + OVERRIDES mechanism for a single version or for an optionally named range of versions. @@ -1342,7 +1353,7 @@ - BITBAKE_UI + BITBAKE_UI Used to specify the UI module to use when running BitBake. @@ -1356,7 +1367,7 @@ - BUILDNAME + BUILDNAME A name assigned to the build. @@ -1366,7 +1377,7 @@ - BZRDIR + BZRDIR The directory in which files checked out of a Bazaar @@ -1377,9 +1388,9 @@ - C + C - CACHE + CACHE Specifies the directory BitBake uses to store a cache @@ -1389,7 +1400,7 @@ - CVSDIR + CVSDIR The directory in which files checked out under the @@ -1400,9 +1411,9 @@ - D + D - DEFAULT_PREFERENCE + DEFAULT_PREFERENCE Specifies a weak bias for recipe selection priority. @@ -1413,20 +1424,20 @@ piece of software. Using the variable in this way causes the stable version of the recipe to build by default in the absence of - PREFERRED_VERSION + PREFERRED_VERSION being used to build the development version. The bias provided by DEFAULT_PREFERENCE is weak and is overridden by - BBFILE_PRIORITY + BBFILE_PRIORITY if that variable is different between two layers that contain different versions of the same recipe. - DEPENDS + DEPENDS Lists a recipe's build-time dependencies @@ -1451,13 +1462,13 @@ For information on runtime dependencies, see the - RDEPENDS + RDEPENDS variable. - DESCRIPTION + DESCRIPTION A long description for the recipe. @@ -1465,7 +1476,7 @@ - DL_DIR + DL_DIR The central download directory used by the build process to @@ -1474,7 +1485,7 @@ suitable for mirroring for everything except Git repositories. If you want tarballs of Git repositories, use the - BB_GENERATE_MIRROR_TARBALLS + BB_GENERATE_MIRROR_TARBALLS variable. @@ -1482,9 +1493,9 @@ - E + E - EXCLUDE_FROM_WORLD + EXCLUDE_FROM_WORLD Directs BitBake to exclude a recipe from world builds (i.e. @@ -1512,9 +1523,9 @@ - F + F - FAKEROOT + FAKEROOT Contains the command to use when running a shell script @@ -1527,19 +1538,19 @@ - FAKEROOTBASEENV + FAKEROOTBASEENV Lists environment variables to set when executing the command defined by - FAKEROOTCMD + FAKEROOTCMD that starts the bitbake-worker process in the fakeroot environment. - FAKEROOTCMD + FAKEROOTCMD Contains the command that starts the bitbake-worker @@ -1548,7 +1559,7 @@ - FAKEROOTDIRS + FAKEROOTDIRS Lists directories to create before running a task in @@ -1557,33 +1568,33 @@ - FAKEROOTENV + FAKEROOTENV Lists environment variables to set when running a task in the fakeroot environment. For additional information on environment variables and the fakeroot environment, see the - FAKEROOTBASEENV + FAKEROOTBASEENV variable. - FAKEROOTNOENV + FAKEROOTNOENV Lists environment variables to set when running a task that is not in the fakeroot environment. For additional information on environment variables and the fakeroot environment, see the - FAKEROOTENV + FAKEROOTENV variable. - FETCHCMD + FETCHCMD Defines the command the BitBake fetcher module @@ -1595,7 +1606,7 @@ - FILE + FILE Points at the current file. @@ -1607,7 +1618,7 @@ - FILESPATH + FILESPATH Specifies directories BitBake uses when searching for @@ -1625,9 +1636,9 @@ - G + G - GITDIR + GITDIR The directory in which a local copy of a Git repository @@ -1639,9 +1650,9 @@ - H + H - HGDIR + HGDIR The directory in which files checked out of a Mercurial @@ -1650,7 +1661,7 @@ - HOMEPAGE + HOMEPAGE Website where more information about the software the recipe is building can be found. @@ -1659,9 +1670,9 @@ - I + I - INHERIT + INHERIT Causes the named class or classes to be inherited globally. @@ -1691,15 +1702,15 @@ --> - L + L - LAYERDEPENDS + LAYERDEPENDS Lists the layers, separated by spaces, upon which this recipe depends. Optionally, you can specify a specific layer version for a dependency by adding it to the end of the layer name with a colon, (e.g. "anotherlayer:3" to be compared against - LAYERVERSION_anotherlayer + LAYERVERSION_anotherlayer in this case). BitBake produces an error if any dependency is missing or the version numbers do not match exactly (if specified). @@ -1710,7 +1721,7 @@ - LAYERDIR + LAYERDIR When used inside the layer.conf configuration file, this variable provides the path of the current layer. @@ -1719,22 +1730,22 @@ - LAYERDIR_RE + LAYERDIR_RE When used inside the layer.conf configuration file, this variable provides the path of the current layer, escaped for use in a regular expression - (BBFILE_PATTERN). + (BBFILE_PATTERN). This variable is not available outside of layer.conf and references are expanded immediately when parsing of the file completes. - LAYERVERSION + LAYERVERSION Optionally specifies the version of a layer as a single number. You can use this variable within - LAYERDEPENDS + LAYERDEPENDS for another layer in order to depend on a specific version of the layer. @@ -1744,7 +1755,7 @@ - LICENSE + LICENSE The list of source licenses for the recipe. @@ -1754,9 +1765,9 @@ - M + M - MIRRORS + MIRRORS Specifies additional paths from which BitBake gets source code. @@ -1764,14 +1775,14 @@ tries the local download directory. If that location fails, the build system tries locations defined by - PREMIRRORS, + PREMIRRORS, the upstream source, and then locations specified by MIRRORS in that order. - MULTI_PROVIDER_WHITELIST + MULTI_PROVIDER_WHITELIST Allows you to suppress BitBake warnings caused when @@ -1780,7 +1791,7 @@ - Bitbake normally issues a warning when building two + BitBake normally issues a warning when building two different recipes where each provides the same output. This scenario is usually something the user does not want. @@ -1804,9 +1815,9 @@ --> - O + O - OVERRIDES + OVERRIDES BitBake uses OVERRIDES to control @@ -1829,9 +1840,9 @@ - P + P - P4DIR + P4DIR The directory in which a local copy of a Perforce depot @@ -1840,14 +1851,14 @@ - PACKAGES + PACKAGES The list of packages the recipe creates. - PACKAGES_DYNAMIC + PACKAGES_DYNAMIC A promise that your recipe satisfies runtime dependencies @@ -1856,7 +1867,7 @@ does not actually satisfy the dependencies, it only states that they should be satisfied. For example, if a hard, runtime dependency - (RDEPENDS) + (RDEPENDS) of another package is satisfied during the build through the PACKAGES_DYNAMIC variable, but a package with the module name is never actually @@ -1865,7 +1876,7 @@ - PE + PE The epoch of the recipe. @@ -1877,7 +1888,7 @@ - PERSISTENT_DIR + PERSISTENT_DIR Specifies the directory BitBake uses to store data that @@ -1889,7 +1900,7 @@ - PF + PF Specifies the recipe or package name and includes all version and revision @@ -1899,27 +1910,27 @@ - PN + PN The recipe name. - PR + PR The revision of the recipe. - PREFERRED_PROVIDER + PREFERRED_PROVIDER Determines which recipe should be given preference when multiple recipes provide the same item. You should always suffix the variable with the name of the provided item, and you should set it to the - PN + PN of the recipe to which you want to give precedence. Some examples: @@ -1931,14 +1942,14 @@ - PREFERRED_PROVIDERS + PREFERRED_PROVIDERS Determines which recipe should be given preference for cases where multiple recipes provide the same item. Functionally, PREFERRED_PROVIDERS is identical to - PREFERRED_PROVIDER. + PREFERRED_PROVIDER. However, the PREFERRED_PROVIDERS variable lets you define preferences for multiple situations using the following form: @@ -1954,15 +1965,15 @@ - PREFERRED_VERSION + PREFERRED_VERSION If there are multiple versions of recipes available, this variable determines which recipe should be given preference. You must always suffix the variable with the - PN + PN you want to select, and you should set - PV + PV accordingly for precedence. @@ -1989,7 +2000,7 @@ - PREMIRRORS + PREMIRRORS Specifies additional paths from which BitBake gets source code. @@ -1998,7 +2009,7 @@ If that location fails, the build system tries locations defined by PREMIRRORS, the upstream source, and then locations specified by - MIRRORS + MIRRORS in that order. @@ -2022,20 +2033,20 @@ - PROVIDES + PROVIDES A list of aliases by which a particular recipe can be known. By default, a recipe's own - PN + PN is implicitly already in its PROVIDES list. If a recipe uses PROVIDES, the additional aliases are synonyms for the recipe and can be useful satisfying dependencies of other recipes during the build as specified by - DEPENDS. + DEPENDS. @@ -2059,7 +2070,7 @@ virtual target in PROVIDES. Recipes that depend on the functionality in question can include the virtual target in - DEPENDS + DEPENDS to leave the choice of provider open. @@ -2072,11 +2083,11 @@ - PRSERV_HOST + PRSERV_HOST The network based - PR + PR service host and port. @@ -2094,7 +2105,7 @@ - PV + PV The version of the recipe. @@ -2108,9 +2119,9 @@ --> - R + R - RDEPENDS + RDEPENDS Lists a package's runtime dependencies (i.e. other packages) @@ -2165,13 +2176,13 @@ For information on build-time dependencies, see the - DEPENDS + DEPENDS variable. - REPODIR + REPODIR The directory in which a local copy of a @@ -2181,14 +2192,14 @@ - RPROVIDES + RPROVIDES A list of package name aliases that a package also provides. These aliases are useful for satisfying runtime dependencies of other packages both during the build and on the target (as specified by - RDEPENDS). + RDEPENDS). As with all package-controlling variables, you must always @@ -2201,7 +2212,7 @@ - RRECOMMENDS + RRECOMMENDS A list of packages that extends the usability of a package @@ -2210,7 +2221,7 @@ packages in order to successfully build, but needs them for the extended usability. To specify runtime dependencies for packages, see the - RDEPENDS + RDEPENDS variable. @@ -2243,15 +2254,15 @@ - S + S - SECTION + SECTION The section in which packages should be categorized. - SRC_URI + SRC_URI The list of source files - local or remote. @@ -2272,7 +2283,7 @@ the metadata, from the local machine. The path is relative to the - FILESPATH + FILESPATH variable.
bzr:// - Fetches files from a Bazaar revision control repository. @@ -2322,7 +2333,7 @@ - SRCDATE + SRCDATE The date of the source code used to build the package. @@ -2331,7 +2342,7 @@ - SRCREV + SRCREV The revision of the source code used to build the package. @@ -2344,13 +2355,13 @@ - SRCREV_FORMAT + SRCREV_FORMAT Helps construct valid - SRCREV + SRCREV values when multiple source controlled URLs are used in - SRC_URI. + SRC_URI. @@ -2371,7 +2382,7 @@ - STAMP + STAMP Specifies the base path used to create recipe stamp files. @@ -2381,12 +2392,12 @@ - STAMPCLEAN + STAMPCLEAN Specifies the base path used to create recipe stamp files. Unlike the - STAMP + STAMP variable, STAMPCLEAN can contain wildcards to match the range of files a clean operation should remove. @@ -2396,7 +2407,7 @@ - SUMMARY + SUMMARY A short summary for the recipe, which is 72 characters or less. @@ -2404,7 +2415,7 @@ - SVNDIR + SVNDIR The directory in which files checked out of a Subversion @@ -2415,9 +2426,9 @@ - T + T - T + T Points to a directory were BitBake places temporary files, which consist mostly of task logs and @@ -2426,7 +2437,7 @@ - TOPDIR + TOPDIR Points to the build directory. diff --git a/external/poky/bitbake/doc/poky.ent b/external/poky/bitbake/doc/poky.ent index c032e141..85d9c83b 100644 --- a/external/poky/bitbake/doc/poky.ent +++ b/external/poky/bitbake/doc/poky.ent @@ -17,13 +17,6 @@ - - - - - - - @@ -31,7 +24,6 @@ - diff --git a/external/poky/bitbake/lib/bb/COW.py b/external/poky/bitbake/lib/bb/COW.py index 7817473a..bc20ce38 100644 --- a/external/poky/bitbake/lib/bb/COW.py +++ b/external/poky/bitbake/lib/bb/COW.py @@ -1,23 +1,8 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # This is a copy on write dictionary and set which abuses classes to try and be nice and fast. # # Copyright (C) 2006 Tim Ansell # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -# #Please Note: # Be careful when using mutable types (ie Dict and Lists) - operations involving these are SLOW. # Assign a file to __warn__ to get warnings about slow operations. @@ -25,7 +10,6 @@ import copy -import types ImmutableTypes = ( bool, complex, diff --git a/external/poky/bitbake/lib/bb/__init__.py b/external/poky/bitbake/lib/bb/__init__.py index 4bc47c8a..b96466e6 100644 --- a/external/poky/bitbake/lib/bb/__init__.py +++ b/external/poky/bitbake/lib/bb/__init__.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # BitBake Build System Python Library # @@ -8,24 +6,14 @@ # # Based on Gentoo's portage.py. # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -__version__ = "1.40.0" +__version__ = "1.46.0" import sys -if sys.version_info < (3, 4, 0): - raise RuntimeError("Sorry, python 3.4.0 or later is required for this version of bitbake") +if sys.version_info < (3, 5, 0): + raise RuntimeError("Sorry, python 3.5.0 or later is required for this version of bitbake") class BBHandledException(Exception): @@ -55,7 +43,13 @@ class BBLogger(Logger): Logger.__init__(self, name) def bbdebug(self, level, msg, *args, **kwargs): - return self.log(logging.DEBUG - level + 1, msg, *args, **kwargs) + loglevel = logging.DEBUG - level + 1 + if not bb.event.worker_pid: + if self.name in bb.msg.loggerDefaultDomains and loglevel > (bb.msg.loggerDefaultDomains[self.name]): + return + if loglevel > bb.msg.loggerDefaultLogLevel: + return + return self.log(loglevel, msg, *args, **kwargs) def plain(self, msg, *args, **kwargs): return self.log(logging.INFO + 1, msg, *args, **kwargs) diff --git a/external/poky/bitbake/lib/bb/build.py b/external/poky/bitbake/lib/bb/build.py index 3e2a94ed..23b6ee45 100644 --- a/external/poky/bitbake/lib/bb/build.py +++ b/external/poky/bitbake/lib/bb/build.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # BitBake 'Build' implementation # @@ -10,25 +8,13 @@ # # Based on Gentoo's portage.py. # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# SPDX-License-Identifier: GPL-2.0-only # # Based on functions from the base bb module, Copyright 2003 Holger Schurig import os import sys import logging -import shlex import glob import time import stat @@ -67,34 +53,20 @@ else: builtins['bb'] = bb builtins['os'] = os -class FuncFailed(Exception): - def __init__(self, name = None, logfile = None): - self.logfile = logfile - self.name = name - if name: - self.msg = 'Function failed: %s' % name - else: - self.msg = "Function failed" - - def __str__(self): - if self.logfile and os.path.exists(self.logfile): - msg = ("%s (log file is located at %s)" % - (self.msg, self.logfile)) - else: - msg = self.msg - return msg - class TaskBase(event.Event): """Base class for task events""" - def __init__(self, t, logfile, d): + def __init__(self, t, fn, logfile, d): self._task = t + self._fn = fn self._package = d.getVar("PF") self._mc = d.getVar("BB_CURRENT_MC") self.taskfile = d.getVar("FILE") self.taskname = self._task self.logfile = logfile self.time = time.time() + self.pn = d.getVar("PN") + self.pv = d.getVar("PV") event.Event.__init__(self) self._message = "recipe %s: task %s: %s" % (d.getVar("PF"), t, self.getDisplayName()) @@ -111,8 +83,8 @@ class TaskBase(event.Event): class TaskStarted(TaskBase): """Task execution started""" - def __init__(self, t, logfile, taskflags, d): - super(TaskStarted, self).__init__(t, logfile, d) + def __init__(self, t, fn, logfile, taskflags, d): + super(TaskStarted, self).__init__(t, fn, logfile, d) self.taskflags = taskflags class TaskSucceeded(TaskBase): @@ -121,9 +93,9 @@ class TaskSucceeded(TaskBase): class TaskFailed(TaskBase): """Task execution failed""" - def __init__(self, task, logfile, metadata, errprinted = False): + def __init__(self, task, fn, logfile, metadata, errprinted = False): self.errprinted = errprinted - super(TaskFailed, self).__init__(task, logfile, metadata) + super(TaskFailed, self).__init__(task, fn, logfile, metadata) class TaskFailedSilent(TaskBase): """Task execution failed (silently)""" @@ -133,8 +105,8 @@ class TaskFailedSilent(TaskBase): class TaskInvalid(TaskBase): - def __init__(self, task, metadata): - super(TaskInvalid, self).__init__(task, None, metadata) + def __init__(self, task, fn, metadata): + super(TaskInvalid, self).__init__(task, fn, None, metadata) self._message = "No such task '%s'" % task class TaskProgress(event.Event): @@ -176,15 +148,33 @@ class LogTee(object): def __repr__(self): return ''.format(self.name) + def flush(self): self.outfile.flush() -# -# pythonexception allows the python exceptions generated to be raised -# as the real exceptions (not FuncFailed) and without a backtrace at the -# origin of the failure. -# -def exec_func(func, d, dirs = None, pythonexception=False): + +class StdoutNoopContextManager: + """ + This class acts like sys.stdout, but adds noop __enter__ and __exit__ methods. + """ + def __enter__(self): + return sys.stdout + + def __exit__(self, *exc_info): + pass + + def write(self, string): + return sys.stdout.write(string) + + def flush(self): + sys.stdout.flush() + + @property + def name(self): + return sys.stdout.name + + +def exec_func(func, d, dirs = None): """Execute a BB 'function'""" try: @@ -256,7 +246,7 @@ def exec_func(func, d, dirs = None, pythonexception=False): with bb.utils.fileslocked(lockfiles): if ispython: - exec_func_python(func, d, runfile, cwd=adir, pythonexception=pythonexception) + exec_func_python(func, d, runfile, cwd=adir) else: exec_func_shell(func, d, runfile, cwd=adir) @@ -276,7 +266,7 @@ _functionfmt = """ {function}(d) """ logformatter = bb.msg.BBLogFormatter("%(levelname)s: %(message)s") -def exec_func_python(func, d, runfile, cwd=None, pythonexception=False): +def exec_func_python(func, d, runfile, cwd=None): """Execute a python BB 'function'""" code = _functionfmt.format(function=func) @@ -301,13 +291,7 @@ def exec_func_python(func, d, runfile, cwd=None, pythonexception=False): bb.methodpool.insert_method(func, text, fn, lineno - 1) comp = utils.better_compile(code, func, "exec_python_func() autogenerated") - utils.better_exec(comp, {"d": d}, code, "exec_python_func() autogenerated", pythonexception=pythonexception) - except (bb.parse.SkipRecipe, bb.build.FuncFailed): - raise - except: - if pythonexception: - raise - raise FuncFailed(func, None) + utils.better_exec(comp, {"d": d}, code, "exec_python_func() autogenerated") finally: bb.debug(2, "Python function %s finished" % func) @@ -335,6 +319,42 @@ trap 'bb_exit_handler' 0 set -e ''' +def create_progress_handler(func, progress, logfile, d): + if progress == 'percent': + # Use default regex + return bb.progress.BasicProgressHandler(d, outfile=logfile) + elif progress.startswith('percent:'): + # Use specified regex + return bb.progress.BasicProgressHandler(d, regex=progress.split(':', 1)[1], outfile=logfile) + elif progress.startswith('outof:'): + # Use specified regex + return bb.progress.OutOfProgressHandler(d, regex=progress.split(':', 1)[1], outfile=logfile) + elif progress.startswith("custom:"): + # Use a custom progress handler that was injected via OE_EXTRA_IMPORTS or __builtins__ + import functools + from types import ModuleType + + parts = progress.split(":", 2) + _, cls, otherargs = parts[0], parts[1], (parts[2] or None) if parts[2:] else None + if cls: + def resolve(x, y): + if not x: + return None + if isinstance(x, ModuleType): + return getattr(x, y, None) + return x.get(y) + cls_obj = functools.reduce(resolve, cls.split("."), bb.utils._context) + if not cls_obj: + # Fall-back on __builtins__ + cls_obj = functools.reduce(lambda x, y: x.get(y), cls.split("."), __builtins__) + if cls_obj: + return cls_obj(d, outfile=logfile, otherargs=otherargs) + bb.warn('%s: unknown custom progress handler in task progress varflag value "%s", ignoring' % (func, cls)) + else: + bb.warn('%s: invalid task progress varflag value "%s", ignoring' % (func, progress)) + + return logfile + def exec_func_shell(func, d, runfile, cwd=None): """Execute a shell function from the metadata @@ -372,23 +392,13 @@ exit $ret cmd = [fakerootcmd, runfile] if bb.msg.loggerDefaultVerbose: - logfile = LogTee(logger, sys.stdout) + logfile = LogTee(logger, StdoutNoopContextManager()) else: - logfile = sys.stdout + logfile = StdoutNoopContextManager() progress = d.getVarFlag(func, 'progress') if progress: - if progress == 'percent': - # Use default regex - logfile = bb.progress.BasicProgressHandler(d, outfile=logfile) - elif progress.startswith('percent:'): - # Use specified regex - logfile = bb.progress.BasicProgressHandler(d, regex=progress.split(':', 1)[1], outfile=logfile) - elif progress.startswith('outof:'): - # Use specified regex - logfile = bb.progress.OutOfProgressHandler(d, regex=progress.split(':', 1)[1], outfile=logfile) - else: - bb.warn('%s: invalid task progress varflag value "%s", ignoring' % (func, progress)) + logfile = create_progress_handler(func, progress, logfile, d) fifobuffer = bytearray() def readfifo(data): @@ -407,6 +417,8 @@ exit $ret bb.plain(value) elif cmd == 'bbnote': bb.note(value) + elif cmd == 'bbverbnote': + bb.verbnote(value) elif cmd == 'bbwarn': bb.warn(value) elif cmd == 'bberror': @@ -436,13 +448,8 @@ exit $ret with open(fifopath, 'r+b', buffering=0) as fifo: try: bb.debug(2, "Executing shell function %s" % func) - - try: - with open(os.devnull, 'r+') as stdin: - bb.process.run(cmd, shell=False, stdin=stdin, log=logfile, extrafiles=[(fifo,readfifo)]) - except bb.process.CmdError: - logfn = d.getVar('BB_LOGFILE') - raise FuncFailed(func, logfn) + with open(os.devnull, 'r+') as stdin, logfile: + bb.process.run(cmd, shell=False, stdin=stdin, log=logfile, extrafiles=[(fifo,readfifo)]) finally: os.unlink(fifopath) @@ -567,12 +574,9 @@ def _exec_task(fn, task, d, quieterr): try: try: - event.fire(TaskStarted(task, logfn, flags, localdata), localdata) + event.fire(TaskStarted(task, fn, logfn, flags, localdata), localdata) except (bb.BBHandledException, SystemExit): return 1 - except FuncFailed as exc: - logger.error(str(exc)) - return 1 try: for func in (prefuncs or '').split(): @@ -580,16 +584,16 @@ def _exec_task(fn, task, d, quieterr): exec_func(task, localdata) for func in (postfuncs or '').split(): exec_func(func, localdata) - except FuncFailed as exc: + except bb.BBHandledException: + event.fire(TaskFailed(task, fn, logfn, localdata, True), localdata) + return 1 + except Exception as exc: if quieterr: - event.fire(TaskFailedSilent(task, logfn, localdata), localdata) + event.fire(TaskFailedSilent(task, fn, logfn, localdata), localdata) else: errprinted = errchk.triggered logger.error(str(exc)) - event.fire(TaskFailed(task, logfn, localdata, errprinted), localdata) - return 1 - except bb.BBHandledException: - event.fire(TaskFailed(task, logfn, localdata, True), localdata) + event.fire(TaskFailed(task, fn, logfn, localdata, errprinted), localdata) return 1 finally: sys.stdout.flush() @@ -612,7 +616,7 @@ def _exec_task(fn, task, d, quieterr): logger.debug(2, "Zero size logfn %s, removing", logfn) bb.utils.remove(logfn) bb.utils.remove(loglink) - event.fire(TaskSucceeded(task, logfn, localdata), localdata) + event.fire(TaskSucceeded(task, fn, logfn, localdata), localdata) if not localdata.getVarFlag(task, 'nostamp', False) and not localdata.getVarFlag(task, 'selfstamp', False): make_stamp(task, localdata) @@ -814,6 +818,9 @@ def add_tasks(tasklist, d): task_deps['parents'][task] = [] if 'deps' in flags: for dep in flags['deps']: + # Check and warn for "addtask task after foo" while foo does not exist + #if not dep in tasklist: + # bb.warn('%s: dependent task %s for %s does not exist' % (d.getVar('PN'), dep, task)) dep = d.expand(dep) task_deps['parents'][task].append(dep) diff --git a/external/poky/bitbake/lib/bb/cache.py b/external/poky/bitbake/lib/bb/cache.py index 258d679d..d1be8361 100644 --- a/external/poky/bitbake/lib/bb/cache.py +++ b/external/poky/bitbake/lib/bb/cache.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # BitBake Cache implementation # @@ -15,25 +13,15 @@ # Copyright (C) 2005 Holger Hans Peter Freyther # Copyright (C) 2005 ROAD GmbH # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import os -import sys import logging import pickle from collections import defaultdict import bb.utils +import re logger = logging.getLogger("BitBake.Cache") @@ -95,21 +83,21 @@ class CoreRecipeInfo(RecipeInfoCommon): self.appends = self.listvar('__BBAPPEND', metadata) self.nocache = self.getvar('BB_DONT_CACHE', metadata) + self.provides = self.depvar('PROVIDES', metadata) + self.rprovides = self.depvar('RPROVIDES', metadata) + self.pn = self.getvar('PN', metadata) or bb.parse.vars_from_file(filename,metadata)[0] + self.packages = self.listvar('PACKAGES', metadata) + if not self.packages: + self.packages.append(self.pn) + self.packages_dynamic = self.listvar('PACKAGES_DYNAMIC', metadata) + self.skipreason = self.getvar('__SKIPPED', metadata) if self.skipreason: - self.pn = self.getvar('PN', metadata) or bb.parse.BBHandler.vars_from_file(filename,metadata)[0] self.skipped = True - self.provides = self.depvar('PROVIDES', metadata) - self.rprovides = self.depvar('RPROVIDES', metadata) return self.tasks = metadata.getVar('__BBTASKS', False) - self.pn = self.getvar('PN', metadata) - self.packages = self.listvar('PACKAGES', metadata) - if not self.packages: - self.packages.append(self.pn) - self.basetaskhashes = self.taskvar('BB_BASEHASH', self.tasks, metadata) self.hashfilename = self.getvar('BB_HASHFILENAME', metadata) @@ -125,11 +113,8 @@ class CoreRecipeInfo(RecipeInfoCommon): self.stampclean = self.getvar('STAMPCLEAN', metadata) self.stamp_extrainfo = self.flaglist('stamp-extra-info', self.tasks, metadata) self.file_checksums = self.flaglist('file-checksums', self.tasks, metadata, True) - self.packages_dynamic = self.listvar('PACKAGES_DYNAMIC', metadata) self.depends = self.depvar('DEPENDS', metadata) - self.provides = self.depvar('PROVIDES', metadata) self.rdepends = self.depvar('RDEPENDS', metadata) - self.rprovides = self.depvar('RPROVIDES', metadata) self.rrecommends = self.depvar('RRECOMMENDS', metadata) self.rprovides_pkg = self.pkgvar('RPROVIDES', self.packages, metadata) self.rdepends_pkg = self.pkgvar('RDEPENDS', self.packages, metadata) @@ -223,10 +208,10 @@ class CoreRecipeInfo(RecipeInfoCommon): # Collect files we may need for possible world-dep # calculations - if self.not_world: - logger.debug(1, "EXCLUDE FROM WORLD: %s", fn) - else: + if not self.not_world: cachedata.possible_world.append(fn) + #else: + # logger.debug(2, "EXCLUDE FROM WORLD: %s", fn) # create a collection of all targets for sanity checking # tasks, such as upstream versions, license, and tools for @@ -235,7 +220,7 @@ class CoreRecipeInfo(RecipeInfoCommon): cachedata.hashfn[fn] = self.hashfilename for task, taskhash in self.basetaskhashes.items(): - identifier = '%s.%s' % (fn, task) + identifier = '%s:%s' % (fn, task) cachedata.basetaskhash[identifier] = taskhash cachedata.inherits[fn] = self.inherits @@ -249,7 +234,7 @@ def virtualfn2realfn(virtualfn): Convert a virtual file name to a real one + the associated subclass keyword """ mc = "" - if virtualfn.startswith('multiconfig:'): + if virtualfn.startswith('mc:'): elems = virtualfn.split(':') mc = elems[1] virtualfn = ":".join(elems[2:]) @@ -270,7 +255,7 @@ def realfn2virtual(realfn, cls, mc): if cls: realfn = "virtual:" + cls + ":" + realfn if mc: - realfn = "multiconfig:" + mc + ":" + realfn + realfn = "mc:" + mc + ":" + realfn return realfn def variant2virtual(realfn, variant): @@ -279,11 +264,11 @@ def variant2virtual(realfn, variant): """ if variant == "": return realfn - if variant.startswith("multiconfig:"): + if variant.startswith("mc:"): elems = variant.split(":") if elems[2]: - return "multiconfig:" + elems[1] + ":virtual:" + ":".join(elems[2:]) + ":" + realfn - return "multiconfig:" + elems[1] + ":" + realfn + return "mc:" + elems[1] + ":virtual:" + ":".join(elems[2:]) + ":" + realfn + return "mc:" + elems[1] + ":" + realfn return "virtual:" + variant + ":" + realfn def parse_recipe(bb_data, bbfile, appends, mc=''): @@ -361,7 +346,7 @@ class NoCache(object): bb_data = self.databuilder.mcdata[mc].createCopy() newstores = parse_recipe(bb_data, bbfile, appends, mc) for ns in newstores: - datastores["multiconfig:%s:%s" % (mc, ns)] = newstores[ns] + datastores["mc:%s:%s" % (mc, ns)] = newstores[ns] return datastores @@ -385,6 +370,7 @@ class Cache(NoCache): self.data_fn = None self.cacheclean = True self.data_hash = data_hash + self.filelist_regex = re.compile(r'(?:(?<=:True)|(?<=:False))\s+') if self.cachedir in [None, '']: self.has_cache = False @@ -411,6 +397,15 @@ class Cache(NoCache): else: logger.debug(1, "Cache file %s not found, building..." % self.cachefile) + # We don't use the symlink, its just for debugging convinience + symlink = os.path.join(self.cachedir, "bb_cache.dat") + if os.path.exists(symlink): + bb.utils.remove(symlink) + try: + os.symlink(os.path.basename(self.cachefile), symlink) + except OSError: + pass + def load_cachefile(self): cachesize = 0 previous_progress = 0 @@ -614,20 +609,12 @@ class Cache(NoCache): if hasattr(info_array[0], 'file_checksums'): for _, fl in info_array[0].file_checksums.items(): fl = fl.strip() - while fl: - # A .split() would be simpler but means spaces or colons in filenames would break - a = fl.find(":True") - b = fl.find(":False") - if ((a < 0) and b) or ((b > 0) and (b < a)): - f = fl[:b+6] - fl = fl[b+7:] - elif ((b < 0) and a) or ((a > 0) and (a < b)): - f = fl[:a+5] - fl = fl[a+6:] - else: - break - fl = fl.strip() - if "*" in f: + if not fl: + continue + # Have to be careful about spaces and colons in filenames + flist = self.filelist_regex.split(fl) + for f in flist: + if not f or "*" in f: continue f, exist = f.split(":") if (exist == "True" and not os.path.exists(f)) or (exist == "False" and os.path.exists(f)): @@ -889,3 +876,56 @@ class MultiProcessCache(object): p.dump([data, self.__class__.CACHE_VERSION]) bb.utils.unlockfile(glf) + + +class SimpleCache(object): + """ + BitBake multi-process cache implementation + + Used by the codeparser & file checksum caches + """ + + def __init__(self, version): + self.cachefile = None + self.cachedata = None + self.cacheversion = version + + def init_cache(self, d, cache_file_name=None, defaultdata=None): + cachedir = (d.getVar("PERSISTENT_DIR") or + d.getVar("CACHE")) + if not cachedir: + return defaultdata + + bb.utils.mkdirhier(cachedir) + self.cachefile = os.path.join(cachedir, + cache_file_name or self.__class__.cache_file_name) + logger.debug(1, "Using cache in '%s'", self.cachefile) + + glf = bb.utils.lockfile(self.cachefile + ".lock") + + try: + with open(self.cachefile, "rb") as f: + p = pickle.Unpickler(f) + data, version = p.load() + except: + bb.utils.unlockfile(glf) + return defaultdata + + bb.utils.unlockfile(glf) + + if version != self.cacheversion: + return defaultdata + + return data + + def save(self, data): + if not self.cachefile: + return + + glf = bb.utils.lockfile(self.cachefile + ".lock") + + with open(self.cachefile, "wb") as f: + p = pickle.Pickler(f, -1) + p.dump([data, self.cacheversion]) + + bb.utils.unlockfile(glf) diff --git a/external/poky/bitbake/lib/bb/cache_extra.py b/external/poky/bitbake/lib/bb/cache_extra.py index 83f4959d..bf4226d1 100644 --- a/external/poky/bitbake/lib/bb/cache_extra.py +++ b/external/poky/bitbake/lib/bb/cache_extra.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # Extra RecipeInfo will be all defined in this file. Currently, # Only Hob (Image Creator) Requests some extra fields. So @@ -12,18 +10,8 @@ # Copyright (C) 2011, Intel Corporation. All rights reserved. -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. from bb.cache import RecipeInfoCommon diff --git a/external/poky/bitbake/lib/bb/checksum.py b/external/poky/bitbake/lib/bb/checksum.py index 4e1598fe..1d50a264 100644 --- a/external/poky/bitbake/lib/bb/checksum.py +++ b/external/poky/bitbake/lib/bb/checksum.py @@ -2,24 +2,13 @@ # # Copyright (C) 2012 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import glob import operator import os import stat -import pickle import bb.utils import logging from bb.cache import MultiProcessCache @@ -84,7 +73,7 @@ class FileChecksumCache(MultiProcessCache): else: dest[0][h] = source[0][h] - def get_checksums(self, filelist, pn): + def get_checksums(self, filelist, pn, localdirsexclude): """Get checksums for a list of files""" def checksum_file(f): @@ -100,7 +89,8 @@ class FileChecksumCache(MultiProcessCache): if pth == "/": bb.fatal("Refusing to checksum /") dirchecksums = [] - for root, dirs, files in os.walk(pth): + for root, dirs, files in os.walk(pth, topdown=True): + [dirs.remove(d) for d in list(dirs) if d in localdirsexclude] for name in files: fullpth = os.path.join(root, name) checksum = checksum_file(fullpth) diff --git a/external/poky/bitbake/lib/bb/codeparser.py b/external/poky/bitbake/lib/bb/codeparser.py index ddd1b97d..25a7ac69 100644 --- a/external/poky/bitbake/lib/bb/codeparser.py +++ b/external/poky/bitbake/lib/bb/codeparser.py @@ -1,3 +1,7 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + """ BitBake code parser @@ -21,19 +25,17 @@ import ast import sys import codegen import logging -import pickle import bb.pysh as pysh -import os.path import bb.utils, bb.data import hashlib from itertools import chain -from bb.pysh import pyshyacc, pyshlex, sherrors +from bb.pysh import pyshyacc, pyshlex from bb.cache import MultiProcessCache logger = logging.getLogger('BitBake.CodeParser') def bbhash(s): - return hashlib.md5(s.encode("utf-8")).hexdigest() + return hashlib.sha256(s.encode("utf-8")).hexdigest() def check_indent(codestr): """If the code is indented, add a top level piece of code to 'remove' the indentation""" @@ -54,30 +56,10 @@ def check_indent(codestr): return codestr - -# Basically pickle, in python 2.7.3 at least, does badly with data duplication -# upon pickling and unpickling. Combine this with duplicate objects and things -# are a mess. -# -# When the sets are originally created, python calls intern() on the set keys -# which significantly improves memory usage. Sadly the pickle/unpickle process -# doesn't call intern() on the keys and results in the same strings being duplicated -# in memory. This also means pickle will save the same string multiple times in -# the cache file. -# -# By having shell and python cacheline objects with setstate/getstate, we force -# the object creation through our own routine where we can call intern (via internSet). -# -# We also use hashable frozensets and ensure we use references to these so that -# duplicates can be removed, both in memory and in the resulting pickled data. -# -# By playing these games, the size of the cache file shrinks dramatically -# meaning faster load times and the reloaded cache files also consume much less -# memory. Smaller cache files, faster load times and lower memory usage is good. -# # A custom getstate/setstate using tuples is actually worth 15% cachesize by # avoiding duplication of the attribute names! + class SetCache(object): def __init__(self): self.setcache = {} @@ -140,7 +122,7 @@ class CodeParserCache(MultiProcessCache): # so that an existing cache gets invalidated. Additionally you'll need # to increment __cache_version__ in cache.py in order to ensure that old # recipe caches don't trigger "Taskhash mismatch" errors. - CACHE_VERSION = 10 + CACHE_VERSION = 11 def __init__(self): MultiProcessCache.__init__(self) @@ -368,8 +350,9 @@ class ShellParser(): def _parse_shell(self, value): try: tokens, _ = pyshyacc.parse(value, eof=True, debug=False) - except pyshlex.NeedMore: - raise sherrors.ShellSyntaxError("Unexpected EOF") + except Exception: + bb.error('Error during parse shell code, the last 5 lines are:\n%s' % '\n'.join(value.split('\n')[-5:])) + raise self.process_tokens(tokens) diff --git a/external/poky/bitbake/lib/bb/command.py b/external/poky/bitbake/lib/bb/command.py index 6c966e3d..6abf3866 100644 --- a/external/poky/bitbake/lib/bb/command.py +++ b/external/poky/bitbake/lib/bb/command.py @@ -6,18 +6,8 @@ Provide an interface to interact with the bitbake server through 'commands' # Copyright (C) 2006-2007 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. """ The bitbake server takes 'commands' from its UI/commandline. @@ -75,7 +65,7 @@ class Command: # Can run synchronous commands straight away command_method = getattr(self.cmds_sync, command) if ro_only: - if not hasattr(command_method, 'readonly') or False == getattr(command_method, 'readonly'): + if not hasattr(command_method, 'readonly') or not getattr(command_method, 'readonly'): return None, "Not able to execute not readonly commands in readonly mode" try: self.cooker.process_inotify_updates() @@ -424,7 +414,11 @@ class CommandsSync: getAllAppends.readonly = True def findProviders(self, command, params): - return command.cooker.findProviders() + try: + mc = params[0] + except IndexError: + mc = '' + return command.cooker.findProviders(mc) findProviders.readonly = True def findBestProvider(self, command, params): @@ -456,54 +450,38 @@ class CommandsSync: return all_p, best getRuntimeProviders.readonly = True - def dataStoreConnectorFindVar(self, command, params): + def dataStoreConnectorCmd(self, command, params): dsindex = params[0] - name = params[1] - datastore = command.remotedatastores[dsindex] - value, overridedata = datastore._findVar(name) - - if value: - content = value.get('_content', None) - if isinstance(content, bb.data_smart.DataSmart): - # Value is a datastore (e.g. BB_ORIGENV) - need to handle this carefully - idx = command.remotedatastores.check_store(content, True) - return {'_content': DataStoreConnectionHandle(idx), - '_connector_origtype': 'DataStoreConnectionHandle', - '_connector_overrides': overridedata} - elif isinstance(content, set): - return {'_content': list(content), - '_connector_origtype': 'set', - '_connector_overrides': overridedata} - else: - value['_connector_overrides'] = overridedata - else: - value = {} - value['_connector_overrides'] = overridedata - return value - dataStoreConnectorFindVar.readonly = True + method = params[1] + args = params[2] + kwargs = params[3] - def dataStoreConnectorGetKeys(self, command, params): - dsindex = params[0] - datastore = command.remotedatastores[dsindex] - return list(datastore.keys()) - dataStoreConnectorGetKeys.readonly = True + d = command.remotedatastores[dsindex] + ret = getattr(d, method)(*args, **kwargs) + + if isinstance(ret, bb.data_smart.DataSmart): + idx = command.remotedatastores.store(ret) + return DataStoreConnectionHandle(idx) + + return ret - def dataStoreConnectorGetVarHistory(self, command, params): + def dataStoreConnectorVarHistCmd(self, command, params): dsindex = params[0] - name = params[1] - datastore = command.remotedatastores[dsindex] - return datastore.varhistory.variable(name) - dataStoreConnectorGetVarHistory.readonly = True + method = params[1] + args = params[2] + kwargs = params[3] - def dataStoreConnectorExpandPythonRef(self, command, params): - config_data_dict = params[0] - varname = params[1] - expr = params[2] + d = command.remotedatastores[dsindex].varhistory + return getattr(d, method)(*args, **kwargs) - config_data = command.remotedatastores.receive_datastore(config_data_dict) + def dataStoreConnectorIncHistCmd(self, command, params): + dsindex = params[0] + method = params[1] + args = params[2] + kwargs = params[3] - varparse = bb.data_smart.VariableParse(varname, config_data) - return varparse.python_sub(expr) + d = command.remotedatastores[dsindex].inchistory + return getattr(d, method)(*args, **kwargs) def dataStoreConnectorRelease(self, command, params): dsindex = params[0] @@ -511,31 +489,6 @@ class CommandsSync: raise CommandError('dataStoreConnectorRelease: invalid index %d' % dsindex) command.remotedatastores.release(dsindex) - def dataStoreConnectorSetVarFlag(self, command, params): - dsindex = params[0] - name = params[1] - flag = params[2] - value = params[3] - datastore = command.remotedatastores[dsindex] - datastore.setVarFlag(name, flag, value) - - def dataStoreConnectorDelVar(self, command, params): - dsindex = params[0] - name = params[1] - datastore = command.remotedatastores[dsindex] - if len(params) > 2: - flag = params[2] - datastore.delVarFlag(name, flag) - else: - datastore.delVar(name) - - def dataStoreConnectorRenameVar(self, command, params): - dsindex = params[0] - name = params[1] - newname = params[2] - datastore = command.remotedatastores[dsindex] - datastore.renameVar(name, newname) - def parseRecipeFile(self, command, params): """ Parse the specified recipe file (with or without bbappends) @@ -546,8 +499,7 @@ class CommandsSync: appends = params[1] appendlist = params[2] if len(params) > 3: - config_data_dict = params[3] - config_data = command.remotedatastores.receive_datastore(config_data_dict) + config_data = command.remotedatastores[params[3]] else: config_data = None diff --git a/external/poky/bitbake/lib/bb/compat.py b/external/poky/bitbake/lib/bb/compat.py index de1923d2..49356681 100644 --- a/external/poky/bitbake/lib/bb/compat.py +++ b/external/poky/bitbake/lib/bb/compat.py @@ -1,3 +1,7 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + """Code pulled from future python versions, here for compatibility""" from collections import MutableMapping, KeysView, ValuesView, ItemsView, OrderedDict diff --git a/external/poky/bitbake/lib/bb/cooker.py b/external/poky/bitbake/lib/bb/cooker.py index 78658a16..d90bd394 100644 --- a/external/poky/bitbake/lib/bb/cooker.py +++ b/external/poky/bitbake/lib/bb/cooker.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # Copyright (C) 2003, 2004 Chris Larson # Copyright (C) 2003, 2004 Phil Blundell @@ -9,22 +6,10 @@ # Copyright (C) 2005 ROAD GmbH # Copyright (C) 2006 - 2007 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - import sys, os, glob, os.path, re, time -import atexit import itertools import logging import multiprocessing @@ -32,19 +17,17 @@ import sre_constants import threading from io import StringIO, UnsupportedOperation from contextlib import closing -from functools import wraps from collections import defaultdict, namedtuple import bb, bb.exceptions, bb.command from bb import utils, data, parse, event, cache, providers, taskdata, runqueue, build import queue import signal -import subprocess -import errno import prserv.serv import pyinotify import json import pickle import codecs +import hashserv logger = logging.getLogger("BitBake") collectlog = logging.getLogger("BitBake.Collection") @@ -182,8 +165,8 @@ class BBCooker: bb.debug(1, "BBCooker pyinotify1 %s" % time.time()) sys.stdout.flush() - self.configwatcher.bbseen = [] - self.configwatcher.bbwatchedfiles = [] + self.configwatcher.bbseen = set() + self.configwatcher.bbwatchedfiles = set() self.confignotifier = pyinotify.Notifier(self.configwatcher, self.config_notifications) bb.debug(1, "BBCooker pyinotify2 %s" % time.time()) sys.stdout.flush() @@ -193,8 +176,8 @@ class BBCooker: self.watcher = pyinotify.WatchManager() bb.debug(1, "BBCooker pyinotify3 %s" % time.time()) sys.stdout.flush() - self.watcher.bbseen = [] - self.watcher.bbwatchedfiles = [] + self.watcher.bbseen = set() + self.watcher.bbwatchedfiles = set() self.notifier = pyinotify.Notifier(self.watcher, self.notifications) bb.debug(1, "BBCooker pyinotify complete %s" % time.time()) @@ -206,6 +189,8 @@ class BBCooker: bb.parse.BBHandler.cached_statements = {} self.ui_cmdline = None + self.hashserv = None + self.hashservaddr = None self.initConfigurationData() @@ -289,14 +274,14 @@ class BBCooker: if not watcher: watcher = self.watcher for i in deps: - watcher.bbwatchedfiles.append(i[0]) + watcher.bbwatchedfiles.add(i[0]) if dirs: f = i[0] else: f = os.path.dirname(i[0]) if f in watcher.bbseen: continue - watcher.bbseen.append(f) + watcher.bbseen.add(f) watchtarget = None while True: # We try and add watches for files that don't exist but if they did, would influence @@ -305,7 +290,7 @@ class BBCooker: try: watcher.add_watch(f, self.watchmask, quiet=False) if watchtarget: - watcher.bbwatchedfiles.append(watchtarget) + watcher.bbwatchedfiles.add(watchtarget) break except pyinotify.WatchManagerError as e: if 'ENOENT' in str(e): @@ -313,7 +298,7 @@ class BBCooker: f = os.path.dirname(f) if f in watcher.bbseen: break - watcher.bbseen.append(f) + watcher.bbseen.add(f) continue if 'ENOSPC' in str(e): providerlog.error("No space left on device or exceeds fs.inotify.max_user_watches?") @@ -382,12 +367,6 @@ class BBCooker: self.data.setVar('BB_CMDLINE', self.ui_cmdline) - # - # Copy of the data store which has been expanded. - # Used for firing events and accessing variables where expansion needs to be accounted for - # - bb.parse.init_parser(self.data) - if CookerFeatures.BASEDATASTORE_TRACKING in self.featureset: self.disableDataTracking() @@ -405,6 +384,22 @@ class BBCooker: except prserv.serv.PRServiceConfigError as e: bb.fatal("Unable to start PR Server, exitting") + if self.data.getVar("BB_HASHSERVE") == "auto": + # Create a new hash server bound to a unix domain socket + if not self.hashserv: + dbfile = (self.data.getVar("PERSISTENT_DIR") or self.data.getVar("CACHE")) + "/hashserv.db" + self.hashservaddr = "unix://%s/hashserve.sock" % self.data.getVar("TOPDIR") + self.hashserv = hashserv.create_server(self.hashservaddr, dbfile, sync=False) + self.hashserv.process = multiprocessing.Process(target=self.hashserv.serve_forever) + self.hashserv.process.start() + self.data.setVar("BB_HASHSERVE", self.hashservaddr) + self.databuilder.origdata.setVar("BB_HASHSERVE", self.hashservaddr) + self.databuilder.data.setVar("BB_HASHSERVE", self.hashservaddr) + for mc in self.databuilder.mcdata: + self.databuilder.mcdata[mc].setVar("BB_HASHSERVE", self.hashservaddr) + + bb.parse.init_parser(self.data) + def enableDataTracking(self): self.configuration.tracking = True if hasattr(self, "data"): @@ -508,6 +503,7 @@ class BBCooker: """ fn = None envdata = None + mc = '' if not pkgs_to_build: pkgs_to_build = [] @@ -516,6 +512,12 @@ class BBCooker: self.enableDataTracking() self.reset() + def mc_base(p): + if p.startswith('mc:'): + s = p.split(':') + if len(s) == 2: + return s[1] + return None if buildfile: # Parse the configuration here. We need to do it explicitly here since @@ -526,18 +528,16 @@ class BBCooker: fn = self.matchFile(fn) fn = bb.cache.realfn2virtual(fn, cls, mc) elif len(pkgs_to_build) == 1: - ignore = self.data.getVar("ASSUME_PROVIDED") or "" - if pkgs_to_build[0] in set(ignore.split()): - bb.fatal("%s is in ASSUME_PROVIDED" % pkgs_to_build[0]) + mc = mc_base(pkgs_to_build[0]) + if not mc: + ignore = self.data.getVar("ASSUME_PROVIDED") or "" + if pkgs_to_build[0] in set(ignore.split()): + bb.fatal("%s is in ASSUME_PROVIDED" % pkgs_to_build[0]) - taskdata, runlist = self.buildTaskData(pkgs_to_build, None, self.configuration.abort, allowincomplete=True) + taskdata, runlist = self.buildTaskData(pkgs_to_build, None, self.configuration.abort, allowincomplete=True) - mc = runlist[0][0] - fn = runlist[0][3] - else: - envdata = self.data - data.expandKeys(envdata) - parse.ast.runAnonFuncs(envdata) + mc = runlist[0][0] + fn = runlist[0][3] if fn: try: @@ -546,6 +546,12 @@ class BBCooker: except Exception as e: parselog.exception("Unable to read %s", fn) raise + else: + if not mc in self.databuilder.mcdata: + bb.fatal('Not multiconfig named "%s" found' % mc) + envdata = self.databuilder.mcdata[mc] + data.expandKeys(envdata) + parse.ast.runAnonFuncs(envdata) # Display history with closing(StringIO()) as env: @@ -585,10 +591,10 @@ class BBCooker: wildcard = False # Wild card expansion: - # Replace string such as "multiconfig:*:bash" - # into "multiconfig:A:bash multiconfig:B:bash bash" + # Replace string such as "mc:*:bash" + # into "mc:A:bash mc:B:bash bash" for k in targetlist: - if k.startswith("multiconfig:"): + if k.startswith("mc:"): if wildcard: bb.fatal('multiconfig conflict') if k.split(":")[1] == "*": @@ -621,7 +627,7 @@ class BBCooker: runlist = [] for k in fulltargetlist: mc = "" - if k.startswith("multiconfig:"): + if k.startswith("mc:"): mc = k.split(":")[1] k = ":".join(k.split(":")[2:]) ktask = task @@ -640,9 +646,13 @@ class BBCooker: runlist.append([mc, k, ktask, fn]) bb.event.fire(bb.event.TreeDataPreparationProgress(current, len(fulltargetlist)), self.data) + havemc = False + for mc in self.multiconfigs: + if taskdata[mc].get_mcdepends(): + havemc = True # No need to do check providers if there are no mcdeps or not an mc build - if len(self.multiconfigs) > 1: + if havemc or len(self.multiconfigs) > 1: seen = set() new = True # Make sure we can provide the multiconfig dependency @@ -702,7 +712,7 @@ class BBCooker: @staticmethod def add_mc_prefix(mc, pn): if mc: - return "multiconfig:%s:%s" % (mc, pn) + return "mc:%s:%s" % (mc, pn) return pn def buildDependTree(self, rq, taskdata): @@ -901,6 +911,10 @@ class BBCooker: os.unlink('package-depends.dot') except FileNotFoundError: pass + try: + os.unlink('recipe-depends.dot') + except FileNotFoundError: + pass with open('task-depends.dot', 'w') as f: f.write("digraph depends {\n") @@ -914,27 +928,6 @@ class BBCooker: f.write("}\n") logger.info("Task dependencies saved to 'task-depends.dot'") - with open('recipe-depends.dot', 'w') as f: - f.write("digraph depends {\n") - pndeps = {} - for task in sorted(depgraph["tdepends"]): - (pn, taskname) = task.rsplit(".", 1) - if pn not in pndeps: - pndeps[pn] = set() - for dep in sorted(depgraph["tdepends"][task]): - (deppn, deptaskname) = dep.rsplit(".", 1) - pndeps[pn].add(deppn) - for pn in sorted(pndeps): - fn = depgraph["pn"][pn]["filename"] - version = depgraph["pn"][pn]["version"] - f.write('"%s" [label="%s\\n%s\\n%s"]\n' % (pn, pn, version, fn)) - for dep in sorted(pndeps[pn]): - if dep == pn: - continue - f.write('"%s" -> "%s"\n' % (pn, dep)) - f.write("}\n") - logger.info("Flattened recipe dependencies saved to 'recipe-depends.dot'") - def show_appends_with_no_recipes(self): # Determine which bbappends haven't been applied @@ -1030,16 +1023,16 @@ class BBCooker: bb.event.fire(bb.event.FilesMatchingFound(filepattern, matches), self.data) def findProviders(self, mc=''): - return bb.providers.findProviders(self.data, self.recipecaches[mc], self.recipecaches[mc].pkg_pn) + return bb.providers.findProviders(self.databuilder.mcdata[mc], self.recipecaches[mc], self.recipecaches[mc].pkg_pn) def findBestProvider(self, pn, mc=''): if pn in self.recipecaches[mc].providers: filenames = self.recipecaches[mc].providers[pn] - eligible, foundUnique = bb.providers.filterProviders(filenames, pn, self.data, self.recipecaches[mc]) + eligible, foundUnique = bb.providers.filterProviders(filenames, pn, self.databuilder.mcdata[mc], self.recipecaches[mc]) filename = eligible[0] return None, None, None, filename elif pn in self.recipecaches[mc].pkg_pn: - return bb.providers.findBestProvider(pn, self.data, self.recipecaches[mc], self.recipecaches[mc].pkg_pn) + return bb.providers.findBestProvider(pn, self.databuilder.mcdata[mc], self.recipecaches[mc], self.recipecaches[mc].pkg_pn) else: return None, None, None, None @@ -1211,14 +1204,14 @@ class BBCooker: for c in collection_list: calc_layer_priority(c) regex = self.data.getVar("BBFILE_PATTERN_%s" % c) - if regex == None: + if regex is None: parselog.error("BBFILE_PATTERN_%s not defined" % c) errors = True continue elif regex == "": parselog.debug(1, "BBFILE_PATTERN_%s is empty" % c) + cre = re.compile('^NULL$') errors = False - continue else: try: cre = re.compile(regex) @@ -1317,7 +1310,7 @@ class BBCooker: self.parseConfiguration() # If we are told to do the None task then query the default task - if (task == None): + if task is None: task = self.configuration.cmd if not task.startswith("do_"): task = "do_%s" % task @@ -1461,7 +1454,7 @@ class BBCooker: self.buildSetVars() # If we are told to do the None task then query the default task - if (task == None): + if task is None: task = self.configuration.cmd if not task.startswith("do_"): @@ -1479,7 +1472,7 @@ class BBCooker: ntargets = [] for target in runlist: if target[0]: - ntargets.append("multiconfig:%s:%s:%s" % (target[0], target[1], target[2])) + ntargets.append("mc:%s:%s:%s" % (target[0], target[1], target[2])) ntargets.append("%s:%s" % (target[1], target[2])) for mc in self.multiconfigs: @@ -1599,9 +1592,12 @@ class BBCooker: raise NothingToBuild ignore = (self.data.getVar("ASSUME_PROVIDED") or "").split() - for pkg in pkgs_to_build: + for pkg in pkgs_to_build.copy(): if pkg in ignore: parselog.warning("Explicit target \"%s\" is in ASSUME_PROVIDED, ignoring" % pkg) + if pkg.startswith("multiconfig:"): + pkgs_to_build.remove(pkg) + pkgs_to_build.append(pkg.replace("multiconfig:", "mc:")) if 'world' in pkgs_to_build: pkgs_to_build.remove('world') @@ -1609,7 +1605,7 @@ class BBCooker: bb.providers.buildWorldTargetList(self.recipecaches[mc], task) for t in self.recipecaches[mc].world_target: if mc: - t = "multiconfig:" + mc + ":" + t + t = "mc:" + mc + ":" + t pkgs_to_build.append(t) if 'universe' in pkgs_to_build: @@ -1628,7 +1624,7 @@ class BBCooker: bb.debug(1, "Skipping %s for universe tasks as task %s doesn't exist" % (t, task)) continue if mc: - t = "multiconfig:" + mc + ":" + t + t = "mc:" + mc + ":" + t pkgs_to_build.append(t) return pkgs_to_build @@ -1641,9 +1637,11 @@ class BBCooker: def post_serve(self): prserv.serv.auto_shutdown() + if self.hashserv: + self.hashserv.process.terminate() + self.hashserv.process.join() bb.event.fire(CookerExit(), self.data) - def shutdown(self, force = False): if force: self.state = state.forceshutdown @@ -1658,6 +1656,7 @@ class BBCooker: def reset(self): self.initConfigurationData() + self.handlePRServ() def clientComplete(self): """Called when the client is done using the server""" @@ -1666,6 +1665,8 @@ class BBCooker: self.command.reset() self.databuilder.reset() self.data = self.databuilder.data + self.parsecache_valid = False + self.baseconfig_valid = False class CookerExit(bb.event.Event): @@ -1688,7 +1689,7 @@ class CookerCollectFiles(object): def calc_bbfile_priority( self, filename, matched = None ): for _, _, regex, pri in self.bbfile_config_priorities: if regex.match(filename): - if matched != None: + if matched is not None: if not regex in matched: matched.add(regex) return pri @@ -1785,7 +1786,7 @@ class CookerCollectFiles(object): # When constructing an older style single regex, it's possible for BBMASK # to end up beginning with '|', which matches and masks _everything_. if mask.startswith("|"): - collectlog.warn("BBMASK contains regular expression beginning with '|', fixing: %s" % mask) + collectlog.warning("BBMASK contains regular expression beginning with '|', fixing: %s" % mask) mask = mask[1:] try: re.compile(mask) @@ -1891,35 +1892,6 @@ class ParsingFailure(Exception): self.recipe = recipe Exception.__init__(self, realexception, recipe) -class Feeder(multiprocessing.Process): - def __init__(self, jobs, to_parsers, quit): - self.quit = quit - self.jobs = jobs - self.to_parsers = to_parsers - multiprocessing.Process.__init__(self) - - def run(self): - while True: - try: - quit = self.quit.get_nowait() - except queue.Empty: - pass - else: - if quit == 'cancel': - self.to_parsers.cancel_join_thread() - break - - try: - job = self.jobs.pop() - except IndexError: - break - - try: - self.to_parsers.put(job, timeout=0.5) - except queue.Full: - self.jobs.insert(0, job) - continue - class Parser(multiprocessing.Process): def __init__(self, jobs, results, quit, init, profile): self.jobs = jobs @@ -1966,14 +1938,12 @@ class Parser(multiprocessing.Process): result = pending.pop() else: try: - job = self.jobs.get(timeout=0.25) - except queue.Empty: - continue - - if job is None: + job = self.jobs.pop() + except IndexError: break result = self.parse(*job) - + # Clear the siggen cache after parsing to control memory usage, its huge + bb.parse.siggen.postparsing_clean_cache() try: self.results.put(result, timeout=0.25) except queue.Full: @@ -1981,6 +1951,7 @@ class Parser(multiprocessing.Process): def parse(self, filename, appends): try: + origfilter = bb.event.LogHandler.filter # Record the filename we're parsing into any events generated def parse_filter(self, record): record.taskpid = bb.event.worker_pid @@ -2003,6 +1974,8 @@ class Parser(multiprocessing.Process): # a SystemExit event for example. except BaseException as exc: return True, ParsingFailure(exc, filename) + finally: + bb.event.LogHandler.filter = origfilter class CookerParser(object): def __init__(self, cooker, filelist, masked): @@ -2054,14 +2027,15 @@ class CookerParser(object): multiprocessing.util.Finalize(None, bb.codeparser.parser_cache_save, exitpriority=1) multiprocessing.util.Finalize(None, bb.fetch.fetcher_parse_save, exitpriority=1) - self.feeder_quit = multiprocessing.Queue(maxsize=1) self.parser_quit = multiprocessing.Queue(maxsize=self.num_processes) - self.jobs = multiprocessing.Queue(maxsize=self.num_processes) self.result_queue = multiprocessing.Queue() - self.feeder = Feeder(self.willparse, self.jobs, self.feeder_quit) - self.feeder.start() + + def chunkify(lst,n): + return [lst[i::n] for i in range(n)] + self.jobs = chunkify(self.willparse, self.num_processes) + for i in range(0, self.num_processes): - parser = Parser(self.jobs, self.result_queue, self.parser_quit, init, self.cooker.configuration.profile) + parser = Parser(self.jobs[i], self.result_queue, self.parser_quit, init, self.cooker.configuration.profile) parser.start() self.process_names.append(parser.name) self.processes.append(parser) @@ -2082,17 +2056,20 @@ class CookerParser(object): self.total) bb.event.fire(event, self.cfgdata) - self.feeder_quit.put(None) for process in self.processes: self.parser_quit.put(None) else: - self.feeder_quit.put('cancel') - self.parser_quit.cancel_join_thread() for process in self.processes: self.parser_quit.put(None) - self.jobs.cancel_join_thread() + # Cleanup the queue before call process.join(), otherwise there might be + # deadlocks. + while True: + try: + self.result_queue.get(timeout=0.25) + except queue.Empty: + break for process in self.processes: if force: @@ -2100,7 +2077,6 @@ class CookerParser(object): process.terminate() else: process.join() - self.feeder.join() sync = threading.Thread(target=self.bb_cache.sync) sync.start() diff --git a/external/poky/bitbake/lib/bb/cookerdata.py b/external/poky/bitbake/lib/bb/cookerdata.py index d9887c71..472423fd 100644 --- a/external/poky/bitbake/lib/bb/cookerdata.py +++ b/external/poky/bitbake/lib/bb/cookerdata.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # Copyright (C) 2003, 2004 Chris Larson # Copyright (C) 2003, 2004 Phil Blundell @@ -9,18 +6,8 @@ # Copyright (C) 2005 ROAD GmbH # Copyright (C) 2006 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import logging import os @@ -135,6 +122,7 @@ class CookerConfiguration(object): self.profile = False self.nosetscene = False self.setsceneonly = False + self.skipsetscene = False self.invalidate_stamp = False self.dump_signatures = [] self.dry_run = False @@ -282,11 +270,11 @@ class CookerDataBuilder(object): def parseBaseConfiguration(self): data_hash = hashlib.sha256() try: - bb.parse.init_parser(self.basedata) self.data = self.parseConfigurationFiles(self.prefiles, self.postfiles) if self.data.getVar("BB_WORKERCONTEXT", False) is None: bb.fetch.fetcher_init(self.data) + bb.parse.init_parser(self.data) bb.codeparser.parser_cache_init(self.data) bb.event.fire(bb.event.ConfigParsed(), self.data) @@ -358,14 +346,24 @@ class CookerDataBuilder(object): data = parse_config_file(layerconf, data) layers = (data.getVar('BBLAYERS') or "").split() + broken_layers = [] data = bb.data.createCopy(data) approved = bb.utils.approved_variables() + + # Check whether present layer directories exist for layer in layers: if not os.path.isdir(layer): - parselog.critical("Layer directory '%s' does not exist! " - "Please check BBLAYERS in %s" % (layer, layerconf)) - sys.exit(1) + broken_layers.append(layer) + + if broken_layers: + parselog.critical("The following layer directories do not exist:") + for layer in broken_layers: + parselog.critical(" %s", layer) + parselog.critical("Please check BBLAYERS in %s" % (layerconf)) + sys.exit(1) + + for layer in layers: parselog.debug(2, "Adding layer %s", layer) if 'HOME' in approved and '~' in layer: layer = os.path.expanduser(layer) @@ -395,7 +393,11 @@ class CookerDataBuilder(object): bb.fatal("BBFILES_DYNAMIC entries must be of the form :, not:\n %s" % "\n ".join(invalid)) layerseries = set((data.getVar("LAYERSERIES_CORENAMES") or "").split()) + collections_tmp = collections[:] for c in collections: + collections_tmp.remove(c) + if c in collections_tmp: + bb.fatal("Found duplicated BBFILE_COLLECTIONS '%s', check bblayers.conf or layer.conf to fix it." % c) compat = set((data.getVar("LAYERSERIES_COMPAT_%s" % c) or "").split()) if compat and not (compat & layerseries): bb.fatal("Layer %s is not compatible with the core layer which only supports these series: %s (layer is compatible with %s)" diff --git a/external/poky/bitbake/lib/bb/daemonize.py b/external/poky/bitbake/lib/bb/daemonize.py index c937675e..f01e6ec7 100644 --- a/external/poky/bitbake/lib/bb/daemonize.py +++ b/external/poky/bitbake/lib/bb/daemonize.py @@ -1,3 +1,7 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + """ Python Daemonizing helper diff --git a/external/poky/bitbake/lib/bb/data.py b/external/poky/bitbake/lib/bb/data.py index d66d98cc..b0683c51 100644 --- a/external/poky/bitbake/lib/bb/data.py +++ b/external/poky/bitbake/lib/bb/data.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ BitBake 'Data' implementations @@ -22,18 +20,7 @@ the speed is more critical here. # Copyright (C) 2003, 2004 Chris Larson # Copyright (C) 2005 Holger Hans Peter Freyther # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# SPDX-License-Identifier: GPL-2.0-only # # Based on functions from the base bb module, Copyright 2003 Holger Schurig @@ -92,7 +79,7 @@ def expand(s, d, varname = None): return d.expand(s, varname) def expandKeys(alterdata, readdata = None): - if readdata == None: + if readdata is None: readdata = alterdata todolist = {} @@ -143,7 +130,7 @@ def emit_var(var, o=sys.__stdout__, d = init(), all=False): if all: oval = d.getVar(var, False) val = d.getVar(var) - except (KeyboardInterrupt, bb.build.FuncFailed): + except (KeyboardInterrupt): raise except Exception as exc: o.write('# expansion of %s threw %s: %s\n' % (var, exc.__class__.__name__, str(exc))) @@ -322,8 +309,6 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d): if varflags.get("python"): value = d.getVarFlag(key, "_content", False) parser = bb.codeparser.PythonParser(key, logger) - if value and "\t" in value: - logger.warning("Variable %s contains tabs, please remove these (%s)" % (key, d.getVar("FILE"))) parser.parse_python(value, filename=varflags.get("filename"), lineno=varflags.get("lineno")) deps = deps | parser.references deps = deps | (keys & parser.execs) @@ -380,7 +365,7 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d): #bb.note("Variable %s references %s and calls %s" % (key, str(deps), str(execs))) #d.setVarFlag(key, "vardeps", deps) -def generate_dependencies(d): +def generate_dependencies(d, whitelist): keys = set(key for key in d if not key.startswith("__")) shelldeps = set(key for key in d.getVar("__exportlist", False) if d.getVarFlag(key, "export", False) and not d.getVarFlag(key, "unexport", False)) @@ -395,7 +380,7 @@ def generate_dependencies(d): newdeps = deps[task] seen = set() while newdeps: - nextdeps = newdeps + nextdeps = newdeps - whitelist seen |= nextdeps newdeps = set() for dep in nextdeps: @@ -437,8 +422,8 @@ def generate_dependency_hash(tasklist, gendeps, lookupcache, whitelist, fn): var = lookupcache[dep] if var is not None: data = data + str(var) - k = fn + "." + task - basehash[k] = hashlib.md5(data.encode("utf-8")).hexdigest() + k = fn + ":" + task + basehash[k] = hashlib.sha256(data.encode("utf-8")).hexdigest() taskdeps[task] = alldeps return taskdeps, basehash diff --git a/external/poky/bitbake/lib/bb/data_smart.py b/external/poky/bitbake/lib/bb/data_smart.py index 6b94fc4b..7f1b6dcb 100644 --- a/external/poky/bitbake/lib/bb/data_smart.py +++ b/external/poky/bitbake/lib/bb/data_smart.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ BitBake Smart Dictionary Implementation @@ -14,18 +12,8 @@ BitBake build tools. # Copyright (C) 2005 Uli Luckas # Copyright (C) 2005 ROAD GmbH # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # Based on functions from the base bb module, Copyright 2003 Holger Schurig import copy, re, sys, traceback @@ -39,10 +27,11 @@ from bb.COW import COWDictBase logger = logging.getLogger("BitBake.Data") __setvar_keyword__ = ["_append", "_prepend", "_remove"] -__setvar_regexp__ = re.compile('(?P.*?)(?P_append|_prepend|_remove)(_(?P[^A-Z]*))?$') -__expand_var_regexp__ = re.compile(r"\${[^{}@\n\t :]+}") +__setvar_regexp__ = re.compile(r'(?P.*?)(?P_append|_prepend|_remove)(_(?P[^A-Z]*))?$') +__expand_var_regexp__ = re.compile(r"\${[a-zA-Z0-9\-_+./~]+?}") __expand_python_regexp__ = re.compile(r"\${@.+?}") -__whitespace_split__ = re.compile('(\s)') +__whitespace_split__ = re.compile(r'(\s)') +__override_regexp__ = re.compile(r'[a-z0-9]+') def infer_caller_details(loginfo, parent = False, varval = True): """Save the caller the trouble of specifying everything.""" @@ -118,11 +107,11 @@ class VariableParse: else: code = match.group()[3:-1] - if "_remote_data" in self.d: - connector = self.d["_remote_data"] - return connector.expandPythonRef(self.varname, code, self.d) - - codeobj = compile(code.strip(), self.varname or "", "eval") + if self.varname: + varname = 'Var <%s>' % self.varname + else: + varname = '' + codeobj = compile(code.strip(), varname, "eval") parser = bb.codeparser.PythonParser(self.varname, logger) parser.parse_python(code) @@ -275,12 +264,7 @@ class VariableHistory(object): self.variables[newvar].append(i.copy()) def variable(self, var): - remote_connector = self.dataroot.getVar('_remote_data', False) - if remote_connector: - varhistory = remote_connector.getVarHistory(var) - else: - varhistory = [] - + varhistory = [] if var in self.variables: varhistory.extend(self.variables[var]) return varhistory @@ -345,11 +329,12 @@ class VariableHistory(object): lines.append(line) return lines - def get_variable_items_files(self, var, d): + def get_variable_items_files(self, var): """ Use variable history to map items added to a list variable and the files in which they were added. """ + d = self.dataroot history = self.variable(var) finalitems = (d.getVar(var) or '').split() filemap = {} @@ -427,7 +412,8 @@ class DataSmart(MutableMapping): except bb.parse.SkipRecipe: raise except Exception as exc: - raise ExpansionError(varname, s, exc) from exc + tb = sys.exc_info()[2] + raise ExpansionError(varname, s, exc).with_traceback(tb) from exc varparse.value = s @@ -476,10 +462,6 @@ class DataSmart(MutableMapping): if var in dest: return dest[var], self.overridedata.get(var, None) - if "_remote_data" in dest: - connector = dest["_remote_data"]["_content"] - return connector.getVar(var) - if "_data" not in dest: break dest = dest["_data"] @@ -504,12 +486,6 @@ class DataSmart(MutableMapping): if 'parsing' in loginfo: parsing=True - if '_remote_data' in self.dict: - connector = self.dict["_remote_data"]["_content"] - res = connector.setVar(var, value) - if not res: - return - if 'op' not in loginfo: loginfo['op'] = "set" @@ -592,7 +568,7 @@ class DataSmart(MutableMapping): # aka pay the cookie monster override = var[var.rfind('_')+1:] shortvar = var[:var.rfind('_')] - while override and override.islower(): + while override and __override_regexp__.match(override): if shortvar not in self.overridedata: self.overridedata[shortvar] = [] if [var, override] not in self.overridedata[shortvar]: @@ -613,11 +589,9 @@ class DataSmart(MutableMapping): """ Rename the variable key to newkey """ - if '_remote_data' in self.dict: - connector = self.dict["_remote_data"]["_content"] - res = connector.renameVar(key, newkey) - if not res: - return + if key == newkey: + bb.warn("Calling renameVar with equivalent keys (%s) is invalid" % key) + return val = self.getVar(key, 0, parsing=True) if val is not None: @@ -664,11 +638,6 @@ class DataSmart(MutableMapping): def delVar(self, var, **loginfo): self.expand_cache = {} - if '_remote_data' in self.dict: - connector = self.dict["_remote_data"]["_content"] - res = connector.delVar(var) - if not res: - return loginfo['detail'] = "" loginfo['op'] = 'del' @@ -696,11 +665,6 @@ class DataSmart(MutableMapping): def setVarFlag(self, var, flag, value, **loginfo): self.expand_cache = {} - if '_remote_data' in self.dict: - connector = self.dict["_remote_data"]["_content"] - res = connector.setVarFlag(var, flag, value) - if not res: - return if 'op' not in loginfo: loginfo['op'] = "set" @@ -851,11 +815,6 @@ class DataSmart(MutableMapping): def delVarFlag(self, var, flag, **loginfo): self.expand_cache = {} - if '_remote_data' in self.dict: - connector = self.dict["_remote_data"]["_content"] - res = connector.delVarFlag(var, flag) - if not res: - return local_var, _ = self._findVar(var) if not local_var: @@ -973,7 +932,7 @@ class DataSmart(MutableMapping): def localkeys(self): for key in self.dict: - if key not in ['_data', '_remote_data']: + if key not in ['_data']: yield key def __iter__(self): @@ -982,7 +941,7 @@ class DataSmart(MutableMapping): def keylist(d): klist = set() for key in d: - if key in ["_data", "_remote_data"]: + if key in ["_data"]: continue if key in deleted: continue @@ -996,13 +955,6 @@ class DataSmart(MutableMapping): if "_data" in d: klist |= keylist(d["_data"]) - if "_remote_data" in d: - connector = d["_remote_data"]["_content"] - for key in connector.getKeys(): - if key in deleted: - continue - klist.add(key) - return klist self.need_overrides() @@ -1048,7 +1000,10 @@ class DataSmart(MutableMapping): continue value = d.getVar(key, False) or "" - data.update({key:value}) + if type(value) is type(self): + data.update({key:value.get_hash()}) + else: + data.update({key:value}) varflags = d.getVarFlags(key, internalflags = True) if not varflags: @@ -1068,4 +1023,4 @@ class DataSmart(MutableMapping): data.update({i:value}) data_str = str([(k, data[k]) for k in sorted(data.keys())]) - return hashlib.md5(data_str.encode("utf-8")).hexdigest() + return hashlib.sha256(data_str.encode("utf-8")).hexdigest() diff --git a/external/poky/bitbake/lib/bb/event.py b/external/poky/bitbake/lib/bb/event.py index 5b1b094a..d1359f01 100644 --- a/external/poky/bitbake/lib/bb/event.py +++ b/external/poky/bitbake/lib/bb/event.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ BitBake 'Event' implementation @@ -9,21 +7,10 @@ BitBake build tools. # Copyright (C) 2003, 2004 Chris Larson # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -import os, sys -import warnings +import sys import pickle import logging import atexit @@ -136,6 +123,7 @@ def fire_class_handlers(event, d): ui_queue = [] @atexit.register def print_ui_queue(): + global ui_queue """If we're exiting before a UI has been spawned, display any queued LogRecords to the console.""" logger = logging.getLogger("BitBake") @@ -180,6 +168,7 @@ def print_ui_queue(): logger.removeHandler(stderr) else: logger.removeHandler(stdout) + ui_queue = [] def fire_ui_handlers(event, d): global _thread_lock @@ -357,7 +346,7 @@ def set_UIHmask(handlerNum, level, debug_domains, mask): def getName(e): """Returns the name of a class or class instance""" - if getattr(e, "__name__", None) == None: + if getattr(e, "__name__", None) is None: return e.__class__.__name__ else: return e.__name__ @@ -414,23 +403,6 @@ class RecipeTaskPreProcess(RecipeEvent): class RecipeParsed(RecipeEvent): """ Recipe Parsing Complete """ -class StampUpdate(Event): - """Trigger for any adjustment of the stamp files to happen""" - - def __init__(self, targets, stampfns): - self._targets = targets - self._stampfns = stampfns - Event.__init__(self) - - def getStampPrefix(self): - return self._stampfns - - def getTargets(self): - return self._targets - - stampPrefix = property(getStampPrefix) - targets = property(getTargets) - class BuildBase(Event): """Base class for bitbake build events""" @@ -536,7 +508,7 @@ class NoProvider(Event): extra = '' if not self._reasons: if self._close_matches: - extra = ". Close matches:\n %s" % '\n '.join(self._close_matches) + extra = ". Close matches:\n %s" % '\n '.join(sorted(set(self._close_matches))) if self._dependees: msg = "Nothing %sPROVIDES '%s' (but %s %sDEPENDS on or otherwise requires it)%s" % (r, self._item, ", ".join(self._dependees), r, extra) diff --git a/external/poky/bitbake/lib/bb/exceptions.py b/external/poky/bitbake/lib/bb/exceptions.py index cd713439..ecbad599 100644 --- a/external/poky/bitbake/lib/bb/exceptions.py +++ b/external/poky/bitbake/lib/bb/exceptions.py @@ -1,3 +1,6 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# import inspect import traceback diff --git a/external/poky/bitbake/lib/bb/fetch2/__init__.py b/external/poky/bitbake/lib/bb/fetch2/__init__.py index 03e56471..eb112f06 100644 --- a/external/poky/bitbake/lib/bb/fetch2/__init__.py +++ b/external/poky/bitbake/lib/bb/fetch2/__init__.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ BitBake 'Fetch' implementations @@ -10,18 +8,7 @@ BitBake build tools. # Copyright (C) 2003, 2004 Chris Larson # Copyright (C) 2012 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# SPDX-License-Identifier: GPL-2.0-only # # Based on functions from the base bb module, Copyright 2003 Holger Schurig @@ -46,6 +33,9 @@ _checksum_cache = bb.checksum.FileChecksumCache() logger = logging.getLogger("BitBake.Fetcher") +CHECKSUM_LIST = [ "md5", "sha256", "sha1", "sha384", "sha512" ] +SHOWN_CHECKSUM_LIST = ["sha256"] + class BBFetchException(Exception): """Class all fetch exceptions inherit from""" def __init__(self, message): @@ -144,10 +134,9 @@ class NonLocalMethod(Exception): Exception.__init__(self) class MissingChecksumEvent(bb.event.Event): - def __init__(self, url, md5sum, sha256sum): + def __init__(self, url, **checksums): self.url = url - self.checksums = {'md5sum': md5sum, - 'sha256sum': sha256sum} + self.checksums = checksums bb.event.Event.__init__(self) @@ -497,17 +486,22 @@ def fetcher_init(d): Called to initialize the fetchers once the configuration data is known. Calls before this must not hit the cache. """ + + revs = bb.persist_data.persist('BB_URI_HEADREVS', d) + try: + # fetcher_init is called multiple times, so make sure we only save the + # revs the first time it is called. + if not bb.fetch2.saved_headrevs: + bb.fetch2.saved_headrevs = dict(revs) + except: + pass + # When to drop SCM head revisions controlled by user policy srcrev_policy = d.getVar('BB_SRCREV_POLICY') or "clear" if srcrev_policy == "cache": logger.debug(1, "Keeping SRCREV cache due to cache policy of: %s", srcrev_policy) elif srcrev_policy == "clear": logger.debug(1, "Clearing SRCREV cache due to cache policy of: %s", srcrev_policy) - revs = bb.persist_data.persist('BB_URI_HEADREVS', d) - try: - bb.fetch2.saved_headrevs = revs.items() - except: - pass revs.clear() else: raise FetchError("Invalid SRCREV cache policy of: %s" % srcrev_policy) @@ -524,24 +518,14 @@ def fetcher_parse_save(): def fetcher_parse_done(): _checksum_cache.save_merge() -def fetcher_compare_revisions(): +def fetcher_compare_revisions(d): """ - Compare the revisions in the persistant cache with current values and - return true/false on whether they've changed. + Compare the revisions in the persistent cache with the saved values from + when bitbake was started and return true if they have changed. """ - data = bb.persist_data.persist('BB_URI_HEADREVS', d).items() - data2 = bb.fetch2.saved_headrevs - - changed = False - for key in data: - if key not in data2 or data2[key] != data[key]: - logger.debug(1, "%s changed", key) - changed = True - return True - else: - logger.debug(2, "%s did not change", key) - return False + headrevs = dict(bb.persist_data.persist('BB_URI_HEADREVS', d)) + return headrevs != bb.fetch2.saved_headrevs def mirror_from_string(data): mirrors = (data or "").replace('\\n',' ').split() @@ -565,71 +549,84 @@ def verify_checksum(ud, d, precomputed={}): downloading. See https://bugzilla.yoctoproject.org/show_bug.cgi?id=5571. """ - _MD5_KEY = "md5" - _SHA256_KEY = "sha256" - if ud.ignore_checksums or not ud.method.supports_checksum(ud): return {} - if _MD5_KEY in precomputed: - md5data = precomputed[_MD5_KEY] - else: - md5data = bb.utils.md5_file(ud.localpath) + def compute_checksum_info(checksum_id): + checksum_name = getattr(ud, "%s_name" % checksum_id) - if _SHA256_KEY in precomputed: - sha256data = precomputed[_SHA256_KEY] - else: - sha256data = bb.utils.sha256_file(ud.localpath) + if checksum_id in precomputed: + checksum_data = precomputed[checksum_id] + else: + checksum_data = getattr(bb.utils, "%s_file" % checksum_id)(ud.localpath) - if ud.method.recommends_checksum(ud) and not ud.md5_expected and not ud.sha256_expected: - # If strict checking enabled and neither sum defined, raise error + checksum_expected = getattr(ud, "%s_expected" % checksum_id) + + return { + "id": checksum_id, + "name": checksum_name, + "data": checksum_data, + "expected": checksum_expected + } + + checksum_infos = [] + for checksum_id in CHECKSUM_LIST: + checksum_infos.append(compute_checksum_info(checksum_id)) + + checksum_dict = {ci["id"] : ci["data"] for ci in checksum_infos} + checksum_event = {"%ssum" % ci["id"] : ci["data"] for ci in checksum_infos} + + for ci in checksum_infos: + if ci["id"] in SHOWN_CHECKSUM_LIST: + checksum_lines = ["SRC_URI[%s] = \"%s\"" % (ci["name"], ci["data"])] + + # If no checksum has been provided + if ud.method.recommends_checksum(ud) and all(ci["expected"] is None for ci in checksum_infos): + messages = [] strict = d.getVar("BB_STRICT_CHECKSUM") or "0" + + # If strict checking enabled and neither sum defined, raise error if strict == "1": - logger.error('No checksum specified for %s, please add at least one to the recipe:\n' - 'SRC_URI[%s] = "%s"\nSRC_URI[%s] = "%s"' % - (ud.localpath, ud.md5_name, md5data, - ud.sha256_name, sha256data)) - raise NoChecksumError('Missing SRC_URI checksum', ud.url) + messages.append("No checksum specified for '%s', please add at " \ + "least one to the recipe:" % ud.localpath) + messages.extend(checksum_lines) + logger.error("\n".join(messages)) + raise NoChecksumError("Missing SRC_URI checksum", ud.url) - bb.event.fire(MissingChecksumEvent(ud.url, md5data, sha256data), d) + bb.event.fire(MissingChecksumEvent(ud.url, **checksum_event), d) if strict == "ignore": - return { - _MD5_KEY: md5data, - _SHA256_KEY: sha256data - } + return checksum_dict # Log missing sums so user can more easily add them - logger.warning('Missing md5 SRC_URI checksum for %s, consider adding to the recipe:\n' - 'SRC_URI[%s] = "%s"', - ud.localpath, ud.md5_name, md5data) - logger.warning('Missing sha256 SRC_URI checksum for %s, consider adding to the recipe:\n' - 'SRC_URI[%s] = "%s"', - ud.localpath, ud.sha256_name, sha256data) + messages.append("Missing checksum for '%s', consider adding at " \ + "least one to the recipe:" % ud.localpath) + messages.extend(checksum_lines) + logger.warning("\n".join(messages)) # We want to alert the user if a checksum is defined in the recipe but # it does not match. - msg = "" - mismatch = False - if ud.md5_expected and ud.md5_expected != md5data: - msg = msg + "\nFile: '%s' has %s checksum %s when %s was expected" % (ud.localpath, 'md5', md5data, ud.md5_expected) - mismatch = True; - - if ud.sha256_expected and ud.sha256_expected != sha256data: - msg = msg + "\nFile: '%s' has %s checksum %s when %s was expected" % (ud.localpath, 'sha256', sha256data, ud.sha256_expected) - mismatch = True; - - if mismatch: - msg = msg + '\nIf this change is expected (e.g. you have upgraded to a new version without updating the checksums) then you can use these lines within the recipe:\nSRC_URI[%s] = "%s"\nSRC_URI[%s] = "%s"\nOtherwise you should retry the download and/or check with upstream to determine if the file has become corrupted or otherwise unexpectedly modified.\n' % (ud.md5_name, md5data, ud.sha256_name, sha256data) - - if len(msg): - raise ChecksumError('Checksum mismatch!%s' % msg, ud.url, md5data) - - return { - _MD5_KEY: md5data, - _SHA256_KEY: sha256data - } - + messages = [] + messages.append("Checksum mismatch!") + bad_checksum = None + + for ci in checksum_infos: + if ci["expected"] and ci["expected"] != ci["data"]: + messages.append("File: '%s' has %s checksum %s when %s was " \ + "expected" % (ud.localpath, ci["id"], ci["data"], ci["expected"])) + bad_checksum = ci["data"] + + if bad_checksum: + messages.append("If this change is expected (e.g. you have upgraded " \ + "to a new version without updating the checksums) " \ + "then you can use these lines within the recipe:") + messages.extend(checksum_lines) + messages.append("Otherwise you should retry the download and/or " \ + "check with upstream to determine if the file has " \ + "become corrupted or otherwise unexpectedly modified.") + raise ChecksumError("\n".join(messages), ud.url, bad_checksum) + + return checksum_dict def verify_donestamp(ud, d, origud=None): """ @@ -777,7 +774,8 @@ def get_srcrev(d, method_name='sortable_revision'): # format = d.getVar('SRCREV_FORMAT') if not format: - raise FetchError("The SRCREV_FORMAT variable must be set when multiple SCMs are used.") + raise FetchError("The SRCREV_FORMAT variable must be set when multiple SCMs are used.\n"\ + "The SCMs are:\n%s" % '\n'.join(scms)) name_to_rev = {} seenautoinc = False @@ -855,10 +853,18 @@ def runfetchcmd(cmd, d, quiet=False, cleanup=None, log=None, workdir=None): if val: cmd = 'export ' + var + '=\"%s\"; %s' % (val, cmd) + # Ensure that a _PYTHON_SYSCONFIGDATA_NAME value set by a recipe + # (for example via python3native.bbclass since warrior) is not set for + # host Python (otherwise tools like git-make-shallow will fail) + cmd = 'unset _PYTHON_SYSCONFIGDATA_NAME; ' + cmd + # Disable pseudo as it may affect ssh, potentially causing it to hang. cmd = 'export PSEUDO_DISABLED=1; ' + cmd - logger.debug(1, "Running %s", cmd) + if workdir: + logger.debug(1, "Running '%s' in %s" % (cmd, workdir)) + else: + logger.debug(1, "Running %s", cmd) success = False error_message = "" @@ -894,7 +900,7 @@ def check_network_access(d, info, url): log remote network access, and error if BB_NO_NETWORK is set or the given URI is untrusted """ - if d.getVar("BB_NO_NETWORK") == "1": + if bb.utils.to_boolean(d.getVar("BB_NO_NETWORK")): raise NetworkAccess(url, info) elif not trusted_network(d, url): raise UntrustedUrl(url, info) @@ -1028,7 +1034,7 @@ def try_mirror_url(fetch, origud, ud, ld, check = False): raise except IOError as e: - if e.errno in [os.errno.ESTALE]: + if e.errno in [errno.ESTALE]: logger.warning("Stale Error Observed %s." % ud.url) return False raise @@ -1085,7 +1091,7 @@ def try_mirrors(fetch, d, origud, mirrors, check = False): for index, uri in enumerate(uris): ret = try_mirror_url(fetch, origud, uds[index], ld, check) - if ret != False: + if ret: return ret return None @@ -1095,7 +1101,7 @@ def trusted_network(d, url): BB_ALLOWED_NETWORKS is set globally or for a specific recipe. Note: modifies SRC_URI & mirrors. """ - if d.getVar('BB_NO_NETWORK') == "1": + if bb.utils.to_boolean(d.getVar("BB_NO_NETWORK")): return True pkgname = d.expand(d.getVar('PN', False)) @@ -1201,14 +1207,14 @@ def get_checksum_file_list(d): return " ".join(filelist) -def get_file_checksums(filelist, pn): +def get_file_checksums(filelist, pn, localdirsexclude): """Get a list of the checksums for a list of local files Returns the checksums for a list of local files, caching the results as it proceeds """ - return _checksum_cache.get_checksums(filelist, pn) + return _checksum_cache.get_checksums(filelist, pn, localdirsexclude) class FetchData(object): @@ -1234,24 +1240,26 @@ class FetchData(object): self.pswd = self.parm["pswd"] self.setup = False - if "name" in self.parm: - self.md5_name = "%s.md5sum" % self.parm["name"] - self.sha256_name = "%s.sha256sum" % self.parm["name"] - else: - self.md5_name = "md5sum" - self.sha256_name = "sha256sum" - if self.md5_name in self.parm: - self.md5_expected = self.parm[self.md5_name] - elif self.type not in ["http", "https", "ftp", "ftps", "sftp", "s3"]: - self.md5_expected = None - else: - self.md5_expected = d.getVarFlag("SRC_URI", self.md5_name) - if self.sha256_name in self.parm: - self.sha256_expected = self.parm[self.sha256_name] - elif self.type not in ["http", "https", "ftp", "ftps", "sftp", "s3"]: - self.sha256_expected = None - else: - self.sha256_expected = d.getVarFlag("SRC_URI", self.sha256_name) + def configure_checksum(checksum_id): + if "name" in self.parm: + checksum_name = "%s.%ssum" % (self.parm["name"], checksum_id) + else: + checksum_name = "%ssum" % checksum_id + + setattr(self, "%s_name" % checksum_id, checksum_name) + + if checksum_name in self.parm: + checksum_expected = self.parm[checksum_name] + elif self.type not in ["http", "https", "ftp", "ftps", "sftp", "s3"]: + checksum_expected = None + else: + checksum_expected = d.getVarFlag("SRC_URI", checksum_name) + + setattr(self, "%s_expected" % checksum_id, checksum_expected) + + for checksum_id in CHECKSUM_LIST: + configure_checksum(checksum_id) + self.ignore_checksums = False self.names = self.parm.get("name",'default').split(',') @@ -1355,7 +1363,7 @@ class FetchMethod(object): """ # We cannot compute checksums for directories - if os.path.isdir(urldata.localpath) == True: + if os.path.isdir(urldata.localpath): return False if urldata.localpath.find("*") != -1: return False @@ -1369,6 +1377,18 @@ class FetchMethod(object): """ return False + def verify_donestamp(self, ud, d): + """ + Verify the donestamp file + """ + return verify_donestamp(ud, d) + + def update_donestamp(self, ud, d): + """ + Update the donestamp file + """ + update_stamp(ud, d) + def _strip_leading_slashes(self, relpath): """ Remove leading slash as os.path.join can't cope @@ -1404,7 +1424,7 @@ class FetchMethod(object): Fetch urls Assumes localpath was called first """ - raise NoMethodError(url) + raise NoMethodError(urldata.url) def unpack(self, urldata, rootdir, data): iterate = False @@ -1543,12 +1563,18 @@ class FetchMethod(object): """ return True + def try_mirrors(self, fetch, urldata, d, mirrors, check=False): + """ + Try to use a mirror + """ + return bool(try_mirrors(fetch, d, urldata, mirrors, check)) + def checkstatus(self, fetch, urldata, d): """ Check the status of a URL Assumes localpath was called first """ - logger.info("URL %s could not be checked for status since no method exists.", url) + logger.info("URL %s could not be checked for status since no method exists.", urldata.url) return True def latest_revision(self, ud, d, name): @@ -1556,7 +1582,7 @@ class FetchMethod(object): Look in the cache for the latest revision, if not present ask the SCM. """ if not hasattr(self, "_latest_revision"): - raise ParameterError("The fetcher for this URL does not support _latest_revision", url) + raise ParameterError("The fetcher for this URL does not support _latest_revision", ud.url) revs = bb.persist_data.persist('BB_URI_HEADREVS', d) key = self.generate_revision_key(ud, d, name) @@ -1571,8 +1597,7 @@ class FetchMethod(object): return True, str(latest_rev) def generate_revision_key(self, ud, d, name): - key = self._revision_key(ud, d, name) - return "%s-%s" % (key, d.getVar("PN") or "") + return self._revision_key(ud, d, name) def latest_versionstring(self, ud, d): """ @@ -1582,6 +1607,16 @@ class FetchMethod(object): """ return ('', '') + def done(self, ud, d): + """ + Is the download done ? + """ + if os.path.exists(ud.localpath): + return True + if ud.localpath.find("*") != -1: + return True + return False + class Fetch(object): def __init__(self, urls, d, cache = True, localonly = False, connection_cache = None): if localonly and cache: @@ -1596,8 +1631,11 @@ class Fetch(object): fn = d.getVar('FILE') mc = d.getVar('__BBMULTICONFIG') or "" - if cache and fn and mc + fn in urldata_cache: - self.ud = urldata_cache[mc + fn + str(id(d))] + key = None + if cache and fn: + key = mc + fn + str(id(d)) + if key in urldata_cache: + self.ud = urldata_cache[key] for url in urls: if url not in self.ud: @@ -1608,8 +1646,8 @@ class Fetch(object): self.ud[url] = None pass - if fn and cache: - urldata_cache[mc + fn + str(id(d))] = self.ud + if key: + urldata_cache[key] = self.ud def localpath(self, url): if url not in self.urls: @@ -1639,13 +1677,13 @@ class Fetch(object): urls = self.urls network = self.d.getVar("BB_NO_NETWORK") - premirroronly = (self.d.getVar("BB_FETCH_PREMIRRORONLY") == "1") + premirroronly = bb.utils.to_boolean(self.d.getVar("BB_FETCH_PREMIRRORONLY")) for u in urls: ud = self.ud[u] ud.setup_localpath(self.d) m = ud.method - localpath = "" + done = False if ud.lockfile: lf = bb.utils.lockfile(ud.lockfile) @@ -1653,28 +1691,28 @@ class Fetch(object): try: self.d.setVar("BB_NO_NETWORK", network) - if verify_donestamp(ud, self.d) and not m.need_update(ud, self.d): - localpath = ud.localpath + if m.verify_donestamp(ud, self.d) and not m.need_update(ud, self.d): + done = True elif m.try_premirror(ud, self.d): logger.debug(1, "Trying PREMIRRORS") mirrors = mirror_from_string(self.d.getVar('PREMIRRORS')) - localpath = try_mirrors(self, self.d, ud, mirrors, False) - if localpath: + done = m.try_mirrors(self, ud, self.d, mirrors) + if done: try: # early checksum verification so that if the checksum of the premirror # contents mismatch the fetcher can still try upstream and mirrors - update_stamp(ud, self.d) + m.update_donestamp(ud, self.d) except ChecksumError as e: logger.warning("Checksum failure encountered with premirror download of %s - will attempt other sources." % u) logger.debug(1, str(e)) - localpath = "" + done = False if premirroronly: self.d.setVar("BB_NO_NETWORK", "1") firsterr = None - verified_stamp = verify_donestamp(ud, self.d) - if not localpath and (not verified_stamp or m.need_update(ud, self.d)): + verified_stamp = m.verify_donestamp(ud, self.d) + if not done and (not verified_stamp or m.need_update(ud, self.d)): try: if not trusted_network(self.d, ud.url): raise UntrustedUrl(ud.url) @@ -1682,10 +1720,10 @@ class Fetch(object): m.download(ud, self.d) if hasattr(m, "build_mirror_data"): m.build_mirror_data(ud, self.d) - localpath = ud.localpath + done = True # early checksum verify, so that if checksum mismatched, # fetcher still have chance to fetch from mirror - update_stamp(ud, self.d) + m.update_donestamp(ud, self.d) except bb.fetch2.NetworkAccess: raise @@ -1707,17 +1745,17 @@ class Fetch(object): m.clean(ud, self.d) logger.debug(1, "Trying MIRRORS") mirrors = mirror_from_string(self.d.getVar('MIRRORS')) - localpath = try_mirrors(self, self.d, ud, mirrors) + done = m.try_mirrors(self, ud, self.d, mirrors) - if not localpath or ((not os.path.exists(localpath)) and localpath.find("*") == -1): + if not done or not m.done(ud, self.d): if firsterr: logger.error(str(firsterr)) raise FetchError("Unable to fetch URL from any source.", u) - update_stamp(ud, self.d) + m.update_donestamp(ud, self.d) except IOError as e: - if e.errno in [os.errno.ESTALE]: + if e.errno in [errno.ESTALE]: logger.error("Stale Error Observed %s." % u) raise ChecksumError("Stale Error Detected") @@ -1745,14 +1783,14 @@ class Fetch(object): logger.debug(1, "Testing URL %s", u) # First try checking uri, u, from PREMIRRORS mirrors = mirror_from_string(self.d.getVar('PREMIRRORS')) - ret = try_mirrors(self, self.d, ud, mirrors, True) + ret = m.try_mirrors(self, ud, self.d, mirrors, True) if not ret: # Next try checking from the original uri, u ret = m.checkstatus(self, ud, self.d) if not ret: # Finally, try checking uri, u, from MIRRORS mirrors = mirror_from_string(self.d.getVar('MIRRORS')) - ret = try_mirrors(self, self.d, ud, mirrors, True) + ret = m.try_mirrors(self, ud, self.d, mirrors, True) if not ret: raise FetchError("URL %s doesn't work" % u, u) @@ -1787,7 +1825,7 @@ class Fetch(object): for url in urls: if url not in self.ud: - self.ud[url] = FetchData(url, d) + self.ud[url] = FetchData(url, self.d) ud = self.ud[url] ud.setup_localpath(self.d) @@ -1857,6 +1895,7 @@ from . import osc from . import repo from . import clearcase from . import npm +from . import npmsw methods.append(local.Local()) methods.append(wget.Wget()) @@ -1875,3 +1914,4 @@ methods.append(osc.Osc()) methods.append(repo.Repo()) methods.append(clearcase.ClearCase()) methods.append(npm.Npm()) +methods.append(npmsw.NpmShrinkWrap()) diff --git a/external/poky/bitbake/lib/bb/fetch2/bzr.py b/external/poky/bitbake/lib/bb/fetch2/bzr.py index 658502f9..566ace9f 100644 --- a/external/poky/bitbake/lib/bb/fetch2/bzr.py +++ b/external/poky/bitbake/lib/bb/fetch2/bzr.py @@ -10,22 +10,10 @@ BitBake 'Fetch' implementation for bzr. # BitBake build tools. # Copyright (C) 2003, 2004 Chris Larson # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import os -import sys -import logging import bb from bb.fetch2 import FetchMethod from bb.fetch2 import FetchError diff --git a/external/poky/bitbake/lib/bb/fetch2/clearcase.py b/external/poky/bitbake/lib/bb/fetch2/clearcase.py index 3a6573d0..49d7ae1b 100644 --- a/external/poky/bitbake/lib/bb/fetch2/clearcase.py +++ b/external/poky/bitbake/lib/bb/fetch2/clearcase.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ BitBake 'Fetch' clearcase implementation @@ -47,26 +45,16 @@ User credentials: """ # Copyright (C) 2014 Siemens AG # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# SPDX-License-Identifier: GPL-2.0-only # import os -import sys import shutil import bb from bb.fetch2 import FetchMethod from bb.fetch2 import FetchError +from bb.fetch2 import MissingParameterError +from bb.fetch2 import ParameterError from bb.fetch2 import runfetchcmd from bb.fetch2 import logger @@ -92,7 +80,7 @@ class ClearCase(FetchMethod): if 'protocol' in ud.parm: ud.proto = ud.parm['protocol'] if not ud.proto in ('http', 'https'): - raise fetch2.ParameterError("Invalid protocol type", ud.url) + raise ParameterError("Invalid protocol type", ud.url) ud.vob = '' if 'vob' in ud.parm: @@ -156,18 +144,18 @@ class ClearCase(FetchMethod): basecmd = "%s %s" % (ud.basecmd, command) - if command is 'mkview': + if command == 'mkview': if not "rcleartool" in ud.basecmd: # Cleartool needs a -snapshot view options.append("-snapshot") options.append("-tag %s" % ud.viewname) options.append(ud.viewdir) - elif command is 'rmview': + elif command == 'rmview': options.append("-force") options.append("%s" % ud.viewdir) - elif command is 'setcs': + elif command == 'setcs': options.append("-overwrite") options.append(ud.configspecfile) @@ -249,7 +237,7 @@ class ClearCase(FetchMethod): # Clean clearcase meta-data before tar - runfetchcmd('tar -czf "%s" .' % (ud.localpath), d, cleanup = [ud.localpath]) + runfetchcmd('tar -czf "%s" .' % (ud.localpath), d, cleanup = [ud.localpath], workdir = ud.viewdir) # Clean up so we can create a new view next time self.clean(ud, d); diff --git a/external/poky/bitbake/lib/bb/fetch2/cvs.py b/external/poky/bitbake/lib/bb/fetch2/cvs.py index 0e0a3196..29123a48 100644 --- a/external/poky/bitbake/lib/bb/fetch2/cvs.py +++ b/external/poky/bitbake/lib/bb/fetch2/cvs.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ BitBake 'Fetch' implementations @@ -10,24 +8,12 @@ BitBake build tools. # Copyright (C) 2003, 2004 Chris Larson # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -# -#Based on functions from the base bb module, Copyright 2003 Holger Schurig +# Based on functions from the base bb module, Copyright 2003 Holger Schurig # import os -import logging import bb from bb.fetch2 import FetchMethod, FetchError, MissingParameterError, logger from bb.fetch2 import runfetchcmd diff --git a/external/poky/bitbake/lib/bb/fetch2/git.py b/external/poky/bitbake/lib/bb/fetch2/git.py index 59a2ee8f..2ce9395f 100644 --- a/external/poky/bitbake/lib/bb/fetch2/git.py +++ b/external/poky/bitbake/lib/bb/fetch2/git.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ BitBake 'Fetch' git implementation @@ -55,20 +53,10 @@ Supported SRC_URI options are: """ -#Copyright (C) 2005 Richard Purdie +# Copyright (C) 2005 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import collections import errno @@ -199,7 +187,7 @@ class Git(FetchMethod): depth_default = 1 ud.shallow_depths = collections.defaultdict(lambda: depth_default) - revs_default = d.getVar("BB_GIT_SHALLOW_REVS", True) + revs_default = d.getVar("BB_GIT_SHALLOW_REVS") ud.shallow_revs = [] ud.branches = {} for pos, name in enumerate(ud.names): @@ -304,11 +292,21 @@ class Git(FetchMethod): def clonedir_need_update(self, ud, d): if not os.path.exists(ud.clonedir): return True + if ud.shallow and ud.write_shallow_tarballs and self.clonedir_need_shallow_revs(ud, d): + return True for name in ud.names: if not self._contains_ref(ud, d, name, ud.clonedir): return True return False + def clonedir_need_shallow_revs(self, ud, d): + for rev in ud.shallow_revs: + try: + runfetchcmd('%s rev-parse -q --verify %s' % (ud.basecmd, rev), d, quiet=True, workdir=ud.clonedir) + except bb.fetch2.FetchError: + return rev + return None + def shallow_tarball_need_update(self, ud): return ud.shallow and ud.write_shallow_tarballs and not os.path.exists(ud.fullshallow) @@ -318,7 +316,7 @@ class Git(FetchMethod): def try_premirror(self, ud, d): # If we don't do this, updating an existing checkout with only premirrors # is not possible - if d.getVar("BB_FETCH_PREMIRRORONLY") is not None: + if bb.utils.to_boolean(d.getVar("BB_FETCH_PREMIRRORONLY")): return True if os.path.exists(ud.clonedir): return False @@ -351,19 +349,13 @@ class Git(FetchMethod): runfetchcmd(clone_cmd, d, log=progresshandler) # Update the checkout if needed - needupdate = False - for name in ud.names: - if not self._contains_ref(ud, d, name, ud.clonedir): - needupdate = True - break - - if needupdate: + if self.clonedir_need_update(ud, d): output = runfetchcmd("%s remote" % ud.basecmd, d, quiet=True, workdir=ud.clonedir) if "origin" in output: runfetchcmd("%s remote rm origin" % ud.basecmd, d, workdir=ud.clonedir) runfetchcmd("%s remote add --mirror=fetch origin %s" % (ud.basecmd, repourl), d, workdir=ud.clonedir) - fetch_cmd = "LANG=C %s fetch -f --prune --progress %s refs/*:refs/*" % (ud.basecmd, repourl) + fetch_cmd = "LANG=C %s fetch -f --progress %s refs/*:refs/*" % (ud.basecmd, repourl) if ud.proto.lower() != 'file': bb.fetch2.check_network_access(d, fetch_cmd, ud.url) progresshandler = GitProgressHandler(d) @@ -381,6 +373,11 @@ class Git(FetchMethod): if not self._contains_ref(ud, d, name, ud.clonedir): raise bb.fetch2.FetchError("Unable to find revision %s in branch %s even from upstream" % (ud.revisions[name], ud.branches[name])) + if ud.shallow and ud.write_shallow_tarballs: + missing_rev = self.clonedir_need_shallow_revs(ud, d) + if missing_rev: + raise bb.fetch2.FetchError("Unable to find revision %s even from upstream" % missing_rev) + def build_mirror_data(self, ud, d): if ud.shallow and ud.write_shallow_tarballs: if not os.path.exists(ud.fullshallow): @@ -476,6 +473,8 @@ class Git(FetchMethod): if os.path.exists(destdir): bb.utils.prunedir(destdir) + need_lfs = ud.parm.get("lfs", "1") == "1" + source_found = False source_error = [] @@ -503,6 +502,13 @@ class Git(FetchMethod): repourl = self._get_repo_url(ud) runfetchcmd("%s remote set-url origin %s" % (ud.basecmd, repourl), d, workdir=destdir) + + if self._contains_lfs(ud, d, destdir): + if need_lfs and not self._find_git_lfs(d): + raise bb.fetch2.FetchError("Repository %s has LFS content, install git-lfs on host to download (or set lfs=0 to ignore it)" % (repourl)) + else: + bb.note("Repository %s has LFS content but it is not being fetched" % (repourl)) + if not ud.nocheckout: if subdir != "": runfetchcmd("%s read-tree %s%s" % (ud.basecmd, ud.revisions[ud.names[0]], readpathspec), d, @@ -522,9 +528,17 @@ class Git(FetchMethod): def clean(self, ud, d): """ clean the git directory """ - bb.utils.remove(ud.localpath, True) - bb.utils.remove(ud.fullmirror) - bb.utils.remove(ud.fullmirror + ".done") + to_remove = [ud.localpath, ud.fullmirror, ud.fullmirror + ".done"] + # The localpath is a symlink to clonedir when it is cloned from a + # mirror, so remove both of them. + if os.path.islink(ud.localpath): + clonedir = os.path.realpath(ud.localpath) + to_remove.append(clonedir) + + for r in to_remove: + if os.path.exists(r): + bb.note('Removing %s' % r) + bb.utils.remove(r, True) def supports_srcrev(self): return True @@ -545,6 +559,27 @@ class Git(FetchMethod): raise bb.fetch2.FetchError("The command '%s' gave output with more then 1 line unexpectedly, output: '%s'" % (cmd, output)) return output.split()[0] != "0" + def _contains_lfs(self, ud, d, wd): + """ + Check if the repository has 'lfs' (large file) content + """ + cmd = "%s grep lfs HEAD:.gitattributes | wc -l" % ( + ud.basecmd) + try: + output = runfetchcmd(cmd, d, quiet=True, workdir=wd) + if int(output) > 0: + return True + except (bb.fetch2.FetchError,ValueError): + pass + return False + + def _find_git_lfs(self, d): + """ + Return True if git-lfs can be found, False otherwise. + """ + import shutil + return shutil.which("git-lfs", path=d.getVar('PATH')) is not None + def _get_repo_url(self, ud): """ Return the repository URL @@ -559,7 +594,9 @@ class Git(FetchMethod): """ Return a unique key for the url """ - return "git:" + ud.host + ud.path.replace('/', '.') + ud.unresolvedrev[name] + # Collapse adjacent slashes + slash_re = re.compile(r"/+") + return "git:" + ud.host + slash_re.sub(".", ud.path) + ud.unresolvedrev[name] def _lsremote(self, ud, d, search): """ @@ -615,7 +652,7 @@ class Git(FetchMethod): """ pupver = ('', '') - tagregex = re.compile(d.getVar('UPSTREAM_CHECK_GITTAGREGEX') or "(?P([0-9][\.|_]?)+)") + tagregex = re.compile(d.getVar('UPSTREAM_CHECK_GITTAGREGEX') or r"(?P([0-9][\.|_]?)+)") try: output = self._lsremote(ud, d, "refs/tags/*") except (bb.fetch2.FetchError, bb.fetch2.NetworkAccess) as e: @@ -630,13 +667,13 @@ class Git(FetchMethod): tag_head = line.split("/")[-1] # Ignore non-released branches - m = re.search("(alpha|beta|rc|final)+", tag_head) + m = re.search(r"(alpha|beta|rc|final)+", tag_head) if m: continue # search for version in the line tag = tagregex.search(tag_head) - if tag == None: + if tag is None: continue tag = tag.group('pver') diff --git a/external/poky/bitbake/lib/bb/fetch2/gitannex.py b/external/poky/bitbake/lib/bb/fetch2/gitannex.py index a9b69caa..80a808d8 100644 --- a/external/poky/bitbake/lib/bb/fetch2/gitannex.py +++ b/external/poky/bitbake/lib/bb/fetch2/gitannex.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ BitBake 'Fetch' git annex implementation """ @@ -7,24 +5,12 @@ BitBake 'Fetch' git annex implementation # Copyright (C) 2014 Otavio Salvador # Copyright (C) 2014 O.S. Systems Software LTDA. # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -import os import bb from bb.fetch2.git import Git from bb.fetch2 import runfetchcmd -from bb.fetch2 import logger class GitANNEX(Git): def supports(self, ud, d): diff --git a/external/poky/bitbake/lib/bb/fetch2/gitsm.py b/external/poky/bitbake/lib/bb/fetch2/gitsm.py index a07eb7e7..e7083001 100644 --- a/external/poky/bitbake/lib/bb/fetch2/gitsm.py +++ b/external/poky/bitbake/lib/bb/fetch2/gitsm.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ BitBake 'Fetch' git submodules implementation @@ -16,27 +14,18 @@ NOTE: Switching a SRC_URI from "git://" to "gitsm://" requires a clean of your r # Copyright (C) 2013 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import os import bb import copy +import shutil +import tempfile from bb.fetch2.git import Git from bb.fetch2 import runfetchcmd from bb.fetch2 import logger from bb.fetch2 import Fetch -from bb.fetch2 import BBFetchException class GitSM(Git): def supports(self, ud, d): @@ -143,7 +132,7 @@ class GitSM(Git): ld.setVar('SRCPV', d.getVar('SRCPV')) ld.setVar('SRCREV_FORMAT', module) - function(ud, url, module, paths[module], ld) + function(ud, url, module, paths[module], workdir, ld) return submodules != [] @@ -165,7 +154,7 @@ class GitSM(Git): return False def download(self, ud, d): - def download_submodule(ud, url, module, modpath, d): + def download_submodule(ud, url, module, modpath, workdir, d): url += ";bareclone=1;nobranch=1" # Is the following still needed? @@ -176,16 +165,25 @@ class GitSM(Git): newfetch.download() # Drop a nugget to add each of the srcrevs we've fetched (used by need_update) runfetchcmd("%s config --add bitbake.srcrev %s" % \ - (ud.basecmd, ud.revisions[ud.names[0]]), d, workdir=ud.clonedir) + (ud.basecmd, ud.revisions[ud.names[0]]), d, workdir=workdir) except Exception as e: logger.error('gitsm: submodule download failed: %s %s' % (type(e).__name__, str(e))) raise Git.download(self, ud, d) - self.process_submodules(ud, ud.clonedir, download_submodule, d) + + # If we're using a shallow mirror tarball it needs to be unpacked + # temporarily so that we can examine the .gitmodules file + if ud.shallow and os.path.exists(ud.fullshallow) and self.need_update(ud, d): + tmpdir = tempfile.mkdtemp(dir=d.getVar("DL_DIR")) + runfetchcmd("tar -xzf %s" % ud.fullshallow, d, workdir=tmpdir) + self.process_submodules(ud, tmpdir, download_submodule, d) + shutil.rmtree(tmpdir) + else: + self.process_submodules(ud, ud.clonedir, download_submodule, d) def unpack(self, ud, destdir, d): - def unpack_submodules(ud, url, module, modpath, d): + def unpack_submodules(ud, url, module, modpath, workdir, d): url += ";bareclone=1;nobranch=1" # Figure out where we clone over the bare submodules... diff --git a/external/poky/bitbake/lib/bb/fetch2/hg.py b/external/poky/bitbake/lib/bb/fetch2/hg.py index 936d0431..8f503701 100644 --- a/external/poky/bitbake/lib/bb/fetch2/hg.py +++ b/external/poky/bitbake/lib/bb/fetch2/hg.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ BitBake 'Fetch' implementation for mercurial DRCS (hg). @@ -9,24 +7,12 @@ BitBake 'Fetch' implementation for mercurial DRCS (hg). # Copyright (C) 2004 Marcin Juszkiewicz # Copyright (C) 2007 Robert Schuster # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# SPDX-License-Identifier: GPL-2.0-only # # Based on functions from the base bb module, Copyright 2003 Holger Schurig +# import os -import sys -import logging import bb import errno from bb.fetch2 import FetchMethod @@ -66,13 +52,6 @@ class Hg(FetchMethod): else: ud.proto = "hg" - ud.setup_revisions(d) - - if 'rev' in ud.parm: - ud.revision = ud.parm['rev'] - elif not ud.revision: - ud.revision = self.latest_revision(ud, d) - # Create paths to mercurial checkouts hgsrcname = '%s_%s_%s' % (ud.module.replace('/', '.'), \ ud.host, ud.path.replace('/', '.')) @@ -86,6 +65,13 @@ class Hg(FetchMethod): ud.localfile = ud.moddir ud.basecmd = d.getVar("FETCHCMD_hg") or "/usr/bin/env hg" + ud.setup_revisions(d) + + if 'rev' in ud.parm: + ud.revision = ud.parm['rev'] + elif not ud.revision: + ud.revision = self.latest_revision(ud, d) + ud.write_tarballs = d.getVar("BB_GENERATE_MIRROR_TARBALLS") def need_update(self, ud, d): @@ -99,7 +85,7 @@ class Hg(FetchMethod): def try_premirror(self, ud, d): # If we don't do this, updating an existing checkout with only premirrors # is not possible - if d.getVar("BB_FETCH_PREMIRRORONLY") is not None: + if bb.utils.to_boolean(d.getVar("BB_FETCH_PREMIRRORONLY")): return True if os.path.exists(ud.moddir): return False @@ -151,7 +137,7 @@ class Hg(FetchMethod): cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" pull" % (ud.basecmd, ud.user, ud.pswd, proto) else: cmd = "%s pull" % (ud.basecmd) - elif command == "update": + elif command == "update" or command == "up": if ud.user and ud.pswd: cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" update -C %s" % (ud.basecmd, ud.user, ud.pswd, proto, " ".join(options)) else: @@ -259,12 +245,19 @@ class Hg(FetchMethod): scmdata = ud.parm.get("scmdata", "") if scmdata != "nokeep": + proto = ud.parm.get('protocol', 'http') if not os.access(os.path.join(codir, '.hg'), os.R_OK): logger.debug(2, "Unpack: creating new hg repository in '" + codir + "'") runfetchcmd("%s init %s" % (ud.basecmd, codir), d) logger.debug(2, "Unpack: updating source in '" + codir + "'") - runfetchcmd("%s pull %s" % (ud.basecmd, ud.moddir), d, workdir=codir) - runfetchcmd("%s up -C %s" % (ud.basecmd, revflag), d, workdir=codir) + if ud.user and ud.pswd: + runfetchcmd("%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" pull %s" % (ud.basecmd, ud.user, ud.pswd, proto, ud.moddir), d, workdir=codir) + else: + runfetchcmd("%s pull %s" % (ud.basecmd, ud.moddir), d, workdir=codir) + if ud.user and ud.pswd: + runfetchcmd("%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" up -C %s" % (ud.basecmd, ud.user, ud.pswd, proto, revflag), d, workdir=codir) + else: + runfetchcmd("%s up -C %s" % (ud.basecmd, revflag), d, workdir=codir) else: logger.debug(2, "Unpack: extracting source to '" + codir + "'") runfetchcmd("%s archive -t files %s %s" % (ud.basecmd, revflag, codir), d, workdir=ud.moddir) diff --git a/external/poky/bitbake/lib/bb/fetch2/local.py b/external/poky/bitbake/lib/bb/fetch2/local.py index a114ac12..01d9ff9f 100644 --- a/external/poky/bitbake/lib/bb/fetch2/local.py +++ b/external/poky/bitbake/lib/bb/fetch2/local.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ BitBake 'Fetch' implementations @@ -10,20 +8,10 @@ BitBake build tools. # Copyright (C) 2003, 2004 Chris Larson # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# SPDX-License-Identifier: GPL-2.0-only # # Based on functions from the base bb module, Copyright 2003 Holger Schurig +# import os import urllib.request, urllib.parse, urllib.error diff --git a/external/poky/bitbake/lib/bb/fetch2/npm.py b/external/poky/bitbake/lib/bb/fetch2/npm.py index 408dfc3d..47898509 100644 --- a/external/poky/bitbake/lib/bb/fetch2/npm.py +++ b/external/poky/bitbake/lib/bb/fetch2/npm.py @@ -1,308 +1,296 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +# Copyright (C) 2020 Savoir-Faire Linux +# +# SPDX-License-Identifier: GPL-2.0-only +# """ -BitBake 'Fetch' NPM implementation +BitBake 'Fetch' npm implementation -The NPM fetcher is used to retrieve files from the npmjs repository +npm fetcher support the SRC_URI with format of: +SRC_URI = "npm://some.registry.url;OptionA=xxx;OptionB=xxx;..." -Usage in the recipe: +Supported SRC_URI options are: - SRC_URI = "npm://registry.npmjs.org/;name=${PN};version=${PV}" - Suported SRC_URI options are: +- package + The npm package name. This is a mandatory parameter. - - name - - version +- version + The npm package version. This is a mandatory parameter. - npm://registry.npmjs.org/${PN}/-/${PN}-${PV}.tgz would become npm://registry.npmjs.org;name=${PN};version=${PV} - The fetcher all triggers off the existence of ud.localpath. If that exists and has the ".done" stamp, its assumed the fetch is good/done +- downloadfilename + Specifies the filename used when storing the downloaded file. +- destsuffix + Specifies the directory to use to unpack the package (default: npm). """ -import os -import sys -import urllib.request, urllib.parse, urllib.error +import base64 import json -import subprocess -import signal +import os +import re +import shlex +import tempfile import bb -from bb.fetch2 import FetchMethod -from bb.fetch2 import FetchError -from bb.fetch2 import ChecksumError -from bb.fetch2 import runfetchcmd -from bb.fetch2 import logger -from bb.fetch2 import UnpackError -from bb.fetch2 import ParameterError - -def subprocess_setup(): - # Python installs a SIGPIPE handler by default. This is usually not what - # non-Python subprocesses expect. - # SIGPIPE errors are known issues with gzip/bash - signal.signal(signal.SIGPIPE, signal.SIG_DFL) +from bb.fetch2 import Fetch +from bb.fetch2 import FetchError +from bb.fetch2 import FetchMethod +from bb.fetch2 import MissingParameterError +from bb.fetch2 import ParameterError +from bb.fetch2 import URI +from bb.fetch2 import check_network_access +from bb.fetch2 import runfetchcmd +from bb.utils import is_semver + +def npm_package(package): + """Convert the npm package name to remove unsupported character""" + # Scoped package names (with the @) use the same naming convention + # as the 'npm pack' command. + if package.startswith("@"): + return re.sub("/", "-", package[1:]) + return package + +def npm_filename(package, version): + """Get the filename of a npm package""" + return npm_package(package) + "-" + version + ".tgz" + +def npm_localfile(package, version): + """Get the local filename of a npm package""" + return os.path.join("npm2", npm_filename(package, version)) + +def npm_integrity(integrity): + """ + Get the checksum name and expected value from the subresource integrity + https://www.w3.org/TR/SRI/ + """ + algo, value = integrity.split("-", maxsplit=1) + return "%ssum" % algo, base64.b64decode(value).hex() + +def npm_unpack(tarball, destdir, d): + """Unpack a npm tarball""" + bb.utils.mkdirhier(destdir) + cmd = "tar --extract --gzip --file=%s" % shlex.quote(tarball) + cmd += " --no-same-owner" + cmd += " --strip-components=1" + runfetchcmd(cmd, d, workdir=destdir) + +class NpmEnvironment(object): + """ + Using a npm config file seems more reliable than using cli arguments. + This class allows to create a controlled environment for npm commands. + """ + def __init__(self, d, configs=None): + self.d = d + self.configs = configs + + def run(self, cmd, args=None, configs=None, workdir=None): + """Run npm command in a controlled environment""" + with tempfile.TemporaryDirectory() as tmpdir: + d = bb.data.createCopy(self.d) + d.setVar("HOME", tmpdir) + + cfgfile = os.path.join(tmpdir, "npmrc") + + if not workdir: + workdir = tmpdir + + def _run(cmd): + cmd = "NPM_CONFIG_USERCONFIG=%s " % cfgfile + cmd + cmd = "NPM_CONFIG_GLOBALCONFIG=%s " % cfgfile + cmd + return runfetchcmd(cmd, d, workdir=workdir) + + if self.configs: + for key, value in self.configs: + _run("npm config set %s %s" % (key, shlex.quote(value))) + + if configs: + for key, value in configs: + _run("npm config set %s %s" % (key, shlex.quote(value))) + + if args: + for key, value in args: + cmd += " --%s=%s" % (key, shlex.quote(value)) + + return _run(cmd) class Npm(FetchMethod): - - """Class to fetch urls via 'npm'""" - def init(self, d): - pass + """Class to fetch a package from a npm registry""" def supports(self, ud, d): - """ - Check to see if a given url can be fetched with npm - """ - return ud.type in ['npm'] + """Check if a given url can be fetched with npm""" + return ud.type in ["npm"] + + def urldata_init(self, ud, d): + """Init npm specific variables within url data""" + ud.package = None + ud.version = None + ud.registry = None - def debug(self, msg): - logger.debug(1, "NpmFetch: %s", msg) + # Get the 'package' parameter + if "package" in ud.parm: + ud.package = ud.parm.get("package") - def clean(self, ud, d): - logger.debug(2, "Calling cleanup %s" % ud.pkgname) - bb.utils.remove(ud.localpath, False) - bb.utils.remove(ud.pkgdatadir, True) - bb.utils.remove(ud.fullmirror, False) + if not ud.package: + raise MissingParameterError("Parameter 'package' required", ud.url) + + # Get the 'version' parameter + if "version" in ud.parm: + ud.version = ud.parm.get("version") - def urldata_init(self, ud, d): - """ - init NPM specific variable within url data - """ - if 'downloadfilename' in ud.parm: - ud.basename = ud.parm['downloadfilename'] - else: - ud.basename = os.path.basename(ud.path) - - # can't call it ud.name otherwise fetcher base class will start doing sha1stuff - # TODO: find a way to get an sha1/sha256 manifest of pkg & all deps - ud.pkgname = ud.parm.get("name", None) - if not ud.pkgname: - raise ParameterError("NPM fetcher requires a name parameter", ud.url) - ud.version = ud.parm.get("version", None) if not ud.version: - raise ParameterError("NPM fetcher requires a version parameter", ud.url) - ud.bbnpmmanifest = "%s-%s.deps.json" % (ud.pkgname, ud.version) - ud.bbnpmmanifest = ud.bbnpmmanifest.replace('/', '-') - ud.registry = "http://%s" % (ud.url.replace('npm://', '', 1).split(';'))[0] - prefixdir = "npm/%s" % ud.pkgname - ud.pkgdatadir = d.expand("${DL_DIR}/%s" % prefixdir) - if not os.path.exists(ud.pkgdatadir): - bb.utils.mkdirhier(ud.pkgdatadir) - ud.localpath = d.expand("${DL_DIR}/npm/%s" % ud.bbnpmmanifest) - - self.basecmd = d.getVar("FETCHCMD_wget") or "/usr/bin/env wget -O -t 2 -T 30 -nv --passive-ftp --no-check-certificate " - ud.prefixdir = prefixdir - - ud.write_tarballs = ((d.getVar("BB_GENERATE_MIRROR_TARBALLS") or "0") != "0") - mirrortarball = 'npm_%s-%s.tar.xz' % (ud.pkgname, ud.version) - mirrortarball = mirrortarball.replace('/', '-') - ud.fullmirror = os.path.join(d.getVar("DL_DIR"), mirrortarball) - ud.mirrortarballs = [mirrortarball] + raise MissingParameterError("Parameter 'version' required", ud.url) - def need_update(self, ud, d): - if os.path.exists(ud.localpath): - return False - return True - - def _runwget(self, ud, d, command, quiet): - logger.debug(2, "Fetching %s using command '%s'" % (ud.url, command)) - bb.fetch2.check_network_access(d, command, ud.url) - dldir = d.getVar("DL_DIR") - runfetchcmd(command, d, quiet, workdir=dldir) - - def _unpackdep(self, ud, pkg, data, destdir, dldir, d): - file = data[pkg]['tgz'] - logger.debug(2, "file to extract is %s" % file) - if file.endswith('.tgz') or file.endswith('.tar.gz') or file.endswith('.tar.Z'): - cmd = 'tar xz --strip 1 --no-same-owner --warning=no-unknown-keyword -f %s/%s' % (dldir, file) - else: - bb.fatal("NPM package %s downloaded not a tarball!" % file) - - # Change to subdir before executing command - if not os.path.exists(destdir): - os.makedirs(destdir) - path = d.getVar('PATH') - if path: - cmd = "PATH=\"%s\" %s" % (path, cmd) - bb.note("Unpacking %s to %s/" % (file, destdir)) - ret = subprocess.call(cmd, preexec_fn=subprocess_setup, shell=True, cwd=destdir) - - if ret != 0: - raise UnpackError("Unpack command %s failed with return value %s" % (cmd, ret), ud.url) - - if 'deps' not in data[pkg]: - return - for dep in data[pkg]['deps']: - self._unpackdep(ud, dep, data[pkg]['deps'], "%s/node_modules/%s" % (destdir, dep), dldir, d) - - - def unpack(self, ud, destdir, d): - dldir = d.getVar("DL_DIR") - with open("%s/npm/%s" % (dldir, ud.bbnpmmanifest)) as datafile: - workobj = json.load(datafile) - dldir = "%s/%s" % (os.path.dirname(ud.localpath), ud.pkgname) - - if 'subdir' in ud.parm: - unpackdir = '%s/%s' % (destdir, ud.parm.get('subdir')) + if not is_semver(ud.version) and not ud.version == "latest": + raise ParameterError("Invalid 'version' parameter", ud.url) + + # Extract the 'registry' part of the url + ud.registry = re.sub(r"^npm://", "http://", ud.url.split(";")[0]) + + # Using the 'downloadfilename' parameter as local filename + # or the npm package name. + if "downloadfilename" in ud.parm: + ud.localfile = d.expand(ud.parm["downloadfilename"]) else: - unpackdir = '%s/npmpkg' % destdir - - self._unpackdep(ud, ud.pkgname, workobj, unpackdir, dldir, d) - - def _parse_view(self, output): - ''' - Parse the output of npm view --json; the last JSON result - is assumed to be the one that we're interested in. - ''' - pdata = None - outdeps = {} - datalines = [] - bracelevel = 0 - for line in output.splitlines(): - if bracelevel: - datalines.append(line) - elif '{' in line: - datalines = [] - datalines.append(line) - bracelevel = bracelevel + line.count('{') - line.count('}') - if datalines: - pdata = json.loads('\n'.join(datalines)) - return pdata - - def _getdependencies(self, pkg, data, version, d, ud, optional=False, fetchedlist=None): - if fetchedlist is None: - fetchedlist = [] - pkgfullname = pkg - if version != '*' and not '/' in version: - pkgfullname += "@'%s'" % version - logger.debug(2, "Calling getdeps on %s" % pkg) - fetchcmd = "npm view %s --json --registry %s" % (pkgfullname, ud.registry) - output = runfetchcmd(fetchcmd, d, True) - pdata = self._parse_view(output) - if not pdata: - raise FetchError("The command '%s' returned no output" % fetchcmd) - if optional: - pkg_os = pdata.get('os', None) - if pkg_os: - if not isinstance(pkg_os, list): - pkg_os = [pkg_os] - blacklist = False - for item in pkg_os: - if item.startswith('!'): - blacklist = True - break - if (not blacklist and 'linux' not in pkg_os) or '!linux' in pkg_os: - logger.debug(2, "Skipping %s since it's incompatible with Linux" % pkg) - return - #logger.debug(2, "Output URL is %s - %s - %s" % (ud.basepath, ud.basename, ud.localfile)) - outputurl = pdata['dist']['tarball'] - data[pkg] = {} - data[pkg]['tgz'] = os.path.basename(outputurl) - if outputurl in fetchedlist: - return - - self._runwget(ud, d, "%s --directory-prefix=%s %s" % (self.basecmd, ud.prefixdir, outputurl), False) - fetchedlist.append(outputurl) - - dependencies = pdata.get('dependencies', {}) - optionalDependencies = pdata.get('optionalDependencies', {}) - dependencies.update(optionalDependencies) - depsfound = {} - optdepsfound = {} - data[pkg]['deps'] = {} - for dep in dependencies: - if dep in optionalDependencies: - optdepsfound[dep] = dependencies[dep] + ud.localfile = npm_localfile(ud.package, ud.version) + + # Get the base 'npm' command + ud.basecmd = d.getVar("FETCHCMD_npm") or "npm" + + # This fetcher resolves a URI from a npm package name and version and + # then forwards it to a proxy fetcher. A resolve file containing the + # resolved URI is created to avoid unwanted network access (if the file + # already exists). The management of the donestamp file, the lockfile + # and the checksums are forwarded to the proxy fetcher. + ud.proxy = None + ud.needdonestamp = False + ud.resolvefile = self.localpath(ud, d) + ".resolved" + + def _resolve_proxy_url(self, ud, d): + def _npm_view(): + configs = [] + configs.append(("json", "true")) + configs.append(("registry", ud.registry)) + pkgver = shlex.quote(ud.package + "@" + ud.version) + cmd = ud.basecmd + " view %s" % pkgver + env = NpmEnvironment(d) + check_network_access(d, cmd, ud.registry) + view_string = env.run(cmd, configs=configs) + + if not view_string: + raise FetchError("Unavailable package %s" % pkgver, ud.url) + + try: + view = json.loads(view_string) + + error = view.get("error") + if error is not None: + raise FetchError(error.get("summary"), ud.url) + + if ud.version == "latest": + bb.warn("The npm package %s is using the latest " \ + "version available. This could lead to " \ + "non-reproducible builds." % pkgver) + elif ud.version != view.get("version"): + raise ParameterError("Invalid 'version' parameter", ud.url) + + return view + + except Exception as e: + raise FetchError("Invalid view from npm: %s" % str(e), ud.url) + + def _get_url(view): + tarball_url = view.get("dist", {}).get("tarball") + + if tarball_url is None: + raise FetchError("Invalid 'dist.tarball' in view", ud.url) + + uri = URI(tarball_url) + uri.params["downloadfilename"] = ud.localfile + + integrity = view.get("dist", {}).get("integrity") + shasum = view.get("dist", {}).get("shasum") + + if integrity is not None: + checksum_name, checksum_expected = npm_integrity(integrity) + uri.params[checksum_name] = checksum_expected + elif shasum is not None: + uri.params["sha1sum"] = shasum else: - depsfound[dep] = dependencies[dep] - for dep, version in optdepsfound.items(): - self._getdependencies(dep, data[pkg]['deps'], version, d, ud, optional=True, fetchedlist=fetchedlist) - for dep, version in depsfound.items(): - self._getdependencies(dep, data[pkg]['deps'], version, d, ud, fetchedlist=fetchedlist) - - def _getshrinkeddependencies(self, pkg, data, version, d, ud, lockdown, manifest, toplevel=True): - logger.debug(2, "NPM shrinkwrap file is %s" % data) - if toplevel: - name = data.get('name', None) - if name and name != pkg: - for obj in data.get('dependencies', []): - if obj == pkg: - self._getshrinkeddependencies(obj, data['dependencies'][obj], data['dependencies'][obj]['version'], d, ud, lockdown, manifest, False) - return - outputurl = "invalid" - if ('resolved' not in data) or (not data['resolved'].startswith('http')): - # will be the case for ${PN} - fetchcmd = "npm view %s@%s dist.tarball --registry %s" % (pkg, version, ud.registry) - logger.debug(2, "Found this matching URL: %s" % str(fetchcmd)) - outputurl = runfetchcmd(fetchcmd, d, True) - else: - outputurl = data['resolved'] - self._runwget(ud, d, "%s --directory-prefix=%s %s" % (self.basecmd, ud.prefixdir, outputurl), False) - manifest[pkg] = {} - manifest[pkg]['tgz'] = os.path.basename(outputurl).rstrip() - manifest[pkg]['deps'] = {} - - if pkg in lockdown: - sha1_expected = lockdown[pkg][version] - sha1_data = bb.utils.sha1_file("npm/%s/%s" % (ud.pkgname, manifest[pkg]['tgz'])) - if sha1_expected != sha1_data: - msg = "\nFile: '%s' has %s checksum %s when %s was expected" % (manifest[pkg]['tgz'], 'sha1', sha1_data, sha1_expected) - raise ChecksumError('Checksum mismatch!%s' % msg) - else: - logger.debug(2, "No lockdown data for %s@%s" % (pkg, version)) + raise FetchError("Invalid 'dist.integrity' in view", ud.url) - if 'dependencies' in data: - for obj in data['dependencies']: - logger.debug(2, "Found dep is %s" % str(obj)) - self._getshrinkeddependencies(obj, data['dependencies'][obj], data['dependencies'][obj]['version'], d, ud, lockdown, manifest[pkg]['deps'], False) + return str(uri) + + url = _get_url(_npm_view()) + + bb.utils.mkdirhier(os.path.dirname(ud.resolvefile)) + with open(ud.resolvefile, "w") as f: + f.write(url) + + def _setup_proxy(self, ud, d): + if ud.proxy is None: + if not os.path.exists(ud.resolvefile): + self._resolve_proxy_url(ud, d) + + with open(ud.resolvefile, "r") as f: + url = f.read() + + # Avoid conflicts between the environment data and: + # - the proxy url checksum + data = bb.data.createCopy(d) + data.delVarFlags("SRC_URI") + ud.proxy = Fetch([url], data) + + def _get_proxy_method(self, ud, d): + self._setup_proxy(ud, d) + proxy_url = ud.proxy.urls[0] + proxy_ud = ud.proxy.ud[proxy_url] + proxy_d = ud.proxy.d + proxy_ud.setup_localpath(proxy_d) + return proxy_ud.method, proxy_ud, proxy_d + + def verify_donestamp(self, ud, d): + """Verify the donestamp file""" + proxy_m, proxy_ud, proxy_d = self._get_proxy_method(ud, d) + return proxy_m.verify_donestamp(proxy_ud, proxy_d) + + def update_donestamp(self, ud, d): + """Update the donestamp file""" + proxy_m, proxy_ud, proxy_d = self._get_proxy_method(ud, d) + proxy_m.update_donestamp(proxy_ud, proxy_d) + + def need_update(self, ud, d): + """Force a fetch, even if localpath exists ?""" + if not os.path.exists(ud.resolvefile): + return True + if ud.version == "latest": + return True + proxy_m, proxy_ud, proxy_d = self._get_proxy_method(ud, d) + return proxy_m.need_update(proxy_ud, proxy_d) + + def try_mirrors(self, fetch, ud, d, mirrors): + """Try to use a mirror""" + proxy_m, proxy_ud, proxy_d = self._get_proxy_method(ud, d) + return proxy_m.try_mirrors(fetch, proxy_ud, proxy_d, mirrors) def download(self, ud, d): """Fetch url""" - jsondepobj = {} - shrinkobj = {} - lockdown = {} - - if not os.listdir(ud.pkgdatadir) and os.path.exists(ud.fullmirror): - dest = d.getVar("DL_DIR") - bb.utils.mkdirhier(dest) - runfetchcmd("tar -xJf %s" % (ud.fullmirror), d, workdir=dest) - return - - if ud.parm.get("noverify", None) != '1': - shwrf = d.getVar('NPM_SHRINKWRAP') - logger.debug(2, "NPM shrinkwrap file is %s" % shwrf) - if shwrf: - try: - with open(shwrf) as datafile: - shrinkobj = json.load(datafile) - except Exception as e: - raise FetchError('Error loading NPM_SHRINKWRAP file "%s" for %s: %s' % (shwrf, ud.pkgname, str(e))) - elif not ud.ignore_checksums: - logger.warning('Missing shrinkwrap file in NPM_SHRINKWRAP for %s, this will lead to unreliable builds!' % ud.pkgname) - lckdf = d.getVar('NPM_LOCKDOWN') - logger.debug(2, "NPM lockdown file is %s" % lckdf) - if lckdf: - try: - with open(lckdf) as datafile: - lockdown = json.load(datafile) - except Exception as e: - raise FetchError('Error loading NPM_LOCKDOWN file "%s" for %s: %s' % (lckdf, ud.pkgname, str(e))) - elif not ud.ignore_checksums: - logger.warning('Missing lockdown file in NPM_LOCKDOWN for %s, this will lead to unreproducible builds!' % ud.pkgname) - - if ('name' not in shrinkobj): - self._getdependencies(ud.pkgname, jsondepobj, ud.version, d, ud) - else: - self._getshrinkeddependencies(ud.pkgname, shrinkobj, ud.version, d, ud, lockdown, jsondepobj) - - with open(ud.localpath, 'w') as outfile: - json.dump(jsondepobj, outfile) - - def build_mirror_data(self, ud, d): - # Generate a mirror tarball if needed - if ud.write_tarballs and not os.path.exists(ud.fullmirror): - # it's possible that this symlink points to read-only filesystem with PREMIRROR - if os.path.islink(ud.fullmirror): - os.unlink(ud.fullmirror) - - dldir = d.getVar("DL_DIR") - logger.info("Creating tarball of npm data") - runfetchcmd("tar -cJf %s npm/%s npm/%s" % (ud.fullmirror, ud.bbnpmmanifest, ud.pkgname), d, - workdir=dldir) - runfetchcmd("touch %s.done" % (ud.fullmirror), d, workdir=dldir) + self._setup_proxy(ud, d) + ud.proxy.download() + + def unpack(self, ud, rootdir, d): + """Unpack the downloaded archive""" + destsuffix = ud.parm.get("destsuffix", "npm") + destdir = os.path.join(rootdir, destsuffix) + npm_unpack(ud.localpath, destdir, d) + + def clean(self, ud, d): + """Clean any existing full or partial download""" + if os.path.exists(ud.resolvefile): + self._setup_proxy(ud, d) + ud.proxy.clean() + bb.utils.remove(ud.resolvefile) + + def done(self, ud, d): + """Is the download done ?""" + if not os.path.exists(ud.resolvefile): + return False + proxy_m, proxy_ud, proxy_d = self._get_proxy_method(ud, d) + return proxy_m.done(proxy_ud, proxy_d) diff --git a/external/poky/bitbake/lib/bb/fetch2/npmsw.py b/external/poky/bitbake/lib/bb/fetch2/npmsw.py new file mode 100644 index 00000000..0c3511d8 --- /dev/null +++ b/external/poky/bitbake/lib/bb/fetch2/npmsw.py @@ -0,0 +1,255 @@ +# Copyright (C) 2020 Savoir-Faire Linux +# +# SPDX-License-Identifier: GPL-2.0-only +# +""" +BitBake 'Fetch' npm shrinkwrap implementation + +npm fetcher support the SRC_URI with format of: +SRC_URI = "npmsw://some.registry.url;OptionA=xxx;OptionB=xxx;..." + +Supported SRC_URI options are: + +- dev + Set to 1 to also install devDependencies. + +- destsuffix + Specifies the directory to use to unpack the dependencies (default: ${S}). +""" + +import json +import os +import re +import bb +from bb.fetch2 import Fetch +from bb.fetch2 import FetchMethod +from bb.fetch2 import ParameterError +from bb.fetch2 import URI +from bb.fetch2.npm import npm_integrity +from bb.fetch2.npm import npm_localfile +from bb.fetch2.npm import npm_unpack +from bb.utils import is_semver + +def foreach_dependencies(shrinkwrap, callback=None, dev=False): + """ + Run a callback for each dependencies of a shrinkwrap file. + The callback is using the format: + callback(name, params, deptree) + with: + name = the package name (string) + params = the package parameters (dictionary) + deptree = the package dependency tree (array of strings) + """ + def _walk_deps(deps, deptree): + for name in deps: + subtree = [*deptree, name] + _walk_deps(deps[name].get("dependencies", {}), subtree) + if callback is not None: + if deps[name].get("dev", False) and not dev: + continue + elif deps[name].get("bundled", False): + continue + callback(name, deps[name], subtree) + + _walk_deps(shrinkwrap.get("dependencies", {}), []) + +class NpmShrinkWrap(FetchMethod): + """Class to fetch all package from a shrinkwrap file""" + + def supports(self, ud, d): + """Check if a given url can be fetched with npmsw""" + return ud.type in ["npmsw"] + + def urldata_init(self, ud, d): + """Init npmsw specific variables within url data""" + + # Get the 'shrinkwrap' parameter + ud.shrinkwrap_file = re.sub(r"^npmsw://", "", ud.url.split(";")[0]) + + # Get the 'dev' parameter + ud.dev = bb.utils.to_boolean(ud.parm.get("dev"), False) + + # Resolve the dependencies + ud.deps = [] + + def _resolve_dependency(name, params, deptree): + url = None + localpath = None + extrapaths = [] + destsubdirs = [os.path.join("node_modules", dep) for dep in deptree] + destsuffix = os.path.join(*destsubdirs) + + integrity = params.get("integrity", None) + resolved = params.get("resolved", None) + version = params.get("version", None) + + # Handle registry sources + if is_semver(version) and resolved and integrity: + localfile = npm_localfile(name, version) + + uri = URI(resolved) + uri.params["downloadfilename"] = localfile + + checksum_name, checksum_expected = npm_integrity(integrity) + uri.params[checksum_name] = checksum_expected + + url = str(uri) + + localpath = os.path.join(d.getVar("DL_DIR"), localfile) + + # Create a resolve file to mimic the npm fetcher and allow + # re-usability of the downloaded file. + resolvefile = localpath + ".resolved" + + bb.utils.mkdirhier(os.path.dirname(resolvefile)) + with open(resolvefile, "w") as f: + f.write(url) + + extrapaths.append(resolvefile) + + # Handle http tarball sources + elif version.startswith("http") and integrity: + localfile = os.path.join("npm2", os.path.basename(version)) + + uri = URI(version) + uri.params["downloadfilename"] = localfile + + checksum_name, checksum_expected = npm_integrity(integrity) + uri.params[checksum_name] = checksum_expected + + url = str(uri) + + localpath = os.path.join(d.getVar("DL_DIR"), localfile) + + # Handle git sources + elif version.startswith("git"): + regex = re.compile(r""" + ^ + git\+ + (?P[a-z]+) + :// + (?P[^#]+) + \# + (?P[0-9a-f]+) + $ + """, re.VERBOSE) + + match = regex.match(version) + + if not match: + raise ParameterError("Invalid git url: %s" % version, ud.url) + + groups = match.groupdict() + + uri = URI("git://" + str(groups["url"])) + uri.params["protocol"] = str(groups["protocol"]) + uri.params["rev"] = str(groups["rev"]) + uri.params["destsuffix"] = destsuffix + + url = str(uri) + + # local tarball sources and local link sources are unsupported + else: + raise ParameterError("Unsupported dependency: %s" % name, ud.url) + + ud.deps.append({ + "url": url, + "localpath": localpath, + "extrapaths": extrapaths, + "destsuffix": destsuffix, + }) + + try: + with open(ud.shrinkwrap_file, "r") as f: + shrinkwrap = json.load(f) + except Exception as e: + raise ParameterError("Invalid shrinkwrap file: %s" % str(e), ud.url) + + foreach_dependencies(shrinkwrap, _resolve_dependency, ud.dev) + + # Avoid conflicts between the environment data and: + # - the proxy url revision + # - the proxy url checksum + data = bb.data.createCopy(d) + data.delVar("SRCREV") + data.delVarFlags("SRC_URI") + + # This fetcher resolves multiple URIs from a shrinkwrap file and then + # forwards it to a proxy fetcher. The management of the donestamp file, + # the lockfile and the checksums are forwarded to the proxy fetcher. + ud.proxy = Fetch([dep["url"] for dep in ud.deps], data) + ud.needdonestamp = False + + @staticmethod + def _foreach_proxy_method(ud, handle): + returns = [] + for proxy_url in ud.proxy.urls: + proxy_ud = ud.proxy.ud[proxy_url] + proxy_d = ud.proxy.d + proxy_ud.setup_localpath(proxy_d) + returns.append(handle(proxy_ud.method, proxy_ud, proxy_d)) + return returns + + def verify_donestamp(self, ud, d): + """Verify the donestamp file""" + def _handle(m, ud, d): + return m.verify_donestamp(ud, d) + return all(self._foreach_proxy_method(ud, _handle)) + + def update_donestamp(self, ud, d): + """Update the donestamp file""" + def _handle(m, ud, d): + m.update_donestamp(ud, d) + self._foreach_proxy_method(ud, _handle) + + def need_update(self, ud, d): + """Force a fetch, even if localpath exists ?""" + def _handle(m, ud, d): + return m.need_update(ud, d) + return all(self._foreach_proxy_method(ud, _handle)) + + def try_mirrors(self, fetch, ud, d, mirrors): + """Try to use a mirror""" + def _handle(m, ud, d): + return m.try_mirrors(fetch, ud, d, mirrors) + return all(self._foreach_proxy_method(ud, _handle)) + + def download(self, ud, d): + """Fetch url""" + ud.proxy.download() + + def unpack(self, ud, rootdir, d): + """Unpack the downloaded dependencies""" + destdir = d.getVar("S") + destsuffix = ud.parm.get("destsuffix") + if destsuffix: + destdir = os.path.join(rootdir, destsuffix) + + bb.utils.mkdirhier(destdir) + bb.utils.copyfile(ud.shrinkwrap_file, + os.path.join(destdir, "npm-shrinkwrap.json")) + + auto = [dep["url"] for dep in ud.deps if not dep["localpath"]] + manual = [dep for dep in ud.deps if dep["localpath"]] + + if auto: + ud.proxy.unpack(destdir, auto) + + for dep in manual: + depdestdir = os.path.join(destdir, dep["destsuffix"]) + npm_unpack(dep["localpath"], depdestdir, d) + + def clean(self, ud, d): + """Clean any existing full or partial download""" + ud.proxy.clean() + + # Clean extra files + for dep in ud.deps: + for path in dep["extrapaths"]: + bb.utils.remove(path) + + def done(self, ud, d): + """Is the download done ?""" + def _handle(m, ud, d): + return m.done(ud, d) + return all(self._foreach_proxy_method(ud, _handle)) diff --git a/external/poky/bitbake/lib/bb/fetch2/osc.py b/external/poky/bitbake/lib/bb/fetch2/osc.py index 6c60456b..8f091efd 100644 --- a/external/poky/bitbake/lib/bb/fetch2/osc.py +++ b/external/poky/bitbake/lib/bb/fetch2/osc.py @@ -1,13 +1,12 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +# +# SPDX-License-Identifier: GPL-2.0-only +# """ Bitbake "Fetch" implementation for osc (Opensuse build service client). Based on the svn "Fetch" implementation. """ -import os -import sys import logging import bb from bb.fetch2 import FetchMethod @@ -42,7 +41,7 @@ class Osc(FetchMethod): else: pv = d.getVar("PV", False) rev = bb.fetch2.srcrev_internal_helper(ud, d) - if rev and rev != True: + if rev: ud.revision = rev else: ud.revision = "" diff --git a/external/poky/bitbake/lib/bb/fetch2/perforce.py b/external/poky/bitbake/lib/bb/fetch2/perforce.py index 903a8e61..f57c2a4f 100644 --- a/external/poky/bitbake/lib/bb/fetch2/perforce.py +++ b/external/poky/bitbake/lib/bb/fetch2/perforce.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ BitBake 'Fetch' implementation for perforce @@ -8,23 +6,11 @@ BitBake 'Fetch' implementation for perforce # Copyright (C) 2003, 2004 Chris Larson # Copyright (C) 2016 Kodak Alaris, Inc. # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# SPDX-License-Identifier: GPL-2.0-only # # Based on functions from the base bb module, Copyright 2003 Holger Schurig import os -import logging import bb from bb.fetch2 import FetchMethod from bb.fetch2 import FetchError @@ -118,7 +104,7 @@ class Perforce(FetchMethod): if command == 'changes': p4cmd = '%s%s changes -m 1 //%s' % (ud.basecmd, p4opt, pathnrev) elif command == 'print': - if depot_filename != None: + if depot_filename is not None: p4cmd = '%s%s print -o "p4/%s" "%s"' % (ud.basecmd, p4opt, filename, depot_filename) else: raise FetchError('No depot file name provided to p4 %s' % command, ud.url) diff --git a/external/poky/bitbake/lib/bb/fetch2/repo.py b/external/poky/bitbake/lib/bb/fetch2/repo.py index 8c7e8185..2bdbbd40 100644 --- a/external/poky/bitbake/lib/bb/fetch2/repo.py +++ b/external/poky/bitbake/lib/bb/fetch2/repo.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ BitBake "Fetch" repo (git) implementation @@ -8,20 +6,10 @@ BitBake "Fetch" repo (git) implementation # Copyright (C) 2009 Tom Rini # # Based on git.py which is: -#Copyright (C) 2005 Richard Purdie +# Copyright (C) 2005 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import os import bb diff --git a/external/poky/bitbake/lib/bb/fetch2/s3.py b/external/poky/bitbake/lib/bb/fetch2/s3.py index 16292886..ffca73c8 100644 --- a/external/poky/bitbake/lib/bb/fetch2/s3.py +++ b/external/poky/bitbake/lib/bb/fetch2/s3.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ BitBake 'Fetch' implementation for Amazon AWS S3. @@ -13,18 +11,7 @@ The aws tool must be correctly installed and configured prior to use. # Based in part on bb.fetch2.wget: # Copyright (C) 2003, 2004 Chris Larson # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# SPDX-License-Identifier: GPL-2.0-only # # Based on functions from the base bb module, Copyright 2003 Holger Schurig diff --git a/external/poky/bitbake/lib/bb/fetch2/sftp.py b/external/poky/bitbake/lib/bb/fetch2/sftp.py index 81884a6a..f87f292e 100644 --- a/external/poky/bitbake/lib/bb/fetch2/sftp.py +++ b/external/poky/bitbake/lib/bb/fetch2/sftp.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ BitBake SFTP Fetch implementation @@ -44,18 +42,7 @@ SRC_URI = "sftp://user@host.example.com/dir/path.file.txt" # Based in part on bb.fetch2.wget: # Copyright (C) 2003, 2004 Chris Larson # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# SPDX-License-Identifier: GPL-2.0-only # # Based on functions from the base bb module, Copyright 2003 Holger Schurig diff --git a/external/poky/bitbake/lib/bb/fetch2/ssh.py b/external/poky/bitbake/lib/bb/fetch2/ssh.py index 6047ee41..5e982ecf 100644 --- a/external/poky/bitbake/lib/bb/fetch2/ssh.py +++ b/external/poky/bitbake/lib/bb/fetch2/ssh.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- ''' BitBake 'Fetch' implementations @@ -29,23 +27,11 @@ IETF secsh internet draft: # Copyright 2003 Holger Schurig # # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import re, os from bb.fetch2 import FetchMethod -from bb.fetch2 import FetchError -from bb.fetch2 import logger from bb.fetch2 import runfetchcmd @@ -72,7 +58,7 @@ class SSH(FetchMethod): '''Class to fetch a module or modules via Secure Shell''' def supports(self, urldata, d): - return __pattern__.match(urldata.url) != None + return __pattern__.match(urldata.url) is not None def supports_checksum(self, urldata): return False diff --git a/external/poky/bitbake/lib/bb/fetch2/svn.py b/external/poky/bitbake/lib/bb/fetch2/svn.py index 9dcf3eb0..971a5add 100644 --- a/external/poky/bitbake/lib/bb/fetch2/svn.py +++ b/external/poky/bitbake/lib/bb/fetch2/svn.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ BitBake 'Fetch' implementation for svn. @@ -8,24 +6,11 @@ BitBake 'Fetch' implementation for svn. # Copyright (C) 2003, 2004 Chris Larson # Copyright (C) 2004 Marcin Juszkiewicz # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# SPDX-License-Identifier: GPL-2.0-only # # Based on functions from the base bb module, Copyright 2003 Holger Schurig import os -import sys -import logging import bb import re from bb.fetch2 import FetchMethod @@ -62,7 +47,7 @@ class Svn(FetchMethod): svndir = d.getVar("SVNDIR") or (d.getVar("DL_DIR") + "/svn") relpath = self._strip_leading_slashes(ud.path) ud.pkgdir = os.path.join(svndir, ud.host, relpath) - ud.moddir = os.path.join(ud.pkgdir, ud.module) + ud.moddir = os.path.join(ud.pkgdir, ud.path_spec) # Protects the repository from concurrent updates, e.g. from two # recipes fetching different revisions at the same time ud.svnlock = os.path.join(ud.pkgdir, "svn.lock") @@ -104,6 +89,13 @@ class Svn(FetchMethod): svncmd = "%s log --limit 1 %s %s://%s/%s/" % (ud.basecmd, " ".join(options), proto, svnroot, ud.module) else: suffix = "" + + # externals may be either 'allowed' or 'nowarn', but not both. Allowed + # will not issue a warning, but will log to the debug buffer what has likely + # been downloaded by SVN. + if not ("externals" in ud.parm and ud.parm["externals"] == "allowed"): + options.append("--ignore-externals") + if ud.revision: options.append("-r %s" % ud.revision) suffix = "@%s" % (ud.revision) @@ -130,24 +122,36 @@ class Svn(FetchMethod): try: if os.access(os.path.join(ud.moddir, '.svn'), os.R_OK): - svnupdatecmd = self._buildsvncommand(ud, d, "update") + svncmd = self._buildsvncommand(ud, d, "update") logger.info("Update " + ud.url) # We need to attempt to run svn upgrade first in case its an older working format try: runfetchcmd(ud.basecmd + " upgrade", d, workdir=ud.moddir) except FetchError: pass - logger.debug(1, "Running %s", svnupdatecmd) - bb.fetch2.check_network_access(d, svnupdatecmd, ud.url) - runfetchcmd(svnupdatecmd, d, workdir=ud.moddir) + logger.debug(1, "Running %s", svncmd) + bb.fetch2.check_network_access(d, svncmd, ud.url) + runfetchcmd(svncmd, d, workdir=ud.moddir) else: - svnfetchcmd = self._buildsvncommand(ud, d, "fetch") + svncmd = self._buildsvncommand(ud, d, "fetch") logger.info("Fetch " + ud.url) # check out sources there bb.utils.mkdirhier(ud.pkgdir) - logger.debug(1, "Running %s", svnfetchcmd) - bb.fetch2.check_network_access(d, svnfetchcmd, ud.url) - runfetchcmd(svnfetchcmd, d, workdir=ud.pkgdir) + logger.debug(1, "Running %s", svncmd) + bb.fetch2.check_network_access(d, svncmd, ud.url) + runfetchcmd(svncmd, d, workdir=ud.pkgdir) + + if not ("externals" in ud.parm and ud.parm["externals"] == "nowarn"): + # Warn the user if this had externals (won't catch them all) + output = runfetchcmd("svn propget svn:externals || true", d, workdir=ud.moddir) + if output: + if "--ignore-externals" in svncmd.split(): + bb.warn("%s contains svn:externals." % ud.url) + bb.warn("These should be added to the recipe SRC_URI as necessary.") + bb.warn("svn fetch has ignored externals:\n%s" % output) + bb.warn("To disable this warning add ';externals=nowarn' to the url.") + else: + bb.debug(1, "svn repository has externals:\n%s" % output) scmdata = ud.parm.get("scmdata", "") if scmdata == "keep": diff --git a/external/poky/bitbake/lib/bb/fetch2/wget.py b/external/poky/bitbake/lib/bb/fetch2/wget.py index 8f505b6d..f7d1de26 100644 --- a/external/poky/bitbake/lib/bb/fetch2/wget.py +++ b/external/poky/bitbake/lib/bb/fetch2/wget.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ BitBake 'Fetch' implementations @@ -10,29 +8,19 @@ BitBake build tools. # Copyright (C) 2003, 2004 Chris Larson # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# SPDX-License-Identifier: GPL-2.0-only # # Based on functions from the base bb module, Copyright 2003 Holger Schurig +import shlex import re import tempfile -import subprocess import os -import logging import errno import bb import bb.progress +import socket +import http.client import urllib.request, urllib.parse, urllib.error from bb.fetch2 import FetchMethod from bb.fetch2 import FetchError @@ -104,9 +92,9 @@ class Wget(FetchMethod): fetchcmd = self.basecmd if 'downloadfilename' in ud.parm: - dldir = d.getVar("DL_DIR") - bb.utils.mkdirhier(os.path.dirname(dldir + os.sep + ud.localfile)) - fetchcmd += " -O " + dldir + os.sep + ud.localfile + localpath = os.path.join(d.getVar("DL_DIR"), ud.localfile) + bb.utils.mkdirhier(os.path.dirname(localpath)) + fetchcmd += " -O %s" % shlex.quote(localpath) if ud.user and ud.pswd: fetchcmd += " --user=%s --password=%s --auth-no-challenge" % (ud.user, ud.pswd) @@ -132,10 +120,6 @@ class Wget(FetchMethod): return True def checkstatus(self, fetch, ud, d, try_again=True): - import urllib.request, urllib.error, urllib.parse, socket, http.client - from urllib.response import addinfourl - from bb.fetch2 import FetchConnectionCache - class HTTPConnectionCache(http.client.HTTPConnection): if fetch.connection_cache: def connect(self): @@ -168,7 +152,7 @@ class Wget(FetchMethod): """ host = req.host if not host: - raise urlllib2.URLError('no host given') + raise urllib.error.URLError('no host given') h = http_class(host, timeout=req.timeout) # will parse host:port h.set_debuglevel(self._debuglevel) @@ -185,7 +169,7 @@ class Wget(FetchMethod): # request. # Don't close connection when connection_cache is enabled, - if fetch.connection_cache is None: + if fetch.connection_cache is None: headers["Connection"] = "close" else: headers["Connection"] = "Keep-Alive" # Works for HTTP/1.0 @@ -252,7 +236,7 @@ class Wget(FetchMethod): pass closed = False - resp = addinfourl(fp_dummy(), r.msg, req.get_full_url()) + resp = urllib.response.addinfourl(fp_dummy(), r.msg, req.get_full_url()) resp.code = r.status resp.msg = r.reason @@ -271,17 +255,18 @@ class Wget(FetchMethod): fp.read() fp.close() - newheaders = dict((k,v) for k,v in list(req.headers.items()) - if k.lower() not in ("content-length", "content-type")) - return self.parent.open(urllib.request.Request(req.get_full_url(), - headers=newheaders, - origin_req_host=req.origin_req_host, - unverifiable=True)) + if req.get_method() != 'GET': + newheaders = dict((k, v) for k, v in list(req.headers.items()) + if k.lower() not in ("content-length", "content-type")) + return self.parent.open(urllib.request.Request(req.get_full_url(), + headers=newheaders, + origin_req_host=req.origin_req_host, + unverifiable=True)) - """ - Some servers (e.g. GitHub archives, hosted on Amazon S3) return 403 - Forbidden when they actually mean 405 Method Not Allowed. - """ + raise urllib.request.HTTPError(req, code, msg, headers, None) + + # Some servers (e.g. GitHub archives, hosted on Amazon S3) return 403 + # Forbidden when they actually mean 405 Method Not Allowed. http_error_403 = http_error_405 @@ -292,15 +277,15 @@ class Wget(FetchMethod): """ def redirect_request(self, req, fp, code, msg, headers, newurl): newreq = urllib.request.HTTPRedirectHandler.redirect_request(self, req, fp, code, msg, headers, newurl) - newreq.get_method = lambda: req.get_method() + newreq.get_method = req.get_method return newreq exported_proxies = export_proxies(d) handlers = [FixedHTTPRedirectHandler, HTTPMethodFallback] - if export_proxies: + if exported_proxies: handlers.append(urllib.request.ProxyHandler()) handlers.append(CacheHTTPHandler()) - # XXX: Since Python 2.7.9 ssl cert validation is enabled by default + # Since Python 2.7.9 ssl cert validation is enabled by default # see PEP-0476, this causes verification errors on some https servers # so disable by default. import ssl @@ -315,23 +300,24 @@ class Wget(FetchMethod): # Some servers (FusionForge, as used on Alioth) require that the # optional Accept header is set. r.add_header("Accept", "*/*") + r.add_header("User-Agent", "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.12) Gecko/20101027 Ubuntu/9.10 (karmic) Firefox/3.6.12") def add_basic_auth(login_str, request): '''Adds Basic auth to http request, pass in login:password as string''' import base64 encodeuser = base64.b64encode(login_str.encode('utf-8')).decode("utf-8") - authheader = "Basic %s" % encodeuser + authheader = "Basic %s" % encodeuser r.add_header("Authorization", authheader) - if ud.user: - add_basic_auth(ud.user, r) + if ud.user and ud.pswd: + add_basic_auth(ud.user + ':' + ud.pswd, r) try: - import netrc, urllib.parse + import netrc n = netrc.netrc() login, unused, password = n.authenticators(urllib.parse.urlparse(uri).hostname) add_basic_auth("%s:%s" % (login, password), r) except (TypeError, ImportError, IOError, netrc.NetrcParseError): - pass + pass with opener.open(r) as response: pass @@ -396,18 +382,14 @@ class Wget(FetchMethod): (oldpn, oldpv, oldsuffix) = old (newpn, newpv, newsuffix) = new - """ - Check for a new suffix type that we have never heard of before - """ - if (newsuffix): + # Check for a new suffix type that we have never heard of before + if newsuffix: m = self.suffix_regex_comp.search(newsuffix) if not m: bb.warn("%s has a possible unknown suffix: %s" % (newpn, newsuffix)) return False - """ - Not our package so ignore it - """ + # Not our package so ignore it if oldpn != newpn: return False @@ -473,15 +455,14 @@ class Wget(FetchMethod): return "" - def _check_latest_version_by_dir(self, dirver, package, package_regex, - current_version, ud, d): + def _check_latest_version_by_dir(self, dirver, package, package_regex, current_version, ud, d): """ - Scan every directory in order to get upstream version. + Scan every directory in order to get upstream version. """ version_dir = ['', '', ''] version = ['', '', ''] - dirver_regex = re.compile("(?P\D*)(?P(\d+[\.\-_])+(\d+))") + dirver_regex = re.compile(r"(?P\D*)(?P(\d+[\.\-_])+(\d+))") s = dirver_regex.search(dirver) if s: version_dir[1] = s.group('ver') @@ -541,26 +522,26 @@ class Wget(FetchMethod): gst-fluendo-mp3 """ # match most patterns which uses "-" as separator to version digits - pn_prefix1 = "[a-zA-Z][a-zA-Z0-9]*([-_][a-zA-Z]\w+)*\+?[-_]" + pn_prefix1 = r"[a-zA-Z][a-zA-Z0-9]*([-_][a-zA-Z]\w+)*\+?[-_]" # a loose pattern such as for unzip552.tar.gz - pn_prefix2 = "[a-zA-Z]+" + pn_prefix2 = r"[a-zA-Z]+" # a loose pattern such as for 80325-quicky-0.4.tar.gz - pn_prefix3 = "[0-9]+[-]?[a-zA-Z]+" + pn_prefix3 = r"[0-9]+[-]?[a-zA-Z]+" # Save the Package Name (pn) Regex for use later - pn_regex = "(%s|%s|%s)" % (pn_prefix1, pn_prefix2, pn_prefix3) + pn_regex = r"(%s|%s|%s)" % (pn_prefix1, pn_prefix2, pn_prefix3) # match version - pver_regex = "(([A-Z]*\d+[a-zA-Z]*[\.\-_]*)+)" + pver_regex = r"(([A-Z]*\d+[a-zA-Z]*[\.\-_]*)+)" # match arch parch_regex = "-source|_all_" # src.rpm extension was added only for rpm package. Can be removed if the rpm # packaged will always be considered as having to be manually upgraded - psuffix_regex = "(tar\.gz|tgz|tar\.bz2|zip|xz|tar\.lz|rpm|bz2|orig\.tar\.gz|tar\.xz|src\.tar\.gz|src\.tgz|svnr\d+\.tar\.bz2|stable\.tar\.gz|src\.rpm)" + psuffix_regex = r"(tar\.gz|tgz|tar\.bz2|zip|xz|tar\.lz|rpm|bz2|orig\.tar\.gz|tar\.xz|src\.tar\.gz|src\.tgz|svnr\d+\.tar\.bz2|stable\.tar\.gz|src\.rpm)" # match name, version and archive type of a package - package_regex_comp = re.compile("(?P%s?\.?v?)(?P%s)(?P%s)?[\.-](?P%s$)" + package_regex_comp = re.compile(r"(?P%s?\.?v?)(?P%s)(?P%s)?[\.-](?P%s$)" % (pn_regex, pver_regex, parch_regex, psuffix_regex)) self.suffix_regex_comp = re.compile(psuffix_regex) @@ -572,7 +553,7 @@ class Wget(FetchMethod): version = self._parse_path(package_regex_comp, package) if version: package_custom_regex_comp = re.compile( - "(?P%s)(?P%s)(?P%s)?[\.-](?P%s)" % + r"(?P%s)(?P%s)(?P%s)?[\.-](?P%s)" % (re.escape(version[0]), pver_regex, parch_regex, psuffix_regex)) else: package_custom_regex_comp = None @@ -589,7 +570,7 @@ class Wget(FetchMethod): current_version = ['', d.getVar('PV'), ''] """possible to have no version in pkg name, such as spectrum-fw""" - if not re.search("\d+", package): + if not re.search(r"\d+", package): current_version[1] = re.sub('_', '.', current_version[1]) current_version[1] = re.sub('-', '.', current_version[1]) return (current_version[1], '') @@ -607,13 +588,13 @@ class Wget(FetchMethod): # search for version matches on folders inside the path, like: # "5.7" in http://download.gnome.org/sources/${PN}/5.7/${PN}-${PV}.tar.gz - dirver_regex = re.compile("(?P[^/]*(\d+\.)*\d+([-_]r\d+)*)/") + dirver_regex = re.compile(r"(?P[^/]*(\d+\.)*\d+([-_]r\d+)*)/") m = dirver_regex.search(path) if m: pn = d.getVar('PN') dirver = m.group('dirver') - dirver_pn_regex = re.compile("%s\d?" % (re.escape(pn))) + dirver_pn_regex = re.compile(r"%s\d?" % (re.escape(pn))) if not dirver_pn_regex.search(dirver): return (self._check_latest_version_by_dir(dirver, package, package_regex, current_version, ud, d), '') diff --git a/external/poky/bitbake/lib/bb/main.py b/external/poky/bitbake/lib/bb/main.py index 7dc953da..af2880f8 100755 --- a/external/poky/bitbake/lib/bb/main.py +++ b/external/poky/bitbake/lib/bb/main.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # Copyright (C) 2003, 2004 Chris Larson # Copyright (C) 2003, 2004 Phil Blundell @@ -9,18 +6,8 @@ # Copyright (C) 2005 ROAD GmbH # Copyright (C) 2006 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import os import sys @@ -267,6 +254,11 @@ class BitBakeConfigParameters(cookerdata.ConfigParameters): help="Do not run any setscene tasks. sstate will be ignored and " "everything needed, built.") + parser.add_option("", "--skip-setscene", action="store_true", + dest="skipsetscene", default=False, + help="Skip setscene tasks if they would be executed. Tasks previously " + "restored from sstate will be kept, unlike --no-setscene") + parser.add_option("", "--setscene-only", action="store_true", dest="setsceneonly", default=False, help="Only run setscene tasks, don't run any real tasks.") @@ -460,12 +452,7 @@ def setup_bitbake(configParams, configuration, extrafeatures=None): bb.utils.unlockfile(lock) raise bb.server.process.ProcessTimeout("Bitbake still shutting down as socket exists but no lock?") if not configParams.server_only: - try: - server_connection = bb.server.process.connectProcessServer(sockname, featureset) - except EOFError: - # The server may have been shutting down but not closed the socket yet. If that happened, - # ignore it. - pass + server_connection = bb.server.process.connectProcessServer(sockname, featureset) if server_connection or configParams.server_only: break @@ -475,12 +462,14 @@ def setup_bitbake(configParams, configuration, extrafeatures=None): if not retries: raise retries -= 1 - if isinstance(e, (bb.server.process.ProcessTimeout, BrokenPipeError)): - logger.info("Retrying server connection...") + tryno = 8 - retries + if isinstance(e, (bb.server.process.ProcessTimeout, BrokenPipeError, EOFError)): + logger.info("Retrying server connection (#%d)..." % tryno) else: - logger.info("Retrying server connection... (%s)" % traceback.format_exc()) + logger.info("Retrying server connection (#%d)... (%s)" % (tryno, traceback.format_exc())) if not retries: - bb.fatal("Unable to connect to bitbake server, or start one") + bb.fatal("Unable to connect to bitbake server, or start one (server startup failures would be in bitbake-cookerdaemon.log).") + bb.event.print_ui_queue() if retries < 5: time.sleep(5) @@ -502,7 +491,7 @@ def setup_bitbake(configParams, configuration, extrafeatures=None): def lockBitbake(): topdir = bb.cookerdata.findTopdir() if not topdir: - bb.error("Unable to find conf/bblayers.conf or conf/bitbake.conf. BBAPTH is unset and/or not in a build directory?") + bb.error("Unable to find conf/bblayers.conf or conf/bitbake.conf. BBPATH is unset and/or not in a build directory?") raise BBMainFatal lockfile = topdir + "/bitbake.lock" return topdir, bb.utils.lockfile(lockfile, False, False) diff --git a/external/poky/bitbake/lib/bb/methodpool.py b/external/poky/bitbake/lib/bb/methodpool.py index 49aed333..51783acc 100644 --- a/external/poky/bitbake/lib/bb/methodpool.py +++ b/external/poky/bitbake/lib/bb/methodpool.py @@ -1,21 +1,8 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- -# # # Copyright (C) 2006 Holger Hans Peter Freyther # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# SPDX-License-Identifier: GPL-2.0-only # -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. from bb.utils import better_compile, better_exec diff --git a/external/poky/bitbake/lib/bb/monitordisk.py b/external/poky/bitbake/lib/bb/monitordisk.py index 833cd3d3..e7c07264 100644 --- a/external/poky/bitbake/lib/bb/monitordisk.py +++ b/external/poky/bitbake/lib/bb/monitordisk.py @@ -1,23 +1,10 @@ -#!/usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # Copyright (C) 2012 Robert Yang # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -import os, logging, re, sys +import os, logging, re import bb logger = logging.getLogger("BitBake.Monitor") @@ -28,16 +15,16 @@ def convertGMK(unit): """ Convert the space unit G, M, K, the unit is case-insensitive """ - unitG = re.match('([1-9][0-9]*)[gG]\s?$', unit) + unitG = re.match(r'([1-9][0-9]*)[gG]\s?$', unit) if unitG: return int(unitG.group(1)) * (1024 ** 3) - unitM = re.match('([1-9][0-9]*)[mM]\s?$', unit) + unitM = re.match(r'([1-9][0-9]*)[mM]\s?$', unit) if unitM: return int(unitM.group(1)) * (1024 ** 2) - unitK = re.match('([1-9][0-9]*)[kK]\s?$', unit) + unitK = re.match(r'([1-9][0-9]*)[kK]\s?$', unit) if unitK: return int(unitK.group(1)) * 1024 - unitN = re.match('([1-9][0-9]*)\s?$', unit) + unitN = re.match(r'([1-9][0-9]*)\s?$', unit) if unitN: return int(unitN.group(1)) else: @@ -83,7 +70,7 @@ def getDiskData(BBDirs, configuration): for pathSpaceInode in BBDirs.split(): # The input format is: "dir,space,inode", dir is a must, space # and inode are optional - pathSpaceInodeRe = re.match('([^,]*),([^,]*),([^,]*),?(.*)', pathSpaceInode) + pathSpaceInodeRe = re.match(r'([^,]*),([^,]*),([^,]*),?(.*)', pathSpaceInode) if not pathSpaceInodeRe: printErr("Invalid value in BB_DISKMON_DIRS: %s" % pathSpaceInode) return None @@ -147,7 +134,7 @@ def getInterval(configuration): else: # The disk space or inode interval is optional, but it should # have a correct value once it is specified - intervalRe = re.match('([^,]*),?\s*(.*)', interval) + intervalRe = re.match(r'([^,]*),?\s*(.*)', interval) if intervalRe: intervalSpace = intervalRe.group(1) if intervalSpace: diff --git a/external/poky/bitbake/lib/bb/msg.py b/external/poky/bitbake/lib/bb/msg.py index 96f077ec..2d88c4e7 100644 --- a/external/poky/bitbake/lib/bb/msg.py +++ b/external/poky/bitbake/lib/bb/msg.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ BitBake 'msg' implementation @@ -9,25 +7,14 @@ Message handling infrastructure for bitbake # Copyright (C) 2006 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import sys import copy import logging -import collections +import logging.config from itertools import groupby -import warnings import bb import bb.event @@ -112,6 +99,9 @@ class BBLogFormatter(logging.Formatter): def enable_color(self): self.color_enabled = True + def __repr__(self): + return "%s fmt='%s' color=%s" % (self.__class__.__name__, self._fmt, "True" if self.color_enabled else "False") + class BBLogFilter(object): def __init__(self, handler, level, debug_domains): self.stdlevel = level @@ -130,60 +120,59 @@ class BBLogFilter(object): return True return False -class BBLogFilterStdErr(BBLogFilter): +class LogFilterGEQLevel(logging.Filter): + def __init__(self, level): + self.strlevel = str(level) + self.level = stringToLevel(level) + + def __repr__(self): + return "%s level >= %s (%d)" % (self.__class__.__name__, self.strlevel, self.level) + def filter(self, record): - if not BBLogFilter.filter(self, record): - return False - if record.levelno >= logging.ERROR: - return True - return False + return (record.levelno >= self.level) + +class LogFilterLTLevel(logging.Filter): + def __init__(self, level): + self.strlevel = str(level) + self.level = stringToLevel(level) + + def __repr__(self): + return "%s level < %s (%d)" % (self.__class__.__name__, self.strlevel, self.level) -class BBLogFilterStdOut(BBLogFilter): def filter(self, record): - if not BBLogFilter.filter(self, record): - return False - if record.levelno < logging.ERROR: - return True - return False + return (record.levelno < self.level) # Message control functions # -loggerDefaultDebugLevel = 0 +loggerDefaultLogLevel = BBLogFormatter.NOTE loggerDefaultVerbose = False loggerVerboseLogs = False -loggerDefaultDomains = [] +loggerDefaultDomains = {} def init_msgconfig(verbose, debug, debug_domains=None): """ Set default verbosity and debug levels config the logger """ - bb.msg.loggerDefaultDebugLevel = debug bb.msg.loggerDefaultVerbose = verbose if verbose: bb.msg.loggerVerboseLogs = True - if debug_domains: - bb.msg.loggerDefaultDomains = debug_domains - else: - bb.msg.loggerDefaultDomains = [] - -def constructLogOptions(): - debug = loggerDefaultDebugLevel - verbose = loggerDefaultVerbose - domains = loggerDefaultDomains if debug: - level = BBLogFormatter.DEBUG - debug + 1 + bb.msg.loggerDefaultLogLevel = BBLogFormatter.DEBUG - debug + 1 elif verbose: - level = BBLogFormatter.VERBOSE + bb.msg.loggerDefaultLogLevel = BBLogFormatter.VERBOSE else: - level = BBLogFormatter.NOTE + bb.msg.loggerDefaultLogLevel = BBLogFormatter.NOTE + + bb.msg.loggerDefaultDomains = {} + if debug_domains: + for (domainarg, iterator) in groupby(debug_domains): + dlevel = len(tuple(iterator)) + bb.msg.loggerDefaultDomains["BitBake.%s" % domainarg] = logging.DEBUG - dlevel + 1 - debug_domains = {} - for (domainarg, iterator) in groupby(domains): - dlevel = len(tuple(iterator)) - debug_domains["BitBake.%s" % domainarg] = logging.DEBUG - dlevel + 1 - return level, debug_domains +def constructLogOptions(): + return loggerDefaultLogLevel, loggerDefaultDomains def addDefaultlogFilter(handler, cls = BBLogFilter, forcelevel=None): level, debug_domains = constructLogOptions() @@ -193,6 +182,19 @@ def addDefaultlogFilter(handler, cls = BBLogFilter, forcelevel=None): cls(handler, level, debug_domains) +def stringToLevel(level): + try: + return int(level) + except ValueError: + pass + + try: + return getattr(logging, level) + except AttributeError: + pass + + return getattr(BBLogFormatter, level) + # # Message handling functions # @@ -226,3 +228,105 @@ def has_console_handler(logger): if handler.stream in [sys.stderr, sys.stdout]: return True return False + +def mergeLoggingConfig(logconfig, userconfig): + logconfig = copy.deepcopy(logconfig) + userconfig = copy.deepcopy(userconfig) + + # Merge config with the default config + if userconfig.get('version') != logconfig['version']: + raise BaseException("Bad user configuration version. Expected %r, got %r" % (logconfig['version'], userconfig.get('version'))) + + # Set some defaults to make merging easier + userconfig.setdefault("loggers", {}) + + # If a handler, formatter, or filter is defined in the user + # config, it will replace an existing one in the default config + for k in ("handlers", "formatters", "filters"): + logconfig.setdefault(k, {}).update(userconfig.get(k, {})) + + seen_loggers = set() + for name, l in logconfig["loggers"].items(): + # If the merge option is set, merge the handlers and + # filters. Otherwise, if it is False, this logger won't get + # add to the set of seen loggers and will replace the + # existing one + if l.get('bitbake_merge', True): + ulogger = userconfig["loggers"].setdefault(name, {}) + ulogger.setdefault("handlers", []) + ulogger.setdefault("filters", []) + + # Merge lists + l.setdefault("handlers", []).extend(ulogger["handlers"]) + l.setdefault("filters", []).extend(ulogger["filters"]) + + # Replace other properties if present + if "level" in ulogger: + l["level"] = ulogger["level"] + + if "propagate" in ulogger: + l["propagate"] = ulogger["propagate"] + + seen_loggers.add(name) + + # Add all loggers present in the user config, but not any that + # have already been processed + for name in set(userconfig["loggers"].keys()) - seen_loggers: + logconfig["loggers"][name] = userconfig["loggers"][name] + + return logconfig + +def setLoggingConfig(defaultconfig, userconfigfile=None): + logconfig = copy.deepcopy(defaultconfig) + + if userconfigfile: + with open(os.path.normpath(userconfigfile), 'r') as f: + if userconfigfile.endswith('.yml') or userconfigfile.endswith('.yaml'): + import yaml + userconfig = yaml.load(f) + elif userconfigfile.endswith('.json') or userconfigfile.endswith('.cfg'): + import json + userconfig = json.load(f) + else: + raise BaseException("Unrecognized file format: %s" % userconfigfile) + + if userconfig.get('bitbake_merge', True): + logconfig = mergeLoggingConfig(logconfig, userconfig) + else: + # Replace the entire default config + logconfig = userconfig + + # Convert all level parameters to integers in case users want to use the + # bitbake defined level names + for h in logconfig["handlers"].values(): + if "level" in h: + h["level"] = bb.msg.stringToLevel(h["level"]) + + for l in logconfig["loggers"].values(): + if "level" in l: + l["level"] = bb.msg.stringToLevel(l["level"]) + + conf = logging.config.dictConfigClass(logconfig) + conf.configure() + + # The user may have specified logging domains they want at a higher debug + # level than the standard. + for name, l in logconfig["loggers"].items(): + if not name.startswith("BitBake."): + continue + + if not "level" in l: + continue + + curlevel = bb.msg.loggerDefaultDomains.get(name) + # Note: level parameter should already be a int because of conversion + # above + newlevel = int(l["level"]) + if curlevel is None or newlevel < curlevel: + bb.msg.loggerDefaultDomains[name] = newlevel + + # TODO: I don't think that setting the global log level should be necessary + #if newlevel < bb.msg.loggerDefaultLogLevel: + # bb.msg.loggerDefaultLogLevel = newlevel + + return conf diff --git a/external/poky/bitbake/lib/bb/namedtuple_with_abc.py b/external/poky/bitbake/lib/bb/namedtuple_with_abc.py index 32f2fc64..646aed6f 100644 --- a/external/poky/bitbake/lib/bb/namedtuple_with_abc.py +++ b/external/poky/bitbake/lib/bb/namedtuple_with_abc.py @@ -1,6 +1,8 @@ # http://code.activestate.com/recipes/577629-namedtupleabc-abstract-base-class-mix-in-for-named/ -#!/usr/bin/env python # Copyright (c) 2011 Jan Kaliszewski (zuo). Available under the MIT License. +# +# SPDX-License-Identifier: MIT +# """ namedtuple_with_abc.py: diff --git a/external/poky/bitbake/lib/bb/parse/__init__.py b/external/poky/bitbake/lib/bb/parse/__init__.py index 5397d57a..76e180b4 100644 --- a/external/poky/bitbake/lib/bb/parse/__init__.py +++ b/external/poky/bitbake/lib/bb/parse/__init__.py @@ -9,20 +9,10 @@ File parsers for the BitBake build tools. # Copyright (C) 2003, 2004 Chris Larson # Copyright (C) 2003, 2004 Phil Blundell # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# SPDX-License-Identifier: GPL-2.0-only # # Based on functions from the base bb module, Copyright 2003 Holger Schurig +# handlers = [] diff --git a/external/poky/bitbake/lib/bb/parse/ast.py b/external/poky/bitbake/lib/bb/parse/ast.py index 9d20c323..eb8cfa21 100644 --- a/external/poky/bitbake/lib/bb/parse/ast.py +++ b/external/poky/bitbake/lib/bb/parse/ast.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ AbstractSyntaxTree classes for the Bitbake language """ @@ -8,25 +6,10 @@ # Copyright (C) 2003, 2004 Phil Blundell # Copyright (C) 2009 Holger Hans Peter Freyther # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -import re -import string -import logging import bb -import itertools from bb import methodpool from bb.parse import logger @@ -106,7 +89,7 @@ class DataNode(AstNode): self.groupd = groupd def getFunc(self, key, data): - if 'flag' in self.groupd and self.groupd['flag'] != None: + if 'flag' in self.groupd and self.groupd['flag'] is not None: return data.getVarFlag(key, self.groupd['flag'], expand=False, noweakdefault=True) else: return data.getVar(key, False, noweakdefault=True, parsing=True) @@ -119,36 +102,36 @@ class DataNode(AstNode): 'file': self.filename, 'line': self.lineno, } - if "exp" in groupd and groupd["exp"] != None: + if "exp" in groupd and groupd["exp"] is not None: data.setVarFlag(key, "export", 1, op = 'exported', **loginfo) op = "set" - if "ques" in groupd and groupd["ques"] != None: + if "ques" in groupd and groupd["ques"] is not None: val = self.getFunc(key, data) op = "set?" - if val == None: + if val is None: val = groupd["value"] - elif "colon" in groupd and groupd["colon"] != None: + elif "colon" in groupd and groupd["colon"] is not None: e = data.createCopy() op = "immediate" val = e.expand(groupd["value"], key + "[:=]") - elif "append" in groupd and groupd["append"] != None: + elif "append" in groupd and groupd["append"] is not None: op = "append" val = "%s %s" % ((self.getFunc(key, data) or ""), groupd["value"]) - elif "prepend" in groupd and groupd["prepend"] != None: + elif "prepend" in groupd and groupd["prepend"] is not None: op = "prepend" val = "%s %s" % (groupd["value"], (self.getFunc(key, data) or "")) - elif "postdot" in groupd and groupd["postdot"] != None: + elif "postdot" in groupd and groupd["postdot"] is not None: op = "postdot" val = "%s%s" % ((self.getFunc(key, data) or ""), groupd["value"]) - elif "predot" in groupd and groupd["predot"] != None: + elif "predot" in groupd and groupd["predot"] is not None: op = "predot" val = "%s%s" % (groupd["value"], (self.getFunc(key, data) or "")) else: val = groupd["value"] flag = None - if 'flag' in groupd and groupd['flag'] != None: + if 'flag' in groupd and groupd['flag'] is not None: flag = groupd['flag'] elif groupd["lazyques"]: flag = "_defaultval" @@ -178,7 +161,7 @@ class MethodNode(AstNode): funcname = ("__anon_%s_%s" % (self.lineno, self.filename.translate(MethodNode.tr_tbl))) self.python = True text = "def %s(d):\n" % (funcname) + text - bb.methodpool.insert_method(funcname, text, self.filename, self.lineno - len(self.body)) + bb.methodpool.insert_method(funcname, text, self.filename, self.lineno - len(self.body) - 1) anonfuncs = data.getVar('__BBANONFUNCS', False) or [] anonfuncs.append(funcname) data.setVar('__BBANONFUNCS', anonfuncs) diff --git a/external/poky/bitbake/lib/bb/parse/parse_py/BBHandler.py b/external/poky/bitbake/lib/bb/parse/parse_py/BBHandler.py index e5039e3b..6e216eff 100644 --- a/external/poky/bitbake/lib/bb/parse/parse_py/BBHandler.py +++ b/external/poky/bitbake/lib/bb/parse/parse_py/BBHandler.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ class for handling .bb files @@ -12,24 +9,11 @@ # Copyright (C) 2003, 2004 Chris Larson # Copyright (C) 2003, 2004 Phil Blundell # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - import re, bb, os -import logging import bb.build, bb.utils -from bb import data from . import ConfHandler from .. import resolve_file, ast, logger, ParseError @@ -38,14 +22,15 @@ from .ConfHandler import include, init # For compatibility bb.deprecate_import(__name__, "bb.parse", ["vars_from_file"]) -__func_start_regexp__ = re.compile( r"(((?Ppython)|(?Pfakeroot))\s*)*(?P[\w\.\-\+\{\}\$]+)?\s*\(\s*\)\s*{$" ) -__inherit_regexp__ = re.compile( r"inherit\s+(.+)" ) -__export_func_regexp__ = re.compile( r"EXPORT_FUNCTIONS\s+(.+)" ) -__addtask_regexp__ = re.compile("addtask\s+(?P\w+)\s*((before\s*(?P((.*(?=after))|(.*))))|(after\s*(?P((.*(?=before))|(.*)))))*") -__deltask_regexp__ = re.compile("deltask\s+(?P\w+)") -__addhandler_regexp__ = re.compile( r"addhandler\s+(.+)" ) -__def_regexp__ = re.compile( r"def\s+(\w+).*:" ) -__python_func_regexp__ = re.compile( r"(\s+.*)|(^$)" ) +__func_start_regexp__ = re.compile(r"(((?Ppython)|(?Pfakeroot))\s*)*(?P[\w\.\-\+\{\}\$]+)?\s*\(\s*\)\s*{$" ) +__inherit_regexp__ = re.compile(r"inherit\s+(.+)" ) +__export_func_regexp__ = re.compile(r"EXPORT_FUNCTIONS\s+(.+)" ) +__addtask_regexp__ = re.compile(r"addtask\s+(?P\w+)\s*((before\s*(?P((.*(?=after))|(.*))))|(after\s*(?P((.*(?=before))|(.*)))))*") +__deltask_regexp__ = re.compile(r"deltask\s+(?P\w+)(?P.*)") +__addhandler_regexp__ = re.compile(r"addhandler\s+(.+)" ) +__def_regexp__ = re.compile(r"def\s+(\w+).*:" ) +__python_func_regexp__ = re.compile(r"(\s+.*)|(^$)|(^#)" ) +__python_tab_regexp__ = re.compile(r" *\t") __infunc__ = [] __inpython__ = False @@ -160,6 +145,16 @@ def handle(fn, d, include): def feeder(lineno, s, fn, root, statements, eof=False): global __func_start_regexp__, __inherit_regexp__, __export_func_regexp__, __addtask_regexp__, __addhandler_regexp__, __def_regexp__, __python_func_regexp__, __inpython__, __infunc__, __body__, bb, __residue__, __classname__ + + # Check tabs in python functions: + # - def py_funcname(): covered by __inpython__ + # - python(): covered by '__anonymous' == __infunc__[0] + # - python funcname(): covered by __infunc__[3] + if __inpython__ or (__infunc__ and ('__anonymous' == __infunc__[0] or __infunc__[3])): + tab = __python_tab_regexp__.match(s) + if tab: + bb.warn('python should use 4 spaces indentation, but found tabs in %s, line %s' % (root, lineno)) + if __infunc__: if s == '}': __body__.append('') @@ -225,11 +220,27 @@ def feeder(lineno, s, fn, root, statements, eof=False): m = __addtask_regexp__.match(s) if m: + if len(m.group().split()) == 2: + # Check and warn for "addtask task1 task2" + m2 = re.match(r"addtask\s+(?P\w+)(?P.*)", s) + if m2 and m2.group('ignores'): + logger.warning('addtask ignored: "%s"' % m2.group('ignores')) + + # Check and warn for "addtask task1 before task2 before task3", the + # similar to "after" + taskexpression = s.split() + for word in ('before', 'after'): + if taskexpression.count(word) > 1: + logger.warning("addtask contained multiple '%s' keywords, only one is supported" % word) + ast.handleAddTask(statements, fn, lineno, m) return m = __deltask_regexp__.match(s) if m: + # Check and warn "for deltask task1 task2" + if m.group('ignores'): + logger.warning('deltask ignored: "%s"' % m.group('ignores')) ast.handleDelTask(statements, fn, lineno, m) return diff --git a/external/poky/bitbake/lib/bb/parse/parse_py/ConfHandler.py b/external/poky/bitbake/lib/bb/parse/parse_py/ConfHandler.py index 9d3ebe16..af64d344 100644 --- a/external/poky/bitbake/lib/bb/parse/parse_py/ConfHandler.py +++ b/external/poky/bitbake/lib/bb/parse/parse_py/ConfHandler.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ class for handling configuration data files @@ -11,18 +8,8 @@ # Copyright (C) 2003, 2004 Chris Larson # Copyright (C) 2003, 2004 Phil Blundell # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import errno import re @@ -132,30 +119,30 @@ def handle(fn, data, include): oldfile = data.getVar('FILE', False) abs_fn = resolve_file(fn, data) - f = open(abs_fn, 'r') - - statements = ast.StatementGroup() - lineno = 0 - while True: - lineno = lineno + 1 - s = f.readline() - if not s: - break - w = s.strip() - # skip empty lines - if not w: - continue - s = s.rstrip() - while s[-1] == '\\': - s2 = f.readline().strip() + with open(abs_fn, 'r') as f: + + statements = ast.StatementGroup() + lineno = 0 + while True: lineno = lineno + 1 - if (not s2 or s2 and s2[0] != "#") and s[0] == "#" : - bb.fatal("There is a confusing multiline, partially commented expression on line %s of file %s (%s).\nPlease clarify whether this is all a comment or should be parsed." % (lineno, fn, s)) - s = s[:-1] + s2 - # skip comments - if s[0] == '#': - continue - feeder(lineno, s, abs_fn, statements) + s = f.readline() + if not s: + break + w = s.strip() + # skip empty lines + if not w: + continue + s = s.rstrip() + while s[-1] == '\\': + s2 = f.readline().rstrip() + lineno = lineno + 1 + if (not s2 or s2 and s2[0] != "#") and s[0] == "#" : + bb.fatal("There is a confusing multiline, partially commented expression on line %s of file %s (%s).\nPlease clarify whether this is all a comment or should be parsed." % (lineno, fn, s)) + s = s[:-1] + s2 + # skip comments + if s[0] == '#': + continue + feeder(lineno, s, abs_fn, statements) # DONE WITH PARSING... time to evaluate data.setVar('FILE', abs_fn) diff --git a/external/poky/bitbake/lib/bb/parse/parse_py/__init__.py b/external/poky/bitbake/lib/bb/parse/parse_py/__init__.py index 3e658d0d..f508afa1 100644 --- a/external/poky/bitbake/lib/bb/parse/parse_py/__init__.py +++ b/external/poky/bitbake/lib/bb/parse/parse_py/__init__.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ BitBake Parsers @@ -11,20 +8,10 @@ File parsers for the BitBake build tools. # Copyright (C) 2003, 2004 Chris Larson # Copyright (C) 2003, 2004 Phil Blundell # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# SPDX-License-Identifier: GPL-2.0-only # # Based on functions from the base bb module, Copyright 2003 Holger Schurig +# from __future__ import absolute_import from . import ConfHandler diff --git a/external/poky/bitbake/lib/bb/persist_data.py b/external/poky/bitbake/lib/bb/persist_data.py index bef70186..7357ab2d 100644 --- a/external/poky/bitbake/lib/bb/persist_data.py +++ b/external/poky/bitbake/lib/bb/persist_data.py @@ -8,18 +8,8 @@ currently, providing a key/value store accessed by 'domain'. # Copyright (C) 2007 Richard Purdie # Copyright (C) 2010 Chris Larson # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import collections import logging @@ -29,6 +19,7 @@ import warnings from bb.compat import total_ordering from collections import Mapping import sqlite3 +import contextlib sqlversion = sqlite3.sqlite_version_info if sqlversion[0] < 3 or (sqlversion[0] == 3 and sqlversion[1] < 3): @@ -36,84 +27,184 @@ if sqlversion[0] < 3 or (sqlversion[0] == 3 and sqlversion[1] < 3): logger = logging.getLogger("BitBake.PersistData") -if hasattr(sqlite3, 'enable_shared_cache'): - try: - sqlite3.enable_shared_cache(True) - except sqlite3.OperationalError: - pass - @total_ordering class SQLTable(collections.MutableMapping): + class _Decorators(object): + @staticmethod + def retry(*, reconnect=True): + """ + Decorator that restarts a function if a database locked sqlite + exception occurs. If reconnect is True, the database connection + will be closed and reopened each time a failure occurs + """ + def retry_wrapper(f): + def wrap_func(self, *args, **kwargs): + # Reconnect if necessary + if self.connection is None and reconnect: + self.reconnect() + + count = 0 + while True: + try: + return f(self, *args, **kwargs) + except sqlite3.OperationalError as exc: + if count < 500 and ('is locked' in str(exc) or 'locking protocol' in str(exc)): + count = count + 1 + if reconnect: + self.reconnect() + continue + raise + return wrap_func + return retry_wrapper + + @staticmethod + def transaction(f): + """ + Decorator that starts a database transaction and creates a database + cursor for performing queries. If no exception is thrown, the + database results are commited. If an exception occurs, the database + is rolled back. In all cases, the cursor is closed after the + function ends. + + Note that the cursor is passed as an extra argument to the function + after `self` and before any of the normal arguments + """ + def wrap_func(self, *args, **kwargs): + # Context manager will COMMIT the database on success, + # or ROLLBACK on an exception + with self.connection: + # Automatically close the cursor when done + with contextlib.closing(self.connection.cursor()) as cursor: + return f(self, cursor, *args, **kwargs) + return wrap_func + """Object representing a table/domain in the database""" def __init__(self, cachefile, table): self.cachefile = cachefile self.table = table - self.cursor = connect(self.cachefile) - - self._execute("CREATE TABLE IF NOT EXISTS %s(key TEXT, value TEXT);" - % table) - - def _execute(self, *query): - """Execute a query, waiting to acquire a lock if necessary""" - count = 0 - while True: - try: - return self.cursor.execute(*query) - except sqlite3.OperationalError as exc: - if 'database is locked' in str(exc) and count < 500: - count = count + 1 + + self.connection = None + self._execute_single("CREATE TABLE IF NOT EXISTS %s(key TEXT PRIMARY KEY NOT NULL, value TEXT);" % table) + + @_Decorators.retry(reconnect=False) + @_Decorators.transaction + def _setup_database(self, cursor): + cursor.execute("pragma synchronous = off;") + # Enable WAL and keep the autocheckpoint length small (the default is + # usually 1000). Persistent caches are usually read-mostly, so keeping + # this short will keep readers running quickly + cursor.execute("pragma journal_mode = WAL;") + cursor.execute("pragma wal_autocheckpoint = 100;") + + def reconnect(self): + if self.connection is not None: + self.connection.close() + self.connection = sqlite3.connect(self.cachefile, timeout=5) + self.connection.text_factory = str + self._setup_database() + + @_Decorators.retry() + @_Decorators.transaction + def _execute_single(self, cursor, *query): + """ + Executes a single query and discards the results. This correctly closes + the database cursor when finished + """ + cursor.execute(*query) + + @_Decorators.retry() + def _row_iter(self, f, *query): + """ + Helper function that returns a row iterator. Each time __next__ is + called on the iterator, the provided function is evaluated to determine + the return value + """ + class CursorIter(object): + def __init__(self, cursor): + self.cursor = cursor + + def __iter__(self): + return self + + def __next__(self): + row = self.cursor.fetchone() + if row is None: self.cursor.close() - self.cursor = connect(self.cachefile) - continue - raise + raise StopIteration + return f(row) + + def __enter__(self): + return self + + def __exit__(self, typ, value, traceback): + self.cursor.close() + return False + + cursor = self.connection.cursor() + try: + cursor.execute(*query) + return CursorIter(cursor) + except: + cursor.close() def __enter__(self): - self.cursor.__enter__() + self.connection.__enter__() return self def __exit__(self, *excinfo): - self.cursor.__exit__(*excinfo) - - def __getitem__(self, key): - data = self._execute("SELECT * from %s where key=?;" % - self.table, [key]) - for row in data: + self.connection.__exit__(*excinfo) + + @_Decorators.retry() + @_Decorators.transaction + def __getitem__(self, cursor, key): + cursor.execute("SELECT * from %s where key=?;" % self.table, [key]) + row = cursor.fetchone() + if row is not None: return row[1] raise KeyError(key) - def __delitem__(self, key): + @_Decorators.retry() + @_Decorators.transaction + def __delitem__(self, cursor, key): if key not in self: raise KeyError(key) - self._execute("DELETE from %s where key=?;" % self.table, [key]) + cursor.execute("DELETE from %s where key=?;" % self.table, [key]) - def __setitem__(self, key, value): + @_Decorators.retry() + @_Decorators.transaction + def __setitem__(self, cursor, key, value): if not isinstance(key, str): raise TypeError('Only string keys are supported') elif not isinstance(value, str): raise TypeError('Only string values are supported') - data = self._execute("SELECT * from %s where key=?;" % - self.table, [key]) - exists = len(list(data)) - if exists: - self._execute("UPDATE %s SET value=? WHERE key=?;" % self.table, - [value, key]) - else: - self._execute("INSERT into %s(key, value) values (?, ?);" % - self.table, [key, value]) - - def __contains__(self, key): - return key in set(self) + # Ensure the entire transaction (including SELECT) executes under write lock + cursor.execute("BEGIN EXCLUSIVE") - def __len__(self): - data = self._execute("SELECT COUNT(key) FROM %s;" % self.table) - for row in data: + cursor.execute("SELECT * from %s where key=?;" % self.table, [key]) + row = cursor.fetchone() + if row is not None: + cursor.execute("UPDATE %s SET value=? WHERE key=?;" % self.table, [value, key]) + else: + cursor.execute("INSERT into %s(key, value) values (?, ?);" % self.table, [key, value]) + + @_Decorators.retry() + @_Decorators.transaction + def __contains__(self, cursor, key): + cursor.execute('SELECT * from %s where key=?;' % self.table, [key]) + return cursor.fetchone() is not None + + @_Decorators.retry() + @_Decorators.transaction + def __len__(self, cursor): + cursor.execute("SELECT COUNT(key) FROM %s;" % self.table) + row = cursor.fetchone() + if row is not None: return row[0] def __iter__(self): - data = self._execute("SELECT key FROM %s;" % self.table) - return (row[0] for row in data) + return self._row_iter(lambda row: row[0], "SELECT key from %s;" % self.table) def __lt__(self, other): if not isinstance(other, Mapping): @@ -122,25 +213,27 @@ class SQLTable(collections.MutableMapping): return len(self) < len(other) def get_by_pattern(self, pattern): - data = self._execute("SELECT * FROM %s WHERE key LIKE ?;" % - self.table, [pattern]) - return [row[1] for row in data] + return self._row_iter(lambda row: row[1], "SELECT * FROM %s WHERE key LIKE ?;" % + self.table, [pattern]) def values(self): return list(self.itervalues()) def itervalues(self): - data = self._execute("SELECT value FROM %s;" % self.table) - return (row[0] for row in data) + return self._row_iter(lambda row: row[0], "SELECT value FROM %s;" % + self.table) def items(self): return list(self.iteritems()) def iteritems(self): - return self._execute("SELECT * FROM %s;" % self.table) + return self._row_iter(lambda row: (row[0], row[1]), "SELECT * FROM %s;" % + self.table) - def clear(self): - self._execute("DELETE FROM %s;" % self.table) + @_Decorators.retry() + @_Decorators.transaction + def clear(self, cursor): + cursor.execute("DELETE FROM %s;" % self.table) def has_key(self, key): return key in self @@ -194,12 +287,6 @@ class PersistData(object): """ del self.data[domain][key] -def connect(database): - connection = sqlite3.connect(database, timeout=5, isolation_level=None) - connection.execute("pragma synchronous = off;") - connection.text_factory = str - return connection - def persist(domain, d): """Convenience factory for SQLTable objects based upon metadata""" import bb.utils diff --git a/external/poky/bitbake/lib/bb/process.py b/external/poky/bitbake/lib/bb/process.py index e69697cb..2dc472a8 100644 --- a/external/poky/bitbake/lib/bb/process.py +++ b/external/poky/bitbake/lib/bb/process.py @@ -1,3 +1,7 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + import logging import signal import subprocess diff --git a/external/poky/bitbake/lib/bb/progress.py b/external/poky/bitbake/lib/bb/progress.py index f54d1c76..9c755b7f 100644 --- a/external/poky/bitbake/lib/bb/progress.py +++ b/external/poky/bitbake/lib/bb/progress.py @@ -4,25 +4,15 @@ BitBake progress handling code # Copyright (C) 2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -import sys import re import time import inspect import bb.event import bb.build +from bb.build import StdoutNoopContextManager class ProgressHandler(object): """ @@ -37,7 +27,14 @@ class ProgressHandler(object): if outfile: self._outfile = outfile else: - self._outfile = sys.stdout + self._outfile = StdoutNoopContextManager() + + def __enter__(self): + self._outfile.__enter__() + return self + + def __exit__(self, *excinfo): + self._outfile.__exit__(*excinfo) def _fire_progress(self, taskprogress, rate=None): """Internal function to fire the progress event""" @@ -157,6 +154,12 @@ class MultiStageProgressReporter(object): self._stage_total = None self._callers = [] + def __enter__(self): + return self + + def __exit__(self, *excinfo): + pass + def _fire_progress(self, taskprogress): bb.event.fire(bb.build.TaskProgress(taskprogress), self._data) diff --git a/external/poky/bitbake/lib/bb/providers.py b/external/poky/bitbake/lib/bb/providers.py index c2aa98c0..81459c36 100644 --- a/external/poky/bitbake/lib/bb/providers.py +++ b/external/poky/bitbake/lib/bb/providers.py @@ -1,5 +1,3 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # Copyright (C) 2003, 2004 Chris Larson # Copyright (C) 2003, 2004 Phil Blundell @@ -8,18 +6,8 @@ # Copyright (C) 2005 ROAD GmbH # Copyright (C) 2006 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import re import logging @@ -104,11 +92,11 @@ def preferredVersionMatch(pe, pv, pr, preferred_e, preferred_v, preferred_r): Check if the version pe,pv,pr is the preferred one. If there is preferred version defined and ends with '%', then pv has to start with that version after removing the '%' """ - if (pr == preferred_r or preferred_r == None): - if (pe == preferred_e or preferred_e == None): + if pr == preferred_r or preferred_r is None: + if pe == preferred_e or preferred_e is None: if preferred_v == pv: return True - if preferred_v != None and preferred_v.endswith('%') and pv.startswith(preferred_v[:len(preferred_v)-1]): + if preferred_v is not None and preferred_v.endswith('%') and pv.startswith(preferred_v[:len(preferred_v)-1]): return True return False @@ -129,7 +117,7 @@ def findPreferredProvider(pn, cfgData, dataCache, pkg_pn = None, item = None): preferred_v = cfgData.getVar("PREFERRED_VERSION") if preferred_v: - m = re.match('(\d+:)*(.*)(_.*)*', preferred_v) + m = re.match(r'(\d+:)*(.*)(_.*)*', preferred_v) if m: if m.group(1): preferred_e = m.group(1)[:-1] @@ -384,7 +372,7 @@ def getRuntimeProviders(dataCache, rdepend): # Only search dynamic packages if we can't find anything in other variables for pattern in dataCache.packages_dynamic: - pattern = pattern.replace('+', "\+") + pattern = pattern.replace(r'+', r"\+") if pattern in regexp_cache: regexp = regexp_cache[pattern] else: diff --git a/external/poky/bitbake/lib/bb/pysh/builtin.py b/external/poky/bitbake/lib/bb/pysh/builtin.py deleted file mode 100644 index a8814dc3..00000000 --- a/external/poky/bitbake/lib/bb/pysh/builtin.py +++ /dev/null @@ -1,710 +0,0 @@ -# builtin.py - builtins and utilities definitions for pysh. -# -# Copyright 2007 Patrick Mezard -# -# This software may be used and distributed according to the terms -# of the GNU General Public License, incorporated herein by reference. - -"""Builtin and internal utilities implementations. - -- Beware not to use python interpreter environment as if it were the shell -environment. For instance, commands working directory must be explicitely handled -through env['PWD'] instead of relying on python working directory. -""" -import errno -import optparse -import os -import re -import subprocess -import sys -import time - -def has_subprocess_bug(): - return getattr(subprocess, 'list2cmdline') and \ - ( subprocess.list2cmdline(['']) == '' or \ - subprocess.list2cmdline(['foo|bar']) == 'foo|bar') - -# Detect python bug 1634343: "subprocess swallows empty arguments under win32" -# -# Also detect: "[ 1710802 ] subprocess must escape redirection characters under win32" -# -if has_subprocess_bug(): - import subprocess_fix - subprocess.list2cmdline = subprocess_fix.list2cmdline - -from sherrors import * - -class NonExitingParser(optparse.OptionParser): - """OptionParser default behaviour upon error is to print the error message and - exit. Raise a utility error instead. - """ - def error(self, msg): - raise UtilityError(msg) - -#------------------------------------------------------------------------------- -# set special builtin -#------------------------------------------------------------------------------- -OPT_SET = NonExitingParser(usage="set - set or unset options and positional parameters") -OPT_SET.add_option( '-f', action='store_true', dest='has_f', default=False, - help='The shell shall disable pathname expansion.') -OPT_SET.add_option('-e', action='store_true', dest='has_e', default=False, - help="""When this option is on, if a simple command fails for any of the \ - reasons listed in Consequences of Shell Errors or returns an exit status \ - value >0, and is not part of the compound list following a while, until, \ - or if keyword, and is not a part of an AND or OR list, and is not a \ - pipeline preceded by the ! reserved word, then the shell shall immediately \ - exit.""") -OPT_SET.add_option('-x', action='store_true', dest='has_x', default=False, - help="""The shell shall write to standard error a trace for each command \ - after it expands the command and before it executes it. It is unspecified \ - whether the command that turns tracing off is traced.""") - -def builtin_set(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - - option, args = OPT_SET.parse_args(args) - env = interp.get_env() - - if option.has_f: - env.set_opt('-f') - if option.has_e: - env.set_opt('-e') - if option.has_x: - env.set_opt('-x') - return 0 - -#------------------------------------------------------------------------------- -# shift special builtin -#------------------------------------------------------------------------------- -def builtin_shift(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - - params = interp.get_env().get_positional_args() - if args: - try: - n = int(args[0]) - if n > len(params): - raise ValueError() - except ValueError: - return 1 - else: - n = 1 - - params[:n] = [] - interp.get_env().set_positional_args(params) - return 0 - -#------------------------------------------------------------------------------- -# export special builtin -#------------------------------------------------------------------------------- -OPT_EXPORT = NonExitingParser(usage="set - set or unset options and positional parameters") -OPT_EXPORT.add_option('-p', action='store_true', dest='has_p', default=False) - -def builtin_export(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - - option, args = OPT_EXPORT.parse_args(args) - if option.has_p: - raise NotImplementedError() - - for arg in args: - try: - name, value = arg.split('=', 1) - except ValueError: - name, value = arg, None - env = interp.get_env().export(name, value) - - return 0 - -#------------------------------------------------------------------------------- -# return special builtin -#------------------------------------------------------------------------------- -def builtin_return(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - res = 0 - if args: - try: - res = int(args[0]) - except ValueError: - res = 0 - if not 0<=res<=255: - res = 0 - - # BUG: should be last executed command exit code - raise ReturnSignal(res) - -#------------------------------------------------------------------------------- -# trap special builtin -#------------------------------------------------------------------------------- -def builtin_trap(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - if len(args) < 2: - stderr.write('trap: usage: trap [[arg] signal_spec ...]\n') - return 2 - - action = args[0] - for sig in args[1:]: - try: - env.traps[sig] = action - except Exception as e: - stderr.write('trap: %s\n' % str(e)) - return 0 - -#------------------------------------------------------------------------------- -# unset special builtin -#------------------------------------------------------------------------------- -OPT_UNSET = NonExitingParser("unset - unset values and attributes of variables and functions") -OPT_UNSET.add_option( '-f', action='store_true', dest='has_f', default=False) -OPT_UNSET.add_option( '-v', action='store_true', dest='has_v', default=False) - -def builtin_unset(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - - option, args = OPT_UNSET.parse_args(args) - - status = 0 - env = interp.get_env() - for arg in args: - try: - if option.has_f: - env.remove_function(arg) - else: - del env[arg] - except KeyError: - pass - except VarAssignmentError: - status = 1 - - return status - -#------------------------------------------------------------------------------- -# wait special builtin -#------------------------------------------------------------------------------- -def builtin_wait(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - - return interp.wait([int(arg) for arg in args]) - -#------------------------------------------------------------------------------- -# cat utility -#------------------------------------------------------------------------------- -def utility_cat(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - - if not args: - args = ['-'] - - status = 0 - for arg in args: - if arg == '-': - data = stdin.read() - else: - path = os.path.join(env['PWD'], arg) - try: - f = file(path, 'rb') - try: - data = f.read() - finally: - f.close() - except IOError as e: - if e.errno != errno.ENOENT: - raise - status = 1 - continue - stdout.write(data) - stdout.flush() - return status - -#------------------------------------------------------------------------------- -# cd utility -#------------------------------------------------------------------------------- -OPT_CD = NonExitingParser("cd - change the working directory") - -def utility_cd(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - - option, args = OPT_CD.parse_args(args) - env = interp.get_env() - - directory = None - printdir = False - if not args: - home = env.get('HOME') - if home: - # Unspecified, do nothing - return 0 - else: - directory = home - elif len(args)==1: - directory = args[0] - if directory=='-': - if 'OLDPWD' not in env: - raise UtilityError("OLDPWD not set") - printdir = True - directory = env['OLDPWD'] - else: - raise UtilityError("too many arguments") - - curpath = None - # Absolute directories will be handled correctly by the os.path.join call. - if not directory.startswith('.') and not directory.startswith('..'): - cdpaths = env.get('CDPATH', '.').split(';') - for cdpath in cdpaths: - p = os.path.join(cdpath, directory) - if os.path.isdir(p): - curpath = p - break - - if curpath is None: - curpath = directory - curpath = os.path.join(env['PWD'], directory) - - env['OLDPWD'] = env['PWD'] - env['PWD'] = curpath - if printdir: - stdout.write('%s\n' % curpath) - return 0 - -#------------------------------------------------------------------------------- -# colon utility -#------------------------------------------------------------------------------- -def utility_colon(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - return 0 - -#------------------------------------------------------------------------------- -# echo utility -#------------------------------------------------------------------------------- -def utility_echo(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - - # Echo only takes arguments, no options. Use printf if you need fancy stuff. - output = ' '.join(args) + '\n' - stdout.write(output) - stdout.flush() - return 0 - -#------------------------------------------------------------------------------- -# egrep utility -#------------------------------------------------------------------------------- -# egrep is usually a shell script. -# Unfortunately, pysh does not support shell scripts *with arguments* right now, -# so the redirection is implemented here, assuming grep is available. -def utility_egrep(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - - return run_command('grep', ['-E'] + args, interp, env, stdin, stdout, - stderr, debugflags) - -#------------------------------------------------------------------------------- -# env utility -#------------------------------------------------------------------------------- -def utility_env(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - - if args and args[0]=='-i': - raise NotImplementedError('env: -i option is not implemented') - - i = 0 - for arg in args: - if '=' not in arg: - break - # Update the current environment - name, value = arg.split('=', 1) - env[name] = value - i += 1 - - if args[i:]: - # Find then execute the specified interpreter - utility = env.find_in_path(args[i]) - if not utility: - return 127 - args[i:i+1] = utility - name = args[i] - args = args[i+1:] - try: - return run_command(name, args, interp, env, stdin, stdout, stderr, - debugflags) - except UtilityError: - stderr.write('env: failed to execute %s' % ' '.join([name]+args)) - return 126 - else: - for pair in env.get_variables().iteritems(): - stdout.write('%s=%s\n' % pair) - return 0 - -#------------------------------------------------------------------------------- -# exit utility -#------------------------------------------------------------------------------- -def utility_exit(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - - res = None - if args: - try: - res = int(args[0]) - except ValueError: - res = None - if not 0<=res<=255: - res = None - - if res is None: - # BUG: should be last executed command exit code - res = 0 - - raise ExitSignal(res) - -#------------------------------------------------------------------------------- -# fgrep utility -#------------------------------------------------------------------------------- -# see egrep -def utility_fgrep(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - - return run_command('grep', ['-F'] + args, interp, env, stdin, stdout, - stderr, debugflags) - -#------------------------------------------------------------------------------- -# gunzip utility -#------------------------------------------------------------------------------- -# see egrep -def utility_gunzip(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - - return run_command('gzip', ['-d'] + args, interp, env, stdin, stdout, - stderr, debugflags) - -#------------------------------------------------------------------------------- -# kill utility -#------------------------------------------------------------------------------- -def utility_kill(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - - for arg in args: - pid = int(arg) - status = subprocess.call(['pskill', '/T', str(pid)], - shell=True, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - # pskill is asynchronous, hence the stupid polling loop - while 1: - p = subprocess.Popen(['pslist', str(pid)], - shell=True, - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT) - output = p.communicate()[0] - if ('process %d was not' % pid) in output: - break - time.sleep(1) - return status - -#------------------------------------------------------------------------------- -# mkdir utility -#------------------------------------------------------------------------------- -OPT_MKDIR = NonExitingParser("mkdir - make directories.") -OPT_MKDIR.add_option('-p', action='store_true', dest='has_p', default=False) - -def utility_mkdir(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - - # TODO: implement umask - # TODO: implement proper utility error report - option, args = OPT_MKDIR.parse_args(args) - for arg in args: - path = os.path.join(env['PWD'], arg) - if option.has_p: - try: - os.makedirs(path) - except IOError as e: - if e.errno != errno.EEXIST: - raise - else: - os.mkdir(path) - return 0 - -#------------------------------------------------------------------------------- -# netstat utility -#------------------------------------------------------------------------------- -def utility_netstat(name, args, interp, env, stdin, stdout, stderr, debugflags): - # Do you really expect me to implement netstat ? - # This empty form is enough for Mercurial tests since it's - # supposed to generate nothing upon success. Faking this test - # is not a big deal either. - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - return 0 - -#------------------------------------------------------------------------------- -# pwd utility -#------------------------------------------------------------------------------- -OPT_PWD = NonExitingParser("pwd - return working directory name") -OPT_PWD.add_option('-L', action='store_true', dest='has_L', default=True, - help="""If the PWD environment variable contains an absolute pathname of \ - the current directory that does not contain the filenames dot or dot-dot, \ - pwd shall write this pathname to standard output. Otherwise, the -L option \ - shall behave as the -P option.""") -OPT_PWD.add_option('-P', action='store_true', dest='has_L', default=False, - help="""The absolute pathname written shall not contain filenames that, in \ - the context of the pathname, refer to files of type symbolic link.""") - -def utility_pwd(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - - option, args = OPT_PWD.parse_args(args) - stdout.write('%s\n' % env['PWD']) - return 0 - -#------------------------------------------------------------------------------- -# printf utility -#------------------------------------------------------------------------------- -RE_UNESCAPE = re.compile(r'(\\x[a-zA-Z0-9]{2}|\\[0-7]{1,3}|\\.)') - -def utility_printf(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - - def replace(m): - assert m.group() - g = m.group()[1:] - if g.startswith('x'): - return chr(int(g[1:], 16)) - if len(g) <= 3 and len([c for c in g if c in '01234567']) == len(g): - # Yay, an octal number - return chr(int(g, 8)) - return { - 'a': '\a', - 'b': '\b', - 'f': '\f', - 'n': '\n', - 'r': '\r', - 't': '\t', - 'v': '\v', - '\\': '\\', - }.get(g) - - # Convert escape sequences - format = re.sub(RE_UNESCAPE, replace, args[0]) - stdout.write(format % tuple(args[1:])) - return 0 - -#------------------------------------------------------------------------------- -# true utility -#------------------------------------------------------------------------------- -def utility_true(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - return 0 - -#------------------------------------------------------------------------------- -# sed utility -#------------------------------------------------------------------------------- -RE_SED = re.compile(r'^s(.).*\1[a-zA-Z]*$') - -# cygwin sed fails with some expressions when they do not end with a single space. -# see unit tests for details. Interestingly, the same expressions works perfectly -# in cygwin shell. -def utility_sed(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - - # Scan pattern arguments and append a space if necessary - for i in range(len(args)): - if not RE_SED.search(args[i]): - continue - args[i] = args[i] + ' ' - - return run_command(name, args, interp, env, stdin, stdout, - stderr, debugflags) - -#------------------------------------------------------------------------------- -# sleep utility -#------------------------------------------------------------------------------- -def utility_sleep(name, args, interp, env, stdin, stdout, stderr, debugflags): - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - time.sleep(int(args[0])) - return 0 - -#------------------------------------------------------------------------------- -# sort utility -#------------------------------------------------------------------------------- -OPT_SORT = NonExitingParser("sort - sort, merge, or sequence check text files") - -def utility_sort(name, args, interp, env, stdin, stdout, stderr, debugflags): - - def sort(path): - if path == '-': - lines = stdin.readlines() - else: - try: - f = file(path) - try: - lines = f.readlines() - finally: - f.close() - except IOError as e: - stderr.write(str(e) + '\n') - return 1 - - if lines and lines[-1][-1]!='\n': - lines[-1] = lines[-1] + '\n' - return lines - - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - - option, args = OPT_SORT.parse_args(args) - alllines = [] - - if len(args)<=0: - args += ['-'] - - # Load all files lines - curdir = os.getcwd() - try: - os.chdir(env['PWD']) - for path in args: - alllines += sort(path) - finally: - os.chdir(curdir) - - alllines.sort() - for line in alllines: - stdout.write(line) - return 0 - -#------------------------------------------------------------------------------- -# hg utility -#------------------------------------------------------------------------------- - -hgcommands = [ - 'add', - 'addremove', - 'commit', 'ci', - 'debugrename', - 'debugwalk', - 'falabala', # Dummy command used in a mercurial test - 'incoming', - 'locate', - 'pull', - 'push', - 'qinit', - 'remove', 'rm', - 'rename', 'mv', - 'revert', - 'showconfig', - 'status', 'st', - 'strip', - ] - -def rewriteslashes(name, args): - # Several hg commands output file paths, rewrite the separators - if len(args) > 1 and name.lower().endswith('python') \ - and args[0].endswith('hg'): - for cmd in hgcommands: - if cmd in args[1:]: - return True - - # svn output contains many paths with OS specific separators. - # Normalize these to unix paths. - base = os.path.basename(name) - if base.startswith('svn'): - return True - - return False - -def rewritehg(output): - if not output: - return output - # Rewrite os specific messages - output = output.replace(': The system cannot find the file specified', - ': No such file or directory') - output = re.sub(': Access is denied.*$', ': Permission denied', output) - output = output.replace(': No connection could be made because the target machine actively refused it', - ': Connection refused') - return output - - -def run_command(name, args, interp, env, stdin, stdout, - stderr, debugflags): - # Execute the command - if 'debug-utility' in debugflags: - print interp.log(' '.join([name, str(args), interp['PWD']]) + '\n') - - hgbin = interp.options().hgbinary - ishg = hgbin and ('hg' in name or args and 'hg' in args[0]) - unixoutput = 'cygwin' in name or ishg - - exec_env = env.get_variables() - try: - # BUG: comparing file descriptor is clearly not a reliable way to tell - # whether they point on the same underlying object. But in pysh limited - # scope this is usually right, we do not expect complicated redirections - # besides usual 2>&1. - # Still there is one case we have but cannot deal with is when stdout - # and stderr are redirected *by pysh caller*. This the reason for the - # --redirect pysh() option. - # Now, we want to know they are the same because we sometimes need to - # transform the command output, mostly remove CR-LF to ensure that - # command output is unix-like. Cygwin utilies are a special case because - # they explicitely set their output streams to binary mode, so we have - # nothing to do. For all others commands, we have to guess whether they - # are sending text data, in which case the transformation must be done. - # Again, the NUL character test is unreliable but should be enough for - # hg tests. - redirected = stdout.fileno()==stderr.fileno() - if not redirected: - p = subprocess.Popen([name] + args, cwd=env['PWD'], env=exec_env, - stdin=stdin, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - else: - p = subprocess.Popen([name] + args, cwd=env['PWD'], env=exec_env, - stdin=stdin, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - out, err = p.communicate() - except WindowsError as e: - raise UtilityError(str(e)) - - if not unixoutput: - def encode(s): - if '\0' in s: - return s - return s.replace('\r\n', '\n') - else: - encode = lambda s: s - - if rewriteslashes(name, args): - encode1_ = encode - def encode(s): - s = encode1_(s) - s = s.replace('\\\\', '\\') - s = s.replace('\\', '/') - return s - - if ishg: - encode2_ = encode - def encode(s): - return rewritehg(encode2_(s)) - - stdout.write(encode(out)) - if not redirected: - stderr.write(encode(err)) - return p.returncode - diff --git a/external/poky/bitbake/lib/bb/pysh/interp.py b/external/poky/bitbake/lib/bb/pysh/interp.py deleted file mode 100644 index d14ecf3c..00000000 --- a/external/poky/bitbake/lib/bb/pysh/interp.py +++ /dev/null @@ -1,1367 +0,0 @@ -# interp.py - shell interpreter for pysh. -# -# Copyright 2007 Patrick Mezard -# -# This software may be used and distributed according to the terms -# of the GNU General Public License, incorporated herein by reference. - -"""Implement the shell interpreter. - -Most references are made to "The Open Group Base Specifications Issue 6". - -""" -# TODO: document the fact input streams must implement fileno() so Popen will work correctly. -# it requires non-stdin stream to be implemented as files. Still to be tested... -# DOC: pathsep is used in PATH instead of ':'. Clearly, there are path syntax issues here. -# TODO: stop command execution upon error. -# TODO: sort out the filename/io_number mess. It should be possible to use filenames only. -# TODO: review subshell implementation -# TODO: test environment cloning for non-special builtins -# TODO: set -x should not rebuild commands from tokens, assignments/redirections are lost -# TODO: unit test for variable assignment -# TODO: test error management wrt error type/utility type -# TODO: test for binary output everywhere -# BUG: debug-parsing does not pass log file to PLY. Maybe a PLY upgrade is necessary. -import base64 -import cPickle as pickle -import errno -import glob -import os -import re -import subprocess -import sys -import tempfile - -try: - s = set() - del s -except NameError: - from Set import Set as set - -import builtin -from sherrors import * -import pyshlex -import pyshyacc - -def mappend(func, *args, **kargs): - """Like map but assume func returns a list. Returned lists are merged into - a single one. - """ - return reduce(lambda a,b: a+b, map(func, *args, **kargs), []) - -class FileWrapper: - """File object wrapper to ease debugging. - - Allow mode checking and implement file duplication through a simple - reference counting scheme. Not sure the latter is really useful since - only real file descriptors can be used. - """ - def __init__(self, mode, file, close=True): - if mode not in ('r', 'w', 'a'): - raise IOError('invalid mode: %s' % mode) - self._mode = mode - self._close = close - if isinstance(file, FileWrapper): - if file._refcount[0] <= 0: - raise IOError(0, 'Error') - self._refcount = file._refcount - self._refcount[0] += 1 - self._file = file._file - else: - self._refcount = [1] - self._file = file - - def dup(self): - return FileWrapper(self._mode, self, self._close) - - def fileno(self): - """fileno() should be only necessary for input streams.""" - return self._file.fileno() - - def read(self, size=-1): - if self._mode!='r': - raise IOError(0, 'Error') - return self._file.read(size) - - def readlines(self, *args, **kwargs): - return self._file.readlines(*args, **kwargs) - - def write(self, s): - if self._mode not in ('w', 'a'): - raise IOError(0, 'Error') - return self._file.write(s) - - def flush(self): - self._file.flush() - - def close(self): - if not self._refcount: - return - assert self._refcount[0] > 0 - - self._refcount[0] -= 1 - if self._refcount[0] == 0: - self._mode = 'c' - if self._close: - self._file.close() - self._refcount = None - - def mode(self): - return self._mode - - def __getattr__(self, name): - if name == 'name': - self.name = getattr(self._file, name) - return self.name - else: - raise AttributeError(name) - - def __del__(self): - self.close() - - -def win32_open_devnull(mode): - return open('NUL', mode) - - -class Redirections: - """Stores open files and their mapping to pseudo-sh file descriptor. - """ - # BUG: redirections are not handled correctly: 1>&3 2>&3 3>&4 does - # not make 1 to redirect to 4 - def __init__(self, stdin=None, stdout=None, stderr=None): - self._descriptors = {} - if stdin is not None: - self._add_descriptor(0, stdin) - if stdout is not None: - self._add_descriptor(1, stdout) - if stderr is not None: - self._add_descriptor(2, stderr) - - def add_here_document(self, interp, name, content, io_number=None): - if io_number is None: - io_number = 0 - - if name==pyshlex.unquote_wordtree(name): - content = interp.expand_here_document(('TOKEN', content)) - - # Write document content in a temporary file - tmp = tempfile.TemporaryFile() - try: - tmp.write(content) - tmp.flush() - tmp.seek(0) - self._add_descriptor(io_number, FileWrapper('r', tmp)) - except: - tmp.close() - raise - - def add(self, interp, op, filename, io_number=None): - if op not in ('<', '>', '>|', '>>', '>&'): - # TODO: add descriptor duplication and here_documents - raise RedirectionError('Unsupported redirection operator "%s"' % op) - - if io_number is not None: - io_number = int(io_number) - - if (op == '>&' and filename.isdigit()) or filename=='-': - # No expansion for file descriptors, quote them if you want a filename - fullname = filename - else: - if filename.startswith('/'): - # TODO: win32 kludge - if filename=='/dev/null': - fullname = 'NUL' - else: - # TODO: handle absolute pathnames, they are unlikely to exist on the - # current platform (win32 for instance). - raise NotImplementedError() - else: - fullname = interp.expand_redirection(('TOKEN', filename)) - if not fullname: - raise RedirectionError('%s: ambiguous redirect' % filename) - # Build absolute path based on PWD - fullname = os.path.join(interp.get_env()['PWD'], fullname) - - if op=='<': - return self._add_input_redirection(interp, fullname, io_number) - elif op in ('>', '>|'): - clobber = ('>|'==op) - return self._add_output_redirection(interp, fullname, io_number, clobber) - elif op=='>>': - return self._add_output_appending(interp, fullname, io_number) - elif op=='>&': - return self._dup_output_descriptor(fullname, io_number) - - def close(self): - if self._descriptors is not None: - for desc in self._descriptors.itervalues(): - desc.flush() - desc.close() - self._descriptors = None - - def stdin(self): - return self._descriptors[0] - - def stdout(self): - return self._descriptors[1] - - def stderr(self): - return self._descriptors[2] - - def clone(self): - clone = Redirections() - for desc, fileobj in self._descriptors.iteritems(): - clone._descriptors[desc] = fileobj.dup() - return clone - - def _add_output_redirection(self, interp, filename, io_number, clobber): - if io_number is None: - # io_number default to standard output - io_number = 1 - - if not clobber and interp.get_env().has_opt('-C') and os.path.isfile(filename): - # File already exist in no-clobber mode, bail out - raise RedirectionError('File "%s" already exists' % filename) - - # Open and register - self._add_file_descriptor(io_number, filename, 'w') - - def _add_output_appending(self, interp, filename, io_number): - if io_number is None: - io_number = 1 - self._add_file_descriptor(io_number, filename, 'a') - - def _add_input_redirection(self, interp, filename, io_number): - if io_number is None: - io_number = 0 - self._add_file_descriptor(io_number, filename, 'r') - - def _add_file_descriptor(self, io_number, filename, mode): - try: - if filename.startswith('/'): - if filename=='/dev/null': - f = win32_open_devnull(mode+'b') - else: - # TODO: handle absolute pathnames, they are unlikely to exist on the - # current platform (win32 for instance). - raise NotImplementedError('cannot open absolute path %s' % repr(filename)) - else: - f = file(filename, mode+'b') - except IOError as e: - raise RedirectionError(str(e)) - - wrapper = None - try: - wrapper = FileWrapper(mode, f) - f = None - self._add_descriptor(io_number, wrapper) - except: - if f: f.close() - if wrapper: wrapper.close() - raise - - def _dup_output_descriptor(self, source_fd, dest_fd): - if source_fd is None: - source_fd = 1 - self._dup_file_descriptor(source_fd, dest_fd, 'w') - - def _dup_file_descriptor(self, source_fd, dest_fd, mode): - source_fd = int(source_fd) - if source_fd not in self._descriptors: - raise RedirectionError('"%s" is not a valid file descriptor' % str(source_fd)) - source = self._descriptors[source_fd] - - if source.mode()!=mode: - raise RedirectionError('Descriptor %s cannot be duplicated in mode "%s"' % (str(source), mode)) - - if dest_fd=='-': - # Close the source descriptor - del self._descriptors[source_fd] - source.close() - else: - dest_fd = int(dest_fd) - if dest_fd not in self._descriptors: - raise RedirectionError('Cannot replace file descriptor %s' % str(dest_fd)) - - dest = self._descriptors[dest_fd] - if dest.mode()!=mode: - raise RedirectionError('Descriptor %s cannot be cannot be redirected in mode "%s"' % (str(dest), mode)) - - self._descriptors[dest_fd] = source.dup() - dest.close() - - def _add_descriptor(self, io_number, file): - io_number = int(io_number) - - if io_number in self._descriptors: - # Close the current descriptor - d = self._descriptors[io_number] - del self._descriptors[io_number] - d.close() - - self._descriptors[io_number] = file - - def __str__(self): - names = [('%d=%r' % (k, getattr(v, 'name', None))) for k,v - in self._descriptors.iteritems()] - names = ','.join(names) - return 'Redirections(%s)' % names - - def __del__(self): - self.close() - -def cygwin_to_windows_path(path): - """Turn /cygdrive/c/foo into c:/foo, or return path if it - is not a cygwin path. - """ - if not path.startswith('/cygdrive/'): - return path - path = path[len('/cygdrive/'):] - path = path[:1] + ':' + path[1:] - return path - -def win32_to_unix_path(path): - if path is not None: - path = path.replace('\\', '/') - return path - -_RE_SHEBANG = re.compile(r'^\#!\s?([^\s]+)(?:\s([^\s]+))?') -_SHEBANG_CMDS = { - '/usr/bin/env': 'env', - '/bin/sh': 'pysh', - 'python': 'python', -} - -def resolve_shebang(path, ignoreshell=False): - """Return a list of arguments as shebang interpreter call or an empty list - if path does not refer to an executable script. - See . - - ignoreshell - set to True to ignore sh shebangs. Return an empty list instead. - """ - try: - f = file(path) - try: - # At most 80 characters in the first line - header = f.read(80).splitlines()[0] - finally: - f.close() - - m = _RE_SHEBANG.search(header) - if not m: - return [] - cmd, arg = m.group(1,2) - if os.path.isfile(cmd): - # Keep this one, the hg script for instance contains a weird windows - # shebang referencing the current python install. - cmdfile = os.path.basename(cmd).lower() - if cmdfile == 'python.exe': - cmd = 'python' - pass - elif cmd not in _SHEBANG_CMDS: - raise CommandNotFound('Unknown interpreter "%s" referenced in '\ - 'shebang' % header) - cmd = _SHEBANG_CMDS.get(cmd) - if cmd is None or (ignoreshell and cmd == 'pysh'): - return [] - if arg is None: - return [cmd, win32_to_unix_path(path)] - return [cmd, arg, win32_to_unix_path(path)] - except IOError as e: - if e.errno!=errno.ENOENT and \ - (e.errno!=errno.EPERM and not os.path.isdir(path)): # Opening a directory raises EPERM - raise - return [] - -def win32_find_in_path(name, path): - if isinstance(path, str): - path = path.split(os.pathsep) - - exts = os.environ.get('PATHEXT', '').lower().split(os.pathsep) - for p in path: - p_name = os.path.join(p, name) - - prefix = resolve_shebang(p_name) - if prefix: - return prefix - - for ext in exts: - p_name_ext = p_name + ext - if os.path.exists(p_name_ext): - return [win32_to_unix_path(p_name_ext)] - return [] - -class Traps(dict): - def __setitem__(self, key, value): - if key not in ('EXIT',): - raise NotImplementedError() - super(Traps, self).__setitem__(key, value) - -# IFS white spaces character class -_IFS_WHITESPACES = (' ', '\t', '\n') - -class Environment: - """Environment holds environment variables, export table, function - definitions and whatever is defined in 2.12 "Shell Execution Environment", - redirection excepted. - """ - def __init__(self, pwd): - self._opt = set() #Shell options - - self._functions = {} - self._env = {'?': '0', '#': '0'} - self._exported = set([ - 'HOME', 'IFS', 'PATH' - ]) - - # Set environment vars with side-effects - self._ifs_ws = None # Set of IFS whitespace characters - self._ifs_re = None # Regular expression used to split between words using IFS classes - self['IFS'] = ''.join(_IFS_WHITESPACES) #Default environment values - self['PWD'] = pwd - self.traps = Traps() - - def clone(self, subshell=False): - env = Environment(self['PWD']) - env._opt = set(self._opt) - for k,v in self.get_variables().iteritems(): - if k in self._exported: - env.export(k,v) - elif subshell: - env[k] = v - - if subshell: - env._functions = dict(self._functions) - - return env - - def __getitem__(self, key): - if key in ('@', '*', '-', '$'): - raise NotImplementedError('%s is not implemented' % repr(key)) - return self._env[key] - - def get(self, key, defval=None): - try: - return self[key] - except KeyError: - return defval - - def __setitem__(self, key, value): - if key=='IFS': - # Update the whitespace/non-whitespace classes - self._update_ifs(value) - elif key=='PWD': - pwd = os.path.abspath(value) - if not os.path.isdir(pwd): - raise VarAssignmentError('Invalid directory %s' % value) - value = pwd - elif key in ('?', '!'): - value = str(int(value)) - self._env[key] = value - - def __delitem__(self, key): - if key in ('IFS', 'PWD', '?'): - raise VarAssignmentError('%s cannot be unset' % key) - del self._env[key] - - def __contains__(self, item): - return item in self._env - - def set_positional_args(self, args): - """Set the content of 'args' as positional argument from 1 to len(args). - Return previous argument as a list of strings. - """ - # Save and remove previous arguments - prevargs = [] - for i in range(int(self._env['#'])): - i = str(i+1) - prevargs.append(self._env[i]) - del self._env[i] - self._env['#'] = '0' - - #Set new ones - for i,arg in enumerate(args): - self._env[str(i+1)] = str(arg) - self._env['#'] = str(len(args)) - - return prevargs - - def get_positional_args(self): - return [self._env[str(i+1)] for i in range(int(self._env['#']))] - - def get_variables(self): - return dict(self._env) - - def export(self, key, value=None): - if value is not None: - self[key] = value - self._exported.add(key) - - def get_exported(self): - return [(k,self._env.get(k)) for k in self._exported] - - def split_fields(self, word): - if not self._ifs_ws or not word: - return [word] - return re.split(self._ifs_re, word) - - def _update_ifs(self, value): - """Update the split_fields related variables when IFS character set is - changed. - """ - # TODO: handle NULL IFS - - # Separate characters in whitespace and non-whitespace - chars = set(value) - ws = [c for c in chars if c in _IFS_WHITESPACES] - nws = [c for c in chars if c not in _IFS_WHITESPACES] - - # Keep whitespaces in a string for left and right stripping - self._ifs_ws = ''.join(ws) - - # Build a regexp to split fields - trailing = '[' + ''.join([re.escape(c) for c in ws]) + ']' - if nws: - # First, the single non-whitespace occurence. - nws = '[' + ''.join([re.escape(c) for c in nws]) + ']' - nws = '(?:' + trailing + '*' + nws + trailing + '*' + '|' + trailing + '+)' - else: - # Then mix all parts with quantifiers - nws = trailing + '+' - self._ifs_re = re.compile(nws) - - def has_opt(self, opt, val=None): - return (opt, val) in self._opt - - def set_opt(self, opt, val=None): - self._opt.add((opt, val)) - - def find_in_path(self, name, pwd=False): - path = self._env.get('PATH', '').split(os.pathsep) - if pwd: - path[:0] = [self['PWD']] - if os.name == 'nt': - return win32_find_in_path(name, self._env.get('PATH', '')) - else: - raise NotImplementedError() - - def define_function(self, name, body): - if not is_name(name): - raise ShellSyntaxError('%s is not a valid function name' % repr(name)) - self._functions[name] = body - - def remove_function(self, name): - del self._functions[name] - - def is_function(self, name): - return name in self._functions - - def get_function(self, name): - return self._functions.get(name) - - -name_charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_' -name_charset = dict(zip(name_charset,name_charset)) - -def match_name(s): - """Return the length in characters of the longest prefix made of name - allowed characters in s. - """ - for i,c in enumerate(s): - if c not in name_charset: - return s[:i] - return s - -def is_name(s): - return len([c for c in s if c not in name_charset])<=0 - -def is_special_param(c): - return len(c)==1 and c in ('@','*','#','?','-','$','!','0') - -def utility_not_implemented(name, *args, **kwargs): - raise NotImplementedError('%s utility is not implemented' % name) - - -class Utility: - """Define utilities properties: - func -- utility callable. See builtin module for utility samples. - is_special -- see XCU 2.8. - """ - def __init__(self, func, is_special=0): - self.func = func - self.is_special = bool(is_special) - - -def encodeargs(args): - def encodearg(s): - lines = base64.encodestring(s) - lines = [l.splitlines()[0] for l in lines] - return ''.join(lines) - - s = pickle.dumps(args) - return encodearg(s) - -def decodeargs(s): - s = base64.decodestring(s) - return pickle.loads(s) - - -class GlobError(Exception): - pass - -class Options: - def __init__(self): - # True if Mercurial operates with binary streams - self.hgbinary = True - -class Interpreter: - # Implementation is very basic: the execute() method just makes a DFS on the - # AST and execute nodes one by one. Nodes are tuple (name,obj) where name - # is a string identifier and obj the AST element returned by the parser. - # - # Handler are named after the node identifiers. - # TODO: check node names and remove the switch in execute with some - # dynamic getattr() call to find node handlers. - """Shell interpreter. - - The following debugging flags can be passed: - debug-parsing - enable PLY debugging. - debug-tree - print the generated AST. - debug-cmd - trace command execution before word expansion, plus exit status. - debug-utility - trace utility execution. - """ - - # List supported commands. - COMMANDS = { - 'cat': Utility(builtin.utility_cat,), - 'cd': Utility(builtin.utility_cd,), - ':': Utility(builtin.utility_colon,), - 'echo': Utility(builtin.utility_echo), - 'env': Utility(builtin.utility_env), - 'exit': Utility(builtin.utility_exit), - 'export': Utility(builtin.builtin_export, is_special=1), - 'egrep': Utility(builtin.utility_egrep), - 'fgrep': Utility(builtin.utility_fgrep), - 'gunzip': Utility(builtin.utility_gunzip), - 'kill': Utility(builtin.utility_kill), - 'mkdir': Utility(builtin.utility_mkdir), - 'netstat': Utility(builtin.utility_netstat), - 'printf': Utility(builtin.utility_printf), - 'pwd': Utility(builtin.utility_pwd), - 'return': Utility(builtin.builtin_return, is_special=1), - 'sed': Utility(builtin.utility_sed,), - 'set': Utility(builtin.builtin_set,), - 'shift': Utility(builtin.builtin_shift,), - 'sleep': Utility(builtin.utility_sleep,), - 'sort': Utility(builtin.utility_sort,), - 'trap': Utility(builtin.builtin_trap, is_special=1), - 'true': Utility(builtin.utility_true), - 'unset': Utility(builtin.builtin_unset, is_special=1), - 'wait': Utility(builtin.builtin_wait, is_special=1), - } - - def __init__(self, pwd, debugflags = [], env=None, redirs=None, stdin=None, - stdout=None, stderr=None, opts=Options()): - self._env = env - if self._env is None: - self._env = Environment(pwd) - self._children = {} - - self._redirs = redirs - self._close_redirs = False - - if self._redirs is None: - if stdin is None: - stdin = sys.stdin - if stdout is None: - stdout = sys.stdout - if stderr is None: - stderr = sys.stderr - stdin = FileWrapper('r', stdin, False) - stdout = FileWrapper('w', stdout, False) - stderr = FileWrapper('w', stderr, False) - self._redirs = Redirections(stdin, stdout, stderr) - self._close_redirs = True - - self._debugflags = list(debugflags) - self._logfile = sys.stderr - self._options = opts - - def close(self): - """Must be called when the interpreter is no longer used.""" - script = self._env.traps.get('EXIT') - if script: - try: - self.execute_script(script=script) - except: - pass - - if self._redirs is not None and self._close_redirs: - self._redirs.close() - self._redirs = None - - def log(self, s): - self._logfile.write(s) - self._logfile.flush() - - def __getitem__(self, key): - return self._env[key] - - def __setitem__(self, key, value): - self._env[key] = value - - def options(self): - return self._options - - def redirect(self, redirs, ios): - def add_redir(io): - if isinstance(io, pyshyacc.IORedirect): - redirs.add(self, io.op, io.filename, io.io_number) - else: - redirs.add_here_document(self, io.name, io.content, io.io_number) - - map(add_redir, ios) - return redirs - - def execute_script(self, script=None, ast=None, sourced=False, - scriptpath=None): - """If script is not None, parse the input. Otherwise takes the supplied - AST. Then execute the AST. - Return the script exit status. - """ - try: - if scriptpath is not None: - self._env['0'] = os.path.abspath(scriptpath) - - if script is not None: - debug_parsing = ('debug-parsing' in self._debugflags) - cmds, script = pyshyacc.parse(script, True, debug_parsing) - if 'debug-tree' in self._debugflags: - pyshyacc.print_commands(cmds, self._logfile) - self._logfile.flush() - else: - cmds, script = ast, '' - - status = 0 - for cmd in cmds: - try: - status = self.execute(cmd) - except ExitSignal as e: - if sourced: - raise - status = int(e.args[0]) - return status - except ShellError: - self._env['?'] = 1 - raise - if 'debug-utility' in self._debugflags or 'debug-cmd' in self._debugflags: - self.log('returncode ' + str(status)+ '\n') - return status - except CommandNotFound as e: - print >>self._redirs.stderr, str(e) - self._redirs.stderr.flush() - # Command not found by non-interactive shell - # return 127 - raise - except RedirectionError as e: - # TODO: should be handled depending on the utility status - print >>self._redirs.stderr, str(e) - self._redirs.stderr.flush() - # Command not found by non-interactive shell - # return 127 - raise - - def dotcommand(self, env, args): - if len(args) < 1: - raise ShellError('. expects at least one argument') - path = args[0] - if '/' not in path: - found = env.find_in_path(args[0], True) - if found: - path = found[0] - script = file(path).read() - return self.execute_script(script=script, sourced=True) - - def execute(self, token, redirs=None): - """Execute and AST subtree with supplied redirections overriding default - interpreter ones. - Return the exit status. - """ - if not token: - return 0 - - if redirs is None: - redirs = self._redirs - - if isinstance(token, list): - # Commands sequence - res = 0 - for t in token: - res = self.execute(t, redirs) - return res - - type, value = token - status = 0 - if type=='simple_command': - redirs_copy = redirs.clone() - try: - # TODO: define and handle command return values - # TODO: implement set -e - status = self._execute_simple_command(value, redirs_copy) - finally: - redirs_copy.close() - elif type=='pipeline': - status = self._execute_pipeline(value, redirs) - elif type=='and_or': - status = self._execute_and_or(value, redirs) - elif type=='for_clause': - status = self._execute_for_clause(value, redirs) - elif type=='while_clause': - status = self._execute_while_clause(value, redirs) - elif type=='function_definition': - status = self._execute_function_definition(value, redirs) - elif type=='brace_group': - status = self._execute_brace_group(value, redirs) - elif type=='if_clause': - status = self._execute_if_clause(value, redirs) - elif type=='subshell': - status = self.subshell(ast=value.cmds, redirs=redirs) - elif type=='async': - status = self._asynclist(value) - elif type=='redirect_list': - redirs_copy = self.redirect(redirs.clone(), value.redirs) - try: - status = self.execute(value.cmd, redirs_copy) - finally: - redirs_copy.close() - else: - raise NotImplementedError('Unsupported token type ' + type) - - if status < 0: - status = 255 - return status - - def _execute_if_clause(self, if_clause, redirs): - cond_status = self.execute(if_clause.cond, redirs) - if cond_status==0: - return self.execute(if_clause.if_cmds, redirs) - else: - return self.execute(if_clause.else_cmds, redirs) - - def _execute_brace_group(self, group, redirs): - status = 0 - for cmd in group.cmds: - status = self.execute(cmd, redirs) - return status - - def _execute_function_definition(self, fundef, redirs): - self._env.define_function(fundef.name, fundef.body) - return 0 - - def _execute_while_clause(self, while_clause, redirs): - status = 0 - while 1: - cond_status = 0 - for cond in while_clause.condition: - cond_status = self.execute(cond, redirs) - - if cond_status: - break - - for cmd in while_clause.cmds: - status = self.execute(cmd, redirs) - - return status - - def _execute_for_clause(self, for_clause, redirs): - if not is_name(for_clause.name): - raise ShellSyntaxError('%s is not a valid name' % repr(for_clause.name)) - items = mappend(self.expand_token, for_clause.items) - - status = 0 - for item in items: - self._env[for_clause.name] = item - for cmd in for_clause.cmds: - status = self.execute(cmd, redirs) - return status - - def _execute_and_or(self, or_and, redirs): - res = self.execute(or_and.left, redirs) - if (or_and.op=='&&' and res==0) or (or_and.op!='&&' and res!=0): - res = self.execute(or_and.right, redirs) - return res - - def _execute_pipeline(self, pipeline, redirs): - if len(pipeline.commands)==1: - status = self.execute(pipeline.commands[0], redirs) - else: - # Execute all commands one after the other - status = 0 - inpath, outpath = None, None - try: - # Commands inputs and outputs cannot really be plugged as done - # by a real shell. Run commands sequentially and chain their - # input/output throught temporary files. - tmpfd, inpath = tempfile.mkstemp() - os.close(tmpfd) - tmpfd, outpath = tempfile.mkstemp() - os.close(tmpfd) - - inpath = win32_to_unix_path(inpath) - outpath = win32_to_unix_path(outpath) - - for i, cmd in enumerate(pipeline.commands): - call_redirs = redirs.clone() - try: - if i!=0: - call_redirs.add(self, '<', inpath) - if i!=len(pipeline.commands)-1: - call_redirs.add(self, '>', outpath) - - status = self.execute(cmd, call_redirs) - - # Chain inputs/outputs - inpath, outpath = outpath, inpath - finally: - call_redirs.close() - finally: - if inpath: os.remove(inpath) - if outpath: os.remove(outpath) - - if pipeline.reverse_status: - status = int(not status) - self._env['?'] = status - return status - - def _execute_function(self, name, args, interp, env, stdin, stdout, stderr, *others): - assert interp is self - - func = env.get_function(name) - #Set positional parameters - prevargs = None - try: - prevargs = env.set_positional_args(args) - try: - redirs = Redirections(stdin.dup(), stdout.dup(), stderr.dup()) - try: - status = self.execute(func, redirs) - finally: - redirs.close() - except ReturnSignal as e: - status = int(e.args[0]) - env['?'] = status - return status - finally: - #Reset positional parameters - if prevargs is not None: - env.set_positional_args(prevargs) - - def _execute_simple_command(self, token, redirs): - """Can raise ReturnSignal when return builtin is called, ExitSignal when - exit is called, and other shell exceptions upon builtin failures. - """ - debug_command = 'debug-cmd' in self._debugflags - if debug_command: - self.log('word' + repr(token.words) + '\n') - self.log('assigns' + repr(token.assigns) + '\n') - self.log('redirs' + repr(token.redirs) + '\n') - - is_special = None - env = self._env - - try: - # Word expansion - args = [] - for word in token.words: - args += self.expand_token(word) - if is_special is None and args: - is_special = env.is_function(args[0]) or \ - (args[0] in self.COMMANDS and self.COMMANDS[args[0]].is_special) - - if debug_command: - self.log('_execute_simple_command' + str(args) + '\n') - - if not args: - # Redirections happen is a subshell - redirs = redirs.clone() - elif not is_special: - env = self._env.clone() - - # Redirections - self.redirect(redirs, token.redirs) - - # Variables assignments - res = 0 - for type,(k,v) in token.assigns: - status, expanded = self.expand_variable((k,v)) - if status is not None: - res = status - if args: - env.export(k, expanded) - else: - env[k] = expanded - - if args and args[0] in ('.', 'source'): - res = self.dotcommand(env, args[1:]) - elif args: - if args[0] in self.COMMANDS: - command = self.COMMANDS[args[0]] - elif env.is_function(args[0]): - command = Utility(self._execute_function, is_special=True) - else: - if not '/' in args[0].replace('\\', '/'): - cmd = env.find_in_path(args[0]) - if not cmd: - # TODO: test error code on unknown command => 127 - raise CommandNotFound('Unknown command: "%s"' % args[0]) - else: - # Handle commands like '/cygdrive/c/foo.bat' - cmd = cygwin_to_windows_path(args[0]) - if not os.path.exists(cmd): - raise CommandNotFound('%s: No such file or directory' % args[0]) - shebang = resolve_shebang(cmd) - if shebang: - cmd = shebang - else: - cmd = [cmd] - args[0:1] = cmd - command = Utility(builtin.run_command) - - # Command execution - if 'debug-cmd' in self._debugflags: - self.log('redirections ' + str(redirs) + '\n') - - res = command.func(args[0], args[1:], self, env, - redirs.stdin(), redirs.stdout(), - redirs.stderr(), self._debugflags) - - if self._env.has_opt('-x'): - # Trace command execution in shell environment - # BUG: would be hard to reproduce a real shell behaviour since - # the AST is not annotated with source lines/tokens. - self._redirs.stdout().write(' '.join(args)) - - except ReturnSignal: - raise - except ShellError as e: - if is_special or isinstance(e, (ExitSignal, - ShellSyntaxError, ExpansionError)): - raise e - self._redirs.stderr().write(str(e)+'\n') - return 1 - - return res - - def expand_token(self, word): - """Expand a word as specified in [2.6 Word Expansions]. Return the list - of expanded words. - """ - status, wtrees = self._expand_word(word) - return map(pyshlex.wordtree_as_string, wtrees) - - def expand_variable(self, word): - """Return a status code (or None if no command expansion occurred) - and a single word. - """ - status, wtrees = self._expand_word(word, pathname=False, split=False) - words = map(pyshlex.wordtree_as_string, wtrees) - assert len(words)==1 - return status, words[0] - - def expand_here_document(self, word): - """Return the expanded document as a single word. The here document is - assumed to be unquoted. - """ - status, wtrees = self._expand_word(word, pathname=False, - split=False, here_document=True) - words = map(pyshlex.wordtree_as_string, wtrees) - assert len(words)==1 - return words[0] - - def expand_redirection(self, word): - """Return a single word.""" - return self.expand_variable(word)[1] - - def get_env(self): - return self._env - - def _expand_word(self, token, pathname=True, split=True, here_document=False): - wtree = pyshlex.make_wordtree(token[1], here_document=here_document) - - # TODO: implement tilde expansion - def expand(wtree): - """Return a pseudo wordtree: the tree or its subelements can be empty - lists when no value result from the expansion. - """ - status = None - for part in wtree: - if not isinstance(part, list): - continue - if part[0]in ("'", '\\'): - continue - elif part[0] in ('`', '$('): - status, result = self._expand_command(part) - part[:] = result - elif part[0] in ('$', '${'): - part[:] = self._expand_parameter(part, wtree[0]=='"', split) - elif part[0] in ('', '"'): - status, result = expand(part) - part[:] = result - else: - raise NotImplementedError('%s expansion is not implemented' - % part[0]) - # [] is returned when an expansion result in no-field, - # like an empty $@ - wtree = [p for p in wtree if p != []] - if len(wtree) < 3: - return status, [] - return status, wtree - - status, wtree = expand(wtree) - if len(wtree) == 0: - return status, wtree - wtree = pyshlex.normalize_wordtree(wtree) - - if split: - wtrees = self._split_fields(wtree) - else: - wtrees = [wtree] - - if pathname: - wtrees = mappend(self._expand_pathname, wtrees) - - wtrees = map(self._remove_quotes, wtrees) - return status, wtrees - - def _expand_command(self, wtree): - # BUG: there is something to do with backslashes and quoted - # characters here - command = pyshlex.wordtree_as_string(wtree[1:-1]) - status, output = self.subshell_output(command) - return status, ['', output, ''] - - def _expand_parameter(self, wtree, quoted=False, split=False): - """Return a valid wtree or an empty list when no parameter results.""" - # Get the parameter name - # TODO: implement weird expansion rules with ':' - name = pyshlex.wordtree_as_string(wtree[1:-1]) - if not is_name(name) and not is_special_param(name): - raise ExpansionError('Bad substitution "%s"' % name) - # TODO: implement special parameters - if name in ('@', '*'): - args = self._env.get_positional_args() - if len(args) == 0: - return [] - if len(args)<2: - return ['', ''.join(args), ''] - - sep = self._env.get('IFS', '')[:1] - if split and quoted and name=='@': - # Introduce a new token to tell the caller that these parameters - # cause a split as specified in 2.5.2 - return ['@'] + args + [''] - else: - return ['', sep.join(args), ''] - - return ['', self._env.get(name, ''), ''] - - def _split_fields(self, wtree): - def is_empty(split): - return split==['', '', ''] - - def split_positional(quoted): - # Return a list of wtree split according positional parameters rules. - # All remaining '@' groups are removed. - assert quoted[0]=='"' - - splits = [[]] - for part in quoted: - if not isinstance(part, list) or part[0]!='@': - splits[-1].append(part) - else: - # Empty or single argument list were dealt with already - assert len(part)>3 - # First argument must join with the beginning part of the original word - splits[-1].append(part[1]) - # Create double-quotes expressions for every argument after the first - for arg in part[2:-1]: - splits[-1].append('"') - splits.append(['"', arg]) - return splits - - # At this point, all expansions but pathnames have occured. Only quoted - # and positional sequences remain. Thus, all candidates for field splitting - # are in the tree root, or are positional splits ('@') and lie in root - # children. - if not wtree or wtree[0] not in ('', '"'): - # The whole token is quoted or empty, nothing to split - return [wtree] - - if wtree[0]=='"': - wtree = ['', wtree, ''] - - result = [['', '']] - for part in wtree[1:-1]: - if isinstance(part, list): - if part[0]=='"': - splits = split_positional(part) - if len(splits)<=1: - result[-1] += [part, ''] - else: - # Terminate the current split - result[-1] += [splits[0], ''] - result += splits[1:-1] - # Create a new split - result += [['', splits[-1], '']] - else: - result[-1] += [part, ''] - else: - splits = self._env.split_fields(part) - if len(splits)<=1: - # No split - result[-1][-1] += part - else: - # Terminate the current resulting part and create a new one - result[-1][-1] += splits[0] - result[-1].append('') - result += [['', r, ''] for r in splits[1:-1]] - result += [['', splits[-1]]] - result[-1].append('') - - # Leading and trailing empty groups come from leading/trailing blanks - if result and is_empty(result[-1]): - result[-1:] = [] - if result and is_empty(result[0]): - result[:1] = [] - return result - - def _expand_pathname(self, wtree): - """See [2.6.6 Pathname Expansion].""" - if self._env.has_opt('-f'): - return [wtree] - - # All expansions have been performed, only quoted sequences should remain - # in the tree. Generate the pattern by folding the tree, escaping special - # characters when appear quoted - special_chars = '*?[]' - - def make_pattern(wtree): - subpattern = [] - for part in wtree[1:-1]: - if isinstance(part, list): - part = make_pattern(part) - elif wtree[0]!='': - for c in part: - # Meta-characters cannot be quoted - if c in special_chars: - raise GlobError() - subpattern.append(part) - return ''.join(subpattern) - - def pwd_glob(pattern): - cwd = os.getcwd() - os.chdir(self._env['PWD']) - try: - return glob.glob(pattern) - finally: - os.chdir(cwd) - - #TODO: check working directory issues here wrt relative patterns - try: - pattern = make_pattern(wtree) - paths = pwd_glob(pattern) - except GlobError: - # BUG: Meta-characters were found in quoted sequences. The should - # have been used literally but this is unsupported in current glob module. - # Instead we consider the whole tree must be used literally and - # therefore there is no point in globbing. This is wrong when meta - # characters are mixed with quoted meta in the same pattern like: - # < foo*"py*" > - paths = [] - - if not paths: - return [wtree] - return [['', path, ''] for path in paths] - - def _remove_quotes(self, wtree): - """See [2.6.7 Quote Removal].""" - - def unquote(wtree): - unquoted = [] - for part in wtree[1:-1]: - if isinstance(part, list): - part = unquote(part) - unquoted.append(part) - return ''.join(unquoted) - - return ['', unquote(wtree), ''] - - def subshell(self, script=None, ast=None, redirs=None): - """Execute the script or AST in a subshell, with inherited redirections - if redirs is not None. - """ - if redirs: - sub_redirs = redirs - else: - sub_redirs = redirs.clone() - - subshell = None - try: - subshell = Interpreter(None, self._debugflags, self._env.clone(True), - sub_redirs, opts=self._options) - return subshell.execute_script(script, ast) - finally: - if not redirs: sub_redirs.close() - if subshell: subshell.close() - - def subshell_output(self, script): - """Execute the script in a subshell and return the captured output.""" - # Create temporary file to capture subshell output - tmpfd, tmppath = tempfile.mkstemp() - try: - tmpfile = os.fdopen(tmpfd, 'wb') - stdout = FileWrapper('w', tmpfile) - - redirs = Redirections(self._redirs.stdin().dup(), - stdout, - self._redirs.stderr().dup()) - try: - status = self.subshell(script=script, redirs=redirs) - finally: - redirs.close() - redirs = None - - # Extract subshell standard output - tmpfile = open(tmppath, 'rb') - try: - output = tmpfile.read() - return status, output.rstrip('\n') - finally: - tmpfile.close() - finally: - os.remove(tmppath) - - def _asynclist(self, cmd): - args = (self._env.get_variables(), cmd) - arg = encodeargs(args) - assert len(args) < 30*1024 - cmd = ['pysh.bat', '--ast', '-c', arg] - p = subprocess.Popen(cmd, cwd=self._env['PWD']) - self._children[p.pid] = p - self._env['!'] = p.pid - return 0 - - def wait(self, pids=None): - if not pids: - pids = self._children.keys() - - status = 127 - for pid in pids: - if pid not in self._children: - continue - p = self._children.pop(pid) - status = p.wait() - - return status - diff --git a/external/poky/bitbake/lib/bb/pysh/lsprof.py b/external/poky/bitbake/lib/bb/pysh/lsprof.py deleted file mode 100644 index b1831c22..00000000 --- a/external/poky/bitbake/lib/bb/pysh/lsprof.py +++ /dev/null @@ -1,116 +0,0 @@ -#! /usr/bin/env python - -import sys -from _lsprof import Profiler, profiler_entry - -__all__ = ['profile', 'Stats'] - -def profile(f, *args, **kwds): - """XXX docstring""" - p = Profiler() - p.enable(subcalls=True, builtins=True) - try: - f(*args, **kwds) - finally: - p.disable() - return Stats(p.getstats()) - - -class Stats(object): - """XXX docstring""" - - def __init__(self, data): - self.data = data - - def sort(self, crit="inlinetime"): - """XXX docstring""" - if crit not in profiler_entry.__dict__: - raise ValueError("Can't sort by %s" % crit) - self.data.sort(lambda b, a: cmp(getattr(a, crit), - getattr(b, crit))) - for e in self.data: - if e.calls: - e.calls.sort(lambda b, a: cmp(getattr(a, crit), - getattr(b, crit))) - - def pprint(self, top=None, file=None, limit=None, climit=None): - """XXX docstring""" - if file is None: - file = sys.stdout - d = self.data - if top is not None: - d = d[:top] - cols = "% 12s %12s %11.4f %11.4f %s\n" - hcols = "% 12s %12s %12s %12s %s\n" - cols2 = "+%12s %12s %11.4f %11.4f + %s\n" - file.write(hcols % ("CallCount", "Recursive", "Total(ms)", - "Inline(ms)", "module:lineno(function)")) - count = 0 - for e in d: - file.write(cols % (e.callcount, e.reccallcount, e.totaltime, - e.inlinetime, label(e.code))) - count += 1 - if limit is not None and count == limit: - return - ccount = 0 - if e.calls: - for se in e.calls: - file.write(cols % ("+%s" % se.callcount, se.reccallcount, - se.totaltime, se.inlinetime, - "+%s" % label(se.code))) - count += 1 - ccount += 1 - if limit is not None and count == limit: - return - if climit is not None and ccount == climit: - break - - def freeze(self): - """Replace all references to code objects with string - descriptions; this makes it possible to pickle the instance.""" - - # this code is probably rather ickier than it needs to be! - for i in range(len(self.data)): - e = self.data[i] - if not isinstance(e.code, str): - self.data[i] = type(e)((label(e.code),) + e[1:]) - if e.calls: - for j in range(len(e.calls)): - se = e.calls[j] - if not isinstance(se.code, str): - e.calls[j] = type(se)((label(se.code),) + se[1:]) - -_fn2mod = {} - -def label(code): - if isinstance(code, str): - return code - try: - mname = _fn2mod[code.co_filename] - except KeyError: - for k, v in sys.modules.items(): - if v is None: - continue - if not hasattr(v, '__file__'): - continue - if not isinstance(v.__file__, str): - continue - if v.__file__.startswith(code.co_filename): - mname = _fn2mod[code.co_filename] = k - break - else: - mname = _fn2mod[code.co_filename] = '<%s>'%code.co_filename - - return '%s:%d(%s)' % (mname, code.co_firstlineno, code.co_name) - - -if __name__ == '__main__': - import os - sys.argv = sys.argv[1:] - if not sys.argv: - print >> sys.stderr, "usage: lsprof.py + + + + + + + + + + + +
+ + + + diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/debian/pool/main/d/db5.3/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/debian/pool/main/d/db5.3/index.html new file mode 100644 index 00000000..a5a6f483 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/debian/pool/main/d/db5.3/index.html @@ -0,0 +1,509 @@ + + + + Index of /debian/pool/main/d/db5.3 + + +

Index of /debian/pool/main/d/db5.3

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSize

[PARENTDIR]Parent Directory  -
[   ]db5.3-doc_5.3.28+dfsg1-0.5_all.deb2019-02-26 10:57 15M
[   ]db5.3-doc_5.3.28+dfsg1-0.6_all.deb2019-03-12 05:28 15M
[   ]db5.3-doc_5.3.28-9+deb8u1_all.deb2017-11-18 20:15 18M
[   ]db5.3-doc_5.3.28-12+deb9u1_all.deb2017-09-28 09:42 18M
[   ]db5.3-sql-util_5.3.28+dfsg1-0.5_amd64.deb2019-02-26 10:11 21K
[   ]db5.3-sql-util_5.3.28+dfsg1-0.5_arm64.deb2019-02-26 09:56 19K
[   ]db5.3-sql-util_5.3.28+dfsg1-0.5_armel.deb2019-02-26 10:57 20K
[   ]db5.3-sql-util_5.3.28+dfsg1-0.5_armhf.deb2019-02-26 10:57 19K
[   ]db5.3-sql-util_5.3.28+dfsg1-0.5_i386.deb2019-02-26 09:46 22K
[   ]db5.3-sql-util_5.3.28+dfsg1-0.5_mips.deb2019-02-26 10:57 19K
[   ]db5.3-sql-util_5.3.28+dfsg1-0.5_mips64el.deb2019-02-26 12:42 19K
[   ]db5.3-sql-util_5.3.28+dfsg1-0.5_mipsel.deb2019-02-26 12:42 19K
[   ]db5.3-sql-util_5.3.28+dfsg1-0.5_ppc64el.deb2019-02-26 09:56 23K
[   ]db5.3-sql-util_5.3.28+dfsg1-0.5_s390x.deb2019-02-26 09:56 20K
[   ]db5.3-sql-util_5.3.28+dfsg1-0.6_amd64.deb2019-03-12 05:28 21K
[   ]db5.3-sql-util_5.3.28+dfsg1-0.6_arm64.deb2019-03-12 05:28 19K
[   ]db5.3-sql-util_5.3.28+dfsg1-0.6_armel.deb2019-03-12 06:29 20K
[   ]db5.3-sql-util_5.3.28+dfsg1-0.6_armhf.deb2019-03-12 06:14 19K
[   ]db5.3-sql-util_5.3.28+dfsg1-0.6_i386.deb2019-03-12 05:43 22K
[   ]db5.3-sql-util_5.3.28+dfsg1-0.6_mips64el.deb2019-03-12 06:29 19K
[   ]db5.3-sql-util_5.3.28+dfsg1-0.6_mipsel.deb2019-03-12 07:30 19K
[   ]db5.3-sql-util_5.3.28+dfsg1-0.6_ppc64el.deb2019-03-12 05:28 23K
[   ]db5.3-sql-util_5.3.28+dfsg1-0.6_s390x.deb2019-03-12 05:13 20K
[   ]db5.3-sql-util_5.3.28-9+deb8u1_amd64.deb2017-11-20 03:40 21K
[   ]db5.3-sql-util_5.3.28-9+deb8u1_armel.deb2017-11-20 04:26 20K
[   ]db5.3-sql-util_5.3.28-9+deb8u1_armhf.deb2017-12-02 16:26 19K
[   ]db5.3-sql-util_5.3.28-9+deb8u1_i386.deb2017-11-20 03:25 22K
[   ]db5.3-sql-util_5.3.28-12+deb9u1_amd64.deb2017-09-28 09:42 20K
[   ]db5.3-sql-util_5.3.28-12+deb9u1_arm64.deb2017-09-28 09:42 18K
[   ]db5.3-sql-util_5.3.28-12+deb9u1_armel.deb2017-09-28 10:28 20K
[   ]db5.3-sql-util_5.3.28-12+deb9u1_armhf.deb2017-09-28 10:28 19K
[   ]db5.3-sql-util_5.3.28-12+deb9u1_i386.deb2017-09-28 09:27 22K
[   ]db5.3-sql-util_5.3.28-12+deb9u1_mips.deb2017-09-29 16:10 19K
[   ]db5.3-sql-util_5.3.28-12+deb9u1_mips64el.deb2017-09-28 11:29 19K
[   ]db5.3-sql-util_5.3.28-12+deb9u1_mipsel.deb2017-09-28 11:14 19K
[   ]db5.3-sql-util_5.3.28-12+deb9u1_ppc64el.deb2017-09-28 09:27 19K
[   ]db5.3-sql-util_5.3.28-12+deb9u1_s390x.deb2017-09-28 09:42 20K
[   ]db5.3-util_5.3.28+dfsg1-0.5_amd64.deb2019-02-26 10:11 63K
[   ]db5.3-util_5.3.28+dfsg1-0.5_arm64.deb2019-02-26 09:56 63K
[   ]db5.3-util_5.3.28+dfsg1-0.5_armel.deb2019-02-26 10:57 58K
[   ]db5.3-util_5.3.28+dfsg1-0.5_armhf.deb2019-02-26 10:57 59K
[   ]db5.3-util_5.3.28+dfsg1-0.5_i386.deb2019-02-26 09:46 65K
[   ]db5.3-util_5.3.28+dfsg1-0.5_mips.deb2019-02-26 10:57 62K
[   ]db5.3-util_5.3.28+dfsg1-0.5_mips64el.deb2019-02-26 12:42 64K
[   ]db5.3-util_5.3.28+dfsg1-0.5_mipsel.deb2019-02-26 12:42 63K
[   ]db5.3-util_5.3.28+dfsg1-0.5_ppc64el.deb2019-02-26 09:56 69K
[   ]db5.3-util_5.3.28+dfsg1-0.5_s390x.deb2019-02-26 09:56 64K
[   ]db5.3-util_5.3.28+dfsg1-0.6_amd64.deb2019-03-12 05:28 63K
[   ]db5.3-util_5.3.28+dfsg1-0.6_arm64.deb2019-03-12 05:28 63K
[   ]db5.3-util_5.3.28+dfsg1-0.6_armel.deb2019-03-12 06:29 58K
[   ]db5.3-util_5.3.28+dfsg1-0.6_armhf.deb2019-03-12 06:14 59K
[   ]db5.3-util_5.3.28+dfsg1-0.6_i386.deb2019-03-12 05:43 65K
[   ]db5.3-util_5.3.28+dfsg1-0.6_mips64el.deb2019-03-12 06:29 64K
[   ]db5.3-util_5.3.28+dfsg1-0.6_mipsel.deb2019-03-12 07:30 63K
[   ]db5.3-util_5.3.28+dfsg1-0.6_ppc64el.deb2019-03-12 05:28 69K
[   ]db5.3-util_5.3.28+dfsg1-0.6_s390x.deb2019-03-12 05:13 64K
[   ]db5.3-util_5.3.28-9+deb8u1_amd64.deb2017-11-20 03:40 63K
[   ]db5.3-util_5.3.28-9+deb8u1_armel.deb2017-11-20 04:26 60K
[   ]db5.3-util_5.3.28-9+deb8u1_armhf.deb2017-12-02 16:26 61K
[   ]db5.3-util_5.3.28-9+deb8u1_i386.deb2017-11-20 03:25 65K
[   ]db5.3-util_5.3.28-12+deb9u1_amd64.deb2017-09-28 09:42 63K
[   ]db5.3-util_5.3.28-12+deb9u1_arm64.deb2017-09-28 09:42 60K
[   ]db5.3-util_5.3.28-12+deb9u1_armel.deb2017-09-28 10:28 60K
[   ]db5.3-util_5.3.28-12+deb9u1_armhf.deb2017-09-28 10:28 61K
[   ]db5.3-util_5.3.28-12+deb9u1_i386.deb2017-09-28 09:27 66K
[   ]db5.3-util_5.3.28-12+deb9u1_mips.deb2017-09-29 16:10 62K
[   ]db5.3-util_5.3.28-12+deb9u1_mips64el.deb2017-09-28 11:29 64K
[   ]db5.3-util_5.3.28-12+deb9u1_mipsel.deb2017-09-28 11:14 63K
[   ]db5.3-util_5.3.28-12+deb9u1_ppc64el.deb2017-09-28 09:27 60K
[   ]db5.3-util_5.3.28-12+deb9u1_s390x.deb2017-09-28 09:42 64K
[   ]db5.3_5.3.28+dfsg1-0.5.debian.tar.xz2019-02-26 08:51 28K
[   ]db5.3_5.3.28+dfsg1-0.5.dsc2019-02-26 08:51 2.7K
[   ]db5.3_5.3.28+dfsg1-0.6.debian.tar.xz2019-03-12 04:27 29K
[   ]db5.3_5.3.28+dfsg1-0.6.dsc2019-03-12 04:27 3.1K
[   ]db5.3_5.3.28+dfsg1.orig.tar.xz2018-08-09 01:52 19M
[   ]db5.3_5.3.28-9+deb8u1.debian.tar.xz2017-11-18 20:15 28K
[   ]db5.3_5.3.28-9+deb8u1.dsc2017-11-18 20:15 3.2K
[   ]db5.3_5.3.28-12+deb9u1.debian.tar.xz2017-09-24 16:26 28K
[   ]db5.3_5.3.28-12+deb9u1.dsc2017-09-24 16:26 3.2K
[   ]db5.3_5.3.28.orig.tar.xz2013-10-27 14:01 23M
[   ]libdb5.3++-dev_5.3.28+dfsg1-0.5_amd64.deb2019-02-26 10:11 760K
[   ]libdb5.3++-dev_5.3.28+dfsg1-0.5_arm64.deb2019-02-26 09:56 722K
[   ]libdb5.3++-dev_5.3.28+dfsg1-0.5_armel.deb2019-02-26 10:57 668K
[   ]libdb5.3++-dev_5.3.28+dfsg1-0.5_armhf.deb2019-02-26 10:57 692K
[   ]libdb5.3++-dev_5.3.28+dfsg1-0.5_i386.deb2019-02-26 09:46 842K
[   ]libdb5.3++-dev_5.3.28+dfsg1-0.5_mips.deb2019-02-26 10:57 773K
[   ]libdb5.3++-dev_5.3.28+dfsg1-0.5_mips64el.deb2019-02-26 12:42 801K
[   ]libdb5.3++-dev_5.3.28+dfsg1-0.5_mipsel.deb2019-02-26 12:42 789K
[   ]libdb5.3++-dev_5.3.28+dfsg1-0.5_ppc64el.deb2019-02-26 09:56 816K
[   ]libdb5.3++-dev_5.3.28+dfsg1-0.5_s390x.deb2019-02-26 09:56 693K
[   ]libdb5.3++-dev_5.3.28+dfsg1-0.6_amd64.deb2019-03-12 05:28 759K
[   ]libdb5.3++-dev_5.3.28+dfsg1-0.6_arm64.deb2019-03-12 05:28 722K
[   ]libdb5.3++-dev_5.3.28+dfsg1-0.6_armel.deb2019-03-12 06:29 668K
[   ]libdb5.3++-dev_5.3.28+dfsg1-0.6_armhf.deb2019-03-12 06:14 692K
[   ]libdb5.3++-dev_5.3.28+dfsg1-0.6_i386.deb2019-03-12 05:43 842K
[   ]libdb5.3++-dev_5.3.28+dfsg1-0.6_mips64el.deb2019-03-12 06:29 801K
[   ]libdb5.3++-dev_5.3.28+dfsg1-0.6_mipsel.deb2019-03-12 07:30 789K
[   ]libdb5.3++-dev_5.3.28+dfsg1-0.6_ppc64el.deb2019-03-12 05:28 816K
[   ]libdb5.3++-dev_5.3.28+dfsg1-0.6_s390x.deb2019-03-12 05:13 693K
[   ]libdb5.3++-dev_5.3.28-9+deb8u1_amd64.deb2017-11-20 03:40 740K
[   ]libdb5.3++-dev_5.3.28-9+deb8u1_armel.deb2017-11-20 04:26 643K
[   ]libdb5.3++-dev_5.3.28-9+deb8u1_armhf.deb2017-12-02 16:26 672K
[   ]libdb5.3++-dev_5.3.28-9+deb8u1_i386.deb2017-11-20 03:25 780K
[   ]libdb5.3++-dev_5.3.28-12+deb9u1_amd64.deb2017-09-28 09:42 757K
[   ]libdb5.3++-dev_5.3.28-12+deb9u1_arm64.deb2017-09-28 09:42 663K
[   ]libdb5.3++-dev_5.3.28-12+deb9u1_armel.deb2017-09-28 10:28 676K
[   ]libdb5.3++-dev_5.3.28-12+deb9u1_armhf.deb2017-09-28 10:28 690K
[   ]libdb5.3++-dev_5.3.28-12+deb9u1_i386.deb2017-09-28 09:27 836K
[   ]libdb5.3++-dev_5.3.28-12+deb9u1_mips.deb2017-09-29 16:10 768K
[   ]libdb5.3++-dev_5.3.28-12+deb9u1_mips64el.deb2017-09-28 11:29 795K
[   ]libdb5.3++-dev_5.3.28-12+deb9u1_mipsel.deb2017-09-28 11:14 786K
[   ]libdb5.3++-dev_5.3.28-12+deb9u1_ppc64el.deb2017-09-28 09:27 701K
[   ]libdb5.3++-dev_5.3.28-12+deb9u1_s390x.deb2017-09-28 09:42 714K
[   ]libdb5.3++_5.3.28+dfsg1-0.5_amd64.deb2019-02-26 10:11 690K
[   ]libdb5.3++_5.3.28+dfsg1-0.5_arm64.deb2019-02-26 09:56 628K
[   ]libdb5.3++_5.3.28+dfsg1-0.5_armel.deb2019-02-26 10:57 576K
[   ]libdb5.3++_5.3.28+dfsg1-0.5_armhf.deb2019-02-26 10:57 600K
[   ]libdb5.3++_5.3.28+dfsg1-0.5_i386.deb2019-02-26 09:46 755K
[   ]libdb5.3++_5.3.28+dfsg1-0.5_mips.deb2019-02-26 10:57 595K
[   ]libdb5.3++_5.3.28+dfsg1-0.5_mips64el.deb2019-02-26 12:42 604K
[   ]libdb5.3++_5.3.28+dfsg1-0.5_mipsel.deb2019-02-26 12:42 604K
[   ]libdb5.3++_5.3.28+dfsg1-0.5_ppc64el.deb2019-02-26 09:56 723K
[   ]libdb5.3++_5.3.28+dfsg1-0.5_s390x.deb2019-02-26 09:56 619K
[   ]libdb5.3++_5.3.28+dfsg1-0.6_amd64.deb2019-03-12 05:28 690K
[   ]libdb5.3++_5.3.28+dfsg1-0.6_arm64.deb2019-03-12 05:28 629K
[   ]libdb5.3++_5.3.28+dfsg1-0.6_armel.deb2019-03-12 06:29 574K
[   ]libdb5.3++_5.3.28+dfsg1-0.6_armhf.deb2019-03-12 06:14 600K
[   ]libdb5.3++_5.3.28+dfsg1-0.6_i386.deb2019-03-12 05:43 755K
[   ]libdb5.3++_5.3.28+dfsg1-0.6_mips64el.deb2019-03-12 06:29 604K
[   ]libdb5.3++_5.3.28+dfsg1-0.6_mipsel.deb2019-03-12 07:30 604K
[   ]libdb5.3++_5.3.28+dfsg1-0.6_ppc64el.deb2019-03-12 05:28 724K
[   ]libdb5.3++_5.3.28+dfsg1-0.6_s390x.deb2019-03-12 05:13 620K
[   ]libdb5.3++_5.3.28-9+deb8u1_amd64.deb2017-11-20 03:40 691K
[   ]libdb5.3++_5.3.28-9+deb8u1_armel.deb2017-11-20 04:26 580K
[   ]libdb5.3++_5.3.28-9+deb8u1_armhf.deb2017-12-02 16:26 606K
[   ]libdb5.3++_5.3.28-9+deb8u1_i386.deb2017-11-20 03:25 749K
[   ]libdb5.3++_5.3.28-12+deb9u1_amd64.deb2017-09-28 09:42 687K
[   ]libdb5.3++_5.3.28-12+deb9u1_arm64.deb2017-09-28 09:42 574K
[   ]libdb5.3++_5.3.28-12+deb9u1_armel.deb2017-09-28 10:28 575K
[   ]libdb5.3++_5.3.28-12+deb9u1_armhf.deb2017-09-28 10:28 600K
[   ]libdb5.3++_5.3.28-12+deb9u1_i386.deb2017-09-28 09:27 751K
[   ]libdb5.3++_5.3.28-12+deb9u1_mips.deb2017-09-29 16:10 593K
[   ]libdb5.3++_5.3.28-12+deb9u1_mips64el.deb2017-09-28 11:29 601K
[   ]libdb5.3++_5.3.28-12+deb9u1_mipsel.deb2017-09-28 11:14 602K
[   ]libdb5.3++_5.3.28-12+deb9u1_ppc64el.deb2017-09-28 09:27 618K
[   ]libdb5.3++_5.3.28-12+deb9u1_s390x.deb2017-09-28 09:42 637K
[   ]libdb5.3-dbg_5.3.28+dfsg1-0.5_amd64.deb2019-02-26 10:11 43M
[   ]libdb5.3-dbg_5.3.28+dfsg1-0.5_arm64.deb2019-02-26 09:56 42M
[   ]libdb5.3-dbg_5.3.28+dfsg1-0.5_armel.deb2019-02-26 10:57 42M
[   ]libdb5.3-dbg_5.3.28+dfsg1-0.5_armhf.deb2019-02-26 10:57 42M
[   ]libdb5.3-dbg_5.3.28+dfsg1-0.5_i386.deb2019-02-26 09:46 41M
[   ]libdb5.3-dbg_5.3.28+dfsg1-0.5_mips.deb2019-02-26 10:57 43M
[   ]libdb5.3-dbg_5.3.28+dfsg1-0.5_mips64el.deb2019-02-26 12:42 43M
[   ]libdb5.3-dbg_5.3.28+dfsg1-0.5_mipsel.deb2019-02-26 12:42 42M
[   ]libdb5.3-dbg_5.3.28+dfsg1-0.5_ppc64el.deb2019-02-26 09:56 42M
[   ]libdb5.3-dbg_5.3.28+dfsg1-0.5_s390x.deb2019-02-26 09:56 44M
[   ]libdb5.3-dbg_5.3.28+dfsg1-0.6_amd64.deb2019-03-12 05:28 43M
[   ]libdb5.3-dbg_5.3.28+dfsg1-0.6_arm64.deb2019-03-12 05:28 42M
[   ]libdb5.3-dbg_5.3.28+dfsg1-0.6_armel.deb2019-03-12 06:29 42M
[   ]libdb5.3-dbg_5.3.28+dfsg1-0.6_armhf.deb2019-03-12 06:14 42M
[   ]libdb5.3-dbg_5.3.28+dfsg1-0.6_i386.deb2019-03-12 05:43 41M
[   ]libdb5.3-dbg_5.3.28+dfsg1-0.6_mips64el.deb2019-03-12 06:29 43M
[   ]libdb5.3-dbg_5.3.28+dfsg1-0.6_mipsel.deb2019-03-12 07:30 42M
[   ]libdb5.3-dbg_5.3.28+dfsg1-0.6_ppc64el.deb2019-03-12 05:28 42M
[   ]libdb5.3-dbg_5.3.28+dfsg1-0.6_s390x.deb2019-03-12 05:13 44M
[   ]libdb5.3-dbg_5.3.28-9+deb8u1_amd64.deb2017-11-20 03:40 34M
[   ]libdb5.3-dbg_5.3.28-9+deb8u1_armel.deb2017-11-20 04:26 35M
[   ]libdb5.3-dbg_5.3.28-9+deb8u1_armhf.deb2017-12-02 16:26 35M
[   ]libdb5.3-dbg_5.3.28-9+deb8u1_i386.deb2017-11-20 03:25 32M
[   ]libdb5.3-dbg_5.3.28-12+deb9u1_amd64.deb2017-09-28 09:42 40M
[   ]libdb5.3-dbg_5.3.28-12+deb9u1_arm64.deb2017-09-28 09:42 40M
[   ]libdb5.3-dbg_5.3.28-12+deb9u1_armel.deb2017-09-28 10:28 39M
[   ]libdb5.3-dbg_5.3.28-12+deb9u1_armhf.deb2017-09-28 10:28 39M
[   ]libdb5.3-dbg_5.3.28-12+deb9u1_i386.deb2017-09-28 09:27 38M
[   ]libdb5.3-dbg_5.3.28-12+deb9u1_mips.deb2017-09-29 16:10 41M
[   ]libdb5.3-dbg_5.3.28-12+deb9u1_mips64el.deb2017-09-28 11:29 40M
[   ]libdb5.3-dbg_5.3.28-12+deb9u1_mipsel.deb2017-09-28 11:14 39M
[   ]libdb5.3-dbg_5.3.28-12+deb9u1_ppc64el.deb2017-09-28 09:27 40M
[   ]libdb5.3-dbg_5.3.28-12+deb9u1_s390x.deb2017-09-28 09:42 42M
[   ]libdb5.3-dev_5.3.28+dfsg1-0.5_amd64.deb2019-02-26 10:11 743K
[   ]libdb5.3-dev_5.3.28+dfsg1-0.5_arm64.deb2019-02-26 09:56 707K
[   ]libdb5.3-dev_5.3.28+dfsg1-0.5_armel.deb2019-02-26 10:57 654K
[   ]libdb5.3-dev_5.3.28+dfsg1-0.5_armhf.deb2019-02-26 10:57 677K
[   ]libdb5.3-dev_5.3.28+dfsg1-0.5_i386.deb2019-02-26 09:46 822K
[   ]libdb5.3-dev_5.3.28+dfsg1-0.5_mips.deb2019-02-26 10:57 753K
[   ]libdb5.3-dev_5.3.28+dfsg1-0.5_mips64el.deb2019-02-26 12:42 780K
[   ]libdb5.3-dev_5.3.28+dfsg1-0.5_mipsel.deb2019-02-26 12:42 769K
[   ]libdb5.3-dev_5.3.28+dfsg1-0.5_ppc64el.deb2019-02-26 09:56 797K
[   ]libdb5.3-dev_5.3.28+dfsg1-0.5_s390x.deb2019-02-26 09:56 679K
[   ]libdb5.3-dev_5.3.28+dfsg1-0.6_amd64.deb2019-03-12 05:28 743K
[   ]libdb5.3-dev_5.3.28+dfsg1-0.6_arm64.deb2019-03-12 05:28 707K
[   ]libdb5.3-dev_5.3.28+dfsg1-0.6_armel.deb2019-03-12 06:29 654K
[   ]libdb5.3-dev_5.3.28+dfsg1-0.6_armhf.deb2019-03-12 06:14 677K
[   ]libdb5.3-dev_5.3.28+dfsg1-0.6_i386.deb2019-03-12 05:43 822K
[   ]libdb5.3-dev_5.3.28+dfsg1-0.6_mips64el.deb2019-03-12 06:29 780K
[   ]libdb5.3-dev_5.3.28+dfsg1-0.6_mipsel.deb2019-03-12 07:30 769K
[   ]libdb5.3-dev_5.3.28+dfsg1-0.6_ppc64el.deb2019-03-12 05:28 797K
[   ]libdb5.3-dev_5.3.28+dfsg1-0.6_s390x.deb2019-03-12 05:13 679K
[   ]libdb5.3-dev_5.3.28-9+deb8u1_amd64.deb2017-11-20 03:40 725K
[   ]libdb5.3-dev_5.3.28-9+deb8u1_armel.deb2017-11-20 04:26 630K
[   ]libdb5.3-dev_5.3.28-9+deb8u1_armhf.deb2017-12-02 16:26 659K
[   ]libdb5.3-dev_5.3.28-9+deb8u1_i386.deb2017-11-20 03:25 766K
[   ]libdb5.3-dev_5.3.28-12+deb9u1_amd64.deb2017-09-28 09:42 742K
[   ]libdb5.3-dev_5.3.28-12+deb9u1_arm64.deb2017-09-28 09:42 648K
[   ]libdb5.3-dev_5.3.28-12+deb9u1_armel.deb2017-09-28 10:28 660K
[   ]libdb5.3-dev_5.3.28-12+deb9u1_armhf.deb2017-09-28 10:28 676K
[   ]libdb5.3-dev_5.3.28-12+deb9u1_i386.deb2017-09-28 09:27 817K
[   ]libdb5.3-dev_5.3.28-12+deb9u1_mips.deb2017-09-29 16:10 748K
[   ]libdb5.3-dev_5.3.28-12+deb9u1_mips64el.deb2017-09-28 11:29 774K
[   ]libdb5.3-dev_5.3.28-12+deb9u1_mipsel.deb2017-09-28 11:14 765K
[   ]libdb5.3-dev_5.3.28-12+deb9u1_ppc64el.deb2017-09-28 09:27 682K
[   ]libdb5.3-dev_5.3.28-12+deb9u1_s390x.deb2017-09-28 09:42 699K
[   ]libdb5.3-java-dev_5.3.28+dfsg1-0.5_amd64.deb2019-02-26 10:11 757K
[   ]libdb5.3-java-dev_5.3.28+dfsg1-0.5_arm64.deb2019-02-26 09:56 720K
[   ]libdb5.3-java-dev_5.3.28+dfsg1-0.5_armel.deb2019-02-26 10:57 662K
[   ]libdb5.3-java-dev_5.3.28+dfsg1-0.5_armhf.deb2019-02-26 10:57 688K
[   ]libdb5.3-java-dev_5.3.28+dfsg1-0.5_i386.deb2019-02-26 09:46 840K
[   ]libdb5.3-java-dev_5.3.28+dfsg1-0.5_mips.deb2019-02-26 10:57 768K
[   ]libdb5.3-java-dev_5.3.28+dfsg1-0.5_mips64el.deb2019-02-26 12:42 795K
[   ]libdb5.3-java-dev_5.3.28+dfsg1-0.5_mipsel.deb2019-02-26 12:42 784K
[   ]libdb5.3-java-dev_5.3.28+dfsg1-0.5_ppc64el.deb2019-02-26 09:56 814K
[   ]libdb5.3-java-dev_5.3.28+dfsg1-0.5_s390x.deb2019-02-26 09:56 688K
[   ]libdb5.3-java-dev_5.3.28+dfsg1-0.6_amd64.deb2019-03-12 05:28 756K
[   ]libdb5.3-java-dev_5.3.28+dfsg1-0.6_arm64.deb2019-03-12 05:28 721K
[   ]libdb5.3-java-dev_5.3.28+dfsg1-0.6_armel.deb2019-03-12 06:29 663K
[   ]libdb5.3-java-dev_5.3.28+dfsg1-0.6_armhf.deb2019-03-12 06:14 688K
[   ]libdb5.3-java-dev_5.3.28+dfsg1-0.6_i386.deb2019-03-12 05:43 840K
[   ]libdb5.3-java-dev_5.3.28+dfsg1-0.6_mips64el.deb2019-03-12 06:29 796K
[   ]libdb5.3-java-dev_5.3.28+dfsg1-0.6_mipsel.deb2019-03-12 07:30 785K
[   ]libdb5.3-java-dev_5.3.28+dfsg1-0.6_ppc64el.deb2019-03-12 05:28 814K
[   ]libdb5.3-java-dev_5.3.28+dfsg1-0.6_s390x.deb2019-03-12 05:13 688K
[   ]libdb5.3-java-dev_5.3.28-9+deb8u1_amd64.deb2017-11-20 03:40 737K
[   ]libdb5.3-java-dev_5.3.28-9+deb8u1_armel.deb2017-11-20 04:26 637K
[   ]libdb5.3-java-dev_5.3.28-9+deb8u1_armhf.deb2017-12-02 16:26 666K
[   ]libdb5.3-java-dev_5.3.28-9+deb8u1_i386.deb2017-11-20 03:25 781K
[   ]libdb5.3-java-dev_5.3.28-12+deb9u1_amd64.deb2017-09-28 09:42 756K
[   ]libdb5.3-java-dev_5.3.28-12+deb9u1_arm64.deb2017-09-28 09:42 657K
[   ]libdb5.3-java-dev_5.3.28-12+deb9u1_armel.deb2017-09-28 10:28 670K
[   ]libdb5.3-java-dev_5.3.28-12+deb9u1_armhf.deb2017-09-28 10:28 686K
[   ]libdb5.3-java-dev_5.3.28-12+deb9u1_i386.deb2017-09-28 09:27 836K
[   ]libdb5.3-java-dev_5.3.28-12+deb9u1_mips.deb2017-09-29 16:10 763K
[   ]libdb5.3-java-dev_5.3.28-12+deb9u1_mips64el.deb2017-09-28 11:29 789K
[   ]libdb5.3-java-dev_5.3.28-12+deb9u1_mipsel.deb2017-09-28 11:14 780K
[   ]libdb5.3-java-dev_5.3.28-12+deb9u1_ppc64el.deb2017-09-28 09:27 691K
[   ]libdb5.3-java-dev_5.3.28-12+deb9u1_s390x.deb2017-09-28 09:42 711K
[   ]libdb5.3-java-gcj_5.3.28-9+deb8u1_amd64.deb2017-11-20 03:40 602K
[   ]libdb5.3-java-gcj_5.3.28-9+deb8u1_armel.deb2017-11-20 04:26 455K
[   ]libdb5.3-java-gcj_5.3.28-9+deb8u1_armhf.deb2017-12-02 16:26 450K
[   ]libdb5.3-java-gcj_5.3.28-9+deb8u1_i386.deb2017-11-20 03:25 503K
[   ]libdb5.3-java-gcj_5.3.28-12+deb9u1_amd64.deb2017-09-28 09:42 602K
[   ]libdb5.3-java-gcj_5.3.28-12+deb9u1_arm64.deb2017-09-28 09:42 595K
[   ]libdb5.3-java-gcj_5.3.28-12+deb9u1_armel.deb2017-09-28 10:28 453K
[   ]libdb5.3-java-gcj_5.3.28-12+deb9u1_armhf.deb2017-09-28 10:28 447K
[   ]libdb5.3-java-gcj_5.3.28-12+deb9u1_i386.deb2017-09-28 09:27 518K
[   ]libdb5.3-java-gcj_5.3.28-12+deb9u1_mips.deb2017-09-29 16:10 463K
[   ]libdb5.3-java-gcj_5.3.28-12+deb9u1_mips64el.deb2017-09-28 11:29 474K
[   ]libdb5.3-java-gcj_5.3.28-12+deb9u1_mipsel.deb2017-09-28 11:14 471K
[   ]libdb5.3-java-gcj_5.3.28-12+deb9u1_ppc64el.deb2017-09-28 09:27 611K
[   ]libdb5.3-java-gcj_5.3.28-12+deb9u1_s390x.deb2017-09-28 09:42 578K
[   ]libdb5.3-java-jni_5.3.28+dfsg1-0.5_amd64.deb2019-02-26 10:11 696K
[   ]libdb5.3-java-jni_5.3.28+dfsg1-0.5_arm64.deb2019-02-26 09:56 635K
[   ]libdb5.3-java-jni_5.3.28+dfsg1-0.5_armel.deb2019-02-26 10:57 580K
[   ]libdb5.3-java-jni_5.3.28+dfsg1-0.5_armhf.deb2019-02-26 10:57 606K
[   ]libdb5.3-java-jni_5.3.28+dfsg1-0.5_i386.deb2019-02-26 09:46 763K
[   ]libdb5.3-java-jni_5.3.28+dfsg1-0.5_mips.deb2019-02-26 10:57 596K
[   ]libdb5.3-java-jni_5.3.28+dfsg1-0.5_mips64el.deb2019-02-26 12:42 603K
[   ]libdb5.3-java-jni_5.3.28+dfsg1-0.5_mipsel.deb2019-02-26 12:42 605K
[   ]libdb5.3-java-jni_5.3.28+dfsg1-0.5_ppc64el.deb2019-02-26 09:56 732K
[   ]libdb5.3-java-jni_5.3.28+dfsg1-0.5_s390x.deb2019-02-26 09:56 624K
[   ]libdb5.3-java-jni_5.3.28+dfsg1-0.6_amd64.deb2019-03-12 05:28 696K
[   ]libdb5.3-java-jni_5.3.28+dfsg1-0.6_arm64.deb2019-03-12 05:28 636K
[   ]libdb5.3-java-jni_5.3.28+dfsg1-0.6_armel.deb2019-03-12 06:29 581K
[   ]libdb5.3-java-jni_5.3.28+dfsg1-0.6_armhf.deb2019-03-12 06:14 606K
[   ]libdb5.3-java-jni_5.3.28+dfsg1-0.6_i386.deb2019-03-12 05:43 762K
[   ]libdb5.3-java-jni_5.3.28+dfsg1-0.6_mips64el.deb2019-03-12 06:29 603K
[   ]libdb5.3-java-jni_5.3.28+dfsg1-0.6_mipsel.deb2019-03-12 07:30 605K
[   ]libdb5.3-java-jni_5.3.28+dfsg1-0.6_ppc64el.deb2019-03-12 05:28 733K
[   ]libdb5.3-java-jni_5.3.28+dfsg1-0.6_s390x.deb2019-03-12 05:13 625K
[   ]libdb5.3-java-jni_5.3.28-9+deb8u1_amd64.deb2017-11-20 03:40 696K
[   ]libdb5.3-java-jni_5.3.28-9+deb8u1_armel.deb2017-11-20 04:26 583K
[   ]libdb5.3-java-jni_5.3.28-9+deb8u1_armhf.deb2017-12-02 16:26 612K
[   ]libdb5.3-java-jni_5.3.28-9+deb8u1_i386.deb2017-11-20 03:25 754K
[   ]libdb5.3-java-jni_5.3.28-12+deb9u1_amd64.deb2017-09-28 09:42 695K
[   ]libdb5.3-java-jni_5.3.28-12+deb9u1_arm64.deb2017-09-28 09:42 574K
[   ]libdb5.3-java-jni_5.3.28-12+deb9u1_armel.deb2017-09-28 10:28 580K
[   ]libdb5.3-java-jni_5.3.28-12+deb9u1_armhf.deb2017-09-28 10:28 606K
[   ]libdb5.3-java-jni_5.3.28-12+deb9u1_i386.deb2017-09-28 09:27 758K
[   ]libdb5.3-java-jni_5.3.28-12+deb9u1_mips.deb2017-09-29 16:10 593K
[   ]libdb5.3-java-jni_5.3.28-12+deb9u1_mips64el.deb2017-09-28 11:29 600K
[   ]libdb5.3-java-jni_5.3.28-12+deb9u1_mipsel.deb2017-09-28 11:14 603K
[   ]libdb5.3-java-jni_5.3.28-12+deb9u1_ppc64el.deb2017-09-28 09:27 618K
[   ]libdb5.3-java-jni_5.3.28-12+deb9u1_s390x.deb2017-09-28 09:42 641K
[   ]libdb5.3-java_5.3.28+dfsg1-0.5_all.deb2019-02-26 10:57 575K
[   ]libdb5.3-java_5.3.28+dfsg1-0.6_all.deb2019-03-12 05:28 575K
[   ]libdb5.3-java_5.3.28-9+deb8u1_all.deb2017-11-18 20:15 543K
[   ]libdb5.3-java_5.3.28-12+deb9u1_all.deb2017-09-28 09:42 548K
[   ]libdb5.3-sql-dev_5.3.28+dfsg1-0.5_amd64.deb2019-02-26 10:11 1.0M
[   ]libdb5.3-sql-dev_5.3.28+dfsg1-0.5_arm64.deb2019-02-26 09:56 968K
[   ]libdb5.3-sql-dev_5.3.28+dfsg1-0.5_armel.deb2019-02-26 10:57 901K
[   ]libdb5.3-sql-dev_5.3.28+dfsg1-0.5_armhf.deb2019-02-26 10:57 929K
[   ]libdb5.3-sql-dev_5.3.28+dfsg1-0.5_i386.deb2019-02-26 09:46 1.1M
[   ]libdb5.3-sql-dev_5.3.28+dfsg1-0.5_mips.deb2019-02-26 10:57 1.0M
[   ]libdb5.3-sql-dev_5.3.28+dfsg1-0.5_mips64el.deb2019-02-26 12:42 1.1M
[   ]libdb5.3-sql-dev_5.3.28+dfsg1-0.5_mipsel.deb2019-02-26 12:42 1.0M
[   ]libdb5.3-sql-dev_5.3.28+dfsg1-0.5_ppc64el.deb2019-02-26 09:56 1.1M
[   ]libdb5.3-sql-dev_5.3.28+dfsg1-0.5_s390x.deb2019-02-26 09:56 938K
[   ]libdb5.3-sql-dev_5.3.28+dfsg1-0.6_amd64.deb2019-03-12 05:28 1.0M
[   ]libdb5.3-sql-dev_5.3.28+dfsg1-0.6_arm64.deb2019-03-12 05:28 968K
[   ]libdb5.3-sql-dev_5.3.28+dfsg1-0.6_armel.deb2019-03-12 06:29 901K
[   ]libdb5.3-sql-dev_5.3.28+dfsg1-0.6_armhf.deb2019-03-12 06:14 929K
[   ]libdb5.3-sql-dev_5.3.28+dfsg1-0.6_i386.deb2019-03-12 05:43 1.1M
[   ]libdb5.3-sql-dev_5.3.28+dfsg1-0.6_mips64el.deb2019-03-12 06:29 1.1M
[   ]libdb5.3-sql-dev_5.3.28+dfsg1-0.6_mipsel.deb2019-03-12 07:30 1.0M
[   ]libdb5.3-sql-dev_5.3.28+dfsg1-0.6_ppc64el.deb2019-03-12 05:28 1.1M
[   ]libdb5.3-sql-dev_5.3.28+dfsg1-0.6_s390x.deb2019-03-12 05:13 938K
[   ]libdb5.3-sql-dev_5.3.28-9+deb8u1_amd64.deb2017-11-20 03:40 1.0M
[   ]libdb5.3-sql-dev_5.3.28-9+deb8u1_armel.deb2017-11-20 04:26 869K
[   ]libdb5.3-sql-dev_5.3.28-9+deb8u1_armhf.deb2017-12-02 16:26 906K
[   ]libdb5.3-sql-dev_5.3.28-9+deb8u1_i386.deb2017-11-20 03:25 1.0M
[   ]libdb5.3-sql-dev_5.3.28-12+deb9u1_amd64.deb2017-09-28 09:42 1.0M
[   ]libdb5.3-sql-dev_5.3.28-12+deb9u1_arm64.deb2017-09-28 09:42 891K
[   ]libdb5.3-sql-dev_5.3.28-12+deb9u1_armel.deb2017-09-28 10:28 910K
[   ]libdb5.3-sql-dev_5.3.28-12+deb9u1_armhf.deb2017-09-28 10:28 929K
[   ]libdb5.3-sql-dev_5.3.28-12+deb9u1_i386.deb2017-09-28 09:27 1.1M
[   ]libdb5.3-sql-dev_5.3.28-12+deb9u1_mips.deb2017-09-29 16:10 1.0M
[   ]libdb5.3-sql-dev_5.3.28-12+deb9u1_mips64el.deb2017-09-28 11:29 1.0M
[   ]libdb5.3-sql-dev_5.3.28-12+deb9u1_mipsel.deb2017-09-28 11:14 1.0M
[   ]libdb5.3-sql-dev_5.3.28-12+deb9u1_ppc64el.deb2017-09-28 09:27 939K
[   ]libdb5.3-sql-dev_5.3.28-12+deb9u1_s390x.deb2017-09-28 09:42 965K
[   ]libdb5.3-sql_5.3.28+dfsg1-0.5_amd64.deb2019-02-26 10:11 885K
[   ]libdb5.3-sql_5.3.28+dfsg1-0.5_arm64.deb2019-02-26 09:56 808K
[   ]libdb5.3-sql_5.3.28+dfsg1-0.5_armel.deb2019-02-26 10:57 737K
[   ]libdb5.3-sql_5.3.28+dfsg1-0.5_armhf.deb2019-02-26 10:57 766K
[   ]libdb5.3-sql_5.3.28+dfsg1-0.5_i386.deb2019-02-26 09:46 963K
[   ]libdb5.3-sql_5.3.28+dfsg1-0.5_mips.deb2019-02-26 10:57 777K
[   ]libdb5.3-sql_5.3.28+dfsg1-0.5_mips64el.deb2019-02-26 12:42 789K
[   ]libdb5.3-sql_5.3.28+dfsg1-0.5_mipsel.deb2019-02-26 12:42 788K
[   ]libdb5.3-sql_5.3.28+dfsg1-0.5_ppc64el.deb2019-02-26 09:56 928K
[   ]libdb5.3-sql_5.3.28+dfsg1-0.5_s390x.deb2019-02-26 09:56 794K
[   ]libdb5.3-sql_5.3.28+dfsg1-0.6_amd64.deb2019-03-12 05:28 883K
[   ]libdb5.3-sql_5.3.28+dfsg1-0.6_arm64.deb2019-03-12 05:28 808K
[   ]libdb5.3-sql_5.3.28+dfsg1-0.6_armel.deb2019-03-12 06:29 739K
[   ]libdb5.3-sql_5.3.28+dfsg1-0.6_armhf.deb2019-03-12 06:14 766K
[   ]libdb5.3-sql_5.3.28+dfsg1-0.6_i386.deb2019-03-12 05:43 963K
[   ]libdb5.3-sql_5.3.28+dfsg1-0.6_mips64el.deb2019-03-12 06:29 789K
[   ]libdb5.3-sql_5.3.28+dfsg1-0.6_mipsel.deb2019-03-12 07:30 788K
[   ]libdb5.3-sql_5.3.28+dfsg1-0.6_ppc64el.deb2019-03-12 05:28 927K
[   ]libdb5.3-sql_5.3.28+dfsg1-0.6_s390x.deb2019-03-12 05:13 794K
[   ]libdb5.3-sql_5.3.28-9+deb8u1_amd64.deb2017-11-20 03:40 882K
[   ]libdb5.3-sql_5.3.28-9+deb8u1_armel.deb2017-11-20 04:26 742K
[   ]libdb5.3-sql_5.3.28-9+deb8u1_armhf.deb2017-12-02 16:26 774K
[   ]libdb5.3-sql_5.3.28-9+deb8u1_i386.deb2017-11-20 03:25 954K
[   ]libdb5.3-sql_5.3.28-12+deb9u1_amd64.deb2017-09-28 09:42 879K
[   ]libdb5.3-sql_5.3.28-12+deb9u1_arm64.deb2017-09-28 09:42 733K
[   ]libdb5.3-sql_5.3.28-12+deb9u1_armel.deb2017-09-28 10:28 737K
[   ]libdb5.3-sql_5.3.28-12+deb9u1_armhf.deb2017-09-28 10:28 766K
[   ]libdb5.3-sql_5.3.28-12+deb9u1_i386.deb2017-09-28 09:27 958K
[   ]libdb5.3-sql_5.3.28-12+deb9u1_mips.deb2017-09-29 16:10 776K
[   ]libdb5.3-sql_5.3.28-12+deb9u1_mips64el.deb2017-09-28 11:29 786K
[   ]libdb5.3-sql_5.3.28-12+deb9u1_mipsel.deb2017-09-28 11:14 788K
[   ]libdb5.3-sql_5.3.28-12+deb9u1_ppc64el.deb2017-09-28 09:27 786K
[   ]libdb5.3-sql_5.3.28-12+deb9u1_s390x.deb2017-09-28 09:42 817K
[   ]libdb5.3-stl-dev_5.3.28+dfsg1-0.5_amd64.deb2019-02-26 10:11 842K
[   ]libdb5.3-stl-dev_5.3.28+dfsg1-0.5_arm64.deb2019-02-26 09:56 804K
[   ]libdb5.3-stl-dev_5.3.28+dfsg1-0.5_armel.deb2019-02-26 10:57 751K
[   ]libdb5.3-stl-dev_5.3.28+dfsg1-0.5_armhf.deb2019-02-26 10:57 774K
[   ]libdb5.3-stl-dev_5.3.28+dfsg1-0.5_i386.deb2019-02-26 09:46 927K
[   ]libdb5.3-stl-dev_5.3.28+dfsg1-0.5_mips.deb2019-02-26 10:57 856K
[   ]libdb5.3-stl-dev_5.3.28+dfsg1-0.5_mips64el.deb2019-02-26 12:42 885K
[   ]libdb5.3-stl-dev_5.3.28+dfsg1-0.5_mipsel.deb2019-02-26 12:42 874K
[   ]libdb5.3-stl-dev_5.3.28+dfsg1-0.5_ppc64el.deb2019-02-26 09:56 900K
[   ]libdb5.3-stl-dev_5.3.28+dfsg1-0.5_s390x.deb2019-02-26 09:56 773K
[   ]libdb5.3-stl-dev_5.3.28+dfsg1-0.6_amd64.deb2019-03-12 05:28 842K
[   ]libdb5.3-stl-dev_5.3.28+dfsg1-0.6_arm64.deb2019-03-12 05:28 804K
[   ]libdb5.3-stl-dev_5.3.28+dfsg1-0.6_armel.deb2019-03-12 06:29 751K
[   ]libdb5.3-stl-dev_5.3.28+dfsg1-0.6_armhf.deb2019-03-12 06:14 774K
[   ]libdb5.3-stl-dev_5.3.28+dfsg1-0.6_i386.deb2019-03-12 05:43 927K
[   ]libdb5.3-stl-dev_5.3.28+dfsg1-0.6_mips64el.deb2019-03-12 06:29 886K
[   ]libdb5.3-stl-dev_5.3.28+dfsg1-0.6_mipsel.deb2019-03-12 07:30 874K
[   ]libdb5.3-stl-dev_5.3.28+dfsg1-0.6_ppc64el.deb2019-03-12 05:28 900K
[   ]libdb5.3-stl-dev_5.3.28+dfsg1-0.6_s390x.deb2019-03-12 05:13 774K
[   ]libdb5.3-stl-dev_5.3.28-9+deb8u1_amd64.deb2017-11-20 03:40 826K
[   ]libdb5.3-stl-dev_5.3.28-9+deb8u1_armel.deb2017-11-20 04:26 727K
[   ]libdb5.3-stl-dev_5.3.28-9+deb8u1_armhf.deb2017-12-02 16:26 757K
[   ]libdb5.3-stl-dev_5.3.28-9+deb8u1_i386.deb2017-11-20 03:25 868K
[   ]libdb5.3-stl-dev_5.3.28-12+deb9u1_amd64.deb2017-09-28 09:42 838K
[   ]libdb5.3-stl-dev_5.3.28-12+deb9u1_arm64.deb2017-09-28 09:42 745K
[   ]libdb5.3-stl-dev_5.3.28-12+deb9u1_armel.deb2017-09-28 10:28 759K
[   ]libdb5.3-stl-dev_5.3.28-12+deb9u1_armhf.deb2017-09-28 10:28 773K
[   ]libdb5.3-stl-dev_5.3.28-12+deb9u1_i386.deb2017-09-28 09:27 920K
[   ]libdb5.3-stl-dev_5.3.28-12+deb9u1_mips.deb2017-09-29 16:10 852K
[   ]libdb5.3-stl-dev_5.3.28-12+deb9u1_mips64el.deb2017-09-28 11:29 880K
[   ]libdb5.3-stl-dev_5.3.28-12+deb9u1_mipsel.deb2017-09-28 11:14 870K
[   ]libdb5.3-stl-dev_5.3.28-12+deb9u1_ppc64el.deb2017-09-28 09:27 783K
[   ]libdb5.3-stl-dev_5.3.28-12+deb9u1_s390x.deb2017-09-28 09:42 795K
[   ]libdb5.3-stl_5.3.28+dfsg1-0.5_amd64.deb2019-02-26 10:11 711K
[   ]libdb5.3-stl_5.3.28+dfsg1-0.5_arm64.deb2019-02-26 09:56 650K
[   ]libdb5.3-stl_5.3.28+dfsg1-0.5_armel.deb2019-02-26 10:57 592K
[   ]libdb5.3-stl_5.3.28+dfsg1-0.5_armhf.deb2019-02-26 10:57 618K
[   ]libdb5.3-stl_5.3.28+dfsg1-0.5_i386.deb2019-02-26 09:46 779K
[   ]libdb5.3-stl_5.3.28+dfsg1-0.5_mips.deb2019-02-26 10:57 614K
[   ]libdb5.3-stl_5.3.28+dfsg1-0.5_mips64el.deb2019-02-26 12:42 623K
[   ]libdb5.3-stl_5.3.28+dfsg1-0.5_mipsel.deb2019-02-26 12:42 623K
[   ]libdb5.3-stl_5.3.28+dfsg1-0.5_ppc64el.deb2019-02-26 09:56 746K
[   ]libdb5.3-stl_5.3.28+dfsg1-0.5_s390x.deb2019-02-26 09:56 639K
[   ]libdb5.3-stl_5.3.28+dfsg1-0.6_amd64.deb2019-03-12 05:28 712K
[   ]libdb5.3-stl_5.3.28+dfsg1-0.6_arm64.deb2019-03-12 05:28 649K
[   ]libdb5.3-stl_5.3.28+dfsg1-0.6_armel.deb2019-03-12 06:29 592K
[   ]libdb5.3-stl_5.3.28+dfsg1-0.6_armhf.deb2019-03-12 06:14 618K
[   ]libdb5.3-stl_5.3.28+dfsg1-0.6_i386.deb2019-03-12 05:43 779K
[   ]libdb5.3-stl_5.3.28+dfsg1-0.6_mips64el.deb2019-03-12 06:29 623K
[   ]libdb5.3-stl_5.3.28+dfsg1-0.6_mipsel.deb2019-03-12 07:30 624K
[   ]libdb5.3-stl_5.3.28+dfsg1-0.6_ppc64el.deb2019-03-12 05:28 746K
[   ]libdb5.3-stl_5.3.28+dfsg1-0.6_s390x.deb2019-03-12 05:13 639K
[   ]libdb5.3-stl_5.3.28-9+deb8u1_amd64.deb2017-11-20 03:40 714K
[   ]libdb5.3-stl_5.3.28-9+deb8u1_armel.deb2017-11-20 04:26 599K
[   ]libdb5.3-stl_5.3.28-9+deb8u1_armhf.deb2017-12-02 16:26 627K
[   ]libdb5.3-stl_5.3.28-9+deb8u1_i386.deb2017-11-20 03:25 774K
[   ]libdb5.3-stl_5.3.28-12+deb9u1_amd64.deb2017-09-28 09:42 707K
[   ]libdb5.3-stl_5.3.28-12+deb9u1_arm64.deb2017-09-28 09:42 594K
[   ]libdb5.3-stl_5.3.28-12+deb9u1_armel.deb2017-09-28 10:28 591K
[   ]libdb5.3-stl_5.3.28-12+deb9u1_armhf.deb2017-09-28 10:28 617K
[   ]libdb5.3-stl_5.3.28-12+deb9u1_i386.deb2017-09-28 09:27 774K
[   ]libdb5.3-stl_5.3.28-12+deb9u1_mips.deb2017-09-29 16:10 612K
[   ]libdb5.3-stl_5.3.28-12+deb9u1_mips64el.deb2017-09-28 11:29 620K
[   ]libdb5.3-stl_5.3.28-12+deb9u1_mipsel.deb2017-09-28 11:14 622K
[   ]libdb5.3-stl_5.3.28-12+deb9u1_ppc64el.deb2017-09-28 09:27 639K
[   ]libdb5.3-stl_5.3.28-12+deb9u1_s390x.deb2017-09-28 09:42 657K
[   ]libdb5.3-tcl_5.3.28+dfsg1-0.5_amd64.deb2019-02-26 10:11 954K
[   ]libdb5.3-tcl_5.3.28+dfsg1-0.5_arm64.deb2019-02-26 09:56 894K
[   ]libdb5.3-tcl_5.3.28+dfsg1-0.5_armel.deb2019-02-26 10:57 805K
[   ]libdb5.3-tcl_5.3.28+dfsg1-0.5_armhf.deb2019-02-26 10:57 826K
[   ]libdb5.3-tcl_5.3.28+dfsg1-0.5_i386.deb2019-02-26 09:46 1.0M
[   ]libdb5.3-tcl_5.3.28+dfsg1-0.5_mips.deb2019-02-26 10:57 921K
[   ]libdb5.3-tcl_5.3.28+dfsg1-0.5_mips64el.deb2019-02-26 12:42 952K
[   ]libdb5.3-tcl_5.3.28+dfsg1-0.5_mipsel.deb2019-02-26 12:42 941K
[   ]libdb5.3-tcl_5.3.28+dfsg1-0.5_ppc64el.deb2019-02-26 09:56 1.0M
[   ]libdb5.3-tcl_5.3.28+dfsg1-0.5_s390x.deb2019-02-26 09:56 854K
[   ]libdb5.3-tcl_5.3.28+dfsg1-0.6_amd64.deb2019-03-12 05:28 954K
[   ]libdb5.3-tcl_5.3.28+dfsg1-0.6_arm64.deb2019-03-12 05:28 894K
[   ]libdb5.3-tcl_5.3.28+dfsg1-0.6_armel.deb2019-03-12 06:29 803K
[   ]libdb5.3-tcl_5.3.28+dfsg1-0.6_armhf.deb2019-03-12 06:14 825K
[   ]libdb5.3-tcl_5.3.28+dfsg1-0.6_i386.deb2019-03-12 05:43 1.0M
[   ]libdb5.3-tcl_5.3.28+dfsg1-0.6_mips64el.deb2019-03-12 06:29 952K
[   ]libdb5.3-tcl_5.3.28+dfsg1-0.6_mipsel.deb2019-03-12 07:30 942K
[   ]libdb5.3-tcl_5.3.28+dfsg1-0.6_ppc64el.deb2019-03-12 05:28 1.0M
[   ]libdb5.3-tcl_5.3.28+dfsg1-0.6_s390x.deb2019-03-12 05:13 853K
[   ]libdb5.3-tcl_5.3.28-9+deb8u1_amd64.deb2017-11-20 03:40 1.1M
[   ]libdb5.3-tcl_5.3.28-9+deb8u1_armel.deb2017-11-20 04:26 971K
[   ]libdb5.3-tcl_5.3.28-9+deb8u1_armhf.deb2017-12-02 16:26 1.0M
[   ]libdb5.3-tcl_5.3.28-9+deb8u1_i386.deb2017-11-20 03:25 1.3M
[   ]libdb5.3-tcl_5.3.28-12+deb9u1_amd64.deb2017-09-28 09:42 949K
[   ]libdb5.3-tcl_5.3.28-12+deb9u1_arm64.deb2017-09-28 09:42 809K
[   ]libdb5.3-tcl_5.3.28-12+deb9u1_armel.deb2017-09-28 10:28 808K
[   ]libdb5.3-tcl_5.3.28-12+deb9u1_armhf.deb2017-09-28 10:28 823K
[   ]libdb5.3-tcl_5.3.28-12+deb9u1_i386.deb2017-09-28 09:27 1.0M
[   ]libdb5.3-tcl_5.3.28-12+deb9u1_mips.deb2017-09-29 16:10 915K
[   ]libdb5.3-tcl_5.3.28-12+deb9u1_mips64el.deb2017-09-28 11:29 943K
[   ]libdb5.3-tcl_5.3.28-12+deb9u1_mipsel.deb2017-09-28 11:14 936K
[   ]libdb5.3-tcl_5.3.28-12+deb9u1_ppc64el.deb2017-09-28 09:27 871K
[   ]libdb5.3-tcl_5.3.28-12+deb9u1_s390x.deb2017-09-28 09:42 885K
[   ]libdb5.3_5.3.28+dfsg1-0.5_amd64.deb2019-02-26 10:11 667K
[   ]libdb5.3_5.3.28+dfsg1-0.5_arm64.deb2019-02-26 09:56 607K
[   ]libdb5.3_5.3.28+dfsg1-0.5_armel.deb2019-02-26 10:57 558K
[   ]libdb5.3_5.3.28+dfsg1-0.5_armhf.deb2019-02-26 10:57 583K
[   ]libdb5.3_5.3.28+dfsg1-0.5_i386.deb2019-02-26 09:46 730K
[   ]libdb5.3_5.3.28+dfsg1-0.5_mips.deb2019-02-26 10:57 575K
[   ]libdb5.3_5.3.28+dfsg1-0.5_mips64el.deb2019-02-26 12:42 583K
[   ]libdb5.3_5.3.28+dfsg1-0.5_mipsel.deb2019-02-26 12:42 584K
[   ]libdb5.3_5.3.28+dfsg1-0.5_ppc64el.deb2019-02-26 09:56 701K
[   ]libdb5.3_5.3.28+dfsg1-0.5_s390x.deb2019-02-26 09:56 599K
[   ]libdb5.3_5.3.28+dfsg1-0.6_amd64.deb2019-03-12 05:28 667K
[   ]libdb5.3_5.3.28+dfsg1-0.6_arm64.deb2019-03-12 05:28 607K
[   ]libdb5.3_5.3.28+dfsg1-0.6_armel.deb2019-03-12 06:29 559K
[   ]libdb5.3_5.3.28+dfsg1-0.6_armhf.deb2019-03-12 06:14 583K
[   ]libdb5.3_5.3.28+dfsg1-0.6_i386.deb2019-03-12 05:43 730K
[   ]libdb5.3_5.3.28+dfsg1-0.6_mips64el.deb2019-03-12 06:29 583K
[   ]libdb5.3_5.3.28+dfsg1-0.6_mipsel.deb2019-03-12 07:30 584K
[   ]libdb5.3_5.3.28+dfsg1-0.6_ppc64el.deb2019-03-12 05:28 701K
[   ]libdb5.3_5.3.28+dfsg1-0.6_s390x.deb2019-03-12 05:13 598K
[   ]libdb5.3_5.3.28-9+deb8u1_amd64.deb2017-11-20 03:40 664K
[   ]libdb5.3_5.3.28-9+deb8u1_armel.deb2017-11-20 04:26 561K
[   ]libdb5.3_5.3.28-9+deb8u1_armhf.deb2017-12-02 16:26 587K
[   ]libdb5.3_5.3.28-9+deb8u1_i386.deb2017-11-20 03:25 721K
[   ]libdb5.3_5.3.28-12+deb9u1_amd64.deb2017-09-28 09:42 663K
[   ]libdb5.3_5.3.28-12+deb9u1_arm64.deb2017-09-28 09:42 550K
[   ]libdb5.3_5.3.28-12+deb9u1_armel.deb2017-09-28 10:28 556K
[   ]libdb5.3_5.3.28-12+deb9u1_armhf.deb2017-09-28 10:28 581K
[   ]libdb5.3_5.3.28-12+deb9u1_i386.deb2017-09-28 09:27 725K
[   ]libdb5.3_5.3.28-12+deb9u1_mips.deb2017-09-29 16:10 572K
[   ]libdb5.3_5.3.28-12+deb9u1_mips64el.deb2017-09-28 11:29 579K
[   ]libdb5.3_5.3.28-12+deb9u1_mipsel.deb2017-09-28 11:14 581K
[   ]libdb5.3_5.3.28-12+deb9u1_ppc64el.deb2017-09-28 09:27 594K
[   ]libdb5.3_5.3.28-12+deb9u1_s390x.deb2017-09-28 09:42 615K

+
Apache Server at ftp.debian.org Port 80
+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/downloads/enchant/1.6.0/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/downloads/enchant/1.6.0/index.html new file mode 100644 index 00000000..b7bfb1e9 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/downloads/enchant/1.6.0/index.html @@ -0,0 +1,15 @@ + + + + Index of /downloads/enchant/1.6.0 + + +

Index of /downloads/enchant/1.6.0

+ + + + + +
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[   ]MD5SUM01-Apr-2010 23:03 55  
[   ]enchant-1.6.0.tar.gz01-Apr-2010 23:02 593K 

+
Apache/2.2.15 (Fedora) Server at www.abisource.com Port 443
+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v2.8/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v2.8/index.html new file mode 100644 index 00000000..9ea077d5 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v2.8/index.html @@ -0,0 +1,774 @@ + + + + Index of /files/v2.8 + + +

Index of /files/v2.8

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]-*2012-06-07 12:08 0  
[   ]CMakeChangeLog-2.8.02009-11-13 15:41 13K 
[   ]CMakeChangeLog-2.8.12010-03-17 14:37 17K 
[   ]CMakeChangeLog-2.8.22010-06-28 14:37 23K 
[   ]CMakeChangeLog-2.8.32010-11-03 17:21 41K 
[   ]CMakeChangeLog-2.8.42011-02-16 09:15 61K 
[   ]CMakeChangeLog-2.8.52011-07-08 10:49 81K 
[   ]CMakeChangeLog-2.8.62011-12-30 15:30 100K 
[   ]CMakeChangeLog-2.8.72011-12-30 15:31 115K 
[   ]CMakeChangeLog-2.8.82012-04-18 17:47 144K 
[   ]CMakeChangeLog-2.8.92012-08-09 16:29 163K 
[   ]CMakeChangeLog-2.8.102012-10-31 15:09 185K 
[   ]CMakeChangeLog-2.8.10.12012-11-07 11:52 186K 
[   ]CMakeChangeLog-2.8.10.22012-11-27 15:15 186K 
[   ]CMakeChangeLog-2.8.112013-05-16 09:39 218K 
[   ]CMakeChangeLog-2.8.122013-10-11 08:57 247K 
[   ]CMakeChangeLog-2.8.12.12013-11-08 14:33 248K 
[   ]CMakeVS10FindMake.cmake2010-05-27 09:45 1.2K 
[TXT]cmake-2.8.0-AIX-powerpc.sh2010-02-08 10:44 17M 
[   ]cmake-2.8.0-AIX-powerpc.tar.Z2010-02-08 10:44 24M 
[   ]cmake-2.8.0-AIX-powerpc.tar.gz2010-02-08 10:44 17M 
[   ]cmake-2.8.0-Darwin-universal.dmg2009-11-13 15:32 24M 
[   ]cmake-2.8.0-Darwin-universal.tar.Z2009-11-13 15:32 35M 
[   ]cmake-2.8.0-Darwin-universal.tar.gz2009-11-13 15:33 24M 
[TXT]cmake-2.8.0-HP-UX-9000_785.sh2009-11-13 15:32 14M 
[   ]cmake-2.8.0-HP-UX-9000_785.tar.Z2009-11-13 15:32 19M 
[   ]cmake-2.8.0-HP-UX-9000_785.tar.gz2009-11-13 15:32 14M 
[TXT]cmake-2.8.0-IRIX64-64.sh2009-11-13 15:32 9.0M 
[   ]cmake-2.8.0-IRIX64-64.tar.Z2009-11-13 15:32 13M 
[   ]cmake-2.8.0-IRIX64-64.tar.gz2009-11-13 15:32 9.0M 
[TXT]cmake-2.8.0-IRIX64-n32.sh2009-11-13 15:32 8.8M 
[   ]cmake-2.8.0-IRIX64-n32.tar.Z2009-11-13 15:32 13M 
[   ]cmake-2.8.0-IRIX64-n32.tar.gz2009-11-13 15:32 8.8M 
[TXT]cmake-2.8.0-Linux-i386.sh2009-11-13 15:32 15M 
[   ]cmake-2.8.0-Linux-i386.tar.Z2009-11-13 15:32 21M 
[   ]cmake-2.8.0-Linux-i386.tar.gz2009-11-13 15:32 15M 
[TXT]cmake-2.8.0-SunOS-sparc.sh2009-11-13 15:32 10M 
[   ]cmake-2.8.0-SunOS-sparc.tar.Z2009-11-13 15:32 14M 
[   ]cmake-2.8.0-SunOS-sparc.tar.gz2009-11-13 15:32 10M 
[   ]cmake-2.8.0-win32-x86.exe2009-11-13 15:32 7.4M 
[   ]cmake-2.8.0-win32-x86.zip2009-11-13 15:32 9.3M 
[   ]cmake-2.8.0.tar.Z2009-11-13 15:32 5.4M 
[   ]cmake-2.8.0.tar.gz2009-11-13 15:32 3.4M 
[   ]cmake-2.8.0.zip2009-11-13 15:32 4.6M 
[TXT]cmake-2.8.1-AIX-powerpc.sh2010-04-06 14:37 17M 
[   ]cmake-2.8.1-AIX-powerpc.tar.Z2010-04-06 14:37 24M 
[   ]cmake-2.8.1-AIX-powerpc.tar.gz2010-04-06 14:37 17M 
[   ]cmake-2.8.1-Darwin-universal.dmg2010-04-06 14:37 26M 
[   ]cmake-2.8.1-Darwin-universal.tar.Z2010-04-06 14:37 37M 
[   ]cmake-2.8.1-Darwin-universal.tar.gz2010-04-06 14:37 26M 
[TXT]cmake-2.8.1-HP-UX-9000_785.sh2010-04-06 14:37 14M 
[   ]cmake-2.8.1-HP-UX-9000_785.tar.Z2010-04-06 14:37 19M 
[   ]cmake-2.8.1-HP-UX-9000_785.tar.gz2010-04-06 14:37 14M 
[TXT]cmake-2.8.1-IRIX64-64.sh2010-04-06 14:37 9.1M 
[   ]cmake-2.8.1-IRIX64-64.tar.Z2010-04-06 14:37 13M 
[   ]cmake-2.8.1-IRIX64-64.tar.gz2010-04-06 14:37 9.1M 
[TXT]cmake-2.8.1-IRIX64-n32.sh2010-04-06 14:37 8.8M 
[   ]cmake-2.8.1-IRIX64-n32.tar.Z2010-04-06 14:37 13M 
[   ]cmake-2.8.1-IRIX64-n32.tar.gz2010-04-06 14:37 8.8M 
[TXT]cmake-2.8.1-Linux-i386.sh2010-04-06 14:37 15M 
[   ]cmake-2.8.1-Linux-i386.tar.Z2010-04-06 14:37 21M 
[   ]cmake-2.8.1-Linux-i386.tar.gz2010-04-06 14:37 15M 
[TXT]cmake-2.8.1-SunOS-sparc.sh2010-04-06 14:37 10M 
[   ]cmake-2.8.1-SunOS-sparc.tar.Z2010-04-06 14:37 14M 
[   ]cmake-2.8.1-SunOS-sparc.tar.gz2010-04-06 14:37 10M 
[   ]cmake-2.8.1-win32-x86.exe2010-04-06 14:37 7.5M 
[   ]cmake-2.8.1-win32-x86.zip2010-04-06 14:37 9.5M 
[   ]cmake-2.8.1.tar.Z2010-04-06 14:37 5.5M 
[   ]cmake-2.8.1.tar.gz2010-04-06 14:37 3.4M 
[   ]cmake-2.8.1.zip2010-04-06 14:37 4.6M 
[TXT]cmake-2.8.2-AIX-powerpc.sh2010-06-28 14:10 17M 
[   ]cmake-2.8.2-AIX-powerpc.tar.Z2010-06-28 14:09 24M 
[   ]cmake-2.8.2-AIX-powerpc.tar.gz2010-06-28 14:09 17M 
[   ]cmake-2.8.2-Darwin-universal.dmg2010-06-28 14:10 27M 
[   ]cmake-2.8.2-Darwin-universal.tar.Z2010-06-28 14:10 39M 
[   ]cmake-2.8.2-Darwin-universal.tar.gz2010-06-28 14:09 27M 
[TXT]cmake-2.8.2-HP-UX-9000_785.sh2010-06-28 14:09 15M 
[   ]cmake-2.8.2-HP-UX-9000_785.tar.Z2010-06-28 14:10 20M 
[   ]cmake-2.8.2-HP-UX-9000_785.tar.gz2010-06-28 14:10 15M 
[TXT]cmake-2.8.2-IRIX64-64.sh2010-06-28 14:10 9.6M 
[   ]cmake-2.8.2-IRIX64-64.tar.Z2010-06-28 14:09 14M 
[   ]cmake-2.8.2-IRIX64-64.tar.gz2010-06-28 14:10 9.6M 
[TXT]cmake-2.8.2-IRIX64-n32.sh2010-06-28 14:10 9.4M 
[   ]cmake-2.8.2-IRIX64-n32.tar.Z2010-06-28 14:09 14M 
[   ]cmake-2.8.2-IRIX64-n32.tar.gz2010-06-28 14:10 9.3M 
[TXT]cmake-2.8.2-Linux-i386.sh2010-06-28 14:10 15M 
[   ]cmake-2.8.2-Linux-i386.tar.Z2010-06-28 14:09 21M 
[   ]cmake-2.8.2-Linux-i386.tar.gz2010-06-28 14:10 15M 
[TXT]cmake-2.8.2-SunOS-sparc.sh2010-06-28 14:09 10M 
[   ]cmake-2.8.2-SunOS-sparc.tar.Z2010-06-28 14:10 14M 
[   ]cmake-2.8.2-SunOS-sparc.tar.gz2010-06-28 14:10 10M 
[   ]cmake-2.8.2-win32-x86.exe2010-06-28 14:09 7.7M 
[   ]cmake-2.8.2-win32-x86.zip2010-06-28 14:09 9.7M 
[   ]cmake-2.8.2.tar.Z2010-06-28 14:10 8.1M 
[   ]cmake-2.8.2.tar.gz2010-06-28 14:09 5.1M 
[   ]cmake-2.8.2.zip2010-06-28 14:10 6.8M 
[TXT]cmake-2.8.3-AIX-powerpc.sh2010-11-03 17:11 17M 
[   ]cmake-2.8.3-AIX-powerpc.tar.Z2010-11-03 17:11 24M 
[   ]cmake-2.8.3-AIX-powerpc.tar.gz2010-11-03 17:10 17M 
[   ]cmake-2.8.3-Darwin-universal.dmg2010-11-03 17:11 27M 
[   ]cmake-2.8.3-Darwin-universal.tar.Z2010-11-03 17:11 39M 
[   ]cmake-2.8.3-Darwin-universal.tar.gz2010-11-03 17:11 27M 
[TXT]cmake-2.8.3-IRIX64-64.sh2010-11-03 17:11 9.8M 
[   ]cmake-2.8.3-IRIX64-64.tar.Z2010-11-03 17:11 14M 
[   ]cmake-2.8.3-IRIX64-64.tar.gz2010-11-03 17:11 9.8M 
[TXT]cmake-2.8.3-IRIX64-n32.sh2010-11-03 17:10 9.5M 
[   ]cmake-2.8.3-IRIX64-n32.tar.Z2010-11-03 17:11 14M 
[   ]cmake-2.8.3-IRIX64-n32.tar.gz2010-11-03 17:10 9.5M 
[TXT]cmake-2.8.3-Linux-i386.sh2010-11-03 17:11 16M 
[   ]cmake-2.8.3-Linux-i386.tar.Z2010-11-03 17:11 22M 
[   ]cmake-2.8.3-Linux-i386.tar.gz2010-11-03 17:10 16M 
[TXT]cmake-2.8.3-SunOS-sparc.sh2010-11-03 17:10 11M 
[   ]cmake-2.8.3-SunOS-sparc.tar.Z2010-11-03 17:11 15M 
[   ]cmake-2.8.3-SunOS-sparc.tar.gz2010-11-03 17:11 11M 
[   ]cmake-2.8.3-win32-x86.exe2010-11-03 17:11 7.9M 
[   ]cmake-2.8.3-win32-x86.zip2010-11-03 17:11 9.9M 
[   ]cmake-2.8.3.tar.Z2010-11-03 17:11 8.1M 
[   ]cmake-2.8.3.tar.gz2010-11-03 17:11 5.2M 
[   ]cmake-2.8.3.zip2010-11-03 17:11 6.9M 
[TXT]cmake-2.8.4-AIX-powerpc.sh2011-02-15 15:54 17M 
[   ]cmake-2.8.4-AIX-powerpc.tar.Z2011-02-15 15:54 24M 
[   ]cmake-2.8.4-AIX-powerpc.tar.gz2011-02-15 15:53 17M 
[   ]cmake-2.8.4-Darwin-universal.dmg2011-02-15 15:53 28M 
[   ]cmake-2.8.4-Darwin-universal.tar.Z2011-02-15 15:54 39M 
[   ]cmake-2.8.4-Darwin-universal.tar.gz2011-02-15 15:54 27M 
[TXT]cmake-2.8.4-IRIX64-64.sh2011-02-15 15:53 9.9M 
[   ]cmake-2.8.4-IRIX64-64.tar.Z2011-02-15 15:54 15M 
[   ]cmake-2.8.4-IRIX64-64.tar.gz2011-02-15 15:54 9.9M 
[TXT]cmake-2.8.4-IRIX64-n32.sh2011-02-15 15:53 9.7M 
[   ]cmake-2.8.4-IRIX64-n32.tar.Z2011-02-15 15:55 14M 
[   ]cmake-2.8.4-IRIX64-n32.tar.gz2011-02-15 15:54 9.7M 
[TXT]cmake-2.8.4-Linux-i386.sh2011-02-15 15:54 16M 
[   ]cmake-2.8.4-Linux-i386.tar.Z2011-02-15 15:54 22M 
[   ]cmake-2.8.4-Linux-i386.tar.gz2011-02-15 15:54 16M 
[TXT]cmake-2.8.4-SunOS-sparc.sh2011-02-15 15:54 11M 
[   ]cmake-2.8.4-SunOS-sparc.tar.Z2011-02-15 15:54 15M 
[   ]cmake-2.8.4-SunOS-sparc.tar.gz2011-02-15 15:54 11M 
[   ]cmake-2.8.4-win32-x86.exe2011-02-15 15:54 7.9M 
[   ]cmake-2.8.4-win32-x86.zip2011-02-15 15:54 10M 
[   ]cmake-2.8.4.tar.Z2011-02-15 15:54 8.3M 
[   ]cmake-2.8.4.tar.gz2011-02-15 15:54 5.2M 
[   ]cmake-2.8.4.zip2011-02-15 15:54 7.0M 
[   ]cmake-2.8.5-1-src.tar.bz22011-07-08 10:34 4.1M 
[   ]cmake-2.8.5-1.tar.bz22011-07-08 10:34 6.3M 
[TXT]cmake-2.8.5-AIX-powerpc.sh2011-07-08 10:34 17M 
[   ]cmake-2.8.5-AIX-powerpc.tar.Z2011-07-08 10:34 24M 
[   ]cmake-2.8.5-AIX-powerpc.tar.gz2011-07-08 10:34 17M 
[   ]cmake-2.8.5-Darwin-universal.dmg2011-07-08 10:34 28M 
[   ]cmake-2.8.5-Darwin-universal.tar.Z2011-07-08 10:34 40M 
[   ]cmake-2.8.5-Darwin-universal.tar.gz2011-07-08 10:34 28M 
[TXT]cmake-2.8.5-IRIX64-64.sh2011-07-08 10:34 10M 
[   ]cmake-2.8.5-IRIX64-64.tar.Z2011-07-08 10:34 15M 
[   ]cmake-2.8.5-IRIX64-64.tar.gz2011-07-08 10:34 10M 
[TXT]cmake-2.8.5-IRIX64-n32.sh2011-07-08 10:34 9.8M 
[   ]cmake-2.8.5-IRIX64-n32.tar.Z2011-07-08 10:34 15M 
[   ]cmake-2.8.5-IRIX64-n32.tar.gz2011-07-08 10:34 9.8M 
[TXT]cmake-2.8.5-Linux-i386.sh2011-07-08 10:34 16M 
[   ]cmake-2.8.5-Linux-i386.tar.Z2011-07-08 10:34 22M 
[   ]cmake-2.8.5-Linux-i386.tar.gz2011-07-08 10:34 16M 
[TXT]cmake-2.8.5-SunOS-sparc.sh2011-07-08 10:34 11M 
[   ]cmake-2.8.5-SunOS-sparc.tar.Z2011-07-08 10:34 15M 
[   ]cmake-2.8.5-SunOS-sparc.tar.gz2011-07-08 10:34 11M 
[   ]cmake-2.8.5-win32-x86.exe2011-07-08 10:34 8.0M 
[   ]cmake-2.8.5-win32-x86.zip2011-07-08 10:34 10M 
[   ]cmake-2.8.5.tar.Z2011-07-08 10:34 8.3M 
[   ]cmake-2.8.5.tar.gz2011-07-08 10:34 5.3M 
[   ]cmake-2.8.5.zip2011-07-08 10:34 7.0M 
[   ]cmake-2.8.6-1-src.tar.bz22011-10-04 13:59 4.1M 
[   ]cmake-2.8.6-1.tar.bz22011-10-04 13:59 6.4M 
[TXT]cmake-2.8.6-AIX-powerpc.sh2011-10-04 13:59 17M 
[   ]cmake-2.8.6-AIX-powerpc.tar.Z2011-10-04 13:59 25M 
[   ]cmake-2.8.6-AIX-powerpc.tar.gz2011-10-04 13:59 17M 
[   ]cmake-2.8.6-Darwin-universal.dmg2011-10-04 13:59 28M 
[   ]cmake-2.8.6-Darwin-universal.tar.Z2011-10-04 13:59 40M 
[   ]cmake-2.8.6-Darwin-universal.tar.gz2011-10-04 13:59 28M 
[   ]cmake-2.8.6-Darwin64-universal.dmg2011-10-04 13:59 29M 
[   ]cmake-2.8.6-Darwin64-universal.tar.Z2011-10-04 13:59 41M 
[   ]cmake-2.8.6-Darwin64-universal.tar.gz2011-10-04 13:59 29M 
[TXT]cmake-2.8.6-IRIX64-64.sh2011-10-04 13:59 10M 
[   ]cmake-2.8.6-IRIX64-64.tar.Z2011-10-04 13:59 15M 
[   ]cmake-2.8.6-IRIX64-64.tar.gz2011-10-04 13:59 10M 
[TXT]cmake-2.8.6-IRIX64-n32.sh2011-10-04 13:59 10M 
[   ]cmake-2.8.6-IRIX64-n32.tar.Z2011-10-04 13:59 15M 
[   ]cmake-2.8.6-IRIX64-n32.tar.gz2011-10-04 13:59 10M 
[TXT]cmake-2.8.6-Linux-i386.sh2011-10-04 13:59 16M 
[   ]cmake-2.8.6-Linux-i386.tar.Z2011-10-04 13:59 23M 
[   ]cmake-2.8.6-Linux-i386.tar.gz2011-10-04 13:58 16M 
[   ]cmake-2.8.6-win32-x86.exe2011-10-04 13:58 8.2M 
[   ]cmake-2.8.6-win32-x86.zip2011-10-04 13:58 10M 
[   ]cmake-2.8.6.tar.Z2011-10-04 13:58 8.4M 
[   ]cmake-2.8.6.tar.gz2011-10-04 13:58 5.3M 
[   ]cmake-2.8.6.zip2011-10-04 13:58 7.1M 
[   ]cmake-2.8.7-1-src.tar.bz22011-12-30 14:14 4.2M 
[   ]cmake-2.8.7-1.tar.bz22011-12-30 14:14 6.5M 
[TXT]cmake-2.8.7-AIX-powerpc.sh2012-01-03 16:51 17M 
[   ]cmake-2.8.7-AIX-powerpc.tar.Z2012-01-03 16:51 25M 
[   ]cmake-2.8.7-AIX-powerpc.tar.gz2012-01-03 16:51 17M 
[   ]cmake-2.8.7-Darwin-universal.dmg2011-12-30 14:14 29M 
[   ]cmake-2.8.7-Darwin-universal.tar.Z2011-12-30 14:14 41M 
[   ]cmake-2.8.7-Darwin-universal.tar.gz2011-12-30 14:14 28M 
[   ]cmake-2.8.7-Darwin64-universal.dmg2011-12-30 14:14 30M 
[   ]cmake-2.8.7-Darwin64-universal.tar.Z2011-12-30 14:13 42M 
[   ]cmake-2.8.7-Darwin64-universal.tar.gz2011-12-30 14:13 30M 
[TXT]cmake-2.8.7-IRIX64-64.sh2011-12-30 14:13 10M 
[   ]cmake-2.8.7-IRIX64-64.tar.Z2011-12-30 14:13 15M 
[   ]cmake-2.8.7-IRIX64-64.tar.gz2011-12-30 14:13 10M 
[TXT]cmake-2.8.7-IRIX64-n32.sh2011-12-30 14:13 10M 
[   ]cmake-2.8.7-IRIX64-n32.tar.Z2011-12-30 14:13 15M 
[   ]cmake-2.8.7-IRIX64-n32.tar.gz2011-12-30 14:13 10M 
[TXT]cmake-2.8.7-Linux-i386.sh2011-12-30 14:13 16M 
[   ]cmake-2.8.7-Linux-i386.tar.Z2011-12-30 14:13 23M 
[   ]cmake-2.8.7-Linux-i386.tar.gz2011-12-30 14:13 16M 
[   ]cmake-2.8.7-win32-x86.exe2011-12-30 14:13 8.2M 
[   ]cmake-2.8.7-win32-x86.zip2011-12-30 14:13 10M 
[   ]cmake-2.8.7.tar.Z2011-12-30 14:13 8.5M 
[   ]cmake-2.8.7.tar.gz2011-12-30 14:13 5.4M 
[   ]cmake-2.8.7.zip2011-12-30 14:13 7.2M 
[TXT]cmake-2.8.8-AIX-powerpc.sh2012-04-18 15:23 19M 
[   ]cmake-2.8.8-AIX-powerpc.tar.Z2012-04-18 15:23 27M 
[   ]cmake-2.8.8-AIX-powerpc.tar.gz2012-04-18 15:23 19M 
[   ]cmake-2.8.8-Darwin-universal.dmg2012-04-18 15:23 34M 
[   ]cmake-2.8.8-Darwin-universal.tar.Z2012-04-18 15:23 49M 
[   ]cmake-2.8.8-Darwin-universal.tar.gz2012-04-18 15:23 34M 
[   ]cmake-2.8.8-Darwin64-universal.dmg2012-04-18 15:22 32M 
[   ]cmake-2.8.8-Darwin64-universal.tar.Z2012-04-18 15:22 44M 
[   ]cmake-2.8.8-Darwin64-universal.tar.gz2012-04-18 15:22 32M 
[TXT]cmake-2.8.8-IRIX64-64.sh2012-04-18 15:22 12M 
[   ]cmake-2.8.8-IRIX64-64.tar.Z2012-04-18 15:22 17M 
[   ]cmake-2.8.8-IRIX64-64.tar.gz2012-04-18 15:22 12M 
[TXT]cmake-2.8.8-IRIX64-n32.sh2012-04-18 15:22 11M 
[   ]cmake-2.8.8-IRIX64-n32.tar.Z2012-04-18 15:22 17M 
[   ]cmake-2.8.8-IRIX64-n32.tar.gz2012-04-18 15:22 11M 
[TXT]cmake-2.8.8-Linux-i386.sh2012-04-18 15:22 18M 
[   ]cmake-2.8.8-Linux-i386.tar.Z2012-04-18 15:22 26M 
[   ]cmake-2.8.8-Linux-i386.tar.gz2012-04-18 15:22 18M 
[TXT]cmake-2.8.8-SHA-256.txt2016-04-13 12:48 2.1K 
[TXT]cmake-2.8.8-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-2.8.8-win32-x86.exe2012-04-18 15:22 8.7M 
[   ]cmake-2.8.8-win32-x86.zip2012-04-18 15:22 11M 
[   ]cmake-2.8.8.tar.Z2012-04-18 15:22 8.5M 
[   ]cmake-2.8.8.tar.gz2012-04-18 15:22 5.4M 
[   ]cmake-2.8.8.zip2012-04-18 15:22 7.2M 
[TXT]cmake-2.8.9-AIX-powerpc.sh2012-08-09 15:36 19M 
[   ]cmake-2.8.9-AIX-powerpc.tar.Z2012-08-09 15:36 27M 
[   ]cmake-2.8.9-AIX-powerpc.tar.gz2012-08-09 15:36 19M 
[   ]cmake-2.8.9-Darwin-universal.dmg2012-08-09 15:36 35M 
[   ]cmake-2.8.9-Darwin-universal.tar.Z2012-08-09 15:36 50M 
[   ]cmake-2.8.9-Darwin-universal.tar.gz2012-08-09 15:36 35M 
[   ]cmake-2.8.9-Darwin64-universal.dmg2012-08-09 15:36 33M 
[   ]cmake-2.8.9-Darwin64-universal.tar.Z2012-08-09 15:35 45M 
[   ]cmake-2.8.9-Darwin64-universal.tar.gz2012-08-09 15:35 32M 
[TXT]cmake-2.8.9-IRIX64-64.sh2012-08-09 15:35 12M 
[   ]cmake-2.8.9-IRIX64-64.tar.Z2012-08-09 15:35 17M 
[   ]cmake-2.8.9-IRIX64-64.tar.gz2012-08-09 15:35 12M 
[TXT]cmake-2.8.9-IRIX64-n32.sh2012-08-09 15:35 12M 
[   ]cmake-2.8.9-IRIX64-n32.tar.Z2012-08-09 15:35 17M 
[   ]cmake-2.8.9-IRIX64-n32.tar.gz2012-08-09 15:35 12M 
[TXT]cmake-2.8.9-Linux-i386.sh2012-08-09 15:35 19M 
[   ]cmake-2.8.9-Linux-i386.tar.Z2012-08-09 15:35 26M 
[   ]cmake-2.8.9-Linux-i386.tar.gz2012-08-09 15:35 19M 
[TXT]cmake-2.8.9-SHA-256.txt2016-04-13 12:48 2.1K 
[TXT]cmake-2.8.9-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-2.8.9-win32-x86.exe2012-08-09 15:35 8.9M 
[   ]cmake-2.8.9-win32-x86.zip2012-08-09 15:35 11M 
[   ]cmake-2.8.9.tar.Z2012-08-09 15:35 8.5M 
[   ]cmake-2.8.9.tar.gz2012-08-09 15:35 5.4M 
[   ]cmake-2.8.9.zip2012-08-09 15:35 7.2M 
[TXT]cmake-2.8.10-AIX-powerpc.sh2012-10-31 13:05 20M 
[   ]cmake-2.8.10-AIX-powerpc.tar.Z2012-10-31 13:05 28M 
[   ]cmake-2.8.10-AIX-powerpc.tar.gz2012-10-31 13:05 20M 
[   ]cmake-2.8.10-Darwin-universal.dmg2012-10-31 13:04 41M 
[   ]cmake-2.8.10-Darwin-universal.tar.Z2012-10-31 13:04 58M 
[   ]cmake-2.8.10-Darwin-universal.tar.gz2012-10-31 13:04 41M 
[   ]cmake-2.8.10-Darwin64-universal.dmg2012-10-31 13:04 38M 
[   ]cmake-2.8.10-Darwin64-universal.tar.Z2012-10-31 13:04 53M 
[   ]cmake-2.8.10-Darwin64-universal.tar.gz2012-10-31 13:04 38M 
[TXT]cmake-2.8.10-IRIX64-64.sh2012-10-31 13:04 12M 
[   ]cmake-2.8.10-IRIX64-64.tar.Z2012-10-31 13:04 18M 
[   ]cmake-2.8.10-IRIX64-64.tar.gz2012-10-31 13:04 12M 
[TXT]cmake-2.8.10-IRIX64-n32.sh2012-10-31 13:04 12M 
[   ]cmake-2.8.10-IRIX64-n32.tar.Z2012-10-31 13:04 17M 
[   ]cmake-2.8.10-IRIX64-n32.tar.gz2012-10-31 13:04 12M 
[TXT]cmake-2.8.10-Linux-i386.sh2012-10-31 13:04 22M 
[   ]cmake-2.8.10-Linux-i386.tar.Z2012-10-31 13:04 30M 
[   ]cmake-2.8.10-Linux-i386.tar.gz2012-10-31 13:04 22M 
[TXT]cmake-2.8.10-SHA-256.txt2016-04-13 12:48 2.1K 
[TXT]cmake-2.8.10-SHA-256.txt.asc2016-04-13 12:48 819  
[TXT]cmake-2.8.10-rc1-AIX-powerpc.sh2012-10-02 13:28 20M 
[   ]cmake-2.8.10-rc1-AIX-powerpc.tar.Z2012-10-02 13:28 28M 
[   ]cmake-2.8.10-rc1-AIX-powerpc.tar.gz2012-10-02 13:28 20M 
[   ]cmake-2.8.10-rc1-Darwin-universal.dmg2012-10-02 13:28 41M 
[   ]cmake-2.8.10-rc1-Darwin-universal.tar.Z2012-10-02 13:28 58M 
[   ]cmake-2.8.10-rc1-Darwin-universal.tar.gz2012-10-02 13:28 40M 
[   ]cmake-2.8.10-rc1-Darwin64-universal.dmg2012-10-02 13:28 38M 
[   ]cmake-2.8.10-rc1-Darwin64-universal.tar.Z2012-10-02 13:28 53M 
[   ]cmake-2.8.10-rc1-Darwin64-universal.tar.gz2012-10-02 13:28 38M 
[TXT]cmake-2.8.10-rc1-IRIX64-64.sh2012-10-02 13:27 12M 
[   ]cmake-2.8.10-rc1-IRIX64-64.tar.Z2012-10-02 13:27 18M 
[   ]cmake-2.8.10-rc1-IRIX64-64.tar.gz2012-10-02 13:27 12M 
[TXT]cmake-2.8.10-rc1-IRIX64-n32.sh2012-10-02 13:27 12M 
[   ]cmake-2.8.10-rc1-IRIX64-n32.tar.Z2012-10-02 13:27 17M 
[   ]cmake-2.8.10-rc1-IRIX64-n32.tar.gz2012-10-02 13:27 12M 
[TXT]cmake-2.8.10-rc1-Linux-i386.sh2012-10-02 13:27 22M 
[   ]cmake-2.8.10-rc1-Linux-i386.tar.Z2012-10-02 13:27 30M 
[   ]cmake-2.8.10-rc1-Linux-i386.tar.gz2012-10-02 13:27 22M 
[TXT]cmake-2.8.10-rc1-SHA-256.txt2016-04-13 12:48 2.2K 
[TXT]cmake-2.8.10-rc1-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-2.8.10-rc1-win32-x86.exe2012-10-02 13:27 9.6M 
[   ]cmake-2.8.10-rc1-win32-x86.zip2012-10-02 13:27 12M 
[   ]cmake-2.8.10-rc1.tar.Z2012-10-02 13:27 8.6M 
[   ]cmake-2.8.10-rc1.tar.gz2012-10-02 13:27 5.5M 
[   ]cmake-2.8.10-rc1.zip2012-10-02 13:27 7.4M 
[TXT]cmake-2.8.10-rc2-AIX-powerpc.sh2012-10-19 09:26 20M 
[   ]cmake-2.8.10-rc2-AIX-powerpc.tar.Z2012-10-19 09:26 28M 
[   ]cmake-2.8.10-rc2-AIX-powerpc.tar.gz2012-10-19 09:26 20M 
[   ]cmake-2.8.10-rc2-Darwin-universal.dmg2012-10-19 09:26 41M 
[   ]cmake-2.8.10-rc2-Darwin-universal.tar.Z2012-10-19 09:26 58M 
[   ]cmake-2.8.10-rc2-Darwin-universal.tar.gz2012-10-19 09:26 41M 
[   ]cmake-2.8.10-rc2-Darwin64-universal.dmg2012-10-19 09:25 38M 
[   ]cmake-2.8.10-rc2-Darwin64-universal.tar.Z2012-10-19 09:25 53M 
[   ]cmake-2.8.10-rc2-Darwin64-universal.tar.gz2012-10-19 09:25 38M 
[TXT]cmake-2.8.10-rc2-IRIX64-64.sh2012-10-19 09:25 12M 
[   ]cmake-2.8.10-rc2-IRIX64-64.tar.Z2012-10-19 09:25 18M 
[   ]cmake-2.8.10-rc2-IRIX64-64.tar.gz2012-10-19 09:25 12M 
[TXT]cmake-2.8.10-rc2-IRIX64-n32.sh2012-10-19 09:25 12M 
[   ]cmake-2.8.10-rc2-IRIX64-n32.tar.Z2012-10-19 09:25 17M 
[   ]cmake-2.8.10-rc2-IRIX64-n32.tar.gz2012-10-19 09:25 12M 
[TXT]cmake-2.8.10-rc2-Linux-i386.sh2012-10-19 09:25 22M 
[   ]cmake-2.8.10-rc2-Linux-i386.tar.Z2012-10-19 09:24 30M 
[   ]cmake-2.8.10-rc2-Linux-i386.tar.gz2012-10-19 09:24 22M 
[TXT]cmake-2.8.10-rc2-SHA-256.txt2016-04-13 12:48 2.2K 
[TXT]cmake-2.8.10-rc2-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-2.8.10-rc2-win32-x86.exe2012-10-19 09:24 9.6M 
[   ]cmake-2.8.10-rc2-win32-x86.zip2012-10-19 09:24 12M 
[   ]cmake-2.8.10-rc2.tar.Z2012-10-19 09:24 8.6M 
[   ]cmake-2.8.10-rc2.tar.gz2012-10-19 09:24 5.5M 
[   ]cmake-2.8.10-rc2.zip2012-10-19 09:24 7.4M 
[TXT]cmake-2.8.10-rc3-AIX-powerpc.sh2012-10-24 15:11 20M 
[   ]cmake-2.8.10-rc3-AIX-powerpc.tar.Z2012-10-24 15:11 28M 
[   ]cmake-2.8.10-rc3-AIX-powerpc.tar.gz2012-10-24 15:10 20M 
[   ]cmake-2.8.10-rc3-Darwin-universal.dmg2012-10-24 15:10 41M 
[   ]cmake-2.8.10-rc3-Darwin-universal.tar.Z2012-10-24 15:10 58M 
[   ]cmake-2.8.10-rc3-Darwin-universal.tar.gz2012-10-24 15:10 41M 
[   ]cmake-2.8.10-rc3-Darwin64-universal.dmg2012-10-24 15:10 38M 
[   ]cmake-2.8.10-rc3-Darwin64-universal.tar.Z2012-10-24 15:10 53M 
[   ]cmake-2.8.10-rc3-Darwin64-universal.tar.gz2012-10-24 15:10 38M 
[TXT]cmake-2.8.10-rc3-IRIX64-64.sh2012-10-24 15:10 12M 
[   ]cmake-2.8.10-rc3-IRIX64-64.tar.Z2012-10-24 15:10 18M 
[   ]cmake-2.8.10-rc3-IRIX64-64.tar.gz2012-10-24 15:10 12M 
[TXT]cmake-2.8.10-rc3-IRIX64-n32.sh2012-10-24 15:10 12M 
[   ]cmake-2.8.10-rc3-IRIX64-n32.tar.Z2012-10-24 15:10 17M 
[   ]cmake-2.8.10-rc3-IRIX64-n32.tar.gz2012-10-24 15:10 12M 
[TXT]cmake-2.8.10-rc3-Linux-i386.sh2012-10-24 15:10 22M 
[   ]cmake-2.8.10-rc3-Linux-i386.tar.Z2012-10-24 15:10 30M 
[   ]cmake-2.8.10-rc3-Linux-i386.tar.gz2012-10-24 15:10 22M 
[TXT]cmake-2.8.10-rc3-SHA-256.txt2016-04-13 12:48 2.2K 
[TXT]cmake-2.8.10-rc3-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-2.8.10-rc3-win32-x86.exe2012-10-24 15:10 9.6M 
[   ]cmake-2.8.10-rc3-win32-x86.zip2012-10-24 15:09 12M 
[   ]cmake-2.8.10-rc3.tar.Z2012-10-24 15:09 8.7M 
[   ]cmake-2.8.10-rc3.tar.gz2012-10-24 15:09 5.5M 
[   ]cmake-2.8.10-rc3.zip2012-10-24 15:09 7.4M 
[   ]cmake-2.8.10-win32-x86.exe2012-10-31 13:04 9.6M 
[   ]cmake-2.8.10-win32-x86.zip2012-10-31 13:04 12M 
[TXT]cmake-2.8.10.1-AIX-powerpc.sh2012-11-07 11:48 20M 
[   ]cmake-2.8.10.1-AIX-powerpc.tar.Z2012-11-07 11:48 28M 
[   ]cmake-2.8.10.1-AIX-powerpc.tar.gz2012-11-07 11:48 20M 
[   ]cmake-2.8.10.1-Darwin-universal.dmg2012-11-07 11:48 41M 
[   ]cmake-2.8.10.1-Darwin-universal.tar.Z2012-11-07 11:48 58M 
[   ]cmake-2.8.10.1-Darwin-universal.tar.gz2012-11-07 11:48 41M 
[   ]cmake-2.8.10.1-Darwin64-universal.dmg2012-11-07 11:48 38M 
[   ]cmake-2.8.10.1-Darwin64-universal.tar.Z2012-11-07 11:48 53M 
[   ]cmake-2.8.10.1-Darwin64-universal.tar.gz2012-11-07 11:48 38M 
[TXT]cmake-2.8.10.1-IRIX64-64.sh2012-11-07 11:48 12M 
[   ]cmake-2.8.10.1-IRIX64-64.tar.Z2012-11-07 11:48 18M 
[   ]cmake-2.8.10.1-IRIX64-64.tar.gz2012-11-07 11:48 12M 
[TXT]cmake-2.8.10.1-IRIX64-n32.sh2012-11-07 11:47 12M 
[   ]cmake-2.8.10.1-IRIX64-n32.tar.Z2012-11-07 11:47 17M 
[   ]cmake-2.8.10.1-IRIX64-n32.tar.gz2012-11-07 11:47 12M 
[TXT]cmake-2.8.10.1-Linux-i386.sh2012-11-07 11:47 22M 
[   ]cmake-2.8.10.1-Linux-i386.tar.Z2012-11-07 11:47 30M 
[   ]cmake-2.8.10.1-Linux-i386.tar.gz2012-11-07 11:47 22M 
[TXT]cmake-2.8.10.1-SHA-256.txt2016-04-13 12:48 2.2K 
[TXT]cmake-2.8.10.1-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-2.8.10.1-win32-x86.exe2012-11-07 11:47 9.6M 
[   ]cmake-2.8.10.1-win32-x86.zip2012-11-07 11:47 12M 
[   ]cmake-2.8.10.1.tar.Z2012-11-07 11:47 8.6M 
[   ]cmake-2.8.10.1.tar.gz2012-11-07 11:47 5.5M 
[   ]cmake-2.8.10.1.zip2012-11-07 11:47 7.4M 
[TXT]cmake-2.8.10.2-AIX-powerpc.sh2012-11-27 15:05 20M 
[   ]cmake-2.8.10.2-AIX-powerpc.tar.Z2012-11-27 15:05 28M 
[   ]cmake-2.8.10.2-AIX-powerpc.tar.gz2012-11-27 15:04 20M 
[   ]cmake-2.8.10.2-Darwin-universal.dmg2012-11-27 15:04 41M 
[   ]cmake-2.8.10.2-Darwin-universal.tar.Z2012-11-27 15:04 58M 
[   ]cmake-2.8.10.2-Darwin-universal.tar.gz2012-11-27 15:04 41M 
[   ]cmake-2.8.10.2-Darwin64-universal.dmg2012-11-27 15:04 38M 
[   ]cmake-2.8.10.2-Darwin64-universal.tar.Z2012-11-27 15:04 53M 
[   ]cmake-2.8.10.2-Darwin64-universal.tar.gz2012-11-27 15:04 38M 
[TXT]cmake-2.8.10.2-IRIX64-64.sh2012-11-27 15:04 12M 
[   ]cmake-2.8.10.2-IRIX64-64.tar.Z2012-11-27 15:04 18M 
[   ]cmake-2.8.10.2-IRIX64-64.tar.gz2012-11-27 15:04 12M 
[TXT]cmake-2.8.10.2-IRIX64-n32.sh2012-11-27 15:04 12M 
[   ]cmake-2.8.10.2-IRIX64-n32.tar.Z2012-11-27 15:04 17M 
[   ]cmake-2.8.10.2-IRIX64-n32.tar.gz2012-11-27 15:04 12M 
[TXT]cmake-2.8.10.2-Linux-i386.sh2012-11-27 15:04 22M 
[   ]cmake-2.8.10.2-Linux-i386.tar.Z2012-11-27 15:04 30M 
[   ]cmake-2.8.10.2-Linux-i386.tar.gz2012-11-27 15:04 22M 
[TXT]cmake-2.8.10.2-SHA-256.txt2016-04-13 12:48 2.2K 
[TXT]cmake-2.8.10.2-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-2.8.10.2-win32-x86.exe2012-11-27 15:04 9.6M 
[   ]cmake-2.8.10.2-win32-x86.zip2012-11-27 15:03 12M 
[   ]cmake-2.8.10.2.tar.Z2012-11-27 15:03 8.7M 
[   ]cmake-2.8.10.2.tar.gz2012-11-27 15:03 5.5M 
[   ]cmake-2.8.10.2.zip2012-11-27 15:03 7.4M 
[   ]cmake-2.8.10.tar.Z2012-10-31 13:03 8.7M 
[   ]cmake-2.8.10.tar.gz2012-10-31 13:03 5.5M 
[   ]cmake-2.8.10.zip2012-10-31 13:03 7.4M 
[TXT]cmake-2.8.11-AIX-powerpc.sh2013-06-07 14:42 21M 
[   ]cmake-2.8.11-AIX-powerpc.tar.Z2013-06-07 14:42 30M 
[   ]cmake-2.8.11-AIX-powerpc.tar.gz2013-06-07 14:42 21M 
[   ]cmake-2.8.11-Darwin-universal.dmg2013-05-15 15:54 42M 
[   ]cmake-2.8.11-Darwin-universal.tar.Z2013-05-15 15:54 59M 
[   ]cmake-2.8.11-Darwin-universal.tar.gz2013-05-15 15:54 42M 
[   ]cmake-2.8.11-Darwin64-universal.dmg2013-05-15 15:54 39M 
[   ]cmake-2.8.11-Darwin64-universal.tar.Z2013-05-15 15:54 55M 
[   ]cmake-2.8.11-Darwin64-universal.tar.gz2013-05-15 15:54 39M 
[TXT]cmake-2.8.11-IRIX64-64.sh2013-05-15 15:53 13M 
[   ]cmake-2.8.11-IRIX64-64.tar.Z2013-05-15 15:53 19M 
[   ]cmake-2.8.11-IRIX64-64.tar.gz2013-05-15 15:53 13M 
[TXT]cmake-2.8.11-IRIX64-n32.sh2013-05-15 15:53 12M 
[   ]cmake-2.8.11-IRIX64-n32.tar.Z2013-05-15 15:53 18M 
[   ]cmake-2.8.11-IRIX64-n32.tar.gz2013-05-15 15:53 12M 
[TXT]cmake-2.8.11-Linux-i386.sh2013-05-15 15:53 23M 
[   ]cmake-2.8.11-Linux-i386.tar.Z2013-05-15 15:53 31M 
[   ]cmake-2.8.11-Linux-i386.tar.gz2013-05-15 15:53 23M 
[TXT]cmake-2.8.11-SHA-256.txt2016-04-13 12:48 2.4K 
[TXT]cmake-2.8.11-SHA-256.txt.asc2016-04-13 12:48 819  
[TXT]cmake-2.8.11-rc1-AIX-powerpc.sh2013-03-14 17:16 21M 
[   ]cmake-2.8.11-rc1-AIX-powerpc.tar.Z2013-03-14 17:16 30M 
[   ]cmake-2.8.11-rc1-AIX-powerpc.tar.gz2013-03-14 17:16 21M 
[   ]cmake-2.8.11-rc1-Darwin-universal.dmg2013-03-14 17:16 42M 
[   ]cmake-2.8.11-rc1-Darwin-universal.tar.Z2013-03-14 17:16 59M 
[   ]cmake-2.8.11-rc1-Darwin-universal.tar.gz2013-03-14 17:16 41M 
[   ]cmake-2.8.11-rc1-Darwin64-universal.dmg2013-03-14 17:15 39M 
[   ]cmake-2.8.11-rc1-Darwin64-universal.tar.Z2013-03-14 17:15 55M 
[   ]cmake-2.8.11-rc1-Darwin64-universal.tar.gz2013-03-14 17:15 39M 
[TXT]cmake-2.8.11-rc1-IRIX64-64.sh2013-03-14 17:15 13M 
[   ]cmake-2.8.11-rc1-IRIX64-64.tar.Z2013-03-14 17:15 19M 
[   ]cmake-2.8.11-rc1-IRIX64-64.tar.gz2013-03-14 17:15 13M 
[TXT]cmake-2.8.11-rc1-IRIX64-n32.sh2013-03-14 17:15 12M 
[   ]cmake-2.8.11-rc1-IRIX64-n32.tar.Z2013-03-14 17:15 18M 
[   ]cmake-2.8.11-rc1-IRIX64-n32.tar.gz2013-03-14 17:15 12M 
[TXT]cmake-2.8.11-rc1-Linux-i386.sh2013-03-14 17:15 23M 
[   ]cmake-2.8.11-rc1-Linux-i386.tar.Z2013-03-14 17:15 31M 
[   ]cmake-2.8.11-rc1-Linux-i386.tar.gz2013-03-14 17:15 23M 
[TXT]cmake-2.8.11-rc1-SHA-256.txt2016-04-13 12:48 2.2K 
[TXT]cmake-2.8.11-rc1-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-2.8.11-rc1-win32-x86.exe2013-03-14 17:15 9.9M 
[   ]cmake-2.8.11-rc1-win32-x86.zip2013-03-14 17:14 12M 
[   ]cmake-2.8.11-rc1.tar.Z2013-03-14 17:14 8.8M 
[   ]cmake-2.8.11-rc1.tar.gz2013-03-14 17:14 5.6M 
[   ]cmake-2.8.11-rc1.zip2013-03-14 17:14 7.6M 
[TXT]cmake-2.8.11-rc2-AIX-powerpc.sh2013-04-05 18:01 21M 
[   ]cmake-2.8.11-rc2-AIX-powerpc.tar.Z2013-04-05 18:01 30M 
[   ]cmake-2.8.11-rc2-AIX-powerpc.tar.gz2013-04-05 18:01 21M 
[   ]cmake-2.8.11-rc2-Darwin-universal.dmg2013-04-05 18:01 42M 
[   ]cmake-2.8.11-rc2-Darwin-universal.tar.Z2013-04-05 18:01 59M 
[   ]cmake-2.8.11-rc2-Darwin-universal.tar.gz2013-04-05 18:01 42M 
[   ]cmake-2.8.11-rc2-Darwin64-universal.dmg2013-04-05 18:01 39M 
[   ]cmake-2.8.11-rc2-Darwin64-universal.tar.Z2013-04-05 18:01 55M 
[   ]cmake-2.8.11-rc2-Darwin64-universal.tar.gz2013-04-05 18:01 39M 
[TXT]cmake-2.8.11-rc2-IRIX64-64.sh2013-04-05 18:01 13M 
[   ]cmake-2.8.11-rc2-IRIX64-64.tar.Z2013-04-05 18:01 19M 
[   ]cmake-2.8.11-rc2-IRIX64-64.tar.gz2013-04-05 18:01 13M 
[TXT]cmake-2.8.11-rc2-IRIX64-n32.sh2013-04-05 18:01 12M 
[   ]cmake-2.8.11-rc2-IRIX64-n32.tar.Z2013-04-05 18:01 18M 
[   ]cmake-2.8.11-rc2-IRIX64-n32.tar.gz2013-04-05 18:00 12M 
[TXT]cmake-2.8.11-rc2-Linux-i386.sh2013-04-05 18:00 23M 
[   ]cmake-2.8.11-rc2-Linux-i386.tar.Z2013-04-05 18:00 31M 
[   ]cmake-2.8.11-rc2-Linux-i386.tar.gz2013-04-05 18:00 23M 
[TXT]cmake-2.8.11-rc2-SHA-256.txt2016-04-13 12:48 2.2K 
[TXT]cmake-2.8.11-rc2-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-2.8.11-rc2-win32-x86.exe2013-04-05 18:00 9.9M 
[   ]cmake-2.8.11-rc2-win32-x86.zip2013-04-05 18:00 12M 
[   ]cmake-2.8.11-rc2.tar.Z2013-04-05 18:00 8.8M 
[   ]cmake-2.8.11-rc2.tar.gz2013-04-05 18:00 5.6M 
[   ]cmake-2.8.11-rc2.zip2013-04-05 18:00 7.6M 
[TXT]cmake-2.8.11-rc3-AIX-powerpc.sh2013-04-18 17:33 21M 
[   ]cmake-2.8.11-rc3-AIX-powerpc.tar.Z2013-04-18 17:33 30M 
[   ]cmake-2.8.11-rc3-AIX-powerpc.tar.gz2013-04-18 17:33 21M 
[   ]cmake-2.8.11-rc3-Darwin-universal.dmg2013-04-18 17:33 42M 
[   ]cmake-2.8.11-rc3-Darwin-universal.tar.Z2013-04-18 17:33 59M 
[   ]cmake-2.8.11-rc3-Darwin-universal.tar.gz2013-04-18 17:33 42M 
[   ]cmake-2.8.11-rc3-Darwin64-universal.dmg2013-04-18 17:33 39M 
[   ]cmake-2.8.11-rc3-Darwin64-universal.tar.Z2013-04-18 17:33 55M 
[   ]cmake-2.8.11-rc3-Darwin64-universal.tar.gz2013-04-18 17:33 39M 
[TXT]cmake-2.8.11-rc3-IRIX64-64.sh2013-04-18 17:33 13M 
[   ]cmake-2.8.11-rc3-IRIX64-64.tar.Z2013-04-18 17:33 19M 
[   ]cmake-2.8.11-rc3-IRIX64-64.tar.gz2013-04-18 17:33 13M 
[TXT]cmake-2.8.11-rc3-IRIX64-n32.sh2013-04-18 17:33 12M 
[   ]cmake-2.8.11-rc3-IRIX64-n32.tar.Z2013-04-18 17:33 18M 
[   ]cmake-2.8.11-rc3-IRIX64-n32.tar.gz2013-04-18 17:33 12M 
[TXT]cmake-2.8.11-rc3-Linux-i386.sh2013-04-18 17:32 23M 
[   ]cmake-2.8.11-rc3-Linux-i386.tar.Z2013-04-18 17:32 31M 
[   ]cmake-2.8.11-rc3-Linux-i386.tar.gz2013-04-18 17:32 23M 
[TXT]cmake-2.8.11-rc3-SHA-256.txt2016-04-13 12:48 2.2K 
[TXT]cmake-2.8.11-rc3-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-2.8.11-rc3-win32-x86.exe2013-04-18 17:32 9.9M 
[   ]cmake-2.8.11-rc3-win32-x86.zip2013-04-18 17:32 12M 
[   ]cmake-2.8.11-rc3.tar.Z2013-04-18 17:32 8.8M 
[   ]cmake-2.8.11-rc3.tar.gz2013-04-18 17:32 5.6M 
[   ]cmake-2.8.11-rc3.zip2013-04-18 17:32 7.6M 
[TXT]cmake-2.8.11-rc4-AIX-powerpc.sh2013-05-08 09:54 21M 
[   ]cmake-2.8.11-rc4-AIX-powerpc.tar.Z2013-05-08 09:54 30M 
[   ]cmake-2.8.11-rc4-AIX-powerpc.tar.gz2013-05-08 09:54 21M 
[   ]cmake-2.8.11-rc4-Darwin-universal.dmg2013-05-08 09:54 42M 
[   ]cmake-2.8.11-rc4-Darwin-universal.tar.Z2013-05-08 09:54 59M 
[   ]cmake-2.8.11-rc4-Darwin-universal.tar.gz2013-05-08 09:54 42M 
[   ]cmake-2.8.11-rc4-Darwin64-universal.dmg2013-05-08 09:54 39M 
[   ]cmake-2.8.11-rc4-Darwin64-universal.tar.Z2013-05-08 09:54 55M 
[   ]cmake-2.8.11-rc4-Darwin64-universal.tar.gz2013-05-08 09:54 39M 
[TXT]cmake-2.8.11-rc4-IRIX64-64.sh2013-05-08 09:54 13M 
[   ]cmake-2.8.11-rc4-IRIX64-64.tar.Z2013-05-08 09:54 19M 
[   ]cmake-2.8.11-rc4-IRIX64-64.tar.gz2013-05-08 09:53 13M 
[TXT]cmake-2.8.11-rc4-IRIX64-n32.sh2013-05-08 09:53 12M 
[   ]cmake-2.8.11-rc4-IRIX64-n32.tar.Z2013-05-08 09:53 18M 
[   ]cmake-2.8.11-rc4-IRIX64-n32.tar.gz2013-05-08 09:53 12M 
[TXT]cmake-2.8.11-rc4-Linux-i386.sh2013-05-08 09:53 23M 
[   ]cmake-2.8.11-rc4-Linux-i386.tar.Z2013-05-08 09:53 31M 
[   ]cmake-2.8.11-rc4-Linux-i386.tar.gz2013-05-08 09:53 23M 
[TXT]cmake-2.8.11-rc4-SHA-256.txt2016-04-13 12:48 2.2K 
[TXT]cmake-2.8.11-rc4-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-2.8.11-rc4-win32-x86.exe2013-05-08 09:53 9.9M 
[   ]cmake-2.8.11-rc4-win32-x86.zip2013-05-08 09:53 12M 
[   ]cmake-2.8.11-rc4.tar.Z2013-05-08 09:53 8.9M 
[   ]cmake-2.8.11-rc4.tar.gz2013-05-08 09:53 5.6M 
[   ]cmake-2.8.11-rc4.zip2013-05-08 09:53 7.6M 
[   ]cmake-2.8.11-win32-x86.exe2013-05-15 15:53 9.9M 
[   ]cmake-2.8.11-win32-x86.zip2013-05-15 15:53 12M 
[TXT]cmake-2.8.11.1-AIX-powerpc.sh2013-06-07 14:41 21M 
[   ]cmake-2.8.11.1-AIX-powerpc.tar.Z2013-06-07 14:41 30M 
[   ]cmake-2.8.11.1-AIX-powerpc.tar.gz2013-06-07 14:41 21M 
[   ]cmake-2.8.11.1-Darwin-universal.dmg2013-06-07 14:41 42M 
[   ]cmake-2.8.11.1-Darwin-universal.tar.Z2013-06-07 14:41 59M 
[   ]cmake-2.8.11.1-Darwin-universal.tar.gz2013-06-07 14:41 42M 
[   ]cmake-2.8.11.1-Darwin64-universal.dmg2013-06-07 14:41 39M 
[   ]cmake-2.8.11.1-Darwin64-universal.tar.Z2013-06-07 14:41 55M 
[   ]cmake-2.8.11.1-Darwin64-universal.tar.gz2013-06-07 14:41 39M 
[TXT]cmake-2.8.11.1-IRIX64-64.sh2013-06-07 14:41 13M 
[   ]cmake-2.8.11.1-IRIX64-64.tar.Z2013-06-07 14:41 19M 
[   ]cmake-2.8.11.1-IRIX64-64.tar.gz2013-06-07 14:41 13M 
[TXT]cmake-2.8.11.1-IRIX64-n32.sh2013-06-07 14:41 12M 
[   ]cmake-2.8.11.1-IRIX64-n32.tar.Z2013-06-07 14:41 18M 
[   ]cmake-2.8.11.1-IRIX64-n32.tar.gz2013-06-07 14:41 12M 
[TXT]cmake-2.8.11.1-Linux-i386.sh2013-06-07 14:41 23M 
[   ]cmake-2.8.11.1-Linux-i386.tar.Z2013-06-07 14:40 31M 
[   ]cmake-2.8.11.1-Linux-i386.tar.gz2013-06-07 14:40 23M 
[TXT]cmake-2.8.11.1-SHA-256.txt2016-04-13 12:48 2.2K 
[TXT]cmake-2.8.11.1-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-2.8.11.1-win32-x86.exe2013-06-07 14:40 9.9M 
[   ]cmake-2.8.11.1-win32-x86.zip2013-06-07 14:40 12M 
[   ]cmake-2.8.11.1.tar.Z2013-06-07 14:40 8.9M 
[   ]cmake-2.8.11.1.tar.gz2013-06-07 14:40 5.6M 
[   ]cmake-2.8.11.1.zip2013-06-07 14:40 7.6M 
[TXT]cmake-2.8.11.2-AIX-powerpc.sh2013-07-03 11:53 21M 
[   ]cmake-2.8.11.2-AIX-powerpc.tar.Z2013-07-03 11:53 30M 
[   ]cmake-2.8.11.2-AIX-powerpc.tar.gz2013-07-03 11:53 21M 
[   ]cmake-2.8.11.2-Darwin-universal.dmg2013-07-03 11:53 42M 
[   ]cmake-2.8.11.2-Darwin-universal.tar.Z2013-07-03 11:53 59M 
[   ]cmake-2.8.11.2-Darwin-universal.tar.gz2013-07-03 11:53 42M 
[   ]cmake-2.8.11.2-Darwin64-universal.dmg2013-07-03 11:53 39M 
[   ]cmake-2.8.11.2-Darwin64-universal.tar.Z2013-07-03 11:53 55M 
[   ]cmake-2.8.11.2-Darwin64-universal.tar.gz2013-07-03 11:53 39M 
[TXT]cmake-2.8.11.2-IRIX64-64.sh2013-07-03 11:53 13M 
[   ]cmake-2.8.11.2-IRIX64-64.tar.Z2013-07-03 11:53 19M 
[   ]cmake-2.8.11.2-IRIX64-64.tar.gz2013-07-03 11:52 13M 
[TXT]cmake-2.8.11.2-IRIX64-n32.sh2013-07-03 11:52 12M 
[   ]cmake-2.8.11.2-IRIX64-n32.tar.Z2013-07-03 11:52 18M 
[   ]cmake-2.8.11.2-IRIX64-n32.tar.gz2013-07-03 11:52 12M 
[TXT]cmake-2.8.11.2-Linux-i386.sh2013-07-03 11:52 23M 
[   ]cmake-2.8.11.2-Linux-i386.tar.Z2013-07-03 11:52 31M 
[   ]cmake-2.8.11.2-Linux-i386.tar.gz2013-07-03 11:52 23M 
[TXT]cmake-2.8.11.2-SHA-256.txt2016-04-13 12:48 2.2K 
[TXT]cmake-2.8.11.2-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-2.8.11.2-win32-x86.exe2013-07-03 11:52 9.9M 
[   ]cmake-2.8.11.2-win32-x86.zip2013-07-03 11:52 12M 
[   ]cmake-2.8.11.2.tar.Z2013-07-03 11:52 8.9M 
[   ]cmake-2.8.11.2.tar.gz2013-07-03 11:52 5.6M 
[   ]cmake-2.8.11.2.zip2013-07-03 11:52 7.6M 
[   ]cmake-2.8.11.tar.Z2013-05-15 15:53 8.9M 
[   ]cmake-2.8.11.tar.gz2013-05-15 15:53 5.6M 
[   ]cmake-2.8.11.zip2013-05-15 15:53 7.6M 
[TXT]cmake-2.8.12-AIX-powerpc.sh2013-10-07 14:34 22M 
[   ]cmake-2.8.12-AIX-powerpc.tar.Z2013-10-07 14:34 32M 
[   ]cmake-2.8.12-AIX-powerpc.tar.gz2013-10-07 14:34 22M 
[   ]cmake-2.8.12-Darwin-universal.dmg2013-10-07 14:34 43M 
[   ]cmake-2.8.12-Darwin-universal.tar.Z2013-10-07 14:33 61M 
[   ]cmake-2.8.12-Darwin-universal.tar.gz2013-10-07 14:33 43M 
[   ]cmake-2.8.12-Darwin64-universal.dmg2013-10-07 14:33 41M 
[   ]cmake-2.8.12-Darwin64-universal.tar.Z2013-10-07 14:33 57M 
[   ]cmake-2.8.12-Darwin64-universal.tar.gz2013-10-07 14:33 40M 
[TXT]cmake-2.8.12-IRIX64-64.sh2013-10-07 14:33 13M 
[   ]cmake-2.8.12-IRIX64-64.tar.Z2013-10-07 14:33 20M 
[   ]cmake-2.8.12-IRIX64-64.tar.gz2013-10-07 14:33 13M 
[TXT]cmake-2.8.12-IRIX64-n32.sh2013-10-07 14:33 13M 
[   ]cmake-2.8.12-IRIX64-n32.tar.Z2013-10-07 14:33 19M 
[   ]cmake-2.8.12-IRIX64-n32.tar.gz2013-10-07 14:33 13M 
[TXT]cmake-2.8.12-Linux-i386.sh2013-10-07 14:33 24M 
[   ]cmake-2.8.12-Linux-i386.tar.Z2013-10-07 14:33 33M 
[   ]cmake-2.8.12-Linux-i386.tar.gz2013-10-07 14:33 24M 
[TXT]cmake-2.8.12-SHA-256.txt2016-04-13 12:48 2.1K 
[TXT]cmake-2.8.12-SHA-256.txt.asc2016-04-13 12:48 819  
[TXT]cmake-2.8.12-rc1-AIX-powerpc.sh2013-08-19 08:54 22M 
[   ]cmake-2.8.12-rc1-AIX-powerpc.tar.Z2013-08-19 08:54 32M 
[   ]cmake-2.8.12-rc1-AIX-powerpc.tar.gz2013-08-19 08:54 22M 
[   ]cmake-2.8.12-rc1-Darwin-universal.dmg2013-08-19 08:54 43M 
[   ]cmake-2.8.12-rc1-Darwin-universal.tar.Z2013-08-19 08:53 61M 
[   ]cmake-2.8.12-rc1-Darwin-universal.tar.gz2013-08-19 08:53 43M 
[   ]cmake-2.8.12-rc1-Darwin64-universal.dmg2013-08-19 08:53 40M 
[   ]cmake-2.8.12-rc1-Darwin64-universal.tar.Z2013-08-19 08:53 57M 
[   ]cmake-2.8.12-rc1-Darwin64-universal.tar.gz2013-08-19 08:53 40M 
[TXT]cmake-2.8.12-rc1-IRIX64-64.sh2013-08-19 08:53 13M 
[   ]cmake-2.8.12-rc1-IRIX64-64.tar.Z2013-08-19 08:53 20M 
[   ]cmake-2.8.12-rc1-IRIX64-64.tar.gz2013-08-19 08:53 13M 
[TXT]cmake-2.8.12-rc1-IRIX64-n32.sh2013-08-19 08:53 13M 
[   ]cmake-2.8.12-rc1-IRIX64-n32.tar.Z2013-08-19 08:53 19M 
[   ]cmake-2.8.12-rc1-IRIX64-n32.tar.gz2013-08-19 08:53 13M 
[TXT]cmake-2.8.12-rc1-Linux-i386.sh2013-08-19 08:52 24M 
[   ]cmake-2.8.12-rc1-Linux-i386.tar.Z2013-08-19 08:52 33M 
[   ]cmake-2.8.12-rc1-Linux-i386.tar.gz2013-08-19 08:52 24M 
[TXT]cmake-2.8.12-rc1-SHA-256.txt2016-04-13 12:48 2.2K 
[TXT]cmake-2.8.12-rc1-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-2.8.12-rc1-win32-x86.exe2013-08-19 08:52 10M 
[   ]cmake-2.8.12-rc1-win32-x86.zip2013-08-19 08:52 13M 
[   ]cmake-2.8.12-rc1.tar.Z2013-08-19 08:52 9.1M 
[   ]cmake-2.8.12-rc1.tar.gz2013-08-19 08:52 5.8M 
[   ]cmake-2.8.12-rc1.zip2013-08-19 08:52 8.0M 
[TXT]cmake-2.8.12-rc2-AIX-powerpc.sh2013-08-30 15:59 22M 
[   ]cmake-2.8.12-rc2-AIX-powerpc.tar.Z2013-08-30 15:59 32M 
[   ]cmake-2.8.12-rc2-AIX-powerpc.tar.gz2013-08-30 15:59 22M 
[   ]cmake-2.8.12-rc2-Darwin-universal.dmg2013-08-30 15:59 43M 
[   ]cmake-2.8.12-rc2-Darwin-universal.tar.Z2013-08-30 15:59 61M 
[   ]cmake-2.8.12-rc2-Darwin-universal.tar.gz2013-08-30 15:59 43M 
[   ]cmake-2.8.12-rc2-Darwin64-universal.dmg2013-08-30 15:59 40M 
[   ]cmake-2.8.12-rc2-Darwin64-universal.tar.Z2013-08-30 15:59 57M 
[   ]cmake-2.8.12-rc2-Darwin64-universal.tar.gz2013-08-30 15:58 40M 
[   ]cmake-2.8.12-rc2-IRIX64-64.tar.Z2013-08-30 15:58 20M 
[   ]cmake-2.8.12-rc2-IRIX64-64.tar.gz2013-08-30 15:58 13M 
[TXT]cmake-2.8.12-rc2-IRIX64-n32.sh2013-08-30 15:58 13M 
[   ]cmake-2.8.12-rc2-IRIX64-n32.tar.Z2013-08-30 15:58 19M 
[   ]cmake-2.8.12-rc2-IRIX64-n32.tar.gz2013-08-30 15:58 13M 
[TXT]cmake-2.8.12-rc2-Linux-i386.sh2013-08-30 15:58 24M 
[   ]cmake-2.8.12-rc2-Linux-i386.tar.Z2013-08-30 15:58 33M 
[   ]cmake-2.8.12-rc2-Linux-i386.tar.gz2013-08-30 15:58 24M 
[TXT]cmake-2.8.12-rc2-SHA-256.txt2016-04-13 12:48 2.1K 
[TXT]cmake-2.8.12-rc2-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-2.8.12-rc2-win32-x86.exe2013-08-30 15:58 10M 
[   ]cmake-2.8.12-rc2-win32-x86.zip2013-08-30 15:58 13M 
[   ]cmake-2.8.12-rc2.tar.Z2013-08-30 15:58 9.2M 
[   ]cmake-2.8.12-rc2.tar.gz2013-08-30 15:58 5.8M 
[   ]cmake-2.8.12-rc2.zip2013-08-30 15:58 8.0M 
[TXT]cmake-2.8.12-rc3-AIX-powerpc.sh2013-09-10 15:39 22M 
[   ]cmake-2.8.12-rc3-AIX-powerpc.tar.Z2013-09-10 15:39 32M 
[   ]cmake-2.8.12-rc3-AIX-powerpc.tar.gz2013-09-10 15:39 22M 
[   ]cmake-2.8.12-rc3-Darwin-universal.dmg2013-09-10 15:39 43M 
[   ]cmake-2.8.12-rc3-Darwin-universal.tar.Z2013-09-10 15:39 61M 
[   ]cmake-2.8.12-rc3-Darwin-universal.tar.gz2013-09-10 15:39 43M 
[   ]cmake-2.8.12-rc3-Darwin64-universal.dmg2013-09-10 15:39 41M 
[   ]cmake-2.8.12-rc3-Darwin64-universal.tar.Z2013-09-10 15:39 57M 
[   ]cmake-2.8.12-rc3-Darwin64-universal.tar.gz2013-09-10 15:39 40M 
[TXT]cmake-2.8.12-rc3-Linux-i386.sh2013-09-10 15:39 24M 
[   ]cmake-2.8.12-rc3-Linux-i386.tar.Z2013-09-10 15:39 33M 
[   ]cmake-2.8.12-rc3-Linux-i386.tar.gz2013-09-10 15:39 24M 
[TXT]cmake-2.8.12-rc3-SHA-256.txt2016-04-13 12:48 1.7K 
[TXT]cmake-2.8.12-rc3-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-2.8.12-rc3-win32-x86.exe2013-09-10 15:39 10M 
[   ]cmake-2.8.12-rc3-win32-x86.zip2013-09-10 15:38 13M 
[   ]cmake-2.8.12-rc3.tar.Z2013-09-10 15:38 9.1M 
[   ]cmake-2.8.12-rc3.tar.gz2013-09-10 15:38 5.8M 
[   ]cmake-2.8.12-rc3.zip2013-09-10 15:38 8.0M 
[TXT]cmake-2.8.12-rc4-AIX-powerpc.sh2013-10-01 16:23 22M 
[   ]cmake-2.8.12-rc4-AIX-powerpc.tar.Z2013-10-01 16:23 32M 
[   ]cmake-2.8.12-rc4-AIX-powerpc.tar.gz2013-10-01 16:23 22M 
[   ]cmake-2.8.12-rc4-Darwin-universal.dmg2013-10-01 16:23 43M 
[   ]cmake-2.8.12-rc4-Darwin-universal.tar.Z2013-10-01 16:23 61M 
[   ]cmake-2.8.12-rc4-Darwin-universal.tar.gz2013-10-01 16:23 43M 
[   ]cmake-2.8.12-rc4-Darwin64-universal.dmg2013-10-01 16:23 40M 
[   ]cmake-2.8.12-rc4-Darwin64-universal.tar.Z2013-10-01 16:23 57M 
[   ]cmake-2.8.12-rc4-Darwin64-universal.tar.gz2013-10-01 16:23 40M 
[TXT]cmake-2.8.12-rc4-IRIX64-64.sh2013-10-01 16:23 13M 
[   ]cmake-2.8.12-rc4-IRIX64-64.tar.Z2013-10-01 16:23 20M 
[   ]cmake-2.8.12-rc4-IRIX64-64.tar.gz2013-10-01 16:23 13M 
[TXT]cmake-2.8.12-rc4-IRIX64-n32.sh2013-10-01 16:23 13M 
[   ]cmake-2.8.12-rc4-IRIX64-n32.tar.Z2013-10-01 16:23 19M 
[   ]cmake-2.8.12-rc4-IRIX64-n32.tar.gz2013-10-01 16:23 13M 
[TXT]cmake-2.8.12-rc4-Linux-i386.sh2013-10-01 16:23 24M 
[   ]cmake-2.8.12-rc4-Linux-i386.tar.Z2013-10-01 16:23 33M 
[   ]cmake-2.8.12-rc4-Linux-i386.tar.gz2013-10-01 16:23 24M 
[TXT]cmake-2.8.12-rc4-SHA-256.txt2016-04-13 12:48 2.2K 
[TXT]cmake-2.8.12-rc4-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-2.8.12-rc4-win32-x86.exe2013-10-01 16:22 10M 
[   ]cmake-2.8.12-rc4-win32-x86.zip2013-10-01 16:22 13M 
[   ]cmake-2.8.12-rc4.tar.Z2013-10-01 16:22 9.1M 
[   ]cmake-2.8.12-rc4.tar.gz2013-10-01 16:22 5.8M 
[   ]cmake-2.8.12-rc4.zip2013-10-01 16:22 8.0M 
[   ]cmake-2.8.12-win32-x86.exe2013-10-07 14:33 10M 
[   ]cmake-2.8.12-win32-x86.zip2013-10-07 14:33 13M 
[TXT]cmake-2.8.12.1-AIX-powerpc.sh2013-11-06 10:48 22M 
[   ]cmake-2.8.12.1-AIX-powerpc.tar.Z2013-11-06 10:47 32M 
[   ]cmake-2.8.12.1-AIX-powerpc.tar.gz2013-11-06 10:47 22M 
[   ]cmake-2.8.12.1-Darwin-universal.dmg2013-11-06 10:47 43M 
[   ]cmake-2.8.12.1-Darwin-universal.tar.Z2013-11-06 10:47 61M 
[   ]cmake-2.8.12.1-Darwin-universal.tar.gz2013-11-06 10:47 43M 
[   ]cmake-2.8.12.1-Darwin64-universal.dmg2013-11-06 10:47 41M 
[   ]cmake-2.8.12.1-Darwin64-universal.tar.Z2013-11-06 10:46 57M 
[   ]cmake-2.8.12.1-Darwin64-universal.tar.gz2013-11-06 10:46 41M 
[TXT]cmake-2.8.12.1-IRIX64-64.sh2013-11-06 10:46 13M 
[   ]cmake-2.8.12.1-IRIX64-64.tar.Z2013-11-06 10:46 20M 
[   ]cmake-2.8.12.1-IRIX64-64.tar.gz2013-11-06 10:46 13M 
[TXT]cmake-2.8.12.1-IRIX64-n32.sh2013-11-06 10:46 13M 
[   ]cmake-2.8.12.1-IRIX64-n32.tar.Z2013-11-06 10:46 19M 
[   ]cmake-2.8.12.1-IRIX64-n32.tar.gz2013-11-06 10:46 13M 
[TXT]cmake-2.8.12.1-Linux-i386.sh2013-11-06 10:46 24M 
[   ]cmake-2.8.12.1-Linux-i386.tar.Z2013-11-06 10:46 33M 
[   ]cmake-2.8.12.1-Linux-i386.tar.gz2013-11-06 10:46 24M 
[TXT]cmake-2.8.12.1-SHA-256.txt2016-04-13 12:48 2.2K 
[TXT]cmake-2.8.12.1-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-2.8.12.1-win32-x86.exe2013-11-06 10:46 10M 
[   ]cmake-2.8.12.1-win32-x86.zip2013-11-06 10:46 13M 
[   ]cmake-2.8.12.1.tar.Z2013-11-06 10:45 9.1M 
[   ]cmake-2.8.12.1.tar.gz2013-11-06 10:45 5.8M 
[   ]cmake-2.8.12.1.zip2013-11-06 10:45 8.0M 
[TXT]cmake-2.8.12.2-AIX-powerpc.sh2014-01-16 14:49 22M 
[   ]cmake-2.8.12.2-AIX-powerpc.tar.Z2014-01-16 14:49 32M 
[   ]cmake-2.8.12.2-AIX-powerpc.tar.gz2014-01-16 14:49 22M 
[   ]cmake-2.8.12.2-Darwin-universal.dmg2014-01-16 14:48 43M 
[   ]cmake-2.8.12.2-Darwin-universal.tar.Z2014-01-16 14:48 61M 
[   ]cmake-2.8.12.2-Darwin-universal.tar.gz2014-01-16 14:48 43M 
[   ]cmake-2.8.12.2-Darwin64-universal.dmg2014-01-16 14:48 41M 
[   ]cmake-2.8.12.2-Darwin64-universal.tar.Z2014-01-16 14:48 57M 
[   ]cmake-2.8.12.2-Darwin64-universal.tar.gz2014-01-16 14:48 41M 
[TXT]cmake-2.8.12.2-IRIX64-64.sh2014-01-16 14:48 13M 
[   ]cmake-2.8.12.2-IRIX64-64.tar.Z2014-01-16 14:48 20M 
[   ]cmake-2.8.12.2-IRIX64-64.tar.gz2014-01-16 14:48 13M 
[TXT]cmake-2.8.12.2-IRIX64-n32.sh2014-01-16 14:48 13M 
[   ]cmake-2.8.12.2-IRIX64-n32.tar.Z2014-01-16 14:48 19M 
[   ]cmake-2.8.12.2-IRIX64-n32.tar.gz2014-01-16 14:48 13M 
[TXT]cmake-2.8.12.2-Linux-i386.sh2014-01-16 14:48 24M 
[   ]cmake-2.8.12.2-Linux-i386.tar.Z2014-01-16 14:48 33M 
[   ]cmake-2.8.12.2-Linux-i386.tar.gz2014-01-16 14:48 24M 
[TXT]cmake-2.8.12.2-SHA-256.txt2016-04-13 12:48 2.2K 
[TXT]cmake-2.8.12.2-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-2.8.12.2-win32-x86.exe2014-01-16 14:48 10M 
[   ]cmake-2.8.12.2-win32-x86.zip2014-01-16 14:48 13M 
[   ]cmake-2.8.12.2.tar.Z2014-01-16 14:48 9.2M 
[   ]cmake-2.8.12.2.tar.gz2014-01-16 14:48 5.8M 
[   ]cmake-2.8.12.2.zip2014-01-16 14:48 8.0M 
[   ]cmake-2.8.12.tar.Z2013-10-07 14:32 9.2M 
[   ]cmake-2.8.12.tar.gz2013-10-07 14:32 5.8M 
[   ]cmake-2.8.12.zip2013-10-07 14:32 8.0M 

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.0/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.0/index.html new file mode 100644 index 00000000..2583dcd7 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.0/index.html @@ -0,0 +1,209 @@ + + + + Index of /files/v3.0 + + +

Index of /files/v3.0

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]cmake-3.0.0-1-src.tar.bz22014-06-10 13:28 4.2M 
[   ]cmake-3.0.0-1.tar.bz22014-06-10 13:28 8.0M 
[   ]cmake-3.0.0-Darwin-universal.dmg2014-06-10 13:28 41M 
[   ]cmake-3.0.0-Darwin-universal.tar.Z2014-06-10 13:27 58M 
[   ]cmake-3.0.0-Darwin-universal.tar.gz2014-06-10 13:27 41M 
[   ]cmake-3.0.0-Darwin64-universal.dmg2014-06-10 13:27 39M 
[   ]cmake-3.0.0-Darwin64-universal.tar.Z2014-06-10 13:27 54M 
[   ]cmake-3.0.0-Darwin64-universal.tar.gz2014-06-10 13:27 39M 
[TXT]cmake-3.0.0-Linux-i386.sh2014-06-10 13:27 22M 
[   ]cmake-3.0.0-Linux-i386.tar.Z2014-06-10 13:27 31M 
[   ]cmake-3.0.0-Linux-i386.tar.gz2014-06-10 13:27 22M 
[TXT]cmake-3.0.0-SHA-256.txt2016-04-13 12:48 1.3K 
[TXT]cmake-3.0.0-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.0.0-rc1-1-src.tar.bz22014-02-28 13:54 4.2M 
[   ]cmake-3.0.0-rc1-1.tar.bz22014-02-28 13:54 8.0M 
[TXT]cmake-3.0.0-rc1-AIX-powerpc.sh2014-02-28 13:54 21M 
[   ]cmake-3.0.0-rc1-AIX-powerpc.tar.Z2014-02-28 13:54 31M 
[   ]cmake-3.0.0-rc1-AIX-powerpc.tar.gz2014-02-28 13:54 21M 
[   ]cmake-3.0.0-rc1-Darwin-universal.dmg2014-02-28 13:54 41M 
[   ]cmake-3.0.0-rc1-Darwin-universal.tar.Z2014-02-28 13:54 58M 
[   ]cmake-3.0.0-rc1-Darwin-universal.tar.gz2014-02-28 13:54 41M 
[   ]cmake-3.0.0-rc1-Darwin64-universal.dmg2014-02-28 13:54 39M 
[   ]cmake-3.0.0-rc1-Darwin64-universal.tar.Z2014-02-28 13:54 54M 
[   ]cmake-3.0.0-rc1-Darwin64-universal.tar.gz2014-02-28 13:54 39M 
[TXT]cmake-3.0.0-rc1-IRIX64-64.sh2014-02-28 13:54 13M 
[   ]cmake-3.0.0-rc1-IRIX64-64.tar.Z2014-02-28 13:54 19M 
[   ]cmake-3.0.0-rc1-IRIX64-64.tar.gz2014-02-28 13:54 13M 
[TXT]cmake-3.0.0-rc1-IRIX64-n32.sh2014-02-28 13:54 12M 
[   ]cmake-3.0.0-rc1-IRIX64-n32.tar.Z2014-02-28 13:54 19M 
[   ]cmake-3.0.0-rc1-IRIX64-n32.tar.gz2014-02-28 13:54 12M 
[TXT]cmake-3.0.0-rc1-Linux-i386.sh2014-02-28 13:54 22M 
[   ]cmake-3.0.0-rc1-Linux-i386.tar.Z2014-02-28 13:54 31M 
[   ]cmake-3.0.0-rc1-Linux-i386.tar.gz2014-02-28 13:53 22M 
[TXT]cmake-3.0.0-rc1-SHA-256.txt2016-04-13 12:48 2.2K 
[TXT]cmake-3.0.0-rc1-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.0.0-rc1-win32-x86.exe2014-02-28 13:53 11M 
[   ]cmake-3.0.0-rc1-win32-x86.zip2014-02-28 13:53 14M 
[   ]cmake-3.0.0-rc1.tar.Z2014-02-28 13:53 8.5M 
[   ]cmake-3.0.0-rc1.tar.gz2014-02-28 13:53 5.2M 
[   ]cmake-3.0.0-rc1.zip2014-02-28 13:53 8.0M 
[   ]cmake-3.0.0-rc2-1-src.tar.bz22014-03-19 10:29 4.2M 
[   ]cmake-3.0.0-rc2-1.tar.bz22014-03-19 10:28 8.0M 
[TXT]cmake-3.0.0-rc2-AIX-powerpc.sh2014-03-19 10:28 21M 
[   ]cmake-3.0.0-rc2-AIX-powerpc.tar.Z2014-03-19 10:28 31M 
[   ]cmake-3.0.0-rc2-AIX-powerpc.tar.gz2014-03-19 10:28 21M 
[   ]cmake-3.0.0-rc2-Darwin-universal.dmg2014-03-19 10:28 41M 
[   ]cmake-3.0.0-rc2-Darwin-universal.tar.Z2014-03-19 10:28 58M 
[   ]cmake-3.0.0-rc2-Darwin-universal.tar.gz2014-03-19 10:28 41M 
[   ]cmake-3.0.0-rc2-Darwin64-universal.dmg2014-03-19 10:28 39M 
[   ]cmake-3.0.0-rc2-Darwin64-universal.tar.Z2014-03-19 10:28 54M 
[   ]cmake-3.0.0-rc2-Darwin64-universal.tar.gz2014-03-19 10:28 39M 
[TXT]cmake-3.0.0-rc2-IRIX64-64.sh2014-03-19 10:28 13M 
[   ]cmake-3.0.0-rc2-IRIX64-64.tar.Z2014-03-19 10:28 19M 
[   ]cmake-3.0.0-rc2-IRIX64-64.tar.gz2014-03-19 10:28 13M 
[TXT]cmake-3.0.0-rc2-IRIX64-n32.sh2014-03-19 10:28 12M 
[   ]cmake-3.0.0-rc2-IRIX64-n32.tar.Z2014-03-19 10:28 19M 
[   ]cmake-3.0.0-rc2-IRIX64-n32.tar.gz2014-03-19 10:28 12M 
[TXT]cmake-3.0.0-rc2-Linux-i386.sh2014-03-19 10:28 22M 
[   ]cmake-3.0.0-rc2-Linux-i386.tar.Z2014-03-19 10:28 31M 
[   ]cmake-3.0.0-rc2-Linux-i386.tar.gz2014-03-19 10:28 22M 
[TXT]cmake-3.0.0-rc2-SHA-256.txt2016-04-13 12:48 2.2K 
[TXT]cmake-3.0.0-rc2-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.0.0-rc2-win32-x86.exe2014-03-19 10:28 11M 
[   ]cmake-3.0.0-rc2-win32-x86.zip2014-03-19 10:27 14M 
[   ]cmake-3.0.0-rc2.tar.Z2014-03-19 10:27 8.5M 
[   ]cmake-3.0.0-rc2.tar.gz2014-03-19 10:27 5.2M 
[   ]cmake-3.0.0-rc2.zip2014-03-19 10:27 8.0M 
[   ]cmake-3.0.0-rc3-1-src.tar.bz22014-03-26 13:00 4.2M 
[   ]cmake-3.0.0-rc3-1.tar.bz22014-03-26 13:00 8.0M 
[TXT]cmake-3.0.0-rc3-AIX-powerpc.sh2014-03-26 13:00 21M 
[   ]cmake-3.0.0-rc3-AIX-powerpc.tar.Z2014-03-26 13:00 31M 
[   ]cmake-3.0.0-rc3-AIX-powerpc.tar.gz2014-03-26 13:00 21M 
[   ]cmake-3.0.0-rc3-Darwin-universal.dmg2014-03-26 13:00 41M 
[   ]cmake-3.0.0-rc3-Darwin-universal.tar.Z2014-03-26 13:00 58M 
[   ]cmake-3.0.0-rc3-Darwin-universal.tar.gz2014-03-26 13:00 41M 
[   ]cmake-3.0.0-rc3-Darwin64-universal.dmg2014-03-26 12:59 39M 
[   ]cmake-3.0.0-rc3-Darwin64-universal.tar.Z2014-03-26 12:59 54M 
[   ]cmake-3.0.0-rc3-Darwin64-universal.tar.gz2014-03-26 12:59 39M 
[TXT]cmake-3.0.0-rc3-IRIX64-64.sh2014-03-26 12:59 13M 
[   ]cmake-3.0.0-rc3-IRIX64-64.tar.Z2014-03-26 12:59 19M 
[   ]cmake-3.0.0-rc3-IRIX64-64.tar.gz2014-03-26 12:59 13M 
[TXT]cmake-3.0.0-rc3-IRIX64-n32.sh2014-03-26 12:59 12M 
[   ]cmake-3.0.0-rc3-IRIX64-n32.tar.Z2014-03-26 12:59 19M 
[   ]cmake-3.0.0-rc3-IRIX64-n32.tar.gz2014-03-26 12:59 12M 
[TXT]cmake-3.0.0-rc3-SHA-256.txt2016-04-13 12:48 1.9K 
[TXT]cmake-3.0.0-rc3-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.0.0-rc3-win32-x86.exe2014-03-26 12:59 11M 
[   ]cmake-3.0.0-rc3-win32-x86.zip2014-03-26 12:59 14M 
[   ]cmake-3.0.0-rc3.tar.Z2014-03-26 12:59 8.4M 
[   ]cmake-3.0.0-rc3.tar.gz2014-03-26 12:59 5.2M 
[   ]cmake-3.0.0-rc3.zip2014-03-26 12:59 8.0M 
[   ]cmake-3.0.0-rc4-1-src.tar.bz22014-04-18 09:52 4.2M 
[   ]cmake-3.0.0-rc4-1.tar.bz22014-04-18 09:52 8.0M 
[TXT]cmake-3.0.0-rc4-AIX-powerpc.sh2014-04-18 09:52 22M 
[   ]cmake-3.0.0-rc4-AIX-powerpc.tar.Z2014-04-18 09:52 31M 
[   ]cmake-3.0.0-rc4-AIX-powerpc.tar.gz2014-04-18 09:52 22M 
[   ]cmake-3.0.0-rc4-Darwin-universal.dmg2014-04-18 09:52 41M 
[   ]cmake-3.0.0-rc4-Darwin-universal.tar.Z2014-04-18 09:52 58M 
[   ]cmake-3.0.0-rc4-Darwin-universal.tar.gz2014-04-18 09:51 41M 
[   ]cmake-3.0.0-rc4-Darwin64-universal.dmg2014-04-18 09:51 39M 
[   ]cmake-3.0.0-rc4-Darwin64-universal.tar.Z2014-04-18 09:51 54M 
[   ]cmake-3.0.0-rc4-Darwin64-universal.tar.gz2014-04-18 09:51 39M 
[TXT]cmake-3.0.0-rc4-IRIX64-64.sh2014-04-18 09:51 13M 
[   ]cmake-3.0.0-rc4-IRIX64-64.tar.Z2014-04-18 09:51 19M 
[   ]cmake-3.0.0-rc4-IRIX64-64.tar.gz2014-04-18 09:51 13M 
[TXT]cmake-3.0.0-rc4-IRIX64-n32.sh2014-04-18 09:51 12M 
[   ]cmake-3.0.0-rc4-IRIX64-n32.tar.Z2014-04-18 09:51 19M 
[   ]cmake-3.0.0-rc4-IRIX64-n32.tar.gz2014-04-18 09:51 12M 
[TXT]cmake-3.0.0-rc4-Linux-i386.sh2014-04-18 09:51 22M 
[   ]cmake-3.0.0-rc4-Linux-i386.tar.Z2014-04-18 09:51 31M 
[   ]cmake-3.0.0-rc4-Linux-i386.tar.gz2014-04-18 09:51 22M 
[TXT]cmake-3.0.0-rc4-SHA-256.txt2016-04-13 12:48 2.2K 
[TXT]cmake-3.0.0-rc4-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.0.0-rc4-win32-x86.exe2014-04-18 09:51 11M 
[   ]cmake-3.0.0-rc4-win32-x86.zip2014-04-18 09:51 14M 
[   ]cmake-3.0.0-rc4.tar.Z2014-04-18 09:51 8.5M 
[   ]cmake-3.0.0-rc4.tar.gz2014-04-18 09:51 5.2M 
[   ]cmake-3.0.0-rc4.zip2014-04-18 09:51 8.0M 
[   ]cmake-3.0.0-rc5-1-src.tar.bz22014-05-13 14:25 4.2M 
[   ]cmake-3.0.0-rc5-1.tar.bz22014-05-13 14:25 8.0M 
[   ]cmake-3.0.0-rc5-Darwin-universal.dmg2014-05-13 14:25 41M 
[   ]cmake-3.0.0-rc5-Darwin-universal.tar.Z2014-05-13 14:24 58M 
[   ]cmake-3.0.0-rc5-Darwin-universal.tar.gz2014-05-13 14:24 41M 
[   ]cmake-3.0.0-rc5-Darwin64-universal.dmg2014-05-13 14:24 39M 
[   ]cmake-3.0.0-rc5-Darwin64-universal.tar.Z2014-05-13 14:24 54M 
[   ]cmake-3.0.0-rc5-Darwin64-universal.tar.gz2014-05-13 14:24 39M 
[TXT]cmake-3.0.0-rc5-Linux-i386.sh2014-05-13 14:24 22M 
[   ]cmake-3.0.0-rc5-Linux-i386.tar.Z2014-05-13 14:24 31M 
[   ]cmake-3.0.0-rc5-Linux-i386.tar.gz2014-05-13 14:24 22M 
[TXT]cmake-3.0.0-rc5-SHA-256.txt2016-04-13 12:48 1.4K 
[TXT]cmake-3.0.0-rc5-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.0.0-rc5-win32-x86.exe2014-05-13 14:24 11M 
[   ]cmake-3.0.0-rc5-win32-x86.zip2014-05-13 14:24 14M 
[   ]cmake-3.0.0-rc5.tar.Z2014-05-13 14:24 8.5M 
[   ]cmake-3.0.0-rc5.tar.gz2014-05-13 14:24 5.2M 
[   ]cmake-3.0.0-rc5.zip2014-05-13 14:24 8.0M 
[   ]cmake-3.0.0-rc6-1-src.tar.bz22014-05-22 14:57 4.2M 
[   ]cmake-3.0.0-rc6-1.tar.bz22014-05-22 14:57 8.0M 
[   ]cmake-3.0.0-rc6-Darwin-universal.dmg2014-05-22 14:57 41M 
[   ]cmake-3.0.0-rc6-Darwin-universal.tar.Z2014-05-22 14:56 58M 
[   ]cmake-3.0.0-rc6-Darwin-universal.tar.gz2014-05-22 14:56 41M 
[   ]cmake-3.0.0-rc6-Darwin64-universal.dmg2014-05-22 14:56 39M 
[   ]cmake-3.0.0-rc6-Darwin64-universal.tar.Z2014-05-22 14:56 54M 
[   ]cmake-3.0.0-rc6-Darwin64-universal.tar.gz2014-05-22 14:56 39M 
[TXT]cmake-3.0.0-rc6-Linux-i386.sh2014-05-22 14:56 22M 
[   ]cmake-3.0.0-rc6-Linux-i386.tar.Z2014-05-22 14:56 31M 
[   ]cmake-3.0.0-rc6-Linux-i386.tar.gz2014-05-22 14:56 22M 
[TXT]cmake-3.0.0-rc6-SHA-256.txt2016-04-13 12:48 1.4K 
[TXT]cmake-3.0.0-rc6-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.0.0-rc6-win32-x86.exe2014-05-22 14:56 11M 
[   ]cmake-3.0.0-rc6-win32-x86.zip2014-05-22 14:56 14M 
[   ]cmake-3.0.0-rc6.tar.Z2014-05-22 14:56 8.5M 
[   ]cmake-3.0.0-rc6.tar.gz2014-05-22 14:56 5.2M 
[   ]cmake-3.0.0-rc6.zip2014-05-22 14:56 8.0M 
[   ]cmake-3.0.0-win32-x86.exe2014-06-10 13:27 11M 
[   ]cmake-3.0.0-win32-x86.zip2014-06-10 13:27 14M 
[   ]cmake-3.0.0.tar.Z2014-06-10 13:27 8.5M 
[   ]cmake-3.0.0.tar.gz2014-06-10 13:27 5.2M 
[   ]cmake-3.0.0.zip2014-06-10 13:27 7.9M 
[   ]cmake-3.0.1-1-src.tar.bz22014-09-11 09:19 4.2M 
[   ]cmake-3.0.1-1.tar.bz22014-09-11 09:19 8.0M 
[   ]cmake-3.0.1-Darwin-universal.dmg2014-09-11 09:19 41M 
[   ]cmake-3.0.1-Darwin-universal.tar.Z2014-09-11 09:19 58M 
[   ]cmake-3.0.1-Darwin-universal.tar.gz2014-09-11 09:19 41M 
[   ]cmake-3.0.1-Darwin64-universal.dmg2014-09-11 09:18 39M 
[   ]cmake-3.0.1-Darwin64-universal.tar.Z2014-09-11 09:18 54M 
[   ]cmake-3.0.1-Darwin64-universal.tar.gz2014-09-11 09:18 39M 
[TXT]cmake-3.0.1-Linux-i386.sh2014-09-11 09:18 22M 
[   ]cmake-3.0.1-Linux-i386.tar.Z2014-09-11 09:18 31M 
[   ]cmake-3.0.1-Linux-i386.tar.gz2014-09-11 09:18 22M 
[TXT]cmake-3.0.1-SHA-256.txt2016-04-13 12:48 1.3K 
[TXT]cmake-3.0.1-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.0.1-win32-x86.exe2014-09-11 09:18 11M 
[   ]cmake-3.0.1-win32-x86.zip2014-09-11 09:18 14M 
[   ]cmake-3.0.1.tar.Z2014-09-11 09:18 8.5M 
[   ]cmake-3.0.1.tar.gz2014-09-11 09:18 5.2M 
[   ]cmake-3.0.1.zip2014-09-11 09:18 7.9M 
[   ]cmake-3.0.2-1-src.tar.bz22014-09-11 12:19 4.2M 
[   ]cmake-3.0.2-1.tar.bz22014-09-11 12:19 8.0M 
[   ]cmake-3.0.2-Darwin-universal.dmg2014-09-11 12:19 41M 
[   ]cmake-3.0.2-Darwin-universal.tar.Z2014-09-11 12:19 58M 
[   ]cmake-3.0.2-Darwin-universal.tar.gz2014-09-11 12:19 41M 
[   ]cmake-3.0.2-Darwin64-universal.dmg2014-09-11 12:19 39M 
[   ]cmake-3.0.2-Darwin64-universal.tar.Z2014-09-11 12:19 54M 
[   ]cmake-3.0.2-Darwin64-universal.tar.gz2014-09-11 12:18 39M 
[TXT]cmake-3.0.2-Linux-i386.sh2014-09-11 12:18 22M 
[   ]cmake-3.0.2-Linux-i386.tar.Z2014-09-11 12:18 31M 
[   ]cmake-3.0.2-Linux-i386.tar.gz2014-09-11 12:18 22M 
[TXT]cmake-3.0.2-SHA-256.txt2016-04-13 12:48 1.3K 
[TXT]cmake-3.0.2-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.0.2-win32-x86.exe2014-09-11 12:18 11M 
[   ]cmake-3.0.2-win32-x86.zip2014-09-11 12:18 14M 
[   ]cmake-3.0.2.tar.Z2014-09-11 12:18 8.5M 
[   ]cmake-3.0.2.tar.gz2014-09-11 12:18 5.2M 
[   ]cmake-3.0.2.zip2014-09-11 12:18 7.9M 

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.1/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.1/index.html new file mode 100644 index 00000000..635d34c0 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.1/index.html @@ -0,0 +1,156 @@ + + + + Index of /files/v3.1 + + +

Index of /files/v3.1

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]cmake-3.1.0-1-src.tar.bz22014-12-17 13:10 4.5M 
[   ]cmake-3.1.0-1.tar.bz22014-12-17 13:10 9.0M 
[   ]cmake-3.1.0-Darwin-universal.dmg2014-12-17 13:10 45M 
[   ]cmake-3.1.0-Darwin-universal.tar.Z2014-12-17 13:10 63M 
[   ]cmake-3.1.0-Darwin-universal.tar.gz2014-12-17 13:10 44M 
[   ]cmake-3.1.0-Darwin64-universal.dmg2014-12-17 13:10 28M 
[   ]cmake-3.1.0-Darwin64-universal.tar.Z2014-12-17 13:10 40M 
[   ]cmake-3.1.0-Darwin64-universal.tar.gz2014-12-17 13:10 28M 
[   ]cmake-3.1.0-Darwin64.dmg2014-12-19 11:38 29M 
[   ]cmake-3.1.0-Darwin64.tar.Z2014-12-19 11:38 41M 
[   ]cmake-3.1.0-Darwin64.tar.gz2014-12-19 11:38 29M 
[TXT]cmake-3.1.0-Linux-i386.sh2014-12-17 13:10 24M 
[   ]cmake-3.1.0-Linux-i386.tar.Z2014-12-17 13:10 33M 
[   ]cmake-3.1.0-Linux-i386.tar.gz2014-12-17 13:10 24M 
[TXT]cmake-3.1.0-Linux-x86_64.sh2014-12-17 13:10 25M 
[   ]cmake-3.1.0-Linux-x86_64.tar.Z2014-12-17 13:10 35M 
[   ]cmake-3.1.0-Linux-x86_64.tar.gz2014-12-17 13:10 25M 
[TXT]cmake-3.1.0-SHA-256.txt2016-04-13 12:48 1.9K 
[TXT]cmake-3.1.0-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.1.0-rc1-1-src.tar.bz22014-10-28 14:09 4.5M 
[   ]cmake-3.1.0-rc1-1.tar.bz22014-10-28 14:09 9.0M 
[   ]cmake-3.1.0-rc1-Darwin-universal.dmg2014-10-28 14:09 45M 
[   ]cmake-3.1.0-rc1-Darwin-universal.tar.Z2014-10-28 14:09 63M 
[   ]cmake-3.1.0-rc1-Darwin-universal.tar.gz2014-10-28 14:09 44M 
[   ]cmake-3.1.0-rc1-Darwin64-universal.dmg2014-10-28 14:09 28M 
[   ]cmake-3.1.0-rc1-Darwin64-universal.tar.Z2014-10-28 14:09 40M 
[   ]cmake-3.1.0-rc1-Darwin64-universal.tar.gz2014-10-28 14:08 28M 
[TXT]cmake-3.1.0-rc1-Linux-i386.sh2014-10-28 14:08 24M 
[   ]cmake-3.1.0-rc1-Linux-i386.tar.Z2014-10-28 14:08 33M 
[   ]cmake-3.1.0-rc1-Linux-i386.tar.gz2014-10-28 14:08 24M 
[TXT]cmake-3.1.0-rc1-SHA-256.txt2016-04-13 12:48 1.4K 
[TXT]cmake-3.1.0-rc1-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.1.0-rc1-win32-x86.exe2014-10-28 14:08 12M 
[   ]cmake-3.1.0-rc1-win32-x86.zip2014-10-28 14:08 15M 
[   ]cmake-3.1.0-rc1.tar.Z2014-10-28 14:08 9.2M 
[   ]cmake-3.1.0-rc1.tar.gz2014-10-28 14:08 5.7M 
[   ]cmake-3.1.0-rc1.zip2014-10-28 14:08 9.0M 
[   ]cmake-3.1.0-rc2-1-src.tar.bz22014-11-13 11:51 4.5M 
[   ]cmake-3.1.0-rc2-1.tar.bz22014-11-13 11:51 9.0M 
[   ]cmake-3.1.0-rc2-Darwin-universal.dmg2014-11-13 11:51 45M 
[   ]cmake-3.1.0-rc2-Darwin-universal.tar.Z2014-11-13 11:51 63M 
[   ]cmake-3.1.0-rc2-Darwin-universal.tar.gz2014-11-13 11:50 44M 
[   ]cmake-3.1.0-rc2-Darwin64-universal.dmg2014-11-13 11:50 28M 
[   ]cmake-3.1.0-rc2-Darwin64-universal.tar.Z2014-11-13 11:50 40M 
[   ]cmake-3.1.0-rc2-Darwin64-universal.tar.gz2014-11-13 11:50 28M 
[TXT]cmake-3.1.0-rc2-Linux-i386.sh2014-11-13 11:50 24M 
[   ]cmake-3.1.0-rc2-Linux-i386.tar.Z2014-11-13 11:50 33M 
[   ]cmake-3.1.0-rc2-Linux-i386.tar.gz2014-11-13 11:50 24M 
[TXT]cmake-3.1.0-rc2-SHA-256.txt2016-04-13 12:48 1.4K 
[TXT]cmake-3.1.0-rc2-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.1.0-rc2-win32-x86.exe2014-11-13 11:50 12M 
[   ]cmake-3.1.0-rc2-win32-x86.zip2014-11-13 11:50 15M 
[   ]cmake-3.1.0-rc2.tar.Z2014-11-13 11:50 9.2M 
[   ]cmake-3.1.0-rc2.tar.gz2014-11-13 11:50 5.7M 
[   ]cmake-3.1.0-rc2.zip2014-11-13 11:50 9.0M 
[   ]cmake-3.1.0-rc3-1-src.tar.bz22014-12-09 16:53 4.5M 
[   ]cmake-3.1.0-rc3-1.tar.bz22014-12-09 16:53 9.0M 
[   ]cmake-3.1.0-rc3-Darwin-universal.dmg2014-12-09 16:53 45M 
[   ]cmake-3.1.0-rc3-Darwin-universal.tar.Z2014-12-09 16:52 63M 
[   ]cmake-3.1.0-rc3-Darwin-universal.tar.gz2014-12-09 16:52 44M 
[   ]cmake-3.1.0-rc3-Darwin64-universal.dmg2014-12-09 16:52 28M 
[   ]cmake-3.1.0-rc3-Darwin64-universal.tar.Z2014-12-09 16:52 40M 
[   ]cmake-3.1.0-rc3-Darwin64-universal.tar.gz2014-12-09 16:52 28M 
[TXT]cmake-3.1.0-rc3-Linux-i386.sh2014-12-09 16:52 24M 
[   ]cmake-3.1.0-rc3-Linux-i386.tar.Z2014-12-09 16:52 33M 
[   ]cmake-3.1.0-rc3-Linux-i386.tar.gz2014-12-09 16:52 24M 
[TXT]cmake-3.1.0-rc3-Linux-x86_64.sh2014-12-09 16:52 25M 
[   ]cmake-3.1.0-rc3-Linux-x86_64.tar.Z2014-12-09 16:52 35M 
[   ]cmake-3.1.0-rc3-Linux-x86_64.tar.gz2014-12-09 16:52 25M 
[TXT]cmake-3.1.0-rc3-SHA-256.txt2016-04-13 12:48 1.6K 
[TXT]cmake-3.1.0-rc3-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.1.0-rc3-win32-x86.exe2014-12-09 16:52 12M 
[   ]cmake-3.1.0-rc3-win32-x86.zip2014-12-09 16:52 15M 
[   ]cmake-3.1.0-rc3.tar.Z2014-12-09 16:52 9.2M 
[   ]cmake-3.1.0-rc3.tar.gz2014-12-09 16:52 5.7M 
[   ]cmake-3.1.0-rc3.zip2014-12-09 16:52 9.0M 
[   ]cmake-3.1.0-win32-x86.exe2014-12-17 13:10 12M 
[   ]cmake-3.1.0-win32-x86.zip2014-12-17 13:10 15M 
[   ]cmake-3.1.0.tar.Z2014-12-17 13:10 9.2M 
[   ]cmake-3.1.0.tar.gz2014-12-17 13:10 5.7M 
[   ]cmake-3.1.0.zip2014-12-17 13:10 9.0M 
[   ]cmake-3.1.1-1-src.tar.bz22015-01-22 16:49 4.5M 
[   ]cmake-3.1.1-1.tar.bz22015-01-22 16:49 9.1M 
[   ]cmake-3.1.1-Darwin-universal.dmg2015-01-22 16:49 45M 
[   ]cmake-3.1.1-Darwin-universal.tar.Z2015-01-22 16:49 64M 
[   ]cmake-3.1.1-Darwin-universal.tar.gz2015-01-22 16:49 44M 
[   ]cmake-3.1.1-Darwin-x86_64.dmg2015-01-22 16:48 29M 
[   ]cmake-3.1.1-Darwin-x86_64.tar.Z2015-01-22 16:48 41M 
[   ]cmake-3.1.1-Darwin-x86_64.tar.gz2015-01-22 16:48 29M 
[TXT]cmake-3.1.1-Linux-i386.sh2015-01-22 16:48 24M 
[   ]cmake-3.1.1-Linux-i386.tar.Z2015-01-22 16:48 33M 
[   ]cmake-3.1.1-Linux-i386.tar.gz2015-01-22 16:48 24M 
[TXT]cmake-3.1.1-Linux-x86_64.sh2015-01-22 16:48 25M 
[   ]cmake-3.1.1-Linux-x86_64.tar.Z2015-01-22 16:48 35M 
[   ]cmake-3.1.1-Linux-x86_64.tar.gz2015-01-22 16:48 25M 
[TXT]cmake-3.1.1-SHA-256.txt2016-04-13 12:48 1.6K 
[TXT]cmake-3.1.1-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.1.1-win32-x86.exe2015-01-22 16:48 12M 
[   ]cmake-3.1.1-win32-x86.zip2015-01-22 16:48 15M 
[   ]cmake-3.1.1.tar.Z2015-01-22 16:48 9.2M 
[   ]cmake-3.1.1.tar.gz2015-01-22 16:48 5.7M 
[   ]cmake-3.1.1.zip2015-01-22 16:48 9.0M 
[   ]cmake-3.1.2-Darwin-universal.dmg2015-02-05 10:06 45M 
[   ]cmake-3.1.2-Darwin-universal.tar.Z2015-02-05 10:06 64M 
[   ]cmake-3.1.2-Darwin-universal.tar.gz2015-02-05 10:06 44M 
[   ]cmake-3.1.2-Darwin-x86_64.dmg2015-02-05 10:06 29M 
[   ]cmake-3.1.2-Darwin-x86_64.tar.Z2015-02-05 10:06 41M 
[   ]cmake-3.1.2-Darwin-x86_64.tar.gz2015-02-05 10:06 29M 
[TXT]cmake-3.1.2-Linux-i386.sh2015-02-05 10:06 24M 
[   ]cmake-3.1.2-Linux-i386.tar.Z2015-02-05 10:06 33M 
[   ]cmake-3.1.2-Linux-i386.tar.gz2015-02-05 10:05 24M 
[TXT]cmake-3.1.2-Linux-x86_64.sh2015-02-05 10:05 25M 
[   ]cmake-3.1.2-Linux-x86_64.tar.Z2015-02-05 10:05 35M 
[   ]cmake-3.1.2-Linux-x86_64.tar.gz2015-02-05 10:05 25M 
[TXT]cmake-3.1.2-SHA-256.txt2016-04-13 12:48 1.6K 
[TXT]cmake-3.1.2-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.1.2-win32-x86.exe2015-02-05 10:05 12M 
[   ]cmake-3.1.2-win32-x86.zip2015-02-05 10:05 15M 
[   ]cmake-3.1.2.tar.Z2015-02-05 10:05 9.2M 
[   ]cmake-3.1.2.tar.gz2015-02-05 10:05 5.7M 
[   ]cmake-3.1.2.zip2015-02-05 10:05 9.0M 
[   ]cmake-3.1.3-1-src.tar.bz22015-02-12 17:40 4.5M 
[   ]cmake-3.1.3-1.tar.bz22015-02-12 17:40 9.0M 
[   ]cmake-3.1.3-Darwin-universal.dmg2015-02-12 17:40 45M 
[   ]cmake-3.1.3-Darwin-universal.tar.Z2015-02-12 17:40 64M 
[   ]cmake-3.1.3-Darwin-universal.tar.gz2015-02-12 17:40 44M 
[   ]cmake-3.1.3-Darwin-x86_64.dmg2015-02-12 17:40 29M 
[   ]cmake-3.1.3-Darwin-x86_64.tar.Z2015-02-12 17:40 41M 
[   ]cmake-3.1.3-Darwin-x86_64.tar.gz2015-02-12 17:39 29M 
[TXT]cmake-3.1.3-Linux-i386.sh2015-02-12 17:39 24M 
[   ]cmake-3.1.3-Linux-i386.tar.Z2015-02-12 17:39 33M 
[   ]cmake-3.1.3-Linux-i386.tar.gz2015-02-12 17:39 24M 
[TXT]cmake-3.1.3-Linux-x86_64.sh2015-02-12 17:39 25M 
[   ]cmake-3.1.3-Linux-x86_64.tar.Z2015-02-12 17:39 35M 
[   ]cmake-3.1.3-Linux-x86_64.tar.gz2015-02-12 17:39 25M 
[TXT]cmake-3.1.3-SHA-256.txt2016-04-13 12:48 1.6K 
[TXT]cmake-3.1.3-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.1.3-win32-x86.exe2015-02-12 17:39 12M 
[   ]cmake-3.1.3-win32-x86.zip2015-02-12 17:39 15M 
[   ]cmake-3.1.3.tar.Z2015-02-12 17:39 9.2M 
[   ]cmake-3.1.3.tar.gz2015-02-12 17:39 5.7M 
[   ]cmake-3.1.3.zip2015-02-12 17:39 9.0M 

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.10/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.10/index.html new file mode 100644 index 00000000..df654a36 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.10/index.html @@ -0,0 +1,131 @@ + + + + Index of /files/v3.10 + + +

Index of /files/v3.10

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]cmake-3.10.0-Darwin-x86_64.dmg2017-11-20 16:00 26M 
[   ]cmake-3.10.0-Darwin-x86_64.tar.gz2017-11-20 16:00 26M 
[TXT]cmake-3.10.0-Linux-x86_64.sh2017-11-20 16:00 33M 
[   ]cmake-3.10.0-Linux-x86_64.tar.gz2017-11-20 16:00 33M 
[TXT]cmake-3.10.0-SHA-256.txt2017-11-20 16:00 1.0K 
[TXT]cmake-3.10.0-SHA-256.txt.asc2017-11-20 16:00 833  
[   ]cmake-3.10.0-rc1-Darwin-x86_64.dmg2017-10-05 15:50 26M 
[   ]cmake-3.10.0-rc1-Darwin-x86_64.tar.gz2017-10-05 15:50 26M 
[TXT]cmake-3.10.0-rc1-Linux-x86_64.sh2017-10-05 15:50 31M 
[   ]cmake-3.10.0-rc1-Linux-x86_64.tar.gz2017-10-05 15:50 31M 
[TXT]cmake-3.10.0-rc1-SHA-256.txt2017-10-05 15:50 1.0K 
[TXT]cmake-3.10.0-rc1-SHA-256.txt.asc2017-10-05 15:50 833  
[   ]cmake-3.10.0-rc1-win32-x86.msi2017-10-05 15:50 16M 
[   ]cmake-3.10.0-rc1-win32-x86.zip2017-10-05 15:50 22M 
[   ]cmake-3.10.0-rc1-win64-x64.msi2017-10-05 15:50 18M 
[   ]cmake-3.10.0-rc1-win64-x64.zip2017-10-05 15:50 25M 
[   ]cmake-3.10.0-rc1.tar.Z2017-10-05 15:50 12M 
[   ]cmake-3.10.0-rc1.tar.gz2017-10-05 15:50 7.4M 
[   ]cmake-3.10.0-rc1.zip2017-10-05 15:50 12M 
[   ]cmake-3.10.0-rc2-Darwin-x86_64.dmg2017-10-12 12:07 26M 
[   ]cmake-3.10.0-rc2-Darwin-x86_64.tar.gz2017-10-12 12:07 26M 
[TXT]cmake-3.10.0-rc2-Linux-x86_64.sh2017-10-12 12:07 31M 
[   ]cmake-3.10.0-rc2-Linux-x86_64.tar.gz2017-10-12 12:07 31M 
[TXT]cmake-3.10.0-rc2-SHA-256.txt2017-10-12 12:07 1.0K 
[TXT]cmake-3.10.0-rc2-SHA-256.txt.asc2017-10-12 12:06 833  
[   ]cmake-3.10.0-rc2-win32-x86.msi2017-10-12 12:06 16M 
[   ]cmake-3.10.0-rc2-win32-x86.zip2017-10-12 12:06 22M 
[   ]cmake-3.10.0-rc2-win64-x64.msi2017-10-12 12:06 18M 
[   ]cmake-3.10.0-rc2-win64-x64.zip2017-10-12 12:06 25M 
[   ]cmake-3.10.0-rc2.tar.Z2017-10-12 12:06 12M 
[   ]cmake-3.10.0-rc2.tar.gz2017-10-12 12:06 7.5M 
[   ]cmake-3.10.0-rc2.zip2017-10-12 12:06 13M 
[   ]cmake-3.10.0-rc3-Darwin-x86_64.dmg2017-10-19 13:24 26M 
[   ]cmake-3.10.0-rc3-Darwin-x86_64.tar.gz2017-10-19 13:24 26M 
[TXT]cmake-3.10.0-rc3-Linux-x86_64.sh2017-10-19 13:24 31M 
[   ]cmake-3.10.0-rc3-Linux-x86_64.tar.gz2017-10-19 13:24 31M 
[TXT]cmake-3.10.0-rc3-SHA-256.txt2017-10-19 13:24 1.0K 
[TXT]cmake-3.10.0-rc3-SHA-256.txt.asc2017-10-19 13:24 833  
[   ]cmake-3.10.0-rc3-win32-x86.msi2017-10-19 13:24 16M 
[   ]cmake-3.10.0-rc3-win32-x86.zip2017-10-19 13:24 22M 
[   ]cmake-3.10.0-rc3-win64-x64.msi2017-10-19 13:24 18M 
[   ]cmake-3.10.0-rc3-win64-x64.zip2017-10-19 13:24 25M 
[   ]cmake-3.10.0-rc3.tar.Z2017-10-19 13:24 12M 
[   ]cmake-3.10.0-rc3.tar.gz2017-10-19 13:24 7.5M 
[   ]cmake-3.10.0-rc3.zip2017-10-19 13:24 13M 
[   ]cmake-3.10.0-rc4-Darwin-x86_64.dmg2017-11-01 15:37 26M 
[   ]cmake-3.10.0-rc4-Darwin-x86_64.tar.gz2017-11-01 15:37 26M 
[TXT]cmake-3.10.0-rc4-Linux-x86_64.sh2017-11-01 15:37 31M 
[   ]cmake-3.10.0-rc4-Linux-x86_64.tar.gz2017-11-01 15:37 31M 
[TXT]cmake-3.10.0-rc4-SHA-256.txt2017-11-01 15:37 1.0K 
[TXT]cmake-3.10.0-rc4-SHA-256.txt.asc2017-11-01 15:37 833  
[   ]cmake-3.10.0-rc4-win32-x86.msi2017-11-01 15:37 16M 
[   ]cmake-3.10.0-rc4-win32-x86.zip2017-11-01 15:37 22M 
[   ]cmake-3.10.0-rc4-win64-x64.msi2017-11-01 15:37 18M 
[   ]cmake-3.10.0-rc4-win64-x64.zip2017-11-01 15:37 25M 
[   ]cmake-3.10.0-rc4.tar.Z2017-11-01 15:37 12M 
[   ]cmake-3.10.0-rc4.tar.gz2017-11-01 15:37 7.5M 
[   ]cmake-3.10.0-rc4.zip2017-11-01 15:37 13M 
[   ]cmake-3.10.0-rc5-Darwin-x86_64.dmg2017-11-10 14:01 26M 
[   ]cmake-3.10.0-rc5-Darwin-x86_64.tar.gz2017-11-10 14:01 26M 
[TXT]cmake-3.10.0-rc5-Linux-x86_64.sh2017-11-10 14:01 31M 
[   ]cmake-3.10.0-rc5-Linux-x86_64.tar.gz2017-11-10 14:01 31M 
[TXT]cmake-3.10.0-rc5-SHA-256.txt2017-11-10 14:01 1.0K 
[TXT]cmake-3.10.0-rc5-SHA-256.txt.asc2017-11-10 14:01 833  
[   ]cmake-3.10.0-rc5-win32-x86.msi2017-11-10 14:01 16M 
[   ]cmake-3.10.0-rc5-win32-x86.zip2017-11-10 14:01 22M 
[   ]cmake-3.10.0-rc5-win64-x64.msi2017-11-10 14:01 18M 
[   ]cmake-3.10.0-rc5-win64-x64.zip2017-11-10 14:01 25M 
[   ]cmake-3.10.0-rc5.tar.Z2017-11-10 14:01 12M 
[   ]cmake-3.10.0-rc5.tar.gz2017-11-10 14:01 7.5M 
[   ]cmake-3.10.0-rc5.zip2017-11-10 14:00 13M 
[   ]cmake-3.10.0-win32-x86.msi2017-11-20 16:00 15M 
[   ]cmake-3.10.0-win32-x86.zip2017-11-20 16:00 21M 
[   ]cmake-3.10.0-win64-x64.msi2017-11-20 16:00 17M 
[   ]cmake-3.10.0-win64-x64.zip2017-11-20 16:00 24M 
[   ]cmake-3.10.0.tar.Z2017-11-20 16:00 12M 
[   ]cmake-3.10.0.tar.gz2017-11-20 16:00 7.5M 
[   ]cmake-3.10.0.zip2017-11-20 16:00 12M 
[   ]cmake-3.10.1-Darwin-x86_64.dmg2017-12-14 09:10 26M 
[   ]cmake-3.10.1-Darwin-x86_64.tar.gz2017-12-14 09:10 26M 
[TXT]cmake-3.10.1-Linux-x86_64.sh2017-12-14 09:10 33M 
[   ]cmake-3.10.1-Linux-x86_64.tar.gz2017-12-14 09:10 33M 
[TXT]cmake-3.10.1-SHA-256.txt2017-12-14 09:10 1.0K 
[TXT]cmake-3.10.1-SHA-256.txt.asc2017-12-14 09:10 833  
[   ]cmake-3.10.1-win32-x86.msi2017-12-14 09:10 15M 
[   ]cmake-3.10.1-win32-x86.zip2017-12-14 09:10 21M 
[   ]cmake-3.10.1-win64-x64.msi2017-12-14 09:10 18M 
[   ]cmake-3.10.1-win64-x64.zip2017-12-14 09:09 25M 
[   ]cmake-3.10.1.tar.Z2017-12-14 09:09 12M 
[   ]cmake-3.10.1.tar.gz2017-12-14 09:09 7.5M 
[   ]cmake-3.10.1.zip2017-12-14 09:09 12M 
[   ]cmake-3.10.2-Darwin-x86_64.dmg2018-01-18 12:09 26M 
[   ]cmake-3.10.2-Darwin-x86_64.tar.gz2018-01-18 12:09 26M 
[TXT]cmake-3.10.2-Linux-x86_64.sh2018-01-18 12:09 33M 
[   ]cmake-3.10.2-Linux-x86_64.tar.gz2018-01-18 12:09 33M 
[TXT]cmake-3.10.2-SHA-256.txt2018-01-18 12:09 1.0K 
[TXT]cmake-3.10.2-SHA-256.txt.asc2018-01-18 12:09 833  
[   ]cmake-3.10.2-win32-x86.msi2018-01-18 12:09 15M 
[   ]cmake-3.10.2-win32-x86.zip2018-01-18 12:09 21M 
[   ]cmake-3.10.2-win64-x64.msi2018-01-18 12:09 18M 
[   ]cmake-3.10.2-win64-x64.zip2018-01-18 12:09 25M 
[   ]cmake-3.10.2.tar.Z2018-01-18 12:09 12M 
[   ]cmake-3.10.2.tar.gz2018-01-18 12:09 7.5M 
[   ]cmake-3.10.2.zip2018-01-18 12:08 12M 
[   ]cmake-3.10.3-Darwin-x86_64.dmg2018-03-16 09:38 26M 
[   ]cmake-3.10.3-Darwin-x86_64.tar.gz2018-03-16 09:38 26M 
[TXT]cmake-3.10.3-Linux-x86_64.sh2018-03-16 09:38 33M 
[   ]cmake-3.10.3-Linux-x86_64.tar.gz2018-03-16 09:38 33M 
[TXT]cmake-3.10.3-SHA-256.txt2018-03-16 09:38 1.0K 
[TXT]cmake-3.10.3-SHA-256.txt.asc2018-03-16 09:38 833  
[   ]cmake-3.10.3-win32-x86.msi2018-03-16 09:38 15M 
[   ]cmake-3.10.3-win32-x86.zip2018-03-16 09:38 21M 
[   ]cmake-3.10.3-win64-x64.msi2018-03-16 09:38 18M 
[   ]cmake-3.10.3-win64-x64.zip2018-03-16 09:38 25M 
[   ]cmake-3.10.3.tar.Z2018-03-16 09:38 12M 
[   ]cmake-3.10.3.tar.gz2018-03-16 09:38 7.5M 
[   ]cmake-3.10.3.zip2018-03-16 09:38 12M 

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.11/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.11/index.html new file mode 100644 index 00000000..869d7427 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.11/index.html @@ -0,0 +1,131 @@ + + + + Index of /files/v3.11 + + +

Index of /files/v3.11

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]cmake-3.11.0-Darwin-x86_64.dmg2018-03-28 13:40 26M 
[   ]cmake-3.11.0-Darwin-x86_64.tar.gz2018-03-28 13:40 26M 
[TXT]cmake-3.11.0-Linux-x86_64.sh2018-03-28 13:40 33M 
[   ]cmake-3.11.0-Linux-x86_64.tar.gz2018-03-28 13:40 33M 
[TXT]cmake-3.11.0-SHA-256.txt2018-03-28 13:40 1.0K 
[TXT]cmake-3.11.0-SHA-256.txt.asc2018-03-28 13:40 833  
[   ]cmake-3.11.0-rc1-Darwin-x86_64.dmg2018-02-15 11:53 26M 
[   ]cmake-3.11.0-rc1-Darwin-x86_64.tar.gz2018-02-15 11:53 26M 
[TXT]cmake-3.11.0-rc1-Linux-x86_64.sh2018-02-15 11:53 33M 
[   ]cmake-3.11.0-rc1-Linux-x86_64.tar.gz2018-02-15 11:53 33M 
[TXT]cmake-3.11.0-rc1-SHA-256.txt2018-02-15 11:53 1.0K 
[TXT]cmake-3.11.0-rc1-SHA-256.txt.asc2018-02-15 11:53 833  
[   ]cmake-3.11.0-rc1-win32-x86.msi2018-02-15 11:53 16M 
[   ]cmake-3.11.0-rc1-win32-x86.zip2018-02-15 11:53 22M 
[   ]cmake-3.11.0-rc1-win64-x64.msi2018-02-15 11:53 19M 
[   ]cmake-3.11.0-rc1-win64-x64.zip2018-02-15 11:53 26M 
[   ]cmake-3.11.0-rc1.tar.Z2018-02-15 11:52 12M 
[   ]cmake-3.11.0-rc1.tar.gz2018-02-15 11:52 7.6M 
[   ]cmake-3.11.0-rc1.zip2018-02-15 11:52 13M 
[   ]cmake-3.11.0-rc2-Darwin-x86_64.dmg2018-02-27 11:09 26M 
[   ]cmake-3.11.0-rc2-Darwin-x86_64.tar.gz2018-02-27 11:09 26M 
[TXT]cmake-3.11.0-rc2-Linux-x86_64.sh2018-02-27 11:09 33M 
[   ]cmake-3.11.0-rc2-Linux-x86_64.tar.gz2018-02-27 11:09 33M 
[TXT]cmake-3.11.0-rc2-SHA-256.txt2018-02-27 11:09 1.0K 
[TXT]cmake-3.11.0-rc2-SHA-256.txt.asc2018-02-27 11:09 833  
[   ]cmake-3.11.0-rc2-win32-x86.msi2018-02-27 11:09 16M 
[   ]cmake-3.11.0-rc2-win32-x86.zip2018-02-27 11:09 22M 
[   ]cmake-3.11.0-rc2-win64-x64.msi2018-02-27 11:09 19M 
[   ]cmake-3.11.0-rc2-win64-x64.zip2018-02-27 11:09 26M 
[   ]cmake-3.11.0-rc2.tar.Z2018-02-27 11:09 12M 
[   ]cmake-3.11.0-rc2.tar.gz2018-02-27 11:09 7.6M 
[   ]cmake-3.11.0-rc2.zip2018-02-27 11:09 13M 
[   ]cmake-3.11.0-rc3-Darwin-x86_64.dmg2018-03-09 13:46 26M 
[   ]cmake-3.11.0-rc3-Darwin-x86_64.tar.gz2018-03-09 13:46 26M 
[TXT]cmake-3.11.0-rc3-Linux-x86_64.sh2018-03-09 13:46 33M 
[   ]cmake-3.11.0-rc3-Linux-x86_64.tar.gz2018-03-09 13:46 33M 
[TXT]cmake-3.11.0-rc3-SHA-256.txt2018-03-09 13:46 1.0K 
[TXT]cmake-3.11.0-rc3-SHA-256.txt.asc2018-03-09 13:46 833  
[   ]cmake-3.11.0-rc3-win32-x86.msi2018-03-09 13:46 16M 
[   ]cmake-3.11.0-rc3-win32-x86.zip2018-03-09 13:45 22M 
[   ]cmake-3.11.0-rc3-win64-x64.msi2018-03-09 13:45 19M 
[   ]cmake-3.11.0-rc3-win64-x64.zip2018-03-09 13:45 26M 
[   ]cmake-3.11.0-rc3.tar.Z2018-03-09 13:45 12M 
[   ]cmake-3.11.0-rc3.tar.gz2018-03-09 13:45 7.6M 
[   ]cmake-3.11.0-rc3.zip2018-03-09 13:45 13M 
[   ]cmake-3.11.0-rc4-Darwin-x86_64.dmg2018-03-19 11:07 26M 
[   ]cmake-3.11.0-rc4-Darwin-x86_64.tar.gz2018-03-19 11:07 26M 
[TXT]cmake-3.11.0-rc4-Linux-x86_64.sh2018-03-19 11:06 33M 
[   ]cmake-3.11.0-rc4-Linux-x86_64.tar.gz2018-03-19 11:06 33M 
[TXT]cmake-3.11.0-rc4-SHA-256.txt2018-03-19 11:06 1.0K 
[TXT]cmake-3.11.0-rc4-SHA-256.txt.asc2018-03-19 11:06 833  
[   ]cmake-3.11.0-rc4-win32-x86.msi2018-03-19 11:06 16M 
[   ]cmake-3.11.0-rc4-win32-x86.zip2018-03-19 11:06 22M 
[   ]cmake-3.11.0-rc4-win64-x64.msi2018-03-19 11:06 19M 
[   ]cmake-3.11.0-rc4-win64-x64.zip2018-03-19 11:06 26M 
[   ]cmake-3.11.0-rc4.tar.Z2018-03-19 11:06 12M 
[   ]cmake-3.11.0-rc4.tar.gz2018-03-19 11:06 7.6M 
[   ]cmake-3.11.0-rc4.zip2018-03-19 11:06 13M 
[   ]cmake-3.11.0-win32-x86.msi2018-03-28 13:40 16M 
[   ]cmake-3.11.0-win32-x86.zip2018-03-28 13:40 22M 
[   ]cmake-3.11.0-win64-x64.msi2018-03-28 13:40 19M 
[   ]cmake-3.11.0-win64-x64.zip2018-03-28 13:40 26M 
[   ]cmake-3.11.0.tar.Z2018-03-28 13:40 12M 
[   ]cmake-3.11.0.tar.gz2018-03-28 13:40 7.6M 
[   ]cmake-3.11.0.zip2018-03-28 13:40 13M 
[   ]cmake-3.11.1-Darwin-x86_64.dmg2018-04-17 11:33 26M 
[   ]cmake-3.11.1-Darwin-x86_64.tar.gz2018-04-17 11:32 26M 
[TXT]cmake-3.11.1-Linux-x86_64.sh2018-04-17 11:32 33M 
[   ]cmake-3.11.1-Linux-x86_64.tar.gz2018-04-17 11:32 33M 
[TXT]cmake-3.11.1-SHA-256.txt2018-04-17 11:32 1.0K 
[TXT]cmake-3.11.1-SHA-256.txt.asc2018-04-17 11:32 833  
[   ]cmake-3.11.1-win32-x86.msi2018-04-17 11:32 16M 
[   ]cmake-3.11.1-win32-x86.zip2018-04-17 11:32 22M 
[   ]cmake-3.11.1-win64-x64.msi2018-04-17 11:32 19M 
[   ]cmake-3.11.1-win64-x64.zip2018-04-17 11:32 26M 
[   ]cmake-3.11.1.tar.Z2018-04-17 11:32 12M 
[   ]cmake-3.11.1.tar.gz2018-04-17 11:32 7.6M 
[   ]cmake-3.11.1.zip2018-04-17 11:32 13M 
[   ]cmake-3.11.2-Darwin-x86_64.dmg2018-05-17 12:45 26M 
[   ]cmake-3.11.2-Darwin-x86_64.tar.gz2018-05-17 12:45 26M 
[TXT]cmake-3.11.2-Linux-x86_64.sh2018-05-17 12:45 33M 
[   ]cmake-3.11.2-Linux-x86_64.tar.gz2018-05-17 12:45 33M 
[TXT]cmake-3.11.2-SHA-256.txt2018-05-17 12:45 1.0K 
[TXT]cmake-3.11.2-SHA-256.txt.asc2018-05-17 12:45 833  
[   ]cmake-3.11.2-win32-x86.msi2018-05-17 12:45 16M 
[   ]cmake-3.11.2-win32-x86.zip2018-05-17 12:45 22M 
[   ]cmake-3.11.2-win64-x64.msi2018-05-17 12:45 18M 
[   ]cmake-3.11.2-win64-x64.zip2018-05-17 12:44 25M 
[   ]cmake-3.11.2.tar.Z2018-05-17 12:44 12M 
[   ]cmake-3.11.2.tar.gz2018-05-17 12:44 7.6M 
[   ]cmake-3.11.2.zip2018-05-17 12:44 13M 
[   ]cmake-3.11.3-Darwin-x86_64.dmg2018-05-31 15:53 26M 
[   ]cmake-3.11.3-Darwin-x86_64.tar.gz2018-05-31 15:53 26M 
[TXT]cmake-3.11.3-Linux-x86_64.sh2018-05-31 15:53 33M 
[   ]cmake-3.11.3-Linux-x86_64.tar.gz2018-05-31 15:52 33M 
[TXT]cmake-3.11.3-SHA-256.txt2018-05-31 15:52 1.0K 
[TXT]cmake-3.11.3-SHA-256.txt.asc2018-05-31 15:52 833  
[   ]cmake-3.11.3-win32-x86.msi2018-05-31 15:52 16M 
[   ]cmake-3.11.3-win32-x86.zip2018-05-31 15:52 22M 
[   ]cmake-3.11.3-win64-x64.msi2018-05-31 15:52 18M 
[   ]cmake-3.11.3-win64-x64.zip2018-05-31 15:52 25M 
[   ]cmake-3.11.3.tar.Z2018-05-31 15:52 12M 
[   ]cmake-3.11.3.tar.gz2018-05-31 15:52 7.6M 
[   ]cmake-3.11.3.zip2018-05-31 15:52 13M 
[   ]cmake-3.11.4-Darwin-x86_64.dmg2018-06-14 13:50 26M 
[   ]cmake-3.11.4-Darwin-x86_64.tar.gz2018-06-14 13:50 26M 
[TXT]cmake-3.11.4-Linux-x86_64.sh2018-06-14 13:50 33M 
[   ]cmake-3.11.4-Linux-x86_64.tar.gz2018-06-14 13:50 33M 
[TXT]cmake-3.11.4-SHA-256.txt2018-06-14 13:50 1.0K 
[TXT]cmake-3.11.4-SHA-256.txt.asc2018-06-14 13:50 833  
[   ]cmake-3.11.4-win32-x86.msi2018-06-14 13:50 16M 
[   ]cmake-3.11.4-win32-x86.zip2018-06-14 13:50 22M 
[   ]cmake-3.11.4-win64-x64.msi2018-06-14 13:50 18M 
[   ]cmake-3.11.4-win64-x64.zip2018-06-14 13:50 25M 
[   ]cmake-3.11.4.tar.Z2018-06-14 13:50 12M 
[   ]cmake-3.11.4.tar.gz2018-06-14 13:50 7.6M 
[   ]cmake-3.11.4.zip2018-06-14 13:50 13M 

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.12/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.12/index.html new file mode 100644 index 00000000..1977e7e0 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.12/index.html @@ -0,0 +1,118 @@ + + + + Index of /files/v3.12 + + +

Index of /files/v3.12

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]cmake-3.12.0-Darwin-x86_64.dmg2018-07-17 09:58 27M 
[   ]cmake-3.12.0-Darwin-x86_64.tar.gz2018-07-17 09:58 27M 
[TXT]cmake-3.12.0-Linux-x86_64.sh2018-07-17 09:58 33M 
[   ]cmake-3.12.0-Linux-x86_64.tar.gz2018-07-17 09:58 33M 
[TXT]cmake-3.12.0-SHA-256.txt2018-07-17 09:58 1.0K 
[TXT]cmake-3.12.0-SHA-256.txt.asc2018-07-17 09:58 833  
[   ]cmake-3.12.0-rc1-Darwin-x86_64.dmg2018-06-14 15:01 27M 
[   ]cmake-3.12.0-rc1-Darwin-x86_64.tar.gz2018-06-14 15:01 27M 
[TXT]cmake-3.12.0-rc1-Linux-x86_64.sh2018-06-14 15:01 29M 
[   ]cmake-3.12.0-rc1-Linux-x86_64.tar.gz2018-06-14 15:01 29M 
[TXT]cmake-3.12.0-rc1-SHA-256.txt2018-06-14 15:01 1.0K 
[TXT]cmake-3.12.0-rc1-SHA-256.txt.asc2018-06-14 15:01 833  
[   ]cmake-3.12.0-rc1-win32-x86.msi2018-06-14 15:01 16M 
[   ]cmake-3.12.0-rc1-win32-x86.zip2018-06-14 15:01 23M 
[   ]cmake-3.12.0-rc1-win64-x64.msi2018-06-14 15:01 18M 
[   ]cmake-3.12.0-rc1-win64-x64.zip2018-06-14 15:01 25M 
[   ]cmake-3.12.0-rc1.tar.Z2018-06-14 15:01 13M 
[   ]cmake-3.12.0-rc1.tar.gz2018-06-14 15:01 7.7M 
[   ]cmake-3.12.0-rc1.zip2018-06-14 15:01 13M 
[   ]cmake-3.12.0-rc2-Darwin-x86_64.dmg2018-06-29 13:57 27M 
[   ]cmake-3.12.0-rc2-Darwin-x86_64.tar.gz2018-06-29 13:57 27M 
[TXT]cmake-3.12.0-rc2-Linux-x86_64.sh2018-06-29 13:57 29M 
[   ]cmake-3.12.0-rc2-Linux-x86_64.tar.gz2018-06-29 13:57 29M 
[TXT]cmake-3.12.0-rc2-SHA-256.txt2018-06-29 13:57 1.0K 
[TXT]cmake-3.12.0-rc2-SHA-256.txt.asc2018-06-29 13:57 833  
[   ]cmake-3.12.0-rc2-win32-x86.msi2018-06-29 13:56 16M 
[   ]cmake-3.12.0-rc2-win32-x86.zip2018-06-29 13:56 23M 
[   ]cmake-3.12.0-rc2-win64-x64.msi2018-06-29 13:56 18M 
[   ]cmake-3.12.0-rc2-win64-x64.zip2018-06-29 13:56 25M 
[   ]cmake-3.12.0-rc2.tar.Z2018-06-29 13:56 13M 
[   ]cmake-3.12.0-rc2.tar.gz2018-06-29 13:56 7.7M 
[   ]cmake-3.12.0-rc2.zip2018-06-29 13:56 13M 
[   ]cmake-3.12.0-rc3-Darwin-x86_64.dmg2018-07-09 11:38 27M 
[   ]cmake-3.12.0-rc3-Darwin-x86_64.tar.gz2018-07-09 11:38 27M 
[TXT]cmake-3.12.0-rc3-Linux-x86_64.sh2018-07-09 11:38 33M 
[   ]cmake-3.12.0-rc3-Linux-x86_64.tar.gz2018-07-09 11:38 33M 
[TXT]cmake-3.12.0-rc3-SHA-256.txt2018-07-09 11:38 1.0K 
[TXT]cmake-3.12.0-rc3-SHA-256.txt.asc2018-07-09 11:38 833  
[   ]cmake-3.12.0-rc3-win32-x86.msi2018-07-09 11:38 16M 
[   ]cmake-3.12.0-rc3-win32-x86.zip2018-07-09 11:38 23M 
[   ]cmake-3.12.0-rc3-win64-x64.msi2018-07-09 11:37 18M 
[   ]cmake-3.12.0-rc3-win64-x64.zip2018-07-09 11:37 25M 
[   ]cmake-3.12.0-rc3.tar.Z2018-07-09 11:37 13M 
[   ]cmake-3.12.0-rc3.tar.gz2018-07-09 11:37 7.7M 
[   ]cmake-3.12.0-rc3.zip2018-07-09 11:37 13M 
[   ]cmake-3.12.0-win32-x86.msi2018-07-17 09:58 16M 
[   ]cmake-3.12.0-win32-x86.zip2018-07-17 09:58 23M 
[   ]cmake-3.12.0-win64-x64.msi2018-07-17 09:58 18M 
[   ]cmake-3.12.0-win64-x64.zip2018-07-17 09:58 25M 
[   ]cmake-3.12.0.tar.Z2018-07-17 09:58 13M 
[   ]cmake-3.12.0.tar.gz2018-07-17 09:58 7.7M 
[   ]cmake-3.12.0.zip2018-07-17 09:57 13M 
[   ]cmake-3.12.1-Darwin-x86_64.dmg2018-08-09 11:21 27M 
[   ]cmake-3.12.1-Darwin-x86_64.tar.gz2018-08-09 11:21 27M 
[TXT]cmake-3.12.1-Linux-x86_64.sh2018-08-09 11:21 33M 
[   ]cmake-3.12.1-Linux-x86_64.tar.gz2018-08-09 11:21 33M 
[TXT]cmake-3.12.1-SHA-256.txt2018-08-09 11:20 1.0K 
[TXT]cmake-3.12.1-SHA-256.txt.asc2018-08-09 11:20 833  
[   ]cmake-3.12.1-win32-x86.msi2018-08-09 11:20 16M 
[   ]cmake-3.12.1-win32-x86.zip2018-08-09 11:20 23M 
[   ]cmake-3.12.1-win64-x64.msi2018-08-09 11:20 18M 
[   ]cmake-3.12.1-win64-x64.zip2018-08-09 11:20 25M 
[   ]cmake-3.12.1.tar.Z2018-08-09 11:20 13M 
[   ]cmake-3.12.1.tar.gz2018-08-09 11:20 7.7M 
[   ]cmake-3.12.1.zip2018-08-09 11:20 13M 
[   ]cmake-3.12.2-Darwin-x86_64.dmg2018-09-07 12:51 28M 
[   ]cmake-3.12.2-Darwin-x86_64.tar.gz2018-09-07 12:51 28M 
[TXT]cmake-3.12.2-Linux-x86_64.sh2018-09-07 12:51 33M 
[   ]cmake-3.12.2-Linux-x86_64.tar.gz2018-09-07 12:51 33M 
[TXT]cmake-3.12.2-SHA-256.txt2018-09-07 12:51 1.0K 
[TXT]cmake-3.12.2-SHA-256.txt.asc2018-09-07 12:51 833  
[   ]cmake-3.12.2-win32-x86.msi2018-09-07 12:51 16M 
[   ]cmake-3.12.2-win32-x86.zip2018-09-07 12:51 22M 
[   ]cmake-3.12.2-win64-x64.msi2018-09-07 12:51 18M 
[   ]cmake-3.12.2-win64-x64.zip2018-09-07 12:51 25M 
[   ]cmake-3.12.2.tar.Z2018-09-07 12:51 13M 
[   ]cmake-3.12.2.tar.gz2018-09-07 12:51 8.0M 
[   ]cmake-3.12.2.zip2018-09-07 12:51 13M 
[   ]cmake-3.12.3-Darwin-x86_64.dmg2018-10-03 10:46 28M 
[   ]cmake-3.12.3-Darwin-x86_64.tar.gz2018-10-03 10:46 28M 
[TXT]cmake-3.12.3-Linux-x86_64.sh2018-10-03 10:45 33M 
[   ]cmake-3.12.3-Linux-x86_64.tar.gz2018-10-03 10:45 33M 
[TXT]cmake-3.12.3-SHA-256.txt2018-10-03 10:45 1.0K 
[TXT]cmake-3.12.3-SHA-256.txt.asc2018-10-03 10:45 833  
[   ]cmake-3.12.3-win32-x86.msi2018-10-03 10:45 16M 
[   ]cmake-3.12.3-win32-x86.zip2018-10-03 10:45 22M 
[   ]cmake-3.12.3-win64-x64.msi2018-10-03 10:45 18M 
[   ]cmake-3.12.3-win64-x64.zip2018-10-03 10:45 25M 
[   ]cmake-3.12.3.tar.Z2018-10-03 10:45 13M 
[   ]cmake-3.12.3.tar.gz2018-10-03 10:45 8.0M 
[   ]cmake-3.12.3.zip2018-10-03 10:45 13M 
[   ]cmake-3.12.4-Darwin-x86_64.dmg2018-11-02 13:51 28M 
[   ]cmake-3.12.4-Darwin-x86_64.tar.gz2018-11-02 13:51 28M 
[TXT]cmake-3.12.4-Linux-x86_64.sh2018-11-02 13:51 33M 
[   ]cmake-3.12.4-Linux-x86_64.tar.gz2018-11-02 13:51 33M 
[TXT]cmake-3.12.4-SHA-256.txt2018-11-02 13:51 1.0K 
[TXT]cmake-3.12.4-SHA-256.txt.asc2018-11-02 13:51 833  
[   ]cmake-3.12.4-win32-x86.msi2018-11-02 13:51 16M 
[   ]cmake-3.12.4-win32-x86.zip2018-11-02 13:51 22M 
[   ]cmake-3.12.4-win64-x64.msi2018-11-02 13:51 18M 
[   ]cmake-3.12.4-win64-x64.zip2018-11-02 13:51 25M 
[   ]cmake-3.12.4.tar.Z2018-11-02 13:51 13M 
[   ]cmake-3.12.4.tar.gz2018-11-02 13:51 8.0M 
[   ]cmake-3.12.4.zip2018-11-02 13:51 13M 

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.13/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.13/index.html new file mode 100644 index 00000000..b50a791b --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.13/index.html @@ -0,0 +1,131 @@ + + + + Index of /files/v3.13 + + +

Index of /files/v3.13

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]cmake-3.13.0-Darwin-x86_64.dmg2018-11-20 14:05 31M 
[   ]cmake-3.13.0-Darwin-x86_64.tar.gz2018-11-20 14:05 31M 
[TXT]cmake-3.13.0-Linux-x86_64.sh2018-11-20 14:05 37M 
[   ]cmake-3.13.0-Linux-x86_64.tar.gz2018-11-20 14:05 37M 
[TXT]cmake-3.13.0-SHA-256.txt2018-11-20 14:05 1.0K 
[TXT]cmake-3.13.0-SHA-256.txt.asc2018-11-20 14:05 833  
[   ]cmake-3.13.0-rc1-Darwin-x86_64.dmg2018-10-09 11:32 29M 
[   ]cmake-3.13.0-rc1-Darwin-x86_64.tar.gz2018-10-09 11:32 28M 
[TXT]cmake-3.13.0-rc1-Linux-x86_64.sh2018-10-09 11:32 34M 
[   ]cmake-3.13.0-rc1-Linux-x86_64.tar.gz2018-10-09 11:32 34M 
[TXT]cmake-3.13.0-rc1-SHA-256.txt2018-10-09 11:32 1.0K 
[TXT]cmake-3.13.0-rc1-SHA-256.txt.asc2018-10-09 11:32 833  
[   ]cmake-3.13.0-rc1-win32-x86.msi2018-10-09 11:32 16M 
[   ]cmake-3.13.0-rc1-win32-x86.zip2018-10-09 11:32 23M 
[   ]cmake-3.13.0-rc1-win64-x64.msi2018-10-09 11:32 19M 
[   ]cmake-3.13.0-rc1-win64-x64.zip2018-10-09 11:32 26M 
[   ]cmake-3.13.0-rc1.tar.Z2018-10-09 11:32 13M 
[   ]cmake-3.13.0-rc1.tar.gz2018-10-09 11:32 8.2M 
[   ]cmake-3.13.0-rc1.zip2018-10-09 11:32 13M 
[   ]cmake-3.13.0-rc2-Darwin-x86_64.dmg2018-10-25 10:28 31M 
[   ]cmake-3.13.0-rc2-Darwin-x86_64.tar.gz2018-10-25 10:28 31M 
[TXT]cmake-3.13.0-rc2-Linux-x86_64.sh2018-10-25 10:27 37M 
[   ]cmake-3.13.0-rc2-Linux-x86_64.tar.gz2018-10-25 10:27 37M 
[TXT]cmake-3.13.0-rc2-SHA-256.txt2018-10-25 10:27 1.0K 
[TXT]cmake-3.13.0-rc2-SHA-256.txt.asc2018-10-25 10:27 833  
[   ]cmake-3.13.0-rc2-win32-x86.msi2018-10-25 10:27 19M 
[   ]cmake-3.13.0-rc2-win32-x86.zip2018-10-25 10:27 25M 
[   ]cmake-3.13.0-rc2-win64-x64.msi2018-10-25 10:27 21M 
[   ]cmake-3.13.0-rc2-win64-x64.zip2018-10-25 10:27 28M 
[   ]cmake-3.13.0-rc2.tar.Z2018-10-25 10:27 13M 
[   ]cmake-3.13.0-rc2.tar.gz2018-10-25 10:27 8.2M 
[   ]cmake-3.13.0-rc2.zip2018-10-25 10:27 13M 
[   ]cmake-3.13.0-rc3-Darwin-x86_64.dmg2018-11-07 12:11 31M 
[   ]cmake-3.13.0-rc3-Darwin-x86_64.tar.gz2018-11-07 12:11 31M 
[TXT]cmake-3.13.0-rc3-Linux-x86_64.sh2018-11-07 12:11 37M 
[   ]cmake-3.13.0-rc3-Linux-x86_64.tar.gz2018-11-07 12:11 37M 
[TXT]cmake-3.13.0-rc3-SHA-256.txt2018-11-07 12:11 1.0K 
[TXT]cmake-3.13.0-rc3-SHA-256.txt.asc2018-11-07 12:11 833  
[   ]cmake-3.13.0-rc3-win32-x86.msi2018-11-07 12:11 19M 
[   ]cmake-3.13.0-rc3-win32-x86.zip2018-11-07 12:11 25M 
[   ]cmake-3.13.0-rc3-win64-x64.msi2018-11-07 12:11 21M 
[   ]cmake-3.13.0-rc3-win64-x64.zip2018-11-07 12:11 28M 
[   ]cmake-3.13.0-rc3.tar.Z2018-11-07 12:11 13M 
[   ]cmake-3.13.0-rc3.tar.gz2018-11-07 12:11 8.2M 
[   ]cmake-3.13.0-rc3.zip2018-11-07 12:11 13M 
[   ]cmake-3.13.0-win32-x86.msi2018-11-20 14:05 19M 
[   ]cmake-3.13.0-win32-x86.zip2018-11-20 14:05 25M 
[   ]cmake-3.13.0-win64-x64.msi2018-11-20 14:05 21M 
[   ]cmake-3.13.0-win64-x64.zip2018-11-20 14:05 28M 
[   ]cmake-3.13.0.tar.Z2018-11-20 14:04 13M 
[   ]cmake-3.13.0.tar.gz2018-11-20 14:04 8.2M 
[   ]cmake-3.13.0.zip2018-11-20 14:04 13M 
[   ]cmake-3.13.1-Darwin-x86_64.dmg2018-11-28 08:50 31M 
[   ]cmake-3.13.1-Darwin-x86_64.tar.gz2018-11-28 08:50 31M 
[TXT]cmake-3.13.1-Linux-x86_64.sh2018-11-28 08:50 37M 
[   ]cmake-3.13.1-Linux-x86_64.tar.gz2018-11-28 08:50 37M 
[TXT]cmake-3.13.1-SHA-256.txt2018-11-28 08:50 1.0K 
[TXT]cmake-3.13.1-SHA-256.txt.asc2018-11-28 08:50 833  
[   ]cmake-3.13.1-win32-x86.msi2018-11-28 08:50 19M 
[   ]cmake-3.13.1-win32-x86.zip2018-11-28 08:50 25M 
[   ]cmake-3.13.1-win64-x64.msi2018-11-28 08:50 21M 
[   ]cmake-3.13.1-win64-x64.zip2018-11-28 08:50 28M 
[   ]cmake-3.13.1.tar.Z2018-11-28 08:50 13M 
[   ]cmake-3.13.1.tar.gz2018-11-28 08:50 8.2M 
[   ]cmake-3.13.1.zip2018-11-28 08:50 13M 
[   ]cmake-3.13.2-Darwin-x86_64.dmg2018-12-13 08:41 31M 
[   ]cmake-3.13.2-Darwin-x86_64.tar.gz2018-12-13 08:41 31M 
[TXT]cmake-3.13.2-Linux-x86_64.sh2018-12-13 08:41 37M 
[   ]cmake-3.13.2-Linux-x86_64.tar.gz2018-12-13 08:41 37M 
[TXT]cmake-3.13.2-SHA-256.txt2018-12-13 08:41 1.0K 
[TXT]cmake-3.13.2-SHA-256.txt.asc2018-12-13 08:41 833  
[   ]cmake-3.13.2-win32-x86.msi2018-12-13 08:41 19M 
[   ]cmake-3.13.2-win32-x86.zip2018-12-13 08:41 25M 
[   ]cmake-3.13.2-win64-x64.msi2018-12-13 08:41 21M 
[   ]cmake-3.13.2-win64-x64.zip2018-12-13 08:41 28M 
[   ]cmake-3.13.2.tar.Z2018-12-13 08:41 13M 
[   ]cmake-3.13.2.tar.gz2018-12-13 08:41 8.2M 
[   ]cmake-3.13.2.zip2018-12-13 08:41 13M 
[   ]cmake-3.13.3-Darwin-x86_64.dmg2019-01-14 09:26 31M 
[   ]cmake-3.13.3-Darwin-x86_64.tar.gz2019-01-14 09:26 31M 
[TXT]cmake-3.13.3-Linux-x86_64.sh2019-01-14 09:25 37M 
[   ]cmake-3.13.3-Linux-x86_64.tar.gz2019-01-14 09:25 37M 
[TXT]cmake-3.13.3-SHA-256.txt2019-01-14 09:25 1.0K 
[TXT]cmake-3.13.3-SHA-256.txt.asc2019-01-14 09:25 833  
[   ]cmake-3.13.3-win32-x86.msi2019-01-14 09:25 19M 
[   ]cmake-3.13.3-win32-x86.zip2019-01-14 09:25 25M 
[   ]cmake-3.13.3-win64-x64.msi2019-01-14 09:25 21M 
[   ]cmake-3.13.3-win64-x64.zip2019-01-14 09:25 28M 
[   ]cmake-3.13.3.tar.Z2019-01-14 09:25 13M 
[   ]cmake-3.13.3.tar.gz2019-01-14 09:25 8.2M 
[   ]cmake-3.13.3.zip2019-01-14 09:25 13M 
[   ]cmake-3.13.4-Darwin-x86_64.dmg2019-02-01 13:20 31M 
[   ]cmake-3.13.4-Darwin-x86_64.tar.gz2019-02-01 13:20 31M 
[TXT]cmake-3.13.4-Linux-x86_64.sh2019-02-01 13:20 37M 
[   ]cmake-3.13.4-Linux-x86_64.tar.gz2019-02-01 13:20 37M 
[TXT]cmake-3.13.4-SHA-256.txt2019-02-01 13:20 1.0K 
[TXT]cmake-3.13.4-SHA-256.txt.asc2019-02-01 13:20 833  
[   ]cmake-3.13.4-win32-x86.msi2019-02-01 13:20 19M 
[   ]cmake-3.13.4-win32-x86.zip2019-02-01 13:20 25M 
[   ]cmake-3.13.4-win64-x64.msi2019-02-01 13:20 21M 
[   ]cmake-3.13.4-win64-x64.zip2019-02-01 13:20 28M 
[   ]cmake-3.13.4.tar.Z2019-02-01 13:20 13M 
[   ]cmake-3.13.4.tar.gz2019-02-01 13:20 8.2M 
[   ]cmake-3.13.4.zip2019-02-01 13:20 13M 
[   ]cmake-3.13.5-Darwin-x86_64.dmg2019-05-14 12:44 31M 
[   ]cmake-3.13.5-Darwin-x86_64.tar.gz2019-05-14 12:44 31M 
[TXT]cmake-3.13.5-Linux-x86_64.sh2019-05-14 12:44 37M 
[   ]cmake-3.13.5-Linux-x86_64.tar.gz2019-05-14 12:44 37M 
[TXT]cmake-3.13.5-SHA-256.txt2019-05-14 12:43 1.0K 
[TXT]cmake-3.13.5-SHA-256.txt.asc2019-05-14 12:43 833  
[   ]cmake-3.13.5-win32-x86.msi2019-05-14 12:43 19M 
[   ]cmake-3.13.5-win32-x86.zip2019-05-14 12:43 25M 
[   ]cmake-3.13.5-win64-x64.msi2019-05-14 12:43 21M 
[   ]cmake-3.13.5-win64-x64.zip2019-05-14 12:43 28M 
[   ]cmake-3.13.5.tar.Z2019-05-14 12:43 13M 
[   ]cmake-3.13.5.tar.gz2019-05-14 12:43 8.2M 
[   ]cmake-3.13.5.zip2019-05-14 12:43 13M 

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.14/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.14/index.html new file mode 100644 index 00000000..bec9c14d --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.14/index.html @@ -0,0 +1,170 @@ + + + + Index of /files/v3.14 + + +

Index of /files/v3.14

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]cmake-3.14.0-Darwin-x86_64.dmg2019-03-14 11:37 33M 
[   ]cmake-3.14.0-Darwin-x86_64.tar.gz2019-03-14 11:37 32M 
[TXT]cmake-3.14.0-Linux-x86_64.sh2019-03-14 11:37 35M 
[   ]cmake-3.14.0-Linux-x86_64.tar.gz2019-03-14 11:37 35M 
[TXT]cmake-3.14.0-SHA-256.txt2019-03-22 11:03 1.0K 
[TXT]cmake-3.14.0-SHA-256.txt.asc2019-03-22 11:03 833  
[   ]cmake-3.14.0-rc1-Darwin-x86_64.dmg2019-02-07 10:36 33M 
[   ]cmake-3.14.0-rc1-Darwin-x86_64.tar.gz2019-02-07 10:36 32M 
[TXT]cmake-3.14.0-rc1-Linux-x86_64.sh2019-02-07 10:36 35M 
[   ]cmake-3.14.0-rc1-Linux-x86_64.tar.gz2019-02-07 10:36 35M 
[TXT]cmake-3.14.0-rc1-SHA-256.txt2019-02-07 10:36 1.0K 
[TXT]cmake-3.14.0-rc1-SHA-256.txt.asc2019-02-07 10:36 833  
[   ]cmake-3.14.0-rc1-win32-x86.msi2019-02-07 10:36 19M 
[   ]cmake-3.14.0-rc1-win32-x86.zip2019-02-07 10:36 26M 
[   ]cmake-3.14.0-rc1-win64-x64.msi2019-02-07 10:36 22M 
[   ]cmake-3.14.0-rc1-win64-x64.zip2019-02-07 10:36 29M 
[   ]cmake-3.14.0-rc1.tar.Z2019-02-07 10:36 14M 
[   ]cmake-3.14.0-rc1.tar.gz2019-02-07 10:35 8.4M 
[   ]cmake-3.14.0-rc1.zip2019-02-07 10:35 14M 
[   ]cmake-3.14.0-rc2-Darwin-x86_64.dmg2019-02-15 10:04 33M 
[   ]cmake-3.14.0-rc2-Darwin-x86_64.tar.gz2019-02-15 10:04 32M 
[TXT]cmake-3.14.0-rc2-Linux-x86_64.sh2019-02-15 10:04 35M 
[   ]cmake-3.14.0-rc2-Linux-x86_64.tar.gz2019-02-15 10:04 35M 
[TXT]cmake-3.14.0-rc2-SHA-256.txt2019-02-15 10:04 1.0K 
[TXT]cmake-3.14.0-rc2-SHA-256.txt.asc2019-02-15 10:04 833  
[   ]cmake-3.14.0-rc2-win32-x86.msi2019-02-15 10:04 19M 
[   ]cmake-3.14.0-rc2-win32-x86.zip2019-02-15 10:04 26M 
[   ]cmake-3.14.0-rc2-win64-x64.msi2019-02-15 10:03 22M 
[   ]cmake-3.14.0-rc2-win64-x64.zip2019-02-15 10:03 29M 
[   ]cmake-3.14.0-rc2.tar.Z2019-02-15 10:03 14M 
[   ]cmake-3.14.0-rc2.tar.gz2019-02-15 10:03 8.4M 
[   ]cmake-3.14.0-rc2.zip2019-02-15 10:03 14M 
[   ]cmake-3.14.0-rc3-Darwin-x86_64.dmg2019-03-01 11:20 33M 
[   ]cmake-3.14.0-rc3-Darwin-x86_64.tar.gz2019-03-01 11:20 32M 
[TXT]cmake-3.14.0-rc3-Linux-x86_64.sh2019-03-01 11:20 35M 
[   ]cmake-3.14.0-rc3-Linux-x86_64.tar.gz2019-03-01 11:20 35M 
[TXT]cmake-3.14.0-rc3-SHA-256.txt2019-03-01 11:20 1.0K 
[TXT]cmake-3.14.0-rc3-SHA-256.txt.asc2019-03-01 11:20 833  
[   ]cmake-3.14.0-rc3-win32-x86.msi2019-03-01 11:20 19M 
[   ]cmake-3.14.0-rc3-win32-x86.zip2019-03-01 11:20 26M 
[   ]cmake-3.14.0-rc3-win64-x64.msi2019-03-01 11:20 22M 
[   ]cmake-3.14.0-rc3-win64-x64.zip2019-03-01 11:20 29M 
[   ]cmake-3.14.0-rc3.tar.Z2019-03-01 11:20 14M 
[   ]cmake-3.14.0-rc3.tar.gz2019-03-01 11:19 8.4M 
[   ]cmake-3.14.0-rc3.zip2019-03-01 11:19 14M 
[   ]cmake-3.14.0-rc4-Darwin-x86_64.dmg2019-03-08 11:09 33M 
[   ]cmake-3.14.0-rc4-Darwin-x86_64.tar.gz2019-03-08 11:09 32M 
[TXT]cmake-3.14.0-rc4-Linux-x86_64.sh2019-03-08 11:09 35M 
[   ]cmake-3.14.0-rc4-Linux-x86_64.tar.gz2019-03-08 11:09 35M 
[TXT]cmake-3.14.0-rc4-SHA-256.txt2019-03-08 11:09 1.0K 
[TXT]cmake-3.14.0-rc4-SHA-256.txt.asc2019-03-08 11:09 833  
[   ]cmake-3.14.0-rc4-win32-x86.msi2019-03-08 11:08 20M 
[   ]cmake-3.14.0-rc4-win32-x86.zip2019-03-08 11:08 26M 
[   ]cmake-3.14.0-rc4-win64-x64.msi2019-03-08 11:08 22M 
[   ]cmake-3.14.0-rc4-win64-x64.zip2019-03-08 11:08 30M 
[   ]cmake-3.14.0-rc4.tar.Z2019-03-08 11:08 14M 
[   ]cmake-3.14.0-rc4.tar.gz2019-03-08 11:08 8.4M 
[   ]cmake-3.14.0-rc4.zip2019-03-08 11:08 14M 
[   ]cmake-3.14.0-win32-x86.msi2019-03-14 11:36 20M 
[   ]cmake-3.14.0-win32-x86.zip2019-03-14 11:36 26M 
[   ]cmake-3.14.0-win64-x64.msi2019-03-22 11:03 22M 
[   ]cmake-3.14.0-win64-x64.zip2019-03-22 11:03 30M 
[   ]cmake-3.14.0.tar.Z2019-03-14 11:36 14M 
[   ]cmake-3.14.0.tar.gz2019-03-14 11:36 8.4M 
[   ]cmake-3.14.0.zip2019-03-14 11:36 14M 
[   ]cmake-3.14.1-Darwin-x86_64.dmg2019-03-29 12:20 33M 
[   ]cmake-3.14.1-Darwin-x86_64.tar.gz2019-03-29 12:20 32M 
[TXT]cmake-3.14.1-Linux-x86_64.sh2019-03-29 12:20 35M 
[   ]cmake-3.14.1-Linux-x86_64.tar.gz2019-03-29 12:19 35M 
[TXT]cmake-3.14.1-SHA-256.txt2019-03-29 12:19 1.0K 
[TXT]cmake-3.14.1-SHA-256.txt.asc2019-03-29 12:19 833  
[   ]cmake-3.14.1-win32-x86.msi2019-03-29 12:19 20M 
[   ]cmake-3.14.1-win32-x86.zip2019-03-29 12:19 26M 
[   ]cmake-3.14.1-win64-x64.msi2019-03-29 12:19 22M 
[   ]cmake-3.14.1-win64-x64.zip2019-03-29 12:19 30M 
[   ]cmake-3.14.1.tar.Z2019-03-29 12:19 14M 
[   ]cmake-3.14.1.tar.gz2019-03-29 12:19 8.4M 
[   ]cmake-3.14.1.zip2019-03-29 12:19 14M 
[   ]cmake-3.14.2-Darwin-x86_64.dmg2019-04-12 10:19 33M 
[   ]cmake-3.14.2-Darwin-x86_64.tar.gz2019-04-12 10:19 32M 
[TXT]cmake-3.14.2-Linux-x86_64.sh2019-04-12 10:19 35M 
[   ]cmake-3.14.2-Linux-x86_64.tar.gz2019-04-12 10:19 35M 
[TXT]cmake-3.14.2-SHA-256.txt2019-04-12 10:19 1.0K 
[TXT]cmake-3.14.2-SHA-256.txt.asc2019-04-12 10:19 833  
[   ]cmake-3.14.2-win32-x86.msi2019-04-12 10:19 20M 
[   ]cmake-3.14.2-win32-x86.zip2019-04-12 10:19 26M 
[   ]cmake-3.14.2-win64-x64.msi2019-04-12 10:19 22M 
[   ]cmake-3.14.2-win64-x64.zip2019-04-12 10:19 30M 
[   ]cmake-3.14.2.tar.Z2019-04-12 10:19 14M 
[   ]cmake-3.14.2.tar.gz2019-04-12 10:19 8.4M 
[   ]cmake-3.14.2.zip2019-04-12 10:19 14M 
[   ]cmake-3.14.3-Darwin-x86_64.dmg2019-04-22 10:40 33M 
[   ]cmake-3.14.3-Darwin-x86_64.tar.gz2019-04-22 10:39 32M 
[TXT]cmake-3.14.3-Linux-x86_64.sh2019-04-22 10:39 35M 
[   ]cmake-3.14.3-Linux-x86_64.tar.gz2019-04-22 10:39 35M 
[TXT]cmake-3.14.3-SHA-256.txt2019-04-22 10:39 1.0K 
[TXT]cmake-3.14.3-SHA-256.txt.asc2019-04-22 10:39 833  
[   ]cmake-3.14.3-win32-x86.msi2019-04-22 10:39 20M 
[   ]cmake-3.14.3-win32-x86.zip2019-04-22 10:39 26M 
[   ]cmake-3.14.3-win64-x64.msi2019-04-22 10:39 22M 
[   ]cmake-3.14.3-win64-x64.zip2019-04-22 10:39 30M 
[   ]cmake-3.14.3.tar.Z2019-04-22 10:39 14M 
[   ]cmake-3.14.3.tar.gz2019-04-22 10:39 8.4M 
[   ]cmake-3.14.3.zip2019-04-22 10:39 14M 
[   ]cmake-3.14.4-Darwin-x86_64.dmg2019-05-14 14:00 33M 
[   ]cmake-3.14.4-Darwin-x86_64.tar.gz2019-05-14 14:00 32M 
[TXT]cmake-3.14.4-Linux-x86_64.sh2019-05-14 14:00 35M 
[   ]cmake-3.14.4-Linux-x86_64.tar.gz2019-05-14 13:59 35M 
[TXT]cmake-3.14.4-SHA-256.txt2019-05-14 13:59 1.0K 
[TXT]cmake-3.14.4-SHA-256.txt.asc2019-05-14 13:59 833  
[   ]cmake-3.14.4-win32-x86.msi2019-05-14 13:59 20M 
[   ]cmake-3.14.4-win32-x86.zip2019-05-14 13:59 26M 
[   ]cmake-3.14.4-win64-x64.msi2019-05-14 13:59 22M 
[   ]cmake-3.14.4-win64-x64.zip2019-05-14 13:59 30M 
[   ]cmake-3.14.4.tar.Z2019-05-14 13:59 14M 
[   ]cmake-3.14.4.tar.gz2019-05-14 13:59 8.4M 
[   ]cmake-3.14.4.zip2019-05-14 13:59 14M 
[   ]cmake-3.14.5-Darwin-x86_64.dmg2019-05-31 12:39 33M 
[   ]cmake-3.14.5-Darwin-x86_64.tar.gz2019-05-31 12:39 32M 
[TXT]cmake-3.14.5-Linux-x86_64.sh2019-05-31 12:39 35M 
[   ]cmake-3.14.5-Linux-x86_64.tar.gz2019-05-31 12:39 35M 
[TXT]cmake-3.14.5-SHA-256.txt2019-05-31 12:39 1.0K 
[TXT]cmake-3.14.5-SHA-256.txt.asc2019-05-31 12:39 833  
[   ]cmake-3.14.5-win32-x86.msi2019-05-31 12:39 20M 
[   ]cmake-3.14.5-win32-x86.zip2019-05-31 12:39 26M 
[   ]cmake-3.14.5-win64-x64.msi2019-05-31 12:39 22M 
[   ]cmake-3.14.5-win64-x64.zip2019-05-31 12:39 30M 
[   ]cmake-3.14.5.tar.Z2019-05-31 12:39 14M 
[   ]cmake-3.14.5.tar.gz2019-05-31 12:39 8.4M 
[   ]cmake-3.14.5.zip2019-05-31 12:40 14M 
[   ]cmake-3.14.6-Darwin-x86_64.dmg2019-07-16 09:33 33M 
[   ]cmake-3.14.6-Darwin-x86_64.tar.gz2019-07-16 09:33 32M 
[TXT]cmake-3.14.6-Linux-x86_64.sh2019-07-16 09:33 35M 
[   ]cmake-3.14.6-Linux-x86_64.tar.gz2019-07-16 09:33 35M 
[TXT]cmake-3.14.6-SHA-256.txt2019-07-16 09:33 1.0K 
[TXT]cmake-3.14.6-SHA-256.txt.asc2019-07-16 09:33 833  
[   ]cmake-3.14.6-win32-x86.msi2019-07-16 09:34 20M 
[   ]cmake-3.14.6-win32-x86.zip2019-07-16 09:34 26M 
[   ]cmake-3.14.6-win64-x64.msi2019-07-16 09:34 22M 
[   ]cmake-3.14.6-win64-x64.zip2019-07-16 09:34 30M 
[   ]cmake-3.14.6.tar.Z2019-07-16 09:34 14M 
[   ]cmake-3.14.6.tar.gz2019-07-16 09:34 8.5M 
[   ]cmake-3.14.6.zip2019-07-16 09:34 14M 
[   ]cmake-3.14.7-Darwin-x86_64.dmg2019-10-02 10:48 33M 
[   ]cmake-3.14.7-Darwin-x86_64.tar.gz2019-10-02 10:48 32M 
[TXT]cmake-3.14.7-Linux-x86_64.sh2019-10-02 10:48 35M 
[   ]cmake-3.14.7-Linux-x86_64.tar.gz2019-10-02 10:48 35M 
[TXT]cmake-3.14.7-SHA-256.txt2019-10-02 10:48 1.0K 
[TXT]cmake-3.14.7-SHA-256.txt.asc2019-10-02 10:48 833  
[   ]cmake-3.14.7-win32-x86.msi2019-10-02 10:48 20M 
[   ]cmake-3.14.7-win32-x86.zip2019-10-02 10:48 26M 
[   ]cmake-3.14.7-win64-x64.msi2019-10-02 10:48 21M 
[   ]cmake-3.14.7-win64-x64.zip2019-10-02 10:48 29M 
[   ]cmake-3.14.7.tar.Z2019-10-02 10:48 14M 
[   ]cmake-3.14.7.tar.gz2019-10-02 10:48 8.5M 
[   ]cmake-3.14.7.zip2019-10-02 10:48 14M 

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.15/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.15/index.html new file mode 100644 index 00000000..92726767 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.15/index.html @@ -0,0 +1,157 @@ + + + + Index of /files/v3.15 + + +

Index of /files/v3.15

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]cmake-3.15.0-Darwin-x86_64.dmg2019-07-17 10:38 33M 
[   ]cmake-3.15.0-Darwin-x86_64.tar.gz2019-07-17 10:38 33M 
[TXT]cmake-3.15.0-Linux-x86_64.sh2019-07-17 10:38 37M 
[   ]cmake-3.15.0-Linux-x86_64.tar.gz2019-07-17 10:38 37M 
[TXT]cmake-3.15.0-SHA-256.txt2019-07-17 10:38 1.0K 
[TXT]cmake-3.15.0-SHA-256.txt.asc2019-07-17 10:38 833  
[   ]cmake-3.15.0-rc1-Darwin-x86_64.dmg2019-06-04 14:22 33M 
[   ]cmake-3.15.0-rc1-Darwin-x86_64.tar.gz2019-06-04 14:22 33M 
[TXT]cmake-3.15.0-rc1-Linux-x86_64.sh2019-06-04 14:22 37M 
[   ]cmake-3.15.0-rc1-Linux-x86_64.tar.gz2019-06-04 14:22 37M 
[TXT]cmake-3.15.0-rc1-SHA-256.txt2019-06-04 14:22 1.0K 
[TXT]cmake-3.15.0-rc1-SHA-256.txt.asc2019-06-04 14:22 833  
[   ]cmake-3.15.0-rc1-win32-x86.msi2019-06-04 14:23 20M 
[   ]cmake-3.15.0-rc1-win32-x86.zip2019-06-04 14:23 28M 
[   ]cmake-3.15.0-rc1-win64-x64.msi2019-06-04 14:23 23M 
[   ]cmake-3.15.0-rc1-win64-x64.zip2019-06-04 14:23 31M 
[   ]cmake-3.15.0-rc1.tar.Z2019-06-04 14:23 14M 
[   ]cmake-3.15.0-rc1.tar.gz2019-06-04 14:22 8.8M 
[   ]cmake-3.15.0-rc1.zip2019-06-04 14:23 15M 
[   ]cmake-3.15.0-rc2-Darwin-x86_64.dmg2019-06-19 10:04 33M 
[   ]cmake-3.15.0-rc2-Darwin-x86_64.tar.gz2019-06-19 10:04 33M 
[TXT]cmake-3.15.0-rc2-Linux-x86_64.sh2019-06-19 10:04 37M 
[   ]cmake-3.15.0-rc2-Linux-x86_64.tar.gz2019-06-19 10:04 37M 
[TXT]cmake-3.15.0-rc2-SHA-256.txt2019-06-19 10:04 1.0K 
[TXT]cmake-3.15.0-rc2-SHA-256.txt.asc2019-06-19 10:04 833  
[   ]cmake-3.15.0-rc2-win32-x86.msi2019-06-19 10:04 20M 
[   ]cmake-3.15.0-rc2-win32-x86.zip2019-06-19 10:04 28M 
[   ]cmake-3.15.0-rc2-win64-x64.msi2019-06-19 10:04 23M 
[   ]cmake-3.15.0-rc2-win64-x64.zip2019-06-19 10:04 31M 
[   ]cmake-3.15.0-rc2.tar.Z2019-06-19 10:04 14M 
[   ]cmake-3.15.0-rc2.tar.gz2019-06-19 10:04 8.8M 
[   ]cmake-3.15.0-rc2.zip2019-06-19 10:04 15M 
[   ]cmake-3.15.0-rc3-Darwin-x86_64.dmg2019-06-27 11:33 33M 
[   ]cmake-3.15.0-rc3-Darwin-x86_64.tar.gz2019-06-27 11:33 33M 
[TXT]cmake-3.15.0-rc3-Linux-x86_64.sh2019-06-27 11:33 37M 
[   ]cmake-3.15.0-rc3-Linux-x86_64.tar.gz2019-06-27 11:33 37M 
[TXT]cmake-3.15.0-rc3-SHA-256.txt2019-06-27 11:33 1.0K 
[TXT]cmake-3.15.0-rc3-SHA-256.txt.asc2019-06-27 11:33 833  
[   ]cmake-3.15.0-rc3-win32-x86.msi2019-06-27 11:33 20M 
[   ]cmake-3.15.0-rc3-win32-x86.zip2019-06-27 11:33 28M 
[   ]cmake-3.15.0-rc3-win64-x64.msi2019-06-27 11:33 23M 
[   ]cmake-3.15.0-rc3-win64-x64.zip2019-06-27 11:33 31M 
[   ]cmake-3.15.0-rc3.tar.Z2019-06-27 11:33 14M 
[   ]cmake-3.15.0-rc3.tar.gz2019-06-27 11:33 8.8M 
[   ]cmake-3.15.0-rc3.zip2019-06-27 11:33 15M 
[   ]cmake-3.15.0-rc4-Darwin-x86_64.dmg2019-07-10 15:06 33M 
[   ]cmake-3.15.0-rc4-Darwin-x86_64.tar.gz2019-07-10 15:07 33M 
[TXT]cmake-3.15.0-rc4-Linux-x86_64.sh2019-07-10 15:07 37M 
[   ]cmake-3.15.0-rc4-Linux-x86_64.tar.gz2019-07-10 15:07 37M 
[TXT]cmake-3.15.0-rc4-SHA-256.txt2019-07-10 15:07 1.0K 
[TXT]cmake-3.15.0-rc4-SHA-256.txt.asc2019-07-10 15:07 833  
[   ]cmake-3.15.0-rc4-win32-x86.msi2019-07-10 15:07 20M 
[   ]cmake-3.15.0-rc4-win32-x86.zip2019-07-10 15:07 28M 
[   ]cmake-3.15.0-rc4-win64-x64.msi2019-07-10 15:07 23M 
[   ]cmake-3.15.0-rc4-win64-x64.zip2019-07-10 15:07 31M 
[   ]cmake-3.15.0-rc4.tar.Z2019-07-10 15:07 14M 
[   ]cmake-3.15.0-rc4.tar.gz2019-07-10 15:07 8.8M 
[   ]cmake-3.15.0-rc4.zip2019-07-10 15:07 15M 
[   ]cmake-3.15.0-win32-x86.msi2019-07-17 10:38 20M 
[   ]cmake-3.15.0-win32-x86.zip2019-07-17 10:38 27M 
[   ]cmake-3.15.0-win64-x64.msi2019-07-17 10:38 23M 
[   ]cmake-3.15.0-win64-x64.zip2019-07-17 10:38 31M 
[   ]cmake-3.15.0.tar.Z2019-07-17 10:38 14M 
[   ]cmake-3.15.0.tar.gz2019-07-17 10:38 8.8M 
[   ]cmake-3.15.0.zip2019-07-17 10:38 15M 
[   ]cmake-3.15.1-Darwin-x86_64.dmg2019-07-26 10:14 33M 
[   ]cmake-3.15.1-Darwin-x86_64.tar.gz2019-07-26 10:14 33M 
[TXT]cmake-3.15.1-Linux-x86_64.sh2019-07-26 10:14 37M 
[   ]cmake-3.15.1-Linux-x86_64.tar.gz2019-07-26 10:14 37M 
[TXT]cmake-3.15.1-SHA-256.txt2019-07-26 10:14 1.0K 
[TXT]cmake-3.15.1-SHA-256.txt.asc2019-07-26 10:14 833  
[   ]cmake-3.15.1-win32-x86.msi2019-07-26 10:14 20M 
[   ]cmake-3.15.1-win32-x86.zip2019-07-26 10:14 27M 
[   ]cmake-3.15.1-win64-x64.msi2019-07-26 10:14 23M 
[   ]cmake-3.15.1-win64-x64.zip2019-07-26 10:14 31M 
[   ]cmake-3.15.1.tar.Z2019-07-26 10:14 14M 
[   ]cmake-3.15.1.tar.gz2019-07-26 10:14 8.8M 
[   ]cmake-3.15.1.zip2019-07-26 10:15 15M 
[   ]cmake-3.15.2-Darwin-x86_64.dmg2019-08-07 15:05 33M 
[   ]cmake-3.15.2-Darwin-x86_64.tar.gz2019-08-07 15:05 33M 
[TXT]cmake-3.15.2-Linux-x86_64.sh2019-08-07 15:05 37M 
[   ]cmake-3.15.2-Linux-x86_64.tar.gz2019-08-07 15:05 37M 
[TXT]cmake-3.15.2-SHA-256.txt2019-08-07 15:05 1.0K 
[TXT]cmake-3.15.2-SHA-256.txt.asc2019-08-07 15:05 833  
[   ]cmake-3.15.2-win32-x86.msi2019-08-07 15:05 20M 
[   ]cmake-3.15.2-win32-x86.zip2019-08-07 15:05 27M 
[   ]cmake-3.15.2-win64-x64.msi2019-08-07 15:05 23M 
[   ]cmake-3.15.2-win64-x64.zip2019-08-07 15:05 31M 
[   ]cmake-3.15.2.tar.Z2019-08-07 15:05 14M 
[   ]cmake-3.15.2.tar.gz2019-08-07 15:05 8.8M 
[   ]cmake-3.15.2.zip2019-08-07 15:05 15M 
[   ]cmake-3.15.3-Darwin-x86_64.dmg2019-09-04 11:13 33M 
[   ]cmake-3.15.3-Darwin-x86_64.tar.gz2019-09-04 11:13 33M 
[TXT]cmake-3.15.3-Linux-x86_64.sh2019-09-04 11:13 37M 
[   ]cmake-3.15.3-Linux-x86_64.tar.gz2019-09-04 11:13 37M 
[TXT]cmake-3.15.3-SHA-256.txt2019-09-04 11:13 1.0K 
[TXT]cmake-3.15.3-SHA-256.txt.asc2019-09-04 11:13 833  
[   ]cmake-3.15.3-win32-x86.msi2019-09-04 11:13 20M 
[   ]cmake-3.15.3-win32-x86.zip2019-09-04 11:13 27M 
[   ]cmake-3.15.3-win64-x64.msi2019-09-04 11:13 23M 
[   ]cmake-3.15.3-win64-x64.zip2019-09-04 11:13 31M 
[   ]cmake-3.15.3.tar.Z2019-09-04 11:13 14M 
[   ]cmake-3.15.3.tar.gz2019-09-04 11:13 8.8M 
[   ]cmake-3.15.3.zip2019-09-04 11:13 15M 
[   ]cmake-3.15.4-Darwin-x86_64.dmg2019-10-02 10:45 33M 
[   ]cmake-3.15.4-Darwin-x86_64.tar.gz2019-10-02 10:45 33M 
[TXT]cmake-3.15.4-Linux-x86_64.sh2019-10-02 10:45 37M 
[   ]cmake-3.15.4-Linux-x86_64.tar.gz2019-10-02 10:45 37M 
[TXT]cmake-3.15.4-SHA-256.txt2019-10-02 10:45 1.0K 
[TXT]cmake-3.15.4-SHA-256.txt.asc2019-10-02 10:45 833  
[   ]cmake-3.15.4-win32-x86.msi2019-10-02 10:45 20M 
[   ]cmake-3.15.4-win32-x86.zip2019-10-02 10:45 27M 
[   ]cmake-3.15.4-win64-x64.msi2019-10-02 10:45 22M 
[   ]cmake-3.15.4-win64-x64.zip2019-10-02 10:45 30M 
[   ]cmake-3.15.4.tar.Z2019-10-02 10:45 14M 
[   ]cmake-3.15.4.tar.gz2019-10-02 10:45 8.8M 
[   ]cmake-3.15.4.zip2019-10-02 10:45 15M 
[   ]cmake-3.15.5-Darwin-x86_64.dmg2019-10-30 10:49 33M 
[   ]cmake-3.15.5-Darwin-x86_64.tar.gz2019-10-30 10:49 33M 
[TXT]cmake-3.15.5-Linux-x86_64.sh2019-10-30 10:49 37M 
[   ]cmake-3.15.5-Linux-x86_64.tar.gz2019-10-30 10:49 37M 
[TXT]cmake-3.15.5-SHA-256.txt2019-10-30 10:49 1.0K 
[TXT]cmake-3.15.5-SHA-256.txt.asc2019-10-30 10:49 833  
[   ]cmake-3.15.5-win32-x86.msi2019-10-30 10:49 20M 
[   ]cmake-3.15.5-win32-x86.zip2019-10-30 10:49 27M 
[   ]cmake-3.15.5-win64-x64.msi2019-10-30 10:49 22M 
[   ]cmake-3.15.5-win64-x64.zip2019-10-30 10:49 30M 
[   ]cmake-3.15.5.tar.Z2019-10-30 10:49 14M 
[   ]cmake-3.15.5.tar.gz2019-10-30 10:49 8.8M 
[   ]cmake-3.15.5.zip2019-10-30 10:49 15M 
[   ]cmake-3.15.6-Darwin-x86_64.dmg2019-12-16 11:30 34M 
[   ]cmake-3.15.6-Darwin-x86_64.tar.gz2019-12-16 11:30 33M 
[TXT]cmake-3.15.6-Linux-x86_64.sh2019-12-16 11:30 37M 
[   ]cmake-3.15.6-Linux-x86_64.tar.gz2019-12-16 11:30 37M 
[TXT]cmake-3.15.6-SHA-256.txt2019-12-16 11:30 1.0K 
[TXT]cmake-3.15.6-SHA-256.txt.asc2019-12-16 11:30 833  
[   ]cmake-3.15.6-win32-x86.msi2019-12-16 11:30 21M 
[   ]cmake-3.15.6-win32-x86.zip2019-12-16 11:30 28M 
[   ]cmake-3.15.6-win64-x64.msi2019-12-16 11:30 22M 
[   ]cmake-3.15.6-win64-x64.zip2019-12-16 11:30 30M 
[   ]cmake-3.15.6.tar.Z2019-12-16 11:30 14M 
[   ]cmake-3.15.6.tar.gz2019-12-16 11:30 8.8M 
[   ]cmake-3.15.6.zip2019-12-16 11:30 15M 

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.16/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.16/index.html new file mode 100644 index 00000000..74f9b402 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.16/index.html @@ -0,0 +1,86 @@ + + + + Index of /files/v3.16 + + +

Index of /files/v3.16

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]cmake-3.16.0-Darwin-x86_64.dmg2019-11-26 10:27 35M 
[   ]cmake-3.16.0-Darwin-x86_64.tar.gz2019-11-26 10:27 34M 
[TXT]cmake-3.16.0-Linux-x86_64.sh2019-11-26 10:27 38M 
[   ]cmake-3.16.0-Linux-x86_64.tar.gz2019-11-26 10:27 38M 
[TXT]cmake-3.16.0-SHA-256.txt2019-11-26 10:27 932  
[TXT]cmake-3.16.0-SHA-256.txt.asc2019-11-26 10:27 833  
[   ]cmake-3.16.0-rc1-Darwin-x86_64.dmg2019-10-10 14:18 34M 
[   ]cmake-3.16.0-rc1-Darwin-x86_64.tar.gz2019-10-10 14:18 34M 
[TXT]cmake-3.16.0-rc1-Linux-x86_64.sh2019-10-10 14:18 38M 
[   ]cmake-3.16.0-rc1-Linux-x86_64.tar.gz2019-10-10 14:18 38M 
[TXT]cmake-3.16.0-rc1-SHA-256.txt2019-10-10 14:18 972  
[TXT]cmake-3.16.0-rc1-SHA-256.txt.asc2019-10-10 14:18 833  
[   ]cmake-3.16.0-rc1-win32-x86.msi2019-10-10 14:18 21M 
[   ]cmake-3.16.0-rc1-win32-x86.zip2019-10-10 14:18 28M 
[   ]cmake-3.16.0-rc1-win64-x64.msi2019-10-10 14:18 23M 
[   ]cmake-3.16.0-rc1-win64-x64.zip2019-10-10 14:18 31M 
[   ]cmake-3.16.0-rc1.tar.gz2019-10-10 14:18 8.7M 
[   ]cmake-3.16.0-rc1.zip2019-10-10 14:18 14M 
[   ]cmake-3.16.0-rc2-Darwin-x86_64.dmg2019-10-18 10:47 34M 
[   ]cmake-3.16.0-rc2-Darwin-x86_64.tar.gz2019-10-18 10:47 34M 
[TXT]cmake-3.16.0-rc2-Linux-x86_64.sh2019-10-18 10:47 38M 
[   ]cmake-3.16.0-rc2-Linux-x86_64.tar.gz2019-10-18 10:47 38M 
[TXT]cmake-3.16.0-rc2-SHA-256.txt2019-10-18 10:47 972  
[TXT]cmake-3.16.0-rc2-SHA-256.txt.asc2019-10-18 10:47 833  
[   ]cmake-3.16.0-rc2-win32-x86.msi2019-10-18 10:47 21M 
[   ]cmake-3.16.0-rc2-win32-x86.zip2019-10-18 10:47 28M 
[   ]cmake-3.16.0-rc2-win64-x64.msi2019-10-18 10:47 23M 
[   ]cmake-3.16.0-rc2-win64-x64.zip2019-10-18 10:47 31M 
[   ]cmake-3.16.0-rc2.tar.gz2019-10-18 10:47 8.7M 
[   ]cmake-3.16.0-rc2.zip2019-10-18 10:47 14M 
[   ]cmake-3.16.0-rc3-Darwin-x86_64.dmg2019-10-31 12:09 34M 
[   ]cmake-3.16.0-rc3-Darwin-x86_64.tar.gz2019-10-31 12:09 34M 
[TXT]cmake-3.16.0-rc3-Linux-x86_64.sh2019-10-31 12:09 38M 
[   ]cmake-3.16.0-rc3-Linux-x86_64.tar.gz2019-10-31 12:10 38M 
[TXT]cmake-3.16.0-rc3-SHA-256.txt2019-10-31 12:10 972  
[TXT]cmake-3.16.0-rc3-SHA-256.txt.asc2019-10-31 12:10 833  
[   ]cmake-3.16.0-rc3-win32-x86.msi2019-10-31 12:10 21M 
[   ]cmake-3.16.0-rc3-win32-x86.zip2019-10-31 12:10 28M 
[   ]cmake-3.16.0-rc3-win64-x64.msi2019-10-31 12:10 23M 
[   ]cmake-3.16.0-rc3-win64-x64.zip2019-10-31 12:10 31M 
[   ]cmake-3.16.0-rc3.tar.gz2019-10-31 12:10 8.7M 
[   ]cmake-3.16.0-rc3.zip2019-10-31 12:10 14M 
[   ]cmake-3.16.0-rc4-Darwin-x86_64.dmg2019-11-18 17:01 35M 
[   ]cmake-3.16.0-rc4-Darwin-x86_64.tar.gz2019-11-18 17:01 34M 
[TXT]cmake-3.16.0-rc4-Linux-x86_64.sh2019-11-18 17:01 38M 
[   ]cmake-3.16.0-rc4-Linux-x86_64.tar.gz2019-11-18 17:01 38M 
[TXT]cmake-3.16.0-rc4-SHA-256.txt2019-11-18 17:01 972  
[TXT]cmake-3.16.0-rc4-SHA-256.txt.asc2019-11-18 17:01 833  
[   ]cmake-3.16.0-rc4-win32-x86.msi2019-11-18 17:01 21M 
[   ]cmake-3.16.0-rc4-win32-x86.zip2019-11-18 17:01 28M 
[   ]cmake-3.16.0-rc4-win64-x64.msi2019-11-18 17:01 23M 
[   ]cmake-3.16.0-rc4-win64-x64.zip2019-11-18 17:01 31M 
[   ]cmake-3.16.0-rc4.tar.gz2019-11-18 17:01 8.7M 
[   ]cmake-3.16.0-rc4.zip2019-11-18 17:01 14M 
[   ]cmake-3.16.0-win32-x86.msi2019-11-26 10:27 21M 
[   ]cmake-3.16.0-win32-x86.zip2019-11-26 10:27 28M 
[   ]cmake-3.16.0-win64-x64.msi2019-11-26 10:27 23M 
[   ]cmake-3.16.0-win64-x64.zip2019-11-26 10:27 31M 
[   ]cmake-3.16.0.tar.gz2019-11-26 10:27 8.7M 
[   ]cmake-3.16.0.zip2019-11-26 10:27 14M 
[   ]cmake-3.16.1-Darwin-x86_64.dmg2019-12-10 10:42 35M 
[   ]cmake-3.16.1-Darwin-x86_64.tar.gz2019-12-10 10:42 34M 
[TXT]cmake-3.16.1-Linux-x86_64.sh2019-12-10 10:42 38M 
[   ]cmake-3.16.1-Linux-x86_64.tar.gz2019-12-10 10:42 38M 
[TXT]cmake-3.16.1-SHA-256.txt2019-12-10 10:42 932  
[TXT]cmake-3.16.1-SHA-256.txt.asc2019-12-10 10:42 833  
[   ]cmake-3.16.1-win32-x86.msi2019-12-10 10:42 21M 
[   ]cmake-3.16.1-win32-x86.zip2019-12-10 10:42 28M 
[   ]cmake-3.16.1-win64-x64.msi2019-12-10 10:42 23M 
[   ]cmake-3.16.1-win64-x64.zip2019-12-10 10:42 31M 
[   ]cmake-3.16.1.tar.gz2019-12-10 10:42 8.7M 
[   ]cmake-3.16.1.zip2019-12-10 10:42 14M 

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.2/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.2/index.html new file mode 100644 index 00000000..a8c6c7f2 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.2/index.html @@ -0,0 +1,132 @@ + + + + Index of /files/v3.2 + + +

Index of /files/v3.2

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]cmake-3.2.0-1-src.tar.bz22015-03-10 09:02 4.9M 
[   ]cmake-3.2.0-1.tar.bz22015-03-10 09:02 9.4M 
[   ]cmake-3.2.0-Darwin-universal.dmg2015-03-10 09:02 47M 
[   ]cmake-3.2.0-Darwin-universal.tar.Z2015-03-10 09:02 66M 
[   ]cmake-3.2.0-Darwin-universal.tar.gz2015-03-10 09:01 46M 
[   ]cmake-3.2.0-Darwin-x86_64.dmg2015-03-10 09:01 27M 
[   ]cmake-3.2.0-Darwin-x86_64.tar.Z2015-03-10 09:01 38M 
[   ]cmake-3.2.0-Darwin-x86_64.tar.gz2015-03-10 09:01 26M 
[TXT]cmake-3.2.0-Linux-i386.sh2015-03-10 09:01 25M 
[   ]cmake-3.2.0-Linux-i386.tar.Z2015-03-10 09:01 36M 
[   ]cmake-3.2.0-Linux-i386.tar.gz2015-03-10 09:01 25M 
[TXT]cmake-3.2.0-Linux-x86_64.sh2015-03-10 09:01 26M 
[   ]cmake-3.2.0-Linux-x86_64.tar.Z2015-03-10 09:01 36M 
[   ]cmake-3.2.0-Linux-x86_64.tar.gz2015-03-10 09:01 26M 
[TXT]cmake-3.2.0-SHA-256.txt2016-04-13 12:48 1.6K 
[TXT]cmake-3.2.0-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.2.0-rc1-Darwin-universal.dmg2015-02-13 15:03 47M 
[   ]cmake-3.2.0-rc1-Darwin-universal.tar.Z2015-02-13 15:03 66M 
[   ]cmake-3.2.0-rc1-Darwin-universal.tar.gz2015-02-13 15:03 46M 
[   ]cmake-3.2.0-rc1-Darwin-x86_64.dmg2015-02-13 15:03 30M 
[   ]cmake-3.2.0-rc1-Darwin-x86_64.tar.Z2015-02-13 15:03 42M 
[   ]cmake-3.2.0-rc1-Darwin-x86_64.tar.gz2015-02-13 15:03 29M 
[TXT]cmake-3.2.0-rc1-Linux-i386.sh2015-02-13 15:03 25M 
[   ]cmake-3.2.0-rc1-Linux-i386.tar.Z2015-02-13 15:03 36M 
[   ]cmake-3.2.0-rc1-Linux-i386.tar.gz2015-02-13 15:03 25M 
[TXT]cmake-3.2.0-rc1-Linux-x86_64.sh2015-02-13 15:03 26M 
[   ]cmake-3.2.0-rc1-Linux-x86_64.tar.Z2015-02-13 15:03 36M 
[   ]cmake-3.2.0-rc1-Linux-x86_64.tar.gz2015-02-13 15:02 26M 
[TXT]cmake-3.2.0-rc1-SHA-256.txt2016-04-13 12:48 1.6K 
[TXT]cmake-3.2.0-rc1-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.2.0-rc1-win32-x86.exe2015-02-13 15:02 12M 
[   ]cmake-3.2.0-rc1-win32-x86.zip2015-02-13 15:02 16M 
[   ]cmake-3.2.0-rc1.tar.Z2015-02-13 15:02 9.9M 
[   ]cmake-3.2.0-rc1.tar.gz2015-02-13 15:02 6.1M 
[   ]cmake-3.2.0-rc1.zip2015-02-13 15:02 9.8M 
[   ]cmake-3.2.0-rc2-Darwin-universal.dmg2015-02-24 08:51 47M 
[   ]cmake-3.2.0-rc2-Darwin-universal.tar.Z2015-02-24 08:51 66M 
[   ]cmake-3.2.0-rc2-Darwin-universal.tar.gz2015-02-24 08:51 46M 
[   ]cmake-3.2.0-rc2-Darwin-x86_64.dmg2015-02-24 08:51 27M 
[   ]cmake-3.2.0-rc2-Darwin-x86_64.tar.Z2015-02-24 08:51 38M 
[   ]cmake-3.2.0-rc2-Darwin-x86_64.tar.gz2015-02-24 08:51 26M 
[TXT]cmake-3.2.0-rc2-Linux-i386.sh2015-02-24 08:50 25M 
[   ]cmake-3.2.0-rc2-Linux-i386.tar.Z2015-02-24 08:50 36M 
[   ]cmake-3.2.0-rc2-Linux-i386.tar.gz2015-02-24 08:50 25M 
[TXT]cmake-3.2.0-rc2-Linux-x86_64.sh2015-02-24 08:50 26M 
[   ]cmake-3.2.0-rc2-Linux-x86_64.tar.Z2015-02-24 08:50 36M 
[   ]cmake-3.2.0-rc2-Linux-x86_64.tar.gz2015-02-24 08:50 26M 
[TXT]cmake-3.2.0-rc2-SHA-256.txt2016-04-13 12:48 1.6K 
[TXT]cmake-3.2.0-rc2-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.2.0-rc2-win32-x86.exe2015-02-24 08:50 11M 
[   ]cmake-3.2.0-rc2-win32-x86.zip2015-02-24 08:50 15M 
[   ]cmake-3.2.0-rc2.tar.Z2015-02-24 08:50 10M 
[   ]cmake-3.2.0-rc2.tar.gz2015-02-24 08:50 6.1M 
[   ]cmake-3.2.0-rc2.zip2015-02-24 08:50 9.8M 
[   ]cmake-3.2.0-win32-x86.exe2015-03-10 09:01 11M 
[   ]cmake-3.2.0-win32-x86.zip2015-03-10 09:01 15M 
[   ]cmake-3.2.0.tar.Z2015-03-10 09:01 9.9M 
[   ]cmake-3.2.0.tar.gz2015-03-10 09:01 6.1M 
[   ]cmake-3.2.0.zip2015-03-10 09:01 9.7M 
[   ]cmake-3.2.1-1-src.tar.bz22015-03-11 09:10 4.9M 
[   ]cmake-3.2.1-1.tar.bz22015-03-11 09:10 9.5M 
[   ]cmake-3.2.1-Darwin-universal.dmg2015-03-11 09:10 47M 
[   ]cmake-3.2.1-Darwin-universal.tar.Z2015-03-11 09:10 66M 
[   ]cmake-3.2.1-Darwin-universal.tar.gz2015-03-11 09:10 46M 
[   ]cmake-3.2.1-Darwin-x86_64.dmg2015-03-11 09:10 27M 
[   ]cmake-3.2.1-Darwin-x86_64.tar.Z2015-03-11 09:10 38M 
[   ]cmake-3.2.1-Darwin-x86_64.tar.gz2015-03-11 09:10 26M 
[TXT]cmake-3.2.1-Linux-i386.sh2015-03-11 09:10 25M 
[   ]cmake-3.2.1-Linux-i386.tar.Z2015-03-11 09:09 36M 
[   ]cmake-3.2.1-Linux-i386.tar.gz2015-03-11 09:09 25M 
[TXT]cmake-3.2.1-Linux-x86_64.sh2015-03-11 09:09 26M 
[   ]cmake-3.2.1-Linux-x86_64.tar.Z2015-03-11 09:09 36M 
[   ]cmake-3.2.1-Linux-x86_64.tar.gz2015-03-11 09:09 26M 
[TXT]cmake-3.2.1-SHA-256.txt2016-04-13 12:48 1.6K 
[TXT]cmake-3.2.1-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.2.1-win32-x86.exe2015-03-11 09:09 11M 
[   ]cmake-3.2.1-win32-x86.zip2015-03-11 09:09 15M 
[   ]cmake-3.2.1.tar.Z2015-03-11 09:09 10M 
[   ]cmake-3.2.1.tar.gz2015-03-11 09:09 6.1M 
[   ]cmake-3.2.1.zip2015-03-11 09:09 9.7M 
[   ]cmake-3.2.2-Darwin-universal.dmg2015-04-14 13:45 47M 
[   ]cmake-3.2.2-Darwin-universal.tar.Z2015-04-14 13:45 66M 
[   ]cmake-3.2.2-Darwin-universal.tar.gz2015-04-14 13:45 46M 
[   ]cmake-3.2.2-Darwin-x86_64.dmg2015-04-14 13:45 27M 
[   ]cmake-3.2.2-Darwin-x86_64.tar.Z2015-04-14 13:45 38M 
[   ]cmake-3.2.2-Darwin-x86_64.tar.gz2015-04-14 13:45 26M 
[TXT]cmake-3.2.2-Linux-i386.sh2015-04-14 13:44 25M 
[   ]cmake-3.2.2-Linux-i386.tar.Z2015-04-14 13:44 36M 
[   ]cmake-3.2.2-Linux-i386.tar.gz2015-04-14 13:44 25M 
[TXT]cmake-3.2.2-Linux-x86_64.sh2015-04-14 13:44 26M 
[   ]cmake-3.2.2-Linux-x86_64.tar.Z2015-04-14 13:44 36M 
[   ]cmake-3.2.2-Linux-x86_64.tar.gz2015-04-14 13:44 26M 
[TXT]cmake-3.2.2-SHA-256.txt2016-04-13 12:48 1.6K 
[TXT]cmake-3.2.2-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.2.2-win32-x86.exe2015-04-14 13:44 11M 
[   ]cmake-3.2.2-win32-x86.zip2015-04-14 13:44 15M 
[   ]cmake-3.2.2.tar.Z2015-04-14 13:44 9.9M 
[   ]cmake-3.2.2.tar.gz2015-04-14 13:44 6.1M 
[   ]cmake-3.2.2.zip2015-04-14 13:44 9.7M 
[   ]cmake-3.2.3-Darwin-universal.dmg2015-06-01 17:04 47M 
[   ]cmake-3.2.3-Darwin-universal.tar.Z2015-06-01 17:04 66M 
[   ]cmake-3.2.3-Darwin-universal.tar.gz2015-06-01 17:04 46M 
[   ]cmake-3.2.3-Darwin-x86_64.dmg2015-06-01 17:04 27M 
[   ]cmake-3.2.3-Darwin-x86_64.tar.Z2015-06-01 17:04 38M 
[   ]cmake-3.2.3-Darwin-x86_64.tar.gz2015-06-01 17:04 26M 
[TXT]cmake-3.2.3-Linux-i386.sh2015-06-01 17:04 25M 
[   ]cmake-3.2.3-Linux-i386.tar.Z2015-06-01 17:03 36M 
[   ]cmake-3.2.3-Linux-i386.tar.gz2015-06-01 17:03 25M 
[TXT]cmake-3.2.3-Linux-x86_64.sh2015-06-01 17:03 26M 
[   ]cmake-3.2.3-Linux-x86_64.tar.Z2015-06-01 17:03 36M 
[   ]cmake-3.2.3-Linux-x86_64.tar.gz2015-06-01 17:03 26M 
[TXT]cmake-3.2.3-SHA-256.txt2016-04-13 12:48 1.6K 
[TXT]cmake-3.2.3-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.2.3-win32-x86.exe2015-06-01 17:03 11M 
[   ]cmake-3.2.3-win32-x86.zip2015-06-01 17:03 15M 
[   ]cmake-3.2.3.tar.Z2015-06-01 17:03 9.9M 
[   ]cmake-3.2.3.tar.gz2015-06-01 17:03 6.1M 
[   ]cmake-3.2.3.zip2015-06-01 17:03 9.7M 

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.3/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.3/index.html new file mode 100644 index 00000000..d0537365 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.3/index.html @@ -0,0 +1,163 @@ + + + + Index of /files/v3.3 + + +

Index of /files/v3.3

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]cmake-3.3.0-1-src.tar.bz22015-07-23 16:39 5.0M 
[   ]cmake-3.3.0-1.tar.bz22015-07-23 16:39 9.8M 
[   ]cmake-3.3.0-Darwin-universal.dmg2015-07-23 16:39 48M 
[   ]cmake-3.3.0-Darwin-universal.tar.Z2015-07-23 16:39 68M 
[   ]cmake-3.3.0-Darwin-universal.tar.gz2015-07-23 16:39 47M 
[   ]cmake-3.3.0-Darwin-x86_64.dmg2015-07-23 16:39 22M 
[   ]cmake-3.3.0-Darwin-x86_64.tar.Z2015-07-23 16:39 31M 
[   ]cmake-3.3.0-Darwin-x86_64.tar.gz2015-07-23 16:38 21M 
[TXT]cmake-3.3.0-Linux-i386.sh2015-07-23 16:38 26M 
[   ]cmake-3.3.0-Linux-i386.tar.Z2015-07-23 16:38 37M 
[   ]cmake-3.3.0-Linux-i386.tar.gz2015-07-23 16:38 26M 
[TXT]cmake-3.3.0-Linux-x86_64.sh2015-07-23 16:38 27M 
[   ]cmake-3.3.0-Linux-x86_64.tar.Z2015-07-23 16:38 37M 
[   ]cmake-3.3.0-Linux-x86_64.tar.gz2015-07-23 16:38 27M 
[TXT]cmake-3.3.0-SHA-256.txt2015-08-13 14:42 1.6K 
[TXT]cmake-3.3.0-SHA-256.txt.asc2015-08-13 14:42 819  
[   ]cmake-3.3.0-rc1-1-src.tar.bz22015-06-05 09:01 9.8M 
[TXT]cmake-3.3.0-rc1-1.patch2015-06-05 09:01 0  
[TXT]cmake-3.3.0-rc1-1.sh2015-06-05 09:01 1.5K 
[   ]cmake-3.3.0-rc1-1.tar.bz22015-06-05 09:01 9.8M 
[   ]cmake-3.3.0-rc1-Darwin-universal.dmg2015-06-05 09:01 48M 
[   ]cmake-3.3.0-rc1-Darwin-universal.tar.Z2015-06-05 09:01 68M 
[   ]cmake-3.3.0-rc1-Darwin-universal.tar.gz2015-06-05 09:01 47M 
[   ]cmake-3.3.0-rc1-Darwin-x86_64.dmg2015-06-05 09:01 27M 
[   ]cmake-3.3.0-rc1-Darwin-x86_64.tar.Z2015-06-05 09:01 38M 
[   ]cmake-3.3.0-rc1-Darwin-x86_64.tar.gz2015-06-05 09:01 27M 
[TXT]cmake-3.3.0-rc1-Linux-i386.sh2015-06-05 09:00 26M 
[   ]cmake-3.3.0-rc1-Linux-i386.tar.Z2015-06-05 09:00 36M 
[   ]cmake-3.3.0-rc1-Linux-i386.tar.gz2015-06-05 09:00 26M 
[TXT]cmake-3.3.0-rc1-Linux-x86_64.sh2015-06-05 09:00 26M 
[   ]cmake-3.3.0-rc1-Linux-x86_64.tar.Z2015-06-05 09:00 37M 
[   ]cmake-3.3.0-rc1-Linux-x86_64.tar.gz2015-06-05 09:00 26M 
[TXT]cmake-3.3.0-rc1-SHA-256.txt2016-04-13 12:48 1.6K 
[TXT]cmake-3.3.0-rc1-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.3.0-rc1-win32-x86.exe2015-06-05 09:00 12M 
[   ]cmake-3.3.0-rc1-win32-x86.zip2015-06-05 09:00 16M 
[   ]cmake-3.3.0-rc1.tar.Z2015-06-05 09:00 10M 
[   ]cmake-3.3.0-rc1.tar.gz2015-06-05 09:00 6.3M 
[   ]cmake-3.3.0-rc1.zip2015-06-05 09:00 10M 
[   ]cmake-3.3.0-rc2-1-src.tar.bz22015-06-10 15:27 5.0M 
[   ]cmake-3.3.0-rc2-1.tar.bz22015-06-10 15:27 9.8M 
[   ]cmake-3.3.0-rc2-Darwin-universal.dmg2015-06-10 15:27 48M 
[   ]cmake-3.3.0-rc2-Darwin-universal.tar.Z2015-06-10 15:27 68M 
[   ]cmake-3.3.0-rc2-Darwin-universal.tar.gz2015-06-10 15:27 47M 
[   ]cmake-3.3.0-rc2-Darwin-x86_64.dmg2015-06-10 15:27 21M 
[   ]cmake-3.3.0-rc2-Darwin-x86_64.tar.Z2015-06-10 15:27 31M 
[   ]cmake-3.3.0-rc2-Darwin-x86_64.tar.gz2015-06-10 15:27 21M 
[TXT]cmake-3.3.0-rc2-Linux-i386.sh2015-06-10 15:27 26M 
[   ]cmake-3.3.0-rc2-Linux-i386.tar.Z2015-06-10 15:27 36M 
[   ]cmake-3.3.0-rc2-Linux-i386.tar.gz2015-06-10 15:27 26M 
[TXT]cmake-3.3.0-rc2-Linux-x86_64.sh2015-06-10 15:27 26M 
[   ]cmake-3.3.0-rc2-Linux-x86_64.tar.Z2015-06-10 15:27 37M 
[   ]cmake-3.3.0-rc2-Linux-x86_64.tar.gz2015-06-10 15:27 26M 
[TXT]cmake-3.3.0-rc2-SHA-256.txt2016-04-13 12:48 1.6K 
[TXT]cmake-3.3.0-rc2-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.3.0-rc2-win32-x86.exe2015-06-10 15:27 12M 
[   ]cmake-3.3.0-rc2-win32-x86.zip2015-06-10 15:27 16M 
[   ]cmake-3.3.0-rc2.tar.Z2015-06-10 15:27 10M 
[   ]cmake-3.3.0-rc2.tar.gz2015-06-10 15:27 6.3M 
[   ]cmake-3.3.0-rc2.zip2015-06-10 15:27 10M 
[   ]cmake-3.3.0-rc3-1-src.tar.bz22015-06-26 13:34 5.0M 
[   ]cmake-3.3.0-rc3-1.tar.bz22015-06-26 13:34 9.8M 
[   ]cmake-3.3.0-rc3-Darwin-universal.dmg2015-06-26 13:34 48M 
[   ]cmake-3.3.0-rc3-Darwin-universal.tar.Z2015-06-26 13:34 68M 
[   ]cmake-3.3.0-rc3-Darwin-universal.tar.gz2015-06-26 13:34 47M 
[   ]cmake-3.3.0-rc3-Darwin-x86_64.dmg2015-06-26 13:34 22M 
[   ]cmake-3.3.0-rc3-Darwin-x86_64.tar.Z2015-06-26 13:34 31M 
[   ]cmake-3.3.0-rc3-Darwin-x86_64.tar.gz2015-06-26 13:34 21M 
[TXT]cmake-3.3.0-rc3-Linux-i386.sh2015-06-26 13:34 26M 
[   ]cmake-3.3.0-rc3-Linux-i386.tar.Z2015-06-26 13:34 37M 
[   ]cmake-3.3.0-rc3-Linux-i386.tar.gz2015-06-26 13:34 26M 
[TXT]cmake-3.3.0-rc3-Linux-x86_64.sh2015-06-26 13:34 27M 
[   ]cmake-3.3.0-rc3-Linux-x86_64.tar.Z2015-06-26 13:34 37M 
[   ]cmake-3.3.0-rc3-Linux-x86_64.tar.gz2015-06-26 13:34 27M 
[TXT]cmake-3.3.0-rc3-SHA-256.txt2016-04-13 12:48 1.6K 
[TXT]cmake-3.3.0-rc3-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.3.0-rc3-win32-x86.exe2015-06-26 13:34 12M 
[   ]cmake-3.3.0-rc3-win32-x86.zip2015-06-26 13:34 16M 
[   ]cmake-3.3.0-rc3.tar.Z2015-06-26 13:34 10M 
[   ]cmake-3.3.0-rc3.tar.gz2015-06-26 13:34 6.3M 
[   ]cmake-3.3.0-rc3.zip2015-06-26 13:34 10M 
[   ]cmake-3.3.0-rc4-1-src.tar.bz22015-07-13 15:56 5.0M 
[   ]cmake-3.3.0-rc4-1.tar.bz22015-07-13 15:56 9.8M 
[   ]cmake-3.3.0-rc4-Darwin-universal.dmg2015-07-13 15:56 48M 
[   ]cmake-3.3.0-rc4-Darwin-universal.tar.Z2015-07-13 15:56 68M 
[   ]cmake-3.3.0-rc4-Darwin-universal.tar.gz2015-07-13 15:55 47M 
[   ]cmake-3.3.0-rc4-Darwin-x86_64.dmg2015-07-13 15:55 22M 
[   ]cmake-3.3.0-rc4-Darwin-x86_64.tar.Z2015-07-13 15:55 31M 
[   ]cmake-3.3.0-rc4-Darwin-x86_64.tar.gz2015-07-13 15:55 21M 
[TXT]cmake-3.3.0-rc4-Linux-i386.sh2015-07-13 15:55 26M 
[   ]cmake-3.3.0-rc4-Linux-i386.tar.Z2015-07-13 15:55 37M 
[   ]cmake-3.3.0-rc4-Linux-i386.tar.gz2015-07-13 15:55 26M 
[TXT]cmake-3.3.0-rc4-Linux-x86_64.sh2015-07-13 15:55 27M 
[   ]cmake-3.3.0-rc4-Linux-x86_64.tar.Z2015-07-13 15:55 37M 
[   ]cmake-3.3.0-rc4-Linux-x86_64.tar.gz2015-07-13 15:55 27M 
[TXT]cmake-3.3.0-rc4-SHA-256.txt2016-04-13 12:48 1.6K 
[TXT]cmake-3.3.0-rc4-SHA-256.txt.asc2016-04-13 12:48 819  
[   ]cmake-3.3.0-rc4-win32-x86.exe2015-07-13 15:55 12M 
[   ]cmake-3.3.0-rc4-win32-x86.zip2015-07-13 15:55 16M 
[   ]cmake-3.3.0-rc4.tar.Z2015-07-13 15:55 10M 
[   ]cmake-3.3.0-rc4.tar.gz2015-07-13 15:55 6.3M 
[   ]cmake-3.3.0-rc4.zip2015-07-13 15:55 10M 
[   ]cmake-3.3.0-win32-x86.exe2015-07-23 16:38 12M 
[   ]cmake-3.3.0-win32-x86.zip2015-07-23 16:38 16M 
[   ]cmake-3.3.0.tar.Z2015-07-23 16:38 10M 
[   ]cmake-3.3.0.tar.gz2015-07-23 16:38 6.3M 
[   ]cmake-3.3.0.zip2015-07-23 16:38 10M 
[   ]cmake-3.3.1-1-src.tar.bz22015-08-13 15:55 5.0M 
[   ]cmake-3.3.1-1.tar.bz22015-08-13 15:55 9.8M 
[   ]cmake-3.3.1-Darwin-universal.dmg2015-08-13 15:55 48M 
[   ]cmake-3.3.1-Darwin-universal.tar.Z2015-08-13 15:55 68M 
[   ]cmake-3.3.1-Darwin-universal.tar.gz2015-08-13 15:55 47M 
[   ]cmake-3.3.1-Darwin-x86_64.dmg2015-08-13 15:55 22M 
[   ]cmake-3.3.1-Darwin-x86_64.tar.Z2015-08-13 15:55 31M 
[   ]cmake-3.3.1-Darwin-x86_64.tar.gz2015-08-13 15:55 21M 
[TXT]cmake-3.3.1-Linux-i386.sh2015-08-13 15:55 26M 
[   ]cmake-3.3.1-Linux-i386.tar.Z2015-08-13 15:55 37M 
[   ]cmake-3.3.1-Linux-i386.tar.gz2015-08-13 15:55 26M 
[TXT]cmake-3.3.1-Linux-x86_64.sh2015-08-13 15:55 27M 
[   ]cmake-3.3.1-Linux-x86_64.tar.Z2015-08-13 15:55 37M 
[   ]cmake-3.3.1-Linux-x86_64.tar.gz2015-08-13 15:55 27M 
[TXT]cmake-3.3.1-SHA-256.txt2015-08-13 15:55 1.3K 
[TXT]cmake-3.3.1-SHA-256.txt.asc2015-08-13 15:55 819  
[   ]cmake-3.3.1-win32-x86.exe2015-08-13 15:55 12M 
[   ]cmake-3.3.1-win32-x86.zip2015-08-13 15:55 16M 
[   ]cmake-3.3.1.tar.Z2015-08-13 15:54 10M 
[   ]cmake-3.3.1.tar.gz2015-08-13 15:54 6.3M 
[   ]cmake-3.3.1.zip2015-08-13 15:54 10M 
[   ]cmake-3.3.2-1-src.tar.bz22015-09-17 14:36 5.0M 
[   ]cmake-3.3.2-1.tar.bz22015-09-17 14:36 9.8M 
[   ]cmake-3.3.2-Darwin-universal.dmg2015-09-17 14:36 48M 
[   ]cmake-3.3.2-Darwin-universal.tar.Z2015-09-17 14:36 68M 
[   ]cmake-3.3.2-Darwin-universal.tar.gz2015-09-17 14:36 47M 
[   ]cmake-3.3.2-Darwin-x86_64.dmg2015-09-17 14:35 22M 
[   ]cmake-3.3.2-Darwin-x86_64.tar.Z2015-09-17 14:35 31M 
[   ]cmake-3.3.2-Darwin-x86_64.tar.gz2015-09-17 14:35 21M 
[TXT]cmake-3.3.2-Linux-i386.sh2015-09-17 14:35 26M 
[   ]cmake-3.3.2-Linux-i386.tar.Z2015-09-17 14:35 37M 
[   ]cmake-3.3.2-Linux-i386.tar.gz2015-09-17 14:35 26M 
[TXT]cmake-3.3.2-Linux-x86_64.sh2015-09-17 14:35 27M 
[   ]cmake-3.3.2-Linux-x86_64.tar.Z2015-09-17 14:35 37M 
[   ]cmake-3.3.2-Linux-x86_64.tar.gz2015-09-17 14:35 27M 
[TXT]cmake-3.3.2-SHA-256.txt2015-09-17 14:35 1.6K 
[TXT]cmake-3.3.2-SHA-256.txt.asc2015-09-17 14:35 819  
[   ]cmake-3.3.2-win32-x86.exe2015-09-17 14:35 12M 
[   ]cmake-3.3.2-win32-x86.zip2015-09-17 14:35 16M 
[   ]cmake-3.3.2.tar.Z2015-09-17 14:35 10M 
[   ]cmake-3.3.2.tar.gz2015-09-17 14:35 6.3M 
[   ]cmake-3.3.2.zip2015-09-17 14:35 10M 

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.4/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.4/index.html new file mode 100644 index 00000000..e7b56da7 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.4/index.html @@ -0,0 +1,127 @@ + + + + Index of /files/v3.4 + + +

Index of /files/v3.4

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]cmake-3.4.0-Darwin-x86_64.dmg2015-11-12 13:42 22M 
[   ]cmake-3.4.0-Darwin-x86_64.tar.Z2015-11-12 13:42 31M 
[   ]cmake-3.4.0-Darwin-x86_64.tar.gz2015-11-12 13:42 22M 
[TXT]cmake-3.4.0-Linux-i386.sh2015-11-12 13:42 26M 
[   ]cmake-3.4.0-Linux-i386.tar.Z2015-11-12 13:42 37M 
[   ]cmake-3.4.0-Linux-i386.tar.gz2015-11-12 13:42 26M 
[TXT]cmake-3.4.0-Linux-x86_64.sh2015-11-12 13:42 27M 
[   ]cmake-3.4.0-Linux-x86_64.tar.Z2015-11-12 13:42 38M 
[   ]cmake-3.4.0-Linux-x86_64.tar.gz2015-11-12 13:42 27M 
[TXT]cmake-3.4.0-SHA-256.txt2015-11-12 13:42 1.3K 
[TXT]cmake-3.4.0-SHA-256.txt.asc2015-11-12 13:42 819  
[   ]cmake-3.4.0-rc1-Darwin-x86_64.dmg2015-10-06 11:02 22M 
[   ]cmake-3.4.0-rc1-Darwin-x86_64.tar.Z2015-10-06 11:02 31M 
[   ]cmake-3.4.0-rc1-Darwin-x86_64.tar.gz2015-10-06 11:02 22M 
[TXT]cmake-3.4.0-rc1-Linux-i386.sh2015-10-06 11:02 26M 
[   ]cmake-3.4.0-rc1-Linux-i386.tar.Z2015-10-06 11:02 37M 
[   ]cmake-3.4.0-rc1-Linux-i386.tar.gz2015-10-06 11:01 26M 
[TXT]cmake-3.4.0-rc1-Linux-x86_64.sh2015-10-06 11:01 27M 
[   ]cmake-3.4.0-rc1-Linux-x86_64.tar.Z2015-10-06 11:01 38M 
[   ]cmake-3.4.0-rc1-Linux-x86_64.tar.gz2015-10-06 11:01 27M 
[TXT]cmake-3.4.0-rc1-SHA-256.txt2015-10-06 11:01 1.3K 
[TXT]cmake-3.4.0-rc1-SHA-256.txt.asc2015-10-06 11:01 819  
[   ]cmake-3.4.0-rc1-win32-x86.exe2015-10-06 11:01 13M 
[   ]cmake-3.4.0-rc1-win32-x86.zip2015-10-06 11:01 16M 
[   ]cmake-3.4.0-rc1.tar.Z2015-10-06 11:01 10M 
[   ]cmake-3.4.0-rc1.tar.gz2015-10-06 11:01 6.4M 
[   ]cmake-3.4.0-rc1.zip2015-10-06 11:01 11M 
[   ]cmake-3.4.0-rc2-Darwin-x86_64.dmg2015-10-21 16:27 22M 
[   ]cmake-3.4.0-rc2-Darwin-x86_64.tar.Z2015-10-21 16:27 31M 
[   ]cmake-3.4.0-rc2-Darwin-x86_64.tar.gz2015-10-21 16:27 22M 
[TXT]cmake-3.4.0-rc2-Linux-i386.sh2015-10-21 16:27 26M 
[   ]cmake-3.4.0-rc2-Linux-i386.tar.Z2015-10-21 16:27 37M 
[   ]cmake-3.4.0-rc2-Linux-i386.tar.gz2015-10-21 16:27 26M 
[TXT]cmake-3.4.0-rc2-Linux-x86_64.sh2015-10-21 16:27 27M 
[   ]cmake-3.4.0-rc2-Linux-x86_64.tar.Z2015-10-21 16:27 38M 
[   ]cmake-3.4.0-rc2-Linux-x86_64.tar.gz2015-10-21 16:27 27M 
[TXT]cmake-3.4.0-rc2-SHA-256.txt2015-10-21 16:26 1.3K 
[TXT]cmake-3.4.0-rc2-SHA-256.txt.asc2015-10-21 16:26 819  
[   ]cmake-3.4.0-rc2-win32-x86.exe2015-10-21 16:26 13M 
[   ]cmake-3.4.0-rc2-win32-x86.zip2015-10-21 16:26 16M 
[   ]cmake-3.4.0-rc2.tar.Z2015-10-21 16:26 10M 
[   ]cmake-3.4.0-rc2.tar.gz2015-10-21 16:26 6.4M 
[   ]cmake-3.4.0-rc2.zip2015-10-21 16:26 11M 
[   ]cmake-3.4.0-rc3-Darwin-x86_64.dmg2015-11-03 11:09 22M 
[   ]cmake-3.4.0-rc3-Darwin-x86_64.tar.Z2015-11-03 11:09 31M 
[   ]cmake-3.4.0-rc3-Darwin-x86_64.tar.gz2015-11-03 11:09 22M 
[TXT]cmake-3.4.0-rc3-Linux-i386.sh2015-11-03 11:09 26M 
[   ]cmake-3.4.0-rc3-Linux-i386.tar.Z2015-11-03 11:09 37M 
[   ]cmake-3.4.0-rc3-Linux-i386.tar.gz2015-11-03 11:09 26M 
[TXT]cmake-3.4.0-rc3-Linux-x86_64.sh2015-11-03 11:09 27M 
[   ]cmake-3.4.0-rc3-Linux-x86_64.tar.Z2015-11-03 11:09 38M 
[   ]cmake-3.4.0-rc3-Linux-x86_64.tar.gz2015-11-03 11:09 27M 
[TXT]cmake-3.4.0-rc3-SHA-256.txt2015-11-03 11:09 1.3K 
[TXT]cmake-3.4.0-rc3-SHA-256.txt.asc2015-11-03 11:09 819  
[   ]cmake-3.4.0-rc3-win32-x86.exe2015-11-03 11:09 13M 
[   ]cmake-3.4.0-rc3-win32-x86.zip2015-11-03 11:09 16M 
[   ]cmake-3.4.0-rc3.tar.Z2015-11-03 11:09 10M 
[   ]cmake-3.4.0-rc3.tar.gz2015-11-03 11:08 6.4M 
[   ]cmake-3.4.0-rc3.zip2015-11-03 11:08 11M 
[   ]cmake-3.4.0-win32-x86.exe2015-11-12 13:42 13M 
[   ]cmake-3.4.0-win32-x86.zip2015-11-12 13:42 16M 
[   ]cmake-3.4.0.tar.Z2015-11-12 13:42 10M 
[   ]cmake-3.4.0.tar.gz2015-11-12 13:42 6.4M 
[   ]cmake-3.4.0.zip2015-11-12 13:42 10M 
[   ]cmake-3.4.1-Darwin-x86_64.dmg2015-12-02 14:42 22M 
[   ]cmake-3.4.1-Darwin-x86_64.tar.Z2015-12-02 14:42 31M 
[   ]cmake-3.4.1-Darwin-x86_64.tar.gz2015-12-02 14:42 22M 
[TXT]cmake-3.4.1-Linux-i386.sh2015-12-02 14:42 26M 
[   ]cmake-3.4.1-Linux-i386.tar.Z2015-12-02 14:42 37M 
[   ]cmake-3.4.1-Linux-i386.tar.gz2015-12-02 14:42 26M 
[TXT]cmake-3.4.1-Linux-x86_64.sh2015-12-02 14:42 27M 
[   ]cmake-3.4.1-Linux-x86_64.tar.Z2015-12-02 14:42 38M 
[   ]cmake-3.4.1-Linux-x86_64.tar.gz2015-12-02 14:42 27M 
[TXT]cmake-3.4.1-SHA-256.txt2015-12-02 14:42 1.3K 
[TXT]cmake-3.4.1-SHA-256.txt.asc2015-12-02 14:42 819  
[   ]cmake-3.4.1-win32-x86.exe2015-12-02 14:42 13M 
[   ]cmake-3.4.1-win32-x86.zip2015-12-02 14:42 16M 
[   ]cmake-3.4.1.tar.Z2015-12-02 14:42 10M 
[   ]cmake-3.4.1.tar.gz2015-12-02 14:42 6.4M 
[   ]cmake-3.4.1.zip2015-12-02 14:41 10M 
[   ]cmake-3.4.2-Darwin-x86_64.dmg2016-01-19 14:58 22M 
[   ]cmake-3.4.2-Darwin-x86_64.tar.Z2016-01-19 14:58 31M 
[   ]cmake-3.4.2-Darwin-x86_64.tar.gz2016-01-19 14:58 22M 
[TXT]cmake-3.4.2-Linux-i386.sh2016-01-19 14:58 26M 
[   ]cmake-3.4.2-Linux-i386.tar.Z2016-01-19 14:58 37M 
[   ]cmake-3.4.2-Linux-i386.tar.gz2016-01-19 14:58 26M 
[TXT]cmake-3.4.2-Linux-x86_64.sh2016-01-19 14:58 27M 
[   ]cmake-3.4.2-Linux-x86_64.tar.Z2016-01-19 14:58 38M 
[   ]cmake-3.4.2-Linux-x86_64.tar.gz2016-01-19 14:58 27M 
[TXT]cmake-3.4.2-SHA-256.txt2016-01-19 14:58 1.3K 
[TXT]cmake-3.4.2-SHA-256.txt.asc2016-01-19 14:58 819  
[   ]cmake-3.4.2-win32-x86.exe2016-01-19 14:58 13M 
[   ]cmake-3.4.2-win32-x86.zip2016-01-19 14:58 16M 
[   ]cmake-3.4.2.tar.Z2016-01-19 14:58 10M 
[   ]cmake-3.4.2.tar.gz2016-01-19 14:58 6.4M 
[   ]cmake-3.4.2.zip2016-01-19 14:58 10M 
[   ]cmake-3.4.3-Darwin-x86_64.dmg2016-01-25 14:29 22M 
[   ]cmake-3.4.3-Darwin-x86_64.tar.Z2016-01-25 14:29 31M 
[   ]cmake-3.4.3-Darwin-x86_64.tar.gz2016-01-25 14:29 22M 
[TXT]cmake-3.4.3-Linux-i386.sh2016-01-25 14:29 26M 
[   ]cmake-3.4.3-Linux-i386.tar.Z2016-01-25 14:29 37M 
[   ]cmake-3.4.3-Linux-i386.tar.gz2016-01-25 14:29 26M 
[TXT]cmake-3.4.3-Linux-x86_64.sh2016-01-25 14:29 27M 
[   ]cmake-3.4.3-Linux-x86_64.tar.Z2016-01-25 14:29 38M 
[   ]cmake-3.4.3-Linux-x86_64.tar.gz2016-01-25 14:29 27M 
[TXT]cmake-3.4.3-SHA-256.txt2016-01-25 14:29 1.3K 
[TXT]cmake-3.4.3-SHA-256.txt.asc2016-01-25 14:29 819  
[   ]cmake-3.4.3-win32-x86.exe2016-01-25 14:29 13M 
[   ]cmake-3.4.3-win32-x86.zip2016-01-25 14:29 16M 
[   ]cmake-3.4.3.tar.Z2016-01-25 14:29 10M 
[   ]cmake-3.4.3.tar.gz2016-01-25 14:29 6.4M 
[   ]cmake-3.4.3.zip2016-01-25 14:29 10M 
[DIR]cygwin/2016-01-25 14:34 -  

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.5/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.5/index.html new file mode 100644 index 00000000..03d4f7c1 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.5/index.html @@ -0,0 +1,111 @@ + + + + Index of /files/v3.5 + + +

Index of /files/v3.5

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]cmake-3.5.0-Darwin-x86_64.dmg2016-03-08 11:17 22M 
[   ]cmake-3.5.0-Darwin-x86_64.tar.Z2016-03-08 11:17 31M 
[   ]cmake-3.5.0-Darwin-x86_64.tar.gz2016-03-08 11:17 22M 
[TXT]cmake-3.5.0-Linux-i386.sh2016-03-08 11:17 27M 
[   ]cmake-3.5.0-Linux-i386.tar.Z2016-03-08 11:17 38M 
[   ]cmake-3.5.0-Linux-i386.tar.gz2016-03-08 11:17 27M 
[TXT]cmake-3.5.0-Linux-x86_64.sh2016-03-08 11:17 27M 
[   ]cmake-3.5.0-Linux-x86_64.tar.Z2016-03-08 11:17 38M 
[   ]cmake-3.5.0-Linux-x86_64.tar.gz2016-03-08 11:17 27M 
[TXT]cmake-3.5.0-SHA-256.txt2016-03-08 11:17 1.3K 
[TXT]cmake-3.5.0-SHA-256.txt.asc2016-03-08 11:16 819  
[   ]cmake-3.5.0-rc1-Darwin-x86_64.dmg2016-02-02 15:51 22M 
[   ]cmake-3.5.0-rc1-Darwin-x86_64.tar.Z2016-02-02 15:51 31M 
[   ]cmake-3.5.0-rc1-Darwin-x86_64.tar.gz2016-02-02 15:51 22M 
[TXT]cmake-3.5.0-rc1-Linux-i386.sh2016-02-02 15:51 27M 
[   ]cmake-3.5.0-rc1-Linux-i386.tar.Z2016-02-02 15:51 38M 
[   ]cmake-3.5.0-rc1-Linux-i386.tar.gz2016-02-02 15:51 27M 
[TXT]cmake-3.5.0-rc1-Linux-x86_64.sh2016-02-02 15:51 27M 
[   ]cmake-3.5.0-rc1-Linux-x86_64.tar.Z2016-02-02 15:51 38M 
[   ]cmake-3.5.0-rc1-Linux-x86_64.tar.gz2016-02-02 15:51 27M 
[TXT]cmake-3.5.0-rc1-SHA-256.txt2016-02-03 13:29 1.3K 
[TXT]cmake-3.5.0-rc1-SHA-256.txt.asc2016-02-03 13:29 819  
[   ]cmake-3.5.0-rc1-win32-x86.msi2016-02-03 13:29 15M 
[   ]cmake-3.5.0-rc1-win32-x86.zip2016-02-03 13:29 20M 
[   ]cmake-3.5.0-rc1.tar.Z2016-02-02 15:51 11M 
[   ]cmake-3.5.0-rc1.tar.gz2016-02-02 15:51 6.5M 
[   ]cmake-3.5.0-rc1.zip2016-02-02 15:51 11M 
[   ]cmake-3.5.0-rc2-Darwin-x86_64.dmg2016-02-10 15:03 22M 
[   ]cmake-3.5.0-rc2-Darwin-x86_64.tar.Z2016-02-10 15:03 31M 
[   ]cmake-3.5.0-rc2-Darwin-x86_64.tar.gz2016-02-10 15:03 22M 
[TXT]cmake-3.5.0-rc2-Linux-i386.sh2016-02-10 15:03 27M 
[   ]cmake-3.5.0-rc2-Linux-i386.tar.Z2016-02-10 15:03 38M 
[   ]cmake-3.5.0-rc2-Linux-i386.tar.gz2016-02-10 15:03 27M 
[TXT]cmake-3.5.0-rc2-Linux-x86_64.sh2016-02-10 15:03 27M 
[   ]cmake-3.5.0-rc2-Linux-x86_64.tar.Z2016-02-10 15:03 38M 
[   ]cmake-3.5.0-rc2-Linux-x86_64.tar.gz2016-02-10 15:03 27M 
[TXT]cmake-3.5.0-rc2-SHA-256.txt2016-02-10 15:03 1.3K 
[TXT]cmake-3.5.0-rc2-SHA-256.txt.asc2016-02-10 15:03 819  
[   ]cmake-3.5.0-rc2-win32-x86.msi2016-02-10 15:03 15M 
[   ]cmake-3.5.0-rc2-win32-x86.zip2016-02-10 15:03 20M 
[   ]cmake-3.5.0-rc2.tar.Z2016-02-10 15:02 11M 
[   ]cmake-3.5.0-rc2.tar.gz2016-02-10 15:02 6.5M 
[   ]cmake-3.5.0-rc2.zip2016-02-10 15:02 11M 
[   ]cmake-3.5.0-rc3-Darwin-x86_64.dmg2016-02-18 15:41 22M 
[   ]cmake-3.5.0-rc3-Darwin-x86_64.tar.Z2016-02-18 15:41 31M 
[   ]cmake-3.5.0-rc3-Darwin-x86_64.tar.gz2016-02-18 15:41 22M 
[TXT]cmake-3.5.0-rc3-Linux-i386.sh2016-02-18 15:41 27M 
[   ]cmake-3.5.0-rc3-Linux-i386.tar.Z2016-02-18 15:41 38M 
[   ]cmake-3.5.0-rc3-Linux-i386.tar.gz2016-02-18 15:41 27M 
[TXT]cmake-3.5.0-rc3-Linux-x86_64.sh2016-02-18 15:41 27M 
[   ]cmake-3.5.0-rc3-Linux-x86_64.tar.Z2016-02-18 15:41 38M 
[   ]cmake-3.5.0-rc3-Linux-x86_64.tar.gz2016-02-18 15:41 27M 
[TXT]cmake-3.5.0-rc3-SHA-256.txt2016-02-18 15:41 1.3K 
[TXT]cmake-3.5.0-rc3-SHA-256.txt.asc2016-02-18 15:41 819  
[   ]cmake-3.5.0-rc3-win32-x86.msi2016-02-18 15:41 15M 
[   ]cmake-3.5.0-rc3-win32-x86.zip2016-02-18 15:41 20M 
[   ]cmake-3.5.0-rc3.tar.Z2016-02-18 15:41 11M 
[   ]cmake-3.5.0-rc3.tar.gz2016-02-18 15:40 6.5M 
[   ]cmake-3.5.0-rc3.zip2016-02-18 15:40 11M 
[   ]cmake-3.5.0-win32-x86.msi2016-03-08 11:16 15M 
[   ]cmake-3.5.0-win32-x86.zip2016-03-08 11:16 20M 
[   ]cmake-3.5.0.tar.Z2016-03-08 11:16 11M 
[   ]cmake-3.5.0.tar.gz2016-03-08 11:16 6.5M 
[   ]cmake-3.5.0.zip2016-03-08 11:16 11M 
[   ]cmake-3.5.1-Darwin-x86_64.dmg2016-03-24 16:00 22M 
[   ]cmake-3.5.1-Darwin-x86_64.tar.Z2016-03-24 16:00 31M 
[   ]cmake-3.5.1-Darwin-x86_64.tar.gz2016-03-24 16:00 22M 
[TXT]cmake-3.5.1-Linux-i386.sh2016-03-24 16:00 27M 
[   ]cmake-3.5.1-Linux-i386.tar.Z2016-03-24 16:00 38M 
[   ]cmake-3.5.1-Linux-i386.tar.gz2016-03-24 16:00 27M 
[TXT]cmake-3.5.1-Linux-x86_64.sh2016-03-24 16:00 27M 
[   ]cmake-3.5.1-Linux-x86_64.tar.Z2016-03-24 16:00 38M 
[   ]cmake-3.5.1-Linux-x86_64.tar.gz2016-03-24 16:00 27M 
[TXT]cmake-3.5.1-SHA-256.txt2016-03-24 16:00 1.3K 
[TXT]cmake-3.5.1-SHA-256.txt.asc2016-03-24 16:00 819  
[   ]cmake-3.5.1-win32-x86.msi2016-03-24 16:00 15M 
[   ]cmake-3.5.1-win32-x86.zip2016-03-24 16:00 20M 
[   ]cmake-3.5.1.tar.Z2016-03-24 16:00 11M 
[   ]cmake-3.5.1.tar.gz2016-03-24 16:00 6.5M 
[   ]cmake-3.5.1.zip2016-03-24 16:00 11M 
[   ]cmake-3.5.2-Darwin-x86_64.dmg2016-04-15 13:40 22M 
[   ]cmake-3.5.2-Darwin-x86_64.tar.Z2016-04-15 13:40 31M 
[   ]cmake-3.5.2-Darwin-x86_64.tar.gz2016-04-15 13:40 22M 
[TXT]cmake-3.5.2-Linux-i386.sh2016-04-15 13:40 27M 
[   ]cmake-3.5.2-Linux-i386.tar.Z2016-04-15 13:40 38M 
[   ]cmake-3.5.2-Linux-i386.tar.gz2016-04-15 13:40 27M 
[TXT]cmake-3.5.2-Linux-x86_64.sh2016-04-15 13:40 27M 
[   ]cmake-3.5.2-Linux-x86_64.tar.Z2016-04-15 13:40 38M 
[   ]cmake-3.5.2-Linux-x86_64.tar.gz2016-04-15 13:40 27M 
[TXT]cmake-3.5.2-SHA-256.txt2016-04-15 13:40 1.3K 
[TXT]cmake-3.5.2-SHA-256.txt.asc2016-04-15 13:40 819  
[   ]cmake-3.5.2-win32-x86.msi2016-04-15 13:40 15M 
[   ]cmake-3.5.2-win32-x86.zip2016-04-15 13:40 20M 
[   ]cmake-3.5.2.tar.Z2016-04-15 13:40 11M 
[   ]cmake-3.5.2.tar.gz2016-04-15 13:40 6.5M 
[   ]cmake-3.5.2.zip2016-04-15 13:40 11M 
[DIR]cygwin/2016-04-15 13:42 -  

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.6/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.6/index.html new file mode 100644 index 00000000..4fca3a5f --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.6/index.html @@ -0,0 +1,159 @@ + + + + Index of /files/v3.6 + + +

Index of /files/v3.6

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]cmake-3.6.0-Darwin-x86_64.dmg2016-07-07 13:05 25M 
[   ]cmake-3.6.0-Darwin-x86_64.tar.Z2016-07-07 13:05 36M 
[   ]cmake-3.6.0-Darwin-x86_64.tar.gz2016-07-07 13:05 25M 
[TXT]cmake-3.6.0-Linux-i386.sh2016-07-07 13:05 27M 
[   ]cmake-3.6.0-Linux-i386.tar.Z2016-07-07 13:05 38M 
[   ]cmake-3.6.0-Linux-i386.tar.gz2016-07-07 13:05 27M 
[TXT]cmake-3.6.0-Linux-x86_64.sh2016-07-07 13:05 27M 
[   ]cmake-3.6.0-Linux-x86_64.tar.Z2016-07-07 13:05 38M 
[   ]cmake-3.6.0-Linux-x86_64.tar.gz2016-07-07 13:05 27M 
[TXT]cmake-3.6.0-SHA-256.txt2016-07-07 13:05 1.4K 
[TXT]cmake-3.6.0-SHA-256.txt.asc2016-07-07 13:05 819  
[   ]cmake-3.6.0-rc1-Darwin-x86_64.dmg2016-06-03 14:50 25M 
[   ]cmake-3.6.0-rc1-Darwin-x86_64.tar.Z2016-06-03 14:50 36M 
[   ]cmake-3.6.0-rc1-Darwin-x86_64.tar.gz2016-06-03 14:50 25M 
[TXT]cmake-3.6.0-rc1-Linux-i386.sh2016-06-03 14:50 27M 
[   ]cmake-3.6.0-rc1-Linux-i386.tar.Z2016-06-03 14:50 38M 
[   ]cmake-3.6.0-rc1-Linux-i386.tar.gz2016-06-03 14:50 27M 
[TXT]cmake-3.6.0-rc1-Linux-x86_64.sh2016-06-03 14:50 27M 
[   ]cmake-3.6.0-rc1-Linux-x86_64.tar.Z2016-06-03 14:50 38M 
[   ]cmake-3.6.0-rc1-Linux-x86_64.tar.gz2016-06-03 14:49 27M 
[TXT]cmake-3.6.0-rc1-SHA-256.txt2016-06-03 14:49 1.5K 
[TXT]cmake-3.6.0-rc1-SHA-256.txt.asc2016-06-03 14:49 819  
[   ]cmake-3.6.0-rc1-win32-x86.msi2016-06-03 14:49 15M 
[   ]cmake-3.6.0-rc1-win32-x86.zip2016-06-03 14:49 21M 
[   ]cmake-3.6.0-rc1-win64-x64.msi2016-06-03 14:49 15M 
[   ]cmake-3.6.0-rc1-win64-x64.zip2016-06-03 14:49 19M 
[   ]cmake-3.6.0-rc1.tar.Z2016-06-03 14:49 11M 
[   ]cmake-3.6.0-rc1.tar.gz2016-06-03 14:49 6.6M 
[   ]cmake-3.6.0-rc1.zip2016-06-03 14:49 11M 
[   ]cmake-3.6.0-rc2-Darwin-x86_64.dmg2016-06-13 14:29 25M 
[   ]cmake-3.6.0-rc2-Darwin-x86_64.tar.Z2016-06-13 14:29 36M 
[   ]cmake-3.6.0-rc2-Darwin-x86_64.tar.gz2016-06-13 14:29 25M 
[TXT]cmake-3.6.0-rc2-Linux-i386.sh2016-06-13 14:29 27M 
[   ]cmake-3.6.0-rc2-Linux-i386.tar.Z2016-06-13 14:29 38M 
[   ]cmake-3.6.0-rc2-Linux-i386.tar.gz2016-06-13 14:29 27M 
[TXT]cmake-3.6.0-rc2-Linux-x86_64.sh2016-06-13 14:29 27M 
[   ]cmake-3.6.0-rc2-Linux-x86_64.tar.Z2016-06-13 14:29 38M 
[   ]cmake-3.6.0-rc2-Linux-x86_64.tar.gz2016-06-13 14:29 27M 
[TXT]cmake-3.6.0-rc2-SHA-256.txt2016-06-13 14:29 1.5K 
[TXT]cmake-3.6.0-rc2-SHA-256.txt.asc2016-06-13 14:29 819  
[   ]cmake-3.6.0-rc2-win32-x86.msi2016-06-13 14:29 15M 
[   ]cmake-3.6.0-rc2-win32-x86.zip2016-06-13 14:29 21M 
[   ]cmake-3.6.0-rc2-win64-x64.msi2016-06-13 14:29 15M 
[   ]cmake-3.6.0-rc2-win64-x64.zip2016-06-13 14:29 19M 
[   ]cmake-3.6.0-rc2.tar.Z2016-06-13 14:29 11M 
[   ]cmake-3.6.0-rc2.tar.gz2016-06-13 14:28 6.6M 
[   ]cmake-3.6.0-rc2.zip2016-06-13 14:28 11M 
[   ]cmake-3.6.0-rc3-Darwin-x86_64.dmg2016-06-22 13:58 25M 
[   ]cmake-3.6.0-rc3-Darwin-x86_64.tar.Z2016-06-22 13:58 36M 
[   ]cmake-3.6.0-rc3-Darwin-x86_64.tar.gz2016-06-22 13:57 25M 
[TXT]cmake-3.6.0-rc3-Linux-i386.sh2016-06-22 13:57 27M 
[   ]cmake-3.6.0-rc3-Linux-i386.tar.Z2016-06-22 13:57 38M 
[   ]cmake-3.6.0-rc3-Linux-i386.tar.gz2016-06-22 13:57 27M 
[TXT]cmake-3.6.0-rc3-Linux-x86_64.sh2016-06-22 13:57 27M 
[   ]cmake-3.6.0-rc3-Linux-x86_64.tar.Z2016-06-22 13:57 38M 
[   ]cmake-3.6.0-rc3-Linux-x86_64.tar.gz2016-06-22 13:57 27M 
[TXT]cmake-3.6.0-rc3-SHA-256.txt2016-06-22 13:57 1.5K 
[TXT]cmake-3.6.0-rc3-SHA-256.txt.asc2016-06-22 13:57 819  
[   ]cmake-3.6.0-rc3-win32-x86.msi2016-06-22 13:57 15M 
[   ]cmake-3.6.0-rc3-win32-x86.zip2016-06-22 13:57 21M 
[   ]cmake-3.6.0-rc3-win64-x64.msi2016-06-22 13:57 15M 
[   ]cmake-3.6.0-rc3-win64-x64.zip2016-06-22 13:57 19M 
[   ]cmake-3.6.0-rc3.tar.Z2016-06-22 13:57 11M 
[   ]cmake-3.6.0-rc3.tar.gz2016-06-22 13:57 6.6M 
[   ]cmake-3.6.0-rc3.zip2016-06-22 13:57 11M 
[   ]cmake-3.6.0-rc4-Darwin-x86_64.dmg2016-06-29 14:50 25M 
[   ]cmake-3.6.0-rc4-Darwin-x86_64.tar.Z2016-06-29 14:50 36M 
[   ]cmake-3.6.0-rc4-Darwin-x86_64.tar.gz2016-06-29 14:50 25M 
[TXT]cmake-3.6.0-rc4-Linux-i386.sh2016-06-29 14:50 27M 
[   ]cmake-3.6.0-rc4-Linux-i386.tar.Z2016-06-29 14:50 38M 
[   ]cmake-3.6.0-rc4-Linux-i386.tar.gz2016-06-29 14:50 27M 
[TXT]cmake-3.6.0-rc4-Linux-x86_64.sh2016-06-29 14:50 27M 
[   ]cmake-3.6.0-rc4-Linux-x86_64.tar.Z2016-06-29 14:49 38M 
[   ]cmake-3.6.0-rc4-Linux-x86_64.tar.gz2016-06-29 14:49 27M 
[TXT]cmake-3.6.0-rc4-SHA-256.txt2016-06-29 14:49 1.5K 
[TXT]cmake-3.6.0-rc4-SHA-256.txt.asc2016-06-29 14:49 819  
[   ]cmake-3.6.0-rc4-win32-x86.msi2016-06-29 14:49 15M 
[   ]cmake-3.6.0-rc4-win32-x86.zip2016-06-29 14:49 21M 
[   ]cmake-3.6.0-rc4-win64-x64.msi2016-06-29 14:49 15M 
[   ]cmake-3.6.0-rc4-win64-x64.zip2016-06-29 14:49 19M 
[   ]cmake-3.6.0-rc4.tar.Z2016-06-29 14:49 11M 
[   ]cmake-3.6.0-rc4.tar.gz2016-06-29 14:49 6.6M 
[   ]cmake-3.6.0-rc4.zip2016-06-29 14:49 11M 
[   ]cmake-3.6.0-win32-x86.msi2016-07-07 13:04 15M 
[   ]cmake-3.6.0-win32-x86.zip2016-07-07 13:04 20M 
[   ]cmake-3.6.0-win64-x64.msi2016-07-07 13:04 15M 
[   ]cmake-3.6.0-win64-x64.zip2016-07-07 13:04 19M 
[   ]cmake-3.6.0.tar.Z2016-07-07 13:04 11M 
[   ]cmake-3.6.0.tar.gz2016-07-07 13:04 6.6M 
[   ]cmake-3.6.0.zip2016-07-07 13:04 11M 
[   ]cmake-3.6.1-Darwin-x86_64.dmg2016-07-22 10:58 25M 
[   ]cmake-3.6.1-Darwin-x86_64.tar.Z2016-07-22 10:58 36M 
[   ]cmake-3.6.1-Darwin-x86_64.tar.gz2016-07-22 10:58 25M 
[TXT]cmake-3.6.1-Linux-i386.sh2016-07-22 10:58 27M 
[   ]cmake-3.6.1-Linux-i386.tar.Z2016-07-22 10:58 38M 
[   ]cmake-3.6.1-Linux-i386.tar.gz2016-07-22 10:58 27M 
[TXT]cmake-3.6.1-Linux-x86_64.sh2016-07-22 10:58 27M 
[   ]cmake-3.6.1-Linux-x86_64.tar.Z2016-07-22 10:58 38M 
[   ]cmake-3.6.1-Linux-x86_64.tar.gz2016-07-22 10:58 27M 
[TXT]cmake-3.6.1-SHA-256.txt2016-07-22 10:58 1.4K 
[TXT]cmake-3.6.1-SHA-256.txt.asc2016-07-22 10:58 819  
[   ]cmake-3.6.1-win32-x86.msi2016-07-22 10:58 15M 
[   ]cmake-3.6.1-win32-x86.zip2016-07-22 10:58 20M 
[   ]cmake-3.6.1-win64-x64.msi2016-07-22 10:58 15M 
[   ]cmake-3.6.1-win64-x64.zip2016-07-22 10:57 19M 
[   ]cmake-3.6.1.tar.Z2016-07-22 10:57 11M 
[   ]cmake-3.6.1.tar.gz2016-07-22 10:57 6.6M 
[   ]cmake-3.6.1.zip2016-07-22 10:57 11M 
[   ]cmake-3.6.2-Darwin-x86_64.dmg2016-09-07 14:29 25M 
[   ]cmake-3.6.2-Darwin-x86_64.tar.Z2016-09-07 14:29 36M 
[   ]cmake-3.6.2-Darwin-x86_64.tar.gz2016-09-07 14:29 25M 
[TXT]cmake-3.6.2-Linux-i386.sh2016-09-07 14:29 27M 
[   ]cmake-3.6.2-Linux-i386.tar.Z2016-09-07 14:29 38M 
[   ]cmake-3.6.2-Linux-i386.tar.gz2016-09-07 14:28 27M 
[TXT]cmake-3.6.2-Linux-x86_64.sh2016-09-07 14:28 27M 
[   ]cmake-3.6.2-Linux-x86_64.tar.Z2016-09-07 14:28 38M 
[   ]cmake-3.6.2-Linux-x86_64.tar.gz2016-09-07 14:28 27M 
[TXT]cmake-3.6.2-SHA-256.txt2016-09-07 14:28 1.4K 
[TXT]cmake-3.6.2-SHA-256.txt.asc2016-09-07 14:28 819  
[   ]cmake-3.6.2-win32-x86.msi2016-09-07 14:28 15M 
[   ]cmake-3.6.2-win32-x86.zip2016-09-07 14:28 20M 
[   ]cmake-3.6.2-win64-x64.msi2016-09-07 14:28 15M 
[   ]cmake-3.6.2-win64-x64.zip2016-09-07 14:28 19M 
[   ]cmake-3.6.2.tar.Z2016-09-07 14:28 11M 
[   ]cmake-3.6.2.tar.gz2016-09-07 14:28 6.6M 
[   ]cmake-3.6.2.zip2016-09-07 14:28 11M 
[   ]cmake-3.6.3-Darwin-x86_64.dmg2016-11-03 12:13 25M 
[   ]cmake-3.6.3-Darwin-x86_64.tar.Z2016-11-03 12:13 36M 
[   ]cmake-3.6.3-Darwin-x86_64.tar.gz2016-11-03 12:13 25M 
[TXT]cmake-3.6.3-Linux-i386.sh2016-11-03 12:13 27M 
[   ]cmake-3.6.3-Linux-i386.tar.Z2016-11-03 12:13 38M 
[   ]cmake-3.6.3-Linux-i386.tar.gz2016-11-03 12:13 27M 
[TXT]cmake-3.6.3-Linux-x86_64.sh2016-11-03 12:13 27M 
[   ]cmake-3.6.3-Linux-x86_64.tar.Z2016-11-03 12:13 38M 
[   ]cmake-3.6.3-Linux-x86_64.tar.gz2016-11-03 12:13 27M 
[TXT]cmake-3.6.3-SHA-256.txt2016-11-03 12:13 1.4K 
[TXT]cmake-3.6.3-SHA-256.txt.asc2016-11-03 12:13 801  
[   ]cmake-3.6.3-win32-x86.msi2016-11-03 12:13 15M 
[   ]cmake-3.6.3-win32-x86.zip2016-11-03 12:13 20M 
[   ]cmake-3.6.3-win64-x64.msi2016-11-03 12:12 17M 
[   ]cmake-3.6.3-win64-x64.zip2016-11-03 12:12 23M 
[   ]cmake-3.6.3.tar.Z2016-11-03 12:12 11M 
[   ]cmake-3.6.3.tar.gz2016-11-03 12:12 6.6M 
[   ]cmake-3.6.3.zip2016-11-03 12:12 11M 
[DIR]cygwin/2016-09-07 14:44 -  

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.7/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.7/index.html new file mode 100644 index 00000000..4812f93f --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.7/index.html @@ -0,0 +1,92 @@ + + + + Index of /files/v3.7 + + +

Index of /files/v3.7

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]cmake-3.7.0-Darwin-x86_64.dmg2016-11-11 14:01 26M 
[   ]cmake-3.7.0-Darwin-x86_64.tar.gz2016-11-11 14:01 25M 
[TXT]cmake-3.7.0-Linux-x86_64.sh2016-11-11 14:01 29M 
[   ]cmake-3.7.0-Linux-x86_64.tar.gz2016-11-11 14:01 29M 
[TXT]cmake-3.7.0-SHA-256.txt2016-11-11 14:01 1.0K 
[TXT]cmake-3.7.0-SHA-256.txt.asc2016-11-11 14:01 801  
[   ]cmake-3.7.0-rc1-Darwin-x86_64.dmg2016-10-04 15:23 26M 
[   ]cmake-3.7.0-rc1-Darwin-x86_64.tar.gz2016-10-04 15:23 25M 
[TXT]cmake-3.7.0-rc1-Linux-x86_64.sh2016-10-04 15:23 29M 
[   ]cmake-3.7.0-rc1-Linux-x86_64.tar.gz2016-10-04 15:23 29M 
[TXT]cmake-3.7.0-rc1-SHA-256.txt2016-10-04 15:23 1.0K 
[TXT]cmake-3.7.0-rc1-SHA-256.txt.asc2016-10-04 15:23 801  
[   ]cmake-3.7.0-rc1-win32-x86.msi2016-10-04 15:23 15M 
[   ]cmake-3.7.0-rc1-win32-x86.zip2016-10-04 15:23 21M 
[   ]cmake-3.7.0-rc1-win64-x64.msi2016-10-04 15:23 17M 
[   ]cmake-3.7.0-rc1-win64-x64.zip2016-10-04 15:23 24M 
[   ]cmake-3.7.0-rc1.tar.Z2016-10-04 15:23 11M 
[   ]cmake-3.7.0-rc1.tar.gz2016-10-04 15:23 7.0M 
[   ]cmake-3.7.0-rc1.zip2016-10-04 15:23 12M 
[   ]cmake-3.7.0-rc2-Darwin-x86_64.dmg2016-10-19 15:24 26M 
[   ]cmake-3.7.0-rc2-Darwin-x86_64.tar.gz2016-10-19 15:24 25M 
[TXT]cmake-3.7.0-rc2-Linux-x86_64.sh2016-10-19 15:24 29M 
[   ]cmake-3.7.0-rc2-Linux-x86_64.tar.gz2016-10-19 15:24 29M 
[TXT]cmake-3.7.0-rc2-SHA-256.txt2016-10-19 15:24 1.0K 
[TXT]cmake-3.7.0-rc2-SHA-256.txt.asc2016-10-19 15:24 801  
[   ]cmake-3.7.0-rc2-win32-x86.msi2016-10-19 15:23 15M 
[   ]cmake-3.7.0-rc2-win32-x86.zip2016-10-19 15:23 21M 
[   ]cmake-3.7.0-rc2-win64-x64.msi2016-10-19 15:23 17M 
[   ]cmake-3.7.0-rc2-win64-x64.zip2016-10-19 15:23 24M 
[   ]cmake-3.7.0-rc2.tar.Z2016-10-19 15:23 11M 
[   ]cmake-3.7.0-rc2.tar.gz2016-10-19 15:23 7.0M 
[   ]cmake-3.7.0-rc2.zip2016-10-19 15:23 12M 
[   ]cmake-3.7.0-rc3-Darwin-x86_64.dmg2016-11-04 15:26 26M 
[   ]cmake-3.7.0-rc3-Darwin-x86_64.tar.gz2016-11-04 15:26 25M 
[TXT]cmake-3.7.0-rc3-Linux-x86_64.sh2016-11-04 15:26 29M 
[   ]cmake-3.7.0-rc3-Linux-x86_64.tar.gz2016-11-04 15:26 29M 
[TXT]cmake-3.7.0-rc3-SHA-256.txt2016-11-04 15:26 1.0K 
[TXT]cmake-3.7.0-rc3-SHA-256.txt.asc2016-11-04 15:26 801  
[   ]cmake-3.7.0-rc3-win32-x86.msi2016-11-04 15:26 15M 
[   ]cmake-3.7.0-rc3-win32-x86.zip2016-11-04 15:26 21M 
[   ]cmake-3.7.0-rc3-win64-x64.msi2016-11-04 15:26 17M 
[   ]cmake-3.7.0-rc3-win64-x64.zip2016-11-04 15:26 24M 
[   ]cmake-3.7.0-rc3.tar.Z2016-11-04 15:26 11M 
[   ]cmake-3.7.0-rc3.tar.gz2016-11-04 15:26 7.0M 
[   ]cmake-3.7.0-rc3.zip2016-11-04 15:26 12M 
[   ]cmake-3.7.0-win32-x86.msi2016-11-11 14:01 15M 
[   ]cmake-3.7.0-win32-x86.zip2016-11-11 14:01 21M 
[   ]cmake-3.7.0-win64-x64.msi2016-11-11 14:01 17M 
[   ]cmake-3.7.0-win64-x64.zip2016-11-11 14:00 24M 
[   ]cmake-3.7.0.tar.Z2016-11-11 14:00 11M 
[   ]cmake-3.7.0.tar.gz2016-11-11 14:00 7.0M 
[   ]cmake-3.7.0.zip2016-11-11 14:00 11M 
[   ]cmake-3.7.1-Darwin-x86_64.dmg2016-11-30 14:25 26M 
[   ]cmake-3.7.1-Darwin-x86_64.tar.gz2016-11-30 14:25 25M 
[TXT]cmake-3.7.1-Linux-x86_64.sh2016-11-30 14:25 29M 
[   ]cmake-3.7.1-Linux-x86_64.tar.gz2016-11-30 14:25 29M 
[TXT]cmake-3.7.1-SHA-256.txt2016-11-30 14:25 1.0K 
[TXT]cmake-3.7.1-SHA-256.txt.asc2016-11-30 14:25 833  
[   ]cmake-3.7.1-win32-x86.msi2016-11-30 14:25 15M 
[   ]cmake-3.7.1-win32-x86.zip2016-11-30 14:25 21M 
[   ]cmake-3.7.1-win64-x64.msi2016-11-30 14:24 17M 
[   ]cmake-3.7.1-win64-x64.zip2016-11-30 14:24 24M 
[   ]cmake-3.7.1.tar.Z2016-11-30 14:24 11M 
[   ]cmake-3.7.1.tar.gz2016-11-30 14:24 7.0M 
[   ]cmake-3.7.1.zip2016-11-30 14:24 11M 
[   ]cmake-3.7.2-Darwin-x86_64.dmg2017-01-13 14:13 26M 
[   ]cmake-3.7.2-Darwin-x86_64.tar.gz2017-01-13 14:13 25M 
[TXT]cmake-3.7.2-Linux-x86_64.sh2017-01-13 14:13 29M 
[   ]cmake-3.7.2-Linux-x86_64.tar.gz2017-01-13 14:13 29M 
[TXT]cmake-3.7.2-SHA-256.txt2017-01-13 14:13 1.0K 
[TXT]cmake-3.7.2-SHA-256.txt.asc2017-01-13 14:13 833  
[   ]cmake-3.7.2-win32-x86.msi2017-01-13 14:13 15M 
[   ]cmake-3.7.2-win32-x86.zip2017-01-13 14:12 21M 
[   ]cmake-3.7.2-win64-x64.msi2017-01-13 14:12 17M 
[   ]cmake-3.7.2-win64-x64.zip2017-01-13 14:12 24M 
[   ]cmake-3.7.2.tar.Z2017-01-13 14:12 11M 
[   ]cmake-3.7.2.tar.gz2017-01-13 14:12 7.0M 
[   ]cmake-3.7.2.zip2017-01-13 14:12 11M 

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.8/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.8/index.html new file mode 100644 index 00000000..5fc8caa1 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.8/index.html @@ -0,0 +1,105 @@ + + + + Index of /files/v3.8 + + +

Index of /files/v3.8

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]cmake-3.8.0-Darwin-x86_64.dmg2017-04-10 13:39 26M 
[   ]cmake-3.8.0-Darwin-x86_64.tar.gz2017-04-10 13:39 26M 
[TXT]cmake-3.8.0-Linux-x86_64.sh2017-04-10 13:39 31M 
[   ]cmake-3.8.0-Linux-x86_64.tar.gz2017-04-10 13:39 31M 
[TXT]cmake-3.8.0-SHA-256.txt2017-04-10 13:39 1.0K 
[TXT]cmake-3.8.0-SHA-256.txt.asc2017-04-10 13:39 833  
[   ]cmake-3.8.0-rc1-Darwin-x86_64.dmg2017-02-07 12:54 26M 
[   ]cmake-3.8.0-rc1-Darwin-x86_64.tar.gz2017-02-07 12:54 26M 
[TXT]cmake-3.8.0-rc1-Linux-x86_64.sh2017-02-07 12:54 31M 
[   ]cmake-3.8.0-rc1-Linux-x86_64.tar.gz2017-02-07 12:54 31M 
[TXT]cmake-3.8.0-rc1-SHA-256.txt2017-02-07 12:54 1.0K 
[TXT]cmake-3.8.0-rc1-SHA-256.txt.asc2017-02-07 12:54 833  
[   ]cmake-3.8.0-rc1-win32-x86.msi2017-02-07 12:54 15M 
[   ]cmake-3.8.0-rc1-win32-x86.zip2017-02-07 12:54 21M 
[   ]cmake-3.8.0-rc1-win64-x64.msi2017-02-07 12:54 18M 
[   ]cmake-3.8.0-rc1-win64-x64.zip2017-02-07 12:54 24M 
[   ]cmake-3.8.0-rc1.tar.Z2017-02-07 12:54 12M 
[   ]cmake-3.8.0-rc1.tar.gz2017-02-07 12:54 7.1M 
[   ]cmake-3.8.0-rc1.zip2017-02-07 12:54 12M 
[   ]cmake-3.8.0-rc2-Darwin-x86_64.dmg2017-03-03 10:00 26M 
[   ]cmake-3.8.0-rc2-Darwin-x86_64.tar.gz2017-03-03 10:00 26M 
[TXT]cmake-3.8.0-rc2-Linux-x86_64.sh2017-03-03 10:00 31M 
[   ]cmake-3.8.0-rc2-Linux-x86_64.tar.gz2017-03-03 09:59 31M 
[TXT]cmake-3.8.0-rc2-SHA-256.txt2017-03-03 09:59 1.0K 
[TXT]cmake-3.8.0-rc2-SHA-256.txt.asc2017-03-03 09:59 833  
[   ]cmake-3.8.0-rc2-win32-x86.msi2017-03-03 09:59 16M 
[   ]cmake-3.8.0-rc2-win32-x86.zip2017-03-03 09:59 22M 
[   ]cmake-3.8.0-rc2-win64-x64.msi2017-03-03 09:59 18M 
[   ]cmake-3.8.0-rc2-win64-x64.zip2017-03-03 09:59 24M 
[   ]cmake-3.8.0-rc2.tar.Z2017-03-03 09:59 12M 
[   ]cmake-3.8.0-rc2.tar.gz2017-03-03 09:59 7.2M 
[   ]cmake-3.8.0-rc2.zip2017-03-03 09:59 12M 
[   ]cmake-3.8.0-rc3-Darwin-x86_64.dmg2017-03-24 13:52 26M 
[   ]cmake-3.8.0-rc3-Darwin-x86_64.tar.gz2017-03-24 13:52 26M 
[TXT]cmake-3.8.0-rc3-Linux-x86_64.sh2017-03-24 13:52 31M 
[   ]cmake-3.8.0-rc3-Linux-x86_64.tar.gz2017-03-24 13:52 31M 
[TXT]cmake-3.8.0-rc3-SHA-256.txt2017-03-24 13:52 1.0K 
[TXT]cmake-3.8.0-rc3-SHA-256.txt.asc2017-03-24 13:52 833  
[   ]cmake-3.8.0-rc3-win32-x86.msi2017-03-24 13:52 16M 
[   ]cmake-3.8.0-rc3-win32-x86.zip2017-03-24 13:52 22M 
[   ]cmake-3.8.0-rc3-win64-x64.msi2017-03-24 13:52 18M 
[   ]cmake-3.8.0-rc3-win64-x64.zip2017-03-24 13:52 24M 
[   ]cmake-3.8.0-rc3.tar.Z2017-03-24 13:52 12M 
[   ]cmake-3.8.0-rc3.tar.gz2017-03-24 13:52 7.2M 
[   ]cmake-3.8.0-rc3.zip2017-03-24 13:52 12M 
[   ]cmake-3.8.0-rc4-Darwin-x86_64.dmg2017-03-30 11:38 26M 
[   ]cmake-3.8.0-rc4-Darwin-x86_64.tar.gz2017-03-30 11:38 26M 
[TXT]cmake-3.8.0-rc4-Linux-x86_64.sh2017-03-30 11:38 31M 
[   ]cmake-3.8.0-rc4-Linux-x86_64.tar.gz2017-03-30 11:38 31M 
[TXT]cmake-3.8.0-rc4-SHA-256.txt2017-03-30 11:38 1.0K 
[TXT]cmake-3.8.0-rc4-SHA-256.txt.asc2017-03-30 11:38 833  
[   ]cmake-3.8.0-rc4-win32-x86.msi2017-03-30 11:38 16M 
[   ]cmake-3.8.0-rc4-win32-x86.zip2017-03-30 11:38 22M 
[   ]cmake-3.8.0-rc4-win64-x64.msi2017-03-30 11:38 18M 
[   ]cmake-3.8.0-rc4-win64-x64.zip2017-03-30 11:38 24M 
[   ]cmake-3.8.0-rc4.tar.Z2017-03-30 11:38 12M 
[   ]cmake-3.8.0-rc4.tar.gz2017-03-30 11:38 7.2M 
[   ]cmake-3.8.0-rc4.zip2017-03-30 11:38 12M 
[   ]cmake-3.8.0-win32-x86.msi2017-04-10 13:39 16M 
[   ]cmake-3.8.0-win32-x86.zip2017-04-10 13:39 22M 
[   ]cmake-3.8.0-win64-x64.msi2017-04-10 13:39 18M 
[   ]cmake-3.8.0-win64-x64.zip2017-04-10 13:38 24M 
[   ]cmake-3.8.0.tar.Z2017-04-10 13:38 12M 
[   ]cmake-3.8.0.tar.gz2017-04-10 13:38 7.2M 
[   ]cmake-3.8.0.zip2017-04-10 13:38 12M 
[   ]cmake-3.8.1-Darwin-x86_64.dmg2017-05-02 11:06 26M 
[   ]cmake-3.8.1-Darwin-x86_64.tar.gz2017-05-02 11:06 26M 
[TXT]cmake-3.8.1-Linux-x86_64.sh2017-05-02 11:06 31M 
[   ]cmake-3.8.1-Linux-x86_64.tar.gz2017-05-02 11:05 31M 
[TXT]cmake-3.8.1-SHA-256.txt2017-05-02 11:05 1.0K 
[TXT]cmake-3.8.1-SHA-256.txt.asc2017-05-02 11:05 833  
[   ]cmake-3.8.1-win32-x86.msi2017-05-02 11:05 16M 
[   ]cmake-3.8.1-win32-x86.zip2017-05-02 11:05 22M 
[   ]cmake-3.8.1-win64-x64.msi2017-05-02 11:05 18M 
[   ]cmake-3.8.1-win64-x64.zip2017-05-02 11:05 24M 
[   ]cmake-3.8.1.tar.Z2017-05-02 11:05 12M 
[   ]cmake-3.8.1.tar.gz2017-05-02 11:05 7.2M 
[   ]cmake-3.8.1.zip2017-05-02 11:05 12M 
[   ]cmake-3.8.2-Darwin-x86_64.dmg2017-05-31 12:26 26M 
[   ]cmake-3.8.2-Darwin-x86_64.tar.gz2017-05-31 12:26 25M 
[TXT]cmake-3.8.2-Linux-x86_64.sh2017-05-31 12:26 31M 
[   ]cmake-3.8.2-Linux-x86_64.tar.gz2017-05-31 12:26 31M 
[TXT]cmake-3.8.2-SHA-256.txt2017-05-31 12:26 1.0K 
[TXT]cmake-3.8.2-SHA-256.txt.asc2017-05-31 12:26 833  
[   ]cmake-3.8.2-win32-x86.msi2017-05-31 12:26 16M 
[   ]cmake-3.8.2-win32-x86.zip2017-05-31 12:26 22M 
[   ]cmake-3.8.2-win64-x64.msi2017-05-31 12:25 18M 
[   ]cmake-3.8.2-win64-x64.zip2017-05-31 12:25 24M 
[   ]cmake-3.8.2.tar.Z2017-05-31 12:25 12M 
[   ]cmake-3.8.2.tar.gz2017-05-31 12:25 7.2M 
[   ]cmake-3.8.2.zip2017-05-31 12:25 12M 

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.9/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.9/index.html new file mode 100644 index 00000000..54182afa --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/files/v3.9/index.html @@ -0,0 +1,183 @@ + + + + Index of /files/v3.9 + + +

Index of /files/v3.9

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]cmake-3.9.0-Darwin-x86_64.dmg2017-07-18 13:32 26M 
[   ]cmake-3.9.0-Darwin-x86_64.tar.gz2017-07-18 13:32 25M 
[TXT]cmake-3.9.0-Linux-x86_64.sh2017-07-18 13:32 31M 
[   ]cmake-3.9.0-Linux-x86_64.tar.gz2017-07-18 13:32 31M 
[TXT]cmake-3.9.0-SHA-256.txt2017-07-18 13:32 1.0K 
[TXT]cmake-3.9.0-SHA-256.txt.asc2017-07-18 13:32 833  
[   ]cmake-3.9.0-rc1-Darwin-x86_64.dmg2017-06-05 14:48 26M 
[   ]cmake-3.9.0-rc1-Darwin-x86_64.tar.gz2017-06-05 14:48 25M 
[TXT]cmake-3.9.0-rc1-Linux-x86_64.sh2017-06-05 14:48 31M 
[   ]cmake-3.9.0-rc1-Linux-x86_64.tar.gz2017-06-05 14:48 31M 
[TXT]cmake-3.9.0-rc1-SHA-256.txt2017-06-05 14:48 1.0K 
[TXT]cmake-3.9.0-rc1-SHA-256.txt.asc2017-06-05 14:47 833  
[   ]cmake-3.9.0-rc1-win32-x86.msi2017-06-05 14:47 16M 
[   ]cmake-3.9.0-rc1-win32-x86.zip2017-06-05 14:47 22M 
[   ]cmake-3.9.0-rc1-win64-x64.msi2017-06-05 14:47 18M 
[   ]cmake-3.9.0-rc1-win64-x64.zip2017-06-05 14:47 25M 
[   ]cmake-3.9.0-rc1.tar.Z2017-06-05 14:47 12M 
[   ]cmake-3.9.0-rc1.tar.gz2017-06-05 14:47 7.3M 
[   ]cmake-3.9.0-rc1.zip2017-06-05 14:47 12M 
[   ]cmake-3.9.0-rc2-Darwin-x86_64.dmg2017-06-07 14:46 26M 
[   ]cmake-3.9.0-rc2-Darwin-x86_64.tar.gz2017-06-07 14:46 25M 
[TXT]cmake-3.9.0-rc2-Linux-x86_64.sh2017-06-07 14:46 31M 
[   ]cmake-3.9.0-rc2-Linux-x86_64.tar.gz2017-06-07 14:46 31M 
[TXT]cmake-3.9.0-rc2-SHA-256.txt2017-06-07 14:46 1.0K 
[TXT]cmake-3.9.0-rc2-SHA-256.txt.asc2017-06-07 14:46 833  
[   ]cmake-3.9.0-rc2-win32-x86.msi2017-06-07 14:46 16M 
[   ]cmake-3.9.0-rc2-win32-x86.zip2017-06-07 14:46 22M 
[   ]cmake-3.9.0-rc2-win64-x64.msi2017-06-07 14:46 18M 
[   ]cmake-3.9.0-rc2-win64-x64.zip2017-06-07 14:46 25M 
[   ]cmake-3.9.0-rc2.tar.Z2017-06-07 14:46 12M 
[   ]cmake-3.9.0-rc2.tar.gz2017-06-07 14:46 7.3M 
[   ]cmake-3.9.0-rc2.zip2017-06-07 14:46 12M 
[   ]cmake-3.9.0-rc3-Darwin-x86_64.dmg2017-06-13 14:02 26M 
[   ]cmake-3.9.0-rc3-Darwin-x86_64.tar.gz2017-06-13 14:02 25M 
[TXT]cmake-3.9.0-rc3-Linux-x86_64.sh2017-06-13 14:02 31M 
[   ]cmake-3.9.0-rc3-Linux-x86_64.tar.gz2017-06-13 14:02 31M 
[TXT]cmake-3.9.0-rc3-SHA-256.txt2017-06-13 14:02 1.0K 
[TXT]cmake-3.9.0-rc3-SHA-256.txt.asc2017-06-13 14:02 833  
[   ]cmake-3.9.0-rc3-win32-x86.msi2017-06-13 14:02 16M 
[   ]cmake-3.9.0-rc3-win32-x86.zip2017-06-13 14:02 22M 
[   ]cmake-3.9.0-rc3-win64-x64.msi2017-06-13 14:01 18M 
[   ]cmake-3.9.0-rc3-win64-x64.zip2017-06-13 14:01 25M 
[   ]cmake-3.9.0-rc3.tar.Z2017-06-13 14:01 12M 
[   ]cmake-3.9.0-rc3.tar.gz2017-06-13 14:01 7.3M 
[   ]cmake-3.9.0-rc3.zip2017-06-13 14:01 12M 
[   ]cmake-3.9.0-rc4-Darwin-x86_64.dmg2017-06-22 13:27 26M 
[   ]cmake-3.9.0-rc4-Darwin-x86_64.tar.gz2017-06-22 13:27 25M 
[TXT]cmake-3.9.0-rc4-Linux-x86_64.sh2017-06-22 13:27 31M 
[   ]cmake-3.9.0-rc4-Linux-x86_64.tar.gz2017-06-22 13:27 31M 
[TXT]cmake-3.9.0-rc4-SHA-256.txt2017-06-22 13:27 1.0K 
[TXT]cmake-3.9.0-rc4-SHA-256.txt.asc2017-06-22 13:26 833  
[   ]cmake-3.9.0-rc4-win32-x86.msi2017-06-22 13:26 16M 
[   ]cmake-3.9.0-rc4-win32-x86.zip2017-06-22 13:26 22M 
[   ]cmake-3.9.0-rc4-win64-x64.msi2017-06-22 13:26 18M 
[   ]cmake-3.9.0-rc4-win64-x64.zip2017-06-22 13:26 25M 
[   ]cmake-3.9.0-rc4.tar.Z2017-06-22 13:26 12M 
[   ]cmake-3.9.0-rc4.tar.gz2017-06-22 13:26 7.3M 
[   ]cmake-3.9.0-rc4.zip2017-06-22 13:26 12M 
[   ]cmake-3.9.0-rc5-Darwin-x86_64.dmg2017-06-27 13:56 26M 
[   ]cmake-3.9.0-rc5-Darwin-x86_64.tar.gz2017-06-27 13:56 25M 
[TXT]cmake-3.9.0-rc5-Linux-x86_64.sh2017-06-27 13:56 31M 
[   ]cmake-3.9.0-rc5-Linux-x86_64.tar.gz2017-06-27 13:56 31M 
[TXT]cmake-3.9.0-rc5-SHA-256.txt2017-06-27 13:56 1.0K 
[TXT]cmake-3.9.0-rc5-SHA-256.txt.asc2017-06-27 13:56 833  
[   ]cmake-3.9.0-rc5-win32-x86.msi2017-06-27 13:56 16M 
[   ]cmake-3.9.0-rc5-win32-x86.zip2017-06-27 13:56 22M 
[   ]cmake-3.9.0-rc5-win64-x64.msi2017-06-27 13:56 18M 
[   ]cmake-3.9.0-rc5-win64-x64.zip2017-06-27 13:56 25M 
[   ]cmake-3.9.0-rc5.tar.Z2017-06-27 13:55 12M 
[   ]cmake-3.9.0-rc5.tar.gz2017-06-27 13:55 7.3M 
[   ]cmake-3.9.0-rc5.zip2017-06-27 13:55 12M 
[   ]cmake-3.9.0-rc6-Darwin-x86_64.dmg2017-07-12 11:46 26M 
[   ]cmake-3.9.0-rc6-Darwin-x86_64.tar.gz2017-07-12 11:46 25M 
[TXT]cmake-3.9.0-rc6-Linux-x86_64.sh2017-07-12 11:46 31M 
[   ]cmake-3.9.0-rc6-Linux-x86_64.tar.gz2017-07-12 11:46 31M 
[TXT]cmake-3.9.0-rc6-SHA-256.txt2017-07-12 11:46 1.0K 
[TXT]cmake-3.9.0-rc6-SHA-256.txt.asc2017-07-12 11:46 833  
[   ]cmake-3.9.0-rc6-win32-x86.msi2017-07-12 11:46 16M 
[   ]cmake-3.9.0-rc6-win32-x86.zip2017-07-12 11:45 22M 
[   ]cmake-3.9.0-rc6-win64-x64.msi2017-07-12 11:45 18M 
[   ]cmake-3.9.0-rc6-win64-x64.zip2017-07-12 11:45 25M 
[   ]cmake-3.9.0-rc6.tar.Z2017-07-12 11:45 12M 
[   ]cmake-3.9.0-rc6.tar.gz2017-07-12 11:45 7.3M 
[   ]cmake-3.9.0-rc6.zip2017-07-12 11:45 12M 
[   ]cmake-3.9.0-win32-x86.msi2017-07-18 13:32 16M 
[   ]cmake-3.9.0-win32-x86.zip2017-07-18 13:32 22M 
[   ]cmake-3.9.0-win64-x64.msi2017-07-18 13:32 18M 
[   ]cmake-3.9.0-win64-x64.zip2017-07-18 13:31 25M 
[   ]cmake-3.9.0.tar.Z2017-07-18 13:31 12M 
[   ]cmake-3.9.0.tar.gz2017-07-18 13:31 7.3M 
[   ]cmake-3.9.0.zip2017-07-18 13:31 12M 
[   ]cmake-3.9.1-Darwin-x86_64.dmg2017-08-10 11:49 26M 
[   ]cmake-3.9.1-Darwin-x86_64.tar.gz2017-08-10 11:49 25M 
[TXT]cmake-3.9.1-Linux-x86_64.sh2017-08-10 11:49 31M 
[   ]cmake-3.9.1-Linux-x86_64.tar.gz2017-08-10 11:49 31M 
[TXT]cmake-3.9.1-SHA-256.txt2017-08-10 11:49 1.0K 
[TXT]cmake-3.9.1-SHA-256.txt.asc2017-08-10 11:49 833  
[   ]cmake-3.9.1-win32-x86.msi2017-08-10 11:49 16M 
[   ]cmake-3.9.1-win32-x86.zip2017-08-10 11:49 22M 
[   ]cmake-3.9.1-win64-x64.msi2017-08-10 11:49 18M 
[   ]cmake-3.9.1-win64-x64.zip2017-08-10 11:49 25M 
[   ]cmake-3.9.1.tar.Z2017-08-10 11:49 12M 
[   ]cmake-3.9.1.tar.gz2017-08-10 11:49 7.3M 
[   ]cmake-3.9.1.zip2017-08-10 11:49 12M 
[   ]cmake-3.9.2-Darwin-x86_64.dmg2017-09-07 15:55 26M 
[   ]cmake-3.9.2-Darwin-x86_64.tar.gz2017-09-07 15:54 25M 
[TXT]cmake-3.9.2-Linux-x86_64.sh2017-09-07 15:54 31M 
[   ]cmake-3.9.2-Linux-x86_64.tar.gz2017-09-07 15:54 31M 
[TXT]cmake-3.9.2-SHA-256.txt2017-09-07 15:54 1.0K 
[TXT]cmake-3.9.2-SHA-256.txt.asc2017-09-07 15:54 833  
[   ]cmake-3.9.2-win32-x86.msi2017-09-07 15:54 16M 
[   ]cmake-3.9.2-win32-x86.zip2017-09-07 15:54 22M 
[   ]cmake-3.9.2-win64-x64.msi2017-09-07 15:54 18M 
[   ]cmake-3.9.2-win64-x64.zip2017-09-07 15:54 25M 
[   ]cmake-3.9.2.tar.Z2017-09-07 15:54 12M 
[   ]cmake-3.9.2.tar.gz2017-09-07 15:54 7.3M 
[   ]cmake-3.9.2.zip2017-09-07 15:54 12M 
[   ]cmake-3.9.3-Darwin-x86_64.dmg2017-09-20 11:59 26M 
[   ]cmake-3.9.3-Darwin-x86_64.tar.gz2017-09-20 11:59 25M 
[TXT]cmake-3.9.3-Linux-x86_64.sh2017-09-20 11:59 31M 
[   ]cmake-3.9.3-Linux-x86_64.tar.gz2017-09-20 11:59 31M 
[TXT]cmake-3.9.3-SHA-256.txt2017-09-20 11:59 1.0K 
[TXT]cmake-3.9.3-SHA-256.txt.asc2017-09-20 11:59 833  
[   ]cmake-3.9.3-win32-x86.msi2017-09-20 11:59 16M 
[   ]cmake-3.9.3-win32-x86.zip2017-09-20 11:59 22M 
[   ]cmake-3.9.3-win64-x64.msi2017-09-20 11:59 18M 
[   ]cmake-3.9.3-win64-x64.zip2017-09-20 11:59 25M 
[   ]cmake-3.9.3.tar.Z2017-09-20 11:59 12M 
[   ]cmake-3.9.3.tar.gz2017-09-20 11:59 7.3M 
[   ]cmake-3.9.3.zip2017-09-20 11:59 12M 
[   ]cmake-3.9.4-Darwin-x86_64.dmg2017-10-04 09:43 26M 
[   ]cmake-3.9.4-Darwin-x86_64.tar.gz2017-10-04 09:43 25M 
[TXT]cmake-3.9.4-Linux-x86_64.sh2017-10-04 09:43 31M 
[   ]cmake-3.9.4-Linux-x86_64.tar.gz2017-10-04 09:43 31M 
[TXT]cmake-3.9.4-SHA-256.txt2017-10-04 09:43 1.0K 
[TXT]cmake-3.9.4-SHA-256.txt.asc2017-10-04 09:42 833  
[   ]cmake-3.9.4-win32-x86.msi2017-10-04 09:42 16M 
[   ]cmake-3.9.4-win32-x86.zip2017-10-04 09:42 22M 
[   ]cmake-3.9.4-win64-x64.msi2017-10-04 09:42 18M 
[   ]cmake-3.9.4-win64-x64.zip2017-10-04 09:42 25M 
[   ]cmake-3.9.4.tar.Z2017-10-04 09:42 12M 
[   ]cmake-3.9.4.tar.gz2017-10-04 09:42 7.3M 
[   ]cmake-3.9.4.zip2017-10-04 09:42 12M 
[   ]cmake-3.9.5-Darwin-x86_64.dmg2017-11-03 10:26 26M 
[   ]cmake-3.9.5-Darwin-x86_64.tar.gz2017-11-03 10:26 25M 
[TXT]cmake-3.9.5-Linux-x86_64.sh2017-11-03 10:26 31M 
[   ]cmake-3.9.5-Linux-x86_64.tar.gz2017-11-03 10:26 31M 
[TXT]cmake-3.9.5-SHA-256.txt2017-11-03 10:26 1.0K 
[TXT]cmake-3.9.5-SHA-256.txt.asc2017-11-03 10:26 833  
[   ]cmake-3.9.5-win32-x86.msi2017-11-03 10:26 16M 
[   ]cmake-3.9.5-win32-x86.zip2017-11-03 10:26 22M 
[   ]cmake-3.9.5-win64-x64.msi2017-11-03 10:26 18M 
[   ]cmake-3.9.5-win64-x64.zip2017-11-03 10:26 25M 
[   ]cmake-3.9.5.tar.Z2017-11-03 10:26 12M 
[   ]cmake-3.9.5.tar.gz2017-11-03 10:26 7.3M 
[   ]cmake-3.9.5.zip2017-11-03 10:26 12M 
[   ]cmake-3.9.6-Darwin-x86_64.dmg2017-11-10 09:22 26M 
[   ]cmake-3.9.6-Darwin-x86_64.tar.gz2017-11-10 09:21 25M 
[TXT]cmake-3.9.6-Linux-x86_64.sh2017-11-10 09:21 31M 
[   ]cmake-3.9.6-Linux-x86_64.tar.gz2017-11-10 09:21 31M 
[TXT]cmake-3.9.6-SHA-256.txt2017-11-10 09:21 1.0K 
[TXT]cmake-3.9.6-SHA-256.txt.asc2017-11-10 09:21 833  
[   ]cmake-3.9.6-win32-x86.msi2017-11-10 09:21 16M 
[   ]cmake-3.9.6-win32-x86.zip2017-11-10 09:21 22M 
[   ]cmake-3.9.6-win64-x64.msi2017-11-10 09:21 18M 
[   ]cmake-3.9.6-win64-x64.zip2017-11-10 09:21 25M 
[   ]cmake-3.9.6.tar.Z2017-11-10 09:21 12M 
[   ]cmake-3.9.6.tar.gz2017-11-10 09:21 7.3M 
[   ]cmake-3.9.6.zip2017-11-10 09:21 12M 

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.23/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.23/index.html new file mode 100644 index 00000000..b3d9244b --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.23/index.html @@ -0,0 +1,45 @@ + +Index of /pub/linux/utils/util-linux/v2.23/ + +

Index of /pub/linux/utils/util-linux/v2.23/


../
+libblkid-docs/                                     31-Jul-2013 12:35       -
+libmount-docs/                                     31-Jul-2013 12:39       -
+sha256sums.asc                                     12-May-2017 10:53    2942
+util-linux-2.23-rc1.tar.bz2                        22-Mar-2013 12:48      5M
+util-linux-2.23-rc1.tar.gz                         22-Mar-2013 12:48      7M
+util-linux-2.23-rc1.tar.sign                       22-Mar-2013 12:48     836
+util-linux-2.23-rc1.tar.xz                         22-Mar-2013 12:48      3M
+util-linux-2.23-rc2.tar.bz2                        10-Apr-2013 22:14      5M
+util-linux-2.23-rc2.tar.gz                         10-Apr-2013 22:14      7M
+util-linux-2.23-rc2.tar.sign                       10-Apr-2013 22:14     836
+util-linux-2.23-rc2.tar.xz                         10-Apr-2013 22:14      3M
+util-linux-2.23.1.tar.bz2                          28-May-2013 09:57      5M
+util-linux-2.23.1.tar.gz                           28-May-2013 09:57      7M
+util-linux-2.23.1.tar.sign                         28-May-2013 09:57     836
+util-linux-2.23.1.tar.xz                           28-May-2013 09:57      3M
+util-linux-2.23.2.tar.bz2                          31-Jul-2013 12:40      5M
+util-linux-2.23.2.tar.gz                           31-Jul-2013 12:40      7M
+util-linux-2.23.2.tar.sign                         31-Jul-2013 12:40     836
+util-linux-2.23.2.tar.xz                           31-Jul-2013 12:40      3M
+util-linux-2.23.tar.bz2                            25-Apr-2013 10:48      5M
+util-linux-2.23.tar.gz                             25-Apr-2013 10:48      7M
+util-linux-2.23.tar.sign                           25-Apr-2013 10:48     836
+util-linux-2.23.tar.xz                             25-Apr-2013 10:48      3M
+v2.23-ChangeLog                                    25-Apr-2013 10:48     19K
+v2.23-ChangeLog.sign                               25-Apr-2013 10:48     836
+v2.23-ReleaseNotes                                 25-Apr-2013 10:48     53K
+v2.23-ReleaseNotes.sign                            25-Apr-2013 10:48     836
+v2.23-rc1-ChangeLog                                22-Mar-2013 12:48    361K
+v2.23-rc1-ChangeLog.sign                           22-Mar-2013 12:48     836
+v2.23-rc2-ChangeLog                                10-Apr-2013 22:14     80K
+v2.23-rc2-ChangeLog.sign                           10-Apr-2013 22:14     836
+v2.23.1-ChangeLog                                  28-May-2013 09:57     13K
+v2.23.1-ChangeLog.sign                             28-May-2013 09:57     836
+v2.23.1-ReleaseNotes                               28-May-2013 09:58    1448
+v2.23.1-ReleaseNotes.sign                          28-May-2013 09:58     836
+v2.23.2-ChangeLog                                  31-Jul-2013 12:40     23K
+v2.23.2-ChangeLog.sign                             31-Jul-2013 12:40     836
+v2.23.2-ReleaseNotes                               31-Jul-2013 12:40    2582
+v2.23.2-ReleaseNotes.sign                          31-Jul-2013 12:40     836
+

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.24/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.24/index.html new file mode 100644 index 00000000..4afb4625 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.24/index.html @@ -0,0 +1,43 @@ + +Index of /pub/linux/utils/util-linux/v2.24/ + +

Index of /pub/linux/utils/util-linux/v2.24/


../
+libblkid-docs/                                     24-Apr-2014 10:15       -
+libmount-docs/                                     24-Apr-2014 10:17       -
+sha256sums.asc                                     12-May-2017 10:53    2758
+util-linux-2.24-rc1.tar.bz2                        27-Sep-2013 12:54      5M
+util-linux-2.24-rc1.tar.gz                         27-Sep-2013 12:54      7M
+util-linux-2.24-rc1.tar.sign                       27-Sep-2013 12:54     836
+util-linux-2.24-rc1.tar.xz                         27-Sep-2013 12:54      3M
+util-linux-2.24-rc2.tar.bz2                        11-Oct-2013 11:37      5M
+util-linux-2.24-rc2.tar.gz                         11-Oct-2013 11:37      7M
+util-linux-2.24-rc2.tar.sign                       11-Oct-2013 11:37     836
+util-linux-2.24-rc2.tar.xz                         11-Oct-2013 11:37      3M
+util-linux-2.24.1.tar.gz                           20-Jan-2014 13:33      7M
+util-linux-2.24.1.tar.sign                         20-Jan-2014 13:33     819
+util-linux-2.24.1.tar.xz                           20-Jan-2014 13:33      3M
+util-linux-2.24.2.tar.gz                           24-Apr-2014 10:17      7M
+util-linux-2.24.2.tar.sign                         24-Apr-2014 10:17     819
+util-linux-2.24.2.tar.xz                           24-Apr-2014 10:17      3M
+util-linux-2.24.tar.bz2                            21-Oct-2013 13:49      5M
+util-linux-2.24.tar.gz                             21-Oct-2013 13:49      7M
+util-linux-2.24.tar.sign                           21-Oct-2013 13:49     836
+util-linux-2.24.tar.xz                             21-Oct-2013 13:49      3M
+v2.24-ChangeLog                                    21-Oct-2013 13:49     22K
+v2.24-ChangeLog.sign                               21-Oct-2013 13:49     836
+v2.24-ReleaseNotes                                 21-Oct-2013 13:49     44K
+v2.24-ReleaseNotes.sign                            21-Oct-2013 13:49     836
+v2.24-rc1-ChangeLog                                27-Sep-2013 12:54    292K
+v2.24-rc1-ChangeLog.sign                           27-Sep-2013 12:54     836
+v2.24-rc2-ChangeLog                                11-Oct-2013 11:37     42K
+v2.24-rc2-ChangeLog.sign                           11-Oct-2013 11:37     836
+v2.24.1-ChangeLog                                  20-Jan-2014 13:33     38K
+v2.24.1-ChangeLog.sign                             20-Jan-2014 13:33     819
+v2.24.1-ReleaseNotes                               20-Jan-2014 13:33    4449
+v2.24.1-ReleaseNotes.sign                          20-Jan-2014 13:33     819
+v2.24.2-ChangeLog                                  24-Apr-2014 10:17     47K
+v2.24.2-ChangeLog.sign                             24-Apr-2014 10:17     819
+v2.24.2-ReleaseNotes                               24-Apr-2014 10:18    5748
+v2.24.2-ReleaseNotes.sign                          24-Apr-2014 10:18     819
+

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.25/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.25/index.html new file mode 100644 index 00000000..9516c3b1 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.25/index.html @@ -0,0 +1,46 @@ + +Index of /pub/linux/utils/util-linux/v2.25/ + +

Index of /pub/linux/utils/util-linux/v2.25/


../
+libblkid-docs/                                     24-Oct-2014 13:05       -
+libmount-docs/                                     24-Oct-2014 13:06       -
+libsmartcols-docs/                                 24-Oct-2014 13:08       -
+sha256sums.asc                                     12-May-2017 10:53    2758
+util-linux-2.25-rc1.tar.gz                         18-Jun-2014 13:33      7M
+util-linux-2.25-rc1.tar.sign                       18-Jun-2014 13:33     819
+util-linux-2.25-rc1.tar.xz                         18-Jun-2014 13:33      3M
+util-linux-2.25-rc2.tar.gz                         02-Jul-2014 10:02      7M
+util-linux-2.25-rc2.tar.sign                       02-Jul-2014 10:02     819
+util-linux-2.25-rc2.tar.xz                         02-Jul-2014 10:02      3M
+util-linux-2.25.1-rc1.tar.gz                       27-Aug-2014 13:18      8M
+util-linux-2.25.1-rc1.tar.sign                     27-Aug-2014 13:18     819
+util-linux-2.25.1-rc1.tar.xz                       27-Aug-2014 13:18      4M
+util-linux-2.25.1.tar.gz                           03-Sep-2014 10:41      8M
+util-linux-2.25.1.tar.sign                         03-Sep-2014 10:41     819
+util-linux-2.25.1.tar.xz                           03-Sep-2014 10:41      4M
+util-linux-2.25.2.tar.gz                           24-Oct-2014 13:08      8M
+util-linux-2.25.2.tar.sign                         24-Oct-2014 13:08     819
+util-linux-2.25.2.tar.xz                           24-Oct-2014 13:08      4M
+util-linux-2.25.tar.gz                             22-Jul-2014 09:50      8M
+util-linux-2.25.tar.sign                           22-Jul-2014 09:50     819
+util-linux-2.25.tar.xz                             22-Jul-2014 09:50      4M
+v2.25-ChangeLog                                    22-Jul-2014 09:50     41K
+v2.25-ChangeLog.sign                               22-Jul-2014 09:50     819
+v2.25-ReleaseNotes                                 22-Jul-2014 09:50     61K
+v2.25-ReleaseNotes.sign                            22-Jul-2014 09:50     819
+v2.25-rc1-ChangeLog                                18-Jun-2014 13:33    489K
+v2.25-rc1-ChangeLog.sign                           18-Jun-2014 13:33     819
+v2.25-rc2-ChangeLog                                02-Jul-2014 10:02     27K
+v2.25-rc2-ChangeLog.sign                           02-Jul-2014 10:02     819
+v2.25.1-ChangeLog                                  03-Sep-2014 10:41    5816
+v2.25.1-ChangeLog.sign                             03-Sep-2014 10:41     819
+v2.25.1-ReleaseNotes                               03-Sep-2014 10:52    3220
+v2.25.1-ReleaseNotes.sign                          03-Sep-2014 10:52     819
+v2.25.1-rc1-ChangeLog                              27-Aug-2014 13:18     22K
+v2.25.1-rc1-ChangeLog.sign                         27-Aug-2014 13:18     819
+v2.25.2-ChangeLog                                  24-Oct-2014 13:08     26K
+v2.25.2-ChangeLog.sign                             24-Oct-2014 13:08     819
+v2.25.2-ReleaseNotes                               24-Oct-2014 13:08    3016
+v2.25.2-ReleaseNotes.sign                          24-Oct-2014 13:08     819
+

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.26/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.26/index.html new file mode 100644 index 00000000..b9914895 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.26/index.html @@ -0,0 +1,42 @@ + +Index of /pub/linux/utils/util-linux/v2.26/ + +

Index of /pub/linux/utils/util-linux/v2.26/


../
+libblkid-docs/                                     30-Apr-2015 10:38       -
+libfdisk-docs/                                     30-Apr-2015 10:40       -
+libmount-docs/                                     30-Apr-2015 10:42       -
+libsmartcols-docs/                                 30-Apr-2015 10:43       -
+sha256sums.asc                                     12-May-2017 10:54    2480
+util-linux-2.26-rc1.tar.gz                         14-Jan-2015 13:14      8M
+util-linux-2.26-rc1.tar.sign                       14-Jan-2015 13:14     819
+util-linux-2.26-rc1.tar.xz                         14-Jan-2015 13:14      4M
+util-linux-2.26-rc2.tar.gz                         04-Feb-2015 11:49      8M
+util-linux-2.26-rc2.tar.sign                       04-Feb-2015 11:49     819
+util-linux-2.26-rc2.tar.xz                         04-Feb-2015 11:49      4M
+util-linux-2.26.1.tar.gz                           13-Mar-2015 14:23      8M
+util-linux-2.26.1.tar.sign                         13-Mar-2015 14:23     819
+util-linux-2.26.1.tar.xz                           13-Mar-2015 14:23      4M
+util-linux-2.26.2.tar.gz                           30-Apr-2015 10:44      8M
+util-linux-2.26.2.tar.sign                         30-Apr-2015 10:44     819
+util-linux-2.26.2.tar.xz                           30-Apr-2015 10:44      4M
+util-linux-2.26.tar.gz                             19-Feb-2015 12:47      8M
+util-linux-2.26.tar.sign                           19-Feb-2015 12:47     819
+util-linux-2.26.tar.xz                             19-Feb-2015 12:47      4M
+v2.26-ChangeLog                                    19-Feb-2015 12:47     30K
+v2.26-ChangeLog.sign                               19-Feb-2015 12:47     819
+v2.26-ReleaseNotes                                 19-Feb-2015 12:47     51K
+v2.26-ReleaseNotes.sign                            19-Feb-2015 12:47     819
+v2.26-rc1-ChangeLog                                14-Jan-2015 13:14    360K
+v2.26-rc1-ChangeLog.sign                           14-Jan-2015 13:14     819
+v2.26-rc2-ChangeLog                                04-Feb-2015 11:50     51K
+v2.26-rc2-ChangeLog.sign                           04-Feb-2015 11:50     819
+v2.26.1-ChangeLog                                  13-Mar-2015 14:23     32K
+v2.26.1-ChangeLog.sign                             13-Mar-2015 14:23     819
+v2.26.1-ReleaseNotes                               13-Mar-2015 14:23    2944
+v2.26.1-ReleaseNotes.sign                          13-Mar-2015 14:23     819
+v2.26.2-ChangeLog                                  30-Apr-2015 10:44     58K
+v2.26.2-ChangeLog.sign                             30-Apr-2015 10:44     819
+v2.26.2-ReleaseNotes                               30-Apr-2015 10:44    5834
+v2.26.2-ReleaseNotes.sign                          30-Apr-2015 10:44     819
+

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.27/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.27/index.html new file mode 100644 index 00000000..14eb3683 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.27/index.html @@ -0,0 +1,35 @@ + +Index of /pub/linux/utils/util-linux/v2.27/ + +

Index of /pub/linux/utils/util-linux/v2.27/


../
+libblkid-docs/                                     02-Nov-2015 11:01       -
+libfdisk-docs/                                     02-Nov-2015 11:03       -
+libmount-docs/                                     02-Nov-2015 11:04       -
+libsmartcols-docs/                                 02-Nov-2015 11:06       -
+sha256sums.asc                                     12-May-2017 10:54    2127
+util-linux-2.27-rc1.tar.gz                         31-Jul-2015 11:01      8M
+util-linux-2.27-rc1.tar.sign                       31-Jul-2015 11:01     819
+util-linux-2.27-rc1.tar.xz                         31-Jul-2015 11:01      4M
+util-linux-2.27-rc2.tar.gz                         24-Aug-2015 11:04      8M
+util-linux-2.27-rc2.tar.sign                       24-Aug-2015 11:04     819
+util-linux-2.27-rc2.tar.xz                         24-Aug-2015 11:04      4M
+util-linux-2.27.1.tar.gz                           02-Nov-2015 11:06      8M
+util-linux-2.27.1.tar.sign                         02-Nov-2015 11:06     819
+util-linux-2.27.1.tar.xz                           02-Nov-2015 11:06      4M
+util-linux-2.27.tar.gz                             07-Sep-2015 08:17      8M
+util-linux-2.27.tar.sign                           07-Sep-2015 08:17     819
+util-linux-2.27.tar.xz                             07-Sep-2015 08:17      4M
+v2.27-ChangeLog                                    07-Sep-2015 08:17     21K
+v2.27-ChangeLog.sign                               07-Sep-2015 08:17     819
+v2.27-ReleaseNotes                                 07-Sep-2015 08:17     35K
+v2.27-ReleaseNotes.sign                            07-Sep-2015 08:17     819
+v2.27-rc1-ChangeLog                                31-Jul-2015 11:01    263K
+v2.27-rc1-ChangeLog.sign                           31-Jul-2015 11:01     819
+v2.27-rc2-ChangeLog                                24-Aug-2015 11:04     38K
+v2.27-rc2-ChangeLog.sign                           24-Aug-2015 11:04     819
+v2.27.1-ChangeLog                                  02-Nov-2015 11:06     18K
+v2.27.1-ChangeLog.sign                             02-Nov-2015 11:06     819
+v2.27.1-ReleaseNotes                               02-Nov-2015 11:06    2107
+v2.27.1-ReleaseNotes.sign                          02-Nov-2015 11:06     819
+

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.28/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.28/index.html new file mode 100644 index 00000000..4bba6b47 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.28/index.html @@ -0,0 +1,42 @@ + +Index of /pub/linux/utils/util-linux/v2.28/ + +

Index of /pub/linux/utils/util-linux/v2.28/


../
+libblkid-docs/                                     07-Sep-2016 12:00       -
+libfdisk-docs/                                     07-Sep-2016 12:02       -
+libmount-docs/                                     07-Sep-2016 12:04       -
+libsmartcols-docs/                                 07-Sep-2016 12:06       -
+sha256sums.asc                                     12-May-2017 10:55    2480
+util-linux-2.28-rc1.tar.gz                         11-Mar-2016 11:45      8M
+util-linux-2.28-rc1.tar.sign                       11-Mar-2016 11:45     819
+util-linux-2.28-rc1.tar.xz                         11-Mar-2016 11:45      4M
+util-linux-2.28-rc2.tar.gz                         29-Mar-2016 09:04      8M
+util-linux-2.28-rc2.tar.sign                       29-Mar-2016 09:04     819
+util-linux-2.28-rc2.tar.xz                         29-Mar-2016 09:04      4M
+util-linux-2.28.1.tar.gz                           11-Aug-2016 10:09      9M
+util-linux-2.28.1.tar.sign                         11-Aug-2016 10:09     819
+util-linux-2.28.1.tar.xz                           11-Aug-2016 10:09      4M
+util-linux-2.28.2.tar.gz                           07-Sep-2016 12:06      9M
+util-linux-2.28.2.tar.sign                         07-Sep-2016 12:06     819
+util-linux-2.28.2.tar.xz                           07-Sep-2016 12:06      4M
+util-linux-2.28.tar.gz                             12-Apr-2016 11:26      8M
+util-linux-2.28.tar.sign                           12-Apr-2016 11:26     819
+util-linux-2.28.tar.xz                             12-Apr-2016 11:26      4M
+v2.28-ChangeLog                                    12-Apr-2016 11:26     13K
+v2.28-ChangeLog.sign                               12-Apr-2016 11:26     819
+v2.28-ReleaseNotes                                 12-Apr-2016 11:26     33K
+v2.28-ReleaseNotes.sign                            12-Apr-2016 11:26     819
+v2.28-rc1-ChangeLog                                11-Mar-2016 11:45    269K
+v2.28-rc1-ChangeLog.sign                           11-Mar-2016 11:45     819
+v2.28-rc2-ChangeLog                                29-Mar-2016 09:04     52K
+v2.28-rc2-ChangeLog.sign                           29-Mar-2016 09:04     819
+v2.28.1-ChangeLog                                  11-Aug-2016 10:09     37K
+v2.28.1-ChangeLog.sign                             11-Aug-2016 10:09     819
+v2.28.1-ReleaseNotes                               11-Aug-2016 10:09    3748
+v2.28.1-ReleaseNotes.sign                          11-Aug-2016 10:09     819
+v2.28.2-ChangeLog                                  07-Sep-2016 12:06    8900
+v2.28.2-ChangeLog.sign                             07-Sep-2016 12:06     819
+v2.28.2-ReleaseNotes                               07-Sep-2016 12:06    1161
+v2.28.2-ReleaseNotes.sign                          07-Sep-2016 12:06     819
+

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.29/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.29/index.html new file mode 100644 index 00000000..916a255f --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.29/index.html @@ -0,0 +1,42 @@ + +Index of /pub/linux/utils/util-linux/v2.29/ + +

Index of /pub/linux/utils/util-linux/v2.29/


../
+libblkid-docs/                                     22-Feb-2017 15:20       -
+libfdisk-docs/                                     22-Feb-2017 15:22       -
+libmount-docs/                                     22-Feb-2017 15:24       -
+libsmartcols-docs/                                 22-Feb-2017 15:26       -
+sha256sums.asc                                     12-May-2017 10:55    2480
+util-linux-2.29-rc1.tar.gz                         30-Sep-2016 09:55      9M
+util-linux-2.29-rc1.tar.sign                       30-Sep-2016 09:55     819
+util-linux-2.29-rc1.tar.xz                         30-Sep-2016 09:55      4M
+util-linux-2.29-rc2.tar.gz                         19-Oct-2016 13:13      9M
+util-linux-2.29-rc2.tar.sign                       19-Oct-2016 13:13     819
+util-linux-2.29-rc2.tar.xz                         19-Oct-2016 13:13      4M
+util-linux-2.29.1.tar.gz                           20-Jan-2017 14:02      9M
+util-linux-2.29.1.tar.sign                         20-Jan-2017 14:02     819
+util-linux-2.29.1.tar.xz                           20-Jan-2017 14:02      4M
+util-linux-2.29.2.tar.gz                           22-Feb-2017 15:26      9M
+util-linux-2.29.2.tar.sign                         22-Feb-2017 15:26     819
+util-linux-2.29.2.tar.xz                           22-Feb-2017 15:26      4M
+util-linux-2.29.tar.gz                             08-Nov-2016 11:23      9M
+util-linux-2.29.tar.sign                           08-Nov-2016 11:23     819
+util-linux-2.29.tar.xz                             08-Nov-2016 11:23      4M
+v2.29-ChangeLog                                    08-Nov-2016 11:23     28K
+v2.29-ChangeLog.sign                               08-Nov-2016 11:23     819
+v2.29-ReleaseNotes                                 08-Nov-2016 11:24     26K
+v2.29-ReleaseNotes.sign                            08-Nov-2016 11:24     819
+v2.29-rc1-ChangeLog                                30-Sep-2016 09:55    219K
+v2.29-rc1-ChangeLog.sign                           30-Sep-2016 09:55     819
+v2.29-rc2-ChangeLog                                19-Oct-2016 13:13     19K
+v2.29-rc2-ChangeLog.sign                           19-Oct-2016 13:13     819
+v2.29.1-ChangeLog                                  20-Jan-2017 14:02     47K
+v2.29.1-ChangeLog.sign                             20-Jan-2017 14:02     819
+v2.29.1-ReleaseNotes                               20-Jan-2017 14:02    5067
+v2.29.1-ReleaseNotes.sign                          20-Jan-2017 14:02     819
+v2.29.2-ChangeLog                                  22-Feb-2017 15:26     14K
+v2.29.2-ChangeLog.sign                             22-Feb-2017 15:26     819
+v2.29.2-ReleaseNotes                               22-Feb-2017 15:26    2012
+v2.29.2-ReleaseNotes.sign                          22-Feb-2017 15:26     819
+

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.30/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.30/index.html new file mode 100644 index 00000000..0441bc0d --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.30/index.html @@ -0,0 +1,42 @@ + +Index of /pub/linux/utils/util-linux/v2.30/ + +

Index of /pub/linux/utils/util-linux/v2.30/


../
+libblkid-docs/                                     21-Sep-2017 09:49       -
+libfdisk-docs/                                     21-Sep-2017 09:50       -
+libmount-docs/                                     21-Sep-2017 09:50       -
+libsmartcols-docs/                                 21-Sep-2017 09:51       -
+sha256sums.asc                                     21-Sep-2017 09:52    2480
+util-linux-2.30-rc1.tar.gz                         12-May-2017 12:02      9M
+util-linux-2.30-rc1.tar.sign                       12-May-2017 12:02     819
+util-linux-2.30-rc1.tar.xz                         12-May-2017 12:02      4M
+util-linux-2.30-rc2.tar.gz                         23-May-2017 10:42      9M
+util-linux-2.30-rc2.tar.sign                       23-May-2017 10:42     819
+util-linux-2.30-rc2.tar.xz                         23-May-2017 10:42      4M
+util-linux-2.30.1.tar.gz                           20-Jul-2017 09:33      9M
+util-linux-2.30.1.tar.sign                         20-Jul-2017 09:33     819
+util-linux-2.30.1.tar.xz                           20-Jul-2017 09:33      4M
+util-linux-2.30.2.tar.gz                           21-Sep-2017 09:51      9M
+util-linux-2.30.2.tar.sign                         21-Sep-2017 09:51     833
+util-linux-2.30.2.tar.xz                           21-Sep-2017 09:51      4M
+util-linux-2.30.tar.gz                             02-Jun-2017 10:44      9M
+util-linux-2.30.tar.sign                           02-Jun-2017 10:44     819
+util-linux-2.30.tar.xz                             02-Jun-2017 10:44      4M
+v2.30-ChangeLog                                    02-Jun-2017 10:44     28K
+v2.30-ChangeLog.sign                               02-Jun-2017 10:44     819
+v2.30-ReleaseNotes                                 02-Jun-2017 10:44     34K
+v2.30-ReleaseNotes.sign                            02-Jun-2017 10:44     819
+v2.30-rc1-ChangeLog                                23-May-2017 10:42    318K
+v2.30-rc1-ChangeLog.sign                           23-May-2017 10:42     819
+v2.30-rc2-ChangeLog                                23-May-2017 10:42     19K
+v2.30-rc2-ChangeLog.sign                           23-May-2017 10:42     819
+v2.30.1-ChangeLog                                  20-Jul-2017 09:33     20K
+v2.30.1-ChangeLog.sign                             20-Jul-2017 09:33     819
+v2.30.1-ReleaseNotes                               20-Jul-2017 09:33    1901
+v2.30.1-ReleaseNotes.sign                          20-Jul-2017 09:33     819
+v2.30.2-ChangeLog                                  21-Sep-2017 09:51     13K
+v2.30.2-ChangeLog.sign                             21-Sep-2017 09:51     833
+v2.30.2-ReleaseNotes                               21-Sep-2017 09:51    1604
+v2.30.2-ReleaseNotes.sign                          21-Sep-2017 09:51     833
+

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.31/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.31/index.html new file mode 100644 index 00000000..097e4e0e --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.31/index.html @@ -0,0 +1,35 @@ + +Index of /pub/linux/utils/util-linux/v2.31/ + +

Index of /pub/linux/utils/util-linux/v2.31/


../
+libblkid-docs/                                     19-Dec-2017 15:16       -
+libfdisk-docs/                                     19-Dec-2017 15:17       -
+libmount-docs/                                     19-Dec-2017 15:17       -
+libsmartcols-docs/                                 19-Dec-2017 15:17       -
+sha256sums.asc                                     19-Dec-2017 15:20    2127
+util-linux-2.31-rc1.tar.gz                         22-Sep-2017 10:39      9M
+util-linux-2.31-rc1.tar.sign                       22-Sep-2017 10:39     833
+util-linux-2.31-rc1.tar.xz                         22-Sep-2017 10:39      4M
+util-linux-2.31-rc2.tar.gz                         03-Oct-2017 16:03      9M
+util-linux-2.31-rc2.tar.sign                       03-Oct-2017 16:03     833
+util-linux-2.31-rc2.tar.xz                         03-Oct-2017 16:03      4M
+util-linux-2.31.1.tar.gz                           19-Dec-2017 15:18      9M
+util-linux-2.31.1.tar.sign                         19-Dec-2017 15:18     833
+util-linux-2.31.1.tar.xz                           19-Dec-2017 15:18      4M
+util-linux-2.31.tar.gz                             19-Oct-2017 11:27      9M
+util-linux-2.31.tar.sign                           19-Oct-2017 11:27     833
+util-linux-2.31.tar.xz                             19-Oct-2017 11:27      4M
+v2.31-ChangeLog                                    19-Oct-2017 11:27     15K
+v2.31-ChangeLog.sign                               19-Oct-2017 11:27     833
+v2.31-ReleaseNotes                                 19-Oct-2017 11:27     31K
+v2.31-ReleaseNotes.sign                            19-Oct-2017 11:27     833
+v2.31-rc1-ChangeLog                                22-Sep-2017 10:39    290K
+v2.31-rc1-ChangeLog.sign                           22-Sep-2017 10:39     833
+v2.31-rc2-ChangeLog                                03-Oct-2017 16:03     12K
+v2.31-rc2-ChangeLog.sign                           03-Oct-2017 16:03     833
+v2.31.1-ChangeLog                                  19-Dec-2017 15:18     27K
+v2.31.1-ChangeLog.sign                             19-Dec-2017 15:18     833
+v2.31.1-ReleaseNotes                               19-Dec-2017 15:18    3175
+v2.31.1-ReleaseNotes.sign                          19-Dec-2017 15:18     833
+

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.32/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.32/index.html new file mode 100644 index 00000000..d373e981 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.32/index.html @@ -0,0 +1,35 @@ + +Index of /pub/linux/utils/util-linux/v2.32/ + +

Index of /pub/linux/utils/util-linux/v2.32/


../
+libblkid-docs/                                     16-Jul-2018 11:27       -
+libfdisk-docs/                                     16-Jul-2018 11:28       -
+libmount-docs/                                     16-Jul-2018 11:28       -
+libsmartcols-docs/                                 16-Jul-2018 11:28       -
+sha256sums.asc                                     16-Jul-2018 11:30    2127
+util-linux-2.32-rc1.tar.gz                         13-Feb-2018 12:25      9M
+util-linux-2.32-rc1.tar.sign                       13-Feb-2018 12:25     833
+util-linux-2.32-rc1.tar.xz                         13-Feb-2018 12:25      4M
+util-linux-2.32-rc2.tar.gz                         01-Mar-2018 13:38      9M
+util-linux-2.32-rc2.tar.sign                       01-Mar-2018 13:38     833
+util-linux-2.32-rc2.tar.xz                         01-Mar-2018 13:38      4M
+util-linux-2.32.1.tar.gz                           16-Jul-2018 11:29      9M
+util-linux-2.32.1.tar.sign                         16-Jul-2018 11:29     833
+util-linux-2.32.1.tar.xz                           16-Jul-2018 11:29      4M
+util-linux-2.32.tar.gz                             21-Mar-2018 14:49      9M
+util-linux-2.32.tar.sign                           21-Mar-2018 14:49     833
+util-linux-2.32.tar.xz                             21-Mar-2018 14:49      4M
+v2.32-ChangeLog                                    21-Mar-2018 14:49     36K
+v2.32-ChangeLog.sign                               21-Mar-2018 14:49     833
+v2.32-ReleaseNotes                                 21-Mar-2018 14:49     21K
+v2.32-ReleaseNotes.sign                            21-Mar-2018 14:49     833
+v2.32-rc1-ChangeLog                                13-Feb-2018 12:25    174K
+v2.32-rc1-ChangeLog.sign                           13-Feb-2018 12:25     833
+v2.32-rc2-ChangeLog                                01-Mar-2018 13:38     21K
+v2.32-rc2-ChangeLog.sign                           01-Mar-2018 13:38     833
+v2.32.1-ChangeLog                                  16-Jul-2018 11:29     31K
+v2.32.1-ChangeLog.sign                             16-Jul-2018 11:29     833
+v2.32.1-ReleaseNotes                               16-Jul-2018 11:29    3425
+v2.32.1-ReleaseNotes.sign                          16-Jul-2018 11:29     833
+

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.33/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.33/index.html new file mode 100644 index 00000000..54953054 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.33/index.html @@ -0,0 +1,42 @@ + +Index of /pub/linux/utils/util-linux/v2.33/ + +

Index of /pub/linux/utils/util-linux/v2.33/


../
+libblkid-docs/                                     09-Apr-2019 13:55       -
+libfdisk-docs/                                     09-Apr-2019 13:56       -
+libmount-docs/                                     09-Apr-2019 13:56       -
+libsmartcols-docs/                                 09-Apr-2019 13:56       -
+sha256sums.asc                                     09-Apr-2019 14:01    2480
+util-linux-2.33-rc1.tar.gz                         25-Sep-2018 10:34      9M
+util-linux-2.33-rc1.tar.sign                       25-Sep-2018 10:34     833
+util-linux-2.33-rc1.tar.xz                         25-Sep-2018 10:34      4M
+util-linux-2.33-rc2.tar.gz                         19-Oct-2018 11:44      9M
+util-linux-2.33-rc2.tar.sign                       19-Oct-2018 11:44     833
+util-linux-2.33-rc2.tar.xz                         19-Oct-2018 11:44      4M
+util-linux-2.33.1.tar.gz                           09-Jan-2019 10:28      9M
+util-linux-2.33.1.tar.sign                         09-Jan-2019 10:28     833
+util-linux-2.33.1.tar.xz                           09-Jan-2019 10:28      4M
+util-linux-2.33.2.tar.gz                           09-Apr-2019 13:57     10M
+util-linux-2.33.2.tar.sign                         09-Apr-2019 13:57     833
+util-linux-2.33.2.tar.xz                           09-Apr-2019 13:57      4M
+util-linux-2.33.tar.gz                             06-Nov-2018 11:25      9M
+util-linux-2.33.tar.sign                           06-Nov-2018 11:25     833
+util-linux-2.33.tar.xz                             06-Nov-2018 11:25      4M
+v2.33-ChangeLog                                    06-Nov-2018 11:25    7977
+v2.33-ChangeLog.sign                               06-Nov-2018 11:25     833
+v2.33-ReleaseNotes                                 06-Nov-2018 11:25     27K
+v2.33-ReleaseNotes.sign                            06-Nov-2018 11:25     833
+v2.33-rc1-ChangeLog                                25-Sep-2018 10:34    210K
+v2.33-rc1-ChangeLog.sign                           25-Sep-2018 10:34     833
+v2.33-rc2-ChangeLog                                19-Oct-2018 11:44     18K
+v2.33-rc2-ChangeLog.sign                           19-Oct-2018 11:44     833
+v2.33.1-ChangeLog                                  09-Jan-2019 10:28     17K
+v2.33.1-ChangeLog.sign                             09-Jan-2019 10:28     833
+v2.33.1-ReleaseNotes                               09-Jan-2019 10:28    1899
+v2.33.1-ReleaseNotes.sign                          09-Jan-2019 10:28     833
+v2.33.2-ChangeLog                                  09-Apr-2019 13:57     21K
+v2.33.2-ChangeLog.sign                             09-Apr-2019 13:57     833
+v2.33.2-ReleaseNotes                               09-Apr-2019 13:57    2566
+v2.33.2-ReleaseNotes.sign                          09-Apr-2019 13:57     833
+

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.34/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.34/index.html new file mode 100644 index 00000000..bd9d9c87 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.34/index.html @@ -0,0 +1,28 @@ + +Index of /pub/linux/utils/util-linux/v2.34/ + +

Index of /pub/linux/utils/util-linux/v2.34/


../
+libblkid-docs/                                     14-Jun-2019 10:45       -
+libfdisk-docs/                                     14-Jun-2019 10:45       -
+libmount-docs/                                     14-Jun-2019 10:45       -
+libsmartcols-docs/                                 14-Jun-2019 10:46       -
+sha256sums.asc                                     14-Jun-2019 10:51    1774
+util-linux-2.34-rc1.tar.gz                         30-Apr-2019 10:24     10M
+util-linux-2.34-rc1.tar.sign                       30-Apr-2019 10:24     833
+util-linux-2.34-rc1.tar.xz                         30-Apr-2019 10:24      5M
+util-linux-2.34-rc2.tar.gz                         30-May-2019 10:24     10M
+util-linux-2.34-rc2.tar.sign                       30-May-2019 10:24     833
+util-linux-2.34-rc2.tar.xz                         30-May-2019 10:24      5M
+util-linux-2.34.tar.gz                             14-Jun-2019 10:46     10M
+util-linux-2.34.tar.sign                           14-Jun-2019 10:46     833
+util-linux-2.34.tar.xz                             14-Jun-2019 10:46      5M
+v2.34-ChangeLog                                    14-Jun-2019 10:46     14K
+v2.34-ChangeLog.sign                               14-Jun-2019 10:46     833
+v2.34-ReleaseNotes                                 14-Jun-2019 10:46     27K
+v2.34-ReleaseNotes.sign                            14-Jun-2019 10:46     833
+v2.34-rc1-ChangeLog                                30-Apr-2019 10:24    167K
+v2.34-rc1-ChangeLog.sign                           30-Apr-2019 10:24     833
+v2.34-rc2-ChangeLog                                30-May-2019 10:24     57K
+v2.34-rc2-ChangeLog.sign                           30-May-2019 10:24     833
+

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.35/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.35/index.html new file mode 100644 index 00000000..aa714d39 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/pub/linux/utils/util-linux/v2.35/index.html @@ -0,0 +1,18 @@ + +Index of /pub/linux/utils/util-linux/v2.35/ + +

Index of /pub/linux/utils/util-linux/v2.35/


../
+libblkid-docs/                                     11-Dec-2019 10:04       -
+libfdisk-docs/                                     11-Dec-2019 10:05       -
+libmount-docs/                                     11-Dec-2019 10:05       -
+libsmartcols-docs/                                 11-Dec-2019 10:05       -
+sha256sums.asc                                     11-Dec-2019 10:11    1242
+util-linux-2.35-rc1.tar.gz                         11-Dec-2019 10:06     10M
+util-linux-2.35-rc1.tar.sign                       11-Dec-2019 10:06     833
+util-linux-2.35-rc1.tar.xz                         11-Dec-2019 10:06      5M
+v2.35-ReleaseNotes                                 11-Dec-2019 10:06     21K
+v2.35-ReleaseNotes.sign                            11-Dec-2019 10:06     833
+v2.35-rc1-ChangeLog                                11-Dec-2019 10:06    228K
+v2.35-rc1-ChangeLog.sign                           11-Dec-2019 10:06     833
+

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/releases/eglibc/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/releases/eglibc/index.html new file mode 100644 index 00000000..b2679402 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/releases/eglibc/index.html @@ -0,0 +1,21 @@ + +Index of /releases/eglibc/ + +

Index of /releases/eglibc/


../
+eglibc-2.16-svnr21224.tar.bz2                      17-Oct-2012 18:01            17310656
+eglibc-2.16-svnr21224.tar.bz2.md5                  17-Oct-2012 21:53                  64
+eglibc-2.16-svnr21224.tar.bz2.sha1                 17-Oct-2012 21:53                  72
+eglibc-2.17-svnr22064.tar.bz2                      04-Jan-2013 05:44            17565519
+eglibc-2.17-svnr22064.tar.bz2.asc                  04-Jan-2013 05:45                 302
+eglibc-2.17-svnr22064.tar.bz2.md5                  04-Jan-2013 05:44                  64
+eglibc-2.17-svnr22064.tar.bz2.sha1                 04-Jan-2013 05:44                  72
+eglibc-2.18-svnr23787.tar.bz2                      21-Aug-2013 05:36            17862773
+eglibc-2.18-svnr23787.tar.bz2.asc                  21-Aug-2013 05:36                 302
+eglibc-2.18-svnr23787.tar.bz2.md5                  21-Aug-2013 05:36                  64
+eglibc-2.18-svnr23787.tar.bz2.sha1                 21-Aug-2013 05:36                  72
+eglibc-2.19-svnr25243.tar.bz2                      08-Feb-2014 10:06            18873620
+eglibc-2.19-svnr25243.tar.bz2.asc                  08-Feb-2014 10:06                 285
+eglibc-2.19-svnr25243.tar.bz2.md5                  08-Feb-2014 10:06                  64
+eglibc-2.19-svnr25243.tar.bz2.sha1                 08-Feb-2014 10:06                  72
+

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/releases/gnu-config/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/releases/gnu-config/index.html new file mode 100644 index 00000000..051aa481 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/releases/gnu-config/index.html @@ -0,0 +1,9 @@ + +Index of /releases/gnu-config/ + +

Index of /releases/gnu-config/


../
+SHA256SUM                                          03-Oct-2012 17:23                 190
+gnu-config-20120814.tar.bz2                        18-Sep-2012 09:28               43026
+gnu-config-yocto-20111111.tgz                      08-May-2012 21:11               48762
+

+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/releases/individual/xserver/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/releases/individual/xserver/index.html new file mode 100644 index 00000000..72e0d65e --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/releases/individual/xserver/index.html @@ -0,0 +1,609 @@ + + + + Index of /releases/individual/xserver + + +

Index of /releases/individual/xserver

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]xorg-server-1.0.1.tar.bz22006-01-18 23:51 5.7M 
[   ]xorg-server-1.0.1.tar.gz2006-01-18 23:51 7.7M 
[   ]xorg-server-1.0.2.tar.bz22006-03-20 14:01 5.7M 
[   ]xorg-server-1.0.2.tar.gz2006-03-20 14:02 7.6M 
[   ]xorg-server-1.0.99.2.tar.bz22006-04-02 00:47 6.1M 
[   ]xorg-server-1.0.99.2.tar.gz2006-04-02 00:48 8.3M 
[   ]xorg-server-1.0.99.901.tar.bz22006-04-07 22:51 6.0M 
[   ]xorg-server-1.0.99.901.tar.gz2006-04-07 22:51 8.2M 
[   ]xorg-server-1.0.99.902.tar.bz22006-04-28 23:17 6.0M 
[   ]xorg-server-1.0.99.902.tar.gz2006-04-28 23:16 8.2M 
[   ]xorg-server-1.0.99.903.tar.bz22006-05-12 20:54 6.0M 
[   ]xorg-server-1.0.99.903.tar.gz2006-05-12 20:52 8.3M 
[   ]xorg-server-1.1.0.tar.bz22006-05-22 23:31 6.0M 
[   ]xorg-server-1.1.0.tar.gz2006-05-22 23:29 8.3M 
[   ]xorg-server-1.1.1.tar.bz22006-07-08 00:57 6.0M 
[   ]xorg-server-1.1.1.tar.gz2006-07-08 00:59 8.0M 
[   ]xorg-server-1.1.99.901.tar.bz22006-10-13 23:06 6.0M 
[   ]xorg-server-1.1.99.901.tar.gz2006-10-13 23:08 8.1M 
[   ]xorg-server-1.1.99.902.tar.bz22006-11-13 22:04 5.8M 
[   ]xorg-server-1.1.99.902.tar.gz2006-11-13 22:06 7.8M 
[   ]xorg-server-1.1.99.903.tar.bz22006-12-02 00:14 5.7M 
[   ]xorg-server-1.1.99.903.tar.gz2006-12-02 00:17 7.7M 
[   ]xorg-server-1.2.0.tar.bz22007-01-23 06:15 5.7M 
[   ]xorg-server-1.2.0.tar.gz2007-01-23 06:17 7.7M 
[   ]xorg-server-1.2.99.0.tar.bz22006-11-02 03:15 5.9M 
[   ]xorg-server-1.2.99.0.tar.gz2006-11-02 03:17 7.9M 
[   ]xorg-server-1.2.99.901.tar.bz22007-03-05 05:11 5.7M 
[   ]xorg-server-1.2.99.901.tar.gz2007-03-05 05:14 7.6M 
[   ]xorg-server-1.2.99.902.tar.bz22007-03-14 19:38 5.7M 
[   ]xorg-server-1.2.99.902.tar.gz2007-03-14 19:43 7.6M 
[   ]xorg-server-1.2.99.903.tar.bz22007-03-27 05:01 5.7M 
[   ]xorg-server-1.2.99.903.tar.gz2007-03-27 05:05 7.6M 
[   ]xorg-server-1.2.99.904.tar.bz22007-04-06 06:31 4.2M 
[   ]xorg-server-1.2.99.904.tar.gz2007-04-06 06:28 7.6M 
[   ]xorg-server-1.2.99.905.tar.bz22007-04-06 07:01 5.7M 
[   ]xorg-server-1.2.99.905.tar.gz2007-04-06 06:57 7.6M 
[   ]xorg-server-1.3.0.0.tar.bz22007-04-20 02:45 5.7M 
[   ]xorg-server-1.3.0.0.tar.gz2007-04-20 02:42 7.6M 
[   ]xorg-server-1.3.99.0.tar.bz22007-08-01 05:38 6.0M 
[   ]xorg-server-1.3.99.0.tar.gz2007-08-01 05:36 8.0M 
[   ]xorg-server-1.3.99.2.tar.bz22007-09-01 03:12 5.9M 
[   ]xorg-server-1.3.99.2.tar.gz2007-09-01 03:10 7.8M 
[   ]xorg-server-1.4.0.90.tar.bz22007-12-12 20:44 6.0M 
[   ]xorg-server-1.4.0.90.tar.gz2007-12-12 20:43 8.0M 
[   ]xorg-server-1.4.1.tar.bz22008-06-10 15:57 6.0M 
[   ]xorg-server-1.4.1.tar.gz2008-06-10 15:56 8.1M 
[   ]xorg-server-1.4.2.tar.bz22008-06-11 15:08 5.9M 
[   ]xorg-server-1.4.2.tar.gz2008-06-11 15:08 7.9M 
[   ]xorg-server-1.4.99.901.tar.bz22008-03-06 05:25 5.3M 
[   ]xorg-server-1.4.99.901.tar.gz2008-03-06 05:23 7.1M 
[   ]xorg-server-1.4.99.902.tar.bz22008-05-22 19:16 5.3M 
[   ]xorg-server-1.4.99.902.tar.gz2008-05-22 19:16 7.1M 
[   ]xorg-server-1.4.99.904.tar.bz22008-06-30 15:42 5.4M 
[   ]xorg-server-1.4.99.904.tar.gz2008-06-30 15:42 7.3M 
[   ]xorg-server-1.4.99.905.tar.bz22008-06-30 20:31 5.4M 
[   ]xorg-server-1.4.99.905.tar.gz2008-06-30 20:31 7.3M 
[   ]xorg-server-1.4.99.906.tar.bz22008-07-23 18:55 5.4M 
[   ]xorg-server-1.4.99.906.tar.gz2008-07-23 18:55 7.3M 
[   ]xorg-server-1.4.tar.bz22007-09-06 09:23 5.9M 
[   ]xorg-server-1.4.tar.gz2007-09-06 09:22 7.8M 
[   ]xorg-server-1.5.0.tar.bz22008-09-03 23:16 5.4M 
[   ]xorg-server-1.5.0.tar.gz2008-09-03 23:16 7.3M 
[   ]xorg-server-1.5.1.tar.bz22008-09-23 19:15 5.4M 
[   ]xorg-server-1.5.1.tar.gz2008-09-23 19:15 7.3M 
[   ]xorg-server-1.5.2.tar.bz22008-10-10 19:27 5.4M 
[   ]xorg-server-1.5.2.tar.gz2008-10-10 19:27 7.3M 
[   ]xorg-server-1.5.3.tar.bz22008-11-05 20:49 5.4M 
[   ]xorg-server-1.5.3.tar.gz2008-11-05 20:49 7.3M 
[   ]xorg-server-1.5.99.1.tar.bz22008-11-26 07:29 4.4M 
[   ]xorg-server-1.5.99.1.tar.gz2008-11-26 07:26 5.9M 
[   ]xorg-server-1.5.99.2.tar.bz22008-12-03 08:16 4.4M 
[   ]xorg-server-1.5.99.2.tar.gz2008-12-03 08:09 5.9M 
[   ]xorg-server-1.5.99.3.tar.bz22008-12-10 06:28 4.4M 
[   ]xorg-server-1.5.99.3.tar.gz2008-12-10 06:25 5.9M 
[   ]xorg-server-1.5.99.901.tar.bz22009-01-12 21:12 4.4M 
[   ]xorg-server-1.5.99.901.tar.gz2009-01-12 21:12 6.0M 
[   ]xorg-server-1.5.99.902.tar.bz22009-01-31 05:27 4.4M 
[   ]xorg-server-1.5.99.902.tar.gz2009-01-31 05:24 6.0M 
[   ]xorg-server-1.5.99.903.tar.bz22009-02-18 06:35 4.4M 
[   ]xorg-server-1.5.99.903.tar.gz2009-02-18 06:32 6.0M 
[   ]xorg-server-1.6.0.tar.bz22009-02-25 20:25 4.4M 
[   ]xorg-server-1.6.0.tar.gz2009-02-25 20:19 6.0M 
[   ]xorg-server-1.6.1.901.tar.bz22009-05-09 05:46 4.4M 
[   ]xorg-server-1.6.1.901.tar.gz2009-05-09 05:42 5.8M 
[   ]xorg-server-1.6.1.902.tar.bz22009-06-29 23:05 4.4M 
[   ]xorg-server-1.6.1.902.tar.gz2009-06-29 23:02 5.9M 
[   ]xorg-server-1.6.1.tar.bz22009-04-14 20:09 4.4M 
[   ]xorg-server-1.6.1.tar.gz2009-04-14 20:09 5.8M 
[   ]xorg-server-1.6.2.901.tar.bz22009-07-26 21:42 4.4M 
[   ]xorg-server-1.6.2.901.tar.gz2009-07-26 21:41 5.9M 
[   ]xorg-server-1.6.2.tar.bz22009-07-07 23:40 4.4M 
[   ]xorg-server-1.6.2.tar.gz2009-07-07 23:39 5.9M 
[   ]xorg-server-1.6.3.901.tar.bz22009-08-26 05:55 4.5M 
[   ]xorg-server-1.6.3.901.tar.gz2009-08-26 05:54 5.9M 
[   ]xorg-server-1.6.3.tar.bz22009-08-01 06:45 4.4M 
[   ]xorg-server-1.6.3.tar.gz2009-08-01 06:42 5.9M 
[   ]xorg-server-1.6.4.901.tar.bz22009-10-03 07:40 4.5M 
[   ]xorg-server-1.6.4.901.tar.gz2009-10-03 07:44 5.9M 
[   ]xorg-server-1.6.4.tar.bz22009-09-28 02:47 4.5M 
[   ]xorg-server-1.6.4.tar.gz2009-09-28 02:45 5.9M 
[   ]xorg-server-1.6.5.tar.bz22009-10-12 05:27 4.5M 
[   ]xorg-server-1.6.5.tar.gz2009-10-12 05:26 5.9M 
[   ]xorg-server-1.6.99.900.tar.bz22009-09-04 07:02 4.7M 
[   ]xorg-server-1.6.99.900.tar.gz2009-09-04 07:02 6.2M 
[   ]xorg-server-1.6.99.901.tar.bz22009-09-14 10:26 4.7M 
[   ]xorg-server-1.6.99.901.tar.gz2009-09-14 10:23 6.2M 
[   ]xorg-server-1.6.99.902.tar.bz22009-09-22 04:53 4.7M 
[   ]xorg-server-1.6.99.902.tar.gz2009-09-22 04:50 6.2M 
[   ]xorg-server-1.6.99.903.tar.bz22009-09-28 11:25 4.7M 
[   ]xorg-server-1.6.99.903.tar.gz2009-09-28 11:22 6.2M 
[   ]xorg-server-1.7.0.901.tar.bz22009-10-12 04:40 4.7M 
[   ]xorg-server-1.7.0.901.tar.gz2009-10-12 04:39 6.3M 
[   ]xorg-server-1.7.0.902.tar.bz22009-10-19 02:10 4.7M 
[   ]xorg-server-1.7.0.902.tar.gz2009-10-19 02:10 6.3M 
[   ]xorg-server-1.7.0.tar.bz22009-10-02 06:17 4.7M 
[   ]xorg-server-1.7.0.tar.gz2009-10-02 06:16 6.3M 
[   ]xorg-server-1.7.1.901.tar.bz22009-11-06 05:11 4.7M 
[   ]xorg-server-1.7.1.901.tar.gz2009-11-06 05:11 6.3M 
[   ]xorg-server-1.7.1.902.tar.bz22009-11-20 05:52 4.7M 
[   ]xorg-server-1.7.1.902.tar.gz2009-11-20 05:51 6.3M 
[   ]xorg-server-1.7.1.tar.bz22009-10-23 05:40 4.7M 
[   ]xorg-server-1.7.1.tar.gz2009-10-23 05:39 6.3M 
[   ]xorg-server-1.7.2.tar.bz22009-11-27 05:46 4.7M 
[   ]xorg-server-1.7.2.tar.gz2009-11-27 05:45 6.3M 
[   ]xorg-server-1.7.3.901.tar.bz22009-12-11 06:40 4.7M 
[   ]xorg-server-1.7.3.901.tar.gz2009-12-11 06:40 6.3M 
[   ]xorg-server-1.7.3.902.tar.bz22009-12-26 01:08 4.7M 
[   ]xorg-server-1.7.3.902.tar.gz2009-12-26 01:05 6.3M 
[   ]xorg-server-1.7.3.tar.bz22009-12-03 03:38 4.7M 
[   ]xorg-server-1.7.3.tar.gz2009-12-03 03:37 6.3M 
[   ]xorg-server-1.7.4.901.tar.bz22010-01-23 00:16 4.7M 
[   ]xorg-server-1.7.4.901.tar.gz2010-01-23 00:16 6.3M 
[   ]xorg-server-1.7.4.902.tar.bz22010-02-05 08:37 4.7M 
[   ]xorg-server-1.7.4.902.tar.gz2010-02-05 08:32 6.3M 
[   ]xorg-server-1.7.4.tar.bz22010-01-08 01:09 4.7M 
[   ]xorg-server-1.7.4.tar.gz2010-01-08 01:09 6.3M 
[   ]xorg-server-1.7.5.901.tar.bz22010-03-05 00:26 4.7M 
[   ]xorg-server-1.7.5.901.tar.gz2010-03-05 00:23 6.3M 
[   ]xorg-server-1.7.5.902.tar.bz22010-03-12 07:07 4.7M 
[   ]xorg-server-1.7.5.902.tar.gz2010-03-12 07:02 6.3M 
[   ]xorg-server-1.7.5.tar.bz22010-02-16 03:54 4.7M 
[   ]xorg-server-1.7.5.tar.gz2010-02-16 03:50 6.3M 
[   ]xorg-server-1.7.6.901.tar.bz22010-04-12 02:12 4.7M 
[   ]xorg-server-1.7.6.901.tar.gz2010-04-12 02:12 6.3M 
[   ]xorg-server-1.7.6.902.tar.bz22010-04-21 00:25 4.7M 
[   ]xorg-server-1.7.6.902.tar.gz2010-04-21 00:25 6.3M 
[   ]xorg-server-1.7.6.tar.bz22010-03-17 01:56 4.7M 
[   ]xorg-server-1.7.6.tar.gz2010-03-17 01:56 6.3M 
[   ]xorg-server-1.7.7.tar.bz22010-05-04 07:51 4.7M 
[   ]xorg-server-1.7.7.tar.gz2010-05-04 07:48 6.3M 
[   ]xorg-server-1.7.99.1.tar.bz22009-10-21 16:15 4.8M 
[   ]xorg-server-1.7.99.1.tar.gz2009-10-21 16:15 6.5M 
[   ]xorg-server-1.7.99.2.tar.bz22009-12-20 03:50 4.8M 
[   ]xorg-server-1.7.99.2.tar.gz2009-12-20 03:48 6.5M 
[   ]xorg-server-1.7.99.901.tar.bz22010-02-12 22:00 4.9M 
[   ]xorg-server-1.7.99.901.tar.gz2010-02-12 21:59 6.5M 
[   ]xorg-server-1.7.99.902.tar.bz22010-03-22 05:42 4.9M 
[   ]xorg-server-1.7.99.902.tar.gz2010-03-22 05:41 6.5M 
[   ]xorg-server-1.8.0.901.tar.bz22010-04-27 05:08 4.9M 
[   ]xorg-server-1.8.0.901.tar.gz2010-04-27 05:05 6.6M 
[   ]xorg-server-1.8.0.902.tar.bz22010-05-04 00:39 4.9M 
[   ]xorg-server-1.8.0.902.tar.gz2010-05-04 00:36 6.6M 
[   ]xorg-server-1.8.0.tar.bz22010-04-02 07:30 4.9M 
[   ]xorg-server-1.8.0.tar.gz2010-04-02 07:28 6.5M 
[   ]xorg-server-1.8.1.901.tar.bz22010-06-02 00:07 5.0M 
[   ]xorg-server-1.8.1.901.tar.gz2010-06-02 00:07 6.6M 
[   ]xorg-server-1.8.1.902.tar.bz22010-06-21 02:07 5.0M 
[   ]xorg-server-1.8.1.902.tar.gz2010-06-21 02:07 6.6M 
[   ]xorg-server-1.8.1.tar.bz22010-05-11 21:52 5.0M 
[   ]xorg-server-1.8.1.tar.gz2010-05-11 21:52 6.6M 
[   ]xorg-server-1.8.2.tar.bz22010-07-01 05:29 5.0M 
[   ]xorg-server-1.8.2.tar.gz2010-07-01 05:29 6.6M 
[   ]xorg-server-1.8.99.901.tar.bz22010-06-15 21:19 5.1M 
[   ]xorg-server-1.8.99.901.tar.gz2010-06-15 21:18 6.8M 
[   ]xorg-server-1.8.99.902.tar.bz22010-06-22 19:05 5.1M 
[   ]xorg-server-1.8.99.902.tar.gz2010-06-22 19:04 6.8M 
[   ]xorg-server-1.8.99.903.tar.bz22010-06-22 19:33 5.1M 
[   ]xorg-server-1.8.99.903.tar.gz2010-06-22 19:32 6.8M 
[   ]xorg-server-1.8.99.904.tar.bz22010-07-01 13:46 5.1M 
[   ]xorg-server-1.8.99.904.tar.gz2010-07-01 13:39 6.8M 
[   ]xorg-server-1.8.99.905.tar.bz22010-07-14 19:58 5.1M 
[   ]xorg-server-1.8.99.905.tar.gz2010-07-14 19:58 6.8M 
[   ]xorg-server-1.8.99.906.tar.bz22010-08-13 06:22 5.1M 
[   ]xorg-server-1.8.99.906.tar.gz2010-08-13 06:20 6.8M 
[   ]xorg-server-1.9.0.901.tar.bz22010-10-01 21:22 5.0M 
[   ]xorg-server-1.9.0.901.tar.gz2010-10-01 21:21 6.7M 
[   ]xorg-server-1.9.0.902.tar.bz22010-10-15 18:34 5.0M 
[   ]xorg-server-1.9.0.902.tar.gz2010-10-15 18:33 6.7M 
[   ]xorg-server-1.9.0.tar.bz22010-08-21 00:46 5.1M 
[   ]xorg-server-1.9.0.tar.gz2010-08-21 00:45 6.8M 
[   ]xorg-server-1.9.1.tar.bz22010-10-24 03:22 5.0M 
[   ]xorg-server-1.9.1.tar.gz2010-10-24 03:22 6.7M 
[   ]xorg-server-1.9.2.901.tar.bz22010-11-14 00:12 5.0M 
[   ]xorg-server-1.9.2.901.tar.gz2010-11-14 00:12 6.8M 
[   ]xorg-server-1.9.2.902.tar.bz22010-12-04 19:25 5.0M 
[   ]xorg-server-1.9.2.902.tar.gz2010-12-04 19:25 6.8M 
[   ]xorg-server-1.9.2.tar.bz22010-10-31 23:15 5.0M 
[   ]xorg-server-1.9.2.tar.gz2010-10-31 23:15 6.8M 
[   ]xorg-server-1.9.3.901.tar.bz22011-01-08 21:37 5.0M 
[   ]xorg-server-1.9.3.901.tar.gz2011-01-08 21:37 6.8M 
[   ]xorg-server-1.9.3.902.tar.bz22011-01-31 01:16 5.0M 
[   ]xorg-server-1.9.3.902.tar.gz2011-01-31 01:16 6.7M 
[   ]xorg-server-1.9.3.tar.bz22010-12-13 20:05 5.0M 
[   ]xorg-server-1.9.3.tar.gz2010-12-13 20:05 6.8M 
[   ]xorg-server-1.9.4.901.tar.bz22011-03-04 23:21 4.9M 
[   ]xorg-server-1.9.4.901.tar.gz2011-03-04 23:21 6.7M 
[   ]xorg-server-1.9.4.tar.bz22011-02-04 20:03 5.0M 
[   ]xorg-server-1.9.4.tar.gz2011-02-04 20:02 6.7M 
[   ]xorg-server-1.9.5.tar.bz22011-03-17 21:49 4.9M 
[   ]xorg-server-1.9.5.tar.gz2011-03-17 21:49 6.7M 
[   ]xorg-server-1.9.99.901.tar.bz22010-12-07 04:57 5.1M 
[   ]xorg-server-1.9.99.901.tar.gz2010-12-07 04:56 6.8M 
[   ]xorg-server-1.9.99.902.tar.bz22011-02-18 22:50 5.1M 
[   ]xorg-server-1.9.99.902.tar.gz2011-02-18 22:49 6.8M 
[   ]xorg-server-1.9.99.903.tar.bz22011-02-25 06:46 5.0M 
[   ]xorg-server-1.9.99.903.tar.gz2011-02-25 06:44 6.8M 
[   ]xorg-server-1.10.0.901.tar.bz22011-03-29 07:36 5.1M 
[   ]xorg-server-1.10.0.901.tar.gz2011-03-29 07:36 6.9M 
[   ]xorg-server-1.10.0.902.tar.bz22011-04-08 23:49 5.1M 
[   ]xorg-server-1.10.0.902.tar.gz2011-04-08 23:48 6.9M 
[   ]xorg-server-1.10.0.tar.bz22011-02-26 05:49 5.1M 
[   ]xorg-server-1.10.0.tar.gz2011-02-26 05:48 6.9M 
[   ]xorg-server-1.10.1.901.tar.bz22011-05-06 22:59 5.1M 
[   ]xorg-server-1.10.1.901.tar.gz2011-05-06 22:59 6.9M 
[   ]xorg-server-1.10.1.902.tar.bz22011-05-21 06:13 5.1M 
[   ]xorg-server-1.10.1.902.tar.gz2011-05-21 06:13 6.9M 
[   ]xorg-server-1.10.1.tar.bz22011-04-16 01:13 5.1M 
[   ]xorg-server-1.10.1.tar.gz2011-04-16 01:13 6.9M 
[   ]xorg-server-1.10.2.901.tar.bz22011-06-17 17:30 5.1M 
[   ]xorg-server-1.10.2.901.tar.gz2011-06-17 17:30 6.9M 
[   ]xorg-server-1.10.2.902.tar.bz22011-07-02 03:55 5.1M 
[   ]xorg-server-1.10.2.902.tar.gz2011-07-02 03:55 6.9M 
[   ]xorg-server-1.10.2.tar.bz22011-05-29 00:20 5.1M 
[   ]xorg-server-1.10.2.tar.gz2011-05-29 00:20 6.9M 
[   ]xorg-server-1.10.3.901.tar.bz22011-07-29 18:39 5.1M 
[   ]xorg-server-1.10.3.901.tar.gz2011-07-29 18:39 7.0M 
[   ]xorg-server-1.10.3.902.tar.bz22011-08-12 22:30 5.1M 
[   ]xorg-server-1.10.3.902.tar.gz2011-08-12 22:30 7.0M 
[   ]xorg-server-1.10.3.tar.bz22011-07-08 20:04 5.1M 
[   ]xorg-server-1.10.3.tar.gz2011-07-08 20:04 6.9M 
[   ]xorg-server-1.10.4.tar.bz22011-08-19 07:13 5.1M 
[   ]xorg-server-1.10.4.tar.gz2011-08-19 07:12 7.0M 
[   ]xorg-server-1.10.6.tar.bz22012-02-11 01:11 5.2M 
[   ]xorg-server-1.10.6.tar.gz2012-02-11 01:11 7.0M 
[   ]xorg-server-1.10.99.901.tar.bz22011-06-01 18:34 4.7M 
[   ]xorg-server-1.10.99.901.tar.gz2011-06-01 18:33 6.3M 
[   ]xorg-server-1.10.99.902.tar.bz22011-08-04 04:10 4.8M 
[   ]xorg-server-1.10.99.902.tar.gz2011-08-04 04:09 6.4M 
[   ]xorg-server-1.11.0.tar.bz22011-08-27 01:02 4.8M 
[   ]xorg-server-1.11.0.tar.gz2011-08-27 01:01 6.4M 
[   ]xorg-server-1.11.1.901.tar.bz22011-10-14 23:41 4.7M 
[   ]xorg-server-1.11.1.901.tar.gz2011-10-14 23:40 6.3M 
[   ]xorg-server-1.11.1.902.tar.bz22011-10-29 01:44 4.7M 
[   ]xorg-server-1.11.1.902.tar.gz2011-10-29 01:44 6.3M 
[   ]xorg-server-1.11.1.tar.bz22011-09-24 07:19 4.7M 
[   ]xorg-server-1.11.1.tar.gz2011-09-24 07:19 6.3M 
[   ]xorg-server-1.11.2.901.tar.bz22011-11-28 08:17 4.7M 
[   ]xorg-server-1.11.2.901.tar.gz2011-11-28 08:16 6.3M 
[   ]xorg-server-1.11.2.902.tar.bz22011-12-09 21:10 4.7M 
[   ]xorg-server-1.11.2.902.tar.gz2011-12-09 21:10 6.3M 
[   ]xorg-server-1.11.2.tar.bz22011-11-04 17:38 4.7M 
[   ]xorg-server-1.11.2.tar.gz2011-11-04 17:38 6.3M 
[   ]xorg-server-1.11.3.901.tar.bz22012-01-07 07:34 4.7M 
[   ]xorg-server-1.11.3.901.tar.gz2012-01-07 07:34 6.3M 
[   ]xorg-server-1.11.3.902.tar.bz22012-01-21 08:29 4.7M 
[   ]xorg-server-1.11.3.902.tar.gz2012-01-21 08:29 6.3M 
[   ]xorg-server-1.11.3.tar.bz22011-12-17 02:03 4.7M 
[   ]xorg-server-1.11.3.tar.gz2011-12-17 02:03 6.3M 
[   ]xorg-server-1.11.4.tar.bz22012-01-28 05:20 4.7M 
[   ]xorg-server-1.11.4.tar.gz2012-01-28 05:20 6.3M 
[   ]xorg-server-1.11.99.1.tar.bz22011-11-20 23:05 4.8M 
[   ]xorg-server-1.11.99.1.tar.gz2011-11-20 23:04 6.5M 
[   ]xorg-server-1.11.99.2.tar.bz22011-12-18 01:30 4.8M 
[   ]xorg-server-1.11.99.2.tar.gz2011-12-18 01:29 6.5M 
[   ]xorg-server-1.11.99.901.tar.bz22011-12-27 22:19 4.9M 
[   ]xorg-server-1.11.99.901.tar.gz2011-12-27 22:18 6.6M 
[   ]xorg-server-1.11.99.902.tar.bz22012-01-28 06:48 4.9M 
[   ]xorg-server-1.11.99.902.tar.gz2012-01-28 06:47 6.6M 
[   ]xorg-server-1.11.99.903.tar.bz22012-02-11 03:18 5.3M 
[   ]xorg-server-1.11.99.903.tar.gz2012-02-11 03:16 7.2M 
[   ]xorg-server-1.12.0.901.tar.bz22012-03-31 03:15 5.1M 
[   ]xorg-server-1.12.0.901.tar.gz2012-03-31 03:15 7.0M 
[   ]xorg-server-1.12.0.902.tar.bz22012-04-10 02:48 5.1M 
[   ]xorg-server-1.12.0.902.tar.gz2012-04-10 02:48 7.0M 
[   ]xorg-server-1.12.0.tar.bz22012-03-05 05:12 5.3M 
[   ]xorg-server-1.12.0.tar.gz2012-03-05 05:11 7.2M 
[   ]xorg-server-1.12.1.901.tar.bz22012-05-07 07:10 5.2M 
[   ]xorg-server-1.12.1.901.tar.gz2012-05-07 07:10 7.2M 
[   ]xorg-server-1.12.1.902.tar.bz22012-05-20 05:17 5.2M 
[   ]xorg-server-1.12.1.902.tar.gz2012-05-20 05:17 7.2M 
[   ]xorg-server-1.12.1.tar.bz22012-04-13 22:52 5.1M 
[   ]xorg-server-1.12.1.tar.gz2012-04-13 22:52 7.0M 
[   ]xorg-server-1.12.2.901.tar.bz22012-06-15 03:15 5.2M 
[   ]xorg-server-1.12.2.901.tar.gz2012-06-15 03:14 7.2M 
[   ]xorg-server-1.12.2.902.tar.bz22012-07-02 00:34 5.2M 
[   ]xorg-server-1.12.2.902.tar.gz2012-07-02 00:34 7.2M 
[   ]xorg-server-1.12.2.tar.bz22012-05-29 20:11 5.2M 
[   ]xorg-server-1.12.2.tar.gz2012-05-29 20:11 7.2M 
[   ]xorg-server-1.12.3.901.tar.bz22012-08-03 17:26 5.2M 
[   ]xorg-server-1.12.3.901.tar.gz2012-08-03 17:26 7.2M 
[   ]xorg-server-1.12.3.902.tar.bz22012-08-19 16:11 5.2M 
[   ]xorg-server-1.12.3.902.tar.gz2012-08-19 16:11 7.2M 
[   ]xorg-server-1.12.3.tar.bz22012-07-09 01:21 5.2M 
[   ]xorg-server-1.12.3.tar.gz2012-07-09 01:21 7.2M 
[   ]xorg-server-1.12.4.tar.bz22012-08-27 05:15 5.2M 
[   ]xorg-server-1.12.4.tar.gz2012-08-27 05:15 7.2M 
[   ]xorg-server-1.12.99.901.tar.bz22012-07-10 08:35 5.2M 
[   ]xorg-server-1.12.99.901.tar.gz2012-07-10 08:34 7.2M 
[   ]xorg-server-1.12.99.902.tar.bz22012-07-17 22:50 5.2M 
[   ]xorg-server-1.12.99.902.tar.gz2012-07-17 22:49 7.2M 
[   ]xorg-server-1.12.99.903.tar.bz22012-07-26 05:50 5.2M 
[   ]xorg-server-1.12.99.903.tar.gz2012-07-26 05:49 7.2M 
[   ]xorg-server-1.12.99.904.tar.bz22012-08-08 00:57 5.2M 
[   ]xorg-server-1.12.99.904.tar.gz2012-08-08 00:56 7.2M 
[   ]xorg-server-1.12.99.905.tar.bz22012-08-21 21:53 5.2M 
[   ]xorg-server-1.12.99.905.tar.gz2012-08-21 21:52 7.2M 
[   ]xorg-server-1.13.0.901.tar.bz22012-11-23 05:10 5.2M 
[   ]xorg-server-1.13.0.901.tar.gz2012-11-23 05:09 7.2M 
[   ]xorg-server-1.13.0.902.tar.bz22012-12-07 06:09 5.2M 
[   ]xorg-server-1.13.0.902.tar.gz2012-12-07 06:08 7.2M 
[   ]xorg-server-1.13.0.tar.bz22012-09-05 21:48 5.2M 
[   ]xorg-server-1.13.0.tar.gz2012-09-05 21:47 7.2M 
[   ]xorg-server-1.13.1.901.tar.bz22013-01-04 06:51 5.2M 
[   ]xorg-server-1.13.1.901.tar.gz2013-01-04 06:50 7.2M 
[   ]xorg-server-1.13.1.tar.bz22012-12-14 21:47 5.2M 
[   ]xorg-server-1.13.1.tar.bz2.old2012-12-14 04:43 5.2M 
[   ]xorg-server-1.13.1.tar.gz2012-12-14 21:49 7.2M 
[   ]xorg-server-1.13.1.tar.gz.old2012-12-14 04:42 7.2M 
[   ]xorg-server-1.13.2.901.tar.bz22013-02-16 07:14 5.2M 
[   ]xorg-server-1.13.2.901.tar.gz2013-02-16 07:14 7.2M 
[   ]xorg-server-1.13.2.902.tar.bz22013-03-01 07:31 5.2M 
[   ]xorg-server-1.13.2.902.tar.gz2013-03-01 07:31 7.2M 
[   ]xorg-server-1.13.2.tar.bz22013-01-25 06:01 5.2M 
[   ]xorg-server-1.13.2.tar.gz2013-01-25 06:00 7.2M 
[   ]xorg-server-1.13.3.tar.bz22013-03-08 06:19 5.2M 
[   ]xorg-server-1.13.3.tar.gz2013-03-08 06:19 7.2M 
[   ]xorg-server-1.13.4.tar.bz22013-04-17 06:00 5.3M 
[   ]xorg-server-1.13.4.tar.gz2013-04-17 05:59 7.2M 
[   ]xorg-server-1.13.99.901.tar.bz22012-12-19 20:50 5.2M 
[   ]xorg-server-1.13.99.901.tar.gz2012-12-19 20:50 7.2M 
[   ]xorg-server-1.13.99.902.tar.bz22013-02-14 05:44 5.3M 
[   ]xorg-server-1.13.99.902.tar.gz2013-02-14 05:43 7.3M 
[   ]xorg-server-1.14.0.tar.bz22013-03-06 06:35 5.3M 
[   ]xorg-server-1.14.0.tar.gz2013-03-06 06:34 7.3M 
[   ]xorg-server-1.14.1.901.tar.bz22013-05-31 06:09 5.2M 
[   ]xorg-server-1.14.1.901.tar.gz2013-05-31 06:09 7.2M 
[   ]xorg-server-1.14.1.902.tar.bz22013-06-13 22:28 5.2M 
[   ]xorg-server-1.14.1.902.tar.gz2013-06-13 22:28 7.2M 
[   ]xorg-server-1.14.1.tar.bz22013-04-17 07:37 5.3M 
[   ]xorg-server-1.14.1.tar.gz2013-04-17 07:36 7.3M 
[   ]xorg-server-1.14.2-rc1.tar.bz22013-05-31 04:38 5.2M 
[   ]xorg-server-1.14.2-rc1.tar.gz2013-05-31 04:38 7.2M 
[   ]xorg-server-1.14.2.901.tar.bz22013-07-26 05:47 5.2M 
[   ]xorg-server-1.14.2.901.tar.bz2.old2013-07-26 04:27 5.2M 
[   ]xorg-server-1.14.2.901.tar.gz2013-07-26 05:47 7.2M 
[   ]xorg-server-1.14.2.901.tar.gz.old2013-07-26 04:27 7.2M 
[   ]xorg-server-1.14.2.902.tar.bz22013-08-22 23:57 5.2M 
[   ]xorg-server-1.14.2.902.tar.gz2013-08-22 23:57 7.3M 
[   ]xorg-server-1.14.2.tar.bz22013-06-25 15:52 5.2M 
[   ]xorg-server-1.14.2.tar.gz2013-06-25 15:52 7.2M 
[   ]xorg-server-1.14.3-rc1.tar.bz22013-07-26 04:21 5.2M 
[   ]xorg-server-1.14.3-rc1.tar.gz2013-07-26 04:21 7.2M 
[   ]xorg-server-1.14.3.901.tar.bz22013-10-26 19:53 5.3M 
[   ]xorg-server-1.14.3.901.tar.gz2013-10-26 19:53 7.3M 
[   ]xorg-server-1.14.3.tar.bz22013-09-13 03:19 5.2M 
[   ]xorg-server-1.14.3.tar.gz2013-09-13 03:19 7.3M 
[   ]xorg-server-1.14.4.901.tar.bz22013-11-22 05:13 5.2M 
[   ]xorg-server-1.14.4.901.tar.gz2013-11-22 05:13 7.3M 
[   ]xorg-server-1.14.4.tar.bz22013-11-01 05:31 5.3M 
[   ]xorg-server-1.14.4.tar.gz2013-11-01 05:31 7.3M 
[   ]xorg-server-1.14.5.901.tar.bz22014-03-22 05:21 5.3M 
[   ]xorg-server-1.14.5.901.tar.gz2014-03-22 05:21 7.3M 
[   ]xorg-server-1.14.5.tar.bz22013-12-13 03:53 5.2M 
[   ]xorg-server-1.14.5.tar.gz2013-12-13 03:53 7.3M 
[   ]xorg-server-1.14.6.tar.bz22014-04-14 02:49 5.3M 
[   ]xorg-server-1.14.6.tar.gz2014-04-14 02:49 7.3M 
[   ]xorg-server-1.14.7.tar.bz22014-06-06 04:20 5.3M 
[   ]xorg-server-1.14.7.tar.gz2014-06-06 04:19 7.3M 
[   ]xorg-server-1.14.99.1.tar.bz22013-04-24 17:16 5.3M 
[   ]xorg-server-1.14.99.1.tar.gz2013-04-24 17:15 7.3M 
[   ]xorg-server-1.14.99.2.tar.bz22013-10-05 00:01 5.3M 
[   ]xorg-server-1.14.99.2.tar.gz2013-10-05 00:00 7.4M 
[   ]xorg-server-1.14.99.3.tar.bz22013-10-19 00:34 5.3M 
[   ]xorg-server-1.14.99.3.tar.gz2013-10-19 00:33 7.4M 
[   ]xorg-server-1.14.99.901.tar.bz22013-11-01 08:51 5.3M 
[   ]xorg-server-1.14.99.901.tar.gz2013-11-01 08:50 7.3M 
[   ]xorg-server-1.14.99.902.tar.bz22013-11-14 01:32 5.3M 
[   ]xorg-server-1.14.99.902.tar.gz2013-11-14 01:32 7.3M 
[   ]xorg-server-1.14.99.903.tar.bz22013-11-24 06:31 5.3M 
[   ]xorg-server-1.14.99.903.tar.gz2013-11-24 06:30 7.3M 
[   ]xorg-server-1.14.99.904.tar.bz22013-12-11 15:57 5.3M 
[   ]xorg-server-1.14.99.904.tar.gz2013-12-11 15:56 7.3M 
[   ]xorg-server-1.14.99.905.tar.bz22013-12-19 22:35 5.3M 
[   ]xorg-server-1.14.99.905.tar.gz2013-12-19 22:35 7.3M 
[   ]xorg-server-1.15.0.901.tar.bz22014-03-22 06:04 5.2M 
[   ]xorg-server-1.15.0.901.tar.gz2014-03-22 06:04 7.3M 
[   ]xorg-server-1.15.0.tar.bz22013-12-27 18:01 5.3M 
[   ]xorg-server-1.15.0.tar.gz2013-12-27 18:00 7.3M 
[   ]xorg-server-1.15.1.tar.bz22014-04-14 03:16 5.2M 
[   ]xorg-server-1.15.1.tar.gz2014-04-14 03:16 7.3M 
[   ]xorg-server-1.15.2.tar.bz22014-06-27 01:30 5.3M 
[   ]xorg-server-1.15.2.tar.bz2.sig2014-06-27 01:30 72  
[   ]xorg-server-1.15.2.tar.gz2014-06-27 01:29 7.4M 
[   ]xorg-server-1.15.2.tar.gz.sig2014-06-27 01:30 72  
[   ]xorg-server-1.15.99.901.tar.bz22014-02-24 21:52 5.4M 
[   ]xorg-server-1.15.99.901.tar.gz2014-02-24 21:52 7.6M 
[   ]xorg-server-1.15.99.902.tar.bz22014-04-08 21:32 5.5M 
[   ]xorg-server-1.15.99.902.tar.gz2014-04-08 21:31 7.7M 
[   ]xorg-server-1.15.99.903.tar.bz22014-06-05 05:41 5.5M 
[   ]xorg-server-1.15.99.903.tar.gz2014-06-05 05:40 7.7M 
[   ]xorg-server-1.15.99.904.tar.bz22014-07-07 23:35 5.6M 
[   ]xorg-server-1.15.99.904.tar.bz2.sig2014-07-07 23:35 536  
[   ]xorg-server-1.15.99.904.tar.gz2014-07-07 23:35 7.7M 
[   ]xorg-server-1.15.99.904.tar.gz.sig2014-07-07 23:35 536  
[   ]xorg-server-1.16.0.901.tar.bz22014-09-15 21:38 5.5M 
[   ]xorg-server-1.16.0.901.tar.bz2.sig2014-09-15 21:38 543  
[   ]xorg-server-1.16.0.901.tar.gz2014-09-15 21:37 7.7M 
[   ]xorg-server-1.16.0.901.tar.gz.sig2014-09-15 21:38 543  
[   ]xorg-server-1.16.0.tar.bz22014-07-17 07:09 5.6M 
[   ]xorg-server-1.16.0.tar.bz2.sig2014-07-17 07:09 536  
[   ]xorg-server-1.16.0.tar.gz2014-07-17 07:08 7.7M 
[   ]xorg-server-1.16.0.tar.gz.sig2014-07-17 07:09 536  
[   ]xorg-server-1.16.1.901.tar.bz22014-11-02 10:52 5.5M 
[   ]xorg-server-1.16.1.901.tar.bz2.sig2014-11-02 10:52 543  
[   ]xorg-server-1.16.1.901.tar.gz2014-11-02 10:51 7.7M 
[   ]xorg-server-1.16.1.901.tar.gz.sig2014-11-02 10:52 543  
[   ]xorg-server-1.16.1.tar.bz22014-09-21 09:17 5.5M 
[   ]xorg-server-1.16.1.tar.bz2.sig2014-09-21 09:17 543  
[   ]xorg-server-1.16.1.tar.gz2014-09-21 09:16 7.7M 
[   ]xorg-server-1.16.1.tar.gz.sig2014-09-21 09:17 543  
[   ]xorg-server-1.16.2.901.tar.bz22014-12-09 20:12 5.5M 
[   ]xorg-server-1.16.2.901.tar.bz2.sig2014-12-09 20:12 543  
[   ]xorg-server-1.16.2.901.tar.gz2014-12-09 20:11 7.7M 
[   ]xorg-server-1.16.2.901.tar.gz.sig2014-12-09 20:12 543  
[   ]xorg-server-1.16.2.tar.bz22014-11-10 15:53 5.5M 
[   ]xorg-server-1.16.2.tar.bz2.sig2014-11-10 15:53 543  
[   ]xorg-server-1.16.2.tar.gz2014-11-10 15:53 7.7M 
[   ]xorg-server-1.16.2.tar.gz.sig2014-11-10 15:53 543  
[   ]xorg-server-1.16.3.tar.bz22014-12-20 12:19 5.5M 
[   ]xorg-server-1.16.3.tar.bz2.sig2014-12-20 12:19 543  
[   ]xorg-server-1.16.3.tar.gz2014-12-20 12:18 7.7M 
[   ]xorg-server-1.16.3.tar.gz.sig2014-12-20 12:19 543  
[   ]xorg-server-1.16.4.tar.bz22015-02-11 00:15 5.5M 
[   ]xorg-server-1.16.4.tar.bz2.sig2015-02-11 00:15 543  
[   ]xorg-server-1.16.4.tar.gz2015-02-11 00:14 7.7M 
[   ]xorg-server-1.16.4.tar.gz.sig2015-02-11 00:15 543  
[   ]xorg-server-1.16.99.901.tar.bz22014-10-29 04:37 5.6M 
[   ]xorg-server-1.16.99.901.tar.bz2.sig2014-10-29 04:37 536  
[   ]xorg-server-1.16.99.901.tar.gz2014-10-29 04:37 7.8M 
[   ]xorg-server-1.16.99.901.tar.gz.sig2014-10-29 04:37 536  
[   ]xorg-server-1.16.99.902.tar.bz22015-01-23 19:03 5.6M 
[   ]xorg-server-1.16.99.902.tar.bz2.sig2015-01-23 19:03 536  
[   ]xorg-server-1.16.99.902.tar.gz2015-01-23 19:03 7.8M 
[   ]xorg-server-1.16.99.902.tar.gz.sig2015-01-23 19:03 536  
[   ]xorg-server-1.17.0.tar.bz22015-02-04 17:37 5.6M 
[   ]xorg-server-1.17.0.tar.bz2.sig2015-02-04 17:37 536  
[   ]xorg-server-1.17.0.tar.gz2015-02-04 17:37 7.8M 
[   ]xorg-server-1.17.0.tar.gz.sig2015-02-04 17:37 536  
[   ]xorg-server-1.17.1.tar.bz22015-02-10 22:53 5.6M 
[   ]xorg-server-1.17.1.tar.bz2.sig2015-02-10 22:53 536  
[   ]xorg-server-1.17.1.tar.gz2015-02-10 22:52 7.8M 
[   ]xorg-server-1.17.1.tar.gz.sig2015-02-10 22:53 536  
[   ]xorg-server-1.17.2.tar.bz22015-06-16 16:31 5.5M 
[   ]xorg-server-1.17.2.tar.bz2.sig2015-06-16 16:31 72  
[   ]xorg-server-1.17.2.tar.gz2015-06-16 16:30 7.7M 
[   ]xorg-server-1.17.2.tar.gz.sig2015-06-16 16:31 72  
[   ]xorg-server-1.17.3.tar.bz22015-10-26 17:09 5.5M 
[   ]xorg-server-1.17.3.tar.bz2.sig2015-10-26 17:09 72  
[   ]xorg-server-1.17.3.tar.gz2015-10-26 17:09 7.8M 
[   ]xorg-server-1.17.3.tar.gz.sig2015-10-26 17:09 72  
[   ]xorg-server-1.17.4.tar.bz22015-10-28 16:38 5.5M 
[   ]xorg-server-1.17.4.tar.bz2.sig2015-10-28 16:38 72  
[   ]xorg-server-1.17.4.tar.gz2015-10-28 16:38 7.8M 
[   ]xorg-server-1.17.4.tar.gz.sig2015-10-28 16:38 72  
[   ]xorg-server-1.17.99.901.tar.bz22015-09-02 02:34 5.6M 
[   ]xorg-server-1.17.99.901.tar.bz2.sig2015-09-02 02:34 536  
[   ]xorg-server-1.17.99.901.tar.gz2015-09-02 02:34 7.9M 
[   ]xorg-server-1.17.99.901.tar.gz.sig2015-09-02 02:34 536  
[   ]xorg-server-1.17.99.902.tar.bz22015-10-26 18:13 5.5M 
[   ]xorg-server-1.17.99.902.tar.bz2.sig2015-10-26 18:13 72  
[   ]xorg-server-1.17.99.902.tar.gz2015-10-26 18:13 7.8M 
[   ]xorg-server-1.17.99.902.tar.gz.sig2015-10-26 18:13 72  
[   ]xorg-server-1.18.0.tar.bz22015-11-09 21:11 5.5M 
[   ]xorg-server-1.18.0.tar.bz2.sig2015-11-09 21:11 72  
[   ]xorg-server-1.18.0.tar.gz2015-11-09 21:11 7.8M 
[   ]xorg-server-1.18.0.tar.gz.sig2015-11-09 21:11 72  
[   ]xorg-server-1.18.1.tar.bz22016-02-08 23:41 5.6M 
[   ]xorg-server-1.18.1.tar.bz2.sig2016-02-08 23:41 72  
[   ]xorg-server-1.18.1.tar.gz2016-02-08 23:41 7.8M 
[   ]xorg-server-1.18.1.tar.gz.sig2016-02-08 23:41 72  
[   ]xorg-server-1.18.2.tar.bz22016-03-11 21:45 5.6M 
[   ]xorg-server-1.18.2.tar.bz2.sig2016-03-11 21:45 72  
[   ]xorg-server-1.18.2.tar.gz2016-03-11 21:45 7.8M 
[   ]xorg-server-1.18.2.tar.gz.sig2016-03-11 21:45 72  
[   ]xorg-server-1.18.3.tar.bz22016-04-04 19:48 5.6M 
[   ]xorg-server-1.18.3.tar.bz2.sig2016-04-04 19:48 72  
[   ]xorg-server-1.18.3.tar.gz2016-04-04 19:48 7.9M 
[   ]xorg-server-1.18.3.tar.gz.sig2016-04-04 19:48 72  
[   ]xorg-server-1.18.4.tar.bz22016-07-19 17:42 5.7M 
[   ]xorg-server-1.18.4.tar.bz2.sig2016-07-19 17:42 72  
[   ]xorg-server-1.18.4.tar.gz2016-07-19 17:42 8.0M 
[   ]xorg-server-1.18.4.tar.gz.sig2016-07-19 17:42 72  
[   ]xorg-server-1.18.99.2.tar.bz22016-09-16 20:55 5.8M 
[   ]xorg-server-1.18.99.2.tar.bz2.sig2016-09-16 20:55 543  
[   ]xorg-server-1.18.99.2.tar.gz2016-09-16 20:54 8.0M 
[   ]xorg-server-1.18.99.2.tar.gz.sig2016-09-16 20:55 543  
[   ]xorg-server-1.18.99.901.tar.bz22016-09-19 16:10 5.8M 
[   ]xorg-server-1.18.99.901.tar.bz2.sig2016-09-19 16:10 543  
[   ]xorg-server-1.18.99.901.tar.gz2016-09-19 16:10 8.0M 
[   ]xorg-server-1.18.99.901.tar.gz.sig2016-09-19 16:10 543  
[   ]xorg-server-1.18.99.902.tar.bz22016-10-28 16:47 5.8M 
[   ]xorg-server-1.18.99.902.tar.bz2.sig2016-10-28 16:47 543  
[   ]xorg-server-1.18.99.902.tar.gz2016-10-28 16:47 8.1M 
[   ]xorg-server-1.18.99.902.tar.gz.sig2016-10-28 16:47 543  
[   ]xorg-server-1.19.0.tar.bz22016-11-15 17:08 5.8M 
[   ]xorg-server-1.19.0.tar.bz2.sig2016-11-15 17:08 543  
[   ]xorg-server-1.19.0.tar.gz2016-11-15 17:07 8.1M 
[   ]xorg-server-1.19.0.tar.gz.sig2016-11-15 17:08 543  
[   ]xorg-server-1.19.1.tar.bz22017-01-11 21:25 5.8M 
[   ]xorg-server-1.19.1.tar.bz2.sig2017-01-11 21:25 72  
[   ]xorg-server-1.19.1.tar.gz2017-01-11 21:25 8.1M 
[   ]xorg-server-1.19.1.tar.gz.sig2017-01-11 21:25 72  
[   ]xorg-server-1.19.2.tar.bz22017-03-02 23:05 5.7M 
[   ]xorg-server-1.19.2.tar.bz2.sig2017-03-02 23:05 72  
[   ]xorg-server-1.19.2.tar.gz2017-03-02 23:05 7.9M 
[   ]xorg-server-1.19.2.tar.gz.sig2017-03-02 23:05 72  
[   ]xorg-server-1.19.3.tar.bz22017-03-15 18:12 5.8M 
[   ]xorg-server-1.19.3.tar.bz2.sig2017-03-15 18:12 72  
[   ]xorg-server-1.19.3.tar.gz2017-03-15 18:12 8.1M 
[   ]xorg-server-1.19.3.tar.gz.sig2017-03-15 18:12 72  
[   ]xorg-server-1.19.4.tar.bz22017-10-04 22:00 5.7M 
[   ]xorg-server-1.19.4.tar.bz2.sig2017-10-04 22:00 438  
[   ]xorg-server-1.19.4.tar.gz2017-10-04 22:00 8.0M 
[   ]xorg-server-1.19.4.tar.gz.sig2017-10-04 22:00 438  
[   ]xorg-server-1.19.5.tar.bz22017-10-12 17:31 5.7M 
[   ]xorg-server-1.19.5.tar.bz2.sig2017-10-12 17:31 438  
[   ]xorg-server-1.19.5.tar.gz2017-10-12 17:31 8.0M 
[   ]xorg-server-1.19.5.tar.gz.sig2017-10-12 17:31 438  
[   ]xorg-server-1.19.6.tar.bz22017-12-20 20:39 5.7M 
[   ]xorg-server-1.19.6.tar.bz2.sig2017-12-20 20:39 438  
[   ]xorg-server-1.19.6.tar.gz2017-12-20 20:39 8.0M 
[   ]xorg-server-1.19.6.tar.gz.sig2017-12-20 20:39 438  
[   ]xorg-server-1.19.7.tar.bz22019-03-02 23:03 5.8M 
[   ]xorg-server-1.19.7.tar.bz2.sig2019-03-02 23:03 287  
[   ]xorg-server-1.19.7.tar.gz2019-03-02 23:02 8.1M 
[   ]xorg-server-1.19.7.tar.gz.sig2019-03-02 23:03 287  
[   ]xorg-server-1.19.99.901.tar.bz22018-02-28 18:28 5.8M 
[   ]xorg-server-1.19.99.901.tar.bz2.sig2018-02-28 18:28 95  
[   ]xorg-server-1.19.99.901.tar.gz2018-02-28 18:28 8.1M 
[   ]xorg-server-1.19.99.901.tar.gz.sig2018-02-28 18:28 95  
[   ]xorg-server-1.19.99.902.tar.bz22018-03-28 20:39 5.8M 
[   ]xorg-server-1.19.99.902.tar.bz2.sig2018-03-28 20:39 438  
[   ]xorg-server-1.19.99.902.tar.gz2018-03-28 20:39 8.1M 
[   ]xorg-server-1.19.99.902.tar.gz.sig2018-03-28 20:39 438  
[   ]xorg-server-1.19.99.903.tar.bz22018-04-02 19:56 5.8M 
[   ]xorg-server-1.19.99.903.tar.bz2.sig2018-04-02 19:56 438  
[   ]xorg-server-1.19.99.903.tar.gz2018-04-02 19:56 8.1M 
[   ]xorg-server-1.19.99.903.tar.gz.sig2018-04-02 19:56 438  
[   ]xorg-server-1.19.99.904.tar.bz22018-04-10 19:50 5.8M 
[   ]xorg-server-1.19.99.904.tar.bz2.sig2018-04-10 19:50 438  
[   ]xorg-server-1.19.99.904.tar.gz2018-04-10 19:50 8.1M 
[   ]xorg-server-1.19.99.904.tar.gz.sig2018-04-10 19:50 438  
[   ]xorg-server-1.19.99.905.tar.bz22018-04-24 21:12 5.8M 
[   ]xorg-server-1.19.99.905.tar.bz2.sig2018-04-24 21:12 438  
[   ]xorg-server-1.19.99.905.tar.gz2018-04-24 21:12 8.1M 
[   ]xorg-server-1.19.99.905.tar.gz.sig2018-04-24 21:12 438  
[   ]xorg-server-1.20.0.tar.bz22018-05-10 16:38 5.8M 
[   ]xorg-server-1.20.0.tar.bz2.sig2018-05-10 16:38 438  
[   ]xorg-server-1.20.0.tar.gz2018-05-10 16:38 8.1M 
[   ]xorg-server-1.20.0.tar.gz.sig2018-05-10 16:38 438  
[   ]xorg-server-1.20.1.tar.bz22018-08-07 16:37 5.8M 
[   ]xorg-server-1.20.1.tar.bz2.sig2018-08-07 16:37 438  
[   ]xorg-server-1.20.1.tar.gz2018-08-07 16:37 8.1M 
[   ]xorg-server-1.20.1.tar.gz.sig2018-08-07 16:37 438  
[   ]xorg-server-1.20.2.tar.bz22018-10-15 16:03 5.9M 
[   ]xorg-server-1.20.2.tar.bz2.sig2018-10-15 16:03 438  
[   ]xorg-server-1.20.2.tar.gz2018-10-15 16:03 8.2M 
[   ]xorg-server-1.20.2.tar.gz.sig2018-10-15 16:03 438  
[   ]xorg-server-1.20.3.tar.bz22018-10-25 14:17 5.9M 
[   ]xorg-server-1.20.3.tar.bz2.sig2018-10-25 14:17 438  
[   ]xorg-server-1.20.3.tar.gz2018-10-25 14:17 8.2M 
[   ]xorg-server-1.20.3.tar.gz.sig2018-10-25 14:17 438  
[   ]xorg-server-1.20.4.tar.bz22019-02-26 19:33 5.8M 
[   ]xorg-server-1.20.4.tar.bz2.sig2019-02-26 19:33 438  
[   ]xorg-server-1.20.4.tar.gz2019-02-26 19:33 8.2M 
[   ]xorg-server-1.20.4.tar.gz.sig2019-02-26 19:33 438  
[   ]xorg-server-1.20.5.tar.bz22019-05-30 18:32 5.8M 
[   ]xorg-server-1.20.5.tar.bz2.sig2019-05-30 18:32 438  
[   ]xorg-server-1.20.5.tar.gz2019-05-30 18:32 8.2M 
[   ]xorg-server-1.20.5.tar.gz.sig2019-05-30 18:32 438  
[   ]xorg-server-1.20.6.tar.bz22019-11-22 23:50 6.0M 
[   ]xorg-server-1.20.6.tar.bz2.sig2019-11-22 23:50 215  
[   ]xorg-server-1.20.6.tar.gz2019-11-22 23:50 8.3M 
[   ]xorg-server-1.20.6.tar.gz.sig2019-11-22 23:50 215  

+
Apache/2.4.38 (Debian) Server at www.x.org Port 443
+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch-testdata/software/pulseaudio/releases/index.html b/external/poky/bitbake/lib/bb/tests/fetch-testdata/software/pulseaudio/releases/index.html new file mode 100644 index 00000000..bf2d23cf --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/fetch-testdata/software/pulseaudio/releases/index.html @@ -0,0 +1,383 @@ + + + + Index of /software/pulseaudio/releases + + +

Index of /software/pulseaudio/releases

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[DIR]bad/2014-01-26 17:50 -  
[   ]polypaudio-0.1.tar.gz2008-03-28 21:16 387K 
[   ]polypaudio-0.1.tar.gz.md52011-05-29 11:28 56  
[   ]polypaudio-0.1.tar.gz.sha12011-05-29 11:28 64  
[   ]polypaudio-0.2.tar.gz2008-03-28 21:16 460K 
[   ]polypaudio-0.2.tar.gz.md52011-05-29 11:28 56  
[   ]polypaudio-0.2.tar.gz.sha12011-05-29 11:28 64  
[   ]polypaudio-0.3.tar.gz2008-03-28 21:16 470K 
[   ]polypaudio-0.3.tar.gz.md52011-05-29 11:28 56  
[   ]polypaudio-0.3.tar.gz.sha12011-05-29 11:28 64  
[   ]polypaudio-0.4.tar.gz2008-03-28 21:16 486K 
[   ]polypaudio-0.4.tar.gz.md52011-05-29 11:28 56  
[   ]polypaudio-0.4.tar.gz.sha12011-05-29 11:28 64  
[   ]polypaudio-0.5.1.tar.gz2008-03-28 21:16 524K 
[   ]polypaudio-0.5.1.tar.gz.md52011-05-29 11:28 58  
[   ]polypaudio-0.5.1.tar.gz.sha12011-05-29 11:28 66  
[   ]polypaudio-0.5.tar.gz2008-03-28 21:16 518K 
[   ]polypaudio-0.5.tar.gz.md52011-05-29 11:28 56  
[   ]polypaudio-0.5.tar.gz.sha12011-05-29 11:28 64  
[   ]polypaudio-0.6.tar.gz2008-03-28 21:16 448K 
[   ]polypaudio-0.6.tar.gz.md52011-05-29 11:28 56  
[   ]polypaudio-0.6.tar.gz.sha12011-05-29 11:28 64  
[   ]polypaudio-0.7.tar.gz2008-03-28 21:16 924K 
[   ]polypaudio-0.7.tar.gz.md52011-05-29 11:28 56  
[   ]polypaudio-0.7.tar.gz.sha12011-05-29 11:28 64  
[   ]polypaudio-0.8.1.tar.gz2008-03-28 21:16 1.1M 
[   ]polypaudio-0.8.1.tar.gz.md52011-05-29 11:28 58  
[   ]polypaudio-0.8.1.tar.gz.sha12011-05-29 11:28 66  
[   ]polypaudio-0.8.tar.gz2008-03-28 21:16 1.1M 
[   ]polypaudio-0.8.tar.gz.md52011-05-29 11:28 56  
[   ]polypaudio-0.8.tar.gz.sha12011-05-29 11:28 64  
[   ]polypaudio-0.9.0.tar.gz2008-03-28 21:16 1.1M 
[   ]polypaudio-0.9.0.tar.gz.md52011-05-29 11:28 58  
[   ]polypaudio-0.9.0.tar.gz.sha12011-05-29 11:28 66  
[   ]polypaudio-0.9.1.tar.gz2008-03-28 21:16 1.1M 
[   ]polypaudio-0.9.1.tar.gz.md52011-05-29 11:28 58  
[   ]polypaudio-0.9.1.tar.gz.sha12011-05-29 11:28 66  
[   ]pulseaudio-0.9.2.tar.gz2008-03-28 21:16 1.0M 
[   ]pulseaudio-0.9.2.tar.gz.md52011-05-29 11:28 58  
[   ]pulseaudio-0.9.2.tar.gz.sha12011-05-29 11:28 66  
[   ]pulseaudio-0.9.3.tar.gz2008-03-28 21:16 1.1M 
[   ]pulseaudio-0.9.3.tar.gz.md52011-05-29 11:28 58  
[   ]pulseaudio-0.9.3.tar.gz.sha12011-05-29 11:28 66  
[   ]pulseaudio-0.9.4.tar.gz2008-03-28 21:16 1.1M 
[   ]pulseaudio-0.9.4.tar.gz.md52011-05-29 11:28 58  
[   ]pulseaudio-0.9.4.tar.gz.sha12011-05-29 11:28 66  
[   ]pulseaudio-0.9.5.tar.gz2008-03-28 21:16 1.1M 
[   ]pulseaudio-0.9.5.tar.gz.md52011-05-29 11:28 58  
[   ]pulseaudio-0.9.5.tar.gz.sha12011-05-29 11:28 66  
[   ]pulseaudio-0.9.6.tar.gz2008-03-28 21:16 1.1M 
[   ]pulseaudio-0.9.6.tar.gz.md52011-05-29 11:28 58  
[   ]pulseaudio-0.9.6.tar.gz.sha12011-05-29 11:28 66  
[   ]pulseaudio-0.9.7.tar.gz2008-03-28 21:16 1.0M 
[   ]pulseaudio-0.9.7.tar.gz.md52011-05-29 11:28 58  
[   ]pulseaudio-0.9.7.tar.gz.sha12011-05-29 11:28 66  
[   ]pulseaudio-0.9.8.tar.gz2008-03-28 21:16 1.0M 
[   ]pulseaudio-0.9.8.tar.gz.md52011-05-29 11:28 58  
[   ]pulseaudio-0.9.8.tar.gz.sha12011-05-29 11:28 66  
[   ]pulseaudio-0.9.9.tar.gz2008-03-28 21:16 1.0M 
[   ]pulseaudio-0.9.9.tar.gz.md52011-05-29 11:28 58  
[   ]pulseaudio-0.9.9.tar.gz.sha12011-05-29 11:28 66  
[   ]pulseaudio-0.9.10.tar.gz2008-03-30 16:30 1.0M 
[   ]pulseaudio-0.9.10.tar.gz.md52011-05-29 11:28 59  
[   ]pulseaudio-0.9.10.tar.gz.sha12011-05-29 11:28 67  
[   ]pulseaudio-0.9.11.tar.gz2008-07-24 12:41 1.1M 
[   ]pulseaudio-0.9.11.tar.gz.md52011-05-29 11:28 59  
[   ]pulseaudio-0.9.11.tar.gz.sha12011-05-29 11:28 67  
[   ]pulseaudio-0.9.12.tar.gz2008-09-09 00:17 1.2M 
[   ]pulseaudio-0.9.12.tar.gz.md52011-05-29 11:28 59  
[   ]pulseaudio-0.9.12.tar.gz.sha12011-05-29 11:28 67  
[   ]pulseaudio-0.9.13.tar.gz2008-10-06 01:43 1.2M 
[   ]pulseaudio-0.9.13.tar.gz.md52011-05-29 11:28 59  
[   ]pulseaudio-0.9.13.tar.gz.sha12011-05-29 11:28 67  
[   ]pulseaudio-0.9.14.tar.gz2009-01-12 23:09 1.2M 
[   ]pulseaudio-0.9.14.tar.gz.md52011-05-29 11:28 59  
[   ]pulseaudio-0.9.14.tar.gz.sha12011-05-29 11:28 67  
[   ]pulseaudio-0.9.15.tar.gz2009-04-13 23:24 1.6M 
[   ]pulseaudio-0.9.15.tar.gz.md52011-05-29 11:28 59  
[   ]pulseaudio-0.9.15.tar.gz.sha12011-05-29 11:28 67  
[   ]pulseaudio-0.9.16-test1.tar.gz2009-06-23 17:16 1.8M 
[   ]pulseaudio-0.9.16-test1.tar.gz.md52011-05-29 11:28 65  
[   ]pulseaudio-0.9.16-test1.tar.gz.sha12011-05-29 11:28 73  
[   ]pulseaudio-0.9.16.tar.gz2009-09-10 00:49 1.9M 
[   ]pulseaudio-0.9.16.tar.gz.md52011-05-29 11:28 59  
[   ]pulseaudio-0.9.16.tar.gz.sha12011-05-29 11:28 67  
[   ]pulseaudio-0.9.17.tar.gz2009-09-11 01:32 1.9M 
[   ]pulseaudio-0.9.17.tar.gz.md52011-05-29 11:28 59  
[   ]pulseaudio-0.9.17.tar.gz.sha12011-05-29 11:28 67  
[   ]pulseaudio-0.9.18.tar.gz2009-09-19 00:43 1.9M 
[   ]pulseaudio-0.9.18.tar.gz.md52011-05-29 11:28 59  
[   ]pulseaudio-0.9.18.tar.gz.sha12011-05-29 11:28 67  
[   ]pulseaudio-0.9.19.tar.gz2009-09-30 01:30 1.9M 
[   ]pulseaudio-0.9.19.tar.gz.md52011-05-29 11:28 59  
[   ]pulseaudio-0.9.19.tar.gz.sha12011-05-29 11:28 67  
[   ]pulseaudio-0.9.20.tar.gz2009-11-11 05:10 2.0M 
[   ]pulseaudio-0.9.20.tar.gz.md52011-05-29 11:28 59  
[   ]pulseaudio-0.9.20.tar.gz.sha12011-05-29 11:28 67  
[   ]pulseaudio-0.9.21.tar.gz2009-11-23 04:23 2.0M 
[   ]pulseaudio-0.9.21.tar.gz.md52011-05-29 11:28 59  
[   ]pulseaudio-0.9.21.tar.gz.sha12011-05-29 11:28 67  
[   ]pulseaudio-0.9.22.tar.gz2010-11-26 01:12 2.0M 
[   ]pulseaudio-0.9.22.tar.gz.md52011-05-29 11:28 59  
[   ]pulseaudio-0.9.22.tar.gz.sha12011-05-29 11:28 67  
[   ]pulseaudio-0.9.23.tar.gz2011-06-23 21:13 2.0M 
[   ]pulseaudio-0.9.23.tar.gz.md52011-06-23 21:13 59  
[   ]pulseaudio-0.9.23.tar.gz.sha12011-06-23 21:13 67  
[   ]pulseaudio-0.99.1.tar.gz2011-08-02 21:59 2.2M 
[   ]pulseaudio-0.99.1.tar.gz.md52011-08-02 21:59 59  
[   ]pulseaudio-0.99.1.tar.gz.sha12011-08-02 21:59 67  
[   ]pulseaudio-0.99.2.tar.gz2011-08-16 10:19 2.2M 
[   ]pulseaudio-0.99.2.tar.gz.md52011-08-16 10:19 59  
[   ]pulseaudio-0.99.2.tar.gz.sha12011-08-16 10:19 67  
[   ]pulseaudio-0.99.3.tar.gz2011-08-29 17:11 2.2M 
[   ]pulseaudio-0.99.3.tar.gz.md52011-08-29 17:11 59  
[   ]pulseaudio-0.99.3.tar.gz.sha12011-08-29 17:11 67  
[   ]pulseaudio-0.99.4.tar.gz2011-09-15 11:04 2.2M 
[   ]pulseaudio-0.99.4.tar.gz.md52011-09-15 11:04 59  
[   ]pulseaudio-0.99.4.tar.gz.sha12011-09-15 11:04 67  
[   ]pulseaudio-1.0.tar.gz2011-09-27 08:54 2.1M 
[   ]pulseaudio-1.0.tar.gz.md52011-09-27 08:54 56  
[   ]pulseaudio-1.0.tar.gz.sha12011-09-27 08:54 64  
[   ]pulseaudio-1.0.tar.xz2011-09-27 08:54 1.2M 
[   ]pulseaudio-1.0.tar.xz.md52011-09-27 08:54 56  
[   ]pulseaudio-1.0.tar.xz.sha12011-09-27 08:54 64  
[   ]pulseaudio-1.1.tar.gz2011-10-20 13:25 2.1M 
[   ]pulseaudio-1.1.tar.gz.md52011-10-20 13:25 56  
[   ]pulseaudio-1.1.tar.gz.sha12011-10-20 13:25 64  
[   ]pulseaudio-1.1.tar.xz2011-10-20 13:25 1.2M 
[   ]pulseaudio-1.1.tar.xz.md52011-10-20 13:25 56  
[   ]pulseaudio-1.1.tar.xz.sha12011-10-20 13:25 64  
[   ]pulseaudio-1.99.1.tar.gz2012-03-15 12:50 2.2M 
[   ]pulseaudio-1.99.1.tar.gz.md52012-03-15 12:50 59  
[   ]pulseaudio-1.99.1.tar.gz.sha12012-03-15 12:50 67  
[   ]pulseaudio-1.99.1.tar.xz2012-03-15 12:50 1.3M 
[   ]pulseaudio-1.99.1.tar.xz.md52012-03-15 12:50 59  
[   ]pulseaudio-1.99.1.tar.xz.sha12012-03-15 12:50 67  
[   ]pulseaudio-2.0.tar.gz2012-05-11 13:48 2.2M 
[   ]pulseaudio-2.0.tar.gz.md52012-05-11 13:48 56  
[   ]pulseaudio-2.0.tar.gz.sha12012-05-11 13:48 64  
[   ]pulseaudio-2.0.tar.xz2012-05-11 13:48 1.3M 
[   ]pulseaudio-2.0.tar.xz.md52012-05-11 13:48 56  
[   ]pulseaudio-2.0.tar.xz.sha12012-05-11 13:48 64  
[   ]pulseaudio-2.1.tar.gz2012-07-19 12:09 2.2M 
[   ]pulseaudio-2.1.tar.gz.md52012-07-19 12:09 56  
[   ]pulseaudio-2.1.tar.gz.sha12012-07-19 12:09 64  
[   ]pulseaudio-2.1.tar.xz2012-07-19 12:09 1.3M 
[   ]pulseaudio-2.1.tar.xz.md52012-07-19 12:09 56  
[   ]pulseaudio-2.1.tar.xz.sha12012-07-19 12:09 64  
[   ]pulseaudio-2.99.1.tar.gz2012-11-03 11:44 2.3M 
[   ]pulseaudio-2.99.1.tar.gz.md52012-11-03 11:45 59  
[   ]pulseaudio-2.99.1.tar.gz.sha12012-11-03 11:45 67  
[   ]pulseaudio-2.99.1.tar.xz2012-11-03 11:44 1.3M 
[   ]pulseaudio-2.99.1.tar.xz.md52012-11-03 11:46 59  
[   ]pulseaudio-2.99.1.tar.xz.sha12012-11-03 11:46 67  
[   ]pulseaudio-2.99.2.tar.gz2012-11-17 08:21 2.3M 
[   ]pulseaudio-2.99.2.tar.gz.md52012-11-17 08:22 59  
[   ]pulseaudio-2.99.2.tar.gz.sha12012-11-17 08:22 67  
[   ]pulseaudio-2.99.2.tar.xz2012-11-17 08:21 1.3M 
[   ]pulseaudio-2.99.2.tar.xz.md52012-11-17 08:22 59  
[   ]pulseaudio-2.99.2.tar.xz.sha12012-11-17 08:22 67  
[   ]pulseaudio-2.99.3.tar.gz2012-12-07 04:07 2.3M 
[   ]pulseaudio-2.99.3.tar.gz.md52012-12-07 04:07 59  
[   ]pulseaudio-2.99.3.tar.gz.sha12012-12-07 04:07 67  
[   ]pulseaudio-2.99.3.tar.xz2012-12-07 04:07 1.3M 
[   ]pulseaudio-2.99.3.tar.xz.md52012-12-07 04:07 59  
[   ]pulseaudio-2.99.3.tar.xz.sha12012-12-07 04:07 67  
[   ]pulseaudio-3.0.tar.gz2012-12-18 07:22 2.3M 
[   ]pulseaudio-3.0.tar.gz.md52012-12-18 07:22 56  
[   ]pulseaudio-3.0.tar.gz.sha12012-12-18 07:22 64  
[   ]pulseaudio-3.0.tar.xz2012-12-18 07:22 1.3M 
[   ]pulseaudio-3.0.tar.xz.md52012-12-18 07:22 56  
[   ]pulseaudio-3.0.tar.xz.sha12012-12-18 07:22 64  
[   ]pulseaudio-3.99.1.tar.gz2013-04-16 04:10 2.3M 
[   ]pulseaudio-3.99.1.tar.gz.md52013-04-16 04:10 59  
[   ]pulseaudio-3.99.1.tar.gz.sha12013-04-16 04:10 67  
[   ]pulseaudio-3.99.1.tar.xz2013-04-16 04:10 1.3M 
[   ]pulseaudio-3.99.1.tar.xz.md52013-04-16 04:10 59  
[   ]pulseaudio-3.99.1.tar.xz.sha12013-04-16 04:10 67  
[   ]pulseaudio-3.99.2.tar.gz2013-05-23 03:26 2.3M 
[   ]pulseaudio-3.99.2.tar.gz.md52013-05-23 03:26 59  
[   ]pulseaudio-3.99.2.tar.gz.sha12013-05-23 03:26 67  
[   ]pulseaudio-3.99.2.tar.xz2013-05-23 03:26 1.3M 
[   ]pulseaudio-3.99.2.tar.xz.md52013-05-23 03:26 59  
[   ]pulseaudio-3.99.2.tar.xz.sha12013-05-23 03:26 67  
[   ]pulseaudio-4.0.tar.gz2013-06-03 18:52 2.3M 
[   ]pulseaudio-4.0.tar.gz.md52013-06-03 18:52 56  
[   ]pulseaudio-4.0.tar.gz.sha12013-06-03 18:52 64  
[   ]pulseaudio-4.0.tar.xz2013-06-03 18:52 1.3M 
[   ]pulseaudio-4.0.tar.xz.md52013-06-03 18:52 56  
[   ]pulseaudio-4.0.tar.xz.sha12013-06-03 18:52 64  
[   ]pulseaudio-4.99.2.tar.gz2014-01-23 19:10 2.4M 
[   ]pulseaudio-4.99.2.tar.gz.md52014-01-23 19:10 59  
[   ]pulseaudio-4.99.2.tar.gz.sha12014-01-23 19:10 67  
[   ]pulseaudio-4.99.2.tar.xz2014-01-23 19:10 1.4M 
[   ]pulseaudio-4.99.2.tar.xz.md52014-01-23 19:10 59  
[   ]pulseaudio-4.99.2.tar.xz.sha12014-01-23 19:10 67  
[   ]pulseaudio-4.99.3.tar.gz2014-01-29 20:16 2.4M 
[   ]pulseaudio-4.99.3.tar.gz.md52014-01-29 20:16 59  
[   ]pulseaudio-4.99.3.tar.gz.sha12014-01-29 20:16 67  
[   ]pulseaudio-4.99.3.tar.xz2014-01-29 20:16 1.4M 
[   ]pulseaudio-4.99.3.tar.xz.md52014-01-29 20:16 59  
[   ]pulseaudio-4.99.3.tar.xz.sha12014-01-29 20:16 67  
[   ]pulseaudio-4.99.4.tar.gz2014-02-15 06:04 2.5M 
[   ]pulseaudio-4.99.4.tar.gz.md52014-02-15 06:04 59  
[   ]pulseaudio-4.99.4.tar.gz.sha12014-02-15 06:04 67  
[   ]pulseaudio-4.99.4.tar.xz2014-02-15 06:04 1.4M 
[   ]pulseaudio-4.99.4.tar.xz.md52014-02-15 06:04 59  
[   ]pulseaudio-4.99.4.tar.xz.sha12014-02-15 06:04 67  
[   ]pulseaudio-5.0.tar.gz2014-03-03 15:00 2.4M 
[   ]pulseaudio-5.0.tar.gz.md52014-03-03 15:00 56  
[   ]pulseaudio-5.0.tar.gz.sha12014-03-03 15:00 64  
[   ]pulseaudio-5.0.tar.xz2014-03-03 15:00 1.4M 
[   ]pulseaudio-5.0.tar.xz.md52014-03-03 15:00 56  
[   ]pulseaudio-5.0.tar.xz.sha12014-03-03 15:00 64  
[   ]pulseaudio-5.99.1.tar.gz2014-11-21 14:26 2.5M 
[   ]pulseaudio-5.99.1.tar.gz.md52014-11-21 14:26 59  
[   ]pulseaudio-5.99.1.tar.gz.sha12014-11-21 14:26 67  
[   ]pulseaudio-5.99.1.tar.xz2014-11-21 14:27 1.4M 
[   ]pulseaudio-5.99.1.tar.xz.md52014-11-21 14:27 59  
[   ]pulseaudio-5.99.1.tar.xz.sha12014-11-21 14:27 67  
[   ]pulseaudio-5.99.2.tar.gz2014-12-19 13:08 2.5M 
[   ]pulseaudio-5.99.2.tar.gz.md52014-12-19 13:08 59  
[   ]pulseaudio-5.99.2.tar.gz.sha12014-12-19 13:08 67  
[   ]pulseaudio-5.99.2.tar.xz2014-12-19 13:08 1.4M 
[   ]pulseaudio-5.99.2.tar.xz.md52014-12-19 13:08 59  
[   ]pulseaudio-5.99.2.tar.xz.sha12014-12-19 13:08 67  
[   ]pulseaudio-5.99.3.tar.gz2015-01-21 14:45 2.5M 
[   ]pulseaudio-5.99.3.tar.gz.md52015-01-21 14:45 59  
[   ]pulseaudio-5.99.3.tar.gz.sha12015-01-21 14:45 67  
[   ]pulseaudio-5.99.3.tar.xz2015-01-21 14:45 1.4M 
[   ]pulseaudio-5.99.3.tar.xz.md52015-01-21 14:45 59  
[   ]pulseaudio-5.99.3.tar.xz.sha12015-01-21 14:45 67  
[   ]pulseaudio-6.0.tar.gz2015-02-12 19:02 2.5M 
[   ]pulseaudio-6.0.tar.gz.md52015-02-12 19:02 56  
[   ]pulseaudio-6.0.tar.gz.sha12015-02-12 19:02 64  
[   ]pulseaudio-6.0.tar.xz2015-02-12 19:02 1.4M 
[   ]pulseaudio-6.0.tar.xz.md52015-02-12 19:02 56  
[   ]pulseaudio-6.0.tar.xz.sha12015-02-12 19:02 64  
[   ]pulseaudio-6.99.1.tar.gz2015-08-27 17:56 2.6M 
[   ]pulseaudio-6.99.1.tar.gz.md52015-08-27 17:56 59  
[   ]pulseaudio-6.99.1.tar.gz.sha12015-08-27 17:56 67  
[   ]pulseaudio-6.99.1.tar.xz2015-08-27 17:56 1.4M 
[   ]pulseaudio-6.99.1.tar.xz.md52015-08-27 17:56 59  
[   ]pulseaudio-6.99.1.tar.xz.sha12015-08-27 17:56 67  
[   ]pulseaudio-6.99.2.tar.gz2015-09-12 13:56 2.6M 
[   ]pulseaudio-6.99.2.tar.gz.md52015-09-12 13:56 59  
[   ]pulseaudio-6.99.2.tar.gz.sha12015-09-12 13:56 67  
[   ]pulseaudio-6.99.2.tar.xz2015-09-12 13:56 1.4M 
[   ]pulseaudio-6.99.2.tar.xz.md52015-09-12 13:56 59  
[   ]pulseaudio-6.99.2.tar.xz.sha12015-09-12 13:56 67  
[   ]pulseaudio-7.0.tar.gz2015-09-24 03:31 2.6M 
[   ]pulseaudio-7.0.tar.gz.md5sum2015-09-24 03:31 56  
[   ]pulseaudio-7.0.tar.gz.sha1sum2015-09-24 03:31 64  
[   ]pulseaudio-7.0.tar.xz2015-09-24 03:31 1.4M 
[   ]pulseaudio-7.0.tar.xz.md52015-09-24 03:31 56  
[   ]pulseaudio-7.0.tar.xz.md5sum2015-09-24 03:31 56  
[   ]pulseaudio-7.0.tar.xz.sha12015-09-24 03:31 64  
[   ]pulseaudio-7.0.tar.xz.sha1sum2015-09-24 03:31 64  
[   ]pulseaudio-7.1.tar.gz2015-10-30 12:51 2.6M 
[   ]pulseaudio-7.1.tar.gz.md52015-10-30 12:51 56  
[   ]pulseaudio-7.1.tar.gz.sha12015-10-30 12:51 64  
[   ]pulseaudio-7.1.tar.xz2015-10-30 12:51 1.4M 
[   ]pulseaudio-7.1.tar.xz.md52015-10-30 12:51 56  
[   ]pulseaudio-7.1.tar.xz.sha12015-10-30 12:51 64  
[   ]pulseaudio-7.99.1.tar.gz2015-12-28 12:38 2.6M 
[   ]pulseaudio-7.99.1.tar.gz.md52015-12-28 12:38 59  
[   ]pulseaudio-7.99.1.tar.gz.sha12015-12-28 12:38 67  
[   ]pulseaudio-7.99.1.tar.xz2015-12-28 12:39 1.4M 
[   ]pulseaudio-7.99.1.tar.xz.md52015-12-28 12:39 59  
[   ]pulseaudio-7.99.1.tar.xz.sha12015-12-28 12:39 67  
[   ]pulseaudio-7.99.2.tar.gz2016-01-12 03:28 2.6M 
[   ]pulseaudio-7.99.2.tar.gz.md52016-01-12 03:28 59  
[   ]pulseaudio-7.99.2.tar.gz.sha12016-01-12 03:28 67  
[   ]pulseaudio-7.99.2.tar.xz2016-01-12 03:28 1.4M 
[   ]pulseaudio-7.99.2.tar.xz.md52016-01-12 03:28 59  
[   ]pulseaudio-7.99.2.tar.xz.sha12016-01-12 03:28 67  
[   ]pulseaudio-8.0.tar.gz2016-01-22 07:38 2.6M 
[   ]pulseaudio-8.0.tar.gz.md52016-01-22 07:38 56  
[   ]pulseaudio-8.0.tar.gz.sha12016-01-22 07:38 64  
[   ]pulseaudio-8.0.tar.xz2016-01-22 07:38 1.4M 
[   ]pulseaudio-8.0.tar.xz.md52016-01-22 07:38 56  
[   ]pulseaudio-8.0.tar.xz.sha12016-01-22 07:38 64  
[   ]pulseaudio-8.99.1.tar.gz2016-05-12 10:58 2.6M 
[   ]pulseaudio-8.99.1.tar.gz.md52016-05-12 10:58 59  
[   ]pulseaudio-8.99.1.tar.gz.sha12016-05-12 10:58 67  
[   ]pulseaudio-8.99.1.tar.xz2016-05-12 10:58 1.5M 
[   ]pulseaudio-8.99.1.tar.xz.md52016-05-12 10:58 59  
[   ]pulseaudio-8.99.1.tar.xz.sha12016-05-12 10:58 67  
[   ]pulseaudio-8.99.2.tar.gz2016-05-29 06:08 2.6M 
[   ]pulseaudio-8.99.2.tar.gz.md52016-05-29 06:08 59  
[   ]pulseaudio-8.99.2.tar.gz.sha12016-05-29 06:08 67  
[   ]pulseaudio-8.99.2.tar.xz2016-05-29 06:08 1.5M 
[   ]pulseaudio-8.99.2.tar.xz.md52016-05-29 06:08 59  
[   ]pulseaudio-8.99.2.tar.xz.sha12016-05-29 06:08 67  
[   ]pulseaudio-9.0.tar.gz2016-06-22 07:09 2.6M 
[   ]pulseaudio-9.0.tar.gz.md52016-06-22 07:09 56  
[   ]pulseaudio-9.0.tar.gz.sha12016-06-22 07:09 64  
[   ]pulseaudio-9.0.tar.xz2016-06-22 07:09 1.5M 
[   ]pulseaudio-9.0.tar.xz.md52016-06-22 07:09 56  
[   ]pulseaudio-9.0.tar.xz.sha12016-06-22 07:09 64  
[   ]pulseaudio-9.99.1.tar.gz2017-01-03 16:14 2.7M 
[   ]pulseaudio-9.99.1.tar.gz.md52017-01-03 16:14 59  
[   ]pulseaudio-9.99.1.tar.gz.sha12017-01-03 16:14 67  
[   ]pulseaudio-9.99.1.tar.xz2017-01-03 16:14 1.5M 
[   ]pulseaudio-9.99.1.tar.xz.md52017-01-03 16:14 59  
[   ]pulseaudio-9.99.1.tar.xz.sha12017-01-03 16:14 67  
[   ]pulseaudio-10.0.tar.gz2017-01-19 00:12 2.7M 
[   ]pulseaudio-10.0.tar.gz.md52017-01-19 00:12 57  
[   ]pulseaudio-10.0.tar.gz.sha12017-01-19 00:12 65  
[   ]pulseaudio-10.0.tar.xz2017-01-19 00:12 1.5M 
[   ]pulseaudio-10.0.tar.xz.md52017-01-19 00:12 57  
[   ]pulseaudio-10.0.tar.xz.sha12017-01-19 00:12 65  
[   ]pulseaudio-10.99.1.tar.gz2017-07-24 23:52 2.8M 
[   ]pulseaudio-10.99.1.tar.gz.md52017-07-24 23:52 60  
[   ]pulseaudio-10.99.1.tar.gz.sha12017-07-24 23:52 68  
[   ]pulseaudio-10.99.1.tar.xz2017-07-24 23:52 1.6M 
[   ]pulseaudio-10.99.1.tar.xz.md52017-07-24 23:52 60  
[   ]pulseaudio-10.99.1.tar.xz.sha12017-07-24 23:52 68  
[   ]pulseaudio-11.0.tar.gz2017-09-05 09:49 2.8M 
[   ]pulseaudio-11.0.tar.gz.md52017-09-05 09:49 57  
[   ]pulseaudio-11.0.tar.gz.sha12017-09-05 09:49 65  
[   ]pulseaudio-11.0.tar.xz2017-09-05 09:49 1.6M 
[   ]pulseaudio-11.0.tar.xz.md52017-09-05 09:49 57  
[   ]pulseaudio-11.0.tar.xz.sha12017-09-05 09:49 65  
[   ]pulseaudio-11.1.tar.gz2017-09-18 15:23 2.8M 
[   ]pulseaudio-11.1.tar.gz.md52017-09-18 15:23 57  
[   ]pulseaudio-11.1.tar.gz.sha12017-09-18 15:23 65  
[   ]pulseaudio-11.1.tar.xz2017-09-18 15:23 1.6M 
[   ]pulseaudio-11.1.tar.xz.md52017-09-18 15:23 57  
[   ]pulseaudio-11.1.tar.xz.sha12017-09-18 15:23 65  
[   ]pulseaudio-11.99.1.tar.gz2018-05-13 06:57 2.8M 
[   ]pulseaudio-11.99.1.tar.gz.md52018-05-13 06:57 60  
[   ]pulseaudio-11.99.1.tar.gz.sha12018-05-13 06:57 68  
[   ]pulseaudio-11.99.1.tar.xz2018-05-13 06:57 1.6M 
[   ]pulseaudio-11.99.1.tar.xz.md52018-05-13 06:57 60  
[   ]pulseaudio-11.99.1.tar.xz.sha12018-05-13 06:57 68  
[   ]pulseaudio-12.0.tar.gz2018-06-20 20:33 2.8M 
[   ]pulseaudio-12.0.tar.gz.md52018-06-20 20:33 57  
[   ]pulseaudio-12.0.tar.gz.sha12018-06-20 20:33 65  
[   ]pulseaudio-12.0.tar.xz2018-06-20 20:33 1.6M 
[   ]pulseaudio-12.0.tar.xz.md52018-06-20 20:33 57  
[   ]pulseaudio-12.0.tar.xz.sha12018-06-20 20:33 65  
[   ]pulseaudio-12.1.tar.gz2018-07-14 16:43 2.8M 
[   ]pulseaudio-12.1.tar.gz.md52018-07-14 16:43 57  
[   ]pulseaudio-12.1.tar.gz.sha12018-07-14 16:43 65  
[   ]pulseaudio-12.1.tar.xz2018-07-14 16:43 1.6M 
[   ]pulseaudio-12.1.tar.xz.md52018-07-14 16:43 57  
[   ]pulseaudio-12.1.tar.xz.sha12018-07-14 16:43 65  
[   ]pulseaudio-12.2.tar.gz2018-07-16 16:12 2.8M 
[   ]pulseaudio-12.2.tar.gz.sha2562018-07-16 16:13 89  
[   ]pulseaudio-12.2.tar.xz2018-07-16 16:12 1.6M 
[   ]pulseaudio-12.2.tar.xz.sha2562018-07-16 16:13 89  
[   ]pulseaudio-12.99.1.tar.gz2019-07-09 03:16 3.6M 
[   ]pulseaudio-12.99.1.tar.gz.sha2562019-07-09 03:16 92  
[   ]pulseaudio-12.99.1.tar.xz2019-07-09 03:16 1.8M 
[   ]pulseaudio-12.99.1.tar.xz.sha2562019-07-09 03:16 92  
[   ]pulseaudio-12.99.2.tar.gz2019-08-06 17:47 3.6M 
[   ]pulseaudio-12.99.2.tar.gz.sha2562019-08-06 17:47 92  
[   ]pulseaudio-12.99.2.tar.xz2019-08-06 17:47 1.8M 
[   ]pulseaudio-12.99.2.tar.xz.sha2562019-08-06 17:47 92  
[   ]pulseaudio-12.99.3.tar.gz2019-09-01 07:44 3.6M 
[   ]pulseaudio-12.99.3.tar.gz.sha2562019-09-01 07:44 92  
[   ]pulseaudio-12.99.3.tar.xz2019-09-01 07:44 1.9M 
[   ]pulseaudio-12.99.3.tar.xz.sha2562019-09-01 07:44 92  
[   ]pulseaudio-13.0.tar.gz2019-09-13 13:34 3.6M 
[   ]pulseaudio-13.0.tar.gz.sha2562019-09-13 13:34 89  
[   ]pulseaudio-13.0.tar.xz2019-09-13 13:34 1.8M 
[   ]pulseaudio-13.0.tar.xz.sha2562019-09-13 13:34 89  

+
Apache/2.4.38 (Debian) Server at freedesktop.org Port 443
+ diff --git a/external/poky/bitbake/lib/bb/tests/fetch.py b/external/poky/bitbake/lib/bb/tests/fetch.py index 57376c44..29c96b2b 100644 --- a/external/poky/bitbake/lib/bb/tests/fetch.py +++ b/external/poky/bitbake/lib/bb/tests/fetch.py @@ -1,33 +1,20 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # BitBake Tests for the Fetcher (fetch2/) # # Copyright (C) 2012 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# SPDX-License-Identifier: GPL-2.0-only # import unittest import hashlib import tempfile -import subprocess import collections import os from bb.fetch2 import URI from bb.fetch2 import FetchMethod import bb +from bb.tests.support.httpserver import HTTPService def skipIfNoNetwork(): if os.environ.get("BB_SKIP_NETTESTS") == "yes": @@ -912,6 +899,7 @@ class FetcherNetworkTest(FetcherTest): if os.path.exists(os.path.join(repo_path, 'bitbake-gitsm-test1')): self.assertTrue(os.path.exists(os.path.join(repo_path, 'bitbake-gitsm-test1', 'bitbake')), msg='submodule of submodule missing') + @skipIfNoNetwork() def test_git_submodule_dbus_broker(self): # The following external repositories have show failures in fetch and unpack operations # We want to avoid regressions! @@ -929,6 +917,7 @@ class FetcherNetworkTest(FetcherTest): self.assertTrue(os.path.exists(os.path.join(repo_path, '.git/modules/subprojects/c-sundry/config')), msg='Missing submodule config "subprojects/c-sundry"') self.assertTrue(os.path.exists(os.path.join(repo_path, '.git/modules/subprojects/c-utf8/config')), msg='Missing submodule config "subprojects/c-utf8"') + @skipIfNoNetwork() def test_git_submodule_CLI11(self): url = "gitsm://github.com/CLIUtils/CLI11;protocol=git;rev=bd4dc911847d0cde7a6b41dfa626a85aab213baf" fetcher = bb.fetch.Fetch([url], self.d) @@ -942,6 +931,7 @@ class FetcherNetworkTest(FetcherTest): self.assertTrue(os.path.exists(os.path.join(repo_path, '.git/modules/extern/json/config')), msg='Missing submodule config "extern/json"') self.assertTrue(os.path.exists(os.path.join(repo_path, '.git/modules/extern/sanitizers/config')), msg='Missing submodule config "extern/sanitizers"') + @skipIfNoNetwork() def test_git_submodule_update_CLI11(self): """ Prevent regression on update detection not finding missing submodule, or modules without needed commits """ url = "gitsm://github.com/CLIUtils/CLI11;protocol=git;rev=cf6a99fa69aaefe477cc52e3ef4a7d2d7fa40714" @@ -961,6 +951,7 @@ class FetcherNetworkTest(FetcherTest): self.assertTrue(os.path.exists(os.path.join(repo_path, '.git/modules/extern/json/config')), msg='Missing submodule config "extern/json"') self.assertTrue(os.path.exists(os.path.join(repo_path, '.git/modules/extern/sanitizers/config')), msg='Missing submodule config "extern/sanitizers"') + @skipIfNoNetwork() def test_git_submodule_aktualizr(self): url = "gitsm://github.com/advancedtelematic/aktualizr;branch=master;protocol=git;rev=d00d1a04cc2366d1a5f143b84b9f507f8bd32c44" fetcher = bb.fetch.Fetch([url], self.d) @@ -977,6 +968,7 @@ class FetcherNetworkTest(FetcherTest): self.assertTrue(os.path.exists(os.path.join(repo_path, '.git/modules/third_party/googletest/config')), msg='Missing submodule config "third_party/googletest/config"') self.assertTrue(os.path.exists(os.path.join(repo_path, '.git/modules/third_party/HdrHistogram_c/config')), msg='Missing submodule config "third_party/HdrHistogram_c/config"') + @skipIfNoNetwork() def test_git_submodule_iotedge(self): """ Prevent regression on deeply nested submodules not being checked out properly, even though they were fetched. """ @@ -1004,6 +996,86 @@ class FetcherNetworkTest(FetcherTest): self.assertTrue(os.path.exists(os.path.join(repo_path, 'edgelet/hsm-sys/azure-iot-hsm-c/deps/utpm/deps/c-utility/testtools/umock-c/deps/ctest/README.md')), msg='Missing submodule checkout') self.assertTrue(os.path.exists(os.path.join(repo_path, 'edgelet/hsm-sys/azure-iot-hsm-c/deps/utpm/deps/c-utility/testtools/umock-c/deps/testrunner/readme.md')), msg='Missing submodule checkout') +class SVNTest(FetcherTest): + def skipIfNoSvn(): + import shutil + if not shutil.which("svn"): + return unittest.skip("svn not installed, tests being skipped") + + if not shutil.which("svnadmin"): + return unittest.skip("svnadmin not installed, tests being skipped") + + return lambda f: f + + @skipIfNoSvn() + def setUp(self): + """ Create a local repository """ + + super(SVNTest, self).setUp() + + # Create something we can fetch + src_dir = tempfile.mkdtemp(dir=self.tempdir, + prefix='svnfetch_srcdir_') + src_dir = os.path.abspath(src_dir) + bb.process.run("echo readme > README.md", cwd=src_dir) + + # Store it in a local SVN repository + repo_dir = tempfile.mkdtemp(dir=self.tempdir, + prefix='svnfetch_localrepo_') + repo_dir = os.path.abspath(repo_dir) + bb.process.run("svnadmin create project", cwd=repo_dir) + + self.repo_url = "file://%s/project" % repo_dir + bb.process.run("svn import --non-interactive -m 'Initial import' %s %s/trunk" % (src_dir, self.repo_url), + cwd=repo_dir) + + bb.process.run("svn co %s svnfetch_co" % self.repo_url, cwd=self.tempdir) + # Github will emulate SVN. Use this to check if we're downloding... + bb.process.run("svn propset svn:externals 'bitbake svn://vcs.pcre.org/pcre2/code' .", + cwd=os.path.join(self.tempdir, 'svnfetch_co', 'trunk')) + bb.process.run("svn commit --non-interactive -m 'Add external'", + cwd=os.path.join(self.tempdir, 'svnfetch_co', 'trunk')) + + self.src_dir = src_dir + self.repo_dir = repo_dir + + @skipIfNoSvn() + def tearDown(self): + os.chdir(self.origdir) + if os.environ.get("BB_TMPDIR_NOCLEAN") == "yes": + print("Not cleaning up %s. Please remove manually." % self.tempdir) + else: + bb.utils.prunedir(self.tempdir) + + @skipIfNoSvn() + @skipIfNoNetwork() + def test_noexternal_svn(self): + # Always match the rev count from setUp (currently rev 2) + url = "svn://%s;module=trunk;protocol=file;rev=2" % self.repo_url.replace('file://', '') + fetcher = bb.fetch.Fetch([url], self.d) + fetcher.download() + os.chdir(os.path.dirname(self.unpackdir)) + fetcher.unpack(self.unpackdir) + + self.assertTrue(os.path.exists(os.path.join(self.unpackdir, 'trunk')), msg="Missing trunk") + self.assertTrue(os.path.exists(os.path.join(self.unpackdir, 'trunk', 'README.md')), msg="Missing contents") + self.assertFalse(os.path.exists(os.path.join(self.unpackdir, 'trunk/bitbake/trunk')), msg="External dir should NOT exist") + self.assertFalse(os.path.exists(os.path.join(self.unpackdir, 'trunk/bitbake/trunk', 'README')), msg="External README should NOT exit") + + @skipIfNoSvn() + def test_external_svn(self): + # Always match the rev count from setUp (currently rev 2) + url = "svn://%s;module=trunk;protocol=file;externals=allowed;rev=2" % self.repo_url.replace('file://', '') + fetcher = bb.fetch.Fetch([url], self.d) + fetcher.download() + os.chdir(os.path.dirname(self.unpackdir)) + fetcher.unpack(self.unpackdir) + + self.assertTrue(os.path.exists(os.path.join(self.unpackdir, 'trunk')), msg="Missing trunk") + self.assertTrue(os.path.exists(os.path.join(self.unpackdir, 'trunk', 'README.md')), msg="Missing contents") + self.assertTrue(os.path.exists(os.path.join(self.unpackdir, 'trunk/bitbake/trunk')), msg="External dir should exist") + self.assertTrue(os.path.exists(os.path.join(self.unpackdir, 'trunk/bitbake/trunk', 'README')), msg="External README should exit") + class TrustedNetworksTest(FetcherTest): def test_trusted_network(self): # Ensure trusted_network returns False when the host IS in the list. @@ -1080,7 +1152,8 @@ class FetchLatestVersionTest(FetcherTest): ("mx-1.0", "git://github.com/clutter-project/mx.git;branch=mx-1.4", "9b1db6b8060bd00b121a692f942404a24ae2960f", "") : "1.99.4", # version pattern "vX.Y" - ("mtd-utils", "git://git.infradead.org/mtd-utils.git", "ca39eb1d98e736109c64ff9c1aa2a6ecca222d8f", "") + # mirror of git.infradead.org since network issues interfered with testing + ("mtd-utils", "git://git.yoctoproject.org/mtd-utils.git", "ca39eb1d98e736109c64ff9c1aa2a6ecca222d8f", "") : "1.5.0", # version pattern "pkg_name-X.Y" ("presentproto", "git://anongit.freedesktop.org/git/xorg/proto/presentproto", "24f3a56e541b0a9e6c6ee76081f441221a120ef9", "") @@ -1108,27 +1181,46 @@ class FetchLatestVersionTest(FetcherTest): } test_wget_uris = { + # # packages with versions inside directory name - ("util-linux", "http://kernel.org/pub/linux/utils/util-linux/v2.23/util-linux-2.24.2.tar.bz2", "", "") + # + # http://kernel.org/pub/linux/utils/util-linux/v2.23/util-linux-2.24.2.tar.bz2 + ("util-linux", "/pub/linux/utils/util-linux/v2.23/util-linux-2.24.2.tar.bz2", "", "") : "2.24.2", - ("enchant", "http://www.abisource.com/downloads/enchant/1.6.0/enchant-1.6.0.tar.gz", "", "") + # http://www.abisource.com/downloads/enchant/1.6.0/enchant-1.6.0.tar.gz + ("enchant", "/downloads/enchant/1.6.0/enchant-1.6.0.tar.gz", "", "") : "1.6.0", - ("cmake", "http://www.cmake.org/files/v2.8/cmake-2.8.12.1.tar.gz", "", "") + # http://www.cmake.org/files/v2.8/cmake-2.8.12.1.tar.gz + ("cmake", "/files/v2.8/cmake-2.8.12.1.tar.gz", "", "") : "2.8.12.1", + # # packages with versions only in current directory - ("eglic", "http://downloads.yoctoproject.org/releases/eglibc/eglibc-2.18-svnr23787.tar.bz2", "", "") + # + # http://downloads.yoctoproject.org/releases/eglibc/eglibc-2.18-svnr23787.tar.bz2 + ("eglic", "/releases/eglibc/eglibc-2.18-svnr23787.tar.bz2", "", "") : "2.19", - ("gnu-config", "http://downloads.yoctoproject.org/releases/gnu-config/gnu-config-20120814.tar.bz2", "", "") + # http://downloads.yoctoproject.org/releases/gnu-config/gnu-config-20120814.tar.bz2 + ("gnu-config", "/releases/gnu-config/gnu-config-20120814.tar.bz2", "", "") : "20120814", + # # packages with "99" in the name of possible version - ("pulseaudio", "http://freedesktop.org/software/pulseaudio/releases/pulseaudio-4.0.tar.xz", "", "") + # + # http://freedesktop.org/software/pulseaudio/releases/pulseaudio-4.0.tar.xz + ("pulseaudio", "/software/pulseaudio/releases/pulseaudio-4.0.tar.xz", "", "") : "5.0", - ("xserver-xorg", "http://xorg.freedesktop.org/releases/individual/xserver/xorg-server-1.15.1.tar.bz2", "", "") + # http://xorg.freedesktop.org/releases/individual/xserver/xorg-server-1.15.1.tar.bz2 + ("xserver-xorg", "/releases/individual/xserver/xorg-server-1.15.1.tar.bz2", "", "") : "1.15.1", + # # packages with valid UPSTREAM_CHECK_URI and UPSTREAM_CHECK_REGEX - ("cups", "http://www.cups.org/software/1.7.2/cups-1.7.2-source.tar.bz2", "https://github.com/apple/cups/releases", "(?Pcups\-)(?P((\d+[\.\-_]*)+))\-source\.tar\.gz") + # + # http://www.cups.org/software/1.7.2/cups-1.7.2-source.tar.bz2 + # https://github.com/apple/cups/releases + ("cups", "/software/1.7.2/cups-1.7.2-source.tar.bz2", "/apple/cups/releases", "(?Pcups\-)(?P((\d+[\.\-_]*)+))\-source\.tar\.gz") : "2.0.0", - ("db", "http://download.oracle.com/berkeley-db/db-5.3.21.tar.gz", "http://ftp.debian.org/debian/pool/main/d/db5.3/", "(?Pdb5\.3_)(?P\d+(\.\d+)+).+\.orig\.tar\.xz") + # http://download.oracle.com/berkeley-db/db-5.3.21.tar.gz + # http://ftp.debian.org/debian/pool/main/d/db5.3/ + ("db", "/berkeley-db/db-5.3.21.tar.gz", "/debian/pool/main/d/db5.3/", "(?Pdb5\.3_)(?P\d+(\.\d+)+).+\.orig\.tar\.xz") : "5.3.10", } @@ -1145,18 +1237,28 @@ class FetchLatestVersionTest(FetcherTest): r = bb.utils.vercmp_string(v, verstring) self.assertTrue(r == -1 or r == 0, msg="Package %s, version: %s <= %s" % (k[0], v, verstring)) - @skipIfNoNetwork() def test_wget_latest_versionstring(self): - for k, v in self.test_wget_uris.items(): - self.d.setVar("PN", k[0]) - self.d.setVar("UPSTREAM_CHECK_URI", k[2]) - self.d.setVar("UPSTREAM_CHECK_REGEX", k[3]) - ud = bb.fetch2.FetchData(k[1], self.d) - pupver = ud.method.latest_versionstring(ud, self.d) - verstring = pupver[0] - self.assertTrue(verstring, msg="Could not find upstream version for %s" % k[0]) - r = bb.utils.vercmp_string(v, verstring) - self.assertTrue(r == -1 or r == 0, msg="Package %s, version: %s <= %s" % (k[0], v, verstring)) + testdata = os.path.dirname(os.path.abspath(__file__)) + "/fetch-testdata" + server = HTTPService(testdata) + server.start() + port = server.port + try: + for k, v in self.test_wget_uris.items(): + self.d.setVar("PN", k[0]) + checkuri = "" + if k[2]: + checkuri = "http://localhost:%s/" % port + k[2] + self.d.setVar("UPSTREAM_CHECK_URI", checkuri) + self.d.setVar("UPSTREAM_CHECK_REGEX", k[3]) + url = "http://localhost:%s/" % port + k[1] + ud = bb.fetch2.FetchData(url, self.d) + pupver = ud.method.latest_versionstring(ud, self.d) + verstring = pupver[0] + self.assertTrue(verstring, msg="Could not find upstream version for %s" % k[0]) + r = bb.utils.vercmp_string(v, verstring) + self.assertTrue(r == -1 or r == 0, msg="Package %s, version: %s <= %s" % (k[0], v, verstring)) + finally: + server.stop() class FetchCheckStatusTest(FetcherTest): @@ -1384,7 +1486,7 @@ class GitShallowTest(FetcherTest): def fetch(self, uri=None): if uri is None: - uris = self.d.getVar('SRC_URI', True).split() + uris = self.d.getVar('SRC_URI').split() uri = uris[0] d = self.d else: @@ -1443,7 +1545,7 @@ class GitShallowTest(FetcherTest): srcrev = self.git('rev-parse HEAD', cwd=self.srcdir).strip() self.d.setVar('SRCREV', srcrev) - uri = self.d.getVar('SRC_URI', True).split()[0] + uri = self.d.getVar('SRC_URI').split()[0] uri = '%s;nobranch=1;bare=1' % uri self.fetch_shallow(uri) @@ -1590,6 +1692,47 @@ class GitShallowTest(FetcherTest): # Verify the submodule is also shallow self.assertRevCount(1, cwd=os.path.join(self.gitdir, 'gitsubmodule')) + def test_shallow_submodule_mirrors(self): + self.add_empty_file('a') + self.add_empty_file('b') + + smdir = os.path.join(self.tempdir, 'gitsubmodule') + bb.utils.mkdirhier(smdir) + self.git('init', cwd=smdir) + # Make this look like it was cloned from a remote... + self.git('config --add remote.origin.url "%s"' % smdir, cwd=smdir) + self.git('config --add remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"', cwd=smdir) + self.add_empty_file('asub', cwd=smdir) + self.add_empty_file('bsub', cwd=smdir) + + self.git('submodule init', cwd=self.srcdir) + self.git('submodule add file://%s' % smdir, cwd=self.srcdir) + self.git('submodule update', cwd=self.srcdir) + self.git('commit -m submodule -a', cwd=self.srcdir) + + uri = 'gitsm://%s;protocol=file;subdir=${S}' % self.srcdir + + # Fetch once to generate the shallow tarball + fetcher, ud = self.fetch(uri) + + # Set up the mirror + mirrordir = os.path.join(self.tempdir, 'mirror') + os.rename(self.dldir, mirrordir) + self.d.setVar('PREMIRRORS', 'gitsm://.*/.* file://%s/\n' % mirrordir) + + # Fetch from the mirror + bb.utils.remove(self.dldir, recurse=True) + bb.utils.remove(self.gitdir, recurse=True) + self.fetch_and_unpack(uri) + + # Verify the main repository is shallow + self.assertRevCount(1) + + # Verify the gitsubmodule directory is present + assert os.listdir(os.path.join(self.gitdir, 'gitsubmodule')) + + # Verify the submodule is also shallow + self.assertRevCount(1, cwd=os.path.join(self.gitdir, 'gitsubmodule')) if any(os.path.exists(os.path.join(p, 'git-annex')) for p in os.environ.get('PATH').split(':')): def test_shallow_annex(self): @@ -1622,7 +1765,7 @@ class GitShallowTest(FetcherTest): self.add_empty_file('f') self.assertRevCount(7, cwd=self.srcdir) - uri = self.d.getVar('SRC_URI', True).split()[0] + uri = self.d.getVar('SRC_URI').split()[0] uri = '%s;branch=master,a_branch;name=master,a_branch' % uri self.d.setVar('BB_GIT_SHALLOW_DEPTH', '0') @@ -1648,7 +1791,7 @@ class GitShallowTest(FetcherTest): self.add_empty_file('f') self.assertRevCount(7, cwd=self.srcdir) - uri = self.d.getVar('SRC_URI', True).split()[0] + uri = self.d.getVar('SRC_URI').split()[0] uri = '%s;branch=master,a_branch;name=master,a_branch' % uri self.d.setVar('BB_GIT_SHALLOW_DEPTH', '0') @@ -1791,6 +1934,26 @@ class GitShallowTest(FetcherTest): with self.assertRaises(bb.fetch2.FetchError): self.fetch() + def test_shallow_fetch_missing_revs(self): + self.add_empty_file('a') + self.add_empty_file('b') + fetcher, ud = self.fetch(self.d.getVar('SRC_URI')) + self.git('tag v0.0 master', cwd=self.srcdir) + self.d.setVar('BB_GIT_SHALLOW_DEPTH', '0') + self.d.setVar('BB_GIT_SHALLOW_REVS', 'v0.0') + self.fetch_shallow() + + def test_shallow_fetch_missing_revs_fails(self): + self.add_empty_file('a') + self.add_empty_file('b') + fetcher, ud = self.fetch(self.d.getVar('SRC_URI')) + self.d.setVar('BB_GIT_SHALLOW_DEPTH', '0') + self.d.setVar('BB_GIT_SHALLOW_REVS', 'v0.0') + + with self.assertRaises(bb.fetch2.FetchError), self.assertLogs("BitBake.Fetcher", level="ERROR") as cm: + self.fetch_shallow() + self.assertIn("Unable to find revision v0.0 even from upstream", cm.output[0]) + @skipIfNoNetwork() def test_bitbake(self): self.git('remote add --mirror=fetch origin git://github.com/openembedded/bitbake', cwd=self.srcdir) @@ -1836,3 +1999,517 @@ class GitShallowTest(FetcherTest): dir = os.listdir(self.unpackdir + "/git/") self.assertIn("fstests.doap", dir) + +class GitLfsTest(FetcherTest): + def setUp(self): + FetcherTest.setUp(self) + + self.gitdir = os.path.join(self.tempdir, 'git') + self.srcdir = os.path.join(self.tempdir, 'gitsource') + + self.d.setVar('WORKDIR', self.tempdir) + self.d.setVar('S', self.gitdir) + self.d.delVar('PREMIRRORS') + self.d.delVar('MIRRORS') + + self.d.setVar('SRCREV', '${AUTOREV}') + self.d.setVar('AUTOREV', '${@bb.fetch2.get_autorev(d)}') + + bb.utils.mkdirhier(self.srcdir) + self.git('init', cwd=self.srcdir) + with open(os.path.join(self.srcdir, '.gitattributes'), 'wt') as attrs: + attrs.write('*.mp3 filter=lfs -text') + self.git(['add', '.gitattributes'], cwd=self.srcdir) + self.git(['commit', '-m', "attributes", '.gitattributes'], cwd=self.srcdir) + + def git(self, cmd, cwd=None): + if isinstance(cmd, str): + cmd = 'git ' + cmd + else: + cmd = ['git'] + cmd + if cwd is None: + cwd = self.gitdir + return bb.process.run(cmd, cwd=cwd)[0] + + def fetch(self, uri=None): + uris = self.d.getVar('SRC_URI').split() + uri = uris[0] + d = self.d + + fetcher = bb.fetch2.Fetch(uris, d) + fetcher.download() + ud = fetcher.ud[uri] + return fetcher, ud + + def test_lfs_enabled(self): + import shutil + + uri = 'git://%s;protocol=file;subdir=${S};lfs=1' % self.srcdir + self.d.setVar('SRC_URI', uri) + + fetcher, ud = self.fetch() + self.assertIsNotNone(ud.method._find_git_lfs) + + # If git-lfs can be found, the unpack should be successful + ud.method._find_git_lfs = lambda d: True + shutil.rmtree(self.gitdir, ignore_errors=True) + fetcher.unpack(self.d.getVar('WORKDIR')) + + # If git-lfs cannot be found, the unpack should throw an error + with self.assertRaises(bb.fetch2.FetchError): + ud.method._find_git_lfs = lambda d: False + shutil.rmtree(self.gitdir, ignore_errors=True) + fetcher.unpack(self.d.getVar('WORKDIR')) + + def test_lfs_disabled(self): + import shutil + + uri = 'git://%s;protocol=file;subdir=${S};lfs=0' % self.srcdir + self.d.setVar('SRC_URI', uri) + + fetcher, ud = self.fetch() + self.assertIsNotNone(ud.method._find_git_lfs) + + # If git-lfs can be found, the unpack should be successful + ud.method._find_git_lfs = lambda d: True + shutil.rmtree(self.gitdir, ignore_errors=True) + fetcher.unpack(self.d.getVar('WORKDIR')) + + # If git-lfs cannot be found, the unpack should be successful + ud.method._find_git_lfs = lambda d: False + shutil.rmtree(self.gitdir, ignore_errors=True) + fetcher.unpack(self.d.getVar('WORKDIR')) + +class NPMTest(FetcherTest): + def skipIfNoNpm(): + import shutil + if not shutil.which('npm'): + return unittest.skip('npm not installed, tests being skipped') + return lambda f: f + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npm(self): + url = 'npm://registry.npmjs.org;package=@savoirfairelinux/node-server-example;version=1.0.0' + fetcher = bb.fetch.Fetch([url], self.d) + ud = fetcher.ud[fetcher.urls[0]] + fetcher.download() + self.assertTrue(os.path.exists(ud.localpath)) + self.assertTrue(os.path.exists(ud.localpath + '.done')) + self.assertTrue(os.path.exists(ud.resolvefile)) + fetcher.unpack(self.unpackdir) + unpackdir = os.path.join(self.unpackdir, 'npm') + self.assertTrue(os.path.exists(os.path.join(unpackdir, 'package.json'))) + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npm_bad_checksum(self): + url = 'npm://registry.npmjs.org;package=@savoirfairelinux/node-server-example;version=1.0.0' + # Fetch once to get a tarball + fetcher = bb.fetch.Fetch([url], self.d) + ud = fetcher.ud[fetcher.urls[0]] + fetcher.download() + self.assertTrue(os.path.exists(ud.localpath)) + # Modify the tarball + bad = b'bad checksum' + with open(ud.localpath, 'wb') as f: + f.write(bad) + # Verify that the tarball is fetched again + fetcher.download() + badsum = hashlib.sha512(bad).hexdigest() + self.assertTrue(os.path.exists(ud.localpath + '_bad-checksum_' + badsum)) + self.assertTrue(os.path.exists(ud.localpath)) + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npm_premirrors(self): + url = 'npm://registry.npmjs.org;package=@savoirfairelinux/node-server-example;version=1.0.0' + # Fetch once to get a tarball + fetcher = bb.fetch.Fetch([url], self.d) + ud = fetcher.ud[fetcher.urls[0]] + fetcher.download() + self.assertTrue(os.path.exists(ud.localpath)) + # Setup the mirror + mirrordir = os.path.join(self.tempdir, 'mirror') + bb.utils.mkdirhier(mirrordir) + os.replace(ud.localpath, os.path.join(mirrordir, os.path.basename(ud.localpath))) + self.d.setVar('PREMIRRORS', 'https?$://.*/.* file://%s/\n' % mirrordir) + self.d.setVar('BB_FETCH_PREMIRRORONLY', '1') + # Fetch again + self.assertFalse(os.path.exists(ud.localpath)) + fetcher.download() + self.assertTrue(os.path.exists(ud.localpath)) + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npm_mirrors(self): + # Fetch once to get a tarball + url = 'npm://registry.npmjs.org;package=@savoirfairelinux/node-server-example;version=1.0.0' + fetcher = bb.fetch.Fetch([url], self.d) + ud = fetcher.ud[fetcher.urls[0]] + fetcher.download() + self.assertTrue(os.path.exists(ud.localpath)) + # Setup the mirror + mirrordir = os.path.join(self.tempdir, 'mirror') + bb.utils.mkdirhier(mirrordir) + os.replace(ud.localpath, os.path.join(mirrordir, os.path.basename(ud.localpath))) + self.d.setVar('MIRRORS', 'https?$://.*/.* file://%s/\n' % mirrordir) + # Update the resolved url to an invalid url + with open(ud.resolvefile, 'r') as f: + url = f.read() + uri = URI(url) + uri.path = '/invalid' + with open(ud.resolvefile, 'w') as f: + f.write(str(uri)) + # Fetch again + self.assertFalse(os.path.exists(ud.localpath)) + fetcher.download() + self.assertTrue(os.path.exists(ud.localpath)) + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npm_destsuffix_downloadfilename(self): + url = 'npm://registry.npmjs.org;package=@savoirfairelinux/node-server-example;version=1.0.0;destsuffix=foo/bar;downloadfilename=foo-bar.tgz' + fetcher = bb.fetch.Fetch([url], self.d) + fetcher.download() + self.assertTrue(os.path.exists(os.path.join(self.dldir, 'foo-bar.tgz'))) + fetcher.unpack(self.unpackdir) + unpackdir = os.path.join(self.unpackdir, 'foo', 'bar') + self.assertTrue(os.path.exists(os.path.join(unpackdir, 'package.json'))) + + def test_npm_no_network_no_tarball(self): + url = 'npm://registry.npmjs.org;package=@savoirfairelinux/node-server-example;version=1.0.0' + self.d.setVar('BB_NO_NETWORK', '1') + fetcher = bb.fetch.Fetch([url], self.d) + with self.assertRaises(bb.fetch2.NetworkAccess): + fetcher.download() + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npm_no_network_with_tarball(self): + url = 'npm://registry.npmjs.org;package=@savoirfairelinux/node-server-example;version=1.0.0' + # Fetch once to get a tarball + fetcher = bb.fetch.Fetch([url], self.d) + fetcher.download() + # Disable network access + self.d.setVar('BB_NO_NETWORK', '1') + # Fetch again + fetcher.download() + fetcher.unpack(self.unpackdir) + unpackdir = os.path.join(self.unpackdir, 'npm') + self.assertTrue(os.path.exists(os.path.join(unpackdir, 'package.json'))) + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npm_registry_alternate(self): + url = 'npm://registry.freajs.org;package=@savoirfairelinux/node-server-example;version=1.0.0' + fetcher = bb.fetch.Fetch([url], self.d) + fetcher.download() + fetcher.unpack(self.unpackdir) + unpackdir = os.path.join(self.unpackdir, 'npm') + self.assertTrue(os.path.exists(os.path.join(unpackdir, 'package.json'))) + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npm_version_latest(self): + url = 'npm://registry.npmjs.org;package=@savoirfairelinux/node-server-example;version=latest' + fetcher = bb.fetch.Fetch([url], self.d) + fetcher.download() + fetcher.unpack(self.unpackdir) + unpackdir = os.path.join(self.unpackdir, 'npm') + self.assertTrue(os.path.exists(os.path.join(unpackdir, 'package.json'))) + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npm_registry_invalid(self): + url = 'npm://registry.invalid.org;package=@savoirfairelinux/node-server-example;version=1.0.0' + fetcher = bb.fetch.Fetch([url], self.d) + with self.assertRaises(bb.fetch2.FetchError): + fetcher.download() + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npm_package_invalid(self): + url = 'npm://registry.npmjs.org;package=@savoirfairelinux/invalid;version=1.0.0' + fetcher = bb.fetch.Fetch([url], self.d) + with self.assertRaises(bb.fetch2.FetchError): + fetcher.download() + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npm_version_invalid(self): + url = 'npm://registry.npmjs.org;package=@savoirfairelinux/node-server-example;version=invalid' + with self.assertRaises(bb.fetch2.ParameterError): + fetcher = bb.fetch.Fetch([url], self.d) + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npm_registry_none(self): + url = 'npm://;package=@savoirfairelinux/node-server-example;version=1.0.0' + with self.assertRaises(bb.fetch2.MalformedUrl): + fetcher = bb.fetch.Fetch([url], self.d) + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npm_package_none(self): + url = 'npm://registry.npmjs.org;version=1.0.0' + with self.assertRaises(bb.fetch2.MissingParameterError): + fetcher = bb.fetch.Fetch([url], self.d) + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npm_version_none(self): + url = 'npm://registry.npmjs.org;package=@savoirfairelinux/node-server-example' + with self.assertRaises(bb.fetch2.MissingParameterError): + fetcher = bb.fetch.Fetch([url], self.d) + + def create_shrinkwrap_file(self, data): + import json + datadir = os.path.join(self.tempdir, 'data') + swfile = os.path.join(datadir, 'npm-shrinkwrap.json') + bb.utils.mkdirhier(datadir) + with open(swfile, 'w') as f: + json.dump(data, f) + # Also configure the S directory + self.sdir = os.path.join(self.unpackdir, 'S') + self.d.setVar('S', self.sdir) + return swfile + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npmsw(self): + swfile = self.create_shrinkwrap_file({ + 'dependencies': { + 'array-flatten': { + 'version': '1.1.1', + 'resolved': 'https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz', + 'integrity': 'sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=', + 'dependencies': { + 'content-type': { + 'version': 'https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz', + 'integrity': 'sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==', + 'dependencies': { + 'cookie': { + 'version': 'git+https://github.com/jshttp/cookie.git#aec1177c7da67e3b3273df96cf476824dbc9ae09', + 'from': 'git+https://github.com/jshttp/cookie.git' + } + } + } + } + } + } + }) + fetcher = bb.fetch.Fetch(['npmsw://' + swfile], self.d) + fetcher.download() + self.assertTrue(os.path.exists(os.path.join(self.dldir, 'npm2', 'array-flatten-1.1.1.tgz'))) + self.assertTrue(os.path.exists(os.path.join(self.dldir, 'npm2', 'content-type-1.0.4.tgz'))) + self.assertTrue(os.path.exists(os.path.join(self.dldir, 'git2', 'github.com.jshttp.cookie.git'))) + fetcher.unpack(self.unpackdir) + self.assertTrue(os.path.exists(os.path.join(self.sdir, 'npm-shrinkwrap.json'))) + self.assertTrue(os.path.exists(os.path.join(self.sdir, 'node_modules', 'array-flatten', 'package.json'))) + self.assertTrue(os.path.exists(os.path.join(self.sdir, 'node_modules', 'array-flatten', 'node_modules', 'content-type', 'package.json'))) + self.assertTrue(os.path.exists(os.path.join(self.sdir, 'node_modules', 'array-flatten', 'node_modules', 'content-type', 'node_modules', 'cookie', 'package.json'))) + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npmsw_dev(self): + swfile = self.create_shrinkwrap_file({ + 'dependencies': { + 'array-flatten': { + 'version': '1.1.1', + 'resolved': 'https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz', + 'integrity': 'sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=' + }, + 'content-type': { + 'version': '1.0.4', + 'resolved': 'https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz', + 'integrity': 'sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==', + 'dev': True + } + } + }) + # Fetch with dev disabled + fetcher = bb.fetch.Fetch(['npmsw://' + swfile], self.d) + fetcher.download() + self.assertTrue(os.path.exists(os.path.join(self.dldir, 'npm2', 'array-flatten-1.1.1.tgz'))) + self.assertFalse(os.path.exists(os.path.join(self.dldir, 'npm2', 'content-type-1.0.4.tgz'))) + # Fetch with dev enabled + fetcher = bb.fetch.Fetch(['npmsw://' + swfile + ';dev=1'], self.d) + fetcher.download() + self.assertTrue(os.path.exists(os.path.join(self.dldir, 'npm2', 'array-flatten-1.1.1.tgz'))) + self.assertTrue(os.path.exists(os.path.join(self.dldir, 'npm2', 'content-type-1.0.4.tgz'))) + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npmsw_destsuffix(self): + swfile = self.create_shrinkwrap_file({ + 'dependencies': { + 'array-flatten': { + 'version': '1.1.1', + 'resolved': 'https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz', + 'integrity': 'sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=' + } + } + }) + fetcher = bb.fetch.Fetch(['npmsw://' + swfile + ';destsuffix=foo/bar'], self.d) + fetcher.download() + fetcher.unpack(self.unpackdir) + self.assertTrue(os.path.exists(os.path.join(self.unpackdir, 'foo', 'bar', 'node_modules', 'array-flatten', 'package.json'))) + + def test_npmsw_no_network_no_tarball(self): + swfile = self.create_shrinkwrap_file({ + 'dependencies': { + 'array-flatten': { + 'version': '1.1.1', + 'resolved': 'https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz', + 'integrity': 'sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=' + } + } + }) + self.d.setVar('BB_NO_NETWORK', '1') + fetcher = bb.fetch.Fetch(['npmsw://' + swfile], self.d) + with self.assertRaises(bb.fetch2.NetworkAccess): + fetcher.download() + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npmsw_no_network_with_tarball(self): + # Fetch once to get a tarball + fetcher = bb.fetch.Fetch(['npm://registry.npmjs.org;package=array-flatten;version=1.1.1'], self.d) + fetcher.download() + # Disable network access + self.d.setVar('BB_NO_NETWORK', '1') + # Fetch again + swfile = self.create_shrinkwrap_file({ + 'dependencies': { + 'array-flatten': { + 'version': '1.1.1', + 'resolved': 'https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz', + 'integrity': 'sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=' + } + } + }) + fetcher = bb.fetch.Fetch(['npmsw://' + swfile], self.d) + fetcher.download() + fetcher.unpack(self.unpackdir) + self.assertTrue(os.path.exists(os.path.join(self.sdir, 'node_modules', 'array-flatten', 'package.json'))) + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npmsw_npm_reusability(self): + # Fetch once with npmsw + swfile = self.create_shrinkwrap_file({ + 'dependencies': { + 'array-flatten': { + 'version': '1.1.1', + 'resolved': 'https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz', + 'integrity': 'sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=' + } + } + }) + fetcher = bb.fetch.Fetch(['npmsw://' + swfile], self.d) + fetcher.download() + # Disable network access + self.d.setVar('BB_NO_NETWORK', '1') + # Fetch again with npm + fetcher = bb.fetch.Fetch(['npm://registry.npmjs.org;package=array-flatten;version=1.1.1'], self.d) + fetcher.download() + fetcher.unpack(self.unpackdir) + self.assertTrue(os.path.exists(os.path.join(self.unpackdir, 'npm', 'package.json'))) + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npmsw_bad_checksum(self): + # Try to fetch with bad checksum + swfile = self.create_shrinkwrap_file({ + 'dependencies': { + 'array-flatten': { + 'version': '1.1.1', + 'resolved': 'https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz', + 'integrity': 'sha1-gfNEp2hqgLTFKT6P3AsBYMgsBqg=' + } + } + }) + fetcher = bb.fetch.Fetch(['npmsw://' + swfile], self.d) + with self.assertRaises(bb.fetch2.FetchError): + fetcher.download() + # Fetch correctly to get a tarball + swfile = self.create_shrinkwrap_file({ + 'dependencies': { + 'array-flatten': { + 'version': '1.1.1', + 'resolved': 'https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz', + 'integrity': 'sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=' + } + } + }) + fetcher = bb.fetch.Fetch(['npmsw://' + swfile], self.d) + fetcher.download() + localpath = os.path.join(self.dldir, 'npm2', 'array-flatten-1.1.1.tgz') + self.assertTrue(os.path.exists(localpath)) + # Modify the tarball + bad = b'bad checksum' + with open(localpath, 'wb') as f: + f.write(bad) + # Verify that the tarball is fetched again + fetcher.download() + badsum = hashlib.sha1(bad).hexdigest() + self.assertTrue(os.path.exists(localpath + '_bad-checksum_' + badsum)) + self.assertTrue(os.path.exists(localpath)) + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npmsw_premirrors(self): + # Fetch once to get a tarball + fetcher = bb.fetch.Fetch(['npm://registry.npmjs.org;package=array-flatten;version=1.1.1'], self.d) + ud = fetcher.ud[fetcher.urls[0]] + fetcher.download() + self.assertTrue(os.path.exists(ud.localpath)) + # Setup the mirror + mirrordir = os.path.join(self.tempdir, 'mirror') + bb.utils.mkdirhier(mirrordir) + os.replace(ud.localpath, os.path.join(mirrordir, os.path.basename(ud.localpath))) + self.d.setVar('PREMIRRORS', 'https?$://.*/.* file://%s/\n' % mirrordir) + self.d.setVar('BB_FETCH_PREMIRRORONLY', '1') + # Fetch again + self.assertFalse(os.path.exists(ud.localpath)) + swfile = self.create_shrinkwrap_file({ + 'dependencies': { + 'array-flatten': { + 'version': '1.1.1', + 'resolved': 'https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz', + 'integrity': 'sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=' + } + } + }) + fetcher = bb.fetch.Fetch(['npmsw://' + swfile], self.d) + fetcher.download() + self.assertTrue(os.path.exists(ud.localpath)) + + @skipIfNoNpm() + @skipIfNoNetwork() + def test_npmsw_mirrors(self): + # Fetch once to get a tarball + fetcher = bb.fetch.Fetch(['npm://registry.npmjs.org;package=array-flatten;version=1.1.1'], self.d) + ud = fetcher.ud[fetcher.urls[0]] + fetcher.download() + self.assertTrue(os.path.exists(ud.localpath)) + # Setup the mirror + mirrordir = os.path.join(self.tempdir, 'mirror') + bb.utils.mkdirhier(mirrordir) + os.replace(ud.localpath, os.path.join(mirrordir, os.path.basename(ud.localpath))) + self.d.setVar('MIRRORS', 'https?$://.*/.* file://%s/\n' % mirrordir) + # Fetch again with invalid url + self.assertFalse(os.path.exists(ud.localpath)) + swfile = self.create_shrinkwrap_file({ + 'dependencies': { + 'array-flatten': { + 'version': '1.1.1', + 'resolved': 'https://invalid', + 'integrity': 'sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=' + } + } + }) + fetcher = bb.fetch.Fetch(['npmsw://' + swfile], self.d) + fetcher.download() + self.assertTrue(os.path.exists(ud.localpath)) diff --git a/external/poky/bitbake/lib/bb/tests/parse.py b/external/poky/bitbake/lib/bb/tests/parse.py index 1bc47405..9afd1b20 100644 --- a/external/poky/bitbake/lib/bb/tests/parse.py +++ b/external/poky/bitbake/lib/bb/tests/parse.py @@ -1,22 +1,9 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # BitBake Test for lib/bb/parse/ # # Copyright (C) 2015 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# SPDX-License-Identifier: GPL-2.0-only # import unittest @@ -187,3 +174,21 @@ python () { self.assertEqual(d1.getVar("VAR_var"), "B") self.assertEqual(d2.getVar("VAR_var"), None) + addtask_deltask = """ +addtask do_patch after do_foo after do_unpack before do_configure before do_compile +addtask do_fetch do_patch + +deltask do_fetch do_patch +""" + def test_parse_addtask_deltask(self): + import sys + f = self.parsehelper(self.addtask_deltask) + d = bb.parse.handle(f.name, self.d)[''] + + stdout = sys.stdout.getvalue() + self.assertTrue("addtask contained multiple 'before' keywords" in stdout) + self.assertTrue("addtask contained multiple 'after' keywords" in stdout) + self.assertTrue('addtask ignored: " do_patch"' in stdout) + self.assertTrue('deltask ignored: " do_patch"' in stdout) + #self.assertTrue('dependent task do_foo for do_patch does not exist' in stdout) + diff --git a/external/poky/bitbake/lib/bb/tests/persist_data.py b/external/poky/bitbake/lib/bb/tests/persist_data.py new file mode 100644 index 00000000..f641b5ac --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/persist_data.py @@ -0,0 +1,129 @@ +# +# BitBake Test for lib/bb/persist_data/ +# +# Copyright (C) 2018 Garmin Ltd. +# +# SPDX-License-Identifier: GPL-2.0-only +# + +import unittest +import bb.data +import bb.persist_data +import tempfile +import threading + +class PersistDataTest(unittest.TestCase): + def _create_data(self): + return bb.persist_data.persist('TEST_PERSIST_DATA', self.d) + + def setUp(self): + self.d = bb.data.init() + self.tempdir = tempfile.TemporaryDirectory() + self.d['PERSISTENT_DIR'] = self.tempdir.name + self.data = self._create_data() + self.items = { + 'A1': '1', + 'B1': '2', + 'C2': '3' + } + self.stress_count = 10000 + self.thread_count = 5 + + for k,v in self.items.items(): + self.data[k] = v + + def tearDown(self): + self.tempdir.cleanup() + + def _iter_helper(self, seen, iterator): + with iter(iterator): + for v in iterator: + self.assertTrue(v in seen) + seen.remove(v) + self.assertEqual(len(seen), 0, '%s not seen' % seen) + + def test_get(self): + for k, v in self.items.items(): + self.assertEqual(self.data[k], v) + + self.assertIsNone(self.data.get('D')) + with self.assertRaises(KeyError): + self.data['D'] + + def test_set(self): + for k, v in self.items.items(): + self.data[k] += '-foo' + + for k, v in self.items.items(): + self.assertEqual(self.data[k], v + '-foo') + + def test_delete(self): + self.data['D'] = '4' + self.assertEqual(self.data['D'], '4') + del self.data['D'] + self.assertIsNone(self.data.get('D')) + with self.assertRaises(KeyError): + self.data['D'] + + def test_contains(self): + for k in self.items: + self.assertTrue(k in self.data) + self.assertTrue(self.data.has_key(k)) + self.assertFalse('NotFound' in self.data) + self.assertFalse(self.data.has_key('NotFound')) + + def test_len(self): + self.assertEqual(len(self.data), len(self.items)) + + def test_iter(self): + self._iter_helper(set(self.items.keys()), self.data) + + def test_itervalues(self): + self._iter_helper(set(self.items.values()), self.data.itervalues()) + + def test_iteritems(self): + self._iter_helper(set(self.items.items()), self.data.iteritems()) + + def test_get_by_pattern(self): + self._iter_helper({'1', '2'}, self.data.get_by_pattern('_1')) + + def _stress_read(self, data): + for i in range(self.stress_count): + for k in self.items: + data[k] + + def _stress_write(self, data): + for i in range(self.stress_count): + for k, v in self.items.items(): + data[k] = v + str(i) + + def _validate_stress(self): + for k, v in self.items.items(): + self.assertEqual(self.data[k], v + str(self.stress_count - 1)) + + def test_stress(self): + self._stress_read(self.data) + self._stress_write(self.data) + self._validate_stress() + + def test_stress_threads(self): + def read_thread(): + data = self._create_data() + self._stress_read(data) + + def write_thread(): + data = self._create_data() + self._stress_write(data) + + threads = [] + for i in range(self.thread_count): + threads.append(threading.Thread(target=read_thread)) + threads.append(threading.Thread(target=write_thread)) + + for t in threads: + t.start() + self._stress_read(self.data) + for t in threads: + t.join() + self._validate_stress() + diff --git a/external/poky/bitbake/lib/bb/tests/runqueue-tests/classes/base.bbclass b/external/poky/bitbake/lib/bb/tests/runqueue-tests/classes/base.bbclass new file mode 100644 index 00000000..b57650d5 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/runqueue-tests/classes/base.bbclass @@ -0,0 +1,262 @@ +SLOWTASKS ??= "" +SSTATEVALID ??= "" + +def stamptask(d): + import time + + thistask = d.expand("${PN}:${BB_CURRENTTASK}") + stampname = d.expand("${TOPDIR}/%s.run" % thistask) + with open(stampname, "a+") as f: + f.write(d.getVar("BB_UNIHASH") + "\n") + + if d.getVar("BB_CURRENT_MC") != "default": + thistask = d.expand("${BB_CURRENT_MC}:${PN}:${BB_CURRENTTASK}") + if thistask in d.getVar("SLOWTASKS").split(): + bb.note("Slowing task %s" % thistask) + time.sleep(0.5) + if d.getVar("BB_HASHSERVE"): + task = d.getVar("BB_CURRENTTASK") + if task in ['package', 'package_qa', 'packagedata', 'package_write_ipk', 'package_write_rpm', 'populate_lic', 'populate_sysroot']: + bb.parse.siggen.report_unihash(os.getcwd(), d.getVar("BB_CURRENTTASK"), d) + + with open(d.expand("${TOPDIR}/task.log"), "a+") as f: + f.write(thistask + "\n") + + +def sstate_output_hash(path, sigfile, task, d): + import hashlib + h = hashlib.sha256() + h.update(d.expand("${PN}:${BB_CURRENTTASK}").encode('utf-8')) + return h.hexdigest() + +python do_fetch() { + # fetch + stamptask(d) +} +python do_unpack() { + # unpack + stamptask(d) +} +python do_patch() { + # patch + stamptask(d) +} +python do_populate_lic() { + # populate_lic + stamptask(d) +} +python do_prepare_recipe_sysroot() { + # prepare_recipe_sysroot + stamptask(d) +} +python do_configure() { + # configure + stamptask(d) +} +python do_compile() { + # compile + stamptask(d) +} +python do_install() { + # install + stamptask(d) +} +python do_populate_sysroot() { + # populate_sysroot + stamptask(d) +} +python do_package() { + # package + stamptask(d) +} +python do_package_write_ipk() { + # package_write_ipk + stamptask(d) +} +python do_package_write_rpm() { + # package_write_rpm + stamptask(d) +} +python do_packagedata() { + # packagedata + stamptask(d) +} +python do_package_qa() { + # package_qa + stamptask(d) +} +python do_build() { + # build + stamptask(d) +} +do_prepare_recipe_sysroot[deptask] = "do_populate_sysroot" +do_package[deptask] += "do_packagedata" +do_build[recrdeptask] += "do_deploy" +do_build[recrdeptask] += "do_package_write_ipk" +do_build[recrdeptask] += "do_package_write_rpm" +do_package_qa[rdeptask] = "do_packagedata" +do_populate_lic_deploy[recrdeptask] += "do_populate_lic do_deploy" + +DEBIANRDEP = "do_packagedata" +oo_package_write_ipk[rdeptask] = "${DEBIANRDEP}" +do_package_write_rpm[rdeptask] = "${DEBIANRDEP}" + +addtask fetch +addtask unpack after do_fetch +addtask patch after do_unpack +addtask prepare_recipe_sysroot after do_patch +addtask configure after do_prepare_recipe_sysroot +addtask compile after do_configure +addtask install after do_compile +addtask populate_sysroot after do_install +addtask package after do_install +addtask package_write_ipk after do_packagedata do_package +addtask package_write_rpm after do_packagedata do_package +addtask packagedata after do_package +addtask package_qa after do_package +addtask build after do_package_qa do_package_write_rpm do_package_write_ipk do_populate_sysroot + +python do_package_setscene() { + stamptask(d) +} +python do_package_qa_setscene() { + stamptask(d) +} +python do_package_write_ipk_setscene() { + stamptask(d) +} +python do_package_write_rpm_setscene() { + stamptask(d) +} +python do_packagedata_setscene() { + stamptask(d) +} +python do_populate_lic_setscene() { + stamptask(d) +} +python do_populate_sysroot_setscene() { + stamptask(d) +} + +addtask package_setscene +addtask package_qa_setscene +addtask package_write_ipk_setscene +addtask package_write_rpm_setscene +addtask packagedata_setscene +addtask populate_lic_setscene +addtask populate_sysroot_setscene + +BB_SETSCENE_DEPVALID = "setscene_depvalid" + +def setscene_depvalid(task, taskdependees, notneeded, d, log=None): + # taskdependees is a dict of tasks which depend on task, each being a 3 item list of [PN, TASKNAME, FILENAME] + # task is included in taskdependees too + # Return - False - We need this dependency + # - True - We can skip this dependency + import re + + def logit(msg, log): + if log is not None: + log.append(msg) + else: + bb.debug(2, msg) + + logit("Considering setscene task: %s" % (str(taskdependees[task])), log) + + def isNativeCross(x): + return x.endswith("-native") or "-cross-" in x or "-crosssdk" in x or x.endswith("-cross") + + # We only need to trigger populate_lic through direct dependencies + if taskdependees[task][1] == "do_populate_lic": + return True + + # We only need to trigger packagedata through direct dependencies + # but need to preserve packagedata on packagedata links + if taskdependees[task][1] == "do_packagedata": + for dep in taskdependees: + if taskdependees[dep][1] == "do_packagedata": + return False + return True + + for dep in taskdependees: + logit(" considering dependency: %s" % (str(taskdependees[dep])), log) + if task == dep: + continue + if dep in notneeded: + continue + # do_package_write_* and do_package doesn't need do_package + if taskdependees[task][1] == "do_package" and taskdependees[dep][1] in ['do_package', 'do_package_write_ipk', 'do_package_write_rpm', 'do_packagedata', 'do_package_qa']: + continue + # do_package_write_* need do_populate_sysroot as they're mainly postinstall dependencies + if taskdependees[task][1] == "do_populate_sysroot" and taskdependees[dep][1] in ['do_package_write_ipk', 'do_package_write_rpm']: + return False + # do_package/packagedata/package_qa don't need do_populate_sysroot + if taskdependees[task][1] == "do_populate_sysroot" and taskdependees[dep][1] in ['do_package', 'do_packagedata', 'do_package_qa']: + continue + # Native/Cross packages don't exist and are noexec anyway + if isNativeCross(taskdependees[dep][0]) and taskdependees[dep][1] in ['do_package_write_ipk', 'do_package_write_rpm', 'do_packagedata', 'do_package', 'do_package_qa']: + continue + + # This is due to the [depends] in useradd.bbclass complicating matters + # The logic *is* reversed here due to the way hard setscene dependencies are injected + if (taskdependees[task][1] == 'do_package' or taskdependees[task][1] == 'do_populate_sysroot') and taskdependees[dep][0].endswith(('shadow-native', 'shadow-sysroot', 'base-passwd', 'pseudo-native')) and taskdependees[dep][1] == 'do_populate_sysroot': + continue + + # Consider sysroot depending on sysroot tasks + if taskdependees[task][1] == 'do_populate_sysroot' and taskdependees[dep][1] == 'do_populate_sysroot': + # Native/Cross populate_sysroot need their dependencies + if isNativeCross(taskdependees[task][0]) and isNativeCross(taskdependees[dep][0]): + return False + # Target populate_sysroot depended on by cross tools need to be installed + if isNativeCross(taskdependees[dep][0]): + return False + # Native/cross tools depended upon by target sysroot are not needed + # Add an exception for shadow-native as required by useradd.bbclass + if isNativeCross(taskdependees[task][0]) and taskdependees[task][0] != 'shadow-native': + continue + # Target populate_sysroot need their dependencies + return False + + + if taskdependees[dep][1] == "do_populate_lic": + continue + + # Safe fallthrough default + logit(" Default setscene dependency fall through due to dependency: %s" % (str(taskdependees[dep])), log) + return False + return True + +BB_HASHCHECK_FUNCTION = "sstate_checkhashes" + +def sstate_checkhashes(sq_data, d, siginfo=False, currentcount=0, **kwargs): + + found = set() + missed = set() + + valid = d.getVar("SSTATEVALID").split() + + for tid in sorted(sq_data['hash']): + n = os.path.basename(bb.runqueue.fn_from_tid(tid)).split(".")[0] + ":do_" + bb.runqueue.taskname_from_tid(tid)[3:] + print(n) + stampfile = d.expand("${TOPDIR}/%s.run" % n.replace("do_", "")) + if n in valid: + bb.note("SState: Found valid sstate for %s" % n) + found.add(tid) + elif n + ":" + sq_data['hash'][tid] in valid: + bb.note("SState: Found valid sstate for %s" % n) + found.add(tid) + elif os.path.exists(stampfile): + with open(stampfile, "r") as f: + hash = f.readline().strip() + if hash == sq_data['hash'][tid]: + bb.note("SState: Found valid sstate for %s (already run)" % n) + found.add(tid) + else: + bb.note("SState: sstate hash didn't match previous run for %s (%s vs %s)" % (n, sq_data['hash'][tid], hash)) + missed.add(tid) + else: + missed.add(tid) + bb.note("SState: Found no valid sstate for %s (%s)" % (n, sq_data['hash'][tid])) + + return found + diff --git a/external/poky/bitbake/lib/bb/tests/runqueue-tests/classes/image.bbclass b/external/poky/bitbake/lib/bb/tests/runqueue-tests/classes/image.bbclass new file mode 100644 index 00000000..da9ff110 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/runqueue-tests/classes/image.bbclass @@ -0,0 +1,5 @@ +do_rootfs[recrdeptask] += "do_package_write_deb do_package_qa" +do_rootfs[recrdeptask] += "do_package_write_ipk do_package_qa" +do_rootfs[recrdeptask] += "do_package_write_rpm do_package_qa +do_rootfs[recrdeptask] += "do_packagedata" +do_rootfs[recrdeptask] += "do_populate_lic" diff --git a/external/poky/bitbake/lib/bb/tests/runqueue-tests/classes/native.bbclass b/external/poky/bitbake/lib/bb/tests/runqueue-tests/classes/native.bbclass new file mode 100644 index 00000000..7eaaee54 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/runqueue-tests/classes/native.bbclass @@ -0,0 +1,2 @@ +RECIPERDEPTASK = "do_populate_sysroot" +do_populate_sysroot[rdeptask] = "${RECIPERDEPTASK}" diff --git a/external/poky/bitbake/lib/bb/tests/runqueue-tests/conf/bitbake.conf b/external/poky/bitbake/lib/bb/tests/runqueue-tests/conf/bitbake.conf new file mode 100644 index 00000000..5e451fc2 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/runqueue-tests/conf/bitbake.conf @@ -0,0 +1,16 @@ +CACHE = "${TOPDIR}/cache" +THISDIR = "${@os.path.dirname(d.getVar('FILE'))}" +COREBASE := "${@os.path.normpath(os.path.dirname(d.getVar('FILE')+'/../../'))}" +BBFILES = "${COREBASE}/recipes/*.bb" +PROVIDES = "${PN}" +PN = "${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[0]}" +PF = "${BB_CURRENT_MC}:${PN}" +export PATH +TMPDIR ??= "${TOPDIR}" +STAMP = "${TMPDIR}/stamps/${PN}" +T = "${TMPDIR}/workdir/${PN}/temp" +BB_NUMBER_THREADS = "4" + +BB_HASHBASE_WHITELIST = "BB_CURRENT_MC BB_HASHSERVE TMPDIR TOPDIR SLOWTASKS SSTATEVALID FILE" + +include conf/multiconfig/${BB_CURRENT_MC}.conf diff --git a/external/poky/bitbake/lib/bb/tests/runqueue-tests/conf/multiconfig/mc1.conf b/external/poky/bitbake/lib/bb/tests/runqueue-tests/conf/multiconfig/mc1.conf new file mode 100644 index 00000000..ecf23e1c --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/runqueue-tests/conf/multiconfig/mc1.conf @@ -0,0 +1 @@ +TMPDIR = "${TOPDIR}/mc1/" diff --git a/external/poky/bitbake/lib/bb/tests/runqueue-tests/conf/multiconfig/mc2.conf b/external/poky/bitbake/lib/bb/tests/runqueue-tests/conf/multiconfig/mc2.conf new file mode 100644 index 00000000..eef338e4 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/runqueue-tests/conf/multiconfig/mc2.conf @@ -0,0 +1 @@ +TMPDIR = "${TOPDIR}/mc2/" diff --git a/external/poky/bitbake/lib/bb/tests/runqueue-tests/recipes/a1.bb b/external/poky/bitbake/lib/bb/tests/runqueue-tests/recipes/a1.bb new file mode 100644 index 00000000..e69de29b diff --git a/external/poky/bitbake/lib/bb/tests/runqueue-tests/recipes/b1.bb b/external/poky/bitbake/lib/bb/tests/runqueue-tests/recipes/b1.bb new file mode 100644 index 00000000..c0b288e5 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/runqueue-tests/recipes/b1.bb @@ -0,0 +1 @@ +DEPENDS = "a1" \ No newline at end of file diff --git a/external/poky/bitbake/lib/bb/tests/runqueue-tests/recipes/c1.bb b/external/poky/bitbake/lib/bb/tests/runqueue-tests/recipes/c1.bb new file mode 100644 index 00000000..e69de29b diff --git a/external/poky/bitbake/lib/bb/tests/runqueue-tests/recipes/d1.bb b/external/poky/bitbake/lib/bb/tests/runqueue-tests/recipes/d1.bb new file mode 100644 index 00000000..5ba19751 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/runqueue-tests/recipes/d1.bb @@ -0,0 +1,3 @@ +DEPENDS = "a1" + +do_package_setscene[depends] = "a1:do_populate_sysroot_setscene" diff --git a/external/poky/bitbake/lib/bb/tests/runqueue-tests/recipes/e1.bb b/external/poky/bitbake/lib/bb/tests/runqueue-tests/recipes/e1.bb new file mode 100644 index 00000000..1588bc8a --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/runqueue-tests/recipes/e1.bb @@ -0,0 +1 @@ +DEPENDS = "b1" \ No newline at end of file diff --git a/external/poky/bitbake/lib/bb/tests/runqueue.py b/external/poky/bitbake/lib/bb/tests/runqueue.py new file mode 100644 index 00000000..4ba12a07 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/runqueue.py @@ -0,0 +1,322 @@ +# +# BitBake Tests for runqueue task processing +# +# Copyright (C) 2019 Richard Purdie +# +# SPDX-License-Identifier: GPL-2.0-only +# + +import unittest +import os +import tempfile +import subprocess +import sys +import time + +# +# TODO: +# Add tests on task ordering (X happens before Y after Z) +# + +class RunQueueTests(unittest.TestCase): + + alltasks = ['package', 'fetch', 'unpack', 'patch', 'prepare_recipe_sysroot', 'configure', + 'compile', 'install', 'packagedata', 'package_qa', 'package_write_rpm', 'package_write_ipk', + 'populate_sysroot', 'build'] + a1_sstatevalid = "a1:do_package a1:do_package_qa a1:do_packagedata a1:do_package_write_ipk a1:do_package_write_rpm a1:do_populate_lic a1:do_populate_sysroot" + b1_sstatevalid = "b1:do_package b1:do_package_qa b1:do_packagedata b1:do_package_write_ipk b1:do_package_write_rpm b1:do_populate_lic b1:do_populate_sysroot" + + def run_bitbakecmd(self, cmd, builddir, sstatevalid="", slowtasks="", extraenv=None, cleanup=False): + env = os.environ.copy() + env["BBPATH"] = os.path.realpath(os.path.join(os.path.dirname(__file__), "runqueue-tests")) + env["BB_ENV_EXTRAWHITE"] = "SSTATEVALID SLOWTASKS" + env["SSTATEVALID"] = sstatevalid + env["SLOWTASKS"] = slowtasks + if extraenv: + for k in extraenv: + env[k] = extraenv[k] + env["BB_ENV_EXTRAWHITE"] = env["BB_ENV_EXTRAWHITE"] + " " + k + try: + output = subprocess.check_output(cmd, env=env, stderr=subprocess.STDOUT,universal_newlines=True, cwd=builddir) + print(output) + except subprocess.CalledProcessError as e: + self.fail("Command %s failed with %s" % (cmd, e.output)) + tasks = [] + tasklog = builddir + "/task.log" + if os.path.exists(tasklog): + with open(tasklog, "r") as f: + tasks = [line.rstrip() for line in f] + if cleanup: + os.remove(tasklog) + return tasks + + def test_no_setscenevalid(self): + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + cmd = ["bitbake", "a1"] + sstatevalid = "" + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid) + expected = ['a1:' + x for x in self.alltasks] + self.assertEqual(set(tasks), set(expected)) + + def test_single_setscenevalid(self): + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + cmd = ["bitbake", "a1"] + sstatevalid = "a1:do_package" + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid) + expected = ['a1:package_setscene', 'a1:fetch', 'a1:unpack', 'a1:patch', 'a1:prepare_recipe_sysroot', 'a1:configure', + 'a1:compile', 'a1:install', 'a1:packagedata', 'a1:package_qa', 'a1:package_write_rpm', 'a1:package_write_ipk', + 'a1:populate_sysroot', 'a1:build'] + self.assertEqual(set(tasks), set(expected)) + + def test_intermediate_setscenevalid(self): + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + cmd = ["bitbake", "a1"] + sstatevalid = "a1:do_package a1:do_populate_sysroot" + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid) + expected = ['a1:package_setscene', 'a1:packagedata', 'a1:package_qa', 'a1:package_write_rpm', 'a1:package_write_ipk', + 'a1:populate_sysroot_setscene', 'a1:build'] + self.assertEqual(set(tasks), set(expected)) + + def test_intermediate_notcovered(self): + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + cmd = ["bitbake", "a1"] + sstatevalid = "a1:do_package_qa a1:do_packagedata a1:do_package_write_ipk a1:do_package_write_rpm a1:do_populate_lic a1:do_populate_sysroot" + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid) + expected = ['a1:package_write_ipk_setscene', 'a1:package_write_rpm_setscene', 'a1:packagedata_setscene', + 'a1:package_qa_setscene', 'a1:build', 'a1:populate_sysroot_setscene'] + self.assertEqual(set(tasks), set(expected)) + + def test_all_setscenevalid(self): + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + cmd = ["bitbake", "a1"] + sstatevalid = self.a1_sstatevalid + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid) + expected = ['a1:package_write_ipk_setscene', 'a1:package_write_rpm_setscene', 'a1:packagedata_setscene', + 'a1:package_qa_setscene', 'a1:build', 'a1:populate_sysroot_setscene'] + self.assertEqual(set(tasks), set(expected)) + + def test_no_settasks(self): + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + cmd = ["bitbake", "a1", "-c", "patch"] + sstatevalid = self.a1_sstatevalid + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid) + expected = ['a1:fetch', 'a1:unpack', 'a1:patch'] + self.assertEqual(set(tasks), set(expected)) + + def test_mix_covered_notcovered(self): + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + cmd = ["bitbake", "a1:do_patch", "a1:do_populate_sysroot"] + sstatevalid = self.a1_sstatevalid + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid) + expected = ['a1:fetch', 'a1:unpack', 'a1:patch', 'a1:populate_sysroot_setscene'] + self.assertEqual(set(tasks), set(expected)) + + + # Test targets with intermediate setscene tasks alongside a target with no intermediate setscene tasks + def test_mixed_direct_tasks_setscene_tasks(self): + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + cmd = ["bitbake", "c1:do_patch", "a1"] + sstatevalid = self.a1_sstatevalid + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid) + expected = ['c1:fetch', 'c1:unpack', 'c1:patch', 'a1:package_write_ipk_setscene', 'a1:package_write_rpm_setscene', 'a1:packagedata_setscene', + 'a1:package_qa_setscene', 'a1:build', 'a1:populate_sysroot_setscene'] + self.assertEqual(set(tasks), set(expected)) + + # This test slows down the execution of do_package_setscene until after other real tasks have + # started running which tests for a bug where tasks were being lost from the buildable list of real + # tasks if they weren't in tasks_covered or tasks_notcovered + def test_slow_setscene(self): + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + cmd = ["bitbake", "a1"] + sstatevalid = "a1:do_package" + slowtasks = "a1:package_setscene" + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, slowtasks) + expected = ['a1:package_setscene', 'a1:fetch', 'a1:unpack', 'a1:patch', 'a1:prepare_recipe_sysroot', 'a1:configure', + 'a1:compile', 'a1:install', 'a1:packagedata', 'a1:package_qa', 'a1:package_write_rpm', 'a1:package_write_ipk', + 'a1:populate_sysroot', 'a1:build'] + self.assertEqual(set(tasks), set(expected)) + + def test_setscenewhitelist(self): + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + cmd = ["bitbake", "a1"] + extraenv = { + "BB_SETSCENE_ENFORCE" : "1", + "BB_SETSCENE_ENFORCE_WHITELIST" : "a1:do_package_write_rpm a1:do_build" + } + sstatevalid = "a1:do_package a1:do_package_qa a1:do_packagedata a1:do_package_write_ipk a1:do_populate_lic a1:do_populate_sysroot" + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv) + expected = ['a1:packagedata_setscene', 'a1:package_qa_setscene', 'a1:package_write_ipk_setscene', + 'a1:populate_sysroot_setscene', 'a1:package_setscene'] + self.assertEqual(set(tasks), set(expected)) + + # Tests for problems with dependencies between setscene tasks + def test_no_setscenevalid_harddeps(self): + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + cmd = ["bitbake", "d1"] + sstatevalid = "" + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid) + expected = ['a1:package', 'a1:fetch', 'a1:unpack', 'a1:patch', 'a1:prepare_recipe_sysroot', 'a1:configure', + 'a1:compile', 'a1:install', 'a1:packagedata', 'a1:package_write_rpm', 'a1:package_write_ipk', + 'a1:populate_sysroot', 'd1:package', 'd1:fetch', 'd1:unpack', 'd1:patch', 'd1:prepare_recipe_sysroot', 'd1:configure', + 'd1:compile', 'd1:install', 'd1:packagedata', 'd1:package_qa', 'd1:package_write_rpm', 'd1:package_write_ipk', + 'd1:populate_sysroot', 'd1:build'] + self.assertEqual(set(tasks), set(expected)) + + def test_no_setscenevalid_withdeps(self): + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + cmd = ["bitbake", "b1"] + sstatevalid = "" + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid) + expected = ['a1:' + x for x in self.alltasks] + ['b1:' + x for x in self.alltasks] + expected.remove('a1:build') + expected.remove('a1:package_qa') + self.assertEqual(set(tasks), set(expected)) + + def test_single_a1_setscenevalid_withdeps(self): + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + cmd = ["bitbake", "b1"] + sstatevalid = "a1:do_package" + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid) + expected = ['a1:package_setscene', 'a1:fetch', 'a1:unpack', 'a1:patch', 'a1:prepare_recipe_sysroot', 'a1:configure', + 'a1:compile', 'a1:install', 'a1:packagedata', 'a1:package_write_rpm', 'a1:package_write_ipk', + 'a1:populate_sysroot'] + ['b1:' + x for x in self.alltasks] + self.assertEqual(set(tasks), set(expected)) + + def test_single_b1_setscenevalid_withdeps(self): + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + cmd = ["bitbake", "b1"] + sstatevalid = "b1:do_package" + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid) + expected = ['a1:package', 'a1:fetch', 'a1:unpack', 'a1:patch', 'a1:prepare_recipe_sysroot', 'a1:configure', + 'a1:compile', 'a1:install', 'a1:packagedata', 'a1:package_write_rpm', 'a1:package_write_ipk', + 'a1:populate_sysroot', 'b1:package_setscene'] + ['b1:' + x for x in self.alltasks] + expected.remove('b1:package') + self.assertEqual(set(tasks), set(expected)) + + def test_intermediate_setscenevalid_withdeps(self): + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + cmd = ["bitbake", "b1"] + sstatevalid = "a1:do_package a1:do_populate_sysroot b1:do_package" + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid) + expected = ['a1:package_setscene', 'a1:packagedata', 'a1:package_write_rpm', 'a1:package_write_ipk', + 'a1:populate_sysroot_setscene', 'b1:package_setscene'] + ['b1:' + x for x in self.alltasks] + expected.remove('b1:package') + self.assertEqual(set(tasks), set(expected)) + + def test_all_setscenevalid_withdeps(self): + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + cmd = ["bitbake", "b1"] + sstatevalid = self.a1_sstatevalid + " " + self.b1_sstatevalid + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid) + expected = ['a1:package_write_ipk_setscene', 'a1:package_write_rpm_setscene', 'a1:packagedata_setscene', + 'b1:build', 'a1:populate_sysroot_setscene', 'b1:package_write_ipk_setscene', 'b1:package_write_rpm_setscene', + 'b1:packagedata_setscene', 'b1:package_qa_setscene', 'b1:populate_sysroot_setscene'] + self.assertEqual(set(tasks), set(expected)) + + def test_multiconfig_setscene_optimise(self): + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + extraenv = { + "BBMULTICONFIG" : "mc1 mc2", + "BB_SIGNATURE_HANDLER" : "basic" + } + cmd = ["bitbake", "b1", "mc:mc1:b1", "mc:mc2:b1"] + setscenetasks = ['package_write_ipk_setscene', 'package_write_rpm_setscene', 'packagedata_setscene', + 'populate_sysroot_setscene', 'package_qa_setscene'] + sstatevalid = "" + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv) + expected = ['a1:' + x for x in self.alltasks] + ['b1:' + x for x in self.alltasks] + \ + ['mc1:b1:' + x for x in setscenetasks] + ['mc1:a1:' + x for x in setscenetasks] + \ + ['mc2:b1:' + x for x in setscenetasks] + ['mc2:a1:' + x for x in setscenetasks] + \ + ['mc1:b1:build', 'mc2:b1:build'] + for x in ['mc1:a1:package_qa_setscene', 'mc2:a1:package_qa_setscene', 'a1:build', 'a1:package_qa']: + expected.remove(x) + self.assertEqual(set(tasks), set(expected)) + + + @unittest.skipIf(sys.version_info < (3, 5, 0), 'Python 3.5 or later required') + def test_hashserv_single(self): + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + extraenv = { + "BB_HASHSERVE" : "auto", + "BB_SIGNATURE_HANDLER" : "TestEquivHash" + } + cmd = ["bitbake", "a1", "b1"] + setscenetasks = ['package_write_ipk_setscene', 'package_write_rpm_setscene', 'packagedata_setscene', + 'populate_sysroot_setscene', 'package_qa_setscene'] + sstatevalid = "" + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True) + expected = ['a1:' + x for x in self.alltasks] + ['b1:' + x for x in self.alltasks] + self.assertEqual(set(tasks), set(expected)) + cmd = ["bitbake", "a1", "-c", "install", "-f"] + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True) + expected = ['a1:install'] + self.assertEqual(set(tasks), set(expected)) + cmd = ["bitbake", "a1", "b1"] + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True) + expected = ['a1:populate_sysroot', 'a1:package', 'a1:package_write_rpm_setscene', 'a1:packagedata_setscene', + 'a1:package_write_ipk_setscene', 'a1:package_qa_setscene', 'a1:build'] + self.assertEqual(set(tasks), set(expected)) + + self.shutdown(tempdir) + + @unittest.skipIf(sys.version_info < (3, 5, 0), 'Python 3.5 or later required') + def test_hashserv_double(self): + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + extraenv = { + "BB_HASHSERVE" : "auto", + "BB_SIGNATURE_HANDLER" : "TestEquivHash" + } + cmd = ["bitbake", "a1", "b1", "e1"] + setscenetasks = ['package_write_ipk_setscene', 'package_write_rpm_setscene', 'packagedata_setscene', + 'populate_sysroot_setscene', 'package_qa_setscene'] + sstatevalid = "" + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True) + expected = ['a1:' + x for x in self.alltasks] + ['b1:' + x for x in self.alltasks] + ['e1:' + x for x in self.alltasks] + self.assertEqual(set(tasks), set(expected)) + cmd = ["bitbake", "a1", "b1", "-c", "install", "-fn"] + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True) + cmd = ["bitbake", "e1"] + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True) + expected = ['a1:package', 'a1:install', 'b1:package', 'b1:install', 'a1:populate_sysroot', 'b1:populate_sysroot', + 'a1:package_write_ipk_setscene', 'b1:packagedata_setscene', 'b1:package_write_rpm_setscene', + 'a1:package_write_rpm_setscene', 'b1:package_write_ipk_setscene', 'a1:packagedata_setscene'] + self.assertEqual(set(tasks), set(expected)) + + self.shutdown(tempdir) + + @unittest.skipIf(sys.version_info < (3, 5, 0), 'Python 3.5 or later required') + def test_hashserv_multiple_setscene(self): + # Runs e1:do_package_setscene twice + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + extraenv = { + "BB_HASHSERVE" : "auto", + "BB_SIGNATURE_HANDLER" : "TestEquivHash" + } + cmd = ["bitbake", "a1", "b1", "e1"] + setscenetasks = ['package_write_ipk_setscene', 'package_write_rpm_setscene', 'packagedata_setscene', + 'populate_sysroot_setscene', 'package_qa_setscene'] + sstatevalid = "" + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True) + expected = ['a1:' + x for x in self.alltasks] + ['b1:' + x for x in self.alltasks] + ['e1:' + x for x in self.alltasks] + self.assertEqual(set(tasks), set(expected)) + cmd = ["bitbake", "a1", "b1", "-c", "install", "-fn"] + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True) + cmd = ["bitbake", "e1"] + sstatevalid = "e1:do_package" + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid, extraenv=extraenv, cleanup=True, slowtasks="a1:populate_sysroot b1:populate_sysroot") + expected = ['a1:package', 'a1:install', 'b1:package', 'b1:install', 'a1:populate_sysroot', 'b1:populate_sysroot', + 'a1:package_write_ipk_setscene', 'b1:packagedata_setscene', 'b1:package_write_rpm_setscene', + 'a1:package_write_rpm_setscene', 'b1:package_write_ipk_setscene', 'a1:packagedata_setscene', + 'e1:package_setscene'] + self.assertEqual(set(tasks), set(expected)) + for i in expected: + self.assertEqual(tasks.count(i), 1, "%s not in task list once" % i) + + self.shutdown(tempdir) + + def shutdown(self, tempdir): + # Wait for the hashserve socket to disappear else we'll see races with the tempdir cleanup + while os.path.exists(tempdir + "/hashserve.sock"): + time.sleep(0.5) + + diff --git a/external/poky/bitbake/lib/bb/tests/support/httpserver.py b/external/poky/bitbake/lib/bb/tests/support/httpserver.py new file mode 100644 index 00000000..78f76600 --- /dev/null +++ b/external/poky/bitbake/lib/bb/tests/support/httpserver.py @@ -0,0 +1,65 @@ +# +# SPDX-License-Identifier: MIT +# + +import http.server +import multiprocessing +import os +import traceback +import signal +import logging +from socketserver import ThreadingMixIn + +class HTTPServer(ThreadingMixIn, http.server.HTTPServer): + + def server_start(self, root_dir, logger): + os.chdir(root_dir) + self.serve_forever() + +class HTTPRequestHandler(http.server.SimpleHTTPRequestHandler): + + def log_message(self, format_str, *args): + pass + +class HTTPService(object): + + def __init__(self, root_dir, host='', port=0, logger=None): + self.root_dir = root_dir + self.host = host + self.port = port + if not logger: + logger = logging.getLogger() + self.logger = logger + + def start(self): + print(self.root_dir) + if not os.path.exists(self.root_dir): + self.logger.info("Not starting HTTPService for directory %s which doesn't exist" % (self.root_dir)) + return + + self.server = HTTPServer((self.host, self.port), HTTPRequestHandler) + if self.port == 0: + self.port = self.server.server_port + self.process = multiprocessing.Process(target=self.server.server_start, args=[self.root_dir, self.logger]) + + # The signal handler from testimage.bbclass can cause deadlocks here + # if the HTTPServer is terminated before it can restore the standard + #signal behaviour + orig = signal.getsignal(signal.SIGTERM) + signal.signal(signal.SIGTERM, signal.SIG_DFL) + self.process.start() + signal.signal(signal.SIGTERM, orig) + + if self.logger: + self.logger.info("Started HTTPService on %s:%s" % (self.host, self.port)) + + + def stop(self): + if hasattr(self, "server"): + self.server.server_close() + if hasattr(self, "process"): + self.process.terminate() + self.process.join() + if self.logger: + self.logger.info("Stopped HTTPService on %s:%s" % (self.host, self.port)) + diff --git a/external/poky/bitbake/lib/bb/tests/utils.py b/external/poky/bitbake/lib/bb/tests/utils.py index f1cd83a4..a7ff33db 100644 --- a/external/poky/bitbake/lib/bb/tests/utils.py +++ b/external/poky/bitbake/lib/bb/tests/utils.py @@ -1,22 +1,9 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # BitBake Tests for utils.py # # Copyright (C) 2012 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# SPDX-License-Identifier: GPL-2.0-only # import unittest @@ -42,6 +29,10 @@ class VerCmpString(unittest.TestCase): self.assertTrue(result < 0) result = bb.utils.vercmp_string('1.1', '1.0+1.1-beta1') self.assertTrue(result > 0) + result = bb.utils.vercmp_string('1a', '1a1') + self.assertTrue(result < 0) + result = bb.utils.vercmp_string('1a1', '1a') + self.assertTrue(result > 0) result = bb.utils.vercmp_string('1.', '1.1') self.assertTrue(result < 0) result = bb.utils.vercmp_string('1.1', '1.') @@ -112,6 +103,32 @@ class Path(unittest.TestCase): result = bb.utils._check_unsafe_delete_path(arg1) self.assertEqual(result, correctresult, '_check_unsafe_delete_path("%s") != %s' % (arg1, correctresult)) +class Checksum(unittest.TestCase): + filler = b"Shiver me timbers square-rigged spike Gold Road galleon bilge water boatswain wherry jack pirate. Mizzenmast rum lad Privateer jack salmagundi hang the jib piracy Pieces of Eight Corsair. Parrel marooned black spot yawl provost quarterdeck cable no prey, no pay spirits lateen sail." + + def test_md5(self): + import hashlib + with tempfile.NamedTemporaryFile() as f: + f.write(self.filler) + f.flush() + checksum = bb.utils.md5_file(f.name) + self.assertEqual(checksum, "bd572cd5de30a785f4efcb6eaf5089e3") + + def test_sha1(self): + import hashlib + with tempfile.NamedTemporaryFile() as f: + f.write(self.filler) + f.flush() + checksum = bb.utils.sha1_file(f.name) + self.assertEqual(checksum, "249eb8fd654732ea836d5e702d7aa567898eca71") + + def test_sha256(self): + import hashlib + with tempfile.NamedTemporaryFile() as f: + f.write(self.filler) + f.flush() + checksum = bb.utils.sha256_file(f.name) + self.assertEqual(checksum, "fcfbae8bf6b721dbb9d2dc6a9334a58f2031a9a9b302999243f99da4d7f12d0f") class EditMetadataFile(unittest.TestCase): _origfile = """ @@ -605,3 +622,47 @@ BBLAYERS += "/home/user/otherpath/layer6" ['/home/user/otherpath/layer6', '/home/user/path/layer3'], ['/home/user/path/layer1', '/home/user/path/layer4', '/home/user/path/layer7'], ['/home/user/path/layer3'], ['/home/user/path/layer7']) + + +class GetReferencedVars(unittest.TestCase): + def setUp(self): + self.d = bb.data.init() + + def check_referenced(self, expression, expected_layers): + vars = bb.utils.get_referenced_vars(expression, self.d) + + # Do the easy check first - is every variable accounted for? + expected_vars = set.union(set(), *expected_layers) + got_vars = set(vars) + self.assertSetEqual(got_vars, expected_vars) + + # Now test the order of the layers + start = 0 + for i, expected_layer in enumerate(expected_layers): + got_layer = set(vars[start:len(expected_layer)+start]) + start += len(expected_layer) + self.assertSetEqual(got_layer, expected_layer) + + def test_no_vars(self): + self.check_referenced("", []) + self.check_referenced(" ", []) + self.check_referenced(" no vars here! ", []) + + def test_single_layer(self): + self.check_referenced("${VAR}", [{"VAR"}]) + self.check_referenced("${VAR} ${VAR}", [{"VAR"}]) + + def test_two_layer(self): + self.d.setVar("VAR", "${B}") + self.check_referenced("${VAR}", [{"VAR"}, {"B"}]) + self.check_referenced("${@d.getVar('VAR')}", [{"VAR"}, {"B"}]) + + def test_more_complicated(self): + self.d["SRC_URI"] = "${QT_GIT}/${QT_MODULE}.git;name=${QT_MODULE};${QT_MODULE_BRANCH_PARAM};protocol=${QT_GIT_PROTOCOL}" + self.d["QT_GIT"] = "git://code.qt.io/${QT_GIT_PROJECT}" + self.d["QT_MODULE_BRANCH_PARAM"] = "branch=${QT_MODULE_BRANCH}" + self.d["QT_MODULE"] = "${BPN}" + self.d["BPN"] = "something to do with ${PN} and ${SPECIAL_PKGSUFFIX}" + + layers = [{"SRC_URI"}, {"QT_GIT", "QT_MODULE", "QT_MODULE_BRANCH_PARAM", "QT_GIT_PROTOCOL"}, {"QT_GIT_PROJECT", "QT_MODULE_BRANCH", "BPN"}, {"PN", "SPECIAL_PKGSUFFIX"}] + self.check_referenced("${SRC_URI}", layers) diff --git a/external/poky/bitbake/lib/bb/tinfoil.py b/external/poky/bitbake/lib/bb/tinfoil.py index 368264f3..8c9b6b8c 100644 --- a/external/poky/bitbake/lib/bb/tinfoil.py +++ b/external/poky/bitbake/lib/bb/tinfoil.py @@ -4,18 +4,8 @@ # Copyright (C) 2011 Mentor Graphics Corporation # Copyright (C) 2006-2012 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import logging import os @@ -23,6 +13,7 @@ import sys import atexit import re from collections import OrderedDict, defaultdict +from functools import partial import bb.cache import bb.cooker @@ -31,8 +22,8 @@ import bb.taskdata import bb.utils import bb.command import bb.remotedata -from bb.cookerdata import CookerConfiguration, ConfigParameters -from bb.main import setup_bitbake, BitBakeConfigParameters, BBMainException +from bb.cookerdata import CookerConfiguration +from bb.main import setup_bitbake, BitBakeConfigParameters import bb.fetch2 @@ -54,66 +45,69 @@ class TinfoilUIException(Exception): class TinfoilCommandFailed(Exception): """Exception raised when run_command fails""" +class TinfoilDataStoreConnectorVarHistory: + def __init__(self, tinfoil, dsindex): + self.tinfoil = tinfoil + self.dsindex = dsindex + + def remoteCommand(self, cmd, *args, **kwargs): + return self.tinfoil.run_command('dataStoreConnectorVarHistCmd', self.dsindex, cmd, args, kwargs) + + def __getattr__(self, name): + if not hasattr(bb.data_smart.VariableHistory, name): + raise AttributeError("VariableHistory has no such method %s" % name) + + newfunc = partial(self.remoteCommand, name) + setattr(self, name, newfunc) + return newfunc + +class TinfoilDataStoreConnectorIncHistory: + def __init__(self, tinfoil, dsindex): + self.tinfoil = tinfoil + self.dsindex = dsindex + + def remoteCommand(self, cmd, *args, **kwargs): + return self.tinfoil.run_command('dataStoreConnectorIncHistCmd', self.dsindex, cmd, args, kwargs) + + def __getattr__(self, name): + if not hasattr(bb.data_smart.IncludeHistory, name): + raise AttributeError("IncludeHistory has no such method %s" % name) + + newfunc = partial(self.remoteCommand, name) + setattr(self, name, newfunc) + return newfunc + class TinfoilDataStoreConnector: - """Connector object used to enable access to datastore objects via tinfoil""" + """ + Connector object used to enable access to datastore objects via tinfoil + Method calls are transmitted to the remote datastore for processing, if a datastore is + returned we return a connector object for the new store + """ def __init__(self, tinfoil, dsindex): self.tinfoil = tinfoil self.dsindex = dsindex - def getVar(self, name): - value = self.tinfoil.run_command('dataStoreConnectorFindVar', self.dsindex, name) - overrides = None - if isinstance(value, dict): - if '_connector_origtype' in value: - value['_content'] = self.tinfoil._reconvert_type(value['_content'], value['_connector_origtype']) - del value['_connector_origtype'] - if '_connector_overrides' in value: - overrides = value['_connector_overrides'] - del value['_connector_overrides'] - return value, overrides - def getKeys(self): - return set(self.tinfoil.run_command('dataStoreConnectorGetKeys', self.dsindex)) - def getVarHistory(self, name): - return self.tinfoil.run_command('dataStoreConnectorGetVarHistory', self.dsindex, name) - def expandPythonRef(self, varname, expr, d): - ds = bb.remotedata.RemoteDatastores.transmit_datastore(d) - ret = self.tinfoil.run_command('dataStoreConnectorExpandPythonRef', ds, varname, expr) + self.varhistory = TinfoilDataStoreConnectorVarHistory(tinfoil, dsindex) + self.inchistory = TinfoilDataStoreConnectorIncHistory(tinfoil, dsindex) + + def remoteCommand(self, cmd, *args, **kwargs): + ret = self.tinfoil.run_command('dataStoreConnectorCmd', self.dsindex, cmd, args, kwargs) + if isinstance(ret, bb.command.DataStoreConnectionHandle): + return TinfoilDataStoreConnector(self.tinfoil, ret.dsindex) return ret - def setVar(self, varname, value): - if self.dsindex is None: - self.tinfoil.run_command('setVariable', varname, value) - else: - # Not currently implemented - indicate that setting should - # be redirected to local side - return True - def setVarFlag(self, varname, flagname, value): - if self.dsindex is None: - self.tinfoil.run_command('dataStoreConnectorSetVarFlag', self.dsindex, varname, flagname, value) - else: - # Not currently implemented - indicate that setting should - # be redirected to local side - return True - def delVar(self, varname): - if self.dsindex is None: - self.tinfoil.run_command('dataStoreConnectorDelVar', self.dsindex, varname) - else: - # Not currently implemented - indicate that setting should - # be redirected to local side - return True - def delVarFlag(self, varname, flagname): - if self.dsindex is None: - self.tinfoil.run_command('dataStoreConnectorDelVar', self.dsindex, varname, flagname) - else: - # Not currently implemented - indicate that setting should - # be redirected to local side - return True - def renameVar(self, name, newname): - if self.dsindex is None: - self.tinfoil.run_command('dataStoreConnectorRenameVar', self.dsindex, name, newname) - else: - # Not currently implemented - indicate that setting should - # be redirected to local side - return True + + def __getattr__(self, name): + if not hasattr(bb.data._dict_type, name): + raise AttributeError("Data store has no such method %s" % name) + + newfunc = partial(self.remoteCommand, name) + setattr(self, name, newfunc) + return newfunc + + def __iter__(self): + keys = self.tinfoil.run_command('dataStoreConnectorCmd', self.dsindex, "keys", [], {}) + for k in keys: + yield k class TinfoilCookerAdapter: """ @@ -137,12 +131,13 @@ class TinfoilCookerAdapter: class TinfoilRecipeCacheAdapter: """ cooker.recipecache adapter """ - def __init__(self, tinfoil): + def __init__(self, tinfoil, mc=''): self.tinfoil = tinfoil + self.mc = mc self._cache = {} def get_pkg_pn_fn(self): - pkg_pn = defaultdict(list, self.tinfoil.run_command('getRecipes') or []) + pkg_pn = defaultdict(list, self.tinfoil.run_command('getRecipes', self.mc) or []) pkg_fn = {} for pn, fnlist in pkg_pn.items(): for fn in fnlist: @@ -161,27 +156,27 @@ class TinfoilCookerAdapter: self.get_pkg_pn_fn() return self._cache[name] elif name == 'deps': - attrvalue = defaultdict(list, self.tinfoil.run_command('getRecipeDepends') or []) + attrvalue = defaultdict(list, self.tinfoil.run_command('getRecipeDepends', self.mc) or []) elif name == 'rundeps': - attrvalue = defaultdict(lambda: defaultdict(list), self.tinfoil.run_command('getRuntimeDepends') or []) + attrvalue = defaultdict(lambda: defaultdict(list), self.tinfoil.run_command('getRuntimeDepends', self.mc) or []) elif name == 'runrecs': - attrvalue = defaultdict(lambda: defaultdict(list), self.tinfoil.run_command('getRuntimeRecommends') or []) + attrvalue = defaultdict(lambda: defaultdict(list), self.tinfoil.run_command('getRuntimeRecommends', self.mc) or []) elif name == 'pkg_pepvpr': - attrvalue = self.tinfoil.run_command('getRecipeVersions') or {} + attrvalue = self.tinfoil.run_command('getRecipeVersions', self.mc) or {} elif name == 'inherits': - attrvalue = self.tinfoil.run_command('getRecipeInherits') or {} + attrvalue = self.tinfoil.run_command('getRecipeInherits', self.mc) or {} elif name == 'bbfile_priority': - attrvalue = self.tinfoil.run_command('getBbFilePriority') or {} + attrvalue = self.tinfoil.run_command('getBbFilePriority', self.mc) or {} elif name == 'pkg_dp': - attrvalue = self.tinfoil.run_command('getDefaultPreference') or {} + attrvalue = self.tinfoil.run_command('getDefaultPreference', self.mc) or {} elif name == 'fn_provides': - attrvalue = self.tinfoil.run_command('getRecipeProvides') or {} + attrvalue = self.tinfoil.run_command('getRecipeProvides', self.mc) or {} elif name == 'packages': - attrvalue = self.tinfoil.run_command('getRecipePackages') or {} + attrvalue = self.tinfoil.run_command('getRecipePackages', self.mc) or {} elif name == 'packages_dynamic': - attrvalue = self.tinfoil.run_command('getRecipePackagesDynamic') or {} + attrvalue = self.tinfoil.run_command('getRecipePackagesDynamic', self.mc) or {} elif name == 'rproviders': - attrvalue = self.tinfoil.run_command('getRProviders') or {} + attrvalue = self.tinfoil.run_command('getRProviders', self.mc) or {} else: raise AttributeError("%s instance has no attribute '%s'" % (self.__class__.__name__, name)) @@ -192,8 +187,9 @@ class TinfoilCookerAdapter: self.tinfoil = tinfoil self.collection = self.TinfoilCookerCollectionAdapter(tinfoil) self.recipecaches = {} - # FIXME all machines self.recipecaches[''] = self.TinfoilRecipeCacheAdapter(tinfoil) + for mc in (tinfoil.config_data.getVar('BBMULTICONFIG') or '').split(): + self.recipecaches[mc] = self.TinfoilRecipeCacheAdapter(tinfoil, mc) self._cache = {} def __getattr__(self, name): # Grab these only when they are requested since they aren't always used @@ -420,9 +416,7 @@ class Tinfoil: self.run_actions(config_params) self.recipes_parsed = True - self.config_data = bb.data.init() - connector = TinfoilDataStoreConnector(self, None) - self.config_data.setVar('_remote_data', connector) + self.config_data = TinfoilDataStoreConnector(self, 0) self.cooker = TinfoilCookerAdapter(self) self.cooker_data = self.cooker.recipecaches[''] else: @@ -511,11 +505,11 @@ class Tinfoil: """ return OrderedDict(self.run_command('getSkippedRecipes')) - def get_all_providers(self): - return defaultdict(list, self.run_command('allProviders')) + def get_all_providers(self, mc=''): + return defaultdict(list, self.run_command('allProviders', mc)) - def find_providers(self): - return self.run_command('findProviders') + def find_providers(self, mc=''): + return self.run_command('findProviders', mc) def find_best_provider(self, pn): return self.run_command('findBestProvider', pn) @@ -634,9 +628,6 @@ class Tinfoil: appends: True to apply bbappends, False otherwise appendlist: optional list of bbappend files to apply, if you want to filter them - config_data: custom config datastore to use. NOTE: if you - specify config_data then you cannot use a virtual - specification for fn. """ if self.tracking: # Enable history tracking just for the parse operation @@ -645,8 +636,8 @@ class Tinfoil: if appends and appendlist == []: appends = False if config_data: - dctr = bb.remotedata.RemoteDatastores.transmit_datastore(config_data) - dscon = self.run_command('parseRecipeFile', fn, appends, appendlist, dctr) + config_data = bb.data.createCopy(config_data) + dscon = self.run_command('parseRecipeFile', fn, appends, appendlist, config_data.dsindex) else: dscon = self.run_command('parseRecipeFile', fn, appends, appendlist) if dscon: @@ -733,21 +724,9 @@ class Tinfoil: # Borrowed from knotty, instead somewhat hackily we use the helper # as the object to store "shutdown" on helper = bb.ui.uihelper.BBUIHelper() - # We set up logging optionally in the constructor so now we need to - # grab the handlers to pass to TerminalFilter - console = None - errconsole = None - for handler in self.logger.handlers: - if isinstance(handler, logging.StreamHandler): - if handler.stream == sys.stdout: - console = handler - elif handler.stream == sys.stderr: - errconsole = handler - format_str = "%(levelname)s: %(message)s" - format = bb.msg.BBLogFormatter(format_str) helper.shutdown = 0 parseprogress = None - termfilter = bb.ui.knotty.TerminalFilter(helper, helper, console, errconsole, format, quiet=self.quiet) + termfilter = bb.ui.knotty.TerminalFilter(helper, helper, self.logger.handlers, quiet=self.quiet) try: while True: try: @@ -869,9 +848,7 @@ class Tinfoil: newobj = origtype(obj) if isinstance(newobj, bb.command.DataStoreConnectionHandle): - connector = TinfoilDataStoreConnector(self, newobj.dsindex) - newobj = bb.data.init() - newobj.setVar('_remote_data', connector) + newobj = TinfoilDataStoreConnector(self, newobj.dsindex) return newobj diff --git a/external/poky/bitbake/lib/bb/ui/__init__.py b/external/poky/bitbake/lib/bb/ui/__init__.py index a4805ed0..4b7ac36c 100644 --- a/external/poky/bitbake/lib/bb/ui/__init__.py +++ b/external/poky/bitbake/lib/bb/ui/__init__.py @@ -3,15 +3,5 @@ # # Copyright (C) 2006-2007 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. diff --git a/external/poky/bitbake/lib/bb/ui/buildinfohelper.py b/external/poky/bitbake/lib/bb/ui/buildinfohelper.py index 31323d28..82c62e33 100644 --- a/external/poky/bitbake/lib/bb/ui/buildinfohelper.py +++ b/external/poky/bitbake/lib/bb/ui/buildinfohelper.py @@ -3,18 +3,8 @@ # # Copyright (C) 2013 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import sys import bb @@ -656,6 +646,9 @@ class ORMWrapper(object): Target_Installed_Package.objects.create(target = target_obj, package = packagedict[p]['object']) packagedeps_objs = [] + pattern_so = re.compile(r'.*\.so(\.\d*)?$') + pattern_lib = re.compile(r'.*\-suffix(\d*)?$') + pattern_ko = re.compile(r'^kernel-module-.*') for p in packagedict: for (px,deptype) in packagedict[p]['depends']: if deptype == 'depends': @@ -664,6 +657,13 @@ class ORMWrapper(object): tdeptype = Package_Dependency.TYPE_TRECOMMENDS try: + # Skip known non-package objects like libraries and kernel modules + if pattern_so.match(px) or pattern_lib.match(px): + logger.info("Toaster does not add library file dependencies to packages (%s,%s)", p, px) + continue + if pattern_ko.match(px): + logger.info("Toaster does not add kernel module dependencies to packages (%s,%s)", p, px) + continue packagedeps_objs.append(Package_Dependency( package = packagedict[p]['object'], depends_on = packagedict[px]['object'], @@ -935,7 +935,7 @@ class BuildInfoHelper(object): # only reset the build name if the one on the server is actually # a valid value for the build_name field - if build_name != None: + if build_name is not None: build_info['build_name'] = build_name changed = True @@ -1194,7 +1194,7 @@ class BuildInfoHelper(object): evdata = BuildInfoHelper._get_data_from_event(event) for t in self.internal_state['targets']: - if t.is_image == True: + if t.is_image: output_files = list(evdata.keys()) for output in output_files: if t.target in output and 'rootfs' in output and not output.endswith(".manifest"): @@ -1236,7 +1236,7 @@ class BuildInfoHelper(object): task_information['outcome'] = Task.OUTCOME_PREBUILT else: task_information['task_executed'] = True - if 'noexec' in vars(event) and event.noexec == True: + if 'noexec' in vars(event) and event.noexec: task_information['task_executed'] = False task_information['outcome'] = Task.OUTCOME_EMPTY task_information['script_type'] = Task.CODING_NA @@ -1776,7 +1776,7 @@ class BuildInfoHelper(object): image_file_extensions_unique = {} image_fstypes = self.server.runCommand( ['getVariable', 'IMAGE_FSTYPES'])[0] - if image_fstypes != None: + if image_fstypes is not None: image_types_str = image_fstypes.strip() image_file_extensions = re.sub(r' {2,}', ' ', image_types_str) image_file_extensions_unique = set(image_file_extensions.split(' ')) diff --git a/external/poky/bitbake/lib/bb/ui/knotty.py b/external/poky/bitbake/lib/bb/ui/knotty.py index fa88e6cc..87e873d6 100644 --- a/external/poky/bitbake/lib/bb/ui/knotty.py +++ b/external/poky/bitbake/lib/bb/ui/knotty.py @@ -5,24 +5,13 @@ # # Copyright (C) 2006-2012 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. from __future__ import division import os import sys -import xmlrpc.client as xmlrpclib import logging import progressbar import signal @@ -45,15 +34,15 @@ class BBProgress(progressbar.ProgressBar): self.msg = msg self.extrapos = extrapos if not widgets: - widgets = [progressbar.Percentage(), ' ', progressbar.Bar(), ' ', - progressbar.ETA()] - self.extrapos = 4 + widgets = [': ', progressbar.Percentage(), ' ', progressbar.Bar(), + ' ', progressbar.ETA()] + self.extrapos = 5 if resize_handler: self._resize_default = resize_handler else: self._resize_default = signal.getsignal(signal.SIGWINCH) - progressbar.ProgressBar.__init__(self, maxval, [self.msg + ": "] + widgets, fd=sys.stdout) + progressbar.ProgressBar.__init__(self, maxval, [self.msg] + widgets, fd=sys.stdout) def _handle_resize(self, signum=None, frame=None): progressbar.ProgressBar._handle_resize(self, signum, frame) @@ -120,12 +109,11 @@ def pluralise(singular, plural, qty): class InteractConsoleLogFilter(logging.Filter): - def __init__(self, tf, format): + def __init__(self, tf): self.tf = tf - self.format = format def filter(self, record): - if record.levelno == self.format.NOTE and (record.msg.startswith("Running") or record.msg.startswith("recipe ")): + if record.levelno == bb.msg.BBLogFormatter.NOTE and (record.msg.startswith("Running") or record.msg.startswith("recipe ")): return False self.tf.clearFooter() return True @@ -161,7 +149,7 @@ class TerminalFilter(object): cr = (25, 80) return cr - def __init__(self, main, helper, console, errconsole, format, quiet): + def __init__(self, main, helper, handlers, quiet): self.main = main self.helper = helper self.cuu = None @@ -191,7 +179,11 @@ class TerminalFilter(object): termios.tcsetattr(fd, termios.TCSADRAIN, new) curses.setupterm() if curses.tigetnum("colors") > 2: - format.enable_color() + for h in handlers: + try: + h.formatter.enable_color() + except AttributeError: + pass self.ed = curses.tigetstr("ed") if self.ed: self.cuu = curses.tigetstr("cuu") @@ -207,10 +199,9 @@ class TerminalFilter(object): self.interactive = False bb.note("Unable to use interactive mode for this terminal, using fallback") return - if console: - console.addFilter(InteractConsoleLogFilter(self, format)) - if errconsole: - errconsole.addFilter(InteractConsoleLogFilter(self, format)) + + for h in handlers: + h.addFilter(InteractConsoleLogFilter(self)) self.main_progress = None @@ -222,6 +213,23 @@ class TerminalFilter(object): sys.stdout.flush() self.footer_present = False + def elapsed(self, sec): + hrs = int(sec / 3600.0) + sec -= hrs * 3600 + min = int(sec / 60.0) + sec -= min * 60 + if hrs > 0: + return "%dh%dm%ds" % (hrs, min, sec) + elif min > 0: + return "%dm%ds" % (min, sec) + else: + return "%ds" % (sec) + + def keepAlive(self, t): + if not self.cuu: + print("Bitbake still alive (%ds)" % t) + sys.stdout.flush() + def updateFooter(self): if not self.cuu: return @@ -248,19 +256,19 @@ class TerminalFilter(object): start_time = activetasks[t].get("starttime", None) if not pbar or pbar.bouncing != (progress < 0): if progress < 0: - pbar = BBProgress("0: %s (pid %s) " % (activetasks[t]["title"], t), 100, widgets=[progressbar.BouncingSlider(), ''], extrapos=2, resize_handler=self.sigwinch_handle) + pbar = BBProgress("0: %s (pid %s)" % (activetasks[t]["title"], activetasks[t]["pid"]), 100, widgets=[' ', progressbar.BouncingSlider(), ''], extrapos=3, resize_handler=self.sigwinch_handle) pbar.bouncing = True else: - pbar = BBProgress("0: %s (pid %s) " % (activetasks[t]["title"], t), 100, widgets=[progressbar.Percentage(), ' ', progressbar.Bar(), ''], extrapos=4, resize_handler=self.sigwinch_handle) + pbar = BBProgress("0: %s (pid %s)" % (activetasks[t]["title"], activetasks[t]["pid"]), 100, widgets=[' ', progressbar.Percentage(), ' ', progressbar.Bar(), ''], extrapos=5, resize_handler=self.sigwinch_handle) pbar.bouncing = False activetasks[t]["progressbar"] = pbar tasks.append((pbar, progress, rate, start_time)) else: start_time = activetasks[t].get("starttime", None) if start_time: - tasks.append("%s - %ds (pid %s)" % (activetasks[t]["title"], currenttime - start_time, t)) + tasks.append("%s - %s (pid %s)" % (activetasks[t]["title"], self.elapsed(currenttime - start_time), activetasks[t]["pid"])) else: - tasks.append("%s (pid %s)" % (activetasks[t]["title"], t)) + tasks.append("%s (pid %s)" % (activetasks[t]["title"], activetasks[t]["pid"])) if self.main.shutdown: content = "Waiting for %s running tasks to finish:" % len(activetasks) @@ -293,8 +301,8 @@ class TerminalFilter(object): if start_time: pbar.start_time = start_time pbar.setmessage('%s:%s' % (tasknum, pbar.msg.split(':', 1)[1])) + pbar.setextra(rate) if progress > -1: - pbar.setextra(rate) content = pbar.update(progress) else: content = pbar.update(1) @@ -356,7 +364,11 @@ def _log_settings_from_server(server, observe_only): if error: logger.error("Unable to get the value of BB_CONSOLELOG variable: %s" % error) raise BaseException(error) - return includelogs, loglines, consolelogfile + logconfigfile, error = server.runCommand([cmd, "BB_LOGCONFIG"]) + if error: + logger.error("Unable to get the value of BB_LOGCONFIG variable: %s" % error) + raise BaseException(error) + return includelogs, loglines, consolelogfile, logconfigfile _evt_list = [ "bb.runqueue.runQueueExitWait", "bb.event.LogExecTTY", "logging.LogRecord", "bb.build.TaskFailed", "bb.build.TaskBase", "bb.event.ParseStarted", @@ -373,7 +385,148 @@ def main(server, eventHandler, params, tf = TerminalFilter): if not params.observe_only: params.updateToServer(server, os.environ.copy()) - includelogs, loglines, consolelogfile = _log_settings_from_server(server, params.observe_only) + includelogs, loglines, consolelogfile, logconfigfile = _log_settings_from_server(server, params.observe_only) + + loglevel, _ = bb.msg.constructLogOptions() + + if params.options.quiet == 0: + console_loglevel = loglevel + elif params.options.quiet > 2: + console_loglevel = bb.msg.BBLogFormatter.ERROR + else: + console_loglevel = bb.msg.BBLogFormatter.WARNING + + logconfig = { + "version": 1, + "handlers": { + "BitBake.console": { + "class": "logging.StreamHandler", + "formatter": "BitBake.consoleFormatter", + "level": console_loglevel, + "stream": "ext://sys.stdout", + "filters": ["BitBake.stdoutFilter"], + ".": { + "is_console": True, + }, + }, + "BitBake.errconsole": { + "class": "logging.StreamHandler", + "formatter": "BitBake.consoleFormatter", + "level": loglevel, + "stream": "ext://sys.stderr", + "filters": ["BitBake.stderrFilter"], + ".": { + "is_console": True, + }, + }, + # This handler can be used if specific loggers should print on + # the console at a lower severity than the default. It will + # display any messages sent to it that are lower than then + # BitBake.console logging level (so as to prevent duplication of + # messages). Nothing is attached to this handler by default + "BitBake.verbconsole": { + "class": "logging.StreamHandler", + "formatter": "BitBake.consoleFormatter", + "level": 1, + "stream": "ext://sys.stdout", + "filters": ["BitBake.verbconsoleFilter"], + ".": { + "is_console": True, + }, + }, + }, + "formatters": { + # This format instance will get color output enabled by the + # terminal + "BitBake.consoleFormatter" : { + "()": "bb.msg.BBLogFormatter", + "format": "%(levelname)s: %(message)s" + }, + # The file log requires a separate instance so that it doesn't get + # color enabled + "BitBake.logfileFormatter": { + "()": "bb.msg.BBLogFormatter", + "format": "%(levelname)s: %(message)s" + } + }, + "filters": { + "BitBake.stdoutFilter": { + "()": "bb.msg.LogFilterLTLevel", + "level": "ERROR" + }, + "BitBake.stderrFilter": { + "()": "bb.msg.LogFilterGEQLevel", + "level": "ERROR" + }, + "BitBake.verbconsoleFilter": { + "()": "bb.msg.LogFilterLTLevel", + "level": console_loglevel + }, + }, + "loggers": { + "BitBake": { + "level": loglevel, + "handlers": ["BitBake.console", "BitBake.errconsole"], + } + }, + "disable_existing_loggers": False + } + + # Enable the console log file if enabled + if consolelogfile and not params.options.show_environment and not params.options.show_versions: + logconfig = bb.msg.mergeLoggingConfig(logconfig, { + "version": 1, + "handlers" : { + "BitBake.consolelog": { + "class": "logging.FileHandler", + "formatter": "BitBake.logfileFormatter", + "level": loglevel, + "filename": consolelogfile, + }, + # Just like verbconsole, anything sent here will go to the + # log file, unless it would go to BitBake.consolelog + "BitBake.verbconsolelog" : { + "class": "logging.FileHandler", + "formatter": "BitBake.logfileFormatter", + "level": 1, + "filename": consolelogfile, + "filters": ["BitBake.verbconsolelogFilter"], + }, + }, + "filters": { + "BitBake.verbconsolelogFilter": { + "()": "bb.msg.LogFilterLTLevel", + "level": loglevel, + }, + }, + "loggers": { + "BitBake": { + "handlers": ["BitBake.consolelog"], + }, + + # Other interesting things that we want to keep an eye on + # in the log files in case someone has an issue, but not + # necessarily show to the user on the console + "BitBake.SigGen.HashEquiv": { + "level": "VERBOSE", + "handlers": ["BitBake.verbconsolelog"], + }, + "BitBake.RunQueue.HashEquiv": { + "level": "VERBOSE", + "handlers": ["BitBake.verbconsolelog"], + } + } + }) + + bb.utils.mkdirhier(os.path.dirname(consolelogfile)) + loglink = os.path.join(os.path.dirname(consolelogfile), 'console-latest.log') + bb.utils.remove(loglink) + try: + os.symlink(os.path.basename(consolelogfile), loglink) + except OSError: + pass + + conf = bb.msg.setLoggingConfig(logconfig, logconfigfile) if sys.stdin.isatty() and sys.stdout.isatty(): log_exec_tty = True @@ -382,23 +535,9 @@ def main(server, eventHandler, params, tf = TerminalFilter): helper = uihelper.BBUIHelper() - console = logging.StreamHandler(sys.stdout) - errconsole = logging.StreamHandler(sys.stderr) - format_str = "%(levelname)s: %(message)s" - format = bb.msg.BBLogFormatter(format_str) - if params.options.quiet == 0: - forcelevel = None - elif params.options.quiet > 2: - forcelevel = bb.msg.BBLogFormatter.ERROR - else: - forcelevel = bb.msg.BBLogFormatter.WARNING - bb.msg.addDefaultlogFilter(console, bb.msg.BBLogFilterStdOut, forcelevel) - bb.msg.addDefaultlogFilter(errconsole, bb.msg.BBLogFilterStdErr) - console.setFormatter(format) - errconsole.setFormatter(format) - if not bb.msg.has_console_handler(logger): - logger.addHandler(console) - logger.addHandler(errconsole) + # Look for the specially designated handlers which need to be passed to the + # terminal handler + console_handlers = [h for h in conf.config['handlers'].values() if getattr(h, 'is_console', False)] bb.utils.set_process_name("KnottyUI") @@ -406,24 +545,14 @@ def main(server, eventHandler, params, tf = TerminalFilter): server.terminateServer() return - consolelog = None - if consolelogfile and not params.options.show_environment and not params.options.show_versions: - bb.utils.mkdirhier(os.path.dirname(consolelogfile)) - conlogformat = bb.msg.BBLogFormatter(format_str) - consolelog = logging.FileHandler(consolelogfile) - bb.msg.addDefaultlogFilter(consolelog) - consolelog.setFormatter(conlogformat) - logger.addHandler(consolelog) - loglink = os.path.join(os.path.dirname(consolelogfile), 'console-latest.log') - bb.utils.remove(loglink) - try: - os.symlink(os.path.basename(consolelogfile), loglink) - except OSError: - pass - llevel, debug_domains = bb.msg.constructLogOptions() server.runCommand(["setEventMask", server.getEventHandle(), llevel, debug_domains, _evt_list]) + # The logging_tree module is *extremely* helpful in debugging logging + # domains. Uncomment here to dump the logging tree when bitbake starts + #import logging_tree + #logging_tree.printout() + universe = False if not params.observe_only: params.updateFromServer(server) @@ -441,7 +570,7 @@ def main(server, eventHandler, params, tf = TerminalFilter): if error: logger.error("Command '%s' failed: %s" % (cmdline, error)) return 1 - elif ret != True: + elif not ret: logger.error("Command '%s' failed: returned %s" % (cmdline, ret)) return 1 @@ -455,16 +584,23 @@ def main(server, eventHandler, params, tf = TerminalFilter): warnings = 0 taskfailures = [] - termfilter = tf(main, helper, console, errconsole, format, params.options.quiet) + printinterval = 5000 + lastprint = time.time() + + termfilter = tf(main, helper, console_handlers, params.options.quiet) atexit.register(termfilter.finish) while True: try: + if (lastprint + printinterval) <= time.time(): + termfilter.keepAlive(printinterval) + printinterval += 5000 event = eventHandler.waitEvent(0) if event is None: if main.shutdown > 1: break - termfilter.updateFooter() + if not parseprogress: + termfilter.updateFooter() event = eventHandler.waitEvent(0.25) if event is None: continue @@ -488,26 +624,28 @@ def main(server, eventHandler, params, tf = TerminalFilter): continue if isinstance(event, logging.LogRecord): - if event.levelno >= format.ERROR: + lastprint = time.time() + printinterval = 5000 + if event.levelno >= bb.msg.BBLogFormatter.ERROR: errors = errors + 1 return_value = 1 - elif event.levelno == format.WARNING: + elif event.levelno == bb.msg.BBLogFormatter.WARNING: warnings = warnings + 1 if event.taskpid != 0: # For "normal" logging conditions, don't show note logs from tasks # but do show them if the user has changed the default log level to # include verbose/debug messages - if event.levelno <= format.NOTE and (event.levelno < llevel or (event.levelno == format.NOTE and llevel != format.VERBOSE)): + if event.levelno <= bb.msg.BBLogFormatter.NOTE and (event.levelno < llevel or (event.levelno == bb.msg.BBLogFormatter.NOTE and llevel != bb.msg.BBLogFormatter.VERBOSE)): continue # Prefix task messages with recipe/task - if event.taskpid in helper.running_tasks and event.levelno != format.PLAIN: - taskinfo = helper.running_tasks[event.taskpid] + if event.taskpid in helper.pidmap and event.levelno != bb.msg.BBLogFormatter.PLAIN: + taskinfo = helper.running_tasks[helper.pidmap[event.taskpid]] event.msg = taskinfo['title'] + ': ' + event.msg if hasattr(event, 'fn'): event.msg = event.fn + ': ' + event.msg - logger.handle(event) + logging.getLogger(event.name).handle(event) continue if isinstance(event, bb.build.TaskFailedSilent): @@ -524,6 +662,7 @@ def main(server, eventHandler, params, tf = TerminalFilter): continue if event.total == 0: continue + termfilter.clearFooter() parseprogress = new_progress("Parsing recipes", event.total).start() continue if isinstance(event, bb.event.ParseProgress): @@ -574,6 +713,7 @@ def main(server, eventHandler, params, tf = TerminalFilter): if isinstance(event, bb.command.CommandExit): if not return_value: return_value = event.exitcode + main.shutdown = 2 continue if isinstance(event, (bb.command.CommandCompleted, bb.cooker.CookerExit)): main.shutdown = 2 @@ -623,6 +763,7 @@ def main(server, eventHandler, params, tf = TerminalFilter): if isinstance(event, bb.event.ProcessStarted): if params.options.quiet > 1: continue + termfilter.clearFooter() parseprogress = new_progress(event.processname, event.total) parseprogress.start(False) continue @@ -645,7 +786,6 @@ def main(server, eventHandler, params, tf = TerminalFilter): # ignore if isinstance(event, (bb.event.BuildBase, bb.event.MetadataEvent, - bb.event.StampUpdate, bb.event.ConfigParsed, bb.event.MultiConfigParsed, bb.event.RecipeParsed, @@ -675,17 +815,27 @@ def main(server, eventHandler, params, tf = TerminalFilter): if params.observe_only: print("\nKeyboard Interrupt, exiting observer...") main.shutdown = 2 - if not params.observe_only and main.shutdown == 1: + + def state_force_shutdown(): print("\nSecond Keyboard Interrupt, stopping...\n") _, error = server.runCommand(["stateForceShutdown"]) if error: logger.error("Unable to cleanly stop: %s" % error) + + if not params.observe_only and main.shutdown == 1: + state_force_shutdown() + if not params.observe_only and main.shutdown == 0: print("\nKeyboard Interrupt, closing down...\n") interrupted = True - _, error = server.runCommand(["stateShutdown"]) - if error: - logger.error("Unable to cleanly shutdown: %s" % error) + # Capture the second KeyboardInterrupt during stateShutdown is running + try: + _, error = server.runCommand(["stateShutdown"]) + if error: + logger.error("Unable to cleanly shutdown: %s" % error) + except KeyboardInterrupt: + state_force_shutdown() + main.shutdown = main.shutdown + 1 pass except Exception as e: @@ -721,8 +871,6 @@ def main(server, eventHandler, params, tf = TerminalFilter): if e.errno == errno.EPIPE: pass - if consolelog: - logger.removeHandler(consolelog) - consolelog.close() + logging.shutdown() return return_value diff --git a/external/poky/bitbake/lib/bb/ui/ncurses.py b/external/poky/bitbake/lib/bb/ui/ncurses.py index 8690c529..da4fbeab 100644 --- a/external/poky/bitbake/lib/bb/ui/ncurses.py +++ b/external/poky/bitbake/lib/bb/ui/ncurses.py @@ -6,18 +6,8 @@ # Copyright (C) 2006 Michael 'Mickey' Lauer # Copyright (C) 2006-2007 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. """ We have the following windows: @@ -47,7 +37,7 @@ import logging -import os, sys, itertools, time, subprocess +import os, sys, itertools, time try: import curses @@ -56,7 +46,6 @@ except ImportError: import bb import xmlrpc.client -from bb import ui from bb.ui import uihelper parsespin = itertools.cycle( r'|/-\\' ) @@ -249,7 +238,7 @@ class NCursesUI: if error: print("Error running command '%s': %s" % (cmdline, error)) return - elif ret != True: + elif not ret: print("Couldn't get default commandlind! %s" % ret) return except xmlrpc.client.Fault as x: diff --git a/external/poky/bitbake/lib/bb/ui/taskexp.py b/external/poky/bitbake/lib/bb/ui/taskexp.py index 8305d70f..05e32338 100644 --- a/external/poky/bitbake/lib/bb/ui/taskexp.py +++ b/external/poky/bitbake/lib/bb/ui/taskexp.py @@ -4,27 +4,22 @@ # Copyright (C) 2007 Ross Burton # Copyright (C) 2007 - 2008 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import sys -import gi -gi.require_version('Gtk', '3.0') -from gi.repository import Gtk, Gdk, GObject -from multiprocessing import Queue + +try: + import gi + gi.require_version('Gtk', '3.0') + from gi.repository import Gtk, Gdk, GObject +except ValueError: + sys.exit("FATAL: Gtk version needs to be 3.0") +except ImportError: + sys.exit("FATAL: Gtk ui could not load the required gi python module") + import threading from xmlrpc import client -import time import bb import bb.event @@ -212,7 +207,7 @@ def main(server, eventHandler, params): if error: print("Error running command '%s': %s" % (cmdline, error)) return 1 - elif ret != True: + elif not ret: print("Error running command '%s': returned %s" % (cmdline, ret)) return 1 except client.Fault as x: diff --git a/external/poky/bitbake/lib/bb/ui/teamcity.py b/external/poky/bitbake/lib/bb/ui/teamcity.py new file mode 100644 index 00000000..fca46c28 --- /dev/null +++ b/external/poky/bitbake/lib/bb/ui/teamcity.py @@ -0,0 +1,396 @@ +# +# TeamCity UI Implementation +# +# Implements a TeamCity frontend for the BitBake utility, via service messages. +# See https://www.jetbrains.com/help/teamcity/build-script-interaction-with-teamcity.html +# +# Based on ncurses.py and knotty.py, variously by Michael Lauer and Richard Purdie +# +# Copyright (C) 2006 Michael 'Mickey' Lauer +# Copyright (C) 2006-2012 Richard Purdie +# Copyright (C) 2018-2020 Agilent Technologies, Inc. +# +# SPDX-License-Identifier: GPL-2.0-only +# +# Author: Chris Laplante + +from __future__ import division + +import datetime +import logging +import math +import os +import re +import sys +import xmlrpc.client +from collections import deque + +import bb +import bb.build +import bb.command +import bb.cooker +import bb.event +import bb.exceptions +import bb.runqueue +from bb.ui import uihelper + +logger = logging.getLogger("BitBake") + + +class TeamCityUI: + def __init__(self): + self._block_stack = [] + self._last_progress_state = None + + @classmethod + def escape_service_value(cls, value): + """ + Escape a value for inclusion in a service message. TeamCity uses the vertical pipe character for escaping. + See: https://confluence.jetbrains.com/display/TCD10/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-Escapedvalues + """ + return re.sub(r"(['|\[\]])", r"|\1", value).replace("\n", "|n").replace("\r", "|r") + + @classmethod + def emit_service_message(cls, message_type, **kwargs): + print(cls.format_service_message(message_type, **kwargs), flush=True) + + @classmethod + def format_service_message(cls, message_type, **kwargs): + payload = " ".join(["{0}='{1}'".format(k, cls.escape_service_value(v)) for k, v in kwargs.items()]) + return "##teamcity[{0} {1}]".format(message_type, payload) + + @classmethod + def emit_simple_service_message(cls, message_type, message): + print(cls.format_simple_service_message(message_type, message), flush=True) + + @classmethod + def format_simple_service_message(cls, message_type, message): + return "##teamcity[{0} '{1}']".format(message_type, cls.escape_service_value(message)) + + @classmethod + def format_build_message(cls, text, status): + return cls.format_service_message("message", text=text, status=status) + + def block_start(self, name): + self._block_stack.append(name) + self.emit_service_message("blockOpened", name=name) + + def block_end(self): + if self._block_stack: + name = self._block_stack.pop() + self.emit_service_message("blockClosed", name=name) + + def progress(self, message, percent, extra=None): + now = datetime.datetime.now() + percent = "{0: >3.0f}".format(percent) + + report = False + if not self._last_progress_state \ + or (self._last_progress_state[0] == message + and self._last_progress_state[1] != percent + and (now - self._last_progress_state[2]).microseconds >= 5000) \ + or self._last_progress_state[0] != message: + report = True + self._last_progress_state = (message, percent, now) + + if report or percent in [0, 100]: + self.emit_simple_service_message("progressMessage", "{0}: {1}%{2}".format(message, percent, extra or "")) + + +class TeamcityLogFormatter(logging.Formatter): + def format(self, record): + details = "" + if hasattr(record, 'bb_exc_formatted'): + details = ''.join(record.bb_exc_formatted) + elif hasattr(record, 'bb_exc_info'): + etype, value, tb = record.bb_exc_info + formatted = bb.exceptions.format_exception(etype, value, tb, limit=5) + details = ''.join(formatted) + + if record.levelno in [bb.msg.BBLogFormatter.ERROR, bb.msg.BBLogFormatter.CRITICAL]: + # ERROR gets a separate errorDetails field + msg = TeamCityUI.format_service_message("message", text=record.getMessage(), status="ERROR", + errorDetails=details) + else: + payload = record.getMessage() + if details: + payload += "\n" + details + if record.levelno == bb.msg.BBLogFormatter.PLAIN: + msg = payload + elif record.levelno == bb.msg.BBLogFormatter.WARNING: + msg = TeamCityUI.format_service_message("message", text=payload, status="WARNING") + else: + msg = TeamCityUI.format_service_message("message", text=payload, status="NORMAL") + + return msg + + +_evt_list = ["bb.runqueue.runQueueExitWait", "bb.event.LogExecTTY", "logging.LogRecord", + "bb.build.TaskFailed", "bb.build.TaskBase", "bb.event.ParseStarted", + "bb.event.ParseProgress", "bb.event.ParseCompleted", "bb.event.CacheLoadStarted", + "bb.event.CacheLoadProgress", "bb.event.CacheLoadCompleted", "bb.command.CommandFailed", + "bb.command.CommandExit", "bb.command.CommandCompleted", "bb.cooker.CookerExit", + "bb.event.MultipleProviders", "bb.event.NoProvider", "bb.runqueue.sceneQueueTaskStarted", + "bb.runqueue.runQueueTaskStarted", "bb.runqueue.runQueueTaskFailed", "bb.runqueue.sceneQueueTaskFailed", + "bb.event.BuildBase", "bb.build.TaskStarted", "bb.build.TaskSucceeded", "bb.build.TaskFailedSilent", + "bb.build.TaskProgress", "bb.event.ProcessStarted", "bb.event.ProcessProgress", "bb.event.ProcessFinished"] + + +def _log_settings_from_server(server): + # Get values of variables which control our output + includelogs, error = server.runCommand(["getVariable", "BBINCLUDELOGS"]) + if error: + logger.error("Unable to get the value of BBINCLUDELOGS variable: %s" % error) + raise BaseException(error) + loglines, error = server.runCommand(["getVariable", "BBINCLUDELOGS_LINES"]) + if error: + logger.error("Unable to get the value of BBINCLUDELOGS_LINES variable: %s" % error) + raise BaseException(error) + return includelogs, loglines + + +def main(server, eventHandler, params): + params.updateToServer(server, os.environ.copy()) + + includelogs, loglines = _log_settings_from_server(server) + + ui = TeamCityUI() + + helper = uihelper.BBUIHelper() + + console = logging.StreamHandler(sys.stdout) + errconsole = logging.StreamHandler(sys.stderr) + format = TeamcityLogFormatter() + if params.options.quiet == 0: + forcelevel = None + elif params.options.quiet > 2: + forcelevel = bb.msg.BBLogFormatter.ERROR + else: + forcelevel = bb.msg.BBLogFormatter.WARNING + console.setFormatter(format) + errconsole.setFormatter(format) + if not bb.msg.has_console_handler(logger): + logger.addHandler(console) + logger.addHandler(errconsole) + + if params.options.remote_server and params.options.kill_server: + server.terminateServer() + return + + if params.observe_only: + logger.error("Observe-only mode not supported in this UI") + return 1 + + llevel, debug_domains = bb.msg.constructLogOptions() + server.runCommand(["setEventMask", server.getEventHandle(), llevel, debug_domains, _evt_list]) + + try: + params.updateFromServer(server) + cmdline = params.parseActions() + if not cmdline: + logger.error("No task given") + return 1 + if 'msg' in cmdline and cmdline['msg']: + logger.error(cmdline['msg']) + return 1 + cmdline = cmdline['action'] + ret, error = server.runCommand(cmdline) + if error: + logger.error("{0}: {1}".format(cmdline, error)) + return 1 + elif not ret: + logger.error("Couldn't get default commandline: {0}".format(re)) + return 1 + except xmlrpc.client.Fault as x: + logger.error("XMLRPC Fault getting commandline: {0}".format(x)) + return 1 + + active_process_total = None + is_tasks_running = False + + while True: + try: + event = eventHandler.waitEvent(0.25) + if not event: + continue + + helper.eventHandler(event) + + if isinstance(event, bb.build.TaskBase): + logger.info(event._message) + if isinstance(event, logging.LogRecord): + # Don't report sstate failures as errors, since Yocto will just run the tasks for real + if event.msg == "No suitable staging package found" or (event.msg.startswith( + "Fetcher failure: Unable to find file") and "downloadfilename" in event.msg and "sstate" in event.msg): + event.levelno = bb.msg.BBLogFormatter.WARNING + if event.taskpid != 0: + # For "normal" logging conditions, don't show note logs from tasks + # but do show them if the user has changed the default log level to + # include verbose/debug messages + if event.levelno <= bb.msg.BBLogFormatter.NOTE and (event.levelno < llevel or ( + event.levelno == bb.msg.BBLogFormatter.NOTE and llevel != bb.msg.BBLogFormatter.VERBOSE)): + continue + + # Prefix task messages with recipe/task + if event.taskpid in helper.running_tasks and event.levelno != bb.msg.BBLogFormatter.PLAIN: + taskinfo = helper.running_tasks[event.taskpid] + event.msg = taskinfo['title'] + ': ' + event.msg + if hasattr(event, 'fn'): + event.msg = event.fn + ': ' + event.msg + logger.handle(event) + if isinstance(event, bb.build.TaskFailedSilent): + logger.warning("Logfile for failed setscene task is %s" % event.logfile) + continue + if isinstance(event, bb.build.TaskFailed): + rt = "{0}-{1}:{2}".format(event.pn, event.pv.replace("AUTOINC", "0"), event.task) + + logfile = event.logfile + if not logfile or not os.path.exists(logfile): + TeamCityUI.emit_service_message("buildProblem", description="{0}\nUnknown failure (no log file available)".format(rt)) + if not event.task.endswith("_setscene"): + server.runCommand(["stateForceShutdown"]) + continue + + details = deque(maxlen=loglines) + error_lines = [] + if includelogs and not event.errprinted: + with open(logfile, "r") as f: + while True: + line = f.readline() + if not line: + break + line = line.rstrip() + details.append(' | %s' % line) + # TODO: a less stupid check for errors + if (event.task == "do_compile") and ("error:" in line): + error_lines.append(line) + + if error_lines: + TeamCityUI.emit_service_message("compilationStarted", compiler=rt) + for line in error_lines: + TeamCityUI.emit_service_message("message", text=line, status="ERROR") + TeamCityUI.emit_service_message("compilationFinished", compiler=rt) + else: + TeamCityUI.emit_service_message("buildProblem", description=rt) + + err = "Logfile of failure stored in: %s" % logfile + if details: + ui.block_start("{0} task log".format(rt)) + # TeamCity seems to choke on service messages longer than about 63800 characters, so if error + # details is longer than, say, 60000, batch it up into several messages. + first_message = True + while details: + detail_len = 0 + batch = deque() + while details and detail_len < 60000: + # TODO: This code doesn't bother to handle lines that themselves are extremely long. + line = details.popleft() + batch.append(line) + detail_len += len(line) + + if first_message: + batch.appendleft("Log data follows:") + first_message = False + TeamCityUI.emit_service_message("message", text=err, status="ERROR", + errorDetails="\n".join(batch)) + else: + TeamCityUI.emit_service_message("message", text="[continued]", status="ERROR", + errorDetails="\n".join(batch)) + ui.block_end() + else: + TeamCityUI.emit_service_message("message", text=err, status="ERROR", errorDetails="") + + if not event.task.endswith("_setscene"): + server.runCommand(["stateForceShutdown"]) + + if isinstance(event, bb.event.ProcessStarted): + if event.processname in ["Initialising tasks", "Checking sstate mirror object availability"]: + active_process_total = event.total + ui.block_start(event.processname) + if isinstance(event, bb.event.ProcessFinished): + if event.processname in ["Initialising tasks", "Checking sstate mirror object availability"]: + ui.progress(event.processname, 100) + ui.block_end() + if isinstance(event, bb.event.ProcessProgress): + if event.processname in ["Initialising tasks", + "Checking sstate mirror object availability"] and active_process_total != 0: + ui.progress(event.processname, event.progress * 100 / active_process_total) + if isinstance(event, bb.event.CacheLoadStarted): + ui.block_start("Loading cache") + if isinstance(event, bb.event.CacheLoadProgress): + if event.total != 0: + ui.progress("Loading cache", math.floor(event.current * 100 / event.total)) + if isinstance(event, bb.event.CacheLoadCompleted): + ui.progress("Loading cache", 100) + ui.block_end() + if isinstance(event, bb.event.ParseStarted): + ui.block_start("Parsing recipes and checking upstream revisions") + if isinstance(event, bb.event.ParseProgress): + if event.total != 0: + ui.progress("Parsing recipes", math.floor(event.current * 100 / event.total)) + if isinstance(event, bb.event.ParseCompleted): + ui.progress("Parsing recipes", 100) + ui.block_end() + if isinstance(event, bb.command.CommandCompleted): + return + if isinstance(event, bb.command.CommandFailed): + logger.error(str(event)) + return 1 + if isinstance(event, bb.event.MultipleProviders): + logger.warning(str(event)) + continue + if isinstance(event, bb.event.NoProvider): + logger.error(str(event)) + continue + if isinstance(event, bb.command.CommandExit): + return + if isinstance(event, bb.cooker.CookerExit): + return + if isinstance(event, bb.runqueue.sceneQueueTaskStarted): + if not is_tasks_running: + is_tasks_running = True + ui.block_start("Running tasks") + if event.stats.total != 0: + ui.progress("Running setscene tasks", ( + event.stats.completed + event.stats.active + event.stats.failed + 1) * 100 / event.stats.total) + if isinstance(event, bb.runqueue.runQueueTaskStarted): + if not is_tasks_running: + is_tasks_running = True + ui.block_start("Running tasks") + if event.stats.total != 0: + pseudo_total = event.stats.total - event.stats.skipped + pseudo_complete = event.stats.completed + event.stats.active - event.stats.skipped + event.stats.failed + 1 + # TODO: sometimes this gives over 100% + ui.progress("Running runqueue tasks", (pseudo_complete) * 100 / pseudo_total, + " ({0}/{1})".format(pseudo_complete, pseudo_total)) + if isinstance(event, bb.runqueue.sceneQueueTaskFailed): + logger.warning(str(event)) + continue + if isinstance(event, bb.runqueue.runQueueTaskFailed): + logger.error(str(event)) + return 1 + if isinstance(event, bb.event.LogExecTTY): + pass + except EnvironmentError as ioerror: + # ignore interrupted io + if ioerror.args[0] == 4: + pass + except Exception as ex: + logger.error(str(ex)) + + # except KeyboardInterrupt: + # if shutdown == 2: + # mw.appendText("Third Keyboard Interrupt, exit.\n") + # exitflag = True + # if shutdown == 1: + # mw.appendText("Second Keyboard Interrupt, stopping...\n") + # _, error = server.runCommand(["stateForceShutdown"]) + # if error: + # print("Unable to cleanly stop: %s" % error) + # if shutdown == 0: + # mw.appendText("Keyboard Interrupt, closing down...\n") + # _, error = server.runCommand(["stateShutdown"]) + # if error: + # print("Unable to cleanly shutdown: %s" % error) + # shutdown = shutdown + 1 + # pass diff --git a/external/poky/bitbake/lib/bb/ui/toasterui.py b/external/poky/bitbake/lib/bb/ui/toasterui.py index 88cec375..9260f5d9 100644 --- a/external/poky/bitbake/lib/bb/ui/toasterui.py +++ b/external/poky/bitbake/lib/bb/ui/toasterui.py @@ -7,18 +7,8 @@ # Copyright (C) 2006-2012 Richard Purdie # Copyright (C) 2013 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. from __future__ import division import time @@ -186,7 +176,7 @@ def main(server, eventHandler, params): if error: logger.error("Command '%s' failed: %s" % (cmdline, error)) return 1 - elif ret != True: + elif not ret: logger.error("Command '%s' failed: returned %s" % (cmdline, ret)) return 1 diff --git a/external/poky/bitbake/lib/bb/ui/uievent.py b/external/poky/bitbake/lib/bb/ui/uievent.py index 9542b911..13d0d4a0 100644 --- a/external/poky/bitbake/lib/bb/ui/uievent.py +++ b/external/poky/bitbake/lib/bb/ui/uievent.py @@ -1,22 +1,9 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # Copyright (C) 2006 - 2007 Michael 'Mickey' Lauer # Copyright (C) 2006 - 2007 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - """ Use this class to fork off a thread to recieve event callbacks from the bitbake @@ -59,7 +46,7 @@ class BBUIEventQueue: self.EventHandle = ret error = "" - if self.EventHandle != None: + if self.EventHandle is not None: break errmsg = "Could not register UI event handler. Error: %s, host %s, "\ diff --git a/external/poky/bitbake/lib/bb/ui/uihelper.py b/external/poky/bitbake/lib/bb/ui/uihelper.py index 963c1ea2..48d808ae 100644 --- a/external/poky/bitbake/lib/bb/ui/uihelper.py +++ b/external/poky/bitbake/lib/bb/ui/uihelper.py @@ -1,21 +1,9 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # Copyright (C) 2006 - 2007 Michael 'Mickey' Lauer # Copyright (C) 2006 - 2007 Richard Purdie # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import bb.build import time @@ -27,39 +15,48 @@ class BBUIHelper: # Running PIDs preserves the order tasks were executed in self.running_pids = [] self.failed_tasks = [] + self.pidmap = {} self.tasknumber_current = 0 self.tasknumber_total = 0 def eventHandler(self, event): + # PIDs are a bad idea as they can be reused before we process all UI events. + # We maintain a 'fuzzy' match for TaskProgress since there is no other way to match + def removetid(pid, tid): + self.running_pids.remove(tid) + del self.running_tasks[tid] + if self.pidmap[pid] == tid: + del self.pidmap[pid] + self.needUpdate = True + if isinstance(event, bb.build.TaskStarted): + tid = event._fn + ":" + event._task if event._mc != "default": - self.running_tasks[event.pid] = { 'title' : "mc:%s:%s %s" % (event._mc, event._package, event._task), 'starttime' : time.time() } + self.running_tasks[tid] = { 'title' : "mc:%s:%s %s" % (event._mc, event._package, event._task), 'starttime' : time.time(), 'pid' : event.pid } else: - self.running_tasks[event.pid] = { 'title' : "%s %s" % (event._package, event._task), 'starttime' : time.time() } - self.running_pids.append(event.pid) + self.running_tasks[tid] = { 'title' : "%s %s" % (event._package, event._task), 'starttime' : time.time(), 'pid' : event.pid } + self.running_pids.append(tid) + self.pidmap[event.pid] = tid self.needUpdate = True elif isinstance(event, bb.build.TaskSucceeded): - del self.running_tasks[event.pid] - self.running_pids.remove(event.pid) - self.needUpdate = True + tid = event._fn + ":" + event._task + removetid(event.pid, tid) elif isinstance(event, bb.build.TaskFailedSilent): - del self.running_tasks[event.pid] - self.running_pids.remove(event.pid) + tid = event._fn + ":" + event._task + removetid(event.pid, tid) # Don't add to the failed tasks list since this is e.g. a setscene task failure - self.needUpdate = True elif isinstance(event, bb.build.TaskFailed): - del self.running_tasks[event.pid] - self.running_pids.remove(event.pid) + tid = event._fn + ":" + event._task + removetid(event.pid, tid) self.failed_tasks.append( { 'title' : "%s %s" % (event._package, event._task)}) - self.needUpdate = True - elif isinstance(event, bb.runqueue.runQueueTaskStarted) or isinstance(event, bb.runqueue.sceneQueueTaskStarted): + elif isinstance(event, bb.runqueue.runQueueTaskStarted): self.tasknumber_current = event.stats.completed + event.stats.active + event.stats.failed + 1 self.tasknumber_total = event.stats.total self.needUpdate = True elif isinstance(event, bb.build.TaskProgress): - if event.pid > 0: - self.running_tasks[event.pid]['progress'] = event.progress - self.running_tasks[event.pid]['rate'] = event.rate + if event.pid > 0 and event.pid in self.pidmap: + self.running_tasks[self.pidmap[event.pid]]['progress'] = event.progress + self.running_tasks[self.pidmap[event.pid]]['rate'] = event.rate self.needUpdate = True else: return False diff --git a/external/poky/bitbake/lib/bb/utils.py b/external/poky/bitbake/lib/bb/utils.py index f5bd816c..5f5767c1 100644 --- a/external/poky/bitbake/lib/bb/utils.py +++ b/external/poky/bitbake/lib/bb/utils.py @@ -1,23 +1,11 @@ -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- """ BitBake Utility Functions """ # Copyright (C) 2004 Michael Lauer # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import re, fcntl, os, string, stat, shutil, time import sys @@ -27,7 +15,8 @@ import bb import bb.msg import multiprocessing import fcntl -import imp +import importlib +from importlib import machinery import itertools import subprocess import glob @@ -35,7 +24,6 @@ import fnmatch import traceback import errno import signal -import ast import collections import copy from subprocess import getstatusoutput @@ -43,7 +31,7 @@ from contextlib import contextmanager from ctypes import cdll logger = logging.getLogger("BitBake.Util") -python_extensions = [e for e, _, _ in imp.get_suffixes()] +python_extensions = importlib.machinery.all_suffixes() def clean_context(): @@ -68,8 +56,8 @@ class VersionStringException(Exception): def explode_version(s): r = [] - alpha_regexp = re.compile('^([a-zA-Z]+)(.*)$') - numeric_regexp = re.compile('^(\d+)(.*)$') + alpha_regexp = re.compile(r'^([a-zA-Z]+)(.*)$') + numeric_regexp = re.compile(r'^(\d+)(.*)$') while (s != ''): if s[0] in string.digits: m = numeric_regexp.match(s) @@ -321,10 +309,13 @@ def better_compile(text, file, realfile, mode = "exec", lineno = 0): error = [] # split the text into lines again body = text.split('\n') - error.append("Error in compiling python function in %s, line %s:\n" % (realfile, lineno)) + error.append("Error in compiling python function in %s, line %s:\n" % (realfile, e.lineno)) if hasattr(e, "lineno"): error.append("The code lines resulting in this error were:") - error.extend(_print_trace(body, e.lineno)) + # e.lineno: line's position in reaflile + # lineno: function name's "position -1" in realfile + # e.lineno - lineno: line's relative position in function + error.extend(_print_trace(body, e.lineno - lineno)) else: error.append("The function causing this error was:") for line in body: @@ -402,7 +393,7 @@ def better_exec(code, context, text = None, realfile = "", pythonexception code = better_compile(code, realfile, realfile) try: exec(code, get_context(), context) - except (bb.BBHandledException, bb.parse.SkipRecipe, bb.build.FuncFailed, bb.data_smart.ExpansionError): + except (bb.BBHandledException, bb.parse.SkipRecipe, bb.data_smart.ExpansionError): # Error already shown so passthrough, no need for traceback raise except Exception as e: @@ -436,10 +427,11 @@ def fileslocked(files): for lockfile in files: locks.append(bb.utils.lockfile(lockfile)) - yield - - for lock in locks: - bb.utils.unlockfile(lock) + try: + yield + finally: + for lock in locks: + bb.utils.unlockfile(lock) @contextmanager def timeout(seconds): @@ -528,22 +520,26 @@ def unlockfile(lf): fcntl.flock(lf.fileno(), fcntl.LOCK_UN) lf.close() -def md5_file(filename): - """ - Return the hex string representation of the MD5 checksum of filename. - """ - import hashlib, mmap +def _hasher(method, filename): + import mmap with open(filename, "rb") as f: - m = hashlib.md5() try: with mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) as mm: for chunk in iter(lambda: mm.read(8192), b''): - m.update(chunk) + method.update(chunk) except ValueError: # You can't mmap() an empty file so silence this exception pass - return m.hexdigest() + return method.hexdigest() + + +def md5_file(filename): + """ + Return the hex string representation of the MD5 checksum of filename. + """ + import hashlib + return _hasher(hashlib.md5(), filename) def sha256_file(filename): """ @@ -551,24 +547,28 @@ def sha256_file(filename): filename. """ import hashlib - - s = hashlib.sha256() - with open(filename, "rb") as f: - for line in f: - s.update(line) - return s.hexdigest() + return _hasher(hashlib.sha256(), filename) def sha1_file(filename): """ Return the hex string representation of the SHA1 checksum of the filename """ import hashlib + return _hasher(hashlib.sha1(), filename) - s = hashlib.sha1() - with open(filename, "rb") as f: - for line in f: - s.update(line) - return s.hexdigest() +def sha384_file(filename): + """ + Return the hex string representation of the SHA384 checksum of the filename + """ + import hashlib + return _hasher(hashlib.sha384(), filename) + +def sha512_file(filename): + """ + Return the hex string representation of the SHA512 checksum of the filename + """ + import hashlib + return _hasher(hashlib.sha512(), filename) def preserved_envvars_exported(): """Variables which are taken from the environment and placed in and exported @@ -685,7 +685,7 @@ def _check_unsafe_delete_path(path): return True return False -def remove(path, recurse=False): +def remove(path, recurse=False, ionice=False): """Equivalent to rm -f or rm -rf""" if not path: return @@ -694,7 +694,10 @@ def remove(path, recurse=False): if _check_unsafe_delete_path(path): raise Exception('bb.utils.remove: called with dangerous path "%s" and recurse=True, refusing to delete!' % path) # shutil.rmtree(name) would be ideal but its too slow - subprocess.check_call(['rm', '-rf'] + glob.glob(path)) + cmd = [] + if ionice: + cmd = ['ionice', '-c', '3'] + subprocess.check_call(cmd + ['rm', '-rf'] + glob.glob(path)) return for name in glob.glob(path): try: @@ -703,20 +706,12 @@ def remove(path, recurse=False): if exc.errno != errno.ENOENT: raise -def prunedir(topdir): +def prunedir(topdir, ionice=False): # Delete everything reachable from the directory named in 'topdir'. # CAUTION: This is dangerous! if _check_unsafe_delete_path(topdir): raise Exception('bb.utils.prunedir: called with dangerous path "%s", refusing to delete!' % topdir) - for root, dirs, files in os.walk(topdir, topdown = False): - for name in files: - os.remove(os.path.join(root, name)) - for name in dirs: - if os.path.islink(os.path.join(root, name)): - os.remove(os.path.join(root, name)) - else: - os.rmdir(os.path.join(root, name)) - os.rmdir(topdir) + remove(topdir, recurse=True, ionice=ionice) # # Could also use return re.compile("(%s)" % "|".join(map(re.escape, suffixes))).sub(lambda mo: "", var) @@ -726,8 +721,8 @@ def prune_suffix(var, suffixes, d): # See if var ends with any of the suffixes listed and # remove it if found for suffix in suffixes: - if var.endswith(suffix): - return var.replace(suffix, "") + if suffix and var.endswith(suffix): + return var[:-len(suffix)] return var def mkdirhier(directory): @@ -738,7 +733,7 @@ def mkdirhier(directory): try: os.makedirs(directory) except OSError as e: - if e.errno != errno.EEXIST: + if e.errno != errno.EEXIST or not os.path.isdir(directory): raise e def movefile(src, dest, newmtime = None, sstat = None): @@ -869,7 +864,7 @@ def copyfile(src, dest, newmtime = None, sstat = None): if destexists and not stat.S_ISDIR(dstat[stat.ST_MODE]): os.unlink(dest) os.symlink(target, dest) - #os.lchown(dest,sstat[stat.ST_UID],sstat[stat.ST_GID]) + os.lchown(dest,sstat[stat.ST_UID],sstat[stat.ST_GID]) return os.lstat(dest) except Exception as e: logger.warning("copyfile: failed to create symlink %s to %s (%s)" % (dest, target, e)) @@ -1044,6 +1039,43 @@ def filter(variable, checkvalues, d): checkvalues = set(checkvalues) return ' '.join(sorted(checkvalues & val)) + +def get_referenced_vars(start_expr, d): + """ + :return: names of vars referenced in start_expr (recursively), in quasi-BFS order (variables within the same level + are ordered arbitrarily) + """ + + seen = set() + ret = [] + + # The first entry in the queue is the unexpanded start expression + queue = collections.deque([start_expr]) + # Subsequent entries will be variable names, so we need to track whether or not entry requires getVar + is_first = True + + empty_data = bb.data.init() + while queue: + entry = queue.popleft() + if is_first: + # Entry is the start expression - no expansion needed + is_first = False + expression = entry + else: + # This is a variable name - need to get the value + expression = d.getVar(entry, False) + ret.append(entry) + + # expandWithRefs is how we actually get the referenced variables in the expression. We call it using an empty + # data store because we only want the variables directly used in the expression. It returns a set, which is what + # dooms us to only ever be "quasi-BFS" rather than full BFS. + new_vars = empty_data.expandWithRefs(expression, None).references - set(seen) + + queue.extend(new_vars) + seen.update(new_vars) + return ret + + def cpu_count(): return multiprocessing.cpu_count() @@ -1161,14 +1193,14 @@ def edit_metadata(meta_lines, variables, varfunc, match_overrides=False): var_res = {} if match_overrides: - override_re = '(_[a-zA-Z0-9-_$(){}]+)?' + override_re = r'(_[a-zA-Z0-9-_$(){}]+)?' else: override_re = '' for var in variables: if var.endswith('()'): - var_res[var] = re.compile('^(%s%s)[ \\t]*\([ \\t]*\)[ \\t]*{' % (var[:-2].rstrip(), override_re)) + var_res[var] = re.compile(r'^(%s%s)[ \\t]*\([ \\t]*\)[ \\t]*{' % (var[:-2].rstrip(), override_re)) else: - var_res[var] = re.compile('^(%s%s)[ \\t]*[?+:.]*=[+.]*[ \\t]*(["\'])' % (var, override_re)) + var_res[var] = re.compile(r'^(%s%s)[ \\t]*[?+:.]*=[+.]*[ \\t]*(["\'])' % (var, override_re)) updated = False varset_start = '' @@ -1505,6 +1537,8 @@ def ioprio_set(who, cls, value): NR_ioprio_set = 251 elif _unamearch[0] == "i" and _unamearch[2:3] == "86": NR_ioprio_set = 289 + elif _unamearch == "aarch64": + NR_ioprio_set = 30 if NR_ioprio_set: ioprio = value | (cls << IOPRIO_CLASS_SHIFT) @@ -1548,12 +1582,9 @@ def export_proxies(d): def load_plugins(logger, plugins, pluginpath): def load_plugin(name): logger.debug(1, 'Loading plugin %s' % name) - fp, pathname, description = imp.find_module(name, [pluginpath]) - try: - return imp.load_module(name, fp, pathname, description) - finally: - if fp: - fp.close() + spec = importlib.machinery.PathFinder.find_spec(name, path=[pluginpath] ) + if spec: + return spec.loader.load_module() logger.debug(1, 'Loading plugins from %s...' % pluginpath) @@ -1580,3 +1611,29 @@ class LogCatcher(logging.Handler): self.messages.append(bb.build.logformatter.format(record)) def contains(self, message): return (message in self.messages) + +def is_semver(version): + """ + Is the version string following the semver semantic? + + https://semver.org/spec/v2.0.0.html + """ + regex = re.compile( + r""" + ^ + (0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*) + (?:-( + (?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*) + (?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))* + ))? + (?:\+( + [0-9a-zA-Z-]+ + (?:\.[0-9a-zA-Z-]+)* + ))? + $ + """, re.VERBOSE) + + if regex.match(version) is None: + return False + + return True diff --git a/external/poky/bitbake/lib/bblayers/__init__.py b/external/poky/bitbake/lib/bblayers/__init__.py index 3ad9513f..4e7c09da 100644 --- a/external/poky/bitbake/lib/bblayers/__init__.py +++ b/external/poky/bitbake/lib/bblayers/__init__.py @@ -1,2 +1,6 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + from pkgutil import extend_path __path__ = extend_path(__path__, __name__) diff --git a/external/poky/bitbake/lib/bblayers/action.py b/external/poky/bitbake/lib/bblayers/action.py index a3f658f9..d6459d66 100644 --- a/external/poky/bitbake/lib/bblayers/action.py +++ b/external/poky/bitbake/lib/bblayers/action.py @@ -1,3 +1,7 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + import fnmatch import logging import os diff --git a/external/poky/bitbake/lib/bblayers/common.py b/external/poky/bitbake/lib/bblayers/common.py index 98515ced..6c76ef35 100644 --- a/external/poky/bitbake/lib/bblayers/common.py +++ b/external/poky/bitbake/lib/bblayers/common.py @@ -1,3 +1,7 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + import argparse import logging import os @@ -13,7 +17,7 @@ class LayerPlugin(): def tinfoil_init(self, tinfoil): self.tinfoil = tinfoil self.bblayers = (self.tinfoil.config_data.getVar('BBLAYERS') or "").split() - layerconfs = self.tinfoil.config_data.varhistory.get_variable_items_files('BBFILE_COLLECTIONS', self.tinfoil.config_data) + layerconfs = self.tinfoil.config_data.varhistory.get_variable_items_files('BBFILE_COLLECTIONS') self.bbfile_collections = {layer: os.path.dirname(os.path.dirname(path)) for layer, path in layerconfs.items()} @staticmethod diff --git a/external/poky/bitbake/lib/bblayers/layerindex.py b/external/poky/bitbake/lib/bblayers/layerindex.py index b2ff2268..95b67a66 100644 --- a/external/poky/bitbake/lib/bblayers/layerindex.py +++ b/external/poky/bitbake/lib/bblayers/layerindex.py @@ -1,3 +1,7 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + import layerindexlib import argparse @@ -20,7 +24,7 @@ class LayerIndexPlugin(ActionPlugin): This class inherits ActionPlugin to get do_add_layer. """ - def get_fetch_layer(self, fetchdir, url, subdir, fetch_layer): + def get_fetch_layer(self, fetchdir, url, subdir, fetch_layer, branch, shallow=False): layername = self.get_layer_name(url) if os.path.splitext(layername)[1] == '.git': layername = os.path.splitext(layername)[0] @@ -28,9 +32,15 @@ class LayerIndexPlugin(ActionPlugin): layerdir = os.path.join(repodir, subdir) if not os.path.exists(repodir): if fetch_layer: - result = subprocess.call(['git', 'clone', url, repodir]) + cmd = ['git', 'clone'] + if shallow: + cmd.extend(['--depth', '1']) + if branch: + cmd.extend(['-b' , branch]) + cmd.extend([url, repodir]) + result = subprocess.call(cmd) if result: - logger.error("Failed to download %s" % url) + logger.error("Failed to download %s (%s)" % (url, branch)) return None, None, None else: return subdir, layername, layerdir @@ -167,7 +177,9 @@ class LayerIndexPlugin(ActionPlugin): subdir, name, layerdir = self.get_fetch_layer(fetchdir, layerBranch.layer.vcs_url, layerBranch.vcs_subdir, - not args.show_only) + not args.show_only, + layerBranch.actual_branch, + args.shallow) if not name: # Error already shown return 1 @@ -200,6 +212,7 @@ class LayerIndexPlugin(ActionPlugin): parser_layerindex_fetch = self.add_command(sp, 'layerindex-fetch', self.do_layerindex_fetch, parserecipes=False) parser_layerindex_fetch.add_argument('-n', '--show-only', help='show dependencies and do nothing else', action='store_true') parser_layerindex_fetch.add_argument('-b', '--branch', help='branch name to fetch') + parser_layerindex_fetch.add_argument('-s', '--shallow', help='do only shallow clones (--depth=1)', action='store_true') parser_layerindex_fetch.add_argument('-i', '--ignore', help='assume the specified layers do not need to be fetched/added (separate multiple layers with commas, no spaces)', metavar='LAYER') parser_layerindex_fetch.add_argument('layername', nargs='+', help='layer to fetch') diff --git a/external/poky/bitbake/lib/bblayers/query.py b/external/poky/bitbake/lib/bblayers/query.py index 9294dfa8..e2cc3105 100644 --- a/external/poky/bitbake/lib/bblayers/query.py +++ b/external/poky/bitbake/lib/bblayers/query.py @@ -1,3 +1,7 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + import collections import fnmatch import logging @@ -42,7 +46,7 @@ layer, with the preferred version first. Note that skipped recipes that are overlayed will also be listed, with a " (skipped)" suffix. """ - items_listed = self.list_recipes('Overlayed recipes', None, True, args.same_version, args.filenames, True, None) + items_listed = self.list_recipes('Overlayed recipes', None, True, args.same_version, args.filenames, False, True, None, False, None, args.mc) # Check for overlayed .bbclass files classes = collections.defaultdict(list) @@ -108,9 +112,9 @@ skipped recipes will also be listed, with a " (skipped)" suffix. title = 'Matching recipes:' else: title = 'Available recipes:' - self.list_recipes(title, args.pnspec, False, False, args.filenames, args.multiple, inheritlist) + self.list_recipes(title, args.pnspec, False, False, args.filenames, args.recipes_only, args.multiple, args.layer, args.bare, inheritlist, args.mc) - def list_recipes(self, title, pnspec, show_overlayed_only, show_same_ver_only, show_filenames, show_multi_provider_only, inherits): + def list_recipes(self, title, pnspec, show_overlayed_only, show_same_ver_only, show_filenames, show_recipes_only, show_multi_provider_only, selected_layer, bare, inherits, mc): if inherits: bbpath = str(self.tinfoil.config_data.getVar('BBPATH')) for classname in inherits: @@ -119,14 +123,18 @@ skipped recipes will also be listed, with a " (skipped)" suffix. logger.error('No class named %s found in BBPATH', classfile) sys.exit(1) - pkg_pn = self.tinfoil.cooker.recipecaches[''].pkg_pn - (latest_versions, preferred_versions) = self.tinfoil.find_providers() - allproviders = self.tinfoil.get_all_providers() + pkg_pn = self.tinfoil.cooker.recipecaches[mc].pkg_pn + (latest_versions, preferred_versions) = self.tinfoil.find_providers(mc) + allproviders = self.tinfoil.get_all_providers(mc) # Ensure we list skipped recipes # We are largely guessing about PN, PV and the preferred version here, # but we have no choice since skipped recipes are not fully parsed skiplist = list(self.tinfoil.cooker.skiplist.keys()) + mcspec = 'mc:%s:' % mc + if mc: + skiplist = [s[len(mcspec):] for s in skiplist if s.startswith(mcspec)] + for fn in skiplist: recipe_parts = os.path.splitext(os.path.basename(fn))[0].split('_') p = recipe_parts[0] @@ -140,24 +148,30 @@ skipped recipes will also be listed, with a " (skipped)" suffix. preferred_versions[p] = (ver, fn) def print_item(f, pn, ver, layer, ispref): - if f in skiplist: - skipped = ' (skipped)' - else: - skipped = '' - if show_filenames: - if ispref: - logger.plain("%s%s", f, skipped) + if not selected_layer or layer == selected_layer: + if not bare and f in skiplist: + skipped = ' (skipped)' else: - logger.plain(" %s%s", f, skipped) - else: - if ispref: - logger.plain("%s:", pn) - logger.plain(" %s %s%s", layer.ljust(20), ver, skipped) + skipped = '' + if show_filenames: + if ispref: + logger.plain("%s%s", f, skipped) + else: + logger.plain(" %s%s", f, skipped) + elif show_recipes_only: + if pn not in show_unique_pn: + show_unique_pn.append(pn) + logger.plain("%s%s", pn, skipped) + else: + if ispref: + logger.plain("%s:", pn) + logger.plain(" %s %s%s", layer.ljust(20), ver, skipped) global_inherit = (self.tinfoil.config_data.getVar('INHERIT') or "").split() cls_re = re.compile('classes/') preffiles = [] + show_unique_pn = [] items_listed = False for p in sorted(pkg_pn): if pnspec: @@ -177,7 +191,7 @@ skipped recipes will also be listed, with a " (skipped)" suffix. # We only display once per recipe, we should prefer non extended versions of the # recipe if present (so e.g. in OpenEmbedded, openssl rather than nativesdk-openssl # which would otherwise sort first). - if realfn[1] and realfn[0] in self.tinfoil.cooker.recipecaches[''].pkg_fn: + if realfn[1] and realfn[0] in self.tinfoil.cooker.recipecaches[mc].pkg_fn: continue if inherits: @@ -486,11 +500,16 @@ NOTE: .bbappend files can impact the dependencies. parser_show_overlayed = self.add_command(sp, 'show-overlayed', self.do_show_overlayed) parser_show_overlayed.add_argument('-f', '--filenames', help='instead of the default formatting, list filenames of higher priority recipes with the ones they overlay indented underneath', action='store_true') parser_show_overlayed.add_argument('-s', '--same-version', help='only list overlayed recipes where the version is the same', action='store_true') + parser_show_overlayed.add_argument('--mc', help='use specified multiconfig', default='') parser_show_recipes = self.add_command(sp, 'show-recipes', self.do_show_recipes) parser_show_recipes.add_argument('-f', '--filenames', help='instead of the default formatting, list filenames of higher priority recipes with the ones they overlay indented underneath', action='store_true') + parser_show_recipes.add_argument('-r', '--recipes-only', help='instead of the default formatting, list recipes only', action='store_true') parser_show_recipes.add_argument('-m', '--multiple', help='only list where multiple recipes (in the same layer or different layers) exist for the same recipe name', action='store_true') parser_show_recipes.add_argument('-i', '--inherits', help='only list recipes that inherit the named class(es) - separate multiple classes using , (without spaces)', metavar='CLASS', default='') + parser_show_recipes.add_argument('-l', '--layer', help='only list recipes from the selected layer', default='') + parser_show_recipes.add_argument('-b', '--bare', help='output just names without the "(skipped)" marker', action='store_true') + parser_show_recipes.add_argument('--mc', help='use specified multiconfig', default='') parser_show_recipes.add_argument('pnspec', nargs='*', help='optional recipe name specification (wildcards allowed, enclose in quotes to avoid shell expansion)') parser_show_appends = self.add_command(sp, 'show-appends', self.do_show_appends) diff --git a/external/poky/bitbake/lib/bs4/__init__.py b/external/poky/bitbake/lib/bs4/__init__.py index f6fdfd50..e35725b8 100644 --- a/external/poky/bitbake/lib/bs4/__init__.py +++ b/external/poky/bitbake/lib/bs4/__init__.py @@ -427,7 +427,7 @@ class BeautifulSoup(Tag): if self.is_xml: # Print the XML declaration encoding_part = '' - if eventual_encoding != None: + if eventual_encoding is not None: encoding_part = ' encoding="%s"' % eventual_encoding prefix = '\n' % encoding_part else: diff --git a/external/poky/bitbake/lib/bs4/builder/_html5lib.py b/external/poky/bitbake/lib/bs4/builder/_html5lib.py index 2b7a70aa..9e9216ef 100644 --- a/external/poky/bitbake/lib/bs4/builder/_html5lib.py +++ b/external/poky/bitbake/lib/bs4/builder/_html5lib.py @@ -2,7 +2,6 @@ __all__ = [ 'HTML5TreeBuilder', ] -from pdb import set_trace import warnings from bs4.builder import ( PERMISSIVE, @@ -322,7 +321,7 @@ class Element(treebuildersbase.Node): return self.element.contents def getNameTuple(self): - if self.namespace == None: + if self.namespace is None: return namespaces["html"], self.name else: return self.namespace, self.name diff --git a/external/poky/bitbake/lib/bs4/dammit.py b/external/poky/bitbake/lib/bs4/dammit.py index 68d419fe..7ad9e0dd 100644 --- a/external/poky/bitbake/lib/bs4/dammit.py +++ b/external/poky/bitbake/lib/bs4/dammit.py @@ -8,12 +8,10 @@ XML or HTML to reflect a new encoding; that's the tree builder's job. """ __license__ = "MIT" -from pdb import set_trace import codecs from html.entities import codepoint2name import re import logging -import string # Import a library to autodetect character encodings. chardet_type = None @@ -38,16 +36,10 @@ except ImportError: def chardet_dammit(s): return None -# Available from http://cjkpython.i18n.org/. -try: - import iconv_codec -except ImportError: - pass - xml_encoding_re = re.compile( - '^<\?.*encoding=[\'"](.*?)[\'"].*\?>'.encode(), re.I) + r'^<\?.*encoding=[\'"](.*?)[\'"].*\?>'.encode(), re.I) html_meta_re = re.compile( - '<\s*meta[^>]+charset\s*=\s*["\']?([^>]*?)[ /;\'">]'.encode(), re.I) + r'<\s*meta[^>]+charset\s*=\s*["\']?([^>]*?)[ /;\'">]'.encode(), re.I) class EntitySubstitution(object): @@ -80,11 +72,11 @@ class EntitySubstitution(object): ">": "gt", } - BARE_AMPERSAND_OR_BRACKET = re.compile("([<>]|" - "&(?!#\d+;|#x[0-9a-fA-F]+;|\w+;)" - ")") + BARE_AMPERSAND_OR_BRACKET = re.compile(r"([<>]|" + r"&(?!#\d+;|#x[0-9a-fA-F]+;|\w+;)" + r")") - AMPERSAND_OR_BRACKET = re.compile("([<>&])") + AMPERSAND_OR_BRACKET = re.compile(r"([<>&])") @classmethod def _substitute_html_entity(cls, matchobj): diff --git a/external/poky/bitbake/lib/bs4/element.py b/external/poky/bitbake/lib/bs4/element.py index 0e62c2e1..68be42d1 100644 --- a/external/poky/bitbake/lib/bs4/element.py +++ b/external/poky/bitbake/lib/bs4/element.py @@ -1,7 +1,6 @@ __license__ = "MIT" -from pdb import set_trace -import collections +import collections.abc import re import sys import warnings @@ -10,7 +9,7 @@ from bs4.dammit import EntitySubstitution DEFAULT_OUTPUT_ENCODING = "utf-8" PY3K = (sys.version_info[0] > 2) -whitespace_re = re.compile("\s+") +whitespace_re = re.compile(r"\s+") def _alias(attr): """Alias one attribute name to another for backward compatibility""" @@ -67,7 +66,7 @@ class ContentMetaAttributeValue(AttributeValueWithCharsetSubstitution): The value of the 'content' attribute will be one of these objects. """ - CHARSET_RE = re.compile("((^|;)\s*charset=)([^;]*)", re.M) + CHARSET_RE = re.compile(r"((^|;)\s*charset=)([^;]*)", re.M) def __new__(cls, original_value): match = cls.CHARSET_RE.search(original_value) @@ -155,7 +154,7 @@ class PageElement(object): def format_string(self, s, formatter='minimal'): """Format the given string using the given formatter.""" - if not isinstance(formatter, collections.Callable): + if not isinstance(formatter, collections.abc.Callable): formatter = self._formatter_for_name(formatter) if formatter is None: output = s @@ -580,7 +579,7 @@ class PageElement(object): # Methods for supporting CSS selectors. - tag_name_re = re.compile('^[a-zA-Z0-9][-.a-zA-Z0-9:_]*$') + tag_name_re = re.compile(r'^[a-zA-Z0-9][-.a-zA-Z0-9:_]*$') # /^([a-zA-Z0-9][-.a-zA-Z0-9:_]*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/ # \---------------------------/ \---/\-------------/ \-------/ @@ -1077,7 +1076,7 @@ class Tag(PageElement): # First off, turn a string formatter into a function. This # will stop the lookup from happening over and over again. - if not isinstance(formatter, collections.Callable): + if not isinstance(formatter, collections.abc.Callable): formatter = self._formatter_for_name(formatter) attrs = [] @@ -1181,7 +1180,7 @@ class Tag(PageElement): """ # First off, turn a string formatter into a function. This # will stop the lookup from happening over and over again. - if not isinstance(formatter, collections.Callable): + if not isinstance(formatter, collections.abc.Callable): formatter = self._formatter_for_name(formatter) pretty_print = (indent_level is not None) @@ -1364,7 +1363,7 @@ class Tag(PageElement): if tag_name == '': raise ValueError( "A pseudo-class must be prefixed with a tag name.") - pseudo_attributes = re.match('([a-zA-Z\d-]+)\(([a-zA-Z\d]+)\)', pseudo) + pseudo_attributes = re.match(r'([a-zA-Z\d-]+)\(([a-zA-Z\d]+)\)', pseudo) found = [] if pseudo_attributes is None: pseudo_type = pseudo @@ -1562,7 +1561,7 @@ class SoupStrainer(object): def _normalize_search_value(self, value): # Leave it alone if it's a Unicode string, a callable, a # regular expression, a boolean, or None. - if (isinstance(value, str) or isinstance(value, collections.Callable) or hasattr(value, 'match') + if (isinstance(value, str) or isinstance(value, collections.abc.Callable) or hasattr(value, 'match') or isinstance(value, bool) or value is None): return value @@ -1602,7 +1601,7 @@ class SoupStrainer(object): markup = markup_name markup_attrs = markup call_function_with_tag_data = ( - isinstance(self.name, collections.Callable) + isinstance(self.name, collections.abc.Callable) and not isinstance(markup_name, Tag)) if ((not self.name) @@ -1688,7 +1687,7 @@ class SoupStrainer(object): # True matches any non-None value. return markup is not None - if isinstance(match_against, collections.Callable): + if isinstance(match_against, collections.abc.Callable): return match_against(markup) # Custom callables take the tag as an argument, but all diff --git a/external/poky/bitbake/lib/bs4/testing.py b/external/poky/bitbake/lib/bs4/testing.py index 3a2f260e..953bca8e 100644 --- a/external/poky/bitbake/lib/bs4/testing.py +++ b/external/poky/bitbake/lib/bs4/testing.py @@ -4,7 +4,6 @@ __license__ = "MIT" import pickle import copy -import functools import unittest from unittest import TestCase from bs4 import BeautifulSoup diff --git a/external/poky/bitbake/lib/bs4/tests/test_docs.py b/external/poky/bitbake/lib/bs4/tests/test_docs.py index 5b9f6770..d1d76a33 100644 --- a/external/poky/bitbake/lib/bs4/tests/test_docs.py +++ b/external/poky/bitbake/lib/bs4/tests/test_docs.py @@ -7,19 +7,15 @@ __all__ = [ 'additional_tests', ] -import atexit import doctest -import os #from pkg_resources import ( # resource_filename, resource_exists, resource_listdir, cleanup_resources) -import unittest DOCTEST_FLAGS = ( doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE | doctest.REPORT_NDIFF) - # def additional_tests(): # "Run the doc tests (README.txt and docs/*, if any exist)" # doctest_files = [ diff --git a/external/poky/bitbake/lib/bs4/tests/test_htmlparser.py b/external/poky/bitbake/lib/bs4/tests/test_htmlparser.py index b45e35f9..30a25e67 100644 --- a/external/poky/bitbake/lib/bs4/tests/test_htmlparser.py +++ b/external/poky/bitbake/lib/bs4/tests/test_htmlparser.py @@ -1,7 +1,6 @@ """Tests to ensure that the html.parser tree builder generates good trees.""" -from pdb import set_trace import pickle from bs4.testing import SoupTest, HTMLTreeBuilderSmokeTest from bs4.builder import HTMLParserTreeBuilder diff --git a/external/poky/bitbake/lib/bs4/tests/test_lxml.py b/external/poky/bitbake/lib/bs4/tests/test_lxml.py index 6c2a1d73..6b6cdd07 100644 --- a/external/poky/bitbake/lib/bs4/tests/test_lxml.py +++ b/external/poky/bitbake/lib/bs4/tests/test_lxml.py @@ -1,6 +1,5 @@ """Tests to ensure that the lxml tree builder generates good trees.""" -import re import warnings try: @@ -14,13 +13,8 @@ except ImportError as e: if LXML_PRESENT: from bs4.builder import LXMLTreeBuilder, LXMLTreeBuilderForXML -from bs4 import ( - BeautifulSoup, - BeautifulStoneSoup, - ) -from bs4.element import Comment, Doctype, SoupStrainer +from bs4 import BeautifulStoneSoup from bs4.testing import skipIf -from bs4.tests import test_htmlparser from bs4.testing import ( HTMLTreeBuilderSmokeTest, XMLTreeBuilderSmokeTest, diff --git a/external/poky/bitbake/lib/bs4/tests/test_soup.py b/external/poky/bitbake/lib/bs4/tests/test_soup.py index f87949e3..6ad3cb37 100644 --- a/external/poky/bitbake/lib/bs4/tests/test_soup.py +++ b/external/poky/bitbake/lib/bs4/tests/test_soup.py @@ -1,16 +1,12 @@ # -*- coding: utf-8 -*- """Tests of Beautiful Soup as a whole.""" -from pdb import set_trace import logging import unittest import sys import tempfile -from bs4 import ( - BeautifulSoup, - BeautifulStoneSoup, -) +from bs4 import BeautifulSoup from bs4.element import ( CharsetMetaAttributeValue, ContentMetaAttributeValue, diff --git a/external/poky/bitbake/lib/bs4/tests/test_tree.py b/external/poky/bitbake/lib/bs4/tests/test_tree.py index 6d3e67f3..8e5c6642 100644 --- a/external/poky/bitbake/lib/bs4/tests/test_tree.py +++ b/external/poky/bitbake/lib/bs4/tests/test_tree.py @@ -9,16 +9,12 @@ same markup, but all Beautiful Soup trees can be traversed with the methods tested here. """ -from pdb import set_trace import copy import pickle import re import warnings from bs4 import BeautifulSoup -from bs4.builder import ( - builder_registry, - HTMLParserTreeBuilder, -) +from bs4.builder import builder_registry from bs4.element import ( PY3K, CData, @@ -29,10 +25,7 @@ from bs4.element import ( SoupStrainer, Tag, ) -from bs4.testing import ( - SoupTest, - skipIf, -) +from bs4.testing import SoupTest XML_BUILDER_PRESENT = (builder_registry.lookup("xml") is not None) LXML_PRESENT = (builder_registry.lookup("lxml") is not None) diff --git a/external/poky/bitbake/lib/hashserv/__init__.py b/external/poky/bitbake/lib/hashserv/__init__.py new file mode 100644 index 00000000..f95e8f43 --- /dev/null +++ b/external/poky/bitbake/lib/hashserv/__init__.py @@ -0,0 +1,115 @@ +# Copyright (C) 2018-2019 Garmin Ltd. +# +# SPDX-License-Identifier: GPL-2.0-only +# + +from contextlib import closing +import re +import sqlite3 +import itertools +import json + +UNIX_PREFIX = "unix://" + +ADDR_TYPE_UNIX = 0 +ADDR_TYPE_TCP = 1 + +# The Python async server defaults to a 64K receive buffer, so we hardcode our +# maximum chunk size. It would be better if the client and server reported to +# each other what the maximum chunk sizes were, but that will slow down the +# connection setup with a round trip delay so I'd rather not do that unless it +# is necessary +DEFAULT_MAX_CHUNK = 32 * 1024 + +def setup_database(database, sync=True): + db = sqlite3.connect(database) + db.row_factory = sqlite3.Row + + with closing(db.cursor()) as cursor: + cursor.execute(''' + CREATE TABLE IF NOT EXISTS tasks_v2 ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + method TEXT NOT NULL, + outhash TEXT NOT NULL, + taskhash TEXT NOT NULL, + unihash TEXT NOT NULL, + created DATETIME, + + -- Optional fields + owner TEXT, + PN TEXT, + PV TEXT, + PR TEXT, + task TEXT, + outhash_siginfo TEXT, + + UNIQUE(method, outhash, taskhash) + ) + ''') + cursor.execute('PRAGMA journal_mode = WAL') + cursor.execute('PRAGMA synchronous = %s' % ('NORMAL' if sync else 'OFF')) + + # Drop old indexes + cursor.execute('DROP INDEX IF EXISTS taskhash_lookup') + cursor.execute('DROP INDEX IF EXISTS outhash_lookup') + + # Create new indexes + cursor.execute('CREATE INDEX IF NOT EXISTS taskhash_lookup_v2 ON tasks_v2 (method, taskhash, created)') + cursor.execute('CREATE INDEX IF NOT EXISTS outhash_lookup_v2 ON tasks_v2 (method, outhash)') + + return db + + +def parse_address(addr): + if addr.startswith(UNIX_PREFIX): + return (ADDR_TYPE_UNIX, (addr[len(UNIX_PREFIX):],)) + else: + m = re.match(r'\[(?P[^\]]*)\]:(?P\d+)$', addr) + if m is not None: + host = m.group('host') + port = m.group('port') + else: + host, port = addr.split(':') + + return (ADDR_TYPE_TCP, (host, int(port))) + + +def chunkify(msg, max_chunk): + if len(msg) < max_chunk - 1: + yield ''.join((msg, "\n")) + else: + yield ''.join((json.dumps({ + 'chunk-stream': None + }), "\n")) + + args = [iter(msg)] * (max_chunk - 1) + for m in map(''.join, itertools.zip_longest(*args, fillvalue='')): + yield ''.join(itertools.chain(m, "\n")) + yield "\n" + + +def create_server(addr, dbname, *, sync=True): + from . import server + db = setup_database(dbname, sync=sync) + s = server.Server(db) + + (typ, a) = parse_address(addr) + if typ == ADDR_TYPE_UNIX: + s.start_unix_server(*a) + else: + s.start_tcp_server(*a) + + return s + + +def create_client(addr): + from . import client + c = client.Client() + + (typ, a) = parse_address(addr) + if typ == ADDR_TYPE_UNIX: + c.connect_unix(*a) + else: + c.connect_tcp(*a) + + return c diff --git a/external/poky/bitbake/lib/hashserv/client.py b/external/poky/bitbake/lib/hashserv/client.py new file mode 100644 index 00000000..a29af836 --- /dev/null +++ b/external/poky/bitbake/lib/hashserv/client.py @@ -0,0 +1,191 @@ +# Copyright (C) 2019 Garmin Ltd. +# +# SPDX-License-Identifier: GPL-2.0-only +# + +import json +import logging +import socket +import os +from . import chunkify, DEFAULT_MAX_CHUNK + + +logger = logging.getLogger('hashserv.client') + + +class HashConnectionError(Exception): + pass + + +class Client(object): + MODE_NORMAL = 0 + MODE_GET_STREAM = 1 + + def __init__(self): + self._socket = None + self.reader = None + self.writer = None + self.mode = self.MODE_NORMAL + self.max_chunk = DEFAULT_MAX_CHUNK + + def connect_tcp(self, address, port): + def connect_sock(): + s = socket.create_connection((address, port)) + + s.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1) + s.setsockopt(socket.SOL_TCP, socket.TCP_QUICKACK, 1) + s.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) + return s + + self._connect_sock = connect_sock + + def connect_unix(self, path): + def connect_sock(): + s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + # AF_UNIX has path length issues so chdir here to workaround + cwd = os.getcwd() + try: + os.chdir(os.path.dirname(path)) + s.connect(os.path.basename(path)) + finally: + os.chdir(cwd) + return s + + self._connect_sock = connect_sock + + def connect(self): + if self._socket is None: + self._socket = self._connect_sock() + + self.reader = self._socket.makefile('r', encoding='utf-8') + self.writer = self._socket.makefile('w', encoding='utf-8') + + self.writer.write('OEHASHEQUIV 1.1\n\n') + self.writer.flush() + + # Restore mode if the socket is being re-created + cur_mode = self.mode + self.mode = self.MODE_NORMAL + self._set_mode(cur_mode) + + return self._socket + + def close(self): + if self._socket is not None: + self._socket.close() + self._socket = None + self.reader = None + self.writer = None + + def _send_wrapper(self, proc): + count = 0 + while True: + try: + self.connect() + return proc() + except (OSError, HashConnectionError, json.JSONDecodeError, UnicodeDecodeError) as e: + logger.warning('Error talking to server: %s' % e) + if count >= 3: + if not isinstance(e, HashConnectionError): + raise HashConnectionError(str(e)) + raise e + self.close() + count += 1 + + def send_message(self, msg): + def get_line(): + line = self.reader.readline() + if not line: + raise HashConnectionError('Connection closed') + + if not line.endswith('\n'): + raise HashConnectionError('Bad message %r' % message) + + return line + + def proc(): + for c in chunkify(json.dumps(msg), self.max_chunk): + self.writer.write(c) + self.writer.flush() + + l = get_line() + + m = json.loads(l) + if 'chunk-stream' in m: + lines = [] + while True: + l = get_line().rstrip('\n') + if not l: + break + lines.append(l) + + m = json.loads(''.join(lines)) + + return m + + return self._send_wrapper(proc) + + def send_stream(self, msg): + def proc(): + self.writer.write("%s\n" % msg) + self.writer.flush() + l = self.reader.readline() + if not l: + raise HashConnectionError('Connection closed') + return l.rstrip() + + return self._send_wrapper(proc) + + def _set_mode(self, new_mode): + if new_mode == self.MODE_NORMAL and self.mode == self.MODE_GET_STREAM: + r = self.send_stream('END') + if r != 'ok': + raise HashConnectionError('Bad response from server %r' % r) + elif new_mode == self.MODE_GET_STREAM and self.mode == self.MODE_NORMAL: + r = self.send_message({'get-stream': None}) + if r != 'ok': + raise HashConnectionError('Bad response from server %r' % r) + elif new_mode != self.mode: + raise Exception('Undefined mode transition %r -> %r' % (self.mode, new_mode)) + + self.mode = new_mode + + def get_unihash(self, method, taskhash): + self._set_mode(self.MODE_GET_STREAM) + r = self.send_stream('%s %s' % (method, taskhash)) + if not r: + return None + return r + + def report_unihash(self, taskhash, method, outhash, unihash, extra={}): + self._set_mode(self.MODE_NORMAL) + m = extra.copy() + m['taskhash'] = taskhash + m['method'] = method + m['outhash'] = outhash + m['unihash'] = unihash + return self.send_message({'report': m}) + + def report_unihash_equiv(self, taskhash, method, unihash, extra={}): + self._set_mode(self.MODE_NORMAL) + m = extra.copy() + m['taskhash'] = taskhash + m['method'] = method + m['unihash'] = unihash + return self.send_message({'report-equiv': m}) + + def get_taskhash(self, method, taskhash, all_properties=False): + self._set_mode(self.MODE_NORMAL) + return self.send_message({'get': { + 'taskhash': taskhash, + 'method': method, + 'all': all_properties + }}) + + def get_stats(self): + self._set_mode(self.MODE_NORMAL) + return self.send_message({'get-stats': None}) + + def reset_stats(self): + self._set_mode(self.MODE_NORMAL) + return self.send_message({'reset-stats': None}) diff --git a/external/poky/bitbake/lib/hashserv/server.py b/external/poky/bitbake/lib/hashserv/server.py new file mode 100644 index 00000000..81050715 --- /dev/null +++ b/external/poky/bitbake/lib/hashserv/server.py @@ -0,0 +1,489 @@ +# Copyright (C) 2019 Garmin Ltd. +# +# SPDX-License-Identifier: GPL-2.0-only +# + +from contextlib import closing +from datetime import datetime +import asyncio +import json +import logging +import math +import os +import signal +import socket +import time +from . import chunkify, DEFAULT_MAX_CHUNK + +logger = logging.getLogger('hashserv.server') + + +class Measurement(object): + def __init__(self, sample): + self.sample = sample + + def start(self): + self.start_time = time.perf_counter() + + def end(self): + self.sample.add(time.perf_counter() - self.start_time) + + def __enter__(self): + self.start() + return self + + def __exit__(self, *args, **kwargs): + self.end() + + +class Sample(object): + def __init__(self, stats): + self.stats = stats + self.num_samples = 0 + self.elapsed = 0 + + def measure(self): + return Measurement(self) + + def __enter__(self): + return self + + def __exit__(self, *args, **kwargs): + self.end() + + def add(self, elapsed): + self.num_samples += 1 + self.elapsed += elapsed + + def end(self): + if self.num_samples: + self.stats.add(self.elapsed) + self.num_samples = 0 + self.elapsed = 0 + + +class Stats(object): + def __init__(self): + self.reset() + + def reset(self): + self.num = 0 + self.total_time = 0 + self.max_time = 0 + self.m = 0 + self.s = 0 + self.current_elapsed = None + + def add(self, elapsed): + self.num += 1 + if self.num == 1: + self.m = elapsed + self.s = 0 + else: + last_m = self.m + self.m = last_m + (elapsed - last_m) / self.num + self.s = self.s + (elapsed - last_m) * (elapsed - self.m) + + self.total_time += elapsed + + if self.max_time < elapsed: + self.max_time = elapsed + + def start_sample(self): + return Sample(self) + + @property + def average(self): + if self.num == 0: + return 0 + return self.total_time / self.num + + @property + def stdev(self): + if self.num <= 1: + return 0 + return math.sqrt(self.s / (self.num - 1)) + + def todict(self): + return {k: getattr(self, k) for k in ('num', 'total_time', 'max_time', 'average', 'stdev')} + + +class ClientError(Exception): + pass + +class ServerClient(object): + FAST_QUERY = 'SELECT taskhash, method, unihash FROM tasks_v2 WHERE method=:method AND taskhash=:taskhash ORDER BY created ASC LIMIT 1' + ALL_QUERY = 'SELECT * FROM tasks_v2 WHERE method=:method AND taskhash=:taskhash ORDER BY created ASC LIMIT 1' + + def __init__(self, reader, writer, db, request_stats): + self.reader = reader + self.writer = writer + self.db = db + self.request_stats = request_stats + self.max_chunk = DEFAULT_MAX_CHUNK + + self.handlers = { + 'get': self.handle_get, + 'report': self.handle_report, + 'report-equiv': self.handle_equivreport, + 'get-stream': self.handle_get_stream, + 'get-stats': self.handle_get_stats, + 'reset-stats': self.handle_reset_stats, + 'chunk-stream': self.handle_chunk, + } + + async def process_requests(self): + try: + self.addr = self.writer.get_extra_info('peername') + logger.debug('Client %r connected' % (self.addr,)) + + # Read protocol and version + protocol = await self.reader.readline() + if protocol is None: + return + + (proto_name, proto_version) = protocol.decode('utf-8').rstrip().split() + if proto_name != 'OEHASHEQUIV': + return + + proto_version = tuple(int(v) for v in proto_version.split('.')) + if proto_version < (1, 0) or proto_version > (1, 1): + return + + # Read headers. Currently, no headers are implemented, so look for + # an empty line to signal the end of the headers + while True: + line = await self.reader.readline() + if line is None: + return + + line = line.decode('utf-8').rstrip() + if not line: + break + + # Handle messages + while True: + d = await self.read_message() + if d is None: + break + await self.dispatch_message(d) + await self.writer.drain() + except ClientError as e: + logger.error(str(e)) + finally: + self.writer.close() + + async def dispatch_message(self, msg): + for k in self.handlers.keys(): + if k in msg: + logger.debug('Handling %s' % k) + if 'stream' in k: + await self.handlers[k](msg[k]) + else: + with self.request_stats.start_sample() as self.request_sample, \ + self.request_sample.measure(): + await self.handlers[k](msg[k]) + return + + raise ClientError("Unrecognized command %r" % msg) + + def write_message(self, msg): + for c in chunkify(json.dumps(msg), self.max_chunk): + self.writer.write(c.encode('utf-8')) + + async def read_message(self): + l = await self.reader.readline() + if not l: + return None + + try: + message = l.decode('utf-8') + + if not message.endswith('\n'): + return None + + return json.loads(message) + except (json.JSONDecodeError, UnicodeDecodeError) as e: + logger.error('Bad message from client: %r' % message) + raise e + + async def handle_chunk(self, request): + lines = [] + try: + while True: + l = await self.reader.readline() + l = l.rstrip(b"\n").decode("utf-8") + if not l: + break + lines.append(l) + + msg = json.loads(''.join(lines)) + except (json.JSONDecodeError, UnicodeDecodeError) as e: + logger.error('Bad message from client: %r' % message) + raise e + + if 'chunk-stream' in msg: + raise ClientError("Nested chunks are not allowed") + + await self.dispatch_message(msg) + + async def handle_get(self, request): + method = request['method'] + taskhash = request['taskhash'] + + if request.get('all', False): + row = self.query_equivalent(method, taskhash, self.ALL_QUERY) + else: + row = self.query_equivalent(method, taskhash, self.FAST_QUERY) + + if row is not None: + logger.debug('Found equivalent task %s -> %s', (row['taskhash'], row['unihash'])) + d = {k: row[k] for k in row.keys()} + + self.write_message(d) + else: + self.write_message(None) + + async def handle_get_stream(self, request): + self.write_message('ok') + + while True: + l = await self.reader.readline() + if not l: + return + + try: + # This inner loop is very sensitive and must be as fast as + # possible (which is why the request sample is handled manually + # instead of using 'with', and also why logging statements are + # commented out. + self.request_sample = self.request_stats.start_sample() + request_measure = self.request_sample.measure() + request_measure.start() + + l = l.decode('utf-8').rstrip() + if l == 'END': + self.writer.write('ok\n'.encode('utf-8')) + return + + (method, taskhash) = l.split() + #logger.debug('Looking up %s %s' % (method, taskhash)) + row = self.query_equivalent(method, taskhash, self.FAST_QUERY) + if row is not None: + msg = ('%s\n' % row['unihash']).encode('utf-8') + #logger.debug('Found equivalent task %s -> %s', (row['taskhash'], row['unihash'])) + else: + msg = '\n'.encode('utf-8') + + self.writer.write(msg) + finally: + request_measure.end() + self.request_sample.end() + + await self.writer.drain() + + async def handle_report(self, data): + with closing(self.db.cursor()) as cursor: + cursor.execute(''' + -- Find tasks with a matching outhash (that is, tasks that + -- are equivalent) + SELECT taskhash, method, unihash FROM tasks_v2 WHERE method=:method AND outhash=:outhash + + -- If there is an exact match on the taskhash, return it. + -- Otherwise return the oldest matching outhash of any + -- taskhash + ORDER BY CASE WHEN taskhash=:taskhash THEN 1 ELSE 2 END, + created ASC + + -- Only return one row + LIMIT 1 + ''', {k: data[k] for k in ('method', 'outhash', 'taskhash')}) + + row = cursor.fetchone() + + # If no matching outhash was found, or one *was* found but it + # wasn't an exact match on the taskhash, a new entry for this + # taskhash should be added + if row is None or row['taskhash'] != data['taskhash']: + # If a row matching the outhash was found, the unihash for + # the new taskhash should be the same as that one. + # Otherwise the caller provided unihash is used. + unihash = data['unihash'] + if row is not None: + unihash = row['unihash'] + + insert_data = { + 'method': data['method'], + 'outhash': data['outhash'], + 'taskhash': data['taskhash'], + 'unihash': unihash, + 'created': datetime.now() + } + + for k in ('owner', 'PN', 'PV', 'PR', 'task', 'outhash_siginfo'): + if k in data: + insert_data[k] = data[k] + + cursor.execute('''INSERT INTO tasks_v2 (%s) VALUES (%s)''' % ( + ', '.join(sorted(insert_data.keys())), + ', '.join(':' + k for k in sorted(insert_data.keys()))), + insert_data) + + self.db.commit() + + logger.info('Adding taskhash %s with unihash %s', + data['taskhash'], unihash) + + d = { + 'taskhash': data['taskhash'], + 'method': data['method'], + 'unihash': unihash + } + else: + d = {k: row[k] for k in ('taskhash', 'method', 'unihash')} + + self.write_message(d) + + async def handle_equivreport(self, data): + with closing(self.db.cursor()) as cursor: + insert_data = { + 'method': data['method'], + 'outhash': "", + 'taskhash': data['taskhash'], + 'unihash': data['unihash'], + 'created': datetime.now() + } + + for k in ('owner', 'PN', 'PV', 'PR', 'task', 'outhash_siginfo'): + if k in data: + insert_data[k] = data[k] + + cursor.execute('''INSERT OR IGNORE INTO tasks_v2 (%s) VALUES (%s)''' % ( + ', '.join(sorted(insert_data.keys())), + ', '.join(':' + k for k in sorted(insert_data.keys()))), + insert_data) + + self.db.commit() + + # Fetch the unihash that will be reported for the taskhash. If the + # unihash matches, it means this row was inserted (or the mapping + # was already valid) + row = self.query_equivalent(data['method'], data['taskhash'], self.FAST_QUERY) + + if row['unihash'] == data['unihash']: + logger.info('Adding taskhash equivalence for %s with unihash %s', + data['taskhash'], row['unihash']) + + d = {k: row[k] for k in ('taskhash', 'method', 'unihash')} + + self.write_message(d) + + + async def handle_get_stats(self, request): + d = { + 'requests': self.request_stats.todict(), + } + + self.write_message(d) + + async def handle_reset_stats(self, request): + d = { + 'requests': self.request_stats.todict(), + } + + self.request_stats.reset() + self.write_message(d) + + def query_equivalent(self, method, taskhash, query): + # This is part of the inner loop and must be as fast as possible + try: + cursor = self.db.cursor() + cursor.execute(query, {'method': method, 'taskhash': taskhash}) + return cursor.fetchone() + except: + cursor.close() + + +class Server(object): + def __init__(self, db, loop=None): + self.request_stats = Stats() + self.db = db + + if loop is None: + self.loop = asyncio.new_event_loop() + self.close_loop = True + else: + self.loop = loop + self.close_loop = False + + self._cleanup_socket = None + + def start_tcp_server(self, host, port): + self.server = self.loop.run_until_complete( + asyncio.start_server(self.handle_client, host, port, loop=self.loop) + ) + + for s in self.server.sockets: + logger.info('Listening on %r' % (s.getsockname(),)) + # Newer python does this automatically. Do it manually here for + # maximum compatibility + s.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1) + s.setsockopt(socket.SOL_TCP, socket.TCP_QUICKACK, 1) + + name = self.server.sockets[0].getsockname() + if self.server.sockets[0].family == socket.AF_INET6: + self.address = "[%s]:%d" % (name[0], name[1]) + else: + self.address = "%s:%d" % (name[0], name[1]) + + def start_unix_server(self, path): + def cleanup(): + os.unlink(path) + + cwd = os.getcwd() + try: + # Work around path length limits in AF_UNIX + os.chdir(os.path.dirname(path)) + self.server = self.loop.run_until_complete( + asyncio.start_unix_server(self.handle_client, os.path.basename(path), loop=self.loop) + ) + finally: + os.chdir(cwd) + + logger.info('Listening on %r' % path) + + self._cleanup_socket = cleanup + self.address = "unix://%s" % os.path.abspath(path) + + async def handle_client(self, reader, writer): + # writer.transport.set_write_buffer_limits(0) + try: + client = ServerClient(reader, writer, self.db, self.request_stats) + await client.process_requests() + except Exception as e: + import traceback + logger.error('Error from client: %s' % str(e), exc_info=True) + traceback.print_exc() + writer.close() + logger.info('Client disconnected') + + def serve_forever(self): + def signal_handler(): + self.loop.stop() + + self.loop.add_signal_handler(signal.SIGTERM, signal_handler) + + try: + self.loop.run_forever() + except KeyboardInterrupt: + pass + + self.server.close() + self.loop.run_until_complete(self.server.wait_closed()) + logger.info('Server shutting down') + + if self.close_loop: + self.loop.close() + + if self._cleanup_socket is not None: + self._cleanup_socket() diff --git a/external/poky/bitbake/lib/hashserv/tests.py b/external/poky/bitbake/lib/hashserv/tests.py new file mode 100644 index 00000000..6e862950 --- /dev/null +++ b/external/poky/bitbake/lib/hashserv/tests.py @@ -0,0 +1,165 @@ +#! /usr/bin/env python3 +# +# Copyright (C) 2018-2019 Garmin Ltd. +# +# SPDX-License-Identifier: GPL-2.0-only +# + +from . import create_server, create_client +import hashlib +import logging +import multiprocessing +import sys +import tempfile +import threading +import unittest + + +class TestHashEquivalenceServer(object): + METHOD = 'TestMethod' + + def _run_server(self): + # logging.basicConfig(level=logging.DEBUG, filename='bbhashserv.log', filemode='w', + # format='%(levelname)s %(filename)s:%(lineno)d %(message)s') + self.server.serve_forever() + + def setUp(self): + if sys.version_info < (3, 5, 0): + self.skipTest('Python 3.5 or later required') + + self.temp_dir = tempfile.TemporaryDirectory(prefix='bb-hashserv') + self.dbfile = os.path.join(self.temp_dir.name, 'db.sqlite') + + self.server = create_server(self.get_server_addr(), self.dbfile) + self.server_thread = multiprocessing.Process(target=self._run_server) + self.server_thread.start() + self.client = create_client(self.server.address) + + def tearDown(self): + # Shutdown server + s = getattr(self, 'server', None) + if s is not None: + self.server_thread.terminate() + self.server_thread.join() + self.client.close() + self.temp_dir.cleanup() + + def test_create_hash(self): + # Simple test that hashes can be created + taskhash = '35788efcb8dfb0a02659d81cf2bfd695fb30faf9' + outhash = '2765d4a5884be49b28601445c2760c5f21e7e5c0ee2b7e3fce98fd7e5970796f' + unihash = 'f46d3fbb439bd9b921095da657a4de906510d2cd' + + result = self.client.get_unihash(self.METHOD, taskhash) + self.assertIsNone(result, msg='Found unexpected task, %r' % result) + + result = self.client.report_unihash(taskhash, self.METHOD, outhash, unihash) + self.assertEqual(result['unihash'], unihash, 'Server returned bad unihash') + + def test_create_equivalent(self): + # Tests that a second reported task with the same outhash will be + # assigned the same unihash + taskhash = '53b8dce672cb6d0c73170be43f540460bfc347b4' + outhash = '5a9cb1649625f0bf41fc7791b635cd9c2d7118c7f021ba87dcd03f72b67ce7a8' + unihash = 'f37918cc02eb5a520b1aff86faacbc0a38124646' + + result = self.client.report_unihash(taskhash, self.METHOD, outhash, unihash) + self.assertEqual(result['unihash'], unihash, 'Server returned bad unihash') + + # Report a different task with the same outhash. The returned unihash + # should match the first task + taskhash2 = '3bf6f1e89d26205aec90da04854fbdbf73afe6b4' + unihash2 = 'af36b199320e611fbb16f1f277d3ee1d619ca58b' + result = self.client.report_unihash(taskhash2, self.METHOD, outhash, unihash2) + self.assertEqual(result['unihash'], unihash, 'Server returned bad unihash') + + def test_duplicate_taskhash(self): + # Tests that duplicate reports of the same taskhash with different + # outhash & unihash always return the unihash from the first reported + # taskhash + taskhash = '8aa96fcffb5831b3c2c0cb75f0431e3f8b20554a' + outhash = 'afe240a439959ce86f5e322f8c208e1fedefea9e813f2140c81af866cc9edf7e' + unihash = '218e57509998197d570e2c98512d0105985dffc9' + self.client.report_unihash(taskhash, self.METHOD, outhash, unihash) + + result = self.client.get_unihash(self.METHOD, taskhash) + self.assertEqual(result, unihash) + + outhash2 = '0904a7fe3dc712d9fd8a74a616ddca2a825a8ee97adf0bd3fc86082c7639914d' + unihash2 = 'ae9a7d252735f0dafcdb10e2e02561ca3a47314c' + self.client.report_unihash(taskhash, self.METHOD, outhash2, unihash2) + + result = self.client.get_unihash(self.METHOD, taskhash) + self.assertEqual(result, unihash) + + outhash3 = '77623a549b5b1a31e3732dfa8fe61d7ce5d44b3370f253c5360e136b852967b4' + unihash3 = '9217a7d6398518e5dc002ed58f2cbbbc78696603' + self.client.report_unihash(taskhash, self.METHOD, outhash3, unihash3) + + result = self.client.get_unihash(self.METHOD, taskhash) + self.assertEqual(result, unihash) + + def test_huge_message(self): + # Simple test that hashes can be created + taskhash = 'c665584ee6817aa99edfc77a44dd853828279370' + outhash = '3c979c3db45c569f51ab7626a4651074be3a9d11a84b1db076f5b14f7d39db44' + unihash = '90e9bc1d1f094c51824adca7f8ea79a048d68824' + + result = self.client.get_unihash(self.METHOD, taskhash) + self.assertIsNone(result, msg='Found unexpected task, %r' % result) + + siginfo = "0" * (self.client.max_chunk * 4) + + result = self.client.report_unihash(taskhash, self.METHOD, outhash, unihash, { + 'outhash_siginfo': siginfo + }) + self.assertEqual(result['unihash'], unihash, 'Server returned bad unihash') + + result = self.client.get_taskhash(self.METHOD, taskhash, True) + self.assertEqual(result['taskhash'], taskhash) + self.assertEqual(result['unihash'], unihash) + self.assertEqual(result['method'], self.METHOD) + self.assertEqual(result['outhash'], outhash) + self.assertEqual(result['outhash_siginfo'], siginfo) + + def test_stress(self): + def query_server(failures): + client = Client(self.server.address) + try: + for i in range(1000): + taskhash = hashlib.sha256() + taskhash.update(str(i).encode('utf-8')) + taskhash = taskhash.hexdigest() + result = client.get_unihash(self.METHOD, taskhash) + if result != taskhash: + failures.append("taskhash mismatch: %s != %s" % (result, taskhash)) + finally: + client.close() + + # Report hashes + for i in range(1000): + taskhash = hashlib.sha256() + taskhash.update(str(i).encode('utf-8')) + taskhash = taskhash.hexdigest() + self.client.report_unihash(taskhash, self.METHOD, taskhash, taskhash) + + failures = [] + threads = [threading.Thread(target=query_server, args=(failures,)) for t in range(100)] + + for t in threads: + t.start() + + for t in threads: + t.join() + + self.assertFalse(failures) + + +class TestHashEquivalenceUnixServer(TestHashEquivalenceServer, unittest.TestCase): + def get_server_addr(self): + return "unix://" + os.path.join(self.temp_dir.name, 'sock') + + +class TestHashEquivalenceTCPServer(TestHashEquivalenceServer, unittest.TestCase): + def get_server_addr(self): + return "localhost:0" diff --git a/external/poky/bitbake/lib/layerindexlib/__init__.py b/external/poky/bitbake/lib/layerindexlib/__init__.py index cb79cb37..77196b40 100644 --- a/external/poky/bitbake/lib/layerindexlib/__init__.py +++ b/external/poky/bitbake/lib/layerindexlib/__init__.py @@ -1,17 +1,7 @@ # Copyright (C) 2016-2018 Wind River Systems, Inc. # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import datetime @@ -386,7 +376,7 @@ layerBranches set. If not, they are effectively blank.''' invalid.append(name) - def _resolve_dependencies(layerbranches, ignores, dependencies, invalid): + def _resolve_dependencies(layerbranches, ignores, dependencies, invalid, processed=None): for layerbranch in layerbranches: if ignores and layerbranch.layer.name in ignores: continue @@ -398,6 +388,13 @@ layerBranches set. If not, they are effectively blank.''' if ignores and deplayerbranch.layer.name in ignores: continue + # Since this is depth first, we need to know what we're currently processing + # in order to avoid infinite recursion on a loop. + if processed and deplayerbranch.layer.name in processed: + # We have found a recursion... + logger.warning('Circular layer dependency found: %s -> %s' % (processed, deplayerbranch.layer.name)) + continue + # This little block is why we can't re-use the LayerIndexObj version, # we must be able to satisfy each dependencies across layer indexes and # use the layer index order for priority. (r stands for replacement below) @@ -421,7 +418,17 @@ layerBranches set. If not, they are effectively blank.''' # New dependency, we need to resolve it now... depth-first if deplayerbranch.layer.name not in dependencies: - (dependencies, invalid) = _resolve_dependencies([deplayerbranch], ignores, dependencies, invalid) + # Avoid recursion on this branch. + # We copy so we don't end up polluting the depth-first branch with other + # branches. Duplication between individual branches IS expected and + # handled by 'dependencies' processing. + if not processed: + local_processed = [] + else: + local_processed = processed.copy() + local_processed.append(deplayerbranch.layer.name) + + (dependencies, invalid) = _resolve_dependencies([deplayerbranch], ignores, dependencies, invalid, local_processed) if deplayerbranch.layer.name not in dependencies: dependencies[deplayerbranch.layer.name] = [deplayerbranch, layerdependency] diff --git a/external/poky/bitbake/lib/layerindexlib/cooker.py b/external/poky/bitbake/lib/layerindexlib/cooker.py index 848f0e2e..65b23d08 100644 --- a/external/poky/bitbake/lib/layerindexlib/cooker.py +++ b/external/poky/bitbake/lib/layerindexlib/cooker.py @@ -1,22 +1,11 @@ # Copyright (C) 2016-2018 Wind River Systems, Inc. # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import logging -import json -from collections import OrderedDict, defaultdict +from collections import defaultdict from urllib.parse import unquote, urlparse @@ -104,7 +93,7 @@ class CookerPlugin(layerindexlib.plugin.IndexPlugin): return index collections = d.getVar('BBFILE_COLLECTIONS') - layerconfs = d.varhistory.get_variable_items_files('BBFILE_COLLECTIONS', d) + layerconfs = d.varhistory.get_variable_items_files('BBFILE_COLLECTIONS') bbfile_collections = {layer: os.path.dirname(os.path.dirname(path)) for layer, path in layerconfs.items()} (_, bb_branch, _, _) = self._get_bitbake_info() diff --git a/external/poky/bitbake/lib/layerindexlib/plugin.py b/external/poky/bitbake/lib/layerindexlib/plugin.py index 92a2e978..cadda36c 100644 --- a/external/poky/bitbake/lib/layerindexlib/plugin.py +++ b/external/poky/bitbake/lib/layerindexlib/plugin.py @@ -1,27 +1,13 @@ # Copyright (C) 2016-2018 Wind River Systems, Inc. # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - # The file contains: # LayerIndex exceptions # Plugin base class # Utility Functions for working on layerindex data -import argparse import logging -import os -import bb.msg logger = logging.getLogger('BitBake.layerindexlib.plugin') diff --git a/external/poky/bitbake/lib/layerindexlib/restapi.py b/external/poky/bitbake/lib/layerindexlib/restapi.py index d08eb205..21fd1441 100644 --- a/external/poky/bitbake/lib/layerindexlib/restapi.py +++ b/external/poky/bitbake/lib/layerindexlib/restapi.py @@ -1,17 +1,7 @@ # Copyright (C) 2016-2018 Wind River Systems, Inc. # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import logging import json diff --git a/external/poky/bitbake/lib/layerindexlib/tests/common.py b/external/poky/bitbake/lib/layerindexlib/tests/common.py index 22a54585..077382f1 100644 --- a/external/poky/bitbake/lib/layerindexlib/tests/common.py +++ b/external/poky/bitbake/lib/layerindexlib/tests/common.py @@ -1,17 +1,7 @@ # Copyright (C) 2017-2018 Wind River Systems, Inc. # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import unittest import tempfile diff --git a/external/poky/bitbake/lib/layerindexlib/tests/cooker.py b/external/poky/bitbake/lib/layerindexlib/tests/cooker.py index fdbf0911..1d0685e0 100644 --- a/external/poky/bitbake/lib/layerindexlib/tests/cooker.py +++ b/external/poky/bitbake/lib/layerindexlib/tests/cooker.py @@ -1,27 +1,14 @@ # Copyright (C) 2018 Wind River Systems, Inc. # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -import unittest -import tempfile import os import bb import layerindexlib from layerindexlib.tests.common import LayersTest -import logging class LayerIndexCookerTest(LayersTest): diff --git a/external/poky/bitbake/lib/layerindexlib/tests/layerindexobj.py b/external/poky/bitbake/lib/layerindexlib/tests/layerindexobj.py index e2fbb950..de1e4746 100644 --- a/external/poky/bitbake/lib/layerindexlib/tests/layerindexobj.py +++ b/external/poky/bitbake/lib/layerindexlib/tests/layerindexobj.py @@ -1,26 +1,10 @@ # Copyright (C) 2017-2018 Wind River Systems, Inc. # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -import unittest -import tempfile -import os -import bb from layerindexlib.tests.common import LayersTest -import logging class LayerIndexObjectsTest(LayersTest): def setUp(self): diff --git a/external/poky/bitbake/lib/layerindexlib/tests/restapi.py b/external/poky/bitbake/lib/layerindexlib/tests/restapi.py index 58766950..e5ccafe5 100644 --- a/external/poky/bitbake/lib/layerindexlib/tests/restapi.py +++ b/external/poky/bitbake/lib/layerindexlib/tests/restapi.py @@ -1,27 +1,14 @@ # Copyright (C) 2017-2018 Wind River Systems, Inc. # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import unittest -import tempfile import os -import bb import layerindexlib from layerindexlib.tests.common import LayersTest -import logging def skipIfNoNetwork(): if os.environ.get("BB_SKIP_NETTESTS") == "yes": diff --git a/external/poky/bitbake/lib/ply/yacc.py b/external/poky/bitbake/lib/ply/yacc.py index d50886ed..561784f2 100644 --- a/external/poky/bitbake/lib/ply/yacc.py +++ b/external/poky/bitbake/lib/ply/yacc.py @@ -488,7 +488,7 @@ class LRParser: # --! DEBUG return result - if t == None: + if t is None: # --! DEBUG debug.error('Error : %s', @@ -766,7 +766,7 @@ class LRParser: n = symstack[-1] return getattr(n,"value",None) - if t == None: + if t is None: # We have some kind of parsing error here. To handle # this, we are going to push the current token onto @@ -1021,7 +1021,7 @@ class LRParser: n = symstack[-1] return getattr(n,"value",None) - if t == None: + if t is None: # We have some kind of parsing error here. To handle # this, we are going to push the current token onto diff --git a/external/poky/bitbake/lib/progressbar/__init__.py b/external/poky/bitbake/lib/progressbar/__init__.py index fbab744e..c545a627 100644 --- a/external/poky/bitbake/lib/progressbar/__init__.py +++ b/external/poky/bitbake/lib/progressbar/__init__.py @@ -4,6 +4,8 @@ # progressbar - Text progress bar library for Python. # Copyright (c) 2005 Nilton Volpato # +# SPDX-License-Identifier: LGPL-2.1-or-later OR BSD-3-Clause-Clear +# # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either diff --git a/external/poky/bitbake/lib/progressbar/compat.py b/external/poky/bitbake/lib/progressbar/compat.py index a39f4a1f..9804e0b5 100644 --- a/external/poky/bitbake/lib/progressbar/compat.py +++ b/external/poky/bitbake/lib/progressbar/compat.py @@ -3,6 +3,8 @@ # progressbar - Text progress bar library for Python. # Copyright (c) 2005 Nilton Volpato # +# SPDX-License-Identifier: LGPL-2.1-or-later OR BSD-3-Clause-Clear +# # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either diff --git a/external/poky/bitbake/lib/progressbar/progressbar.py b/external/poky/bitbake/lib/progressbar/progressbar.py index 2873ad6c..e2b6ba10 100644 --- a/external/poky/bitbake/lib/progressbar/progressbar.py +++ b/external/poky/bitbake/lib/progressbar/progressbar.py @@ -5,6 +5,8 @@ # # (With some small changes after importing into BitBake) # +# SPDX-License-Identifier: LGPL-2.1-or-later OR BSD-3-Clause-Clear +# # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either diff --git a/external/poky/bitbake/lib/progressbar/widgets.py b/external/poky/bitbake/lib/progressbar/widgets.py index 77285ca7..0772aa53 100644 --- a/external/poky/bitbake/lib/progressbar/widgets.py +++ b/external/poky/bitbake/lib/progressbar/widgets.py @@ -3,6 +3,8 @@ # progressbar - Text progress bar library for Python. # Copyright (c) 2005 Nilton Volpato # +# SPDX-License-Identifier: LGPL-2.1-or-later OR BSD-3-Clause-Clear +# # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either diff --git a/external/poky/bitbake/lib/prserv/__init__.py b/external/poky/bitbake/lib/prserv/__init__.py index c3cb73ad..9961040b 100644 --- a/external/poky/bitbake/lib/prserv/__init__.py +++ b/external/poky/bitbake/lib/prserv/__init__.py @@ -1,3 +1,7 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + __version__ = "1.0.0" import os, time diff --git a/external/poky/bitbake/lib/prserv/db.py b/external/poky/bitbake/lib/prserv/db.py index 495d09f3..cb2a2461 100644 --- a/external/poky/bitbake/lib/prserv/db.py +++ b/external/poky/bitbake/lib/prserv/db.py @@ -1,3 +1,7 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + import logging import os.path import errno @@ -67,7 +71,7 @@ class PRTable(object): data=self._execute("SELECT value FROM %s WHERE version=? AND pkgarch=? AND checksum=?;" % self.table, (version, pkgarch, checksum)) row=data.fetchone() - if row != None: + if row is not None: return row[0] else: #no value found, try to insert @@ -83,7 +87,7 @@ class PRTable(object): data=self._execute("SELECT value FROM %s WHERE version=? AND pkgarch=? AND checksum=?;" % self.table, (version, pkgarch, checksum)) row=data.fetchone() - if row != None: + if row is not None: return row[0] else: raise prserv.NotFoundError @@ -95,7 +99,7 @@ class PRTable(object): % (self.table, self.table), (version, pkgarch, checksum, version, pkgarch)) row=data.fetchone() - if row != None: + if row is not None: return row[0] else: #no value found, try to insert @@ -112,7 +116,7 @@ class PRTable(object): data=self._execute("SELECT value FROM %s WHERE version=? AND pkgarch=? AND checksum=?;" % self.table, (version, pkgarch, checksum)) row=data.fetchone() - if row != None: + if row is not None: return row[0] else: raise prserv.NotFoundError @@ -128,7 +132,7 @@ class PRTable(object): data = self._execute("SELECT value FROM %s WHERE version=? AND pkgarch=? AND checksum=?;" % self.table, (version, pkgarch, checksum)) row = data.fetchone() - if row != None: + if row is not None: val=row[0] else: #no value found, try to insert @@ -143,7 +147,7 @@ class PRTable(object): data = self._execute("SELECT value FROM %s WHERE version=? AND pkgarch=? AND checksum=?;" % self.table, (version, pkgarch, checksum)) row = data.fetchone() - if row != None: + if row is not None: val = row[0] return val @@ -166,7 +170,7 @@ class PRTable(object): data = self._execute("SELECT value FROM %s WHERE version=? AND pkgarch=? AND checksum=? AND value>=?;" % self.table, (version,pkgarch,checksum,value)) row=data.fetchone() - if row != None: + if row is not None: return row[0] else: return None @@ -253,7 +257,7 @@ class PRData(object): self.connection=sqlite3.connect(self.filename, isolation_level="EXCLUSIVE", check_same_thread = False) self.connection.row_factory=sqlite3.Row self.connection.execute("pragma synchronous = off;") - self.connection.execute("PRAGMA journal_mode = WAL;") + self.connection.execute("PRAGMA journal_mode = MEMORY;") self._tables={} def disconnect(self): diff --git a/external/poky/bitbake/lib/prserv/serv.py b/external/poky/bitbake/lib/prserv/serv.py index 6a99728c..25dcf8a0 100644 --- a/external/poky/bitbake/lib/prserv/serv.py +++ b/external/poky/bitbake/lib/prserv/serv.py @@ -1,3 +1,7 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + import os,sys,logging import signal, time from xmlrpc.server import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler @@ -239,6 +243,7 @@ class PRServer(SimpleXMLRPCServer): try: pid = os.fork() if pid > 0: + self.socket.close() # avoid ResourceWarning in parent return pid except OSError as e: raise Exception("%s [%d]" % (e.strerror, e.errno)) @@ -287,10 +292,9 @@ class PRServer(SimpleXMLRPCServer): logger.addHandler(streamhandler) # write pidfile - pid = str(os.getpid()) - pf = open(self.pidfile, 'w') - pf.write("%s\n" % pid) - pf.close() + pid = str(os.getpid()) + with open(self.pidfile, 'w') as pf: + pf.write("%s\n" % pid) self.work_forever() self.delpid() @@ -348,9 +352,8 @@ def start_daemon(dbfile, host, port, logfile): ip = socket.gethostbyname(host) pidfile = PIDPREFIX % (ip, port) try: - pf = open(pidfile,'r') - pid = int(pf.readline().strip()) - pf.close() + with open(pidfile) as pf: + pid = int(pf.readline().strip()) except IOError: pid = None @@ -375,9 +378,8 @@ def stop_daemon(host, port): ip = socket.gethostbyname(host) pidfile = PIDPREFIX % (ip, port) try: - pf = open(pidfile,'r') - pid = int(pf.readline().strip()) - pf.close() + with open(pidfile) as pf: + pid = int(pf.readline().strip()) except IOError: pid = None @@ -445,29 +447,35 @@ class PRServiceConfigError(Exception): def auto_start(d): global singleton - # Shutdown any existing PR Server - auto_shutdown() - host_params = list(filter(None, (d.getVar('PRSERV_HOST') or '').split(':'))) if not host_params: + # Shutdown any existing PR Server + auto_shutdown() return None if len(host_params) != 2: + # Shutdown any existing PR Server + auto_shutdown() logger.critical('\n'.join(['PRSERV_HOST: incorrect format', 'Usage: PRSERV_HOST = ":"'])) raise PRServiceConfigError - if is_local_special(host_params[0], int(host_params[1])) and not singleton: + if is_local_special(host_params[0], int(host_params[1])): import bb.utils cachedir = (d.getVar("PERSISTENT_DIR") or d.getVar("CACHE")) if not cachedir: logger.critical("Please set the 'PERSISTENT_DIR' or 'CACHE' variable") raise PRServiceConfigError - bb.utils.mkdirhier(cachedir) dbfile = os.path.join(cachedir, "prserv.sqlite3") logfile = os.path.join(cachedir, "prserv.log") - singleton = PRServSingleton(os.path.abspath(dbfile), os.path.abspath(logfile), ("localhost",0)) - singleton.start() + if singleton: + if singleton.dbfile != dbfile: + # Shutdown any existing PR Server as doesn't match config + auto_shutdown() + if not singleton: + bb.utils.mkdirhier(cachedir) + singleton = PRServSingleton(os.path.abspath(dbfile), os.path.abspath(logfile), ("localhost",0)) + singleton.start() if singleton: host, port = singleton.getinfo() else: diff --git a/external/poky/bitbake/lib/pyinotify.py b/external/poky/bitbake/lib/pyinotify.py index 4eb03b09..6ae40a2d 100644 --- a/external/poky/bitbake/lib/pyinotify.py +++ b/external/poky/bitbake/lib/pyinotify.py @@ -1,25 +1,9 @@ -#!/usr/bin/env python - +# # pyinotify.py - python interface to inotify # Copyright (c) 2005-2015 Sebastien Martini # -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. +# SPDX-License-Identifier: MIT # -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. """ pyinotify @@ -1290,7 +1274,7 @@ class Notifier: basename = os.path.basename(sys.argv[0]) or 'pyinotify' pid_file = os.path.join(dirname, basename + '.pid') - if pid_file != False and os.path.lexists(pid_file): + if pid_file and os.path.lexists(pid_file): err = 'Cannot daemonize: pid file %s already exists.' % pid_file raise NotifierError(err) @@ -1324,7 +1308,7 @@ class Notifier: fork_daemon() # Write pid - if pid_file != False: + if pid_file: flags = os.O_WRONLY|os.O_CREAT|os.O_NOFOLLOW|os.O_EXCL fd_pid = os.open(pid_file, flags, 0o0600) os.write(fd_pid, bytes(str(os.getpid()) + '\n', diff --git a/external/poky/bitbake/lib/toaster/bldcollector/admin.py b/external/poky/bitbake/lib/toaster/bldcollector/admin.py index 1f2e07f5..feaa888c 100644 --- a/external/poky/bitbake/lib/toaster/bldcollector/admin.py +++ b/external/poky/bitbake/lib/toaster/bldcollector/admin.py @@ -1,3 +1,7 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + from django.contrib import admin from orm.models import BitbakeVersion, Release, ToasterSetting, Layer_Version from django import forms diff --git a/external/poky/bitbake/lib/toaster/bldcollector/urls.py b/external/poky/bitbake/lib/toaster/bldcollector/urls.py index 888175d0..efd67a81 100644 --- a/external/poky/bitbake/lib/toaster/bldcollector/urls.py +++ b/external/poky/bitbake/lib/toaster/bldcollector/urls.py @@ -3,21 +3,10 @@ # # Copyright (C) 2014-2017 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -from django.conf.urls import include, url +from django.conf.urls import url import bldcollector.views diff --git a/external/poky/bitbake/lib/toaster/bldcollector/views.py b/external/poky/bitbake/lib/toaster/bldcollector/views.py index f32fa4d2..04cd8b3d 100644 --- a/external/poky/bitbake/lib/toaster/bldcollector/views.py +++ b/external/poky/bitbake/lib/toaster/bldcollector/views.py @@ -3,29 +3,11 @@ # # Copyright (C) 2014 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -from django.views.decorators.cache import cache_control -from django.core.urlresolvers import reverse -from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger +from django.urls import reverse from django.http import HttpResponseBadRequest, HttpResponse -from django.utils import timezone -from django.utils.html import escape -from datetime import timedelta -from django.utils import formats -from toastergui.templatetags.projecttags import json as jsonfilter -import json import os import tempfile import subprocess diff --git a/external/poky/bitbake/lib/toaster/bldcontrol/admin.py b/external/poky/bitbake/lib/toaster/bldcontrol/admin.py index fcbe5f59..1754bc11 100644 --- a/external/poky/bitbake/lib/toaster/bldcontrol/admin.py +++ b/external/poky/bitbake/lib/toaster/bldcontrol/admin.py @@ -1,5 +1,8 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + from django.contrib import admin -from django.contrib.admin.filters import RelatedFieldListFilter from .models import BuildEnvironment class BuildEnvironmentAdmin(admin.ModelAdmin): diff --git a/external/poky/bitbake/lib/toaster/bldcontrol/bbcontroller.py b/external/poky/bitbake/lib/toaster/bldcontrol/bbcontroller.py index 5195600d..71c288df 100644 --- a/external/poky/bitbake/lib/toaster/bldcontrol/bbcontroller.py +++ b/external/poky/bitbake/lib/toaster/bldcontrol/bbcontroller.py @@ -1,31 +1,15 @@ # -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- -# # BitBake Toaster Implementation # # Copyright (C) 2014 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# SPDX-License-Identifier: GPL-2.0-only # -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - import os import sys -import re -from django.db import transaction from django.db.models import Q -from bldcontrol.models import BuildEnvironment, BRLayer, BRVariable, BRTarget, BRBitbake +from bldcontrol.models import BuildEnvironment, BRLayer, BRBitbake # load Bitbake components path = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) diff --git a/external/poky/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py b/external/poky/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py index 94906359..75674ccb 100644 --- a/external/poky/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py +++ b/external/poky/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py @@ -1,47 +1,30 @@ # -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- -# # BitBake Toaster Implementation # # Copyright (C) 2014 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# SPDX-License-Identifier: GPL-2.0-only # -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - import os -import sys import re import shutil import time -from django.db import transaction -from django.db.models import Q -from bldcontrol.models import BuildEnvironment, BuildRequest, BRLayer, BRVariable, BRTarget, BRBitbake, Build -from orm.models import CustomImageRecipe, Layer, Layer_Version, Project, ProjectLayer, ToasterSetting +from bldcontrol.models import BuildEnvironment, BuildRequest, Build +from orm.models import CustomImageRecipe, Layer, Layer_Version, Project, ToasterSetting from orm.models import signal_runbuilds import subprocess from toastermain import settings -from bldcontrol.bbcontroller import BuildEnvironmentController, ShellCmdException, BuildSetupException, BitbakeController +from bldcontrol.bbcontroller import BuildEnvironmentController, ShellCmdException, BuildSetupException import logging logger = logging.getLogger("toaster") install_dir = os.environ.get('TOASTER_DIR') -from pprint import pprint, pformat +from pprint import pformat class LocalhostBEController(BuildEnvironmentController): """ Implementation of the BuildEnvironmentController for the localhost; diff --git a/external/poky/bitbake/lib/toaster/bldcontrol/management/commands/checksettings.py b/external/poky/bitbake/lib/toaster/bldcontrol/management/commands/checksettings.py index 14298d9d..20f9dce5 100644 --- a/external/poky/bitbake/lib/toaster/bldcontrol/management/commands/checksettings.py +++ b/external/poky/bitbake/lib/toaster/bldcontrol/management/commands/checksettings.py @@ -1,8 +1,10 @@ -from django.core.management.base import BaseCommand, CommandError -from django.db import transaction +# +# SPDX-License-Identifier: GPL-2.0-only +# + +from django.core.management.base import BaseCommand from django.core.management import call_command -from bldcontrol.bbcontroller import getBuildEnvironmentController, ShellCmdException from bldcontrol.models import BuildRequest, BuildEnvironment, BRError from orm.models import ToasterSetting, Build, Layer @@ -76,7 +78,7 @@ class Command(BaseCommand): template_conf = os.environ.get("TEMPLATECONF", "") custom_xml_only = os.environ.get("CUSTOM_XML_ONLY") - if ToasterSetting.objects.filter(name='CUSTOM_XML_ONLY').count() > 0 or (not custom_xml_only == None): + if ToasterSetting.objects.filter(name='CUSTOM_XML_ONLY').count() > 0 or custom_xml_only is not None: # only use the custom settings pass elif "poky" in template_conf: diff --git a/external/poky/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py b/external/poky/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py index 6a55dd46..19f659ec 100644 --- a/external/poky/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py +++ b/external/poky/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py @@ -1,3 +1,7 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + from django.core.management.base import BaseCommand from django.db import transaction from django.db.models import Q @@ -164,17 +168,17 @@ class Command(BaseCommand): try: self.cleanup() except Exception as e: - logger.warn("runbuilds: cleanup exception %s" % str(e)) + logger.warning("runbuilds: cleanup exception %s" % str(e)) try: self.archive() except Exception as e: - logger.warn("runbuilds: archive exception %s" % str(e)) + logger.warning("runbuilds: archive exception %s" % str(e)) try: self.schedule() except Exception as e: - logger.warn("runbuilds: schedule exception %s" % str(e)) + logger.warning("runbuilds: schedule exception %s" % str(e)) def handle(self, **options): pidfile_path = os.path.join(os.environ.get("BUILDDIR", "."), diff --git a/external/poky/bitbake/lib/toaster/bldcontrol/migrations/0001_initial.py b/external/poky/bitbake/lib/toaster/bldcontrol/migrations/0001_initial.py index 67db3785..7ee19f47 100644 --- a/external/poky/bitbake/lib/toaster/bldcontrol/migrations/0001_initial.py +++ b/external/poky/bitbake/lib/toaster/bldcontrol/migrations/0001_initial.py @@ -37,7 +37,7 @@ class Migration(migrations.Migration): ('giturl', models.CharField(max_length=254)), ('commit', models.CharField(max_length=254)), ('dirpath', models.CharField(max_length=254)), - ('layer_version', models.ForeignKey(to='orm.Layer_Version', null=True)), + ('layer_version', models.ForeignKey(to='orm.Layer_Version', null=True, on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -80,34 +80,34 @@ class Migration(migrations.Migration): ('state', models.IntegerField(default=0, choices=[(0, b'created'), (1, b'queued'), (2, b'in progress'), (3, b'completed'), (4, b'failed'), (5, b'deleted'), (6, b'archive')])), ('created', models.DateTimeField(auto_now_add=True)), ('updated', models.DateTimeField(auto_now=True)), - ('build', models.OneToOneField(null=True, to='orm.Build')), - ('environment', models.ForeignKey(to='bldcontrol.BuildEnvironment', null=True)), - ('project', models.ForeignKey(to='orm.Project')), + ('build', models.OneToOneField(null=True, to='orm.Build', on_delete=models.CASCADE)), + ('environment', models.ForeignKey(to='bldcontrol.BuildEnvironment', null=True, on_delete=models.CASCADE)), + ('project', models.ForeignKey(to='orm.Project', on_delete=models.CASCADE)), ], ), migrations.AddField( model_name='brvariable', name='req', - field=models.ForeignKey(to='bldcontrol.BuildRequest'), + field=models.ForeignKey(to='bldcontrol.BuildRequest', on_delete=models.CASCADE), ), migrations.AddField( model_name='brtarget', name='req', - field=models.ForeignKey(to='bldcontrol.BuildRequest'), + field=models.ForeignKey(to='bldcontrol.BuildRequest', on_delete=models.CASCADE), ), migrations.AddField( model_name='brlayer', name='req', - field=models.ForeignKey(to='bldcontrol.BuildRequest'), + field=models.ForeignKey(to='bldcontrol.BuildRequest', on_delete=models.CASCADE), ), migrations.AddField( model_name='brerror', name='req', - field=models.ForeignKey(to='bldcontrol.BuildRequest'), + field=models.ForeignKey(to='bldcontrol.BuildRequest', on_delete=models.CASCADE), ), migrations.AddField( model_name='brbitbake', name='req', - field=models.OneToOneField(to='bldcontrol.BuildRequest'), + field=models.OneToOneField(to='bldcontrol.BuildRequest', on_delete=models.CASCADE), ), ] diff --git a/external/poky/bitbake/lib/toaster/bldcontrol/models.py b/external/poky/bitbake/lib/toaster/bldcontrol/models.py index 409614b9..c2f302da 100644 --- a/external/poky/bitbake/lib/toaster/bldcontrol/models.py +++ b/external/poky/bitbake/lib/toaster/bldcontrol/models.py @@ -1,8 +1,11 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + from __future__ import unicode_literals from django.db import models -from django.core.validators import MaxValueValidator, MinValueValidator from django.utils.encoding import force_text -from orm.models import Project, ProjectLayer, ProjectVariable, ProjectTarget, Build, Layer_Version +from orm.models import Project, Build, Layer_Version import logging logger = logging.getLogger("toaster") @@ -82,9 +85,9 @@ class BuildRequest(models.Model): search_allowed_fields = ("brtarget__target", "build__project__name") - project = models.ForeignKey(Project) - build = models.OneToOneField(Build, null = True) # TODO: toasterui should set this when Build is created - environment = models.ForeignKey(BuildEnvironment, null = True) + project = models.ForeignKey(Project, on_delete=models.CASCADE) + build = models.OneToOneField(Build, on_delete=models.CASCADE, null = True) # TODO: toasterui should set this when Build is created + environment = models.ForeignKey(BuildEnvironment, on_delete=models.CASCADE, null = True) state = models.IntegerField(choices = REQUEST_STATE, default = REQ_CREATED) created = models.DateTimeField(auto_now_add = True) updated = models.DateTimeField(auto_now = True) @@ -128,32 +131,32 @@ class BuildRequest(models.Model): class BRLayer(models.Model): - req = models.ForeignKey(BuildRequest) + req = models.ForeignKey(BuildRequest, on_delete=models.CASCADE) name = models.CharField(max_length=100) giturl = models.CharField(max_length=254, null=True) local_source_dir = models.CharField(max_length=254, null=True) commit = models.CharField(max_length=254, null=True) dirpath = models.CharField(max_length=254, null=True) - layer_version = models.ForeignKey(Layer_Version, null=True) + layer_version = models.ForeignKey(Layer_Version, on_delete=models.CASCADE, null=True) class BRBitbake(models.Model): - req = models.OneToOneField(BuildRequest) # only one bitbake for a request + req = models.OneToOneField(BuildRequest, on_delete=models.CASCADE) # only one bitbake for a request giturl = models.CharField(max_length =254) commit = models.CharField(max_length = 254) dirpath = models.CharField(max_length = 254) class BRVariable(models.Model): - req = models.ForeignKey(BuildRequest) + req = models.ForeignKey(BuildRequest, on_delete=models.CASCADE) name = models.CharField(max_length=100) value = models.TextField(blank = True) class BRTarget(models.Model): - req = models.ForeignKey(BuildRequest) + req = models.ForeignKey(BuildRequest, on_delete=models.CASCADE) target = models.CharField(max_length=100) task = models.CharField(max_length=100, null=True) class BRError(models.Model): - req = models.ForeignKey(BuildRequest) + req = models.ForeignKey(BuildRequest, on_delete=models.CASCADE) errtype = models.CharField(max_length=100) errmsg = models.TextField() traceback = models.TextField() diff --git a/external/poky/bitbake/lib/toaster/bldcontrol/views.py b/external/poky/bitbake/lib/toaster/bldcontrol/views.py index 60f00ef0..286d88b4 100644 --- a/external/poky/bitbake/lib/toaster/bldcontrol/views.py +++ b/external/poky/bitbake/lib/toaster/bldcontrol/views.py @@ -1 +1,5 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + # Create your views here. diff --git a/external/poky/bitbake/lib/toaster/manage.py b/external/poky/bitbake/lib/toaster/manage.py index 0c7ea508..ae32619d 100755 --- a/external/poky/bitbake/lib/toaster/manage.py +++ b/external/poky/bitbake/lib/toaster/manage.py @@ -1,4 +1,8 @@ #!/usr/bin/env python3 +# +# SPDX-License-Identifier: GPL-2.0-only +# + import os import sys diff --git a/external/poky/bitbake/lib/toaster/orm/fixtures/oe-core.xml b/external/poky/bitbake/lib/toaster/orm/fixtures/oe-core.xml index 3ed234ca..fd93f4d8 100644 --- a/external/poky/bitbake/lib/toaster/orm/fixtures/oe-core.xml +++ b/external/poky/bitbake/lib/toaster/orm/fixtures/oe-core.xml @@ -8,9 +8,9 @@ - sumo + dunfell git://git.openembedded.org/bitbake - 1.38 + 1.46 HEAD @@ -23,18 +23,18 @@ master - thud + zeus git://git.openembedded.org/bitbake - 1.40 + 1.44 - sumo - Openembedded Sumo + dunfell + Openembedded Dunfell 1 - sumo - Toaster will run your builds using the tip of the <a href=\"http://cgit.openembedded.org/openembedded-core/log/?h=sumo\">OpenEmbedded Sumo</a> branch. + dunfell + Toaster will run your builds using the tip of the <a href=\"http://cgit.openembedded.org/openembedded-core/log/?h=dunfell\">OpenEmbedded Dunfell</a> branch. local @@ -51,11 +51,11 @@ Toaster will run your builds using the tip of the <a href=\"http://cgit.openembedded.org/openembedded-core/log/\">OpenEmbedded master</a> branch. - thud - Openembedded Thud + zeus + Openembedded Zeus 4 - thud - Toaster will run your builds using the tip of the <a href=\"http://cgit.openembedded.org/openembedded-core/log/?h=thud\">OpenEmbedded Thud</a> branch. + zeus + Toaster will run your builds using the tip of the <a href=\"http://cgit.openembedded.org/openembedded-core/log/?h=zeus\">OpenEmbedded Zeus</a> branch. diff --git a/external/poky/bitbake/lib/toaster/orm/fixtures/poky.xml b/external/poky/bitbake/lib/toaster/orm/fixtures/poky.xml index 80b7ef5e..902bc88a 100644 --- a/external/poky/bitbake/lib/toaster/orm/fixtures/poky.xml +++ b/external/poky/bitbake/lib/toaster/orm/fixtures/poky.xml @@ -8,9 +8,9 @@ - sumo + dunfell git://git.yoctoproject.org/poky - sumo + dunfell bitbake @@ -26,20 +26,20 @@ bitbake - thud + zeus git://git.yoctoproject.org/poky - thud + zeus bitbake - sumo - Yocto Project 2.5 "Sumo" + dunfell + Yocto Project 3.1 "Dunfell" 1 - sumo - Toaster will run your builds using the tip of the <a href="http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=sumo">Yocto Project Sumo branch</a>. + dunfell + Toaster will run your builds using the tip of the <a href="http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=dunfell">Yocto Project Dunfell branch</a>. local @@ -56,11 +56,11 @@ Toaster will run your builds using the tip of the <a href="http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/">Yocto Project Master branch</a>. - thud - Yocto Project 2.6 "Thud" + zeus + Yocto Project 3.0 "Zeus" 4 - thud - Toaster will run your builds using the tip of the <a href="http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=thud">Yocto Project Thud branch</a>. + zeus + Toaster will run your builds using the tip of the <a href="http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=zeus">Yocto Project Zeus branch</a>. @@ -130,7 +130,7 @@ 1 0 1 - sumo + dunfell meta @@ -152,7 +152,7 @@ 1 0 4 - thud + zeus meta @@ -168,7 +168,7 @@ 2 0 1 - sumo + dunfell meta-poky @@ -190,7 +190,7 @@ 2 0 4 - thud + zeus meta-poky @@ -206,7 +206,7 @@ 3 0 1 - sumo + dunfell meta-yocto-bsp @@ -228,7 +228,7 @@ 3 0 4 - thud + zeus meta-yocto-bsp diff --git a/external/poky/bitbake/lib/toaster/orm/management/commands/lsupdates.py b/external/poky/bitbake/lib/toaster/orm/management/commands/lsupdates.py index 66114ff8..a4dbcaa7 100644 --- a/external/poky/bitbake/lib/toaster/orm/management/commands/lsupdates.py +++ b/external/poky/bitbake/lib/toaster/orm/management/commands/lsupdates.py @@ -1,27 +1,14 @@ # -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- -# # BitBake Toaster Implementation # # Copyright (C) 2016-2017 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# SPDX-License-Identifier: GPL-2.0-only # -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. from django.core.management.base import BaseCommand -from orm.models import LayerSource, Layer, Release, Layer_Version +from orm.models import Layer, Release, Layer_Version from orm.models import LayerVersionDependency, Machine, Recipe from orm.models import Distro from orm.models import ToasterSetting diff --git a/external/poky/bitbake/lib/toaster/orm/migrations/0001_initial.py b/external/poky/bitbake/lib/toaster/orm/migrations/0001_initial.py index 760462f6..a8ac23bf 100644 --- a/external/poky/bitbake/lib/toaster/orm/migrations/0001_initial.py +++ b/external/poky/bitbake/lib/toaster/orm/migrations/0001_initial.py @@ -54,7 +54,7 @@ class Migration(migrations.Migration): ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('file_name', models.FilePathField()), ('file_size', models.IntegerField()), - ('build', models.ForeignKey(to='orm.Build')), + ('build', models.ForeignKey(to='orm.Build', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -64,7 +64,7 @@ class Migration(migrations.Migration): ('area', models.IntegerField(choices=[(0, b'variable')])), ('key', models.CharField(max_length=100)), ('text', models.TextField()), - ('build', models.ForeignKey(related_name='helptext_build', to='orm.Build')), + ('build', models.ForeignKey(related_name='helptext_build', to='orm.Build', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -94,8 +94,8 @@ class Migration(migrations.Migration): ('dirpath', models.CharField(default=None, max_length=255, null=True)), ('priority', models.IntegerField(default=0)), ('local_path', models.FilePathField(default=b'/', max_length=1024)), - ('build', models.ForeignKey(related_name='layer_version_build', default=None, to='orm.Build', null=True)), - ('layer', models.ForeignKey(related_name='layer_version_layer', to='orm.Layer')), + ('build', models.ForeignKey(related_name='layer_version_build', default=None, to='orm.Build', null=True, on_delete=models.CASCADE)), + ('layer', models.ForeignKey(related_name='layer_version_layer', to='orm.Layer', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -112,9 +112,9 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('up_id', models.IntegerField(default=None, null=True)), - ('depends_on', models.ForeignKey(related_name='dependees', to='orm.Layer_Version')), - ('layer_source', models.ForeignKey(default=None, to='orm.LayerSource', null=True)), - ('layer_version', models.ForeignKey(related_name='dependencies', to='orm.Layer_Version')), + ('depends_on', models.ForeignKey(related_name='dependees', to='orm.Layer_Version', on_delete=models.CASCADE)), + ('layer_source', models.ForeignKey(default=None, to='orm.LayerSource', null=True, on_delete=models.CASCADE)), + ('layer_version', models.ForeignKey(related_name='dependencies', to='orm.Layer_Version', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -125,7 +125,7 @@ class Migration(migrations.Migration): ('message', models.TextField(null=True, blank=True)), ('pathname', models.FilePathField(max_length=255, blank=True)), ('lineno', models.IntegerField(null=True)), - ('build', models.ForeignKey(to='orm.Build')), + ('build', models.ForeignKey(to='orm.Build', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -136,8 +136,8 @@ class Migration(migrations.Migration): ('up_date', models.DateTimeField(default=None, null=True)), ('name', models.CharField(max_length=255)), ('description', models.CharField(max_length=255)), - ('layer_source', models.ForeignKey(default=None, to='orm.LayerSource', null=True)), - ('layer_version', models.ForeignKey(to='orm.Layer_Version')), + ('layer_source', models.ForeignKey(default=None, to='orm.LayerSource', null=True, on_delete=models.CASCADE)), + ('layer_version', models.ForeignKey(to='orm.Layer_Version', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -154,7 +154,7 @@ class Migration(migrations.Migration): ('installed_size', models.IntegerField(default=0)), ('section', models.CharField(max_length=80, blank=True)), ('license', models.CharField(max_length=80, blank=True)), - ('build', models.ForeignKey(to='orm.Build', null=True)), + ('build', models.ForeignKey(to='orm.Build', null=True, on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -162,8 +162,8 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('dep_type', models.IntegerField(choices=[(0, b'depends'), (1, b'depends'), (3, b'recommends'), (2, b'recommends'), (4, b'suggests'), (5, b'provides'), (6, b'replaces'), (7, b'conflicts')])), - ('depends_on', models.ForeignKey(related_name='package_dependencies_target', to='orm.Package')), - ('package', models.ForeignKey(related_name='package_dependencies_source', to='orm.Package')), + ('depends_on', models.ForeignKey(related_name='package_dependencies_target', to='orm.Package', on_delete=models.CASCADE)), + ('package', models.ForeignKey(related_name='package_dependencies_source', to='orm.Package', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -172,7 +172,7 @@ class Migration(migrations.Migration): ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('path', models.FilePathField(max_length=255, blank=True)), ('size', models.IntegerField()), - ('package', models.ForeignKey(related_name='buildfilelist_package', to='orm.Package')), + ('package', models.ForeignKey(related_name='buildfilelist_package', to='orm.Package', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -185,7 +185,7 @@ class Migration(migrations.Migration): ('updated', models.DateTimeField(auto_now=True)), ('user_id', models.IntegerField(null=True)), ('is_default', models.BooleanField(default=False)), - ('bitbake_version', models.ForeignKey(to='orm.BitbakeVersion', null=True)), + ('bitbake_version', models.ForeignKey(to='orm.BitbakeVersion', null=True, on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -193,8 +193,8 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('optional', models.BooleanField(default=True)), - ('layercommit', models.ForeignKey(to='orm.Layer_Version', null=True)), - ('project', models.ForeignKey(to='orm.Project')), + ('layercommit', models.ForeignKey(to='orm.Layer_Version', null=True, on_delete=models.CASCADE)), + ('project', models.ForeignKey(to='orm.Project', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -203,7 +203,7 @@ class Migration(migrations.Migration): ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('target', models.CharField(max_length=100)), ('task', models.CharField(max_length=100, null=True)), - ('project', models.ForeignKey(to='orm.Project')), + ('project', models.ForeignKey(to='orm.Project', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -212,7 +212,7 @@ class Migration(migrations.Migration): ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('name', models.CharField(max_length=100)), ('value', models.TextField(blank=True)), - ('project', models.ForeignKey(to='orm.Project')), + ('project', models.ForeignKey(to='orm.Project', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -232,8 +232,8 @@ class Migration(migrations.Migration): ('file_path', models.FilePathField(max_length=255)), ('pathflags', models.CharField(max_length=200, blank=True)), ('is_image', models.BooleanField(default=False)), - ('layer_source', models.ForeignKey(default=None, to='orm.LayerSource', null=True)), - ('layer_version', models.ForeignKey(related_name='recipe_layer_version', to='orm.Layer_Version')), + ('layer_source', models.ForeignKey(default=None, to='orm.LayerSource', null=True, on_delete=models.CASCADE)), + ('layer_version', models.ForeignKey(related_name='recipe_layer_version', to='orm.Layer_Version', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -241,8 +241,8 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('dep_type', models.IntegerField(choices=[(0, b'depends'), (1, b'rdepends')])), - ('depends_on', models.ForeignKey(related_name='r_dependencies_depends', to='orm.Recipe')), - ('recipe', models.ForeignKey(related_name='r_dependencies_recipe', to='orm.Recipe')), + ('depends_on', models.ForeignKey(related_name='r_dependencies_depends', to='orm.Recipe', on_delete=models.CASCADE)), + ('recipe', models.ForeignKey(related_name='r_dependencies_recipe', to='orm.Recipe', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -253,7 +253,7 @@ class Migration(migrations.Migration): ('description', models.CharField(max_length=255)), ('branch_name', models.CharField(default=b'', max_length=50)), ('helptext', models.TextField(null=True)), - ('bitbake_version', models.ForeignKey(to='orm.BitbakeVersion')), + ('bitbake_version', models.ForeignKey(to='orm.BitbakeVersion', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -261,7 +261,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('layer_name', models.CharField(default=b'', max_length=100)), - ('release', models.ForeignKey(to='orm.Release')), + ('release', models.ForeignKey(to='orm.Release', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -269,8 +269,8 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('priority', models.IntegerField(default=0)), - ('layer_source', models.ForeignKey(to='orm.LayerSource')), - ('release', models.ForeignKey(to='orm.Release')), + ('layer_source', models.ForeignKey(to='orm.LayerSource', on_delete=models.CASCADE)), + ('release', models.ForeignKey(to='orm.Release', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -282,7 +282,7 @@ class Migration(migrations.Migration): ('is_image', models.BooleanField(default=False)), ('image_size', models.IntegerField(default=0)), ('license_manifest_path', models.CharField(max_length=500, null=True)), - ('build', models.ForeignKey(to='orm.Build')), + ('build', models.ForeignKey(to='orm.Build', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -295,9 +295,9 @@ class Migration(migrations.Migration): ('permission', models.CharField(max_length=16)), ('owner', models.CharField(max_length=128)), ('group', models.CharField(max_length=128)), - ('directory', models.ForeignKey(related_name='directory_set', to='orm.Target_File', null=True)), - ('sym_target', models.ForeignKey(related_name='symlink_set', to='orm.Target_File', null=True)), - ('target', models.ForeignKey(to='orm.Target')), + ('directory', models.ForeignKey(related_name='directory_set', to='orm.Target_File', null=True, on_delete=models.CASCADE)), + ('sym_target', models.ForeignKey(related_name='symlink_set', to='orm.Target_File', null=True, on_delete=models.CASCADE)), + ('target', models.ForeignKey(to='orm.Target', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -306,15 +306,15 @@ class Migration(migrations.Migration): ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('file_name', models.FilePathField(max_length=254)), ('file_size', models.IntegerField()), - ('target', models.ForeignKey(to='orm.Target')), + ('target', models.ForeignKey(to='orm.Target', on_delete=models.CASCADE)), ], ), migrations.CreateModel( name='Target_Installed_Package', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('package', models.ForeignKey(related_name='buildtargetlist_package', to='orm.Package')), - ('target', models.ForeignKey(to='orm.Target')), + ('package', models.ForeignKey(related_name='buildtargetlist_package', to='orm.Package', on_delete=models.CASCADE)), + ('target', models.ForeignKey(to='orm.Target', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -337,8 +337,8 @@ class Migration(migrations.Migration): ('sstate_result', models.IntegerField(default=0, choices=[(0, b'Not Applicable'), (1, b'File not in cache'), (2, b'Failed'), (3, b'Succeeded')])), ('message', models.CharField(max_length=240)), ('logfile', models.FilePathField(max_length=255, blank=True)), - ('build', models.ForeignKey(related_name='task_build', to='orm.Build')), - ('recipe', models.ForeignKey(related_name='tasks', to='orm.Recipe')), + ('build', models.ForeignKey(related_name='task_build', to='orm.Build', on_delete=models.CASCADE)), + ('recipe', models.ForeignKey(related_name='tasks', to='orm.Recipe', on_delete=models.CASCADE)), ], options={ 'ordering': ('order', 'recipe'), @@ -348,8 +348,8 @@ class Migration(migrations.Migration): name='Task_Dependency', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('depends_on', models.ForeignKey(related_name='task_dependencies_depends', to='orm.Task')), - ('task', models.ForeignKey(related_name='task_dependencies_task', to='orm.Task')), + ('depends_on', models.ForeignKey(related_name='task_dependencies_depends', to='orm.Task', on_delete=models.CASCADE)), + ('task', models.ForeignKey(related_name='task_dependencies_task', to='orm.Task', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -370,7 +370,7 @@ class Migration(migrations.Migration): ('changed', models.BooleanField(default=False)), ('human_readable_name', models.CharField(max_length=200)), ('description', models.TextField(blank=True)), - ('build', models.ForeignKey(related_name='variable_build', to='orm.Build')), + ('build', models.ForeignKey(related_name='variable_build', to='orm.Build', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -381,28 +381,28 @@ class Migration(migrations.Migration): ('file_name', models.FilePathField(max_length=255)), ('line_number', models.IntegerField(null=True)), ('operation', models.CharField(max_length=64)), - ('variable', models.ForeignKey(related_name='vhistory', to='orm.Variable')), + ('variable', models.ForeignKey(related_name='vhistory', to='orm.Variable', on_delete=models.CASCADE)), ], ), migrations.AddField( model_name='project', name='release', - field=models.ForeignKey(to='orm.Release', null=True), + field=models.ForeignKey(to='orm.Release', null=True, on_delete=models.CASCADE), ), migrations.AddField( model_name='package_dependency', name='target', - field=models.ForeignKey(to='orm.Target', null=True), + field=models.ForeignKey(to='orm.Target', null=True, on_delete=models.CASCADE), ), migrations.AddField( model_name='package', name='recipe', - field=models.ForeignKey(to='orm.Recipe', null=True), + field=models.ForeignKey(to='orm.Recipe', null=True, on_delete=models.CASCADE), ), migrations.AddField( model_name='logmessage', name='task', - field=models.ForeignKey(blank=True, to='orm.Task', null=True), + field=models.ForeignKey(blank=True, to='orm.Task', null=True, on_delete=models.CASCADE), ), migrations.AlterUniqueTogether( name='layersource', @@ -411,32 +411,32 @@ class Migration(migrations.Migration): migrations.AddField( model_name='layer_version', name='layer_source', - field=models.ForeignKey(default=None, to='orm.LayerSource', null=True), + field=models.ForeignKey(default=None, to='orm.LayerSource', null=True, on_delete=models.CASCADE), ), migrations.AddField( model_name='layer_version', name='project', - field=models.ForeignKey(default=None, to='orm.Project', null=True), + field=models.ForeignKey(default=None, to='orm.Project', null=True, on_delete=models.CASCADE), ), migrations.AddField( model_name='layer_version', name='up_branch', - field=models.ForeignKey(default=None, to='orm.Branch', null=True), + field=models.ForeignKey(default=None, to='orm.Branch', null=True, on_delete=models.CASCADE), ), migrations.AddField( model_name='layer', name='layer_source', - field=models.ForeignKey(default=None, to='orm.LayerSource', null=True), + field=models.ForeignKey(default=None, to='orm.LayerSource', null=True, on_delete=models.CASCADE), ), migrations.AddField( model_name='build', name='project', - field=models.ForeignKey(to='orm.Project'), + field=models.ForeignKey(to='orm.Project', on_delete=models.CASCADE), ), migrations.AddField( model_name='branch', name='layer_source', - field=models.ForeignKey(default=True, to='orm.LayerSource', null=True), + field=models.ForeignKey(default=True, to='orm.LayerSource', null=True, on_delete=models.CASCADE), ), migrations.CreateModel( name='ImportedLayerSource', diff --git a/external/poky/bitbake/lib/toaster/orm/migrations/0002_customimagerecipe.py b/external/poky/bitbake/lib/toaster/orm/migrations/0002_customimagerecipe.py index 9cec82e8..09c2bffa 100644 --- a/external/poky/bitbake/lib/toaster/orm/migrations/0002_customimagerecipe.py +++ b/external/poky/bitbake/lib/toaster/orm/migrations/0002_customimagerecipe.py @@ -14,10 +14,10 @@ class Migration(migrations.Migration): migrations.CreateModel( name='CustomImageRecipe', fields=[ - ('recipe_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='orm.Recipe')), + ('recipe_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='orm.Recipe', on_delete=models.CASCADE)), ('last_updated', models.DateTimeField(default=None, null=True)), - ('base_recipe', models.ForeignKey(related_name='based_on_recipe', to='orm.Recipe')), - ('project', models.ForeignKey(to='orm.Project')), + ('base_recipe', models.ForeignKey(related_name='based_on_recipe', to='orm.Recipe', on_delete=models.CASCADE)), + ('project', models.ForeignKey(to='orm.Project', on_delete=models.CASCADE)), ], bases=('orm.recipe',), ), diff --git a/external/poky/bitbake/lib/toaster/orm/migrations/0003_customimagepackage.py b/external/poky/bitbake/lib/toaster/orm/migrations/0003_customimagepackage.py index b027f661..8cb81d7b 100644 --- a/external/poky/bitbake/lib/toaster/orm/migrations/0003_customimagepackage.py +++ b/external/poky/bitbake/lib/toaster/orm/migrations/0003_customimagepackage.py @@ -14,7 +14,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='CustomImagePackage', fields=[ - ('package_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='orm.Package')), + ('package_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='orm.Package', on_delete=models.CASCADE)), ('recipe_appends', models.ManyToManyField(related_name='appends_set', to='orm.CustomImageRecipe')), ('recipe_excludes', models.ManyToManyField(related_name='excludes_set', to='orm.CustomImageRecipe')), ('recipe_includes', models.ManyToManyField(related_name='includes_set', to='orm.CustomImageRecipe')), diff --git a/external/poky/bitbake/lib/toaster/orm/migrations/0004_provides.py b/external/poky/bitbake/lib/toaster/orm/migrations/0004_provides.py index dfde2d13..84496049 100644 --- a/external/poky/bitbake/lib/toaster/orm/migrations/0004_provides.py +++ b/external/poky/bitbake/lib/toaster/orm/migrations/0004_provides.py @@ -16,12 +16,12 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('name', models.CharField(max_length=100)), - ('recipe', models.ForeignKey(to='orm.Recipe')), + ('recipe', models.ForeignKey(to='orm.Recipe', on_delete=models.CASCADE)), ], ), migrations.AddField( model_name='recipe_dependency', name='via', - field=models.ForeignKey(null=True, default=None, to='orm.Provides'), + field=models.ForeignKey(null=True, default=None, to='orm.Provides', on_delete=models.CASCADE), ), ] diff --git a/external/poky/bitbake/lib/toaster/orm/migrations/0008_refactor_artifact_models.py b/external/poky/bitbake/lib/toaster/orm/migrations/0008_refactor_artifact_models.py index 3367582a..41a547a6 100644 --- a/external/poky/bitbake/lib/toaster/orm/migrations/0008_refactor_artifact_models.py +++ b/external/poky/bitbake/lib/toaster/orm/migrations/0008_refactor_artifact_models.py @@ -17,7 +17,7 @@ class Migration(migrations.Migration): ('id', models.AutoField(auto_created=True, primary_key=True, verbose_name='ID', serialize=False)), ('file_name', models.FilePathField()), ('file_size', models.IntegerField()), - ('target', models.ForeignKey(to='orm.Target')), + ('target', models.ForeignKey(to='orm.Target', on_delete=models.CASCADE)), ], ), migrations.CreateModel( @@ -26,7 +26,7 @@ class Migration(migrations.Migration): ('id', models.AutoField(auto_created=True, primary_key=True, verbose_name='ID', serialize=False)), ('file_name', models.FilePathField()), ('file_size', models.IntegerField()), - ('target', models.ForeignKey(to='orm.Target')), + ('target', models.ForeignKey(to='orm.Target', on_delete=models.CASCADE)), ], ), migrations.RemoveField( diff --git a/external/poky/bitbake/lib/toaster/orm/migrations/0011_delete_layersource.py b/external/poky/bitbake/lib/toaster/orm/migrations/0011_delete_layersource.py index 75506961..3f3a2e16 100644 --- a/external/poky/bitbake/lib/toaster/orm/migrations/0011_delete_layersource.py +++ b/external/poky/bitbake/lib/toaster/orm/migrations/0011_delete_layersource.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import migrations, models +from django.db import migrations class Migration(migrations.Migration): diff --git a/external/poky/bitbake/lib/toaster/orm/migrations/0012_use_release_instead_of_up_branch.py b/external/poky/bitbake/lib/toaster/orm/migrations/0012_use_release_instead_of_up_branch.py index 0e6bb833..4b96bf09 100644 --- a/external/poky/bitbake/lib/toaster/orm/migrations/0012_use_release_instead_of_up_branch.py +++ b/external/poky/bitbake/lib/toaster/orm/migrations/0012_use_release_instead_of_up_branch.py @@ -46,7 +46,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='layer_version', name='release', - field=models.ForeignKey(to='orm.Release', default=None, null=True), + field=models.ForeignKey(to='orm.Release', default=None, null=True, on_delete=models.CASCADE), ), migrations.RunPython(branch_to_release, reverse_code=migrations.RunPython.noop), diff --git a/external/poky/bitbake/lib/toaster/orm/migrations/0017_distro_clone.py b/external/poky/bitbake/lib/toaster/orm/migrations/0017_distro_clone.py index d3c59012..731c0deb 100644 --- a/external/poky/bitbake/lib/toaster/orm/migrations/0017_distro_clone.py +++ b/external/poky/bitbake/lib/toaster/orm/migrations/0017_distro_clone.py @@ -18,7 +18,7 @@ class Migration(migrations.Migration): ('up_date', models.DateTimeField(default=None, null=True)), ('name', models.CharField(max_length=255)), ('description', models.CharField(max_length=255)), - ('layer_version', models.ForeignKey(to='orm.Layer_Version')), + ('layer_version', models.ForeignKey(to='orm.Layer_Version', on_delete=models.CASCADE)), ], ), ] diff --git a/external/poky/bitbake/lib/toaster/orm/migrations/0019_django_2_2.py b/external/poky/bitbake/lib/toaster/orm/migrations/0019_django_2_2.py new file mode 100644 index 00000000..666aef18 --- /dev/null +++ b/external/poky/bitbake/lib/toaster/orm/migrations/0019_django_2_2.py @@ -0,0 +1,23 @@ +# Generated by Django 2.2.7 on 2019-11-19 03:38 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('orm', '0018_project_specific'), + ] + + operations = [ + migrations.RemoveField( + model_name='distro', + name='up_id', + ), + migrations.AlterField( + model_name='build', + name='recipes_parsed', + field=models.IntegerField(default=1), + ), + ] diff --git a/external/poky/bitbake/lib/toaster/orm/models.py b/external/poky/bitbake/lib/toaster/orm/models.py index 77202902..7f7e922a 100644 --- a/external/poky/bitbake/lib/toaster/orm/models.py +++ b/external/poky/bitbake/lib/toaster/orm/models.py @@ -1,23 +1,10 @@ # -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- -# # BitBake Toaster Implementation # # Copyright (C) 2013 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# SPDX-License-Identifier: GPL-2.0-only # -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. from __future__ import unicode_literals @@ -26,7 +13,7 @@ from django.db.models import F, Q, Sum, Count from django.utils import timezone from django.utils.encoding import force_bytes -from django.core.urlresolvers import reverse +from django.urls import reverse from django.core import validators from django.conf import settings @@ -191,8 +178,8 @@ class Project(models.Model): 'release__branch_name'] name = models.CharField(max_length=100) short_description = models.CharField(max_length=50, blank=True) - bitbake_version = models.ForeignKey('BitbakeVersion', null=True) - release = models.ForeignKey("Release", null=True) + bitbake_version = models.ForeignKey('BitbakeVersion', on_delete=models.CASCADE, null=True) + release = models.ForeignKey("Release", on_delete=models.CASCADE, null=True) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) # This is a horrible hack; since Toaster has no "User" model available when @@ -482,7 +469,7 @@ class Build(models.Model): search_allowed_fields = ['machine', 'cooker_log_path', "target__target", "target__target_image_file__file_name"] - project = models.ForeignKey(Project) # must have a project + project = models.ForeignKey(Project, on_delete=models.CASCADE) # must have a project machine = models.CharField(max_length=100) distro = models.CharField(max_length=100) distro_version = models.CharField(max_length=100) @@ -790,13 +777,13 @@ class Build(models.Model): return "%d %s %s" % (self.id, self.project, ",".join([t.target for t in self.target_set.all()])) class ProjectTarget(models.Model): - project = models.ForeignKey(Project) + project = models.ForeignKey(Project, on_delete=models.CASCADE) target = models.CharField(max_length=100) task = models.CharField(max_length=100, null=True) class Target(models.Model): search_allowed_fields = ['target', 'file_name'] - build = models.ForeignKey(Build) + build = models.ForeignKey(Build, on_delete=models.CASCADE) target = models.CharField(max_length=100) task = models.CharField(max_length=100, null=True) is_image = models.BooleanField(default = False) @@ -957,7 +944,7 @@ class Target(models.Model): # kernel artifacts for a target: bzImage and modules* class TargetKernelFile(models.Model): - target = models.ForeignKey(Target) + target = models.ForeignKey(Target, on_delete=models.CASCADE) file_name = models.FilePathField() file_size = models.IntegerField() @@ -967,7 +954,7 @@ class TargetKernelFile(models.Model): # SDK artifacts for a target: sh and manifest files class TargetSDKFile(models.Model): - target = models.ForeignKey(Target) + target = models.ForeignKey(Target, on_delete=models.CASCADE) file_name = models.FilePathField() file_size = models.IntegerField() @@ -978,15 +965,15 @@ class TargetSDKFile(models.Model): class Target_Image_File(models.Model): # valid suffixes for image files produced by a build SUFFIXES = { - 'btrfs', 'cpio', 'cpio.gz', 'cpio.lz4', 'cpio.lzma', 'cpio.xz', - 'cramfs', 'elf', 'ext2', 'ext2.bz2', 'ext2.gz', 'ext2.lzma', 'ext4', - 'ext4.gz', 'ext3', 'ext3.gz', 'hdddirect', 'hddimg', 'iso', 'jffs2', - 'jffs2.sum', 'multiubi', 'qcow2', 'squashfs', 'squashfs-lzo', + 'btrfs', 'container', 'cpio', 'cpio.gz', 'cpio.lz4', 'cpio.lzma', + 'cpio.xz', 'cramfs', 'ext2', 'ext2.bz2', 'ext2.gz', 'ext2.lzma', + 'ext3', 'ext3.gz', 'ext4', 'ext4.gz', 'f2fs', 'hddimg', 'iso', 'jffs2', + 'jffs2.sum', 'multiubi', 'squashfs', 'squashfs-lz4', 'squashfs-lzo', 'squashfs-xz', 'tar', 'tar.bz2', 'tar.gz', 'tar.lz4', 'tar.xz', 'ubi', - 'ubifs', 'vdi', 'vmdk', 'wic', 'wic.bmap', 'wic.bz2', 'wic.gz', 'wic.lzma' + 'ubifs', 'wic', 'wic.bz2', 'wic.gz', 'wic.lzma' } - target = models.ForeignKey(Target) + target = models.ForeignKey(Target, on_delete=models.CASCADE) file_name = models.FilePathField(max_length=254) file_size = models.IntegerField() @@ -1020,15 +1007,15 @@ class Target_File(models.Model): ( ITYPE_BLOCK ,'block'), ) - target = models.ForeignKey(Target) + target = models.ForeignKey(Target, on_delete=models.CASCADE) path = models.FilePathField() size = models.IntegerField() inodetype = models.IntegerField(choices = ITYPES) permission = models.CharField(max_length=16) owner = models.CharField(max_length=128) group = models.CharField(max_length=128) - directory = models.ForeignKey('Target_File', related_name="directory_set", null=True) - sym_target = models.ForeignKey('Target_File', related_name="symlink_set", null=True) + directory = models.ForeignKey('Target_File', on_delete=models.CASCADE, related_name="directory_set", null=True) + sym_target = models.ForeignKey('Target_File', on_delete=models.CASCADE, related_name="symlink_set", null=True) class Task(models.Model): @@ -1115,13 +1102,13 @@ class Task(models.Model): def get_description(self): return self._helptext - build = models.ForeignKey(Build, related_name='task_build') + build = models.ForeignKey(Build, on_delete=models.CASCADE, related_name='task_build') order = models.IntegerField(null=True) task_executed = models.BooleanField(default=False) # True means Executed, False means Not/Executed outcome = models.IntegerField(choices=TASK_OUTCOME, default=OUTCOME_NA) sstate_checksum = models.CharField(max_length=100, blank=True) path_to_sstate_obj = models.FilePathField(max_length=500, blank=True) - recipe = models.ForeignKey('Recipe', related_name='tasks') + recipe = models.ForeignKey('Recipe', on_delete=models.CASCADE, related_name='tasks') task_name = models.CharField(max_length=100) source_url = models.FilePathField(max_length=255, blank=True) work_directory = models.FilePathField(max_length=255, blank=True) @@ -1160,13 +1147,13 @@ class Task(models.Model): class Task_Dependency(models.Model): - task = models.ForeignKey(Task, related_name='task_dependencies_task') - depends_on = models.ForeignKey(Task, related_name='task_dependencies_depends') + task = models.ForeignKey(Task, on_delete=models.CASCADE, related_name='task_dependencies_task') + depends_on = models.ForeignKey(Task, on_delete=models.CASCADE, related_name='task_dependencies_depends') class Package(models.Model): search_allowed_fields = ['name', 'version', 'revision', 'recipe__name', 'recipe__version', 'recipe__license', 'recipe__layer_version__layer__name', 'recipe__layer_version__branch', 'recipe__layer_version__commit', 'recipe__layer_version__local_path', 'installed_name'] - build = models.ForeignKey('Build', null=True) - recipe = models.ForeignKey('Recipe', null=True) + build = models.ForeignKey('Build', on_delete=models.CASCADE, null=True) + recipe = models.ForeignKey('Recipe', on_delete=models.CASCADE, null=True) name = models.CharField(max_length=100) installed_name = models.CharField(max_length=100, default='') version = models.CharField(max_length=100, blank=True) @@ -1302,19 +1289,19 @@ class Package_Dependency(models.Model): TYPE_RCONFLICTS : ("conflicts", "%s conflicts with %s, which will not be installed if this package is not first removed"), } - package = models.ForeignKey(Package, related_name='package_dependencies_source') - depends_on = models.ForeignKey(Package, related_name='package_dependencies_target') # soft dependency + package = models.ForeignKey(Package, on_delete=models.CASCADE, related_name='package_dependencies_source') + depends_on = models.ForeignKey(Package, on_delete=models.CASCADE, related_name='package_dependencies_target') # soft dependency dep_type = models.IntegerField(choices=DEPENDS_TYPE) - target = models.ForeignKey(Target, null=True) + target = models.ForeignKey(Target, on_delete=models.CASCADE, null=True) objects = Package_DependencyManager() class Target_Installed_Package(models.Model): - target = models.ForeignKey(Target) - package = models.ForeignKey(Package, related_name='buildtargetlist_package') + target = models.ForeignKey(Target, on_delete=models.CASCADE) + package = models.ForeignKey(Package, on_delete=models.CASCADE, related_name='buildtargetlist_package') class Package_File(models.Model): - package = models.ForeignKey(Package, related_name='buildfilelist_package') + package = models.ForeignKey(Package, on_delete=models.CASCADE, related_name='buildfilelist_package') path = models.FilePathField(max_length=255, blank=True) size = models.IntegerField() @@ -1331,7 +1318,7 @@ class Recipe(models.Model): name = models.CharField(max_length=100, blank=True) version = models.CharField(max_length=100, blank=True) - layer_version = models.ForeignKey('Layer_Version', + layer_version = models.ForeignKey('Layer_Version', on_delete=models.CASCADE, related_name='recipe_layer_version') summary = models.TextField(blank=True) description = models.TextField(blank=True) @@ -1369,7 +1356,7 @@ class Recipe_DependencyManager(models.Manager): class Provides(models.Model): name = models.CharField(max_length=100) - recipe = models.ForeignKey(Recipe) + recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE) class Recipe_Dependency(models.Model): TYPE_DEPENDS = 0 @@ -1379,9 +1366,9 @@ class Recipe_Dependency(models.Model): (TYPE_DEPENDS, "depends"), (TYPE_RDEPENDS, "rdepends"), ) - recipe = models.ForeignKey(Recipe, related_name='r_dependencies_recipe') - depends_on = models.ForeignKey(Recipe, related_name='r_dependencies_depends') - via = models.ForeignKey(Provides, null=True, default=None) + recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE, related_name='r_dependencies_recipe') + depends_on = models.ForeignKey(Recipe, on_delete=models.CASCADE, related_name='r_dependencies_depends') + via = models.ForeignKey(Provides, on_delete=models.CASCADE, null=True, default=None) dep_type = models.IntegerField(choices=DEPENDS_TYPE) objects = Recipe_DependencyManager() @@ -1390,7 +1377,7 @@ class Machine(models.Model): search_allowed_fields = ["name", "description", "layer_version__layer__name"] up_date = models.DateTimeField(null = True, default = None) - layer_version = models.ForeignKey('Layer_Version') + layer_version = models.ForeignKey('Layer_Version', on_delete=models.CASCADE) name = models.CharField(max_length=255) description = models.CharField(max_length=255) @@ -1421,7 +1408,7 @@ class Release(models.Model): """ A release is a project template, used to pre-populate Project settings with a configuration set """ name = models.CharField(max_length=32, unique = True) description = models.CharField(max_length=255) - bitbake_version = models.ForeignKey(BitbakeVersion) + bitbake_version = models.ForeignKey(BitbakeVersion, on_delete=models.CASCADE) branch_name = models.CharField(max_length=50, default = "") helptext = models.TextField(null=True) @@ -1432,7 +1419,7 @@ class Release(models.Model): return self.name class ReleaseDefaultLayer(models.Model): - release = models.ForeignKey(Release) + release = models.ForeignKey(Release, on_delete=models.CASCADE) layer_name = models.CharField(max_length=100, default="") @@ -1487,10 +1474,10 @@ class Layer_Version(models.Model): "layer__description", "layer__vcs_url", "dirpath", "release__name", "commit", "branch"] - build = models.ForeignKey(Build, related_name='layer_version_build', + build = models.ForeignKey(Build, on_delete=models.CASCADE, related_name='layer_version_build', default=None, null=True) - layer = models.ForeignKey(Layer, related_name='layer_version_layer') + layer = models.ForeignKey(Layer, on_delete=models.CASCADE, related_name='layer_version_layer') layer_source = models.IntegerField(choices=LayerSource.SOURCE_TYPE, default=0) @@ -1498,7 +1485,7 @@ class Layer_Version(models.Model): up_date = models.DateTimeField(null=True, default=timezone.now) # To which metadata release does this layer version belong to - release = models.ForeignKey(Release, null=True, default=None) + release = models.ForeignKey(Release, on_delete=models.CASCADE, null=True, default=None) branch = models.CharField(max_length=80) commit = models.CharField(max_length=100) @@ -1512,7 +1499,7 @@ class Layer_Version(models.Model): local_path = models.FilePathField(max_length=1024, default="/") # Set if this layer is restricted to a particular project - project = models.ForeignKey('Project', null=True, default=None) + project = models.ForeignKey('Project', on_delete=models.CASCADE, null=True, default=None) # code lifted, with adaptations, from the layerindex-web application # https://git.yoctoproject.org/cgit/cgit.cgi/layerindex-web/ @@ -1621,14 +1608,14 @@ class Layer_Version(models.Model): class LayerVersionDependency(models.Model): - layer_version = models.ForeignKey(Layer_Version, + layer_version = models.ForeignKey(Layer_Version, on_delete=models.CASCADE, related_name="dependencies") - depends_on = models.ForeignKey(Layer_Version, + depends_on = models.ForeignKey(Layer_Version, on_delete=models.CASCADE, related_name="dependees") class ProjectLayer(models.Model): - project = models.ForeignKey(Project) - layercommit = models.ForeignKey(Layer_Version, null=True) + project = models.ForeignKey(Project, on_delete=models.CASCADE) + layercommit = models.ForeignKey(Layer_Version, on_delete=models.CASCADE, null=True) optional = models.BooleanField(default = True) def __unicode__(self): @@ -1643,8 +1630,8 @@ class CustomImageRecipe(Recipe): LAYER_NAME = "toaster-custom-images" search_allowed_fields = ['name'] - base_recipe = models.ForeignKey(Recipe, related_name='based_on_recipe') - project = models.ForeignKey(Project) + base_recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE, related_name='based_on_recipe') + project = models.ForeignKey(Project, on_delete=models.CASCADE) last_updated = models.DateTimeField(null=True, default=None) def get_last_successful_built_target(self): @@ -1660,14 +1647,14 @@ class CustomImageRecipe(Recipe): """ # Check if we're aldready up-to-date or not target = self.get_last_successful_built_target() - if target == None: + if target is None: # So we've never actually built this Custom recipe but what about # the recipe it's based on? target = \ Target.objects.filter(Q(build__outcome=Build.SUCCEEDED) & Q(build__project=self.project) & Q(target=self.base_recipe.name)).last() - if target == None: + if target is None: return if target.build.completed_on == self.last_updated: @@ -1797,14 +1784,14 @@ class CustomImageRecipe(Recipe): return recipe_contents class ProjectVariable(models.Model): - project = models.ForeignKey(Project) + project = models.ForeignKey(Project, on_delete=models.CASCADE) name = models.CharField(max_length=100) value = models.TextField(blank = True) class Variable(models.Model): search_allowed_fields = ['variable_name', 'variable_value', 'vhistory__file_name', "description"] - build = models.ForeignKey(Build, related_name='variable_build') + build = models.ForeignKey(Build, on_delete=models.CASCADE, related_name='variable_build') variable_name = models.CharField(max_length=100) variable_value = models.TextField(blank=True) changed = models.BooleanField(default=False) @@ -1812,7 +1799,7 @@ class Variable(models.Model): description = models.TextField(blank=True) class VariableHistory(models.Model): - variable = models.ForeignKey(Variable, related_name='vhistory') + variable = models.ForeignKey(Variable, on_delete=models.CASCADE, related_name='vhistory') value = models.TextField(blank=True) file_name = models.FilePathField(max_length=255) line_number = models.IntegerField(null=True) @@ -1822,7 +1809,7 @@ class HelpText(models.Model): VARIABLE = 0 HELPTEXT_AREA = ((VARIABLE, 'variable'), ) - build = models.ForeignKey(Build, related_name='helptext_build') + build = models.ForeignKey(Build, on_delete=models.CASCADE, related_name='helptext_build') area = models.IntegerField(choices=HELPTEXT_AREA) key = models.CharField(max_length=100) text = models.TextField() @@ -1842,8 +1829,8 @@ class LogMessage(models.Model): (EXCEPTION, "toaster exception") ) - build = models.ForeignKey(Build) - task = models.ForeignKey(Task, blank = True, null=True) + build = models.ForeignKey(Build, on_delete=models.CASCADE) + task = models.ForeignKey(Task, on_delete=models.CASCADE, blank = True, null=True) level = models.IntegerField(choices=LOG_LEVEL, default=INFO) message = models.TextField(blank=True, null=True) pathname = models.FilePathField(max_length=255, blank=True) @@ -1872,7 +1859,7 @@ class Distro(models.Model): search_allowed_fields = ["name", "description", "layer_version__layer__name"] up_date = models.DateTimeField(null = True, default = None) - layer_version = models.ForeignKey('Layer_Version') + layer_version = models.ForeignKey('Layer_Version', on_delete=models.CASCADE) name = models.CharField(max_length=255) description = models.CharField(max_length=255) diff --git a/external/poky/bitbake/lib/toaster/tests/browser/selenium_helpers.py b/external/poky/bitbake/lib/toaster/tests/browser/selenium_helpers.py index 08711e45..02d4f4b5 100644 --- a/external/poky/bitbake/lib/toaster/tests/browser/selenium_helpers.py +++ b/external/poky/bitbake/lib/toaster/tests/browser/selenium_helpers.py @@ -1,23 +1,10 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2013-2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# SPDX-License-Identifier: GPL-2.0-only # # The Wait class and some of SeleniumDriverHelper and SeleniumTestCase are # modified from Patchwork, released under the same licence terms as Toaster: diff --git a/external/poky/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py b/external/poky/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py index 156d639b..644d45fe 100644 --- a/external/poky/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py +++ b/external/poky/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py @@ -1,23 +1,10 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2013-2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# SPDX-License-Identifier: GPL-2.0-only # # The Wait class and some of SeleniumDriverHelper and SeleniumTestCase are # modified from Patchwork, released under the same licence terms as Toaster: @@ -32,7 +19,6 @@ import os import time import unittest -from django.contrib.staticfiles.testing import StaticLiveServerTestCase from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.desired_capabilities import DesiredCapabilities diff --git a/external/poky/bitbake/lib/toaster/tests/browser/test_all_builds_page.py b/external/poky/bitbake/lib/toaster/tests/browser/test_all_builds_page.py index b86f29bd..8423d3da 100644 --- a/external/poky/bitbake/lib/toaster/tests/browser/test_all_builds_page.py +++ b/external/poky/bitbake/lib/toaster/tests/browser/test_all_builds_page.py @@ -1,27 +1,15 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2013-2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import re -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils import timezone from tests.browser.selenium_helpers import SeleniumTestCase diff --git a/external/poky/bitbake/lib/toaster/tests/browser/test_all_projects_page.py b/external/poky/bitbake/lib/toaster/tests/browser/test_all_projects_page.py index 44da6407..15b03400 100644 --- a/external/poky/bitbake/lib/toaster/tests/browser/test_all_projects_page.py +++ b/external/poky/bitbake/lib/toaster/tests/browser/test_all_projects_page.py @@ -1,27 +1,15 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2013-2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import re -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils import timezone from tests.browser.selenium_helpers import SeleniumTestCase diff --git a/external/poky/bitbake/lib/toaster/tests/browser/test_builddashboard_page.py b/external/poky/bitbake/lib/toaster/tests/browser/test_builddashboard_page.py index f8ccb545..efcd89b3 100644 --- a/external/poky/bitbake/lib/toaster/tests/browser/test_builddashboard_page.py +++ b/external/poky/bitbake/lib/toaster/tests/browser/test_builddashboard_page.py @@ -1,25 +1,13 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2013-2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils import timezone from tests.browser.selenium_helpers import SeleniumTestCase diff --git a/external/poky/bitbake/lib/toaster/tests/browser/test_builddashboard_page_artifacts.py b/external/poky/bitbake/lib/toaster/tests/browser/test_builddashboard_page_artifacts.py index 1c627ad4..c6226d60 100644 --- a/external/poky/bitbake/lib/toaster/tests/browser/test_builddashboard_page_artifacts.py +++ b/external/poky/bitbake/lib/toaster/tests/browser/test_builddashboard_page_artifacts.py @@ -1,25 +1,13 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2013-2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils import timezone from tests.browser.selenium_helpers import SeleniumTestCase diff --git a/external/poky/bitbake/lib/toaster/tests/browser/test_builddashboard_page_recipes.py b/external/poky/bitbake/lib/toaster/tests/browser/test_builddashboard_page_recipes.py index ed18324e..9d85ba99 100644 --- a/external/poky/bitbake/lib/toaster/tests/browser/test_builddashboard_page_recipes.py +++ b/external/poky/bitbake/lib/toaster/tests/browser/test_builddashboard_page_recipes.py @@ -1,25 +1,13 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2013-2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils import timezone from tests.browser.selenium_helpers import SeleniumTestCase from orm.models import Project, Build, Recipe, Task, Layer, Layer_Version diff --git a/external/poky/bitbake/lib/toaster/tests/browser/test_builddashboard_page_tasks.py b/external/poky/bitbake/lib/toaster/tests/browser/test_builddashboard_page_tasks.py index da50f160..7fdf75d0 100644 --- a/external/poky/bitbake/lib/toaster/tests/browser/test_builddashboard_page_tasks.py +++ b/external/poky/bitbake/lib/toaster/tests/browser/test_builddashboard_page_tasks.py @@ -1,25 +1,13 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2013-2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils import timezone from tests.browser.selenium_helpers import SeleniumTestCase from orm.models import Project, Build, Recipe, Task, Layer, Layer_Version diff --git a/external/poky/bitbake/lib/toaster/tests/browser/test_js_unit_tests.py b/external/poky/bitbake/lib/toaster/tests/browser/test_js_unit_tests.py index 3c0b9625..e6163bb3 100644 --- a/external/poky/bitbake/lib/toaster/tests/browser/test_js_unit_tests.py +++ b/external/poky/bitbake/lib/toaster/tests/browser/test_js_unit_tests.py @@ -1,29 +1,17 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2013-2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. """ Run the js unit tests """ -from django.core.urlresolvers import reverse +from django.urls import reverse from tests.browser.selenium_helpers import SeleniumTestCase import logging diff --git a/external/poky/bitbake/lib/toaster/tests/browser/test_landing_page.py b/external/poky/bitbake/lib/toaster/tests/browser/test_landing_page.py index 4d4cd660..8bb64b9f 100644 --- a/external/poky/bitbake/lib/toaster/tests/browser/test_landing_page.py +++ b/external/poky/bitbake/lib/toaster/tests/browser/test_landing_page.py @@ -1,25 +1,13 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # -# Copyright (C) 2013-2016 Intel Corporation -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# Copyright (C) 2013-2016 Intel Corporation # -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils import timezone from tests.browser.selenium_helpers import SeleniumTestCase diff --git a/external/poky/bitbake/lib/toaster/tests/browser/test_layerdetails_page.py b/external/poky/bitbake/lib/toaster/tests/browser/test_layerdetails_page.py index f24fb093..71bdd2aa 100644 --- a/external/poky/bitbake/lib/toaster/tests/browser/test_layerdetails_page.py +++ b/external/poky/bitbake/lib/toaster/tests/browser/test_layerdetails_page.py @@ -1,25 +1,13 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # -# Copyright (C) 2013-2016 Intel Corporation -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# Copyright (C) 2013-2016 Intel Corporation # -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -from django.core.urlresolvers import reverse +from django.urls import reverse from tests.browser.selenium_helpers import SeleniumTestCase from orm.models import Layer, Layer_Version, Project, LayerSource, Release diff --git a/external/poky/bitbake/lib/toaster/tests/browser/test_most_recent_builds_states.py b/external/poky/bitbake/lib/toaster/tests/browser/test_most_recent_builds_states.py index abc0b0bc..7844aaa3 100644 --- a/external/poky/bitbake/lib/toaster/tests/browser/test_most_recent_builds_states.py +++ b/external/poky/bitbake/lib/toaster/tests/browser/test_most_recent_builds_states.py @@ -1,25 +1,13 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # -# Copyright (C) 2013-2016 Intel Corporation -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# Copyright (C) 2013-2016 Intel Corporation # -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils import timezone from tests.browser.selenium_helpers import SeleniumTestCase from tests.browser.selenium_helpers_base import Wait diff --git a/external/poky/bitbake/lib/toaster/tests/browser/test_new_custom_image_page.py b/external/poky/bitbake/lib/toaster/tests/browser/test_new_custom_image_page.py index ab5a8e66..9906ae42 100644 --- a/external/poky/bitbake/lib/toaster/tests/browser/test_new_custom_image_page.py +++ b/external/poky/bitbake/lib/toaster/tests/browser/test_new_custom_image_page.py @@ -1,25 +1,13 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2013-2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -from django.core.urlresolvers import reverse +from django.urls import reverse from tests.browser.selenium_helpers import SeleniumTestCase from orm.models import BitbakeVersion, Release, Project, ProjectLayer, Layer diff --git a/external/poky/bitbake/lib/toaster/tests/browser/test_new_project_page.py b/external/poky/bitbake/lib/toaster/tests/browser/test_new_project_page.py index 77e5f152..e20a1f68 100644 --- a/external/poky/bitbake/lib/toaster/tests/browser/test_new_project_page.py +++ b/external/poky/bitbake/lib/toaster/tests/browser/test_new_project_page.py @@ -1,25 +1,13 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2013-2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -from django.core.urlresolvers import reverse +from django.urls import reverse from tests.browser.selenium_helpers import SeleniumTestCase from selenium.webdriver.support.ui import Select from selenium.common.exceptions import InvalidElementStateException diff --git a/external/poky/bitbake/lib/toaster/tests/browser/test_project_builds_page.py b/external/poky/bitbake/lib/toaster/tests/browser/test_project_builds_page.py index 9fe91ab0..51717e72 100644 --- a/external/poky/bitbake/lib/toaster/tests/browser/test_project_builds_page.py +++ b/external/poky/bitbake/lib/toaster/tests/browser/test_project_builds_page.py @@ -1,27 +1,15 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2013-2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import re -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils import timezone from tests.browser.selenium_helpers import SeleniumTestCase diff --git a/external/poky/bitbake/lib/toaster/tests/browser/test_project_config_page.py b/external/poky/bitbake/lib/toaster/tests/browser/test_project_config_page.py index 07100849..944bcb26 100644 --- a/external/poky/bitbake/lib/toaster/tests/browser/test_project_config_page.py +++ b/external/poky/bitbake/lib/toaster/tests/browser/test_project_config_page.py @@ -1,28 +1,13 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2013-2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -import re -from django.core.urlresolvers import reverse -from django.utils import timezone +from django.urls import reverse from tests.browser.selenium_helpers import SeleniumTestCase from orm.models import BitbakeVersion, Release, Project, ProjectVariable @@ -228,4 +213,5 @@ class TestProjectConfigsPage(SeleniumTestCase): hidden_element = self.driver.find_element_by_id('hintError-sstate_dir') self.assertEqual(hidden_element.is_displayed(), False, - 'sstate directory path valid but treated as invalid') \ No newline at end of file + 'sstate directory path valid but treated as invalid') + diff --git a/external/poky/bitbake/lib/toaster/tests/browser/test_project_page.py b/external/poky/bitbake/lib/toaster/tests/browser/test_project_page.py index 01864633..546293f1 100644 --- a/external/poky/bitbake/lib/toaster/tests/browser/test_project_page.py +++ b/external/poky/bitbake/lib/toaster/tests/browser/test_project_page.py @@ -1,25 +1,13 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2013-2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils import timezone from tests.browser.selenium_helpers import SeleniumTestCase diff --git a/external/poky/bitbake/lib/toaster/tests/browser/test_sample.py b/external/poky/bitbake/lib/toaster/tests/browser/test_sample.py index 20ec53c2..b0067c21 100644 --- a/external/poky/bitbake/lib/toaster/tests/browser/test_sample.py +++ b/external/poky/bitbake/lib/toaster/tests/browser/test_sample.py @@ -1,23 +1,11 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2013-2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. """ A small example test demonstrating the basics of writing a test with @@ -28,7 +16,7 @@ New test files should follow this structure, should be named "test_*.py", and should be in the same directory as this sample. """ -from django.core.urlresolvers import reverse +from django.urls import reverse from tests.browser.selenium_helpers import SeleniumTestCase class TestSample(SeleniumTestCase): diff --git a/external/poky/bitbake/lib/toaster/tests/browser/test_task_page.py b/external/poky/bitbake/lib/toaster/tests/browser/test_task_page.py index 690d116c..011b5854 100644 --- a/external/poky/bitbake/lib/toaster/tests/browser/test_task_page.py +++ b/external/poky/bitbake/lib/toaster/tests/browser/test_task_page.py @@ -1,25 +1,13 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2013-2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils import timezone from tests.browser.selenium_helpers import SeleniumTestCase from orm.models import Project, Build, Layer, Layer_Version, Recipe, Target diff --git a/external/poky/bitbake/lib/toaster/tests/browser/test_toastertable_ui.py b/external/poky/bitbake/lib/toaster/tests/browser/test_toastertable_ui.py index 53ddf30c..e82d5ec6 100644 --- a/external/poky/bitbake/lib/toaster/tests/browser/test_toastertable_ui.py +++ b/external/poky/bitbake/lib/toaster/tests/browser/test_toastertable_ui.py @@ -1,27 +1,15 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2013-2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. from datetime import datetime -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils import timezone from tests.browser.selenium_helpers import SeleniumTestCase from orm.models import BitbakeVersion, Release, Project, Build diff --git a/external/poky/bitbake/lib/toaster/tests/builds/buildtest.py b/external/poky/bitbake/lib/toaster/tests/builds/buildtest.py index 5a56a110..872bbd37 100644 --- a/external/poky/bitbake/lib/toaster/tests/builds/buildtest.py +++ b/external/poky/bitbake/lib/toaster/tests/builds/buildtest.py @@ -1,23 +1,11 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import os import sys diff --git a/external/poky/bitbake/lib/toaster/tests/builds/test_core_image_min.py b/external/poky/bitbake/lib/toaster/tests/builds/test_core_image_min.py index 586f4a8f..44b6cbec 100644 --- a/external/poky/bitbake/lib/toaster/tests/builds/test_core_image_min.py +++ b/external/poky/bitbake/lib/toaster/tests/builds/test_core_image_min.py @@ -1,24 +1,11 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - # Tests were part of openembedded-core oe selftest Authored by: Lucian Musat # Ionut Chisanovici, Paul Eggleton and Cristian Iorga diff --git a/external/poky/bitbake/lib/toaster/tests/commands/test_loaddata.py b/external/poky/bitbake/lib/toaster/tests/commands/test_loaddata.py index 951f6ff5..9e8d5553 100644 --- a/external/poky/bitbake/lib/toaster/tests/commands/test_loaddata.py +++ b/external/poky/bitbake/lib/toaster/tests/commands/test_loaddata.py @@ -1,23 +1,11 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. from django.test import TestCase from django.core import management diff --git a/external/poky/bitbake/lib/toaster/tests/commands/test_lsupdates.py b/external/poky/bitbake/lib/toaster/tests/commands/test_lsupdates.py index 49897a47..3c4fbe05 100644 --- a/external/poky/bitbake/lib/toaster/tests/commands/test_lsupdates.py +++ b/external/poky/bitbake/lib/toaster/tests/commands/test_lsupdates.py @@ -1,23 +1,11 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. from django.test import TestCase from django.core import management diff --git a/external/poky/bitbake/lib/toaster/tests/commands/test_runbuilds.py b/external/poky/bitbake/lib/toaster/tests/commands/test_runbuilds.py index 3e634835..e223b95f 100644 --- a/external/poky/bitbake/lib/toaster/tests/commands/test_runbuilds.py +++ b/external/poky/bitbake/lib/toaster/tests/commands/test_runbuilds.py @@ -1,23 +1,11 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import os diff --git a/external/poky/bitbake/lib/toaster/tests/db/test_db.py b/external/poky/bitbake/lib/toaster/tests/db/test_db.py index a0f5f6ec..04104222 100644 --- a/external/poky/bitbake/lib/toaster/tests/db/test_db.py +++ b/external/poky/bitbake/lib/toaster/tests/db/test_db.py @@ -2,6 +2,8 @@ # # Copyright (c) 2016 Damien Lespiau # +# SPDX-License-Identifier: MIT +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights diff --git a/external/poky/bitbake/lib/toaster/tests/eventreplay/__init__.py b/external/poky/bitbake/lib/toaster/tests/eventreplay/__init__.py index 69566194..8ed6792e 100644 --- a/external/poky/bitbake/lib/toaster/tests/eventreplay/__init__.py +++ b/external/poky/bitbake/lib/toaster/tests/eventreplay/__init__.py @@ -1,23 +1,11 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # Tests were part of openembedded-core oe selftest Authored by: Lucian Musat # Ionut Chisanovici, Paul Eggleton and Cristian Iorga diff --git a/external/poky/bitbake/lib/toaster/tests/functional/functional_helpers.py b/external/poky/bitbake/lib/toaster/tests/functional/functional_helpers.py index 486078a6..455c408e 100644 --- a/external/poky/bitbake/lib/toaster/tests/functional/functional_helpers.py +++ b/external/poky/bitbake/lib/toaster/tests/functional/functional_helpers.py @@ -1,23 +1,11 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster functional tests implementation # # Copyright (C) 2017 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import os import logging diff --git a/external/poky/bitbake/lib/toaster/tests/functional/test_functional_basic.py b/external/poky/bitbake/lib/toaster/tests/functional/test_functional_basic.py index cfa2b0fd..5683e387 100644 --- a/external/poky/bitbake/lib/toaster/tests/functional/test_functional_basic.py +++ b/external/poky/bitbake/lib/toaster/tests/functional/test_functional_basic.py @@ -1,25 +1,12 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster functional tests implementation # # Copyright (C) 2017 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -import time import re from tests.functional.functional_helpers import SeleniumFunctionalTestCase from orm.models import Project diff --git a/external/poky/bitbake/lib/toaster/tests/views/test_views.py b/external/poky/bitbake/lib/toaster/tests/views/test_views.py index 1463077e..735d596b 100644 --- a/external/poky/bitbake/lib/toaster/tests/views/test_views.py +++ b/external/poky/bitbake/lib/toaster/tests/views/test_views.py @@ -1,29 +1,17 @@ -#! /usr/bin/env python -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +#! /usr/bin/env python3 # # BitBake Toaster Implementation # # Copyright (C) 2013-2015 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. """Test cases for Toaster GUI and ReST.""" from django.test import TestCase from django.test.client import RequestFactory -from django.core.urlresolvers import reverse +from django.urls import reverse from django.db.models import Q from orm.models import Project, Package diff --git a/external/poky/bitbake/lib/toaster/toastergui/api.py b/external/poky/bitbake/lib/toaster/toastergui/api.py index 564d595a..b4cdc335 100644 --- a/external/poky/bitbake/lib/toaster/toastergui/api.py +++ b/external/poky/bitbake/lib/toaster/toastergui/api.py @@ -3,19 +3,8 @@ # # Copyright (C) 2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - # Please run flake8 on this file before sending patches import os @@ -24,7 +13,6 @@ import logging import json import subprocess from collections import Counter -from shutil import copyfile from orm.models import Project, ProjectTarget, Build, Layer_Version from orm.models import LayerVersionDependency, LayerSource, ProjectLayer @@ -36,12 +24,10 @@ from bldcontrol import bbcontroller from django.http import HttpResponse, JsonResponse from django.views.generic import View -from django.core.urlresolvers import reverse +from django.urls import reverse from django.db.models import Q, F from django.db import Error from toastergui.templatetags.projecttags import filtered_filesizeformat -from django.utils import timezone -import pytz # development/debugging support verbose = 2 diff --git a/external/poky/bitbake/lib/toaster/toastergui/buildtables.py b/external/poky/bitbake/lib/toaster/toastergui/buildtables.py index 755a7c2e..327059d0 100644 --- a/external/poky/bitbake/lib/toaster/toastergui/buildtables.py +++ b/external/poky/bitbake/lib/toaster/toastergui/buildtables.py @@ -1,23 +1,10 @@ # -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- -# # BitBake Toaster Implementation # # Copyright (C) 2016 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# SPDX-License-Identifier: GPL-2.0-only # -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. from orm.models import Build, Task, Target, Package from django.db.models import Q, Sum diff --git a/external/poky/bitbake/lib/toaster/toastergui/static/js/importlayer.js b/external/poky/bitbake/lib/toaster/toastergui/static/js/importlayer.js index 29648398..8e2032de 100644 --- a/external/poky/bitbake/lib/toaster/toastergui/static/js/importlayer.js +++ b/external/poky/bitbake/lib/toaster/toastergui/static/js/importlayer.js @@ -17,11 +17,15 @@ function importLayerPageInit (ctx) { var currentLayerDepSelection; var validLayerName = /^(\w|-)+$/; + /* Catch 'disable' race condition between type-ahead started and "input change" */ + var typeAheadStarted = 0; + libtoaster.makeTypeahead(layerDepInput, libtoaster.ctx.layersTypeAheadUrl, { include_added: "true" }, function(item){ currentLayerDepSelection = item; layerDepBtn.removeAttr("disabled"); + typeAheadStarted = 1; }); layerDepInput.on("typeahead:select", function(event, data){ @@ -34,7 +38,10 @@ function importLayerPageInit (ctx) { // disable the "Add layer" button when the layer input typeahead is empty // or not in the typeahead choices layerDepInput.on("input change", function(){ - layerDepBtn.attr("disabled","disabled"); + if (0 == typeAheadStarted) { + layerDepBtn.attr("disabled","disabled"); + } + typeAheadStarted = 0; }); /* We automatically add "openembedded-core" layer for convenience as a @@ -50,6 +57,7 @@ function importLayerPageInit (ctx) { }); layerDepBtn.click(function(){ + typeAheadStarted = 0; if (currentLayerDepSelection == undefined) return; @@ -77,7 +85,7 @@ function importLayerPageInit (ctx) { $("#layer-deps-list").append(newLayerDep); - libtoaster.getLayerDepsForProject(currentLayerDepSelection.layerdetailurl, + libtoaster.getLayerDepsForProject(currentLayerDepSelection.xhrLayerUrl, function (data){ /* These are the dependencies of the layer added as a dependency */ if (data.list.length > 0) { diff --git a/external/poky/bitbake/lib/toaster/toastergui/tablefilter.py b/external/poky/bitbake/lib/toaster/toastergui/tablefilter.py index 65454e14..ffef7955 100644 --- a/external/poky/bitbake/lib/toaster/toastergui/tablefilter.py +++ b/external/poky/bitbake/lib/toaster/toastergui/tablefilter.py @@ -1,23 +1,10 @@ # -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- -# # BitBake Toaster Implementation # # Copyright (C) 2015 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# SPDX-License-Identifier: GPL-2.0-only # -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. from django.db.models import Q, Max, Min from django.utils import dateparse, timezone diff --git a/external/poky/bitbake/lib/toaster/toastergui/tables.py b/external/poky/bitbake/lib/toaster/toastergui/tables.py index 9ff756bc..528dd32b 100644 --- a/external/poky/bitbake/lib/toaster/toastergui/tables.py +++ b/external/poky/bitbake/lib/toaster/toastergui/tables.py @@ -1,34 +1,16 @@ # -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- -# # BitBake Toaster Implementation # # Copyright (C) 2015 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# SPDX-License-Identifier: GPL-2.0-only # -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. from toastergui.widgets import ToasterTable -from orm.models import Recipe, ProjectLayer, Layer_Version, Machine, Project +from orm.models import Recipe, ProjectLayer, Layer_Version, Project from orm.models import CustomImageRecipe, Package, Target, Build, LogMessage, Task from orm.models import CustomImagePackage, Package_DependencyManager -from orm.models import Distro -from django.db.models import Q, Max, Sum, Count, When, Case, Value, IntegerField -from django.conf.urls import url -from django.core.urlresolvers import reverse, resolve -from django.http import HttpResponse -from django.views.generic import TemplateView +from django.db.models import Q, Sum, Count, When, Case, Value, IntegerField from toastergui.tablefilter import TableFilter from toastergui.tablefilter import TableFilterActionToggle diff --git a/external/poky/bitbake/lib/toaster/toastergui/templatetags/field_values_filter.py b/external/poky/bitbake/lib/toaster/toastergui/templatetags/field_values_filter.py index 5a73af79..eb483396 100644 --- a/external/poky/bitbake/lib/toaster/toastergui/templatetags/field_values_filter.py +++ b/external/poky/bitbake/lib/toaster/toastergui/templatetags/field_values_filter.py @@ -1,3 +1,7 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + from django import template register = template.Library() diff --git a/external/poky/bitbake/lib/toaster/toastergui/templatetags/objects_to_dictionaries_filter.py b/external/poky/bitbake/lib/toaster/toastergui/templatetags/objects_to_dictionaries_filter.py index 0dcc7d27..e242234b 100644 --- a/external/poky/bitbake/lib/toaster/toastergui/templatetags/objects_to_dictionaries_filter.py +++ b/external/poky/bitbake/lib/toaster/toastergui/templatetags/objects_to_dictionaries_filter.py @@ -1,5 +1,8 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + from django import template -import json register = template.Library() diff --git a/external/poky/bitbake/lib/toaster/toastergui/templatetags/project_url_tag.py b/external/poky/bitbake/lib/toaster/toastergui/templatetags/project_url_tag.py index 04770ac6..7b6f15b2 100644 --- a/external/poky/bitbake/lib/toaster/toastergui/templatetags/project_url_tag.py +++ b/external/poky/bitbake/lib/toaster/toastergui/templatetags/project_url_tag.py @@ -1,5 +1,9 @@ +# +# SPDX-License-Identifier: GPL-2.0-only +# + from django import template -from django.core.urlresolvers import reverse +from django.urls import reverse register = template.Library() diff --git a/external/poky/bitbake/lib/toaster/toastergui/templatetags/projecttags.py b/external/poky/bitbake/lib/toaster/toastergui/templatetags/projecttags.py index b170a161..c432f59a 100644 --- a/external/poky/bitbake/lib/toaster/toastergui/templatetags/projecttags.py +++ b/external/poky/bitbake/lib/toaster/toastergui/templatetags/projecttags.py @@ -1,25 +1,12 @@ # -# ex:ts=4:sw=4:sts=4:et -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- -# # BitBake Toaster Implementation # # Copyright (C) 2013 Intel Corporation # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# SPDX-License-Identifier: GPL-2.0-only # -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -from datetime import datetime, timedelta +from datetime import timedelta from os.path import relpath import re from django import template @@ -57,7 +44,7 @@ def json(value, default = None): # it manually here return mark_safe(JsonLib.dumps(value, indent=2, default = default, ensure_ascii=False).replace('1.8,<1.12 +Django>2.2,<2.3 beautifulsoup4>=4.4.0 pytz -- cgit 1.2.3-korg