Signal-iOS/Scripts/sds_codegen/sds_common.py
2023-05-05 14:52:48 -07:00

66 lines
1.5 KiB
Python
Executable File

#!/usr/bin/env python3
import os
import subprocess
SDS_JSON_FILE_EXTENSION = '.sdsjson'
def fail(*args):
error = ' '.join(str(arg) for arg in args)
raise Exception(error)
git_repo_path = os.path.abspath(
subprocess.check_output(["git", "rev-parse", "--show-toplevel"], text=True).strip()
)
def sds_to_relative_path(path):
path = os.path.abspath(path)
if not path.startswith(git_repo_path):
fail('Unexpected path:', path)
path = path[len(git_repo_path):]
if path.startswith(os.sep):
path = path[len(os.sep):]
return path
def sds_from_relative_path(path):
return os.path.join(git_repo_path, path)
def clean_up_generated_code(text):
# Remove trailing whitespace.
lines = text.split('\n')
lines = [line.rstrip() for line in lines]
text = '\n'.join(lines)
# Compact newlines.
while '\n\n\n' in text:
text = text.replace('\n\n\n', '\n\n')
# Ensure there's a trailing newline.
return text.strip() + '\n'
def clean_up_generated_swift(text):
return clean_up_generated_code(text)
def clean_up_generated_objc(text):
return clean_up_generated_code(text)
def pretty_module_path(path):
path = os.path.abspath(path)
if path.startswith(git_repo_path):
path = path[len(git_repo_path):]
return path
def write_text_file_if_changed(file_path, text):
if os.path.exists(file_path):
with open(file_path, 'rt') as f:
oldText = f.read()
if oldText == text:
return
with open(file_path, 'wt') as f:
f.write(text)