[OE-core] [PATCH 2/5] resulttool/store: Handle results files for multiple revisions

Richard Purdie richard.purdie at linuxfoundation.org
Wed Feb 27 17:47:43 UTC 2019


Currently we cant store results if the results files span multiple
different build revisons. Remove this limitation by iterating.

Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 scripts/lib/resulttool/store.py | 39 +++++++++++++++++++--------------
 1 file changed, 23 insertions(+), 16 deletions(-)

diff --git a/scripts/lib/resulttool/store.py b/scripts/lib/resulttool/store.py
index 6744fb3c05d..43e57b913c6 100644
--- a/scripts/lib/resulttool/store.py
+++ b/scripts/lib/resulttool/store.py
@@ -29,7 +29,7 @@ def store(args, logger):
     try:
         results = {}
         logger.info('Reading files from %s' % args.source)
-        for root, dirs, files in os.walk(args.source):
+        for root, dirs,  files in os.walk(args.source):
             for name in files:
                 f = os.path.join(root, name)
                 if name == "testresults.json":
@@ -38,7 +38,8 @@ def store(args, logger):
                     dst = f.replace(args.source, tempdir + "/")
                     os.makedirs(os.path.dirname(dst), exist_ok=True)
                     shutil.copyfile(f, dst)
-        resultutils.save_resultsdata(results, tempdir)
+
+        revisions = {}
 
         if not results and not args.all:
             if args.allow_empty:
@@ -47,26 +48,32 @@ def store(args, logger):
             logger.error("No results found to store")
             return 1
 
-        keywords = {'branch': None, 'commit': None, 'commit_count': None}
-
         # Find the branch/commit/commit_count and ensure they all match
         for suite in results:
             for result in results[suite]:
                 config = results[suite][result]['configuration']['LAYERS']['meta']
-                for k in keywords:
-                    if keywords[k] is None:
-                        keywords[k] = config.get(k)
-                    if config.get(k) != keywords[k]:
-                        logger.error("Mismatched source commit/branch/count: %s vs %s" % (config.get(k), keywords[k]))
-                        return 1
+                revision = (config['commit'], config['branch'], str(config['commit_count']))
+                if revision not in revisions:
+                    revisions[revision] = {}
+                if suite not in revisions[revision]:
+                    revisions[revision][suite] = {}
+                revisions[revision][suite] = results[suite][result]
+
+        logger.info("Found %d revisions to store" % len(revisions))
+
+        for r in revisions:
+            results = revisions[r]
+            keywords = {'commit': r[0], 'branch': r[1], "commit_count": r[2]}
+            subprocess.check_call(["find", tempdir, "!", "-path", "./.git/*", "-delete"])
+            resultutils.save_resultsdata(results, tempdir)
 
-        logger.info('Storing test result into git repository %s' % args.git_dir)
+            logger.info('Storing test result into git repository %s' % args.git_dir)
 
-        gitarchive.gitarchive(tempdir, args.git_dir, False, False,
-                              "Results of {branch}:{commit}", "branch: {branch}\ncommit: {commit}", "{branch}",
-                              False, "{branch}/{commit_count}-g{commit}/{tag_number}",
-                              'Test run #{tag_number} of {branch}:{commit}', '',
-                              [], [], False, keywords, logger)
+            gitarchive.gitarchive(tempdir, args.git_dir, False, False,
+                                  "Results of {branch}:{commit}", "branch: {branch}\ncommit: {commit}", "{branch}",
+                                  False, "{branch}/{commit_count}-g{commit}/{tag_number}",
+                                  'Test run #{tag_number} of {branch}:{commit}', '',
+                                  [], [], False, keywords, logger)
 
     finally:
         subprocess.check_call(["rm", "-rf",  tempdir])
-- 
2.20.1



More information about the Openembedded-core mailing list