diff options
author | Andrew Geissler <geissonator@yahoo.com> | 2023-10-04 18:18:08 +0300 |
---|---|---|
committer | Andrew Geissler <geissonator@yahoo.com> | 2023-10-10 19:23:18 +0300 |
commit | 220dafdb7243da3683b8a972c80a3719c2d137ef (patch) | |
tree | 48989211d9aee03ff7769a3169aac594816f5ef8 /poky/meta/lib/patchtest/tests | |
parent | 32d5e60788a11425a8b7bb8fc292c72c89ab7f39 (diff) | |
download | openbmc-220dafdb7243da3683b8a972c80a3719c2d137ef.tar.xz |
master: subtree updates oct 4 2023
poky: 61531cd395..e444d2bed0:
Adrian Freihofer (3):
lib/oe/utils: Refactor to make multiprocess_launch callable without d
lib/oe/package: Refactor to make strip_execs callable without d
oeqa/selftest/devtool: Refactor runqemu pre-requisites
Alexander Kanavin (69):
cargo-c-native: fix version check
igt-gpu-tools: do not write shortened git commit hash into binaries
curl: build and run the full set of ptests
ptest: report tests that were killed on timeout
perl: use 64 bit integers across all targets
perl: ensure all failures are caught
strace: parallelize ptest
strace: remove from time64.inc exception list
busybox: enable 64 bit shell arithmetic (via long long type)
openssl: parallelize tests
openssl: ensure all ptest fails are caught
glibc-tests: rename to glibc-y2038-tests
sysstat: merge .inc into .bb
sysstat: update 12.6.2 -> 12.7.4
glib-2.0: update 2.76.4 -> 2.78.0
ovmf: update edk2-stable202305 -> edk2-stable202308
libdnf: update 0.70.1 -> 0.71.0
liburi-perl: update 5.17 -> 5.21
python3-pygobject: update 3.44.1 -> 3.46.0
go-helloworld: update to latest revision
gzip: update 1.12 -> 1.13
procps: update 4.0.3 -> 4.0.4
screen: update 4.9.0 -> 4.9.1
gobject-introspection: update 1.76.1 -> 1.78.0
igt-gpu-tools: update 1.27.1 -> 1.28
libva-utils: update 2.19.0 -> 2.20.0
piglit: update to latest revision
groff: add a patch to resolve build races
groff: fix another build race via backport
systemd: upgrade 254 -> 254.4
util-linux: upgrade 2.39.1 -> 2.39.2
cmake: upgrade 3.27.4 -> 3.27.5
jquery: upgrade 3.7.0 -> 3.7.1
python3-setuptools-rust: upgrade 1.6.0 -> 1.7.0
vulkan: upgrade 1.3.250.0 -> 1.3.261.1
libxcb: upgrade 1.15 -> 1.16
xcb-proto: upgrade 1.15.2 -> 1.16.0
boost: upgrade 1.82.0 -> 1.83.0
btrfs-tools: upgrade 6.3.3 -> 6.5.1
createrepo-c: upgrade 0.21.1 -> 1.0.0
debianutils: upgrade 5.12 -> 5.13
diffoscope: upgrade 244 -> 249
ethtool: upgrade 6.3 -> 6.5
font-util: upgrade 1.4.0 -> 1.4.1
freetype: upgrade 2.13.1 -> 2.13.2
ghostscript: upgrade 10.01.2 -> 10.02.0
iproute2: upgrade 6.4.0 -> 6.5.0
json-c: upgrade 0.16 -> 0.17
kmscube: upgrade to latest revision
libarchive: upgrade 3.7.1 -> 3.7.2
libsdl2: upgrade 2.28.0 -> 2.28.3
libsolv: upgrade 0.7.24 -> 0.7.25
man-pages: upgrade 6.04 -> 6.05.01
meson: upgrade 1.1.1 -> 1.2.1
mmc-utils: upgrade to latest revision
mtd-utils: upgrade 2.1.5 -> 2.1.6
puzzles: upgrade to latest revision
python3-dtschema: upgrade 2023.6.1 -> 2023.7
python3-git: upgrade 3.1.35 -> 3.1.36
python3-libarchive-c: upgrade 4.0 -> 5.0
python3-setuptools: upgrade 68.2.1 -> 68.2.2
python3-sphinx: upgrade 7.2.5 -> 7.2.6
seatd: upgrade 0.7.0 -> 0.8.0
sqlite3: upgrade 3.43.0 -> 3.43.1
tiff: upgrade 4.5.1 -> 4.6.0
vala: upgrade 0.56.8 -> 0.56.13
xf86-input-libinput: upgrade 1.3.0 -> 1.4.0
xwayland: upgrade 23.1.2 -> 23.2.1
python3-setuptools-scm: fix upstream version check
Alexandre Belloni (1):
python3: fix SoB on patch
Antoine Lubineau (1):
cve-check: add CVSS vector string to CVE database and reports
Bruce Ashfield (9):
linux-yocto/6.4: update to v6.4.15
linux-yocto/6.1: update to v6.1.52
linux-yocto/6.4: update to v6.4.16
linux-yocto/6.1: update to v6.1.53
linux-yocto/6.1: update to v6.1.55
linux-yocto-dev: update to v6.6-rcX
linux-yocto: introduce 6.5 reference kernel recipes
linux-libc-headers: uprev to v6.5
linux-libc-headers: default to 6.5
Charles-Antoine Couret (1):
systemd-boot-cfg: add .conf suffix to default entry label
Chen Qi (1):
python3: add cpython to CVE_PRODUCT
Daniel Semkowicz (2):
wic: bootimg-partition: Fix file name in debug message
uboot-extlinux-config.bbclass: Add missing variable descriptions
Deepthi Hemraj (2):
binutils: stable 2.41 branch updates.
glibc: stable 2.38 branch updates.
Denys Dmytriyenko (2):
bitbake.conf: add MACHINE to SDK_NAME
spdx: use TOOLCHAIN_OUTPUTNAME for SDK filename prefix
Derek Straka (1):
pypi.bbclass: Update the upstream checks to automatically replace '_' with '-'
Eilís 'pidge' Ní Fhlannagáin (2):
lib/oe/package_managegment: Add nativesdk-intercept PATH
update_mandb: deb fails due to missing man cache
Etienne Cordonnier (1):
bitbake: bitbake-worker/runqueue: Avoid unnecessary bytes object copies
Insu Park (1):
bitbake: data: Add missing dependency handling of remove operator
Jan Garcia (1):
insane.bbclass: Count raw bytes in shebang-size
Joshua Watt (6):
classes/create-spdx-2.2: Add extra debugging for missing package files
nfs-utils: Don't start nfs-statsd.service without exports
nfs-utils: Add StateDirectory for systemd services
bitbake: utils: Add path_is_descendant()
bitbake: fetch2: git: Use path_is_descendant() instead of path for repo check
classes/create-spdx-2.2: Show error if document is not found
Julien Stephan (1):
bitbake: bitbake: cooker: add a new function to retrieve task signatures
Kai Kang (2):
goarch.bbclass: not compatible with riscv32
adwaita-icon-theme: 43 -> 45.0
Khem Raj (25):
perl: Add packageconfig for setlocale functionality differences
libc-test: Run as non-root user
coreutils: Upgrade to 9.4
coreutils: Add config.h to ptest package
gettext: Add missing dependency on gawk autoconf
util-linux: Disable failing tests on musl
Revert "util-linux: scanf_cv_alloc_modifier changed from 'as' -> 'ms'"
util-linux: Fix lscpu on musl
qemu: Add PACKAGECONFIG for dax
llvm: Upgrade to 17.0.1
oeqa: Use 2.14 release of cpio instead of 2.13
musl: Update to latest
bsd-headers: Define __CONCAT and __STRING
mesa: Update clang-17 patch to upstream v2
musl-legacy-error: Add recipe
elfutils: Depend on musl-legacy-error for musl targets
debugedit: Use musl-legacy-error
systemd: Drop two upstreamed musl patches
systemd: Refresh patches to avoid patch-fuzz
glib-2.0: Enable possible locales with musl for ptests
glib-2.0: Remove failing ptests on musl
llvm: Upgrade to 17.0.2
createrepo-c: Fix function declaration bug found with clang
mesa: Simplify llvm-17 patch
mesa: Fix native build on hosts with llvm-dev installed
Lee Chee Yang (2):
bind: update to 9.18.19
cups: fix CVE-2023-4504
Markus Volk (8):
mesa: upgrade 23.1.3 -> 23.1.7
libportal: upgrade 0.6 -> 0.7.1
appstream: import recipe from meta-oe
libadwaita: upgrade 1.3.4 -> 1.4.0
maintainers.inc: add missing entries for appstream and libxmlb
libxmlb: import recipe from meta-oe
pulseaudio: dont include consolekit for systemd
mesa: Upgrade 23.1.7 -> 23.1.8
Marta Rybczynska (3):
python3-ply: add to nativesdk
python3-isodate: add homepage
python3-rdflib: add homepage
Martin Jansa (3):
gcc: backport a fix for ICE caused by CVE-2023-4039.patch
fontcache.bbclass: avoid native recipes depending on target fontconfig
multilib_script.bbclass: expand script name as well
Matthias Schnelte (1):
bitbake: fetch2: Adds vscode devcontainer support
Michael Opdenacker (18):
base: add newline before LICENSE_FLAGS_DETAILS
dev-manual: new-recipe.rst fix inconsistency with contributor guide
contributor-guide: recipe-style-guide: add Upstream-Status
dev-manual: licenses: update license manifest location
dev-manual: licenses: mention SPDX for license compliance
dev-manual: disk-space: improve wording for obsolete sstate cache files
sdk-manual: extensible.rst: fix multiple formatting issues
alsa-lib: upgrade 1.2.9 -> 1.2.10
alsa-utils: upgrade 1.2.9 -> 1.2.10
shadow: fix patch Upstream-Status
libevent: fix patch Upstream-Status
alsa-utils: update patch Upstream-Status
alsa-lib: fix patch Upstream-Status
lib/oe/qa: remove obsolete "Accepted" string for Upstream-Status
lib/oe/qa: update guidelines link for Upstream-Status
bsp-guide: bsp.rst: replace reference to wiki
dev-manual: new-recipe.rst: replace reference to wiki
maintainers.inc: add self for flac recipe
Mikko Rapeli (9):
openssh: update Upstream-Status to Denied in test logging patch
openssh: improve banner ptest failure logging
testimage.bbclass: detect slirp from TEST_RUNQEMUPARAMS
oeqa dnf_runtime.py: fix HTTP server IP address and port
oeqa selftest runtime_test.py: append to TEST_RUNQEMUPARAMS
selftest runtime_test.py: add testimage.bbclass slirp test
openssh: capture logs in run-ptest
testimage.bbclass: remove QEMU_USE_SLIRP variable
oeqa/selftest/context.py: check git command return values
Ninad Palsule (1):
kernel-fitImage: Strip path component from dtb
Peter Kjellerstedt (7):
libsoup-2.4: Only specify --cross-file when building for target
libsoup: Only specify --cross-file when building for target
bitbake: tinfoil: Do not fail when logging is disabled and full config is used
bitbake: bitbake-getvar: Make --quiet work with --recipe
bitbake: bitbake-getvar: Make --value imply --quiet
bitbake: bitbake-getvar: Add a (suppressable) error for undefined variables
bitbake: bitbake-getvar: Treat undefined variables as empty with --value
Peter Marko (2):
openssl: Upgrade 3.1.2 -> 3.1.3
json-c: define CVE_VERSION
Qiu Tingting (1):
tar: add ptest support
Richard Purdie (34):
bitbake.conf: Add IMAGE_BASENAME to SDK_NAME
vim: Upgrade 9.0.1664 -> 9.0.1894
defaultsetup: Inherit create-spdx by default
oeqa/selftest/runtime_test: No need to use append with TEST_RUNQEMUPARAMS
devtool/build_sdk: Drop unused imports
bitbake: lib: Drop inotify support and replace with mtime checks
bitbake: server/process: Disable the flush() call in server logging
recipetool/devtool: Ensure server knows about changed files
lttng-tools: Upgrade 2.13.10 -> 2.13.11
oeqa/selftest/wic: Improve assertTrue calls
elfutils: Fix reproducibility issue with bunzip2
bitbake: cooker: Drop unneeded flush calls
sstate: Fix nativesdk entry in SSTATE_ARCHS
multilib: fix SSTATE_ARCHS for multilib usage
license/license_image: Fix license file layout to avoid overlapping files
oeqa/selftest/bbtests: Improve and update test_non_gplv3
create-spdx/sbom: Ensure files don't overlap between machines
sstate: Stop allowing overlapping symlinks from sstate
recipes: Drop remaining PR values from recipes
bitbake.conf: No longer support PR from filename
oeqa/selftest: Fix broken symlink removal handling
oeqa/selftest/reproducible: Avoid oe-selftest startup delays
oeqa: Streamline oe-selftest startup time
oeqa/selftest/oescripts: Avoid variable access at module load
bitbake: codeparser: Update debug variable reference
contributor-guide/style-guide: Refer to recipes, not packages
contributor-guide/style-guide: Add a note about task idempotence
lib: Import packagedata oe module by default
oeqa/runner: Ensure class setup errors are shown to bitbake logging
create-spdx: Ensure it is clear where the message comes from
oeqa/utils/gitarchive: Handle broken commit counts in results repo
python3-numpy: Fix reproducibility issue
scritps/runqemu: Ensure we only have two serial ports
glibc: Pull in stable branch fixes
Robert Joslyn (2):
curl: Update from 8.2.1 to 8.3.0
curl: Skip tests marked flaky
Robert Yang (1):
libxcrypt-compat: Remove libcrypt.so to fix conflict with libcrypt
Roland Hieber (7):
template: fix typo in section header
ref-manual: point outdated link to the new location
contributor-guide: recipe-style-guide: add more patch tagging examples
contributor-guide: recipe-style-guide: add section about CVE patches
contributor-guide: discourage marking patches as Inappropriate
contributor-guide: deprecate "Accepted" patch status
contributor-guide: style-guide: discourage using Pending patch status
Ross Burton (19):
packagegroup-core-x11-xserver: add modesetting driver to default XSERVER
machine/qemu*: add modesetting drivers to XSERVER
beaglebone-yocto: remove redundant XSERVER assignment
gcc: Fix -fstack-protector issue on aarch64
testimage: respect target/server IPs when using slirp
manuals: document LICENSE_FLAGS_DETAILS
linux-yocto: update CVE ignores
libwebp: upgrade to 1.3.2
oeqa/runtime/parselogs: remove unused imports
oeqa/runtime/parselogs: don't bother to show target hardware information
oeqa/runtime/parselogs: remove obsolete LSB testing support
oeqa/runtime/parselogs: inline single-caller functions
oeqa/runtime/parselogs: improve find call
oeqa/runtime/parselogs: don't pass around members
oeqa/runtime/parselogs: move some variables out of global scope
oeqa/runtime/parselogs: select the correct machine-specific ignores early
oeqa/runtime/parselogs: parse the logs with Python, not grep
webkitgtk: reduce size of -dbg package
bitbake: bitbake/lib: spawn server/worker using the current Python interpreter
Samantha Jalabert (14):
python3-isodate: Copy recipe from meta-python
python3-booleanpy: Copy recipe from meta-python
python3-beartype: add recipe
python3-click: Copy recipe from meta-python
ptest-packagelists.inc: add python test click
python3-license-expression: Copy recipe from meta-python
ptest-packagelists.inc: add python test license-expression
python3-rdflib: Copy recipe from meta-python
python3-uritools: add recipe
python3-xmltodict: Copy recipe from meta-python
ptest-packagelists.inc: add python test xmltodict
python3-spdx-tools: add recipe
qa: Add selftest for python3-spdx-tools
maintainers.inc: add python3-spdx-tools and dependencies
Sean Nyekjaer (1):
gcc: depend on zstd
Stefan Tauner (1):
gdb: fix RDEPENDS for PACKAGECONFIG[tui]
Stephan Wurm (1):
python3-jsonschema: Update homepage URL
Tim Orling (1):
python3-cryptography{-vectors}: upgrade to 41.0.4
Trevor Gamblin (6):
patchtest: Add tests from patchtest oe repo
patchtest/selftest: remove configurable target
patchtest: add requirements.txt
patchtest: Add README.md for selftests
python3-ptest: skip test_input_no_stdout_fileno
patchtest/selftest: only split resultlines once
Ulrich Ölmann (1):
packagegroup-base: clean up setting packagegroup-machine-base's SUMMARY
Wang Mingyu (36):
alsa-ucm-conf: upgrade 1.2.9 -> 1.2.10
at-spi2-core: upgrade 2.48.3 -> 2.48.4
dbus: upgrade 1.14.8 -> 1.14.10
debianutils: upgrade 5.8 -> 5.12
dnf: upgrade 4.16.1 -> 4.17.0
harfbuzz: upgrade 8.1.1 -> 8.2.0
kexec-tools: upgrade 2.0.26 -> 2.0.27
libinput: upgrade 1.23.0 -> 1.24.0
libnl: upgrade 3.7.0 -> 3.8.0
nghttp2: upgrade 1.55.1 -> 1.56.0
ccache: upgrade 4.8.2 -> 4.8.3
pkgconf: upgrade 2.0.2 -> 2.0.3
python3-git: upgrade 3.1.34 -> 3.1.35
python3-hypothesis: upgrade 6.84.0 -> 6.84.3
python3-pyelftools: upgrade 0.29 -> 0.30
python3-pytest: upgrade 7.4.1 -> 7.4.2
python3-setuptools: upgrade 68.1.2 -> 68.2.1
strace: upgrade 6.4 -> 6.5
stress-ng: upgrade 0.16.04 -> 0.16.05
wayland-utils: upgrade 1.1.0 -> 1.2.0
wireless-regdb: upgrade 2023.05.03 -> 2023.09.01
at-spi2-core: upgrade 2.48.4 -> 2.50.0
enchant2: upgrade 2.5.0 -> 2.6.1
harfbuzz: upgrade 8.2.0 -> 8.2.1
kbd: upgrade 2.6.2 -> 2.6.3
libsecret: upgrade 0.21.0 -> 0.21.1
gobject-introspection: upgrade 1.78.0 -> 1.78.1
python3-numpy: upgrade 1.25.2 -> 1.26.0
python3-hypothesis: upgrade 6.84.3 -> 6.86.2
python3-pycryptodome: upgrade 3.18.0 -> 3.19.0
python3-pycryptodomex: upgrade 3.18.0 -> 3.19.0
python3-smmap: upgrade 5.0.0 -> 6.0.0
python3-trove-classifiers: upgrade 2023.8.7 -> 2023.9.19
python3-typing-extensions: upgrade 4.7.1 -> 4.8.0
python3-urllib3: upgrade 2.0.4 -> 2.0.5
python3-zipp: upgrade 3.16.2 -> 3.17.0
Yash Shinde (1):
glibc: fix CVE-2023-4527
Yogita Urade (2):
tiff: fix CVE-2023-40745
tiff: fix CVE-2023-41175
meta-openembedded: eff1b182c1..ea42cec2ec:
Alex Kiernan (2):
mdns: Upgrade 1790.80.10 -> 2200.0.8
jq: Upgrade 1.6+git -> 1.7
Archana Polampalli (2):
python3-appdirs: print ptest results in unified format
nodejs: upgrade 18.17.1 -> 20.5.1
Armin Kuster (1):
openldap: update to 2.5.16.
Bruce Ashfield (2):
zfs: update to v2.2.0-rc4
vboxguestdrivers: fix kernel v6.5 build
Chi Xu (1):
mariadb: Add ptest support
Clément Péron (6):
etcd-cpp-apiv3: upgrade 0.14.3 -> 0.15.3
devtools: grpc: bump to 1.56.2
protobuf: upgrade 4.22.2 -> 4.23.4
protobuf-c: bump to next release to support protobuf 4.23.x
mariadb: add missing <cstdint> in rocksdb string_util.h
etcd-cpp-apiv3: fix build when gRPC is cross compiled
Daniel Semkowicz (2):
cockpit: Move packagekit to a separate package
cockpit: Move apps to a separate package
Derek Straka (54):
python3-absl: Update version 1.4.0 -> 2.0.0
python3-brotli: Update version 1.0.9 -> 1.1.0
python3-cachecontrol: Update version 0.13.0 -> 0.13.1
python3-cantools: Update version 38.0.2 -> 39.2.0
python3-cerberus: Update version 1.3.4 -> 1.3.5
python3-configshell-fb: Update version 1.1.29 -> 1.1.30
python3-custom-inherit: Update version 2.3.1 -> 2.4.1
python3-distlib: Update version 0.3.6 -> 0.3.7
python3-fasteners: Update version 0.18 -> 0.19
python3-filelock: Update version 3.12.0 -> 3.12.4
python3-bleak: Update version 0.20.2 -> 0.21.1
python3-dynamic-dispatch: Correct the upstream regex check for version upgrades
python3-google-api-python-client: Update version 2.99.0 -> 2.100.0
python3-sqlalchemy: Upgrade 2.0.20 -> 2.0.21
python3-netaddr: Update version 0.8.0 -> 0.9.0
python3-msgpack: Update version 1.0.5 -> 1.0.6
python3-protobuf: Update version 4.24.2 -> 4.24.3
python3-gevent: Update version 23.7.0 -> 23.9.1
python3-langtable: Update version 0.0.63 -> 0.0.64
python3-posix-ipc: Update version 1.0.5 -> 1.1.1
python3-websocket-client: Update version 1.5.3 -> 1.6.3
python3-web3: Update version 6.9.0 -> 6.10.0
python3-apiflask: Update version 2.0.1 -> 2.0.2
python3-argh: Update version 0.29.3 -> 0.29.4
python3-async-timeout: remove old version of the library
python3-pydantic: Update version 1.10.7 -> 2.4.1
python3-pyhamcrest: Fix upstream check by specifying the UPSTREAM_CHECK_URI and UPSTREAM_CHECK_REGEX
python3-pyasn1-modules: Update version 0.2.8 -> 0.3.0
python-pyiface: Update version from git -> 0.0.11
python3-pymysql: Fix upstream check by specifying the UPSTREAM_CHECK_URI and UPSTREAM_CHECK_REGEX
python3-pymysql: update verion 1.0.2 -> 1.1.0
python3-pyproj: update version 3.6.0 -> 3.6.1
python3-pyproject-api: update version 1.5.1 -> 1.6.1
python3-redis: update version 5.0.0 -> 5.0.1
python3-traitlets: update version 5.9.0 -> 5.10.1
python3-xxhash: update version 3.2.0 -> 3.3.0
python3-pyzmq: update version 25.0.0 -> 25.1.1
python3-cachecontrol: Fix upstream check by specifying the UPSTREAM_CHECK_URI and UPSTREAM_CHECK_REGEX
python3-flask-babel: update version 2.0.0 -> 3.1.0
python3-idna-ssl: Fix upstream check by specifying the UPSTREAM_CHECK_URI and UPSTREAM_CHECK_REGEX
python3-ninja-syntax: Fix upstream check by specifying the UPSTREAM_CHECK_URI and UPSTREAM_CHECK_REGEX
python3-prettytable: update version 3.6.0 -> 3.9.0
python3-pytz-deprecation-shim: Remove outdated recipe meant to be a short lived shim
python3-tzlocal: Remove dependency on pytz_deprecation_shim removed in release 5.0
python3-astroid: update version 2.16.6 -> 3.0.0
python3-flask: update version 2.3.2 -> 2.3.3
python3-google-api-core: update version 2.12.0
python3-google-api-python-client: update version 2.100.0 -> 2.101.0
python3-google-auth: update version 2.23.0 -> 2.23.1
python3-parse-type: update version 0.5.2 -> 0.6.2
python3-nacl: Add recipe for the latest release of PyNaCl
python3-botocore: add recipe for latest version of botocore
python3-boto3: add recipe for latest version of boto3
python3-flask-cors: add initial version of the recipe for 4.0.0
Etienne Cordonnier (1):
uutils-coreutils: upgrade 0.0.20 -> 0.0.21
Gianfranco Costamagna (3):
mosquitto: do not automatically depend on dlt-daemon, it's a non-mandatory logging system
mosquitto: upgrade 2.0.15 -> 2.0.17
mosquitto: upgrade 2.0.17 -> 2.0.18
Jeffrey Pautler (1):
bolt: disable CVE checking for this recipe
Jonas Gorski (1):
frr: upgrade 8.4.4 -> 9.0.1
Julian Haller (1):
openct: Fix typo in SUMMARY variable
Kai Kang (1):
ostree: not compatible with riscv32 when ptest enabled
Khem Raj (25):
vlc: Fix build with gettext 0.22+
usbguard: Enable seccomp if distro features have it
sharutils: Check for intmax_t using configure
poco: Add pass/fail ststus into logs
mongodb: Add rdep on tzdata-core
mongodb: Upgrade to 4.4.24
meta-oe-ptest-image-poco: Increase size tp 1G
poco: Fix ptest runtime errors
poco: Do not enable MongoDB packageconfig by default
plocate: Upgrade to 1.1.19 release
xscreensaver: Add osuosl backup MIRROR
mozjs-115: Apply autoconf tuple mismatch fix
cpp-netlib: Fix build with boost 1.80+
cpp-netlib: Fix buildpaths in generated cmake files
python3-pybluez: Fix patch upstream-status
python3-pynetlinux: Fix patch upstream-status
libnet-idn-encode: Add recipe
libio-socket-ssl-perl: Change libnet-libidn-perl->libnet-idn-encode rdep for ptests
libnfs: Drop -Wno-implicit-function-declaration
webkitgtk3: Do not use musttail with clang on arm
fftw: Fix ptest result reporting
nodejs: Fix ptest result reporting
relayd: Update to latest tip of trunk
relayd: Fix build with clang
kernel-selftest: Build headers before compiling tests
Lee Chee Yang (8):
libsdl: fix CVE-2022-34568
keepalived: 2.2.2 -> 2.2.8
irssi: 1.4.2 -> 1.4.4
iniparser: Fix CVE-2023-33461
opensc: fix CVE-2023-2977
x11vnc: Fix CVE-2020-29074
libvncserver: update to 0.9.14
ntpsec: 1.2.2 -> 1.2.2a
Markus Volk (48):
libei: add recipe
libxmlb: update 0.3.10 -> 0.3.14
appstream: update 0.16.2 -> 0.16.3
webrtc-audio-processing: add recipe for 1.x
pipewire: upgrade 0.3.79 -> 0.3.80
evolution-data-server: upgrade 3.48.3 -> 3.50.0
appstream: remove workaround for cross-compile
libxmlb: fix a reproducibility and runtime issue with ptest
tracker-miners: upgrade 3.5.0 -> 3.6.0
mozjs: upgrade 102.9.0 -> 102.15.0
tecla: add recipe
polkit: upgrade 122 -> 123
tracker: upgrade 3.5.1 -> 3.6.0
libxmlb: remove recipe
appstream: remove recipe
gvfs: upgrade 1.51.90 -> 1.52.0
mutter: upgrade 44.3 -> 45.0
xdg-desktop-portal: upgrade 1.16.0 -> 1.18.0
gnome-boxes: upgrade 44.2 -> 45.0
gnome-session: upgrade 44.0 -> 45.0
gnome-text-editor: upgrade 44.0 -> 45.0
gnome-shell: upgrade 44.3 -> 45.0
eog: upgrade 44.3 -> 45.0
gnome-calculator: upgrade 44.0 -> 45.0
xdg-desktop-portal-gnome: upgrade 44.1 -> 45.0
gnome-calendar: upgrade 44.0 -> 45.0
gnome-software: upgrade 44.4 -> 45.0
zenity: upgrade 3.44.0 -> 3.44.2
gnome-system-monitor: upgrade 44.0 -> 45.0
webkitgtk: upgrade 2.40.5 -> 2.42.0
gnome-control-center: upgrade 44.3 -> 45.0
gnome-settings-daemon: upgrade 44.1 -> 45.0
tracker: add missing Upstream-Status
gdm: upgrade 44.1 -> 45.0.1
gnome-calendar: fix reproducibility issue
exiv2: Upgrade 0.27.6 -> 0.28.0
gexiv: Upgrade 0.14.0 -> 0.14.2
gjs: Upgrade 1.76.1 -> 1.78.0
mozjs: add recipe for v115
evince: Upgrade 44.2 -> 45.0
Nautilus: Upgrade 44.2.1 -> 45.0
gedit: Upgrade 44.2 -> 46.1
tepl: Upgrade 6.4.0 -> 6.8.0
libblockdev: Upgrade 2.28 -> 3.03
udisks2: Upgrade 2.9.4 -> 2.10.1
mozjs: Upgrade 102.15.0 -> 102.15.1
libnfs: dont install libnfs-config.cmake
gnome-remote-desktop: Upgrade 44.2 -> 45.0
Martin Jansa (20):
webrtc-audio-processing: Fix build with -Werror=return-type
freeglut: return x11 to REQUIRED_DISTRO_FEATURES
packagegroup-meta-multimedia: restore x11 restriction for projucer
btrfsmaintenance: move btrfs-tools dependency from build-time to run-time
btrfsmaintenance: drop allarch
ttf-google-fira: exclude siggen dependency on fontconfig
cukinia: drop allarch
mdio-tools: exclude siggen dependency on mdio-netlink
ot-br-posix: exclude siggen dependency on ipset
mongodb: add and fix Upstream-Status
mongodb: Fix build on 32bit
gupnp: fix build with meson-1.2.0
minifi-cpp, mozjs-115, redis-7.2.1, pv: add missing Upstream-Status
mozjs: fix filename in MULTILIB_SCRIPTS
gupnp-tools: fix build with meson-1.2.0
gnome-tweaks, networkmanager-fortisslvpn, libesmtp, json-schema-validator, python3-pybluez, python3-pynetlinux, apache2: Fix Malformed Upstream-Status
mozjs: use PV in MULTILIB_SCRIPTS
mosquitto, etcd-cpp-apiv3: add missing Upstream-Status
meta-oe/dynamic-layers: add Upstream-Status where missing
meta-oe/dynamic-layers: add one more missing Upstream-Status and fix one malformed
Michał Iwanicki (1):
python3-pyu2f: add recipe
Mingli Yu (4):
minifi-cpp: Remove the buildpath issue
hdf5: Upgrade to 1.14.2
vlock: Use EXTRA_CFLAGS
mozjs-102: Remove the buildpath
Richard Leitner (2):
python3-shellingham: add recipe for v1.5.3
python3-autoflake: add recipe for v2.2.1
Ross Burton (1):
webkitgtk3: reduce size of -dbg package
Sam Van Den Berge (6):
python3-flask-jwt-extended: add recipe
python3-flask-marshmallow: add recipe
python3-apispec: add recipe
python3-flask-httpauth: add recipe
python3-webargs: add recipe
python3-apiflask: add recipe
Samantha Jalabert (6):
Remove python3-rdflib
Remove python3-license-expression
Remove python3-xmltodict
Remove python3-booleanpy
Remove python3-click
Remove python3-isodate
Samuli Piippo (1):
protobuf: stage protoc binary to sysroot
Sanjay Chitroda (1):
netkit-telnet: Fix CVE-2022-39028
Trevor Gamblin (1):
python3-aiofiles: upgrade 23.1.0 -> 23.2.1
Vyacheslav Yurkov (3):
overlayfs-tools: Drop unneeded dependency
overlayfs-tools: Bump up the version
overlayfs-tools: Install fsck binary
Wang Mingyu (42):
freerdp: upgrade 2.10.0 -> 2.11.0
boost-sml: upgrade 1.1.8 -> 1.1.9
ctags: upgrade 6.0.20230827.0 -> 6.0.20230917.0
dovecot: upgrade 2.3.20 -> 2.3.21
freerdp: upgrade 2.11.0 -> 2.11.1
gensio: upgrade 2.7.5 -> 2.7.6
geoclue: upgrade 2.7.0 -> 2.7.1
hwloc: upgrade 2.9.2 -> 2.9.3
iperf3: upgrade 3.14 -> 3.15
libcloudproviders: upgrade 0.3.2 -> 0.3.4
libdeflate: upgrade 1.18 -> 1.19
libglvnd: upgrade 1.6.0 -> 1.7.0
libtommath: upgrade 1.2.0 -> 1.2.1
libcoap: upgrade 4.3.1 -> 4.3.3
python3-antlr4-runtime: upgrade 4.13.0 -> 4.13.1
python3-lazy: upgrade 1.5 -> 1.6
python3-pyfanotify: upgrade 0.2.0 -> 0.2.1
psqlodbc: upgrade 15.00.0000 -> 16.00.0000
python3-argcomplete: upgrade 3.1.1 -> 3.1.2
python3-bitstring: upgrade 4.1.1 -> 4.1.2
python3-cmake: upgrade 3.27.4.1 -> 3.27.5
python3-coverage: upgrade 7.3.0 -> 7.3.1
python3-engineio: upgrade 4.7.0 -> 4.7.1
python3-eth-utils: upgrade 2.2.0 -> 2.2.1
python3-flask-migrate: upgrade 4.0.4 -> 4.0.5
python3-flask-socketio: upgrade 5.3.5 -> 5.3.6
python3-google-api-python-client: upgrade 2.97.0 -> 2.99.0
python3-google-auth: upgrade 2.22.0 -> 2.23.0
python3-pillow: upgrade 10.0.0 -> 10.0.1
python3-pymisp: upgrade 2.4.175 -> 2.4.176
python3-pymodbus: upgrade 3.5.0 -> 3.5.2
python3-rapidjson: upgrade 1.10 -> 1.11
python3-rich: upgrade 13.5.2 -> 13.5.3
python3-term: upgrade 2.4 -> 2.5
python3-tox: upgrade 4.11.1 -> 4.11.3
python3-typeguard: upgrade 4.1.3 -> 4.1.5
python3-types-setuptools: upgrade 68.1.0.1 -> 68.2.0.0
python3-virtualenv: upgrade 20.24.4 -> 20.24.5
python3-xlsxwriter: upgrade 3.1.2 -> 3.1.3
python3-zeroconf: upgrade 0.97.0 -> 0.112.0
redis: upgrade 7.2.0 -> 7.2.1
remmina: upgrade 1.4.31 -> 1.4.32
Xiangyu Chen (3):
mosh: add support of protobuf 4.22.x
protobuf: upgrade 3.21.12 -> 4.22.2
protobuf-c: add support of protobuf 4.22.x
Yi Zhao (1):
audit: upgrade 3.1.1 -> 3.1.2
meta-arm: bd0953cc60..95789365f7:
Abdellatif El Khlifi (2):
arm-bsp/trusted-firmware-a: corstone1000: enable ERRATA_A35_855472
arm-bsp/u-boot: corstone1000: purge U-Boot specific DT nodes before Linux
Adam Johnston (1):
arm-bsp/trusted-firmware-a: Fix BL32 path if usrmerge enabled
Divin Raj (1):
ci,doc,kas,arm-bsp,arm: Remove support for fvp-baser-aemv8r64 machine
Emekcan Aras (6):
arm-bsp/optee-os: corstone1000: Handling logging syscall correctly
CI: Add meta-secure-core
CI: Include meta-secure-core in corstone1000
kas: corstone1000: add meta-secure-core
arm-bsp/u-boot: corstone1000: introduce authenticated capsule update
arm-bsp/trusted-firmware-m: Enable authenticated capsule update
Javier Tia (2):
optee-client: start tee-supplicant.service when teeprivX dev is detected
libts: tee-udev.rules: Change ownership to tee group
Jon Mason (5):
arm/edk2: update to edk2-stable202308
arm/trusted-firmware-m: update to 1.8.1
arm/opencsd: update to v1.4.1
arm/scp-firmware: update to v2.13.0
README: remove reference to meta-arm-autonomy
Khem Raj (1):
layer.conf: update LAYERSERIES_COMPAT for nanbield
Mariam Elshakfy (2):
arm-bsp/optee-os: N1SDP upgrade optee-os to 3.22
arm-bsp/optee-os: N1SDP upgrade tadevkit and optee-test to 3.22
Peter Hoyes (2):
CI: Allow a GitHub container registry mirror to be specified
CI: Make update-repos more resilient to network issues
Ross Burton (15):
arm/generic-arm64: move SERIAL_CONSOLES to generic-arm64
arm/qemu-generic-arm64: force off KVM in qemu
arm/generic-arm64: set XSERVER to install the modesetting driver
CI: remove redundant variables in testimage.yml
arm-bsp: change port mapping for SSH to port 2222
arm/apply_local_src_patches: allow use in multiple directories
arm/trusted-services: pass through CMake generator
arm/trusted-services: add missing pkgconfig inherit
arm/trusted-services/ts-remote-test: move binary to $bindir
arm/trusted-services/ts-sp-env-test: add missing DEPENDS
arm/trusted-services/ts-sp-env-test: remove
arm/trusted-services: use apply_local_src_patches
arm/trusted-services: upgrade nanopb and fix build races
CI: use a venv for sphinx
CI: upgrade to Kas 4 container
Xueliang Zhong (2):
arm-bsp/n1sdp: update to linux yocto kernel 6.4
arm-bsp/corstone1000: bump kernel version to v6.4
meta-security: 1856a7cf43..aca6d4a9e7:
Armin Kuster (10):
suricata: fix build issue.
suricata: Update to 7.0.0
sssd: Update to 2.9.2
openscap: update to 1.3.9
python3-privacyidea: update to 3.8.1
lkrg-module: update to 0.9.7
libhtp: update to 0.5.45
swtpm: update 0.8.1
lynis: Update to 3.0.9
scap-security-guide: Drop Poky patch and update to tip
John Broadbent (1):
libhoth: Update
meta-raspberrypi: 6501ec892c..482d864b8f:
Joshua Watt (1):
rpi-base: Fix wic image kernel dependency
Khem Raj (5):
userland: Update to trunk from 20230419
linux-raspberrypi: Upgrade 6.1 release to latest point release 6.1.54
linux-firmware-rpidistro: Update to 20230210-5_bpo11+1
bluez-firmware-rpidistro: Update to 1.2-4+rpt10
raspberrypi-firmware: Update to 20230509~buster
Martin Jansa (1):
layer.conf: update LAYERSERIES_COMPAT for nanbield
Change-Id: Id75112a3b0be4bd150dc5d9a28c01982ed48200e
Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
Diffstat (limited to 'poky/meta/lib/patchtest/tests')
25 files changed, 1123 insertions, 0 deletions
diff --git a/poky/meta/lib/patchtest/tests/__init__.py b/poky/meta/lib/patchtest/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/poky/meta/lib/patchtest/tests/__init__.py diff --git a/poky/meta/lib/patchtest/tests/base.py b/poky/meta/lib/patchtest/tests/base.py new file mode 100644 index 0000000000..27db380353 --- /dev/null +++ b/poky/meta/lib/patchtest/tests/base.py @@ -0,0 +1,239 @@ +# Base class to be used by all test cases defined in the suite +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + +import unittest +import logging +import json +import unidiff +from data import PatchTestInput +import mailbox +import collections +import sys +import os +import re + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'pyparsing')) + +logger = logging.getLogger('patchtest') +debug=logger.debug +info=logger.info +warn=logger.warn +error=logger.error + +Commit = collections.namedtuple('Commit', ['author', 'subject', 'commit_message', 'shortlog', 'payload']) + +class PatchtestOEError(Exception): + """Exception for handling patchtest-oe errors""" + def __init__(self, message, exitcode=1): + super().__init__(message) + self.exitcode = exitcode + +class Base(unittest.TestCase): + # if unit test fails, fail message will throw at least the following JSON: {"id": <testid>} + + endcommit_messages_regex = re.compile('\(From \w+-\w+ rev:|(?<!\S)Signed-off-by|(?<!\S)---\n') + patchmetadata_regex = re.compile('-{3} \S+|\+{3} \S+|@{2} -\d+,\d+ \+\d+,\d+ @{2} \S+') + + + @staticmethod + def msg_to_commit(msg): + payload = msg.get_payload() + return Commit(subject=msg['subject'].replace('\n', ' ').replace(' ', ' '), + author=msg.get('From'), + shortlog=Base.shortlog(msg['subject']), + commit_message=Base.commit_message(payload), + payload=payload) + + @staticmethod + def commit_message(payload): + commit_message = payload.__str__() + match = Base.endcommit_messages_regex.search(payload) + if match: + commit_message = payload[:match.start()] + return commit_message + + @staticmethod + def shortlog(shlog): + # remove possible prefix (between brackets) before colon + start = shlog.find(']', 0, shlog.find(':')) + # remove also newlines and spaces at both sides + return shlog[start + 1:].replace('\n', '').strip() + + @classmethod + def setUpClass(cls): + + # General objects: mailbox.mbox and patchset + cls.mbox = mailbox.mbox(PatchTestInput.repo.patch) + + # Patch may be malformed, so try parsing it + cls.unidiff_parse_error = '' + cls.patchset = None + try: + cls.patchset = unidiff.PatchSet.from_filename(PatchTestInput.repo.patch, encoding=u'UTF-8') + except unidiff.UnidiffParseError as upe: + cls.patchset = [] + cls.unidiff_parse_error = str(upe) + + # Easy to iterate list of commits + cls.commits = [] + for msg in cls.mbox: + if msg['subject'] and msg.get_payload(): + cls.commits.append(Base.msg_to_commit(msg)) + + cls.setUpClassLocal() + + @classmethod + def tearDownClass(cls): + cls.tearDownClassLocal() + + @classmethod + def setUpClassLocal(cls): + pass + + @classmethod + def tearDownClassLocal(cls): + pass + + def fail(self, issue, fix=None, commit=None, data=None): + """ Convert to a JSON string failure data""" + value = {'id': self.id(), + 'issue': issue} + + if fix: + value['fix'] = fix + if commit: + value['commit'] = {'subject': commit.subject, + 'shortlog': commit.shortlog} + + # extend return value with other useful info + if data: + value['data'] = data + + return super(Base, self).fail(json.dumps(value)) + + def skip(self, issue, data=None): + """ Convert the skip string to JSON""" + value = {'id': self.id(), + 'issue': issue} + + # extend return value with other useful info + if data: + value['data'] = data + + return super(Base, self).skipTest(json.dumps(value)) + + def shortid(self): + return self.id().split('.')[-1] + + def __str__(self): + return json.dumps({'id': self.id()}) + +class Metadata(Base): + @classmethod + def setUpClassLocal(cls): + cls.tinfoil = cls.setup_tinfoil() + + # get info about added/modified/remove recipes + cls.added, cls.modified, cls.removed = cls.get_metadata_stats(cls.patchset) + + @classmethod + def tearDownClassLocal(cls): + cls.tinfoil.shutdown() + + @classmethod + def setup_tinfoil(cls, config_only=False): + """Initialize tinfoil api from bitbake""" + + # import relevant libraries + try: + scripts_path = os.path.join(PatchTestInput.repodir, 'scripts', 'lib') + if scripts_path not in sys.path: + sys.path.insert(0, scripts_path) + import scriptpath + scriptpath.add_bitbake_lib_path() + import bb.tinfoil + except ImportError: + raise PatchtestOEError('Could not import tinfoil module') + + orig_cwd = os.path.abspath(os.curdir) + + # Load tinfoil + tinfoil = None + try: + builddir = os.environ.get('BUILDDIR') + if not builddir: + logger.warn('Bitbake environment not loaded?') + return tinfoil + os.chdir(builddir) + tinfoil = bb.tinfoil.Tinfoil() + tinfoil.prepare(config_only=config_only) + except bb.tinfoil.TinfoilUIException as te: + if tinfoil: + tinfoil.shutdown() + raise PatchtestOEError('Could not prepare properly tinfoil (TinfoilUIException)') + except Exception as e: + if tinfoil: + tinfoil.shutdown() + raise e + finally: + os.chdir(orig_cwd) + + return tinfoil + + @classmethod + def get_metadata_stats(cls, patchset): + """Get lists of added, modified and removed metadata files""" + + def find_pn(data, path): + """Find the PN from data""" + pn = None + pn_native = None + for _path, _pn in data: + if path in _path: + if 'native' in _pn: + # store the native PN but look for the non-native one first + pn_native = _pn + else: + pn = _pn + break + else: + # sent the native PN if found previously + if pn_native: + return pn_native + + # on renames (usually upgrades), we need to check (FILE) base names + # because the unidiff library does not provided the new filename, just the modified one + # and tinfoil datastore, once the patch is merged, will contain the new filename + path_basename = path.split('_')[0] + for _path, _pn in data: + _path_basename = _path.split('_')[0] + if path_basename == _path_basename: + pn = _pn + return pn + + if not cls.tinfoil: + cls.tinfoil = cls.setup_tinfoil() + + added_paths, modified_paths, removed_paths = [], [], [] + added, modified, removed = [], [], [] + + # get metadata filename additions, modification and removals + for patch in patchset: + if patch.path.endswith('.bb') or patch.path.endswith('.bbappend') or patch.path.endswith('.inc'): + if patch.is_added_file: + added_paths.append(os.path.join(os.path.abspath(PatchTestInput.repodir), patch.path)) + elif patch.is_modified_file: + modified_paths.append(os.path.join(os.path.abspath(PatchTestInput.repodir), patch.path)) + elif patch.is_removed_file: + removed_paths.append(os.path.join(os.path.abspath(PatchTestInput.repodir), patch.path)) + + data = cls.tinfoil.cooker.recipecaches[''].pkg_fn.items() + + added = [find_pn(data,path) for path in added_paths] + modified = [find_pn(data,path) for path in modified_paths] + removed = [find_pn(data,path) for path in removed_paths] + + return [a for a in added if a], [m for m in modified if m], [r for r in removed if r] diff --git a/poky/meta/lib/patchtest/tests/pyparsing/common.py b/poky/meta/lib/patchtest/tests/pyparsing/common.py new file mode 100644 index 0000000000..9d37b0403d --- /dev/null +++ b/poky/meta/lib/patchtest/tests/pyparsing/common.py @@ -0,0 +1,26 @@ +# common pyparsing variables +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + +import pyparsing + +# general +colon = pyparsing.Literal(":") +start = pyparsing.LineStart() +end = pyparsing.LineEnd() +at = pyparsing.Literal("@") +lessthan = pyparsing.Literal("<") +greaterthan = pyparsing.Literal(">") +opensquare = pyparsing.Literal("[") +closesquare = pyparsing.Literal("]") +inappropriate = pyparsing.CaselessLiteral("Inappropriate") +submitted = pyparsing.CaselessLiteral("Submitted") + +# word related +nestexpr = pyparsing.nestedExpr(opener='[', closer=']') +inappropriateinfo = pyparsing.Literal("Inappropriate") + nestexpr +submittedinfo = pyparsing.Literal("Submitted") + nestexpr +word = pyparsing.Word(pyparsing.alphas) +worddot = pyparsing.Word(pyparsing.alphas+".") diff --git a/poky/meta/lib/patchtest/tests/pyparsing/parse_cve_tags.py b/poky/meta/lib/patchtest/tests/pyparsing/parse_cve_tags.py new file mode 100644 index 0000000000..dd7131a650 --- /dev/null +++ b/poky/meta/lib/patchtest/tests/pyparsing/parse_cve_tags.py @@ -0,0 +1,18 @@ +# signed-off-by pyparsing definition +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + + +import pyparsing +import common + +name = pyparsing.Regex('\S+.*(?= <)') +username = pyparsing.OneOrMore(common.worddot) +domain = pyparsing.OneOrMore(common.worddot) +cve = pyparsing.Regex('CVE\-\d{4}\-\d+') +cve_mark = pyparsing.Literal("CVE:") + +cve_tag = pyparsing.AtLineStart(cve_mark + cve) +patch_cve_tag = pyparsing.AtLineStart("+" + cve_mark + cve) diff --git a/poky/meta/lib/patchtest/tests/pyparsing/parse_shortlog.py b/poky/meta/lib/patchtest/tests/pyparsing/parse_shortlog.py new file mode 100644 index 0000000000..26e9612c4a --- /dev/null +++ b/poky/meta/lib/patchtest/tests/pyparsing/parse_shortlog.py @@ -0,0 +1,14 @@ +# subject pyparsing definition +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + +# NOTE:This is an oversimplified syntax of the mbox's summary + +import pyparsing +import common + +target = pyparsing.OneOrMore(pyparsing.Word(pyparsing.printables.replace(':',''))) +summary = pyparsing.OneOrMore(pyparsing.Word(pyparsing.printables)) +shortlog = common.start + target + common.colon + summary + common.end diff --git a/poky/meta/lib/patchtest/tests/pyparsing/parse_signed_off_by.py b/poky/meta/lib/patchtest/tests/pyparsing/parse_signed_off_by.py new file mode 100644 index 0000000000..c8a4351551 --- /dev/null +++ b/poky/meta/lib/patchtest/tests/pyparsing/parse_signed_off_by.py @@ -0,0 +1,22 @@ +# signed-off-by pyparsing definition +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + + +import pyparsing +import common + +name = pyparsing.Regex('\S+.*(?= <)') +username = pyparsing.OneOrMore(common.worddot) +domain = pyparsing.OneOrMore(common.worddot) + +# taken from https://pyparsing-public.wikispaces.com/Helpful+Expressions +email = pyparsing.Regex(r"(?P<user>[A-Za-z0-9._%+-]+)@(?P<hostname>[A-Za-z0-9.-]+)\.(?P<domain>[A-Za-z]{2,})") + +email_enclosed = common.lessthan + email + common.greaterthan + +signed_off_by_mark = pyparsing.Literal("Signed-off-by:") +signed_off_by = pyparsing.AtLineStart(signed_off_by_mark + name + email_enclosed) +patch_signed_off_by = pyparsing.AtLineStart("+" + signed_off_by_mark + name + email_enclosed) diff --git a/poky/meta/lib/patchtest/tests/pyparsing/parse_upstream_status.py b/poky/meta/lib/patchtest/tests/pyparsing/parse_upstream_status.py new file mode 100644 index 0000000000..d63567efbe --- /dev/null +++ b/poky/meta/lib/patchtest/tests/pyparsing/parse_upstream_status.py @@ -0,0 +1,24 @@ +# upstream-status pyparsing definition +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + + +import common +import pyparsing + +upstream_status_literal_valid_status = ["Pending", "Backport", "Denied", "Inappropriate", "Submitted"] +upstream_status_nonliteral_valid_status = ["Pending", "Backport", "Denied", "Inappropriate [reason]", "Submitted [where]"] + +upstream_status_valid_status = pyparsing.Or( + [pyparsing.Literal(status) for status in upstream_status_literal_valid_status] +) + +upstream_status_mark = pyparsing.Literal("Upstream-Status") +inappropriate_status_mark = common.inappropriate +submitted_status_mark = common.submitted + +upstream_status = common.start + upstream_status_mark + common.colon + upstream_status_valid_status +upstream_status_inappropriate_info = common.start + upstream_status_mark + common.colon + common.inappropriateinfo +upstream_status_submitted_info = common.start + upstream_status_mark + common.colon + common.submittedinfo diff --git a/poky/meta/lib/patchtest/tests/test_mbox_author.py b/poky/meta/lib/patchtest/tests/test_mbox_author.py new file mode 100644 index 0000000000..6c79f164d4 --- /dev/null +++ b/poky/meta/lib/patchtest/tests/test_mbox_author.py @@ -0,0 +1,29 @@ +# Checks related to the patch's author +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + +import base +import re + +class Author(base.Base): + + auh_email = '<auh@auh.yoctoproject.org>' + + invalids = [re.compile("^Upgrade Helper.+"), + re.compile(re.escape(auh_email)), + re.compile("uh@not\.set"), + re.compile("\S+@example\.com")] + + + def test_author_valid(self): + for commit in self.commits: + for invalid in self.invalids: + if invalid.search(commit.author): + self.fail('Invalid author %s' % commit.author, 'Resend the series with a valid patch\'s author', commit) + + def test_non_auh_upgrade(self): + for commit in self.commits: + if self.auh_email in commit.payload: + self.fail('Invalid author %s in commit message' % self.auh_email, 'Resend the series with a valid patch\'s author', commit) diff --git a/poky/meta/lib/patchtest/tests/test_mbox_bugzilla.py b/poky/meta/lib/patchtest/tests/test_mbox_bugzilla.py new file mode 100644 index 0000000000..e8de48bb8d --- /dev/null +++ b/poky/meta/lib/patchtest/tests/test_mbox_bugzilla.py @@ -0,0 +1,22 @@ +# Checks related to the patch's bugzilla tag +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + +import re +import base + +class Bugzilla(base.Base): + rexp_detect = re.compile("\[\s?YOCTO.*\]", re.IGNORECASE) + rexp_validation = re.compile("\[(\s?YOCTO\s?#\s?(\d+)\s?,?)+\]", re.IGNORECASE) + + def test_bugzilla_entry_format(self): + for commit in Bugzilla.commits: + for line in commit.commit_message.splitlines(): + if self.rexp_detect.match(line): + if not self.rexp_validation.match(line): + self.fail('Yocto Project bugzilla tag is not correctly formatted', + 'Specify bugzilla ID in commit description with format: "[YOCTO #<bugzilla ID>]"', + commit) + diff --git a/poky/meta/lib/patchtest/tests/test_mbox_cve.py b/poky/meta/lib/patchtest/tests/test_mbox_cve.py new file mode 100644 index 0000000000..f99194c094 --- /dev/null +++ b/poky/meta/lib/patchtest/tests/test_mbox_cve.py @@ -0,0 +1,49 @@ +# Checks related to the patch's CVE lines +# +# 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. +# +# 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-or-later + +import base +import os +import parse_cve_tags +import re + +class CVE(base.Base): + + revert_shortlog_regex = re.compile('Revert\s+".*"') + prog = parse_cve_tags.cve_tag + + def setUp(self): + if self.unidiff_parse_error: + self.skip('Parse error %s' % self.unidiff_parse_error) + + # we are just interested in series that introduce CVE patches, thus discard other + # possibilities: modification to current CVEs, patch directly introduced into the + # recipe, upgrades already including the CVE, etc. + new_cves = [p for p in self.patchset if p.path.endswith('.patch') and p.is_added_file] + if not new_cves: + self.skip('No new CVE patches introduced') + + def test_cve_presence_in_commit_message(self): + for commit in CVE.commits: + # skip those patches that revert older commits, these do not required the tag presence + if self.revert_shortlog_regex.match(commit.shortlog): + continue + if not self.prog.search_string(commit.payload): + self.fail('Missing or incorrectly formatted CVE tag in mbox', + 'Correct or include the CVE tag in the mbox with format: "CVE: CVE-YYYY-XXXX"', + commit) diff --git a/poky/meta/lib/patchtest/tests/test_mbox_description.py b/poky/meta/lib/patchtest/tests/test_mbox_description.py new file mode 100644 index 0000000000..7addc6b5f7 --- /dev/null +++ b/poky/meta/lib/patchtest/tests/test_mbox_description.py @@ -0,0 +1,17 @@ +# Checks related to the patch's commit_message +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + +import base + +class CommitMessage(base.Base): + + def test_commit_message_presence(self): + for commit in CommitMessage.commits: + if not commit.commit_message.strip(): + self.fail('Patch is missing a descriptive commit message', + 'Please include a commit message on your patch explaining the change (most importantly why the change is being made)', + commit) + diff --git a/poky/meta/lib/patchtest/tests/test_mbox_format.py b/poky/meta/lib/patchtest/tests/test_mbox_format.py new file mode 100644 index 0000000000..85c452ca0d --- /dev/null +++ b/poky/meta/lib/patchtest/tests/test_mbox_format.py @@ -0,0 +1,16 @@ +# Checks correct parsing of mboxes +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + +import base +import re + +class MboxFormat(base.Base): + + def test_mbox_format(self): + if self.unidiff_parse_error: + self.fail('Series cannot be parsed correctly due to malformed diff lines', + 'Create the series again using git-format-patch and ensure it can be applied using git am', + data=[('Diff line', re.sub('^.+:\s(?<!$)','',self.unidiff_parse_error))]) diff --git a/poky/meta/lib/patchtest/tests/test_mbox_mailinglist.py b/poky/meta/lib/patchtest/tests/test_mbox_mailinglist.py new file mode 100644 index 0000000000..de38e205b1 --- /dev/null +++ b/poky/meta/lib/patchtest/tests/test_mbox_mailinglist.py @@ -0,0 +1,64 @@ +# Check if the series was intended for other project (not OE-Core) +# +# Copyright (C) 2017 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + +import subprocess +import collections +import base +import re +from data import PatchTestInput + +class MailingList(base.Base): + + # base paths of main yocto project sub-projects + paths = { + 'oe-core': ['meta-selftest', 'meta-skeleton', 'meta', 'scripts'], + 'bitbake': ['bitbake'], + 'documentation': ['documentation'], + 'poky': ['meta-poky','meta-yocto-bsp'], + 'oe': ['meta-gpe', 'meta-gnome', 'meta-efl', 'meta-networking', 'meta-multimedia','meta-initramfs', 'meta-ruby', 'contrib', 'meta-xfce', 'meta-filesystems', 'meta-perl', 'meta-webserver', 'meta-systemd', 'meta-oe', 'meta-python'] + } + + # scripts folder is a mix of oe-core and poky, most is oe-core code except: + poky_scripts = ['scripts/yocto-bsp', 'scripts/yocto-kernel', 'scripts/yocto-layer', 'scripts/lib/bsp'] + + Project = collections.namedtuple('Project', ['name', 'listemail', 'gitrepo', 'paths']) + + bitbake = Project(name='Bitbake', listemail='bitbake-devel@lists.openembedded.org', gitrepo='http://git.openembedded.org/bitbake/', paths=paths['bitbake']) + doc = Project(name='Documentantion', listemail='yocto@yoctoproject.org', gitrepo='http://git.yoctoproject.org/cgit/cgit.cgi/yocto-docs/', paths=paths['documentation']) + poky = Project(name='Poky', listemail='poky@yoctoproject.org', gitrepo='http://git.yoctoproject.org/cgit/cgit.cgi/poky/', paths=paths['poky']) + oe = Project(name='oe', listemail='openembedded-devel@lists.openembedded.org', gitrepo='http://git.openembedded.org/meta-openembedded/', paths=paths['oe']) + + + def test_target_mailing_list(self): + """In case of merge failure, check for other targeted projects""" + if PatchTestInput.repo.ismerged: + self.skip('Series merged, no reason to check other mailing lists') + + # a meta project may be indicted in the message subject, if this is the case, just fail + # TODO: there may be other project with no-meta prefix, we also need to detect these + project_regex = re.compile("\[(?P<project>meta-.+)\]") + for commit in MailingList.commits: + match = project_regex.match(commit.subject) + if match: + self.fail('Series sent to the wrong mailing list', + 'Check the project\'s README (%s) and send the patch to the indicated list' % match.group('project'), + commit) + + for patch in self.patchset: + folders = patch.path.split('/') + base_path = folders[0] + for project in [self.bitbake, self.doc, self.oe, self.poky]: + if base_path in project.paths: + self.fail('Series sent to the wrong mailing list or some patches from the series correspond to different mailing lists', 'Send the series again to the correct mailing list (ML)', + data=[('Suggested ML', '%s [%s]' % (project.listemail, project.gitrepo)), + ('Patch\'s path:', patch.path)]) + + # check for poky's scripts code + if base_path.startswith('scripts'): + for poky_file in self.poky_scripts: + if patch.path.startswith(poky_file): + self.fail('Series sent to the wrong mailing list or some patches from the series correspond to different mailing lists', 'Send the series again to the correct mailing list (ML)', + data=[('Suggested ML', '%s [%s]' % (self.poky.listemail, self.poky.gitrepo)),('Patch\'s path:', patch.path)]) diff --git a/poky/meta/lib/patchtest/tests/test_mbox_merge.py b/poky/meta/lib/patchtest/tests/test_mbox_merge.py new file mode 100644 index 0000000000..c8b6718d15 --- /dev/null +++ b/poky/meta/lib/patchtest/tests/test_mbox_merge.py @@ -0,0 +1,25 @@ +# Check if mbox was merged by patchtest +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + +import subprocess +import base +from data import PatchTestInput + +def headlog(): + output = subprocess.check_output( + "cd %s; git log --pretty='%%h#%%aN#%%cD:#%%s' -1" % PatchTestInput.repodir, + universal_newlines=True, + shell=True + ) + return output.split('#') + +class Merge(base.Base): + def test_series_merge_on_head(self): + if not PatchTestInput.repo.ismerged: + commithash, author, date, shortlog = headlog() + self.fail('Series does not apply on top of target branch', + 'Rebase your series on top of targeted branch', + data=[('Targeted branch', '%s (currently at %s)' % (PatchTestInput.repo.branch, commithash))]) diff --git a/poky/meta/lib/patchtest/tests/test_mbox_shortlog.py b/poky/meta/lib/patchtest/tests/test_mbox_shortlog.py new file mode 100644 index 0000000000..b6c2a209ff --- /dev/null +++ b/poky/meta/lib/patchtest/tests/test_mbox_shortlog.py @@ -0,0 +1,41 @@ +# Checks related to the patch's summary +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + +import base +import parse_shortlog +import pyparsing + +maxlength = 90 + +class Shortlog(base.Base): + + def test_shortlog_format(self): + for commit in Shortlog.commits: + shortlog = commit.shortlog + if not shortlog.strip(): + self.skip('Empty shortlog, no reason to execute shortlog format test') + else: + # no reason to re-check on revert shortlogs + if shortlog.startswith('Revert "'): + continue + try: + parse_shortlog.shortlog.parseString(shortlog) + except pyparsing.ParseException as pe: + self.fail('Shortlog does not follow expected format', + 'Commit shortlog (first line of commit message) should follow the format "<target>: <summary>"', + commit) + + def test_shortlog_length(self): + for commit in Shortlog.commits: + # no reason to re-check on revert shortlogs + shortlog = commit.shortlog + if shortlog.startswith('Revert "'): + continue + l = len(shortlog) + if l > maxlength: + self.fail('Commit shortlog is too long', + 'Edit shortlog so that it is %d characters or less (currently %d characters)' % (maxlength, l), + commit) diff --git a/poky/meta/lib/patchtest/tests/test_mbox_signed_off_by.py b/poky/meta/lib/patchtest/tests/test_mbox_signed_off_by.py new file mode 100644 index 0000000000..6458951f1c --- /dev/null +++ b/poky/meta/lib/patchtest/tests/test_mbox_signed_off_by.py @@ -0,0 +1,28 @@ +# Checks related to the patch's signed-off-by lines +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + +import base +import parse_signed_off_by +import re + +class SignedOffBy(base.Base): + + revert_shortlog_regex = re.compile('Revert\s+".*"') + + @classmethod + def setUpClassLocal(cls): + # match self.mark with no '+' preceding it + cls.prog = parse_signed_off_by.signed_off_by + + def test_signed_off_by_presence(self): + for commit in SignedOffBy.commits: + # skip those patches that revert older commits, these do not required the tag presence + if self.revert_shortlog_regex.match(commit.shortlog): + continue + if not SignedOffBy.prog.search_string(commit.payload): + self.fail('Patch is missing Signed-off-by', + 'Sign off the patch (either manually or with "git commit --amend -s")', + commit) diff --git a/poky/meta/lib/patchtest/tests/test_metadata_lic_files_chksum.py b/poky/meta/lib/patchtest/tests/test_metadata_lic_files_chksum.py new file mode 100644 index 0000000000..e9a5b6bb4e --- /dev/null +++ b/poky/meta/lib/patchtest/tests/test_metadata_lic_files_chksum.py @@ -0,0 +1,82 @@ +# Checks related to the patch's LIC_FILES_CHKSUM metadata variable +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + +import base +import re +from data import PatchTestInput, PatchTestDataStore + +class LicFilesChkSum(base.Metadata): + metadata = 'LIC_FILES_CHKSUM' + license = 'LICENSE' + closed = 'CLOSED' + lictag = 'License-Update' + lictag_re = re.compile("^%s:" % lictag, re.MULTILINE) + + def setUp(self): + # these tests just make sense on patches that can be merged + if not PatchTestInput.repo.canbemerged: + self.skip('Patch cannot be merged') + + def test_lic_files_chksum_presence(self): + if not self.added: + self.skip('No added recipes, skipping test') + + for pn in self.added: + rd = self.tinfoil.parse_recipe(pn) + pathname = rd.getVar('FILE') + # we are not interested in images + if '/images/' in pathname: + continue + lic_files_chksum = rd.getVar(self.metadata) + if rd.getVar(self.license) == self.closed: + continue + if not lic_files_chksum: + self.fail('%s is missing in newly added recipe' % self.metadata, + 'Specify the variable %s in %s' % (self.metadata, pn)) + + def pretest_lic_files_chksum_modified_not_mentioned(self): + if not self.modified: + self.skip('No modified recipes, skipping pretest') + # get the proper metadata values + for pn in self.modified: + rd = self.tinfoil.parse_recipe(pn) + pathname = rd.getVar('FILE') + # we are not interested in images + if '/images/' in pathname: + continue + PatchTestDataStore['%s-%s-%s' % (self.shortid(),self.metadata,pn)] = rd.getVar(self.metadata) + + def test_lic_files_chksum_modified_not_mentioned(self): + if not self.modified: + self.skip('No modified recipes, skipping test') + + # get the proper metadata values + for pn in self.modified: + rd = self.tinfoil.parse_recipe(pn) + pathname = rd.getVar('FILE') + # we are not interested in images + if '/images/' in pathname: + continue + PatchTestDataStore['%s-%s-%s' % (self.shortid(),self.metadata,pn)] = rd.getVar(self.metadata) + # compare if there were changes between pre-merge and merge + for pn in self.modified: + pretest = PatchTestDataStore['pre%s-%s-%s' % (self.shortid(),self.metadata, pn)] + test = PatchTestDataStore['%s-%s-%s' % (self.shortid(),self.metadata, pn)] + + # TODO: this is workaround to avoid false-positives when pretest metadata is empty (not reason found yet) + # For more info, check bug 12284 + if not pretest: + return + + if pretest != test: + # if any patch on the series contain reference on the metadata, fail + for commit in self.commits: + if self.lictag_re.search(commit.commit_message): + break + else: + self.fail('LIC_FILES_CHKSUM changed on target %s but there is no "%s" tag in commit message' % (pn, self.lictag), + 'Include "%s: <description>" into the commit message with a brief description' % self.lictag, + data=[('Current checksum', pretest), ('New checksum', test)]) diff --git a/poky/meta/lib/patchtest/tests/test_metadata_license.py b/poky/meta/lib/patchtest/tests/test_metadata_license.py new file mode 100644 index 0000000000..16604dbfb1 --- /dev/null +++ b/poky/meta/lib/patchtest/tests/test_metadata_license.py @@ -0,0 +1,55 @@ +# Checks related to the patch's LIC_FILES_CHKSUM metadata variable +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + +import base +import os +from data import PatchTestInput + +class License(base.Metadata): + metadata = 'LICENSE' + invalid_license = 'PATCHTESTINVALID' + + def setUp(self): + # these tests just make sense on patches that can be merged + if not PatchTestInput.repo.canbemerged: + self.skip('Patch cannot be merged') + + def test_license_presence(self): + if not self.added: + self.skip('No added recipes, skipping test') + + # TODO: this is a workaround so we can parse the recipe not + # containing the LICENSE var: add some default license instead + # of INVALID into auto.conf, then remove this line at the end + auto_conf = os.path.join(os.environ.get('BUILDDIR'), 'conf', 'auto.conf') + open_flag = 'w' + if os.path.exists(auto_conf): + open_flag = 'a' + with open(auto_conf, open_flag) as fd: + for pn in self.added: + fd.write('LICENSE ??= "%s"\n' % self.invalid_license) + + no_license = False + for pn in self.added: + rd = self.tinfoil.parse_recipe(pn) + license = rd.getVar(self.metadata) + if license == self.invalid_license: + no_license = True + break + + # remove auto.conf line or the file itself + if open_flag == 'w': + os.remove(auto_conf) + else: + fd = open(auto_conf, 'r') + lines = fd.readlines() + fd.close() + with open(auto_conf, 'w') as fd: + fd.write(''.join(lines[:-1])) + + if no_license: + self.fail('Recipe does not have the LICENSE field set', 'Include a LICENSE into the new recipe') + diff --git a/poky/meta/lib/patchtest/tests/test_metadata_max_length.py b/poky/meta/lib/patchtest/tests/test_metadata_max_length.py new file mode 100644 index 0000000000..04a5e23469 --- /dev/null +++ b/poky/meta/lib/patchtest/tests/test_metadata_max_length.py @@ -0,0 +1,26 @@ +# Checks related to patch line lengths +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + +import base +import re + +class MaxLength(base.Base): + add_mark = re.compile('\+ ') + max_length = 200 + + def test_max_line_length(self): + for patch in self.patchset: + # for the moment, we are just interested in metadata + if patch.path.endswith('.patch'): + continue + payload = str(patch) + for line in payload.splitlines(): + if self.add_mark.match(line): + current_line_length = len(line[1:]) + if current_line_length > self.max_length: + self.fail('Patch line too long (current length %s)' % current_line_length, + 'Shorten the corresponding patch line (max length supported %s)' % self.max_length, + data=[('Patch', patch.path), ('Line', '%s ...' % line[0:80])]) diff --git a/poky/meta/lib/patchtest/tests/test_metadata_src_uri.py b/poky/meta/lib/patchtest/tests/test_metadata_src_uri.py new file mode 100644 index 0000000000..718229d7ad --- /dev/null +++ b/poky/meta/lib/patchtest/tests/test_metadata_src_uri.py @@ -0,0 +1,75 @@ +# Checks related to the patch's SRC_URI metadata variable +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + +import subprocess +import base +import re +import os +from data import PatchTestInput, PatchTestDataStore + +class SrcUri(base.Metadata): + + metadata = 'SRC_URI' + md5sum = 'md5sum' + sha256sum = 'sha256sum' + git_regex = re.compile('^git\:\/\/.*') + + def setUp(self): + # these tests just make sense on patches that can be merged + if not PatchTestInput.repo.canbemerged: + self.skip('Patch cannot be merged') + + def pretest_src_uri_left_files(self): + if not self.modified: + self.skip('No modified recipes, skipping pretest') + + # get the proper metadata values + for pn in self.modified: + # we are not interested in images + if 'core-image' in pn: + continue + rd = self.tinfoil.parse_recipe(pn) + PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata, pn)] = rd.getVar(self.metadata) + + def test_src_uri_left_files(self): + if not self.modified: + self.skip('No modified recipes, skipping pretest') + + # get the proper metadata values + for pn in self.modified: + # we are not interested in images + if 'core-image' in pn: + continue + rd = self.tinfoil.parse_recipe(pn) + PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata, pn)] = rd.getVar(self.metadata) + + for pn in self.modified: + pretest_src_uri = PatchTestDataStore['pre%s-%s-%s' % (self.shortid(), self.metadata, pn)].split() + test_src_uri = PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata, pn)].split() + + pretest_files = set([os.path.basename(patch) for patch in pretest_src_uri if patch.startswith('file://')]) + test_files = set([os.path.basename(patch) for patch in test_src_uri if patch.startswith('file://')]) + + # check if files were removed + if len(test_files) < len(pretest_files): + + # get removals from patchset + filesremoved_from_patchset = set() + for patch in self.patchset: + if patch.is_removed_file: + filesremoved_from_patchset.add(os.path.basename(patch.path)) + + # get the deleted files from the SRC_URI + filesremoved_from_usr_uri = pretest_files - test_files + + # finally, get those patches removed at SRC_URI and not removed from the patchset + # TODO: we are not taking into account renames, so test may raise false positives + not_removed = filesremoved_from_usr_uri - filesremoved_from_patchset + if not_removed: + self.fail('Patches not removed from tree', + 'Amend the patch containing the software patch file removal', + data=[('Patch', f) for f in not_removed]) + diff --git a/poky/meta/lib/patchtest/tests/test_metadata_summary.py b/poky/meta/lib/patchtest/tests/test_metadata_summary.py new file mode 100644 index 0000000000..931b26768e --- /dev/null +++ b/poky/meta/lib/patchtest/tests/test_metadata_summary.py @@ -0,0 +1,32 @@ +# Checks related to the patch's summary metadata variable +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + +import base +from data import PatchTestInput + +class Summary(base.Metadata): + metadata = 'SUMMARY' + + def setUp(self): + # these tests just make sense on patches that can be merged + if not PatchTestInput.repo.canbemerged: + self.skip('Patch cannot be merged') + + def test_summary_presence(self): + if not self.added: + self.skip('No added recipes, skipping test') + + for pn in self.added: + # we are not interested in images + if 'core-image' in pn: + continue + rd = self.tinfoil.parse_recipe(pn) + summary = rd.getVar(self.metadata) + + # "${PN} version ${PN}-${PR}" is the default, so fail if default + if summary.startswith('%s version' % pn): + self.fail('%s is missing in newly added recipe' % self.metadata, + 'Specify the variable %s in %s' % (self.metadata, pn)) diff --git a/poky/meta/lib/patchtest/tests/test_patch_cve.py b/poky/meta/lib/patchtest/tests/test_patch_cve.py new file mode 100644 index 0000000000..46ed9ef791 --- /dev/null +++ b/poky/meta/lib/patchtest/tests/test_patch_cve.py @@ -0,0 +1,51 @@ +# Checks related to the patch's CVE lines +# +# 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. +# +# 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-or-later + +import base +import os +import re + +class CVE(base.Base): + + re_cve_pattern = re.compile("CVE\-\d{4}\-\d+", re.IGNORECASE) + re_cve_payload_tag = re.compile("\+CVE:(\s+CVE\-\d{4}\-\d+)+") + + def setUp(self): + if self.unidiff_parse_error: + self.skip('Parse error %s' % self.unidiff_parse_error) + + # we are just interested in series that introduce CVE patches, thus discard other + # possibilities: modification to current CVEs, patch directly introduced into the + # recipe, upgrades already including the CVE, etc. + new_cves = [p for p in self.patchset if p.path.endswith('.patch') and p.is_added_file] + if not new_cves: + self.skip('No new CVE patches introduced') + + def test_cve_tag_format(self): + for commit in CVE.commits: + if self.re_cve_pattern.search(commit.shortlog) or self.re_cve_pattern.search(commit.commit_message): + tag_found = False + for line in commit.payload.splitlines(): + if self.re_cve_payload_tag.match(line): + tag_found = True + break + if not tag_found: + self.fail('Missing or incorrectly formatted CVE tag in included patch file', + 'Correct or include the CVE tag on cve patch with format: "CVE: CVE-YYYY-XXXX"', + commit) diff --git a/poky/meta/lib/patchtest/tests/test_patch_signed_off_by.py b/poky/meta/lib/patchtest/tests/test_patch_signed_off_by.py new file mode 100644 index 0000000000..4855d6daf7 --- /dev/null +++ b/poky/meta/lib/patchtest/tests/test_patch_signed_off_by.py @@ -0,0 +1,43 @@ +# Checks related to the patch's signed-off-by lines +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + +import base +import parse_signed_off_by +import re + +class PatchSignedOffBy(base.Base): + + @classmethod + def setUpClassLocal(cls): + cls.newpatches = [] + # get just those relevant patches: new software patches + for patch in cls.patchset: + if patch.path.endswith('.patch') and patch.is_added_file: + cls.newpatches.append(patch) + + cls.mark = str(parse_signed_off_by.signed_off_by_mark).strip('"') + + # match PatchSignedOffBy.mark with '+' preceding it + cls.prog = parse_signed_off_by.patch_signed_off_by + + def setUp(self): + if self.unidiff_parse_error: + self.skip('Parse error %s' % self.unidiff_parse_error) + + def test_signed_off_by_presence(self): + if not PatchSignedOffBy.newpatches: + self.skip("There are no new software patches, no reason to test %s presence" % PatchSignedOffBy.mark) + + for newpatch in PatchSignedOffBy.newpatches: + payload = newpatch.__str__() + for line in payload.splitlines(): + if self.patchmetadata_regex.match(line): + continue + if PatchSignedOffBy.prog.search_string(payload): + break + else: + self.fail('A patch file has been added, but does not have a Signed-off-by tag', + 'Sign off the added patch file (%s)' % newpatch.path) diff --git a/poky/meta/lib/patchtest/tests/test_patch_upstream_status.py b/poky/meta/lib/patchtest/tests/test_patch_upstream_status.py new file mode 100644 index 0000000000..eda5353c66 --- /dev/null +++ b/poky/meta/lib/patchtest/tests/test_patch_upstream_status.py @@ -0,0 +1,64 @@ +# Checks related to the patch's upstream-status lines +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + +import base +import parse_upstream_status +import pyparsing +import os + +class PatchUpstreamStatus(base.Base): + + upstream_status_regex = pyparsing.AtLineStart("+" + "Upstream-Status") + + @classmethod + def setUpClassLocal(cls): + cls.newpatches = [] + # get just those relevant patches: new software patches + for patch in cls.patchset: + if patch.path.endswith('.patch') and patch.is_added_file: + cls.newpatches.append(patch) + + def setUp(self): + if self.unidiff_parse_error: + self.skip('Python-unidiff parse error') + self.valid_status = ', '.join(parse_upstream_status.upstream_status_nonliteral_valid_status) + self.standard_format = 'Upstream-Status: <Valid status>' + + def test_upstream_status_presence_format(self): + if not PatchUpstreamStatus.newpatches: + self.skip("There are no new software patches, no reason to test Upstream-Status presence/format") + + for newpatch in PatchUpstreamStatus.newpatches: + payload = newpatch.__str__() + if not self.upstream_status_regex.search_string(payload): + self.fail('Added patch file is missing Upstream-Status in the header', + 'Add Upstream-Status: <Valid status> to the header of %s' % newpatch.path, + data=[('Standard format', self.standard_format), ('Valid status', self.valid_status)]) + for line in payload.splitlines(): + if self.patchmetadata_regex.match(line): + continue + if self.upstream_status_regex.search_string(line): + if parse_upstream_status.inappropriate_status_mark.searchString(line): + try: + parse_upstream_status.upstream_status_inappropriate_info.parseString(line.lstrip('+')) + except pyparsing.ParseException as pe: + self.fail('Upstream-Status is Inappropriate, but no reason was provided', + 'Include a brief reason why %s is inappropriate' % os.path.basename(newpatch.path), + data=[('Current', pe.pstr), ('Standard format', 'Upstream-Status: Inappropriate [reason]')]) + elif parse_upstream_status.submitted_status_mark.searchString(line): + try: + parse_upstream_status.upstream_status_submitted_info.parseString(line.lstrip('+')) + except pyparsing.ParseException as pe: + self.fail('Upstream-Status is Submitted, but it is not mentioned where', + 'Include where %s was submitted' % os.path.basename(newpatch.path), + data=[('Current', pe.pstr), ('Standard format', 'Upstream-Status: Submitted [where]')]) + else: + try: + parse_upstream_status.upstream_status.parseString(line.lstrip('+')) + except pyparsing.ParseException as pe: + self.fail('Upstream-Status is in incorrect format', + 'Fix Upstream-Status format in %s' % os.path.basename(newpatch.path), + data=[('Current', pe.pstr), ('Standard format', self.standard_format), ('Valid status', self.valid_status)]) diff --git a/poky/meta/lib/patchtest/tests/test_python_pylint.py b/poky/meta/lib/patchtest/tests/test_python_pylint.py new file mode 100644 index 0000000000..ea8efb7c2a --- /dev/null +++ b/poky/meta/lib/patchtest/tests/test_python_pylint.py @@ -0,0 +1,61 @@ +# Checks related to the python code done with pylint +# +# Copyright (C) 2016 Intel Corporation +# +# SPDX-License-Identifier: GPL-2.0 + +import base +from data import PatchTestInput +import pylint.epylint as lint + +class PyLint(base.Base): + pythonpatches = [] + pylint_pretest = {} + pylint_test = {} + pylint_options = " -E --disable='E0611, E1101, F0401, E0602' --msg-template='L:{line} F:{module} I:{msg}'" + + @classmethod + def setUpClassLocal(cls): + # get just those patches touching python files + cls.pythonpatches = [] + for patch in cls.patchset: + if patch.path.endswith('.py'): + if not patch.is_removed_file: + cls.pythonpatches.append(patch) + + def setUp(self): + if self.unidiff_parse_error: + self.skip('Python-unidiff parse error') + if not PatchTestInput.repo.canbemerged: + self.skip('Patch cannot be merged, no reason to execute the test method') + if not PyLint.pythonpatches: + self.skip('No python related patches, skipping test') + + def pretest_pylint(self): + for pythonpatch in self.pythonpatches: + if pythonpatch.is_modified_file: + (pylint_stdout, pylint_stderr) = lint.py_run(command_options = pythonpatch.path + self.pylint_options, return_std=True) + for line in pylint_stdout.readlines(): + if not '*' in line: + if line.strip(): + self.pylint_pretest[line.strip().split(' ',1)[0]] = line.strip().split(' ',1)[1] + + def test_pylint(self): + for pythonpatch in self.pythonpatches: + # a condition checking whether a file is renamed or not + # unidiff doesn't support this yet + if pythonpatch.target_file is not pythonpatch.path: + path = pythonpatch.target_file[2:] + else: + path = pythonpatch.path + (pylint_stdout, pylint_stderr) = lint.py_run(command_options = path + self.pylint_options, return_std=True) + for line in pylint_stdout.readlines(): + if not '*' in line: + if line.strip(): + self.pylint_test[line.strip().split(' ',1)[0]] = line.strip().split(' ',1)[1] + + for issue in self.pylint_test: + if self.pylint_test[issue] not in self.pylint_pretest.values(): + self.fail('Errors in your Python code were encountered', + 'Correct the lines introduced by your patch', + data=[('Output', 'Please, fix the listed issues:'), ('', issue + ' ' + self.pylint_test[issue])]) |