script to automatically cherry-pick complete translations from Weblate
This creates a branch 'merge_weblate' and cherry picks commits from Weblate that contain 100% complete translations.
This commit is contained in:
parent
1d359f82ce
commit
826d70f2c9
82
tools/pick-complete-translations.py
Executable file
82
tools/pick-complete-translations.py
Executable file
@ -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) + '>'
|
Loading…
x
Reference in New Issue
Block a user