Improve generator script

This commit is contained in:
Guillaume Gomez 2020-10-29 10:26:05 +01:00
parent a7749b7933
commit 37dad014ec

View file

@ -1,58 +1,101 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
from os import listdir from os import listdir
from os.path import isfile, join from os.path import isfile, isdir, join
from subprocess import call import subprocess
import sys import sys
need_rebuild = False
def update_workspace(): NOTHING_TO_BE_DONE = 0
try: NEED_UPDATE = 1
call(['bash', '-c', 'cd gir && cargo build --release']) FAILURE = 2
except:
def run_command(command, folder=None):
if folder is None:
folder = "."
child = subprocess.Popen(command, cwd=folder)
child.communicate()
if child.returncode != 0:
print("Command `{}` failed with return code `{}`...".format(command, child.returncode))
return False return False
return True return True
if not isfile('./gir/src'): def update_workspace():
need_rebuild = True try:
return run_command(['cargo', 'build', '--release'], 'gir')
except:
return False
def def_check_submodule(submodule_path):
if len(listdir(submodule_path)) != 0:
return NOTHING_TO_BE_DONE
print('=> Initializing gir submodule...') print('=> Initializing gir submodule...')
call(['bash', '-c', 'git submodule update --init']) if not run_command(['git', 'submodule', 'update', '--init']):
return FAILURE
print('<= Done!') print('<= Done!')
question = 'Do you want to update gir submodule? [y/N] ' question = 'Do you want to update gir submodule? [y/N] '
if sys.version_info[0] < 3: if sys.version_info[0] < 3:
line = raw_input(question) line = raw_input(question)
else: else:
line = input(question) line = input(question)
line = line.strip() line = line.strip()
if line.lower() == 'y': if line.lower() == 'y':
need_rebuild = True
print('=> Updating gir submodule...') print('=> Updating gir submodule...')
call(['bash', '-c', 'cd gir && git reset --hard HEAD && git pull -f origin master']) if not run_command(['git', 'reset', '--hard', 'HEAD'], 'gir'):
return FAILURE
if not run_command(['git', 'pull', '-f', 'origin', 'master'], 'gir'):
return FAILURE
print('<= Done!') print('<= Done!')
return NEED_UPDATE
return NOTHING_TO_BE_DONE
if need_rebuild is True or not os.path.isfile('./gir/target/release/gir'):
def build_gir_if_needed(updated_submodule):
if updated_submodule == FAILURE:
return False
elif updated_submodule == NEED_UPDATE or not isfile('./gir/target/release/gir'):
print('=> Building gir...') print('=> Building gir...')
if update_workspace() is True: if update_workspace() is True:
print('<= Done!') print('<= Done!')
else: else:
print('<= Failed...') print('<= Failed...')
sys.exit(1) return False
return True
print('=> Regenerating crates...')
for entry in [f for f in listdir('.') if isfile(join('.', f))]: def regen_crates():
for entry in [f for f in listdir('.') if isfile(join('.', f))]:
if entry.startswith('Gir_Gst') and entry.endswith('.toml'): if entry.startswith('Gir_Gst') and entry.endswith('.toml'):
print('==> Regenerating "{}"...'.format(entry)) print('==> Regenerating "{}"...'.format(entry))
try: try:
call(['./gir/target/release/gir', '-c', entry]) run_command(['./gir/target/release/gir', '-c', entry])
except Exception as err: except Exception as err:
print('The following error occurred: {}'.format(err)) print('The following error occurred: {}'.format(err))
line = input('Do you want to continue? [y/N] ').strip().lower() line = input('Do you want to continue? [y/N] ').strip().lower()
if line != 'y': if line != 'y':
sys.exit(1) sys.exit(1)
print('<== Done!') print('<== Done!')
call(['cargo', 'fmt'])
print('<= Done!')
print("Don't forget to check if everything has been correctly generated!") def main():
if def_check_submodule("gir-files") == FAILURE:
return 1
if not build_gir_if_needed(def_check_submodule("gir")):
return 1
print('=> Regenerating crates...')
if not regen_crates():
return 1
if not run_command(['cargo', 'fmt']):
return 1
print('<= Done!')
print("Don't forget to check if everything has been correctly generated!")
return 0
if __name__ == "__main__":
sys.exit(main())