X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Ftools%2Fintegrated%2Fcheck_crc.py;h=1d98a467e23deb824f21b4acce3be2eee337fba0;hp=157bd9e86d4494503c584f0beb76a81a3b382fbc;hb=a678231f39f4d4ea079018e7d11be36d0cc454d2;hpb=d68951ac245150eeefa6e0f4156e4c1b5c9e9325 diff --git a/resources/tools/integrated/check_crc.py b/resources/tools/integrated/check_crc.py index 157bd9e86d..1d98a467e2 100644 --- a/resources/tools/integrated/check_crc.py +++ b/resources/tools/integrated/check_crc.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Cisco and/or its affiliates. +# Copyright (c) 2020 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -24,44 +24,66 @@ import sys from resources.libraries.python.VppApiCrc import VppApiCrcChecker -# TODO: Read FDIO_VPP_DIR environment variable, or some other input, -# instead of using hardcoded relative path? -API_DIR = op.normpath( - op.join( +def main(): + """Execute the logic, return the return code. + + From current location, construct path to .api file subtree, + initialize and run the CRC checker, print result consequences + to stderr, return the return code to return from the script. + + :returns: Return code to return. 0 if OK, 1 if CRC mismatch. + :rtype: int + """ + + # TODO: Read FDIO_VPP_DIR environment variable, or some other input, + # instead of using hardcoded relative path? + + api_dir = op.normpath(op.join( op.dirname(op.abspath(__file__)), u"..", u"..", u"..", u"..", - u"build-root", u"install-vpp-native", u"vpp", u"share", u"vpp", u"api" - ) -) -CHECKER = VppApiCrcChecker(API_DIR) -try: - CHECKER.report_initial_conflicts(report_missing=True) -except RuntimeError as err: - sys.stderr.write(f"{err!r}\n") - sys.stderr.write( - u"\n" - u"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n" - u"\n" - u"VPP CSIT API CHECK FAIL!\n" - u"\n" - u"This means the patch under test has missing messages,\n" - u"or messages with unexpected CRCs compared to what CSIT needs.\n" - u"Either this Change and/or its ancestors were editing .api files,\n" - u"or your chain is not rebased upon the recent enough VPP codebase.\n" - u"\n" - u"Please rebase the patch to see if that fixes the problem.\n" - u"If that fails email csit-dev@lists.fd.io for a new\n" - u"operational branch supporting the api changes.\n" - u"\n" - u"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n" - ) - sys.exit(1) -else: - sys.stderr.write( - u"\n" - u"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n" - u"\n" - u"VPP CSIT API CHECK PASS!\n" - u"\n" - u"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n" - ) + u"build-root", u"install-vpp-native", u"vpp", u"share", u"vpp", + u"api" + )) + checker = VppApiCrcChecker(api_dir) + try: + checker.report_initial_conflicts(report_missing=True) + except RuntimeError as err: + stderr_lines = [ + f"{err!r}", + u"", + u"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", + u"", + u"VPP CSIT API CHECK FAIL!", + u"", + u"This means the patch under test has missing messages,", + u"or messages with unexpected CRCs compared to what CSIT needs.", + u"Either this Change and/or its ancestors were editing .api files,", + u"or your chain is not rebased upon a recent enough VPP codebase.", + u"", + u"In the former case, please consult the following document", + u"to see how to make CSIT accept the .api editing change.", + u"https://github.com/FDio/csit/blob/master/docs/automating_vpp_api_flag_day.rst" + u"", + u"For the latter case, please rebase the patch to see", + u"if that fixes the problem. If repeated rebases do not help", + u"send and email to csit-dev@lists.fd.io asking to investigate.", + u"", + u"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", + ] + ret_code = 1 + else: + stderr_lines = [ + u"", + u"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", + u"", + u"VPP CSIT API CHECK PASS!", + u"", + u"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", + ] + ret_code = 0 + for stderr_line in stderr_lines: + print(stderr_line, file=sys.stderr) + return ret_code + +if __name__ == u"__main__": + sys.exit(main())