Проверка шаблона шины для iOS
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

88 Zeilen
2.5KB

  1. #!/usr/bin/env python3
  2. import os
  3. import sys
  4. import json
  5. import subprocess
  6. from datetime import datetime
  7. from hashlib import sha256
  8. from tempfile import TemporaryDirectory
  9. from shutil import copyfile
  10. FILENAME = 'Platfile'
  11. LOCKFILE = FILENAME + '.lock'
  12. VERSION = '2.0'
  13. def initialize(dir: str):
  14. print('Initializing ', FILENAME)
  15. dir_modules = os.path.join(dir, '..', '..', 'Modules')
  16. path = os.path.join(dir, FILENAME)
  17. with open(path, 'w') as file:
  18. entries = os.listdir(dir_modules)
  19. for entry in entries:
  20. if os.path.isfile(os.path.join(dir_modules, entry, entry + '.yml')):
  21. file.write(entry + '\n')
  22. def generate(dir: str, generator: str):
  23. path = os.path.join(dir, FILENAME)
  24. with open(path) as file:
  25. modules = file.readlines()
  26. modules = set(m.strip() for m in modules if m.strip())
  27. modules = sorted(modules)
  28. dir_modules = os.path.join(dir, '..', '..', 'Modules')
  29. print(f'Generating modules: {len(modules)}')
  30. generator = generator or os.path.join(dir, 'generate-platform')
  31. for module in modules:
  32. src_dir = os.path.join(dir_modules, module, 'src')
  33. with TemporaryDirectory() as tmpdir:
  34. subprocess.call([generator, module, '-o', tmpdir])
  35. _merge_changes(tmpdir, src_dir)
  36. if os.path.exists(LOCKFILE):
  37. os.remove(LOCKFILE)
  38. def _merge_changes(src_dir: str, dst_dir: str):
  39. for file_name in os.listdir(src_dir):
  40. src_file = os.path.join(src_dir, file_name)
  41. src_hash = _hash_file(src_file)
  42. dst_file = os.path.join(dst_dir, file_name)
  43. if os.path.exists(dst_file):
  44. dst_hash = _hash_file(dst_file)
  45. if src_hash == dst_hash:
  46. return
  47. copyfile(src_file, dst_file)
  48. print('Updated file: ', file_name)
  49. def _hash_file(path: str):
  50. alg = sha256()
  51. with open(path, 'rb') as file:
  52. for line in file.readlines():
  53. if line:
  54. alg.update(line)
  55. return alg.hexdigest()
  56. def main():
  57. from argparse import ArgumentParser
  58. parser = ArgumentParser(
  59. prog='GeneratePlatforms',
  60. description='Automatic code generator'
  61. )
  62. parser.add_argument('-i', '--init', action='store_true')
  63. parser.add_argument('-g', '--generator', type=str)
  64. args = parser.parse_args()
  65. dir = os.path.dirname(os.path.realpath(sys.argv[0]))
  66. if args.init:
  67. initialize(dir)
  68. else:
  69. generate(dir, args.generator)
  70. if __name__ == "__main__":
  71. main()