From e496c1b52955887eb0a7544eb621e896c989c6ac Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Thu, 6 Mar 2008 08:17:33 +0000 Subject: [PATCH] * bootstrap: Use rsync to get translations. * doc/tar.texi: Minor change. * lib/.cvsignore: Update * po/.cvsignore: Update * src/system.c: Remove include setenv.h. * tests/atlocal.in (STAR_DATA_URL): Update. * tests/star/README: Update URL. --- ChangeLog | 10 ++++ bootstrap | 114 ++++++++++++++++++++-------------------------- doc/tar.texi | 1 + lib/.cvsignore | 2 + src/system.c | 1 - tests/atlocal.in | 2 +- tests/star/README | 2 +- 7 files changed, 64 insertions(+), 68 deletions(-) diff --git a/ChangeLog b/ChangeLog index c2eec4d..83a613f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2008-03-06 Sergey Poznyakoff + + * bootstrap: Use rsync to get translations. + * doc/tar.texi: Minor change. + * lib/.cvsignore: Update + * po/.cvsignore: Update + * src/system.c: Remove include setenv.h. + * tests/atlocal.in (STAR_DATA_URL): Update. + * tests/star/README: Update URL. + 2008-02-09 Sergey Poznyakoff * doc/tar.texi: Fix a typo. Reported by Denis Excoffier. diff --git a/bootstrap b/bootstrap index a318f68..a967cc7 100755 --- a/bootstrap +++ b/bootstrap @@ -49,7 +49,7 @@ Options: --force Attempt to bootstrap even if the sources seem not to have been checked out. --skip-po Do not download po files. - --update-po[=LANG] Update po file(s) and exit. + --update-po Update po files and exit. --cvs-user=USERNAME Set the CVS username to be used when accessing the paxutils repository. @@ -116,11 +116,13 @@ gnulib_modules= # Any gnulib files needed that are not in modules. gnulib_files= -# Translation Project URL, for the registry of all projects -# and for the translation-team master directory. -tp_url() { - echo "http://translationproject.org/domain/$1.html" -} +# The command to download all .po files for a specified domain into +# a specified directory. Fill in the first %s is the domain name, and +# the second with the destination directory. Use rsync's -L and -r +# options because the latest/%s directory and the .po files within are +# all symlinks. +po_download_command_format=\ +"rsync -Lrtvz 'translationproject.org::tp/latest/%s/' '%s'" extract_package_name=' /^AC_INIT(/{ @@ -223,78 +225,60 @@ echo "$0: Bootstrapping CVS $package..." # Get translations. -get_translations() { +download_po_files() { subdir=$1 domain=$2 - po_file=$3 - - case $WGET_COMMAND in - '') - echo "$0: wget not available; skipping translations";; - ?*) - url=`tp_url $domain` - baseurl=`expr "$url" : '\(.*\)/.*'` - echo "$0: getting translations into $subdir for $domain..." && - case $po_file in - '') (cd $subdir && rm -f dummy `ls | sed -n '/\.gmo$/p; /\.po/p'`);; - esac && - - $WGET_COMMAND -O "$subdir/$domain.html" "$url" && - - sed -n 's|.*href="\(.*\)/\([^/][^/]*\)/'"$domain"'-\([^/"]*\)\.[^."]*\.po".*|\2:\3:\1|p' <"$subdir/$domain.html" | - sort -t: -k 1,1 -k 2,2n -k2,2 -k3,3n -k3,3 -k4,4n -k4,4 -k5,5n -k5.5 | - awk -F: ' - { if (lang && $1 != lang) print lang, ver, $3 } - { lang = $1; ver = $2 } - END { if (lang) print lang, ver, $3 } - ' | awk -v domain="$domain" -v baseurl="$baseurl" -v subdir="$subdir" \ - -v po_file="$po_file" ' - { - lang = $1 - if (po_file && po_file != (lang ".po")) next - ver = $2 - printf "{ $WGET_COMMAND -O %s/%s.po %s/%s/%s/%s-%s.%s.po &&\n", subdir, lang, baseurl, $3, lang, domain, ver, lang - printf " msgfmt -c -o /dev/null %s/%s.po || {\n", subdir, lang - printf " echo >&2 '\'"$0"': omitting translation for %s'\''\n", lang - printf " rm -f %s/%s.po; }; } &&\n", subdir, lang - } - END { print ":" } - ' | WGET_COMMAND="$WGET_COMMAND" sh - ;; - esac && - ls "$subdir"/*.po 2>/dev/null | - sed 's|.*/||; s|\.po$||' >"$subdir/LINGUAS" && - rm -f "$subdir/$domain.html" + echo "$0: getting translations into $subdir for $domain..." + cmd=`printf "$po_download_command_format" "$domain" "$subdir"` + eval "$cmd" } -case `wget --help` in -*'--no-cache'*) - WGET_COMMAND='wget -nv --no-cache';; -*'--cache=on/off'*) - WGET_COMMAND='wget -nv --cache=off';; -*'--non-verbose'*) - WGET_COMMAND='wget -nv';; -*) - WGET_COMMAND='';; -esac +# Download .po files to $po_dir/.reference and copy only the new +# or modified ones into $po_dir. Also update $po_dir/LINGUAS. +update_po_files() { + # Directory containing primary .po files. + # Overwrite them only when we're sure a .po file is new. + po_dir=$1 + domain=$2 + + # Download *.po files into this dir. + # Usually contains *.s1 checksum files. + ref_po_dir="$po_dir/.reference" + + test -d $ref_po_dir || mkdir $ref_po_dir || return + download_po_files $ref_po_dir $domain \ + && ls "$ref_po_dir"/*.po 2>/dev/null | + sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" + + langs=`cd $ref_po_dir && echo *.po|sed 's/\.po//g'` + test "$langs" = '*' && langs=x + for po in `cd $ref_po_dir && echo *.po|sed 's/\.po//g'`; do + case $po in x) continue;; esac + new_po="$ref_po_dir/$po.po" + cksum_file="$ref_po_dir/$po.s1" + if ! test -f "$cksum_file" || + ! test -f "$po_dir/$po.po" || + ! sha1sum -c --status "$cksum_file" < "$new_po" > /dev/null; then + echo "updated $po_dir/$po.po..." + cp "$new_po" "$po_dir/$po.po" && sha1sum < "$new_po" > "$cksum_file" + fi + done +} case $DOWNLOAD_PO in 'skip') ;; '') - get_translations po $package || exit + if test -d po; then + update_po_files po $package || exit + fi ;; 'only') - get_translations po $package - exit - ;; -*.po) - get_translations po $package "$DOWNLOAD_PO" + if test -d po; then + update_po_files po $package || exit + fi exit ;; -*) - get_translations po $package "${DOWNLOAD_PO}.po" - exit esac # Get paxutils files. diff --git a/doc/tar.texi b/doc/tar.texi index 4e38215..29fe5aa 100644 --- a/doc/tar.texi +++ b/doc/tar.texi @@ -1765,6 +1765,7 @@ use @w{@kbd{tar --list --verbose}} to list them correctly. @node going further @section Going Further Ahead in this Manual +@UNREVISED @FIXME{need to write up a node here about the things that are going to be in the rest of the manual.} diff --git a/lib/.cvsignore b/lib/.cvsignore index 6f13217..0290a6e 100644 --- a/lib/.cvsignore +++ b/lib/.cvsignore @@ -87,6 +87,7 @@ getopt.h getopt.in.h getopt1.c getopt_int.h +getpagesize.c getpagesize.h gettext.h gettime.c @@ -196,6 +197,7 @@ streq.h strerror.c string.h string.in.h +strings.in.h stripslash.c strncasecmp.c strndup.c diff --git a/src/system.c b/src/system.c index fb5a8fa..e57e6da 100644 --- a/src/system.c +++ b/src/system.c @@ -17,7 +17,6 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include -#include #include "common.h" #include diff --git a/tests/atlocal.in b/tests/atlocal.in index f095080..380cac0 100644 --- a/tests/atlocal.in +++ b/tests/atlocal.in @@ -13,7 +13,7 @@ if test -z "$TEST_DATA_DIR"; then TEST_DATA_DIR=$abs_builddir fi -STAR_DATA_URL=http://download.berlios.de/pub/star/testscripts +STAR_DATA_URL=ftp://ftp.berlios.de/pub/star/testscripts if test -z "$STAR_TESTSCRIPTS"; then STAR_TESTSCRIPTS=$TEST_DATA_DIR fi diff --git a/tests/star/README b/tests/star/README index e4be22f..e247ff4 100644 --- a/tests/star/README +++ b/tests/star/README @@ -1,6 +1,6 @@ This directory contains scripts for testing GNU tar using star "test archives". The archives themselves can be obtained -from http://download.berlios.de/pub/star/testscripts. +from ftp://ftp.berlios.de/pub/star/testscripts. These tests are disabled by default. There are two ways to run them. The simplest is by `make check-full' command. It requires wget -- 2.44.0