lib/oe/patch: Make extractPatches() not extract ignored commits

If a commit is marked with "%% ignore" it means it is used by devtool to
keep track of changes to the source code that are not the result of
running do_patch(). These changes need to actually be ignored when
extracting the patches as they typically make no sense as actual patches
in a recipe.

This also adds a new test for oe-selftest that verifies that there are
no patches generated from ignored commits.

(From OE-Core rev: c3d43de7e54189bf09fbe8e87ddb976e42ebf531)

Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Peter Kjellerstedt
2024-02-19 02:28:28 +01:00
committed by Richard Purdie
parent 1e6565402f
commit 24433ce8f9
5 changed files with 187 additions and 8 deletions

View File

@@ -0,0 +1,38 @@
From 3d076ea588eb3c7f334133b4c31172a14beadf5b Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Thu, 2 Feb 2023 20:18:27 -0800
Subject: [PATCH] Add <cstdint> for uintXX_t types
gcc 13 moved some includes around and as a result <cstdint> is no
longer transitively included [1]. Explicitly include it
for uintXX_t.
[1] https://gcc.gnu.org/gcc-13/porting_to.html#header-dep-changes
Upstream-Status: Submitted [https://github.com/falcosecurity/libs/pull/862]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
userspace/libsinsp/filter/parser.h | 1 +
userspace/libsinsp/filter_value.h | 1 +
2 files changed, 2 insertions(+)
--- a/userspace/libsinsp/filter/parser.h
+++ b/userspace/libsinsp/filter/parser.h
@@ -18,6 +18,7 @@ limitations under the License.
#pragma once
#include "ast.h"
+#include <cstdint>
//
// Context-free Grammar for Sinsp Filters
--- a/userspace/libsinsp/filter_value.h
+++ b/userspace/libsinsp/filter_value.h
@@ -18,6 +18,7 @@ limitations under the License.
#pragma once
#include <string.h>
+#include <cstdint>
#include <utility>
// Used for CO_IN/CO_PMATCH filterchecks using PT_CHARBUFs to allow

View File

@@ -0,0 +1,29 @@
From ed8969a233adb6bf701de96d0fd0570e5ddcc787 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Mon, 21 Mar 2022 19:35:48 -0700
Subject: [PATCH] cmake: Pass PROBE_NAME via CFLAGS
This helps compliation of driver code where its calling modprobe on the
given kernel module via system() API
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
CMakeLists.txt | 1 +
1 file changed, 1 insertion(+)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7dceb7ae..e156c36f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -149,6 +149,7 @@ if(CMAKE_SYSTEM_NAME MATCHES "Linux")
if(NOT DEFINED PROBE_NAME)
set(PROBE_NAME "scap")
endif()
+ add_definitions(-DPROBE_NAME="${PROBE_NAME}")
set(DRIVERS_REPO "https://download.sysdig.com/scap-drivers")
--
2.35.1

View File

@@ -0,0 +1,66 @@
SUMMARY = "A New System Troubleshooting Tool Built for the Way You Work"
DESCRIPTION = "Sysdig is open source, system-level exploration: capture \
system state and activity from a running Linux instance, then save, \
filter and analyze."
HOMEPAGE = "http://www.sysdig.org/"
LICENSE = "Apache-2.0 & (MIT | GPL-2.0-only)"
LIC_FILES_CHKSUM = "file://COPYING;md5=f8fee3d59797546cffab04f3b88b2d44"
inherit cmake pkgconfig
#OECMAKE_GENERATOR = "Unix Makefiles"
JIT ?= "jit"
JIT:mipsarchn32 = ""
JIT:mipsarchn64 = ""
JIT:riscv64 = ""
JIT:riscv32 = ""
JIT:powerpc = ""
JIT:powerpc64le = ""
JIT:powerpc64 = ""
#DEPENDS += "libb64 lua${JIT} zlib c-ares grpc-native grpc curl ncurses jsoncpp \
# tbb jq openssl elfutils protobuf protobuf-native jq-native valijson"
RDEPENDS:${PN} = "bash"
SRC_URI = "git://github.com/draios/sysdig.git;branch=dev;protocol=https;name=sysdig \
git://github.com/falcosecurity/libs;protocol=https;branch=master;name=falco;subdir=git/falcosecurity-libs \
file://0055-Add-cstdint-for-uintXX_t-types.patch;patchdir=./falcosecurity-libs \
file://0099-cmake-Pass-PROBE_NAME-via-CFLAGS.patch \
"
SRCREV_sysdig = "4fb6288275f567f63515df0ff0a6518043ecfa9b"
SRCREV_falco= "caa0e4d0044fdaaebab086592a97f0c7f32aeaa9"
SRCREV_FORMAT = "sysdig_falco"
S = "${WORKDIR}/git"
EXTRA_OECMAKE = "\
-DBUILD_DRIVER=OFF \
-DMINIMAL_BUILD=ON \
-DUSE_BUNDLED_DEPS=OFF \
-DCREATE_TEST_TARGETS=OFF \
-DDIR_ETC=${sysconfdir} \
-DLUA_INCLUDE_DIR=${STAGING_INCDIR}/luajit-2.1 \
-DFALCOSECURITY_LIBS_SOURCE_DIR=${S}/falcosecurity-libs \
-DVALIJSON_INCLUDE=${STAGING_INCDIR}/valijson \
"
#CMAKE_VERBOSE = "VERBOSE=1"
FILES:${PN} += " \
${DIR_ETC}/* \
${datadir}/zsh/* \
${prefix}/src/* \
"
# Use getaddrinfo_a is a GNU extension in libsinsp
# It should be fixed in sysdig, until then disable
# on musl
# Something like this https://code.videolan.org/ePirat/vlc/-/commit/01fd9fe4c7f6c5558f7345f38abf0152e17853ab is needed to fix it
COMPATIBLE_HOST:libc-musl = "null"
COMPATIBLE_HOST:mips = "null"
COMPATIBLE_HOST:riscv64 = "null"
COMPATIBLE_HOST:riscv32 = "null"
COMPATIBLE_HOST:powerpc = "null"
COMPATIBLE_HOST:powerpc64le = "null"
EXCLUDE_FROM_WORLD = "1"

View File

@@ -474,9 +474,9 @@ class GitApplyTree(PatchTree):
out = runcmd(["sh", "-c", " ".join(shellcmd)], os.path.join(tree, name))
if out:
for srcfile in out.split():
outfile = os.path.basename(srcfile)
for encoding in ['utf-8', 'latin-1']:
patchlines = []
outfile = None
try:
with open(srcfile, 'r', encoding=encoding, newline='') as f:
for line in f:
@@ -484,7 +484,8 @@ class GitApplyTree(PatchTree):
outfile = line.split()[-1].strip()
continue
if line.startswith(GitApplyTree.ignore_commit_prefix):
continue
outfile = None
break
patchlines.append(line)
except UnicodeDecodeError:
continue
@@ -492,12 +493,11 @@ class GitApplyTree(PatchTree):
else:
raise PatchError('Unable to find a character encoding to decode %s' % srcfile)
if not outfile:
outfile = os.path.basename(srcfile)
bb.utils.mkdirhier(os.path.join(outdir, name))
with open(os.path.join(outdir, name, outfile), 'w') as of:
for line in patchlines:
of.write(line)
if outfile:
bb.utils.mkdirhier(os.path.join(outdir, name))
with open(os.path.join(outdir, name, outfile), 'w') as of:
for line in patchlines:
of.write(line)
finally:
shutil.rmtree(tempdir)

View File

@@ -2228,6 +2228,52 @@ class DevtoolUpgradeTests(DevtoolBase):
if files:
self.fail('Unexpected file(s) copied next to bbappend: %s' % ', '.join(files))
def test_devtool_finish_update_patch(self):
# This test uses a modified version of the sysdig recipe from meta-oe.
# - The patches have been renamed.
# - The dependencies are commented out since the recipe is not being
# built.
#
# The sysdig recipe is interesting in that it fetches two different Git
# repositories, and there are patches for both. This leads to that
# devtool will create ignore commits as it uses Git submodules to keep
# track of the second repository.
#
# This test will verify that the ignored commits actually are ignored
# when a commit in between is modified. It will also verify that the
# updated patch keeps its original name.
# Check preconditions
self.assertTrue(not os.path.exists(self.workspacedir), 'This test cannot be run with a workspace directory under the build directory')
# Try modifying a recipe
self.track_for_cleanup(self.workspacedir)
recipe = 'sysdig-selftest'
recipefile = get_bb_var('FILE', recipe)
recipedir = os.path.dirname(recipefile)
result = runCmd('git status --porcelain .', cwd=recipedir)
if result.output.strip():
self.fail('Recipe directory for %s contains uncommitted changes' % recipe)
tempdir = tempfile.mkdtemp(prefix='devtoolqa')
self.track_for_cleanup(tempdir)
self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
result = runCmd('devtool modify %s %s' % (recipe, tempdir))
self.add_command_to_tearDown('cd %s; rm %s/*; git checkout %s %s' % (recipedir, recipe, recipe, os.path.basename(recipefile)))
self.assertExists(os.path.join(tempdir, 'CMakeLists.txt'), 'Extracted source could not be found')
# Make a change to one of the existing commits
result = runCmd('echo "# A comment " >> CMakeLists.txt', cwd=tempdir)
result = runCmd('git status --porcelain', cwd=tempdir)
self.assertIn('M CMakeLists.txt', result.output)
result = runCmd('git commit --fixup HEAD^ CMakeLists.txt', cwd=tempdir)
result = runCmd('git show -s --format=%s', cwd=tempdir)
self.assertIn('fixup! cmake: Pass PROBE_NAME via CFLAGS', result.output)
result = runCmd('GIT_SEQUENCE_EDITOR=true git rebase -i --autosquash devtool-base', cwd=tempdir)
result = runCmd('devtool finish %s meta-selftest' % recipe)
result = runCmd('devtool status')
self.assertNotIn(recipe, result.output, 'Recipe should have been reset by finish but wasn\'t')
self.assertNotExists(os.path.join(self.workspacedir, 'recipes', recipe), 'Recipe directory should not exist after finish')
expected_status = [(' M', '.*/0099-cmake-Pass-PROBE_NAME-via-CFLAGS.patch$')]
self._check_repo_status(recipedir, expected_status)
def test_devtool_rename(self):
# Check preconditions
self.assertTrue(not os.path.exists(self.workspacedir), 'This test cannot be run with a workspace directory under the build directory')