project-config/jenkins/scripts/propose_translation_update.sh
Akihiro Motoki f49e0112a4 Prepare new translation functions for python projects
python-neutronclient and python-novaclient repos should work with
the new scripts
(though the current locale files still exist in the repo).
The current script will be replaced after the migration completes.

This script supports $modulename/locale/$modulename.pot as POT filename.

Part of infra-spec Improve Translation Setup

Story: 2000452
Change-Id: I67bfab533a8fd48f038c10e82509a2e626205a33
2016-01-28 13:52:20 +01:00

249 lines
7.6 KiB
Bash
Executable File

#!/bin/bash -xe
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
PROJECT=$1
BRANCH=$2
# Replace /'s in the branch name with -'s because Zanata does not
# allow /'s in version names.
ZANATA_VERSION=${BRANCH//\//-}
source /usr/local/jenkins/slave_scripts/common_translation_update.sh
# Propose updates for manuals
function propose_manuals {
# Pull updated translations from Zanata.
pull_from_zanata "$PROJECT"
# Compress downloaded po files
# Only touch glossary in openstack-manuals but not in any other
# repository.
case "$PROJECT" in
openstack-manuals)
compress_manual_po_files "doc" 1
;;
api-site)
compress_manual_po_files "api-ref-guides" 0
compress_manual_po_files "api-quick-start" 0
compress_manual_po_files "api-ref" 0
compress_manual_po_files "openstack-firstapp" 0
;;
ha-guide|operations-guide)
compress_manual_po_files "doc" 0
;;
security-doc)
compress_manual_po_files "security-guide" 0
;;
esac
# Add imported upstream translations to git
for FILE in ${DocFolder}/*; do
DOCNAME=${FILE#${DocFolder}/}
if [ -d ${DocFolder}/${DOCNAME}/locale ] ; then
git add ${DocFolder}/${DOCNAME}/locale/*
fi
if [ -d ${DocFolder}/${DOCNAME}/source/locale ] ; then
git add ${DocFolder}/${DOCNAME}/source/locale/*
fi
done
}
# Propose updates for training-guides
function propose_training_guides {
# Pull updated translations from Zanata.
pull_from_zanata "$PROJECT"
# Compress downloaded po files
compress_po_files "doc/upstream-training"
# Add all changed files to git
git add doc/upstream-training/source/locale/*
}
# Propose updates for python projects
function propose_python {
# Pull updated translations from Zanata
pull_from_zanata "$PROJECT"
# Extract all messages from project, including log messages.
extract_messages "$PROJECT"
extract_messages_log "$PROJECT"
# Now add all changed files to git.
# Note we add them here to not have to differentiate in the functions
# between new files and files already under git control.
git add $PROJECT/locale/*
# Remove obsolete files.
cleanup_po_files "$PROJECT"
# Compress downloaded po files, this needs to be done after
# cleanup_po_files since that function needs to have information the
# number of untranslated strings.
compress_po_files "$PROJECT"
# Some files were changed, add changed files again to git, so that we
# can run git diff properly.
git add $PROJECT/locale/*
}
# TODO(amotoki): Finally this should replace current propose_python.
function propose_python_new {
local project=$1
local modulename=$2
# Pull updated translations from Zanata
pull_from_zanata "$project"
# Extract all messages from project, including log messages.
extract_messages_new "$modulename"
extract_messages_log_new "$modulename"
# Now add all changed files to git.
# Note we add them here to not have to differentiate in the functions
# between new files and files already under git control.
git add $modulename/locale/*
# Remove obsolete files.
cleanup_po_files "$modulename"
# Compress downloaded po files, this needs to be done after
# cleanup_po_files since that function needs to have information the
# number of untranslated strings.
compress_po_files "$modulename"
# Some files were changed, add changed files again to git, so that we
# can run git diff properly.
git add $modulename/locale/*
}
function propose_horizon {
# Pull updated translations from Zanata.
pull_from_zanata "$PROJECT"
# Invoke run_tests.sh to update the po files
# Or else, "../manage.py makemessages" can be used.
./run_tests.sh --makemessages -V
# Compress downloaded po files
compress_po_files "horizon"
compress_po_files "openstack_dashboard"
# Add all changed files to git
git add horizon/locale/* openstack_dashboard/locale/*
}
function propose_django_openstack_auth {
# Pull updated translations from Zanata.
pull_from_zanata "$PROJECT"
# Update the .pot file
extract_messages "openstack_auth"
# Compress downloaded po files
compress_po_files "openstack_auth"
# Add all changed files to git
git add openstack_auth/locale/*
}
# This function can be used for all django projects
function propose_django {
local project=$1
local modulename=$2
# Pull updated translations from Zanata.
pull_from_zanata "$project"
# Update the .pot file
extract_messages_django "$modulename"
# Compress downloaded po files
compress_po_files "$modulename"
# Add all changed files to git
git add $modulename/locale/*
}
# Setup git repository for git review.
setup_git
# Check whether a review already exists, setup review commit message.
setup_review "$BRANCH"
case "$PROJECT" in
api-site|ha-guide|openstack-manuals|operations-guide|security-doc)
init_manuals "$PROJECT"
setup_manuals "$PROJECT" "$ZANATA_VERSION"
propose_manuals
;;
training-guides)
setup_training_guides "$ZANATA_VERSION"
propose_training_guides
;;
django_openstack_auth)
# NOTE: Once POT file and Zanata resource name are renamed
# from openstack_auth(.pot) to django(.pot), the below can be used.
# setup_django django_openstack_auth openstack_auth "$ZANATA_VERSION"
setup_django_openstack_auth "$ZANATA_VERSION"
# NOTE: Once django_openstack_auth repo has babel-django.cfg,
# the below can be used.
# propose_django django_openstack_auth openstack_auth
propose_django_openstack_auth
;;
horizon)
setup_horizon "$ZANATA_VERSION"
propose_horizon
;;
# Test of translation setup improvement
murano-dashboard|magnum-ui|python-neutronclient|python-novaclient)
# ---- Python projects ----
# NOTE: At now POT file == $modulename/locale/$modulename.pot
# so this script works.
# TODO(amotoki):
# * Move POT/PO file to $modulename/locale/$modulename.pot
# * Update setup.cfg (babel related)
# * Rename Zanata resource
MODULENAME=$(get_modulename $PROJECT python)
if [ -n "$MODULENAME" ]; then
setup_django "$PROJECT" "$MODULENAME" "$ZANATA_VERSION"
propose_python_new "$PROJECT" "$MODULENAME"
fi
# ---- Django projects ----
MODULENAME=$(get_modulename $PROJECT django)
if [ -n "$MODULENAME" ]; then
setup_django "$PROJECT" "$MODULENAME" "$ZANATA_VERSION"
propose_django "$PROJECT" "$MODULENAME"
fi
;;
*)
# Project specific setup.
setup_project "$PROJECT" "$ZANATA_VERSION"
# Setup some global vars which will be used in the rest of the
# script.
setup_loglevel_vars
propose_python
;;
esac
# Filter out commits we do not want.
filter_commits
# Propose patch to gerrit if there are changes.
send_patch "$BRANCH"