Praefix bis: bis<her ... bis<weilen
[wortliste.git] / skripte / patgen-list-diff.sh
blob13700cad8871288ac28eab95eaf3855a8fb7152b
1 #!/bin/sh
2 # -*- coding: utf-8 -*-
4 # Dieses Skript erzeugt Differenzbilder (diff) für die
5 # Patgen-Eingabelisten zwischen zwei angegebenen Commits. Wird nur ein
6 # Commit angegeben, wird als Zielcommit "master" verwendet. Die
7 # Ausgabedateien werden als Dateien
9 # dehyph*-x/<Start-Commit-Hash>-<Ziel-Commit-Hash>.diff
11 # in Verzeichnissen gespeichert, die der jeweiligen Rechtschreibung
12 # entsprechen. Start- und Ziel-Commit können in jeder gültigen
13 # Git-Syntax angegeben werden. Für die Dateinamen werden die
14 # entsprechenden abgekürzten alphanumerischen Commit-Hashes
15 # verwendet.
17 # Aufruf: sh patgen-list-diff.sh <start commit> [<ziel commit>]
20 # Eingabe: <start commit> Ein Start-Commit.
21 # <ziel commit> Ein optionaler Ziel-Commit.
23 # Ausgabe:
24 # dehyphn-x/<hashes>.diff Differenzbild refromierte Rechtschreibung
25 # dehypht-x/<hashes>.diff Differenzbild traditionelle Rechtschreibung
26 # dehyphts-x/<hashes>.diff Differenzbild traditionelle Rechtschreibung
27 # in der Schweiz.
29 if test $# -eq 0
30 then
31 echo 'usage: patgen-list-diff <start commit> [<target commit>]'
32 echo ''
33 echo 'Create diffs for patgen input lists between <start commit> and'
34 echo '<target commit> (by default "master") and save them as files'
35 echo 'dehyph*-x/<start commit hash>-<target commit hash>.diff in'
36 echo 'directories corresponding to the spelling.'
37 exit 1
39 FROMCOMMIT=$1
40 if test $# -eq 1
41 then
42 TOCOMMIT=HEAD
43 else
44 TOCOMMIT=$2
46 typeset GITDATA=`git log -1 --format=%ci-%H $FROMCOMMIT --`
47 FROMDATE=${GITDATA:0:10}+${GITDATA:11:2}-${GITDATA:14:2}-${GITDATA:17:2}
48 FROMHASH=${GITDATA:26}
49 if test -z $FROMHASH
50 then
51 echo 'patgen-list-diff.sh: error identifying start commit hash: ' $FROMCOMMIT
52 exit 1
54 typeset GITDATA=`git log -1 --format=%ci-%H $TOCOMMIT --`
55 TODATE=${GITDATA:0:10}+${GITDATA:11:2}-${GITDATA:14:2}-${GITDATA:17:2}
56 TOHASH=${GITDATA:26}
57 if test -z $TOHASH
58 then
59 echo 'patgen-list-diff.sh: error identifying target commit hash: ' $TOCOMMIT
60 exit 1
65 # Function definition. If not already present, place a copy of a
66 # commit's working copy in a directory 'wl-<commit hash>'.
67 get_working_copy() {
68 typeset commit=$1 commitdate=$2
69 typeset commitdir=$commitdate-$commit
70 if test ! -d $commitdir
71 then
72 git archive --format=tar --prefix=$commitdir/ $commit | tar xf -
76 # Function definition.
77 create_patgen_list() {
78 typeset commit=$1 commitdate=$2 patgenlist=$3
79 typeset commitdir=$commitdate-$commit
80 echo "Making ${commit:0:7} file $patgenlist."
81 if test ! -e $commitdir/$patgenlist
82 then
83 # 'make -C $commitdir $patgenlist' doesn't work reliably on Git
84 # for Windows shell.
85 (cd $commitdir && make $patgenlist > /dev/null)
89 # Function definition.
90 diff_patgen_list() {
91 typeset fromcommit=$1 fromcommitdate=$2 tocommit=$3 tocommitdate=$4 dehyph=$5 spell=$6
92 typeset fromcommitdir=$fromcommitdate-$fromcommit tocommitdir=$tocommitdate-$tocommit patgenlist=$dehyph/words.hyphenated.$spell difffile=${fromcommit:0:7}-${tocommit:0:7}.diff
93 create_patgen_list $fromcommit $fromcommitdate $patgenlist
94 create_patgen_list $tocommit $tocommitdate $patgenlist
95 if test ! -d $dehyph; then mkdir $dehyph; fi
96 diff $fromcommitdir/$patgenlist $tocommitdir/$patgenlist > $dehyph/$difffile
97 gawk -f skripte/patgen-list-diff.awk -v ftr=daten/german.tr $dehyph/$difffile
102 echo "Diff'ing patgen input files."
103 printf "from: %7s %10s %s\n" ${FROMHASH:0:7} ${FROMDATE:0:10} $FROMCOMMIT
104 printf "to: %7s %10s %s\n" ${TOHASH:0:7} ${TODATE:0:10} $TOCOMMIT
105 # Get commit's working copies.
106 get_working_copy $FROMHASH $FROMDATE
107 get_working_copy $TOHASH $TODATE
108 # Write header to summary table file.
109 PLDTABLE=CHANGES.table.txt
110 echo " Rechtschreibung hinzugefügt entfernt korrigiert" > $PLDTABLE
111 echo " ---------------------------------------------------------------" >> $PLDTABLE
112 # Diff patgen lists and write results to summary table file.
113 echo -n " traditionell (DE, AT)" >> $PLDTABLE
114 diff_patgen_list $FROMHASH $FROMDATE $TOHASH $TODATE dehypht-x trad
115 echo -n " traditionell (CH) " >> $PLDTABLE
116 diff_patgen_list $FROMHASH $FROMDATE $TOHASH $TODATE dehyphts-x swiss
117 echo -n " reformiert " >> $PLDTABLE
118 diff_patgen_list $FROMHASH $FROMDATE $TOHASH $TODATE dehyphn-x refo