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=3e2836cb3b2f59f32296d77aec52c783130c1fad;hb=a678231f39f4d4ea079018e7d11be36d0cc454d2;hpb=29726f92698452f51033fc3ab52f112b74eae594 diff --git a/resources/tools/integrated/check_crc.py b/resources/tools/integrated/check_crc.py index 3e2836cb3b..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,41 +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( - op.dirname(op.abspath(__file__)), "..", "..", "..", "..", - "build-root", "install-vpp-native", "vpp", "share", "vpp", "api")) -checker = VppApiCrcChecker(api_dir) -try: - checker.report_initial_conflicts(report_missing=True) -except RuntimeError as err: - sys.stderr.write("{err!r}\n".format(err=err)) - sys.stderr.write( - "\n" - "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n" - "\n" - "VPP CSIT API CHECK FAIL!\n" - "\n" - "This means the patch under test has missing messages,\n" - "or messages with unexpected CRCs compared to what CSIT needs.\n" - "Either this Change and/or its ancestors were editing .api files,\n" - "or your chain is not rebased upon the recent enough VPP codebase.\n" - "\n" - "Please rebase the patch to see if that fixes the problem.\n" - "If that fails email csit-dev@lists.fd.io for a new\n" - "operational branch supporting the api changes.\n" - "\n" - "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n" - ) - sys.exit(1) -else: - sys.stderr.write( - "\n" - "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n" - "\n" - "VPP CSIT API CHECK PASS!\n" - "\n" - "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n" - ) +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: + 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())