diff --git a/tools/pick-complete-translations.py b/tools/pick-complete-translations.py new file mode 100755 index 000000000..c97664fda --- /dev/null +++ b/tools/pick-complete-translations.py @@ -0,0 +1,82 @@ +#!/usr/bin/python3 +# +# cherry-pick complete translations from weblate + +import git +import json +import os +import re +import requests +import sys + + +def get_paths_tuple(locale): + return ( + 'metadata/%s/*.txt' % locale, + 'metadata/%s/changelogs/*.txt' % locale, + 'app/src/main/res/values-%s/strings.xml' % re.sub(r'-', r'-r', locale), + ) + +projectbasedir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +print(projectbasedir) + +repo = git.Repo(projectbasedir) +weblate = repo.remotes.weblate +weblate.fetch() +upstream = repo.remotes.upstream +upstream.fetch() + +url = 'https://hosted.weblate.org/exports/stats/f-droid/f-droid/?format=json' +r = requests.get(url) +r.raise_for_status() +app = r.json() + +url = 'https://hosted.weblate.org/exports/stats/f-droid/f-droid-metadata/?format=json' +r = requests.get(url) +r.raise_for_status() +metadata = r.json() + + +#with open('f-droid-metadata.json') as fp: +# metadata = json.load(fp) + +app_locales = dict() +metadata_locales = dict() + +merge_locales = [] +for locale in app: + app_locales[locale['code']] = locale +for locale in metadata: + metadata_locales[locale['code']] = locale + +for locale in sorted(app_locales.keys(), reverse=True): + a = app_locales.get(locale) + m = metadata_locales.get(locale) + if a is not None and a['translated_percent'] == 100 and a['failing'] == 0 \ + and m is not None and m['translated_percent'] == 100 and m['failing'] == 0: + print(locale) + merge_locales.append(locale) + +if not merge_locales: + sys.exit() + +if 'merge_weblate' in repo.heads: + merge_weblate = repo.heads['merge_weblate'] + repo.create_tag('previous_merge_weblate', ref=merge_weblate, + message=('Automatically created by %s' % __file__)) +else: + merge_weblate = repo.create_head('merge_weblate') +merge_weblate.set_commit(upstream.refs.master) +merge_weblate.checkout() + +email_pattern = re.compile(r'by (.*?) <(.*)>$') + +for locale in sorted(merge_locales): + commits = list(repo.iter_commits( + str(weblate.refs.master) + '...' + str(upstream.refs.master), + paths=get_paths_tuple(locale), max_count=10)) + for commit in reversed(commits): + repo.git.cherry_pick(str(commit)) + m = email_pattern.search(commit.summary) + if m: + email = m.group(1) + ' <' + m.group(2) + '>'