public inbox for isar-users@googlegroups.com
 help / color / mirror / Atom feed
From: kergoth@gmail.com
To: isar-users@googlegroups.com
Cc: Christopher Larson <chris.larson@seimens.com>,
	Christopher Larson <chris.larson@siemens.com>
Subject: [PATCH 4/9] isar-sstate: lint: add support for checking stamps
Date: Tue,  2 Apr 2024 17:28:08 +0000	[thread overview]
Message-ID: <20240402172813.418770-5-chris.larson@siemens.com> (raw)
In-Reply-To: <20240402172813.418770-1-chris.larson@siemens.com>

From: Christopher Larson <chris.larson@seimens.com>

Bitbake supports writing signature data directly to the stamps directory
without having to build, so we should add the ability to lint this
signature data as well. This is useful for checking for cachability
issues without having to complete a build.

Signed-off-by: Christopher Larson <chris.larson@siemens.com>
---
 scripts/isar-sstate | 34 +++++++++++++++++++++++-----------
 1 file changed, 23 insertions(+), 11 deletions(-)

diff --git a/scripts/isar-sstate b/scripts/isar-sstate
index 9b20cb8e..b77f73eb 100755
--- a/scripts/isar-sstate
+++ b/scripts/isar-sstate
@@ -154,10 +154,12 @@ SstateCacheEntry = namedtuple(
 #                    "${PV}:${PR}:${SSTATE_PKGARCH}:${SSTATE_VERSION}:"
 
 # This regex extracts relevant fields:
-SstateRegex = re.compile(r'sstate:(?P<pn>[^:]*):[^:]*:[^:]*:[^:]*:'
+SstateRegex = re.compile(r'(.*/)?sstate:(?P<pn>[^:]*):[^:]*:[^:]*:[^:]*:'
                          r'(?P<arch>[^:]*):[^:]*:(?P<hash>[0-9a-f]*)_'
                          r'(?P<task>[^\.]*)\.(?P<suffix>.*)')
-
+StampsRegex = re.compile(
+    r"(.*/)?(?P<arch>[^/]+)/(?P<pn>[^/]+)/([^/]+)\.do_(?P<task>[^/]+)\.(?P<suffix>sigdata)\.(?P<hash>[0-9a-f]{64})"
+)
 
 class SstateTargetBase(object):
     def __init__(self, path, cached=False):
@@ -288,12 +290,13 @@ class SstateTargetBase(object):
 
 
 class SstateFileTarget(SstateTargetBase):
-    def __init__(self, path, **kwargs):
+    def __init__(self, path, regex=SstateRegex, **kwargs):
         super().__init__(path, **kwargs)
         if path.startswith('file://'):
             path = path[len('file://'):]
         self.path = path
         self.basepath = os.path.abspath(path)
+        self.regex = regex
 
     def __repr__(self):
         return f"file://{self.path}"
@@ -334,12 +337,13 @@ class SstateFileTarget(SstateTargetBase):
         for subdir, dirs, files in os.walk(self.basepath):
             reldir = subdir[(len(self.basepath)+1):]
             for f in files:
-                m = SstateRegex.match(f)
+                relative = os.path.join(reldir, f)
+                m = self.regex.match(relative)
                 if m is not None:
                     islink = os.path.islink(os.path.join(subdir, f))
                     age = int(now - os.path.getmtime(os.path.join(subdir, f)))
                     all_files.append(SstateCacheEntry(
-                        path=os.path.join(reldir, f),
+                        path=relative,
                         size=os.path.getsize(os.path.join(subdir, f)),
                         islink=islink,
                         age=age,
@@ -592,6 +596,9 @@ def arguments():
     parser.add_argument(
         '--exit-code', type=int, default=None,
         help="lint: return this instead of number of found issues")
+    parser.add_argument(
+        '--lint-stamps', default=False, action='store_true',
+        help="lint: assume target is a stamps directory (target must be a local path)")
 
     args = parser.parse_args()
     if args.command in 'upload analyze'.split() and args.source is None:
@@ -798,7 +805,7 @@ def sstate_analyze(source, target, **kwargs):
             print('\n'.join(out))
 
 
-def sstate_lint(target, verbose, sources_dir, build_dir, exit_code, pedantic, **kwargs):
+def sstate_lint(target, verbose, sources_dir, build_dir, exit_code, pedantic, lint_stamps, **kwargs):
     ADDITIONAL_IGNORED_VARNAMES = 'PP'.split()
     # only list non-cacheable tasks here
     # note that these still can break caching of other tasks that depend on these.
@@ -809,7 +816,10 @@ def sstate_lint(target, verbose, sources_dir, build_dir, exit_code, pedantic, **
         print(f"WARNING: target {target} does not exist. Nothing to analyze.")
         return 0
 
-    cache_sigs = {s.hash: s for s in target.list_all() if s.suffix.endswith('.siginfo')}
+    if lint_stamps:
+        cache_sigs = {s.hash: s for s in target.list_all()}
+    else:
+        cache_sigs = {s.hash: s for s in target.list_all() if s.suffix.endswith('.siginfo')}
 
     hits_srcdir = 0
     hits_builddir = 0
@@ -891,10 +901,12 @@ def main():
         target = SstateDavTarget(args.target)
     elif args.target.startswith('s3://'):
         target = SstateS3Target(args.target)
-    elif args.target.startswith('file://'):
-        target = SstateFileTarget(args.target)
-    else:  # no protocol given, assume file://
-        target = SstateFileTarget(args.target)
+    else:  # Either file://, or no protocol given, assume file://
+        target = SstateFileTarget(args.target, StampsRegex if args.lint_stamps else SstateRegex)
+
+    if args.lint_stamps and not isinstance(target, SstateFileTarget):
+        print("ERROR: --lint-stamps only works with local file targets")
+        return 1
 
     args.target = target
     return globals()[f'sstate_{args.command}'](**vars(args))
-- 
2.39.2


  parent reply	other threads:[~2024-04-02 17:29 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-02 17:28 [PATCH 0/9] Add more signature cachability tests to the testsuite kergoth
2024-04-02 17:28 ` [PATCH 1/9] isar-bootstrap: avoid forced early expansion of key vars kergoth
2024-04-03  6:54   ` MOESSBAUER, Felix
2024-04-03 21:42     ` Larson, Chris
2024-04-04  6:26       ` MOESSBAUER, Felix
2024-04-02 17:28 ` [PATCH 2/9] isar-ci-ssh-setup: avoid abs path in signatures kergoth
2024-04-02 17:28 ` [PATCH 3/9] isar-sstate: lint: check for absolute paths in SRC_URI kergoth
2024-04-03  6:56   ` MOESSBAUER, Felix
2024-04-02 17:28 ` kergoth [this message]
2024-04-03  7:02   ` [PATCH 4/9] isar-sstate: lint: add support for checking stamps MOESSBAUER, Felix
2024-04-03 21:42     ` Larson, Chris
2024-04-02 17:28 ` [PATCH 5/9] isar-sstate: lint: ignore more image tasks kergoth
2024-04-03  7:08   ` MOESSBAUER, Felix
2024-04-02 17:28 ` [PATCH 6/9] isar-sstate: add --excluded-tasks argument kergoth
2024-04-03  7:10   ` MOESSBAUER, Felix
2024-04-03 21:41     ` Larson, Chris
2024-04-03 21:44     ` Larson, Chris
2024-04-04  6:28       ` MOESSBAUER, Felix
2024-04-02 17:28 ` [PATCH 7/9] cibuilder.py: add -S support to the bitbake method kergoth
2024-04-03  7:12   ` MOESSBAUER, Felix
2024-04-03 21:41     ` Larson, Chris
2024-04-02 17:28 ` [PATCH 8/9] testsuite: add perform_signature_lint method kergoth
2024-04-02 17:28 ` [PATCH 9/9] testsuite: add signature cachability checks kergoth
2024-04-05 16:31 [PATCHv2 0/9] Add more signature cachability tests to the testsuite chris.larson
2024-04-05 16:31 ` [PATCH 4/9] isar-sstate: lint: add support for checking stamps chris.larson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240402172813.418770-5-chris.larson@siemens.com \
    --to=kergoth@gmail.com \
    --cc=chris.larson@seimens.com \
    --cc=chris.larson@siemens.com \
    --cc=isar-users@googlegroups.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox