This patch did not trigger a lot of reactions.....except immediately after its publication. We had a few exchanges on IRC.
Joey was concerned about the increased size of countrychooser. Below are the facts:
Without the patch: new debian package, version 2.0. size 44080 bytes: control archive= 43192 bytes. 349 bytes, 11 lines control 5248 bytes, 203 lines * postinst #!/bin/sh 172132 bytes, 294 lines templates Installed-Size: 200
With the patch:
new debian package, version 2.0. size 44998 bytes: control archive= 43261 bytes. 349 bytes, 11 lines control 5642 bytes, 223 lines * postinst #!/bin/sh 172132 bytes, 294 lines templates Installed-Size: 260
I think you get the point-->Installed-Size grows up by 60kb which could make the root floppy too big.
Package with patch contains 12 new small files and new directory. Each of them use 4k of disk space. I made new patch (attached). With this patch package will contain only one file for all short lists.
This is why I suggest delaying this change for post beta4.
-- Eugeniy Meshcheryakov
Kyiv National Taras Shevchenko University Information and Computing Centre http://icc.univ.kiev.ua
Index: countrychooser/debian/postinst
===================================================================
--- countrychooser/debian/postinst (revision 13691)
+++ countrychooser/debian/postinst (working copy)
@@ -18,6 +18,7 @@
# This is the iso_3166.tab file location
ISO3166TAB=/usr/share/iso-codes/iso_3166.tab
SUPPORTEDLOCALES=/etc/SUPPORTED-short
+SHORTLISTS=/etc/shortlists
for list in $ISO3166TAB ; do
if [ -f "$list" ]; then
@@ -60,6 +61,33 @@
fi
}
+cat_shortlist() {
+ (out = ""
+ IFS='
+'
+ while read line; do
+ if $(echo "$line" | grep -q "^:$1$"); then
+ out=1
+ elif $(echo "$line" | grep -q "^:"); then
+ out=""
+ elif [ "$out" ]; then
+ echo "$line"
+ fi
+ done
+ ) < $SHORTLISTS
+}
+
+loccountry2code() {
+ COUNTRYNAME=$(echo "$1" | sed "s/^$INDENT//" | sed 's/\\,/,/g')
+ line=`cat_shortlist $2| grep "$COUNTRYNAME$"`
+ if [ -n "$line" ]; then
+ set $line
+ if [ -n "$1" ]; then
+ echo "$1"
+ fi
+ fi
+}
+
# First grab back the country we got from languagechooser
# (or from elsewhere) and populate the debconf database with
# it so that it becomes the default choice
@@ -97,6 +125,16 @@
# If present, keep track of charset or modifier we got from languagechooser
EXTRA_LANGUAGECHOOSER=`echo $DEFAULTLOCALE | sed -e 's/[EMAIL PROTECTED]//'`
+FIRST_LANG=$(echo $LANGUAGELIST | sed -e 's/:.*$//')
+
+if grep -q "^:$FIRST_LANG$" $SHORTLISTS; then
+ use_lang=$FIRST_LANG
+elif grep -q "^:$LANGUAGE$" $SHORTLISTS; then
+ use_lang=$LANGUAGE
+else
+ use_lang=""
+fi
+
# At this step we should have either xx, or xx_YY in LANGNAME
if [ "$LANGUAGE" != "C" ]; then
STATE=1
@@ -112,35 +150,35 @@
askedshort=0
fullprio=medium
else
- # Build a short list of supported locales fo
- # the language.
- SHORTLIST=''
- for code in $(grep -e "^$LANGUAGE" $SUPPORTEDLOCALES | cut -b 4-5 | sort | uniq); do
- line=`grep -e "^$code" $ISO3166TAB`
- if [ "$line" ] ; then
- OLD_IFS="$IFS"
- IFS=' '
- set $line
- IFS="$OLD_IFS"
- if [ "$2" ]; then
- countryname=$(echo "${INDENT}$2" | sed 's/,/\\,/g');
- fi
+ if [ "$use_lang" ]; then
+ # Build a short list of supported locales fo
+ # the language.
+ OLD_IFS="$IFS"
+ IFS='
+'
+ COUNTRIES=$(cat_shortlist $use_lang | sed -e 's/^.* //');
+ SHORTLIST=""
+ for name in $COUNTRIES; do
if [ ! -z "${SHORTLIST}" ]; then
SHORTLIST="${SHORTLIST}, "
fi
+ countryname=$(echo "${INDENT}${name}" | sed -e 's/,/\\,/')
SHORTLIST="${SHORTLIST}${countryname}"
- fi
- done
- db_subst $shortlist SHORTLIST "${SHORTLIST}"
- db_subst $shortlist DEFAULTLOCALE "${DEFAULTLOCALE}"
- db_input critical $shortlist || [ $? -eq 30 ]
- askedshort=1
+ done
+ IFS="$OLD_IFS"
+ db_subst $shortlist SHORTLIST "${SHORTLIST}"
+ db_subst $shortlist DEFAULTLOCALE "${DEFAULTLOCALE}"
+ db_input critical $shortlist || [ $? -eq 30 ]
+ askedshort=1
+ else
+ asksedshort=0
+ fi
fi
;;
2)
db_get $shortlist
if [ "$askedshort" = 1 ] && [ "$RET" != "other" ]; then
- COUNTRYCODE="$(country2code "$RET")" || true
+ COUNTRYCODE="$(loccountry2code "$RET" $use_lang )" || true
if [ -n "$COUNTRYCODE" ]; then
break
fi
Index: countrychooser/debian/rules
===================================================================
--- countrychooser/debian/rules (revision 13691)
+++ countrychooser/debian/rules (working copy)
@@ -16,13 +16,14 @@
./get-SUPPORTED
# Build the templates
./mktemplates
+ ./mkshort
touch build-stamp
clean:
dh_testdir
dh_testroot
rm -f build-stamp
- rm -rf debian/pobuild debian/iso-codes
+ rm -rf debian/pobuild debian/iso-codes debian/short-tmp
dh_clean debian/templates.tmp debian/templates debian/SUPPORTED-short
install: build
@@ -33,6 +34,7 @@
# The following while we have no other way to get SUPPORTED
# Should become useless when we will have it
install -m644 debian/SUPPORTED-short debian/$(PACKAGE)/etc/SUPPORTED-short
+ install -m644 debian/short-tmp/shortlists debian/$(PACKAGE)/etc/shortlists
# Build architecture-independent files here.
binary-indep: build install
Index: countrychooser/mkshort
===================================================================
--- countrychooser/mkshort (revision 0)
+++ countrychooser/mkshort (revision 0)
@@ -0,0 +1,56 @@
+#! /bin/sh
+
+set -e
+
+ISO3166TAB=/usr/share/iso-codes/iso_3166.tab
+SUPPORTED=/usr/share/i18n/SUPPORTED
+
+if [ ! -d debian/short-tmp ]; then
+ mkdir debian/short-tmp
+fi
+
+rm -f debian/short-tmp/*.tab
+rm -f debian/short-tmp/*.short
+
+for file in debian/po/*.po en.po; do
+ lang_variant=`basename $file .po`
+ lang=$(echo "$lang_variant" | sed -e 's/_.*$//')
+ tabfile=debian/short-tmp/$lang_variant.tab
+ # create TAB file for this language
+ msgconv debian/iso-codes/$lang_variant.po -t UTF-8 --stringtable-output | tail -n +3 | \
+ sed -e 's/" = "/ /' -e 's/^"//' -e 's/";$//' -e 's/$^$/\n/' | awk '/^.+$/{print}'> $tabfile
+ outfile=debian/short-tmp/$lang_variant.short
+ :>$outfile
+ (for code in $(grep -e "^$lang" $SUPPORTED | cut -b 4-5 | sort | uniq); do
+ line=`grep -e "^$code" $ISO3166TAB`
+ if [ "$line" ]; then
+ OLD_IFS="$IFS"
+ IFS=' '
+ set $line
+ IFS="$OLD_IFS"
+ if [ "$2" ]; then
+ translation=$(grep "^$2 " $tabfile| sed -e 's/^.* //')
+ if [ "$translation" ]; then
+ echo "$1 $translation" >> $outfile
+ else
+ echo "$1 $2" >> $outfile
+ fi
+ fi
+ fi
+ done)
+ if [ $(wc -l < $outfile) -le 1 ]; then
+ rm -f $outfile
+ fi
+done
+
+# make one file from parts
+
+SHORTLISTS=debian/short-tmp/shortlists
+:>$SHORTLISTS
+
+for file in debian/short-tmp/*.short; do
+ lang=`basename $file .short`
+ echo ":$lang" >> $SHORTLISTS
+ cat $file >> $SHORTLISTS
+done
+Property changes on: countrychooser/mkshort ___________________________________________________________________ Name: svn:executable + *

