#!/bin/bash # # # This script downloads all translations from crowdin, # and make a pull request on github if necessary # # # see: http://crowdin.net/page/api/export # see: http://crowdin.net/page/api/download . "$(dirname $0)/globals" BRANCH=crowdin_translations GITHUB_PR_TITLE="crowdin: New translations" PR_EXISTS=0 DDATE=$(date +"%Y-%m-%d %H:%M:%S") ZIPFILE=all.zip # default base branch BASE_BRANCH=master finish () { debug "cleaning up" # revert everything until last commit _do git branch | grep -q "\* ${BRANCH}" && ( _do git checkout . ; _do git reset ; ) _do git checkout ${BASE_BRANCH} || exit 1 [[ -f ${ZIPFILE} ]] && _do rm "${ZIPFILE}" } # check if different base branch has been set if [ $# -eq 1 ]; then debug "Setting BASE_BRANCH to $1" BASE_BRANCH=$1 fi # update BASE_BRANCH _do git pull upstream ${BASE_BRANCH} || die "couldn't git pull upstream ${BASE_BRANCH}." # check for existing PR _do curl -i --get "https://api.github.com/repos/cgeo/cgeo/pulls" -o "${OUT}" \ || die "listing pull requests failed." grep -q "Status: 200 OK" "${OUT}" || ( cat "${OUT}" ; die "reading list of pull requests failed." ; ) grep -qF "${GITHUB_PR_TITLE}" "${OUT}" && PR_EXISTS=1 if [ $PR_EXISTS -eq 0 ]; then debug "We don't have an open Pull Request on github." # remove branch if exists _do git checkout ${BASE_BRANCH} || die "Couldn't git checkout ${BASE_BRANCH}." _do git branch -D "${BRANCH}" else debug "We have an open Pull Request on github." fi # prepare branch if git branch | grep -q "${BRANCH}"; then : else _do git branch "${BRANCH}" || die "Couldn't create branch." fi _do git checkout "${BRANCH}" || die "Couldn't switch to branch." # package the language files (allowed every 30 min) debug "packaging language files." crowdin_surf "http://api.crowdin.net/api/project/cgeo/export?key=${CROWDIN_APIKEY}" # download and unpack translations [[ -f ${ZIPFILE} ]] && rm ${ZIPFILE} _do wget "http://api.crowdin.net/api/project/cgeo/download/all.zip?key=${CROWDIN_APIKEY}" -O ${ZIPFILE} \ || die "crowdin download failed." _do unzip -o ${ZIPFILE} || die "unzip of ${ZIPFILE} failed." # fix unicode entities for ellipsis character for f in */*/*values-*/strings.xml; do sed -i 's/…/…/g' $f done # apply local patches to particular strings . "$progdir/local-patches" # check for changes if [ -z "$(git diff)" ]; then debug "no changes, finishing." finish exit fi # upload changes to github AMEND="" [[ ! -z "$(git log ${BASE_BRANCH}..${BRANCH})" ]] && AMEND="--amend" _do git commit -a "${AMEND}" -m \"${GITHUB_PR_TITLE}\" || die "commit failed." _do git push -f origin "${BRANCH}" || die "git push failed." # create pull request if [ $PR_EXISTS -eq 0 ]; then _do curl -i -u "${GITHUB_USER}:${GITHUB_PASSWORD}" -d \'{\"title\":\"${GITHUB_PR_TITLE}\",\"body\":\"downloaded ${DDATE}\",\"head\":\"${GITHUB_USER}:${BRANCH}\",\"base\":\"${BASE_BRANCH}\"}\' "https://api.github.com/repos/cgeo/cgeo/pulls" -o "${OUT}" || die "creating the pull request failed." grep -q "201 Created" "${OUT}" || die "pull request not created." fi # clean up # [[ -f "${OUT}" ]] && rm "${OUT}" finish