check_executables.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #!/usr/bin/env python
  2. #
  3. # SPDX-FileCopyrightText: 2020-2022 Espressif Systems (Shanghai) CO LTD
  4. # SPDX-License-Identifier: Apache-2.0
  5. import argparse
  6. import os
  7. import sys
  8. try:
  9. from idf_ci_utils import is_executable
  10. except ImportError:
  11. sys.path.append(os.path.join(os.path.dirname(__file__)))
  12. from idf_ci_utils import is_executable
  13. def _strip_each_item(iterable):
  14. res = []
  15. for item in iterable:
  16. if item:
  17. res.append(item.strip())
  18. return res
  19. IDF_PATH = os.getenv('IDF_PATH', os.getcwd())
  20. EXECUTABLE_LIST_FN = os.path.join(IDF_PATH, 'tools/ci/executable-list.txt')
  21. known_executables = _strip_each_item(open(EXECUTABLE_LIST_FN).readlines())
  22. def check_executable_list():
  23. ret = 0
  24. for index, fn in enumerate(known_executables):
  25. if not os.path.exists(os.path.join(IDF_PATH, fn)):
  26. print('{}:{} {} not exists. Please remove it manually'.format(EXECUTABLE_LIST_FN, index + 1, fn))
  27. ret = 1
  28. return ret
  29. def check_executables(files):
  30. ret = 0
  31. for fn in files:
  32. fn_executable = is_executable(fn)
  33. fn_in_list = fn in known_executables
  34. if fn_executable and not fn_in_list:
  35. print('"{}" is not in {}'.format(fn, EXECUTABLE_LIST_FN))
  36. ret = 1
  37. if not fn_executable and fn_in_list:
  38. print('"{}" is not executable but is in {}'.format(fn, EXECUTABLE_LIST_FN))
  39. ret = 1
  40. return ret
  41. def main():
  42. parser = argparse.ArgumentParser()
  43. parser.add_argument('--action', choices=['executables', 'list'], required=True,
  44. help='if "executables", pass all your executables to see if it\'s in the list.'
  45. 'if "list", check if all items on your list exist')
  46. parser.add_argument('filenames', nargs='*', help='Filenames to check.')
  47. args = parser.parse_args()
  48. if args.action == 'executables':
  49. ret = check_executables(args.filenames)
  50. elif args.action == 'list':
  51. ret = check_executable_list()
  52. else:
  53. raise ValueError
  54. return ret
  55. if __name__ == '__main__':
  56. sys.exit(main())