#!/bin/sh

set -e

DEBMIRROR=http://ftp.bg.debian.org/debian
DEBIAN_INSTALLER=${DEBMIRROR}/dists/unstable/main/debian-installer
CONF=conf
INDEXHTML=_index.html
SELF="${0##*/}"

###
update() {
for arch_di in alpha amd64 armel hppa hurd-i386 i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc; do
  curl -# ${DEBIAN_INSTALLER}/binary-${arch_di}/Packages.bz2 | bzcat > ${CONF}/di_${arch_di}_Packages
done

for arch in alpha amd64 armel hppa hurd-i386 i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc; do
  curl -# ${DEBMIRROR}/dists/unstable/main/binary-${arch}/Packages.bz2     | bzcat > ${CONF}/de_main_${arch}_Packages
  curl -# ${DEBMIRROR}/dists/unstable/contrib/binary-${arch}/Packages.bz2  | bzcat > ${CONF}/de_contrib_${arch}_Packages  
  curl -# ${DEBMIRROR}/dists/unstable/non-free/binary-${arch}/Packages.bz2 | bzcat > ${CONF}/de_non-free_${arch}_Packages
done

for src in main contrib non-free; do
  curl -# ${DEBMIRROR}/dists/unstable/${src}/source/Sources.bz2 | bzcat > ${CONF}/de_${src}_Sources;
done
}

checkconf() {
  if [ ! -f ${CONF}/de_main_Sources ]; then
      echo "$SELF -u"
      exit 1
  fi
  if [ ! -f ${CONF}/ara.config ]; then
      echo "no ara.config found"
      exit 2
  fi
}

###
general() {

checkconf

echo -e "How many fields are currently known by your Debian Package management System"
ara -config conf/ara.config -fields '*' -table 'source://' | head -2 | tail -1 | perl -ne 'for (split/\s|\s/) {print("$_\n") if (/^\w/)}' \
> 1.known_fields

echo -e "Native packages"
ara -config conf/ara.config -fields Package,Version -table '!version:/\-/' \
> 2.native_packages

echo -e "NMUed packages, i.e. -X.Y as debian revision"
ara -config conf/ara.config -fields Package,Version -table 'version:/\-[0-9]\.[0-9]$/' \
> 3.nmued_packages

echo -e "How many packages are Dm-Upload-Allowed"
ara -config conf/ara.config -fields Package,Maintainer -table 'Dm-Upload-Allowed:/yes/i' \
> 4.dm_upload_allowed

echo -e "Dm-Upload-Allowed and being NMUed"
ara -config conf/ara.config -fields Package,Version -table 'version:/\-[0-9]\.[0-9]$/ and Dm-Upload-Allowed:/yes/i' \
> 5.nmued_dm_upload_allowed

echo -e "Packages based on VCS snapshots"
ara -config conf/ara.config -fields Package,Version -table 'version:(cvs|svn|git|hg|mtn)' \
> 6.vcs_snapshot

echo -e "Projects hosted at debian.org"
ara -config conf/ara.config -fields Package,Version,Homepage -table 'homepage:/debian.org/' \
> 7.hosted_debian.org

echo -e "Fun with versions"
ara -config conf/ara.config -fields Package,Version -table 'version:/^[3-9][0-9][0-9][0-9][0-9][0-9]/ or version:/unoff/' \
> 8.funny_versions

echo -e "required+important"
ara -config conf/ara.config -fields Package:18,Version:14,Priority:9,Filename -table 'priority:(required|important)' \
> 9.required+important_binary

echo -e "packages in main"
ara -config conf/ara.config -fields Package:18,Version:14,Priority:9,Filename -table 'Filename:/^pool\/main/' \
> 10.main_binary

}

# sorted out
sorted() {

checkconf

echo -e "sorted/X-Vcs-Svn"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'X-Vcs-Svn:/[a-zA-Z0-9]/' > sorted/X-Vcs-Svn

echo -e "sorted/X-Vcs-Browser"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'X-Vcs-Browser:/[a-zA-Z0-9]/' > sorted/X-Vcs-Browser

echo -e "sorted/X-Collab-Maint"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'X-Collab-Maint:/[a-zA-Z0-9]/' > sorted/X-Collab-Maint

echo -e "sorted/Vcs-Browse"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Vcs-Browse:/[a-zA-Z0-9]/' > sorted/Vcs-Browse

echo -e "sorted/Url"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Url:/[a-zA-Z0-9]/' > sorted/Url

echo -e "sorted/Tads3-Version"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Tads3-Version:/[a-zA-Z0-9]/' > sorted/Tads3-Version

echo -e "sorted/Tads2-Version"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Tads2-Version:/[a-zA-Z0-9]/' > sorted/Tads2-Version

echo -e "sorted/Original-Maintainer"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Original-Maintainer:/[a-zA-Z0-9]/' > sorted/Original-Maintainer

echo -e "sorted/Npp-Name"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Npp-Name:/[a-zA-Z0-9]/' > sorted/Npp-Name

echo -e "sorted/Npp-Mimetype"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Npp-Mimetype:/[a-zA-Z0-9]/' > sorted/Npp-Mimetype

echo -e "sorted/Npp-File"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Npp-File:/[a-zA-Z0-9]/' > sorted/Npp-File

echo -e "sorted/Npp-Description"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Npp-Description:/[a-zA-Z0-9]/' > sorted/Npp-Description

echo -e "sorted/Npp-Applications"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Npp-Applications:/[a-zA-Z0-9]/' > sorted/Npp-Applications

echo -e "sorted/Multi-Arch"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Multi-Arch:/[a-zA-Z0-9]/' > sorted/Multi-Arch

echo -e "sorted/Maintainer-Homepage"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Maintainer-Homepage:/[a-zA-Z0-9]/' > sorted/Maintainer-Homepage

echo -e "sorted/Gstreamer-Version"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Gstreamer-Version:/[a-zA-Z0-9]/' > sorted/Gstreamer-Version

echo -e "sorted/Gstreamer-Uri-Sources"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Gstreamer-Uri-Sources:/[a-zA-Z0-9]/' > sorted/Gstreamer-Uri-Sources

echo -e "sorted/Gstreamer-Uri-Sinks"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Gstreamer-Uri-Sinks:/[a-zA-Z0-9]/' > sorted/Gstreamer-Uri-Sinks

echo -e "sorted/Gstreamer-Encoders"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Gstreamer-Encoders:/[a-zA-Z0-9]/' > sorted/Gstreamer-Encoders

echo -e "sorted/Gstreamer-Elements"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Gstreamer-Elements:/[a-zA-Z0-9]/' > sorted/Gstreamer-Elements

echo -e "sorted/Gstreamer-Decoders"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Gstreamer-Decoders:/[a-zA-Z0-9]/' > sorted/Gstreamer-Decoders

echo -e "sorted/Comment"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Comment:/[a-zA-Z0-9]/' > sorted/Comment

echo -e "sorted/Bugs"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Bugs:/[a-zA-Z0-9]/' > sorted/Bugs

echo -e "sorted/Breaks"
ara -config conf/ara.config -fields Package:30,Version:20,Breaks:150 -table 'Breaks:/[a-zA-Z0-9]/' > sorted/Breaks

echo -e "sorted/Autobuild"
ara -config conf/ara.config -fields Package:30,Version:20,Maintainer:40,Uploaders:40 -table 'Autobuild:/[a-zA-Z0-9]/' > sorted/Autobuild
}

cleanup() {
echo -e "cleaning up debian-installer and debian files"
rm -f ${CONF}/di_* ${CONF}/de_*
}

htmlize() {
echo -e "htmlize, quick"
echo -e "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n" > ${INDEXHTML}
echo -e "<html>\n<head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><title></title>\n</head>\n<body>\n" >> ${INDEXHTML}
echo -e "You can download the whole survey as <a href=\"../survey.tar.gz\">survey.tar.gz</a>. \
<br>Processed are Packages and Sources for debian-installer and debian main/contrib/non-free from sid \
for each officially supported architecture. <br>Fields found in *_Release files are not processed. \
<p><a href=\"run_survey\">run_survey</a> script and <a href=\"${CONF}/ara.config\">ara.config</a> used.</p>" >> ${INDEXHTML}

echo -e "<p><a href=\"sorted\">Package statistics sorted out per field basis</a>. Only *interesting* fields are processed.</p> \
<p>General (not sorted) statistics:</p>" >> ${INDEXHTML}

for f in `ls | grep -v run_survey | grep -v ${INDEXHTML} | grep -v ${CONF} | grep -v sorted | sort -n`; do 
   echo "<br><a href=\"$f\">$f</a>" >> ${INDEXHTML};
done

echo `echo "<p>" && date && uname -a && echo "</p>"` >> ${INDEXHTML}

echo -e "\n</body>\n</html>" >> ${INDEXHTML}
}

usage() {
echo -e "\n${SELF} [option]
     -u update
     -c cleanup
     -g general stats
     -s sorted stats
     -b both stats
"
}

### main
case "$1" in
      -u)
        update 
	exit 0
        ;;
      -c)
        cleanup
        exit 0
        ;;
      -g)
        general
        exit 0
        ;;
      -s)
        sorted
        exit 0
        ;;
      -b)
        general
        sorted
        htmlize
	exit 0
	;;
      *)
        usage
	exit 0
esac
}
