[OE-core] [PATCH 09/10] buildhistory.bbclass: add ptest_log

Robert Yang liezhi.yang at windriver.com
Tue Aug 1 01:50:39 UTC 2017



On 07/31/2017 09:30 PM, Paul Eggleton wrote:
> Hi Robert,
>
> A few minor comments below.
>
> On Monday, 31 July 2017 11:50:09 AM CEST Robert Yang wrote:
>> The ptest log will be saved to buildhistory/ptest_log, we can easily get
>> the regression result between builds by:
>> $ git show HEAD ptest_log/pass.fail.skip.*
>>
>> [YOCTO #11547]
>>
>> Signed-off-by: Robert Yang <liezhi.yang at windriver.com>
>> ---
>>  meta/classes/buildhistory.bbclass | 28 ++++++++++++++++++++++++++++
>>  1 file changed, 28 insertions(+)
>>
>> diff --git a/meta/classes/buildhistory.bbclass b/meta/classes/
> buildhistory.bbclass
>> index a3e4c7a734a..26430a63d31 100644
>> --- a/meta/classes/buildhistory.bbclass
>> +++ b/meta/classes/buildhistory.bbclass
>> @@ -912,3 +912,31 @@ def write_latest_srcrev(d, pkghistdir):
>>      else:
>>          if os.path.exists(srcrevfile):
>>              os.remove(srcrevfile)
>> +
>> +do_testimage[postfuncs] += "write_ptest_result"
>> +do_testimage[vardepsexclude] += "write_ptest_result"
>> +
>> +python write_ptest_result() {
>> +    write_latest_ptest_result(d, d.getVar('BUILDHISTORY_DIR'))
>> +}
>> +
>> +def write_latest_ptest_result(d, histdir):
>> +    import glob
>> +    import subprocess
>> +    test_log_dir = d.getVar('TEST_LOG_DIR')
>> +    input_ptest_log = os.path.join(test_log_dir, 'ptest_log')
>> +    output_ptest_log = os.path.join(histdir, 'ptest_log')
>
> Would it be reasonable for this to just be "ptest"? To ask the question a
> different way, would you expect to save other types of ptest information into
> buildhistory, or is this likely to be it?

I'm not sure atm, so use "ptest" sounds reasonable. I will update it.

>
>> +    if os.path.exists(input_ptest_log):
>> +        # Lock it avoid race issue
>> +        lock = bb.utils.lockfile(output_ptest_log + "/ptest_log.lock")
>> +        bb.utils.mkdirhier(output_ptest_log)
>> +        oe.path.copytree(input_ptest_log, output_ptest_log)
>> +        # Sort test result
>> +        for result in glob.glob('%s/pass.fail.*' % output_ptest_log):
>> +            bb.debug(1, 'Processing %s' % result)
>> +            cmd = "sort %s -o %s" % (result, result)
>> +            bb.debug(1, 'Running %s' % cmd)
>> +            ret = subprocess.call(cmd, shell=True)
>
> As a matter of good practice and since it's easy to do here I'd suggest not
> using shell=True and passing the command as a list instead, that way there
> can't be any issues with spaces or other shell interpretations.

Thanks, I will update it.

>
>> +            if ret != 0:
>> +                bb.error('Failed to run %s!' % cmd)
>> +        bb.utils.unlockfile(lock)
>
> Shouldn't you be using try...finally here to ensure the lockfile gets unlocked
> in the case of exceptions?

Yes, good idea.

// Robert

>
> Cheers,
> Paul
>
>



More information about the Openembedded-core mailing list