summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2019-02-27 11:59:54 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2019-03-24 16:53:11 +0000
commit63d2c53c01d2aec90b3f0ab298a61a551b23d8fc (patch)
treeabb7ac6af53a8fe1e44cf924b900d219523701ce
parentfaacf35d748067fd17d169c09bc2759606e6e819 (diff)
downloadopenembedded-core-63d2c53c01d2aec90b3f0ab298a61a551b23d8fc.tar.gz
openembedded-core-63d2c53c01d2aec90b3f0ab298a61a551b23d8fc.tar.bz2
openembedded-core-63d2c53c01d2aec90b3f0ab298a61a551b23d8fc.zip
resulttool/store: Handle results files for multiple revisions
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@linuxfoundation.org>
-rw-r--r--scripts/lib/resulttool/store.py39
1 files changed, 23 insertions, 16 deletions
diff --git a/scripts/lib/resulttool/store.py b/scripts/lib/resulttool/store.py
index 6744fb3c05..43e57b913c 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])