コード例 #1
0
ファイル: sby.py プロジェクト: jhol/SymbiYosys
def run_job(taskname):
    my_workdir = workdir
    my_opt_tmpdir = opt_tmpdir

    if my_workdir is None and sbyfile is not None and not my_opt_tmpdir:
        my_workdir = sbyfile[:-4]
        if taskname is not None:
            my_workdir += "_" + taskname

    if my_workdir is not None:
        if opt_backup:
            backup_idx = 0
            while os.path.exists("%s.bak%03d" % (my_workdir, backup_idx)):
                backup_idx += 1
            early_log(my_workdir, "Moving direcory '%s' to '%s'." % (my_workdir, "%s.bak%03d" % (my_workdir, backup_idx)))
            shutil.move(my_workdir, "%s.bak%03d" % (my_workdir, backup_idx))

        if opt_force:
            early_log(my_workdir, "Removing direcory '%s'." % (my_workdir))
            if sbyfile:
                shutil.rmtree(my_workdir, ignore_errors=True)

        os.makedirs(my_workdir)

    else:
        my_opt_tmpdir = True
        my_workdir = tempfile.mkdtemp()

    sbyconfig, _ = read_sbyconfig(sbydata, taskname)
    job = SbyJob(sbyconfig, taskname, my_workdir, early_logmsgs)

    for k, v in exe_paths.items():
        job.exe_paths[k] = v

    job.run()

    if my_opt_tmpdir:
        job.log("Removing direcory '%s'." % (my_workdir))
        shutil.rmtree(my_workdir, ignore_errors=True)

    job.log("DONE (%s, rc=%d)" % (job.status, job.retcode))
    return job.retcode
コード例 #2
0
ファイル: sby.py プロジェクト: jakemcdermott/SymbiYosys
def run_job(taskname):
    my_workdir = workdir
    my_opt_tmpdir = opt_tmpdir

    if my_workdir is None and sbyfile is not None and not my_opt_tmpdir:
        my_workdir = sbyfile[:-4]
        if taskname is not None:
            my_workdir += "_" + taskname

    if my_workdir is not None:
        if opt_backup:
            backup_idx = 0
            while os.path.exists("%s.bak%03d" % (my_workdir, backup_idx)):
                backup_idx += 1
            early_log(my_workdir, "Moving direcory '%s' to '%s'." % (my_workdir, "%s.bak%03d" % (my_workdir, backup_idx)))
            shutil.move(my_workdir, "%s.bak%03d" % (my_workdir, backup_idx))

        if opt_force:
            early_log(my_workdir, "Removing direcory '%s'." % (my_workdir))
            if sbyfile:
                shutil.rmtree(my_workdir, ignore_errors=True)

        os.makedirs(my_workdir)

    else:
        my_opt_tmpdir = True
        my_workdir = tempfile.mkdtemp()

    junit_ts_name = os.path.basename(sbyfile[:-4]) if sbyfile is not None else workdir if workdir is not None else "stdin"
    junit_tc_name = taskname if taskname is not None else "default"

    if sbyfile is not None:
        junit_filename = os.path.basename(sbyfile[:-4])
        if taskname is not None:
            junit_filename += "_" + taskname
    elif taskname is not None:
        junit_filename = taskname
    else:
        junit_filename = "junit"

    sbyconfig, _ = read_sbyconfig(sbydata, taskname)
    job = SbyJob(sbyconfig, my_workdir, early_logmsgs)

    for k, v in exe_paths.items():
        job.exe_paths[k] = v

    if throw_err:
        job.run()
    else:
        try:
            job.run()
        except SbyAbort:
            pass

    if my_opt_tmpdir:
        job.log("Removing direcory '%s'." % (my_workdir))
        shutil.rmtree(my_workdir, ignore_errors=True)

    job.log("DONE (%s, rc=%d)" % (job.status, job.retcode))
    job.logfile.close()

    if not my_opt_tmpdir:
        with open("%s/%s.xml" % (job.workdir, junit_filename), "w") as f:
            junit_errors = 1 if job.retcode == 16 else 0
            junit_failures = 1 if job.retcode != 0 and junit_errors == 0 else 0
            print('<?xml version="1.0" encoding="UTF-8"?>', file=f)
            print('<testsuites disabled="0" errors="%d" failures="%d" tests="1" time="%d">' % (junit_errors, junit_failures, job.total_time), file=f)
            print('<testsuite disabled="0" errors="%d" failures="%d" name="%s" skipped="0" tests="1" time="%d">' % (junit_errors, junit_failures, junit_ts_name, job.total_time), file=f)
            print('<testcase classname="%s" name="%s" status="%s" time="%d">' % (junit_ts_name, junit_tc_name, job.status, job.total_time), file=f)
            if junit_errors:
                print('<error message="%s" type="%s"/>' % (job.status, job.status), file=f)
            if junit_failures:
                print('<failure message="%s" type="%s"/>' % (job.status, job.status), file=f)
            print('<system-out>', end="", file=f)
            with open("%s/logfile.txt" % (job.workdir), "r") as logf:
                for line in logf:
                    print(line.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;").replace("\"", "&quot;"), end="", file=f)
            print('</system-out></testcase></testsuite></testsuites>', file=f)
        with open("%s/.stamp" % (job.workdir), "w") as f:
            print("%s %d %d" % (job.status, job.retcode, job.total_time), file=f)

    return job.retcode
コード例 #3
0
def run_job(taskname):
    my_workdir = workdir
    my_opt_tmpdir = opt_tmpdir

    if my_workdir is None and sbyfile is not None and not my_opt_tmpdir:
        my_workdir = sbyfile[:-4]
        if taskname is not None:
            my_workdir += "_" + taskname

    if my_workdir is not None:
        if opt_backup:
            backup_idx = 0
            while os.path.exists("{}.bak{:03d}".format(my_workdir,
                                                       backup_idx)):
                backup_idx += 1
            early_log(
                my_workdir, "Moving directory '{}' to '{}'.".format(
                    my_workdir, "{}.bak{:03d}".format(my_workdir, backup_idx)))
            shutil.move(my_workdir,
                        "{}.bak{:03d}".format(my_workdir, backup_idx))

        if opt_force and not reusedir:
            early_log(my_workdir,
                      "Removing directory '{}'.".format(my_workdir))
            if sbyfile:
                shutil.rmtree(my_workdir, ignore_errors=True)

        if reusedir:
            pass
        elif os.path.isdir(my_workdir):
            print("ERROR: Directory '{}' already exists.".format(my_workdir))
            sys.exit(1)
        else:
            os.makedirs(my_workdir)

    else:
        my_opt_tmpdir = True
        my_workdir = tempfile.mkdtemp()

    junit_ts_name = os.path.basename(
        sbyfile[:-4]
    ) if sbyfile is not None else workdir if workdir is not None else "stdin"
    junit_tc_name = taskname if taskname is not None else "default"

    if reusedir:
        junit_filename = os.path.basename(my_workdir)
    elif sbyfile is not None:
        junit_filename = os.path.basename(sbyfile[:-4])
        if taskname is not None:
            junit_filename += "_" + taskname
    elif taskname is not None:
        junit_filename = taskname
    else:
        junit_filename = "junit"

    sbyconfig, _ = read_sbyconfig(sbydata, taskname)
    job = SbyJob(sbyconfig, my_workdir, early_logmsgs, reusedir)

    for k, v in exe_paths.items():
        job.exe_paths[k] = v

    if throw_err:
        job.run(setupmode)
    else:
        try:
            job.run(setupmode)
        except SbyAbort:
            pass

    if my_opt_tmpdir:
        job.log("Removing directory '{}'.".format(my_workdir))
        shutil.rmtree(my_workdir, ignore_errors=True)

    if setupmode:
        job.log("SETUP COMPLETE (rc={})".format(job.retcode))
    else:
        job.log("DONE ({}, rc={})".format(job.status, job.retcode))
    job.logfile.close()

    if not my_opt_tmpdir and not setupmode:
        with open("{}/{}.xml".format(job.workdir, junit_filename), "w") as f:
            junit_errors = 1 if job.retcode == 16 else 0
            junit_failures = 1 if job.retcode != 0 and junit_errors == 0 else 0
            print('<?xml version="1.0" encoding="UTF-8"?>', file=f)
            print(
                '<testsuites disabled="0" errors="{}" failures="{}" tests="1" time="{}">'
                .format(junit_errors, junit_failures, job.total_time),
                file=f)
            print(
                '<testsuite disabled="0" errors="{}" failures="{}" name="{}" skipped="0" tests="1" time="{}">'
                .format(junit_errors, junit_failures, junit_ts_name,
                        job.total_time),
                file=f)
            print('<properties>', file=f)
            print('<property name="os" value="{}"/>'.format(os.name), file=f)
            print('</properties>', file=f)
            print('<testcase classname="{}" name="{}" status="{}" time="{}">'.
                  format(junit_ts_name, junit_tc_name, job.status,
                         job.total_time),
                  file=f)
            if junit_errors:
                print('<error message="{}" type="{}"/>'.format(
                    job.status, job.status),
                      file=f)
            if junit_failures:
                print('<failure message="{}" type="{}"/>'.format(
                    job.status, job.status),
                      file=f)
            print('<system-out>', end="", file=f)
            with open("{}/logfile.txt".format(job.workdir), "r") as logf:
                for line in logf:
                    print(line.replace("&",
                                       "&amp;").replace("<", "&lt;").replace(
                                           ">",
                                           "&gt;").replace("\"", "&quot;"),
                          end="",
                          file=f)
            print('</system-out></testcase></testsuite></testsuites>', file=f)
        with open("{}/status".format(job.workdir), "w") as f:
            print("{} {} {}".format(job.status, job.retcode, job.total_time),
                  file=f)

    return job.retcode
コード例 #4
0
        while os.path.exists("%s.bak%03d" % (workdir, backup_idx)):
            backup_idx += 1
        early_log("Moving direcory '%s' to '%s'." % (workdir, "%s.bak%03d" %
                                                     (workdir, backup_idx)))
        shutil.move(workdir, "%s.bak%03d" % (workdir, backup_idx))

    if opt_force:
        early_log("Removing direcory '%s'." % (workdir))
        if sbyfile:
            shutil.rmtree(workdir, ignore_errors=True)

    os.makedirs(workdir)

else:
    opt_tmpdir = True
    workdir = tempfile.mkdtemp()

job = SbyJob(sbyfile, workdir, early_logmsgs)

for k, v in exe_paths.items():
    job.exe_paths[k] = v

job.run()

if opt_tmpdir:
    job.log("Removing direcory '%s'." % (workdir))
    shutil.rmtree(workdir, ignore_errors=True)

job.log("DONE (%s, rc=%d)" % (job.status, job.retcode))
sys.exit(job.retcode)