One generate apt-ftparchive config; refactor, simplify
[git-tools-moved-to-github.git] / update-archive / update-archive.sh
index b642138..c99571a 100755 (executable)
@@ -1,9 +1,61 @@
 #!/bin/sh
-if test ! -f apt-ftparchive.conf.in; then
-       echo "$0: apt-ftparchive.conf.in must be located in current directory"
-       exit 1
+D0=`dirname $0`
+confdir=`cd $D0; pwd`
+
+usage()
+{
+    cat <<EOF
+Usage: update-archive.sh [OPTIONS]
+Options:
+        [--debian=distros]
+        [--ubuntu=distros]
+        [--suffix=dist-suffix]
+        [--noauto]
+        [--clear]
+EOF
+    exit $1
+}
+
+do_help=false
+clear=false
+noauto=false
+suffix=""
+while test $# -gt 0; do
+    case "$1" in
+        -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+        *) optarg= ;;
+    esac
+    case $1 in
+        --clear)
+            clear=true
+            ;;
+        --debian=*)
+            DEBIAN_DIST=$optarg
+            ;;
+        --ubuntu=*)
+            UBUNTU_DIST=$optarg
+            ;;
+        --suffix=*)
+            suffix="$optarg"
+            ;;
+        --noauto)
+            noauto=true
+            ;;
+        -*)
+            do_help=true
+            ;;
+    esac
+    shift
+done
+
+if $do_help; then
+       usage 1>&1
 fi
 
+if test ! -f ${confdir}/apt-ftparchive.conf.in; then
+       echo "$0: ${condir}/apt-ftparchive.conf.in not found"
+       exit 1
+fi
 if test ! -x /usr/bin/apt-ftparchive; then
        echo "$0: /usr/bin/apt-ftparchive missing. Install apt-utils"
        exit 1
@@ -11,19 +63,46 @@ fi
 
 # gpg -a -d -o Release.gpg Release
 
-confdir=`pwd`
-
 architectures="i386 amd64"
 
-architectures="i386 amd64"
-if [ "$1" == "" ]; then 
-       DISTRIBUTIONS="ubuntu/lucid ubuntu/natty ubuntu/oneiric ubuntu/precise ubuntu/quantal debian/wheezy debian/squeeze debian/lenny"
+if test "$DEBIAN_DIST"; then
+       for d in $DEBIAN_DIST; do
+               DISTRIBUTIONS="$DISTRIBUTIONS debian/$d"
+       done
+fi
+if test "$UBUNTU_DIST"; then
+       for d in $UBUNTU_DIST; do
+               DISTRIBUTIONS="$DISTRIBUTIONS ubuntu/$d"
+       done
+fi
+
+# All distributions we know of
+ALLD="ubuntu/lucid ubuntu/natty ubuntu/oneiric ubuntu/precise ubuntu/quantal ubuntu/raring ubuntu/saucy ubuntu/trusty ubuntu/utopic debian/jessie debian/wheezy debian/squeeze debian/lenny"
+
+if test -z "$DISTRIBUTIONS"; then
+       DISTRIBUTIONS=$ALLD
 else
-       DISTRIBUTIONS=$1
+       for d in $DISTRIBUTIONS; do
+               bad=true
+               for y in $ALLD; do
+                       if test "$d" = "$y"; then
+                               bad=false
+                       fi
+               done
+               if $bad; then
+                       echo "No such distro $d"
+                       exit 1
+               fi
+       done
 fi
 
+echo "DISTRIBUTIONS=$DISTRIBUTIONS"
 for vdist in $DISTRIBUTIONS ; do
        dist=`basename $vdist`
+       fdist=${dist}
+       if test -n "${suffix}"; then
+               fdist="${fdist}-${suffix}"
+       fi
        vendor=`dirname $vdist`
        ftpdir=/home/ftp/pub/$vendor
        if test ! -d $ftpdir; then
@@ -31,15 +110,17 @@ for vdist in $DISTRIBUTIONS ; do
                exit 1
        fi
        cd $ftpdir
-       test -d tmp || mkdir tmp
+       mkdir -p tmp
        # Uncomment to clean the .db (cache)
-       # rm tmp/*
+       if $clear; then
+               rm tmp/*
+       fi
 
        sections=""
        for section in main restricted; do
                # Prepare pool
-               d=pool/dists/$dist/$section
-               if test ! -d $d; then mkdir -p $d; fi
+               d=pool/dists/$fdist/$section
+               mkdir -p $d
                mkdir -p $d/source
                # Remove invalid symlinks (source, i386, amd64,..)
                for l in $d/*/*; do
@@ -79,7 +160,6 @@ for vdist in $DISTRIBUTIONS ; do
                                fi
                        fi
                done
-               # ${confdir}/symclean.sh $d
 
                rm -f $d/Release
                if $has_packages; then
@@ -89,53 +169,42 @@ for vdist in $DISTRIBUTIONS ; do
                                sections="$sections $section"
                        fi
                        for arch in $architectures; do
-                               d=dists/$dist/$section/binary-$arch
-                               if test ! -d $d; then mkdir -p $d; fi
-                               echo "Archive: $dist" >$d/Release
+                               d=dists/$fdist/$section/binary-$arch
+                               mkdir -p $d
+                               echo "Archive: $fdist" >$d/Release
                                echo "Component: $section" >>$d/Release
-                               echo 'Origin: Indexdata' >>$d/Release
+                               echo 'Origin: Index Data' >>$d/Release
                                echo "Architecture: $arch" >>$d/Release
                        done
-                       d=dists/$dist/$section/source
-                       if test ! -d $d; then mkdir -p $d; fi
-                       echo "Archive: $dist" >$d/Release
+                       d=dists/$fdist/$section/source
+                       mkdir -p $d
+                       echo "Archive: $fdist" >$d/Release
                        echo "Component: $section" >>$d/Release
-                       echo 'Origin: Indexdata' >>$d/Release
+                       echo 'Origin: Index Data' >>$d/Release
                        echo 'Architecture: source' >>$d/Release
                fi
        done
-       # generate
-       echo "Begin Generate $dist: $sections"
-       F=apt-ftparchive.conf
-       sed "s/@dist@/$dist/g" <${confdir}/${F}.in | \
-               sed "s/@architectures@/${architectures}/g" | \
-               sed "s/@sections@/${sections}/g" > $F
-       # Don't know if clean is needed!
-       # apt-ftparchive clean apt-ftparchive.conf
-       apt-ftparchive generate apt-ftparchive.conf
-       echo "Done generate $dist: $sections"
-
-       # release
-       r=dists/$dist/Release
-       F=apt-release.conf
-       sed "s/@dist@/$dist/g" <${confdir}/${F}.in | \
-               sed "s/@architectures@/${architectures}/g" | \
-               sed "s/@sections@/${sections}/g" > $F
-       # Move Release file away while calling using release 
-       rm $r
-       apt-ftparchive -c $F release dists/$dist >tmp_Release
-       mv tmp_Release $r
-
-       # sign
-       if true; then
-               r=dists/$dist/Release
+       if test -n "$sections"; then
+               F=apt-ftparchive.conf
+               sed "s/@dist@/$fdist/g" <${confdir}/${F}.in | \
+                       sed "s/@architectures@/${architectures}/g" | \
+                       sed "s/@sections@/${sections}/g" > $F
+               apt-ftparchive generate apt-ftparchive.conf 2>&1
+               r=dists/$fdist/Release
+               rm -f $r # Move Release file away while calling using release
+               apt-ftparchive -c $F release dists/$fdist >tmp_Release
+               if $noauto; then
+                       sed -e 's/^Suite:/NotAutomatic: yes\nButAutomaticUpgrades: yes\nSuite:/g' <tmp_Release >$r
+               else
+                       mv tmp_Release $r
+               fi
                rm -f ${r}.gpg
-               gpg --sign -u "Index Data" -ba -o ${r}.gpg dists/$dist/Release
+               gpg --sign -u "Index Data" -ba -o ${r}.gpg $r
        fi
 done
 # Local Variables:
 # mode:shell-script
-# sh-indentation: 2
+# sh-indentation: 8
 # sh-basic-offset: 8
 # End: