Replay: add check_replay_branch.py to check for EKF output changes

Create a replay log using master branch.
Check out a specified branch, compile and run Replay against replay log
Run check_replay.py over the produced log
This commit is contained in:
Peter Barker 2020-11-30 10:28:45 +11:00 committed by Peter Barker
parent 8d756d8758
commit ba0367fa9f
1 changed files with 80 additions and 0 deletions

View File

@ -0,0 +1,80 @@
#!/usr/bin/env python
'''
Create a replay log using master branch.
Check out a specified branch, compile and run Replay against replay log
Run check_replay.py over the produced log
'''
import git
import os
import subprocess
import sys
import check_replay
class CheckReplayBranch(object):
def __init__(self, master='remotes/origin/master'):
self.master = master
def find_topdir(self):
here = os.getcwd()
bits = here.split(os.path.sep)
while len(bits):
# print("bits: %s" % str(bits))
tmp = bits[:]
tmp.extend([".git"]) # can we look for something more specific?
flagfile = os.path.sep.join(tmp)
if os.path.exists(flagfile):
# print("Found in (%s)" % str(flagfile))
return os.path.sep.join(bits)
bits = bits[:-2]
raise FileNotFoundError()
def find_repo(self):
return git.Repo(self.topdir)
def assert_tree_clean(self):
if self.repo.is_dirty():
raise ValueError("Tree is dirty")
def run(self):
self.topdir = self.find_topdir()
self.repo = self.find_repo()
self.assert_tree_clean()
# remember where we were:
old_branch = self.repo.active_branch
# check out the master branch:
self.repo.head.reference = self.master
self.repo.head.reset(index=True, working_tree=True)
# generate a log:
os.chdir(self.topdir)
print("chdir (%s)" % str(self.topdir))
subprocess.check_call(["Tools/autotest/autotest.py", "--debug", "build.Copter", "test.Copter.Replay"])
logfile_name = "00000004.BIN" # FIXME; parse output of subprocess?
logfile_path = os.path.join("logs", logfile_name)
# check out the original branch:
self.repo.head.reference = old_branch
self.repo.head.reset(index=True, working_tree=True)
# run check_replay across Replay log
return check_replay.check_log(logfile_path)
if __name__ == '__main__':
import sys
from argparse import ArgumentParser
parser = ArgumentParser(description=__doc__)
parser.add_argument("--master", default='remotes/origin/master', help="branch to consider master branch")
args = parser.parse_args()
s = CheckReplayBranch(master=args.master)
if not s.run():
sys.exit(1)
sys.exit(0)