Skip to content

Commit 7e8cd9f

Browse files
committed
tx_push_all.sh -> new transifex forced push script
1 parent efc450b commit 7e8cd9f

1 file changed

Lines changed: 150 additions & 0 deletions

File tree

‎_tools/tx_push_all.sh‎

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
#!/usr/bin/env bash
2+
#
3+
# tx_push_all.sh -- Uebersetzungen Ressource fuer Ressource nach Transifex
4+
# schieben. Das Repo ist dabei die Quelle der Wahrheit: mit --force werden
5+
# auch Strings ueberschrieben, die in Transifex von Hand bearbeitet wurden
6+
# (ohne diesen Schalter laesst Transifex sie unangetastet, siehe
7+
# replace_edited_strings in .tx/config).
8+
#
9+
# Ein Aufruf pro Ressource statt eines grossen Pushes, damit ein einzelner
10+
# Fehlschlag den Rest nicht aufhaelt. Was fehlschlaegt, steht am Ende noch
11+
# einmal gesammelt da.
12+
#
13+
# Voraussetzungen:
14+
# * tx-CLI installiert und im PATH
15+
# * API-Token in ~/.transifexrc (NICHT im Repo, nicht in dieser Datei)
16+
#
17+
# Nutzung:
18+
# ./_tools/tx_push_all.sh # alles ausser AUSNAHMEN
19+
# ./_tools/tx_push_all.sh --liste # nur zeigen, was gepusht wuerde
20+
# ./_tools/tx_push_all.sh --nur library-- # nur passende Ressourcen
21+
# ./_tools/tx_push_all.sh --ohne-ausnahmen # wirklich alles, auch die
22+
# # Dateien in AUSNAHMEN
23+
#
24+
set -uo pipefail
25+
26+
REPO_ROOT="${REPO_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}"
27+
CONFIG="$REPO_ROOT/.tx/config"
28+
ORGA="${ORGA:-python-doc}"
29+
PROJEKT="${PROJEKT:-python-newest}"
30+
31+
# Ressourcen, die NICHT gepusht werden. Hier stehen die vier grossen
32+
# extending-Dateien: die sind in Transifex in Arbeit, unser Repo-Stand ist
33+
# nur mechanisch bereinigt und soll die dortige Fassung nicht ueberschreiben.
34+
AUSNAHMEN=(
35+
"extending--extending"
36+
"extending--first-extension-module"
37+
"extending--newtypes"
38+
"extending--newtypes_tutorial"
39+
)
40+
41+
NUR=""
42+
MIT_AUSNAHMEN=false
43+
NUR_LISTE=false
44+
45+
while [[ $# -gt 0 ]]; do
46+
case "$1" in
47+
--liste) NUR_LISTE=true ;;
48+
--ohne-ausnahmen) MIT_AUSNAHMEN=true ;;
49+
--nur) NUR="${2:-}"; shift ;;
50+
-h|--help) sed -n '2,24p' "${BASH_SOURCE[0]}"; exit 0 ;;
51+
*) echo "Unbekannte Option: $1"; exit 2 ;;
52+
esac
53+
shift
54+
done
55+
56+
if [[ ! -f "$CONFIG" ]]; then
57+
echo "Keine .tx/config unter $CONFIG gefunden."
58+
exit 1
59+
fi
60+
if ! command -v tx >/dev/null 2>&1; then
61+
echo "Das tx-CLI liegt nicht im PATH. Installation:"
62+
echo " https://developers.transifex.com/docs/cli"
63+
exit 1
64+
fi
65+
if [[ ! -f "$HOME/.transifexrc" ]]; then
66+
echo "~/.transifexrc fehlt -- ohne API-Token kann nicht gepusht werden."
67+
echo "Anlegen mit: tx init"
68+
exit 1
69+
fi
70+
71+
BRANCH="$(git -C "$REPO_ROOT" branch --show-current 2>/dev/null)"
72+
echo "Repo: $REPO_ROOT"
73+
echo "Branch: ${BRANCH:-unbekannt}"
74+
echo "Projekt: $ORGA / $PROJEKT"
75+
76+
ausgenommen() {
77+
$MIT_AUSNAHMEN && return 1
78+
local r="$1" a
79+
for a in "${AUSNAHMEN[@]}"; do
80+
[[ "$r" == "$a" ]] && return 0
81+
done
82+
return 1
83+
}
84+
85+
# Ressourcennamen aus den Abschnittskoepfen der .tx/config lesen
86+
mapfile -t ALLE < <(
87+
grep -o "^\[o:$ORGA:p:$PROJEKT:r:[^]]*\]" "$CONFIG" \
88+
| sed "s/.*:r://; s/\]//"
89+
)
90+
if [[ ${#ALLE[@]} -eq 0 ]]; then
91+
echo "In $CONFIG keine Ressourcen fuer $ORGA/$PROJEKT gefunden."
92+
exit 1
93+
fi
94+
95+
ZU_PUSHEN=()
96+
UEBERSPRUNGEN=()
97+
for r in "${ALLE[@]}"; do
98+
[[ -n "$NUR" && "$r" != *"$NUR"* ]] && continue
99+
if ausgenommen "$r"; then
100+
UEBERSPRUNGEN+=("$r")
101+
continue
102+
fi
103+
ZU_PUSHEN+=("$r")
104+
done
105+
106+
echo "Ressourcen: ${#ALLE[@]} insgesamt, ${#ZU_PUSHEN[@]} werden gepusht,"
107+
echo " ${#UEBERSPRUNGEN[@]} ausgenommen"
108+
for r in "${UEBERSPRUNGEN[@]}"; do
109+
echo " ausgenommen: $r"
110+
done
111+
112+
if $NUR_LISTE; then
113+
printf '%s\n' "${ZU_PUSHEN[@]}"
114+
exit 0
115+
fi
116+
117+
echo
118+
read -r -p "Jetzt ${#ZU_PUSHEN[@]} Ressourcen mit --force pushen? [j/N] " ANTWORT
119+
[[ "$ANTWORT" =~ ^[jJyY]$ ]] || { echo "Abgebrochen."; exit 0; }
120+
121+
cd "$REPO_ROOT" || exit 1
122+
123+
OK=0
124+
FEHLER=()
125+
N=${#ZU_PUSHEN[@]}
126+
I=0
127+
for r in "${ZU_PUSHEN[@]}"; do
128+
I=$((I + 1))
129+
printf '[%3d/%3d] %s ... ' "$I" "$N" "$r"
130+
if tx push --translation --force --resource "$PROJEKT.$r" >/dev/null 2>&1; then
131+
echo "ok"
132+
OK=$((OK + 1))
133+
else
134+
echo "FEHLGESCHLAGEN"
135+
FEHLER+=("$r")
136+
fi
137+
done
138+
139+
echo
140+
echo "Fertig: $OK von $N Ressourcen gepusht."
141+
if [[ ${#FEHLER[@]} -gt 0 ]]; then
142+
echo "Fehlgeschlagen (${#FEHLER[@]}):"
143+
for r in "${FEHLER[@]}"; do
144+
echo " $r"
145+
done
146+
echo
147+
echo "Einzeln wiederholen mit:"
148+
echo " tx push --translation --force --resource $PROJEKT.<name>"
149+
exit 1
150+
fi

0 commit comments

Comments
 (0)