~ubuntu-branches/ubuntu/vivid/installation-guide/vivid-proposed

« back to all changes in this revision

Viewing changes to scripts/rev-check

  • Committer: Bazaar Package Importer
  • Author(s): Frans Pop
  • Date: 2005-10-25 17:37:25 UTC
  • Revision ID: james.westby@ubuntu.com-20051025173725-aq0bm11be7bfd7rw
Tags: 20051025
* Mention in copyright that full GPL is included in the manual.
  Closes: #334925
* Register installed documents with doc-base.
* Minor updates in English text and translations.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/bash
 
2
 
 
3
# This script will allow to check for changes in the original
 
4
# English docs for languages that use po files for translation.
 
5
# It combines the function of the old doc-check and rev-update
 
6
# scripts (resulting in the name rev-check :-)
 
7
 
 
8
# For each language, the last three revisions for which the
 
9
# translation has been updated are saved in a file.
 
10
# The current revision of English documents is checked against
 
11
# the most recent revisions in this file.
 
12
 
 
13
lang=""
 
14
default_lang="nl"
 
15
file=""
 
16
 
 
17
print_usage () {
 
18
    echo "Usage: $(basename $0) [options] [language] [file]"
 
19
    echo "   TODO: explanation of syntax and options"
 
20
}
 
21
 
 
22
print_usage_err () {
 
23
    print_usage
 
24
    exit 1
 
25
}
 
26
 
 
27
check_parm_lang () {
 
28
    # Check that directory exists won't work after conversion to po...
 
29
    if [ -d "$1" ] ; then
 
30
        lang="$1"
 
31
    else
 
32
        echo "Info: no valid language specified, using default '$default_lang'"
 
33
        if [ -d "$default_lang" ] ; then
 
34
            lang="$default_lang"
 
35
            return 1
 
36
        else
 
37
            echo "Error: directory for language '$default_lang' not found"
 
38
            print_usage_err
 
39
        fi
 
40
    fi
 
41
    return 0
 
42
}
 
43
 
 
44
check_parm_file () {
 
45
    file=$(echo "$1" | sed "s:^./::" | sed "s:^en/::")
 
46
    if [ ! -f "./en/$file" ] ; then
 
47
        echo "Error: file '$file' does not exist"
 
48
        return 1
 
49
    fi
 
50
    return 0
 
51
}
 
52
 
 
53
parse_opts () {
 
54
    command="check"
 
55
    do_diff=""
 
56
    do_all=""
 
57
    parm_count=0
 
58
 
 
59
    for opt in $@; do
 
60
        case "$opt" in
 
61
            --update|-u)
 
62
                [ $command = "check" ] || print_usage_err
 
63
                command="update"
 
64
                ;;
 
65
            --add|-a)
 
66
                [ $command = "check" ] || print_usage_err
 
67
                command="add"
 
68
                ;;
 
69
            --diff|-d)
 
70
                do_diff=1
 
71
                ;;
 
72
            --all|-A)
 
73
                do_all=1
 
74
                ;;
 
75
            --convert)
 
76
                [ $command = "check" ] || print_usage_err
 
77
                command="convert"
 
78
                ;;
 
79
            --help|-h)
 
80
                print_usage
 
81
                exit 0
 
82
                ;;
 
83
            -*)
 
84
                print_usage_err
 
85
                ;;
 
86
            *)
 
87
                parm_count=$(($parm_count + 1))
 
88
                if [ $parm_count -eq 1 ] ; then
 
89
                    check_parm_lang "$opt"
 
90
                    [ $? -ne 0 ] && parm_count=$(($parm_count + 1))
 
91
                fi
 
92
                if [ $parm_count -eq 2 ] ; then
 
93
                    check_parm_file "$opt"
 
94
                    [ $? -ne 0 ] && print_usage_err
 
95
                fi
 
96
 
 
97
                [ $parm_count -gt 2 ] && print_usage_err
 
98
                ;;
 
99
        esac
 
100
        
 
101
    done
 
102
 
 
103
    [ -z "$lang" ] && check_parm_lang "<none>"
 
104
 
 
105
    case $command in
 
106
        check)
 
107
            [ "$do_all" ] && print_usage_err
 
108
            ;;
 
109
        convert)
 
110
            [ "$do_all" ] && print_usage_err
 
111
            if [ -n "$file" ] ; then
 
112
                echo "Error: parameter [file] not allowed with --$command option"
 
113
                print_usage_err
 
114
            fi
 
115
            if [ ! -d $lang ] ; then
 
116
                echo "Error: directory for language '$lang' not found"
 
117
                exit 1
 
118
            fi
 
119
            ;;
 
120
        add|update)
 
121
            if [ ! "$do_all" ] && [ -z "$file" ] ; then
 
122
                echo "Error: parameter [file] missing, to update all files add --all option"
 
123
                print_usage_err
 
124
            fi
 
125
            if [ "$do_all" ] && [ ! -z "$file" ] ; then
 
126
                echo "Error: parameter [file] not allowed with --all option"
 
127
                print_usage_err
 
128
            fi
 
129
            ;;
 
130
    esac
 
131
}
 
132
 
 
133
get_rev () {
 
134
    local REV
 
135
    REV="$(egrep '^<\!--[[:space:]]*\$Id:' ./en/$1 | \
 
136
           sed 's/^.*$Id:[[:space:]]*//' | cut -d " " -f 2)"
 
137
    if [ -z "$REV" ] ; then
 
138
        echo "Error: could not determine revision of './en/$1'"
 
139
        return 1
 
140
    fi
 
141
    echo "$REV"
 
142
    return 0
 
143
}
 
144
 
 
145
get_trev () {
 
146
    local TREV
 
147
    [ "$2" = "all" ] && fields="2-" || fields="2"
 
148
    TREV="$(egrep "^$1" $rev_file | cut -f $fields)"
 
149
    if [ -z "$TREV" ] ; then
 
150
        return 1
 
151
    fi
 
152
    echo "$TREV"
 
153
    return 0
 
154
}
 
155
 
 
156
print_diff () {
 
157
    local TREV
 
158
    local TREV_PREV=""
 
159
    for TREV in $2; do
 
160
        [ "$TREV_PREV" ] && echo "Diff against revision $TREV_PREV failed, trying next oldest: $TREV"
 
161
        svn diff -r $TREV:$3 ./en/$1
 
162
        [ $? -eq 0 ] && break
 
163
        TREV_PREV=$TREV
 
164
    done
 
165
}
 
166
 
 
167
check_one () {
 
168
    REV=$(get_rev $1)
 
169
    [ $? -ne 0 ] && return 9
 
170
    TREV=$(get_trev $1)
 
171
    if [ $? -ne 0 ] ; then
 
172
        echo "$1: N/A -> $REV"
 
173
        return 2
 
174
    fi
 
175
 
 
176
    local RET=0
 
177
    if [ ! "$TREV" = "$REV" ] ; then
 
178
        RET=1
 
179
        echo "$1: $TREV -> $REV"
 
180
        if [ "$do_diff" ] ; then
 
181
            print_diff $1 "$(get_trev $1 all)" $REV
 
182
            echo
 
183
        fi
 
184
    fi
 
185
    return $RET
 
186
}
 
187
 
 
188
do_check () {
 
189
    local RESULT=0
 
190
    if [ -n "$file" ] ; then
 
191
        check_one $file
 
192
        RESULT=$?
 
193
    else
 
194
        for file in $(find ./en/ -name "*.xml" | sed "s:^./::" | sed "s:^en/::"); do
 
195
            check_one $file
 
196
            [ $? -eq 1 ] && RESULT=1
 
197
        done
 
198
    fi
 
199
    [ $RESULT -ne 1 ] && echo "No updates found"
 
200
}
 
201
 
 
202
update_revdata () {
 
203
    cp $rev_file $rev_file~
 
204
    egrep -v "^$1" $rev_file~ >$rev_file
 
205
 
 
206
    # Keep the last three revisions in $rev_file
 
207
    local REV
 
208
    local counter=1
 
209
    echo -n "$1" >>$rev_file
 
210
    for REV in $2; do
 
211
        echo -en "\t$REV" >>$rev_file
 
212
        counter=$(($counter + 1))
 
213
        [ $counter -gt 3 ] && break
 
214
    done
 
215
    echo >>$rev_file
 
216
    echo "   Revision updated"
 
217
}
 
218
 
 
219
update_one () {
 
220
    local file=$1
 
221
    check_one $file
 
222
    if [ $? -eq 1 ] ; then
 
223
        update_revdata $1 "$REV $(get_trev $1 all)"
 
224
    fi
 
225
}
 
226
 
 
227
do_update () {
 
228
    if [ -n "$file" ] ; then
 
229
        update_one $file
 
230
    else
 
231
        for file in $(find ./en/ -name "*.xml" | sed "s:^./::" | sed "s:^en/::"); do
 
232
            update_one $file
 
233
        done
 
234
    fi
 
235
}
 
236
 
 
237
do_add_one () {
 
238
    if egrep "^$file" $rev_file ; then
 
239
        echo "Error: revision data already has '$file'"
 
240
        exit 1
 
241
    fi
 
242
 
 
243
    REV=$(get_rev $1)
 
244
    [ $? -ne 0 ] && exit 1
 
245
 
 
246
    echo -e "$file\t$REV" >>$rev_file
 
247
}
 
248
 
 
249
do_add_all () {
 
250
    for file in $(find ./en/ -name "*.xml" | sed "s:^./::" | sed "s:^en/::"); do
 
251
        if [ -f $rev_file ] && egrep "^$file" $rev_file ; then
 
252
            continue
 
253
        fi
 
254
 
 
255
        REV=$(get_rev $file)
 
256
        [ $? -ne 0 ] && continue
 
257
 
 
258
        echo -e "$file\t$REV" >>$rev_file
 
259
        echo "Added '$file' at $REV"
 
260
    done
 
261
}
 
262
 
 
263
do_convert () {
 
264
    for file in $(find ./en/ -name "*.xml" | sed "s:^./::" | sed "s:^en/::"); do
 
265
        if [ -f ./$lang/$file ]; then
 
266
            REV="$(egrep '^<\!--[[:space:]]*original version:' ./$lang/$file | \
 
267
                   sed 's/^.*original version:[[:space:]]*//' | cut -d " " -f 1)"
 
268
            if [ -z "$REV" ] ; then
 
269
                echo "Warning: no revision comment found for './$lang/$file'"
 
270
            else
 
271
                echo -e "$file\t$REV" >>$rev_file
 
272
            fi
 
273
        else
 
274
            echo "Warning: file './$lang/$file' not found"
 
275
        fi
 
276
    done
 
277
}
 
278
 
 
279
 
 
280
## MAINLINE
 
281
 
 
282
[ -d ./po/revdata ] || exit 1
 
283
 
 
284
parse_opts "$@"
 
285
rev_file=./po/revdata/$lang.dat
 
286
 
 
287
if [ "$command" = "convert" ] || \
 
288
   ( [ "$command" = "add" ] && [ "$do_all" ] ) ; then
 
289
    if [ -s $rev_file ] ; then
 
290
        echo "Error: file with revision data already exists"
 
291
        exit 1
 
292
    fi
 
293
else
 
294
    if [ ! -s $rev_file ] ; then
 
295
        echo "Error: file with revision data does not exist"
 
296
        exit 1
 
297
    fi
 
298
fi
 
299
 
 
300
case $command in
 
301
    check)
 
302
        do_check
 
303
        ;;
 
304
    update)
 
305
        do_update
 
306
        ;;
 
307
    add)
 
308
        [ "$do_all" ] && do_add_all || do_add_one
 
309
        ;;
 
310
    convert)
 
311
        do_convert
 
312
        ;;
 
313
esac
 
314
 
 
315
exit 0