Commit for fasolo
authorJoerg Jaspert <joerg@debian.org>
Sun, 30 Oct 2016 11:38:56 +0000 (12:38 +0100)
committerJoerg Jaspert <joerg@debian.org>
Sun, 30 Oct 2016 11:38:56 +0000 (12:38 +0100)
29 files changed:
.dotfiles/net:debian.org/host:fasolo/.muttrc.local [new file with mode: 0644]
.dotfiles/net:debian.org/host:fasolo/.signature [new file with mode: 0644]
.dotfiles/net:debian.org/host:fasolo/.toprc [new file with mode: 0644]
.dotfiles/net:debian.org/host:fasolo/bin/copy-changes.sh [new file with mode: 0755]
.dotfiles/net:debian.org/host:fasolo/bin/copy-slave.sh [new file with mode: 0755]
.dotfiles/net:debian.org/host:fasolo/bin/do-removals [new file with mode: 0755]
.dotfiles/net:debian.org/host:fasolo/bin/fullremovals.sh [new file with mode: 0755]
.dotfiles/net:debian.org/host:fasolo/bin/move-changes.sh [new file with mode: 0755]
.dotfiles/net:debian.org/host:fasolo/bin/moveit [new file with mode: 0755]
.dotfiles/net:debian.org/host:fasolo/bin/pkg [new file with mode: 0755]
.dotfiles/net:debian.org/host:fasolo/bin/priority [new file with mode: 0755]
.dotfiles/net:debian.org/host:fasolo/bin/removals.pl [new file with mode: 0755]
.dotfiles/net:debian.org/host:fasolo/bin/remove-slave.sh [new file with mode: 0755]
.dotfiles/net:debian.org/host:fasolo/bin/source-madison [new file with mode: 0755]
.dotfiles/net:debian.org/host:fasolo/lib/data.rb [new file with mode: 0644]
.dotfiles/net:debian.org/host:fasolo/lib/input.rb [new file with mode: 0644]
.dotfiles/net:debian.org/host:fasolo/lib/output.rb [new file with mode: 0644]
.dotfiles/net:debian.org/host:fasolo/public_html/removals/.htaccess [new file with mode: 0644]
.dotfiles/net:debian.org/host:fasolo/tp/abi.txt [new file with mode: 0644]
.dotfiles/net:debian.org/host:fasolo/tp/cdbs.txt [new file with mode: 0644]
.dotfiles/net:debian.org/host:fasolo/tp/enhance_copyright.txt [new file with mode: 0644]
.dotfiles/net:debian.org/host:fasolo/tp/fdl.txt [new file with mode: 0644]
.dotfiles/net:debian.org/host:fasolo/tp/gpl_version.txt [new file with mode: 0644]
.dotfiles/net:debian.org/host:fasolo/tp/missing_licenses.txt [new file with mode: 0644]
.dotfiles/net:debian.org/host:fasolo/tp/php.txt [new file with mode: 0644]
.dotfiles/net:debian.org/host:fasolo/tp/rfc.txt [new file with mode: 0644]
.dotfiles/net:debian.org/host:fasolo/tp/ssl.txt [new file with mode: 0644]
.dotfiles/net:debian.org/host:fasolo/tp/symbols.txt [new file with mode: 0644]
.dotfiles/net:debian.org/host:fasolo/tp/wrong_license_pointer.txt [new file with mode: 0644]

diff --git a/.dotfiles/net:debian.org/host:fasolo/.muttrc.local b/.dotfiles/net:debian.org/host:fasolo/.muttrc.local
new file mode 100644 (file)
index 0000000..424588b
--- /dev/null
@@ -0,0 +1 @@
+my_hdr From: Joerg Jaspert <ftpmaster@debian.org>
diff --git a/.dotfiles/net:debian.org/host:fasolo/.signature b/.dotfiles/net:debian.org/host:fasolo/.signature
new file mode 100644 (file)
index 0000000..ce4cecf
--- /dev/null
@@ -0,0 +1,2 @@
+bye Joerg
+<madduck> and yes, the ftpmasters are not the most clueful people
diff --git a/.dotfiles/net:debian.org/host:fasolo/.toprc b/.dotfiles/net:debian.org/host:fasolo/.toprc
new file mode 100644 (file)
index 0000000..8e8a212
--- /dev/null
@@ -0,0 +1,2 @@
+AbCDgHIjklMnoTP|qrsuzyV{EFWX
+5
diff --git a/.dotfiles/net:debian.org/host:fasolo/bin/copy-changes.sh b/.dotfiles/net:debian.org/host:fasolo/bin/copy-changes.sh
new file mode 100755 (executable)
index 0000000..f176a72
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh
+#
+# move changes file and subfiles
+
+set -e
+
+CHANGES="$1"
+CHANGES_DIR=`dirname "$1"`
+CHANGES_FILE=`basename "$1"`
+DEST="$2"
+
+sed '1,/Files:/d' "$CHANGES" | sed '/BEGIN PGP SIGNATURE/,$d' \
+| while read MD SIZE foo bar NAME; do
+    if [ -z "$NAME" ]; then
+      continue
+    fi
+    if [ -f "$CHANGES_DIR/$NAME" ]; then
+      cp "$CHANGES_DIR/$NAME" "$DEST" || exit 1
+    fi
+  done
+cp "$CHANGES" "$DEST"
diff --git a/.dotfiles/net:debian.org/host:fasolo/bin/copy-slave.sh b/.dotfiles/net:debian.org/host:fasolo/bin/copy-slave.sh
new file mode 100755 (executable)
index 0000000..be58dcb
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh
+#
+# copy changes file and subfiles
+
+set -e
+
+CHANGES="$1"
+CHANGES_DIR=`dirname "$1"`
+CHANGES_FILE=`basename "$1"`
+DEST="/home/joerg/slave_new"
+
+sed '1,/Files:/d' "$CHANGES" | sed '/BEGIN PGP SIGNATURE/,$d' \
+| while read MD SIZE foo bar NAME; do
+    if [ -z "$NAME" ]; then
+      continue
+    fi
+    if [ -f "$CHANGES_DIR/$NAME" ]; then
+      install -m 0644 "$CHANGES_DIR/$NAME" "$DEST" || exit 1
+    fi
+  done
+cp "$CHANGES" "$DEST"
+if [ -f "$(basename $CHANGES .changes).dak" ]; then
+  install -m 0666 "$(basename $CHANGES .changes).dak" "$DEST"
+fi
+
diff --git a/.dotfiles/net:debian.org/host:fasolo/bin/do-removals b/.dotfiles/net:debian.org/host:fasolo/bin/do-removals
new file mode 100755 (executable)
index 0000000..a3bf9ed
--- /dev/null
@@ -0,0 +1,209 @@
+#!/usr/bin/ruby
+
+# Extract ftp-master todo lists from the ftp.debian.org buglist
+# Copyright (C) 2007 Joerg Jaspert <joerg@ganneff.de>
+# Based on a perl script (C) 2004 Jeroen van Wolffelaar <jeroen@wolffelaar.nl>
+# (about nothing from that is still alive here)
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; only version 2.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+#require 'profile'
+# Add a path for own lib stuff
+# $: << File.dirname(__FILE__)
+$: << "~/lib"
+
+require "yaml"
+require "logger"
+require 'soap/rpc/driver'
+require "date"
+require "output.rb"
+require "input.rb"
+require "data.rb"
+
+# Logging, default is error level. Available is debug, info, warn, error and fatal
+$LOG = Logger.new(STDERR)
+#$LOG.level = Logger::DEBUG
+#$LOG.level = Logger::INFO
+$LOG.level = Logger::ERROR
+
+# The following option lets it produce lines like
+# I, [18.12.2006 12:41:23] [#11430]  INFO -- : vcs.rb (C) 2007 by Joerg Jaspert starting...
+$LOG.datetime_format = "%d.%m.%Y %H:%M:%S] ["
+
+$LOG.info("do-removals starting")
+
+OUT = "/home/joerg/data/"
+WWW = "/srv/ftp.debian.org/web"
+#WWW = "/home/joerg/public_html/www"
+SUITES = ['stable', 'testing', 'unstable', 'experimental']
+
+# set this to false if you run it on a host that has no projectb.
+# you need to have datafiles prepared by source-madison then!
+PROJECTB = true
+
+# SOAP interface data
+HOST = "bugs.debian.org"
+PORT = 80
+SERVER="http://#{HOST}:#{PORT}/cgi-bin/soap.cgi"
+NS = 'Debbugs/SOAP/'
+
+# What kind of bugs do we look for?
+QUERY = ['package', 'ftp.debian.org', 'status', 'open']
+
+drv = SOAP::RPC::Driver.new(SERVER, NS)
+drv.wiredump_dev = STDOUT if $DEBUG
+drv.add_method('get_status','bugnumber')
+drv.add_method('get_bugs','keyparam')
+
+bugs = Array.new
+
+$LOG.debug("Querying SOAP interface")
+bugs = get_bug_data(HOST, PORT, SERVER, NS, QUERY, drv)
+
+File.open("#{WWW}/removals.html", "w") do |f|
+  html = Removal_html.new("none")
+  f.puts html.header
+  f.puts html.toggle_all
+  row_number = 0
+
+  if PROJECTB
+    $LOG.info("Connecting to database")
+    require 'dbi'
+    db = Db.new("projectb")
+  else # if PROJECTB
+    $LOG.info("Loading suite data")
+
+    suitedata = Hash.new
+    SUITES.each do |suite|
+      $LOG.debug("suite #{suite}")
+      suitedata[suite] = YAML::load( File.open( "#{OUT}/#{suite}.yaml" ) )
+    end
+  end # if PROJECTB
+
+  bugs.each do |bug|
+    # easy handle
+    bugnum   = bug["bugnr"]
+    p        = bug["package"]
+    reason   = bug["reason"]
+    date     = bug["date"]
+    tags     = bug["tags"]
+    merged   = bug["merged"]
+    severity = bug["severity"]
+    dist     = bug["dist"]
+    arch     = bug["arch"]
+    origin   = bug["origin"]
+
+    html.set_tags(tags)
+
+    $LOG.debug("Bug #{bugnum}")
+
+    if PROJECTB
+      # first we have to find out the data about the package
+      # well, basically only "do we know it" and "which version on which arch
+
+      # first find out the id for the suite the bug is against
+      suite = db.suite(dist)
+
+      if  suite == 0
+        $LOG.warn("Broken suite #{suite} for package #{p}: #{dist}")
+        next
+      end
+
+      # We should find out if we have a source or a binary package at this point
+      helper = Array.new
+
+      data = Pdata.new(db)
+      p.each do |pa|
+        data.add_package(pa, suite)
+      end
+
+      data.check_source_binaries(suite)
+
+      data.check_source(suite)
+
+      data.check_binaries(suite)
+
+    end # if PROJECTB
+
+    # we have the data, lets print the info.
+    f.puts html.row_start(row_number, tags, dist)
+
+    f.puts html.info_start
+
+    if not arch.nil?
+      $LOG.debug("Partial removal")
+      f.puts  html.partial(arch.join(","))
+    end
+
+    f.puts html.originator(origin)
+
+    f.puts html.infolinks(bugnum, tags, p)
+
+    f.puts html.info_end
+
+    f.puts html.subject(reason, dist, data.get_package_names(","), bugnum)
+
+    known = true
+    # do we know anything about the package?
+    if PROJECTB
+      if not data.include?(p)
+        known = false
+        # we dont know about the package
+        $LOG.info("No data found, possibly unparseable bug title for #{p} in #{bugnum}")
+        f.puts "No data found for this package, possibly unparseable bug title or package name misspelt."
+      end # if suitedata[dist].include?(p)
+    else # PROJECTB
+      if not suitedata[dist].include?(p)
+        known = false
+        # we dont know about the package
+        $LOG.info("No data found, possibly unparseable bug title for #{p} in #{bugnum}")
+        f.puts "No data found for this package, possibly unparseable bug title or package name misspelt."
+      end # if suitedata[dist].include?(p)
+    end # if PROJECTB
+
+    if known
+      f.puts html.start_table
+
+      $LOG.debug("Looking at all binaries for #{p}")
+
+      if PROJECTB
+        f.puts data.binary_rows
+      else # PROJECTB
+        suitedata[dist][p]["binary"].each_pair do |name, binary|
+          f.puts html.binary_row(binary["name"], binary["version"], binary["arch"])
+        end
+      end # if PROJECTB
+      f.puts " </table>"
+      f.puts "</div>"
+      f.puts html.dak_cmd(bugnum, arch, reason, data.get_package_names(" "), data.nosource?, dist, data.binarylist(p))
+    else
+      f.puts "Miau"
+    end # if known
+
+    f.puts html.uploader(data.get_uploader)
+    f.puts " </div>"
+
+
+    row_number += 1
+  end # bugs.each
+  f.puts "</div>"
+
+  f.puts html.footer
+end # File.open
+
+$LOG.info("do-removals done")
+
+
+########################################################################
+########################################################################
diff --git a/.dotfiles/net:debian.org/host:fasolo/bin/fullremovals.sh b/.dotfiles/net:debian.org/host:fasolo/bin/fullremovals.sh
new file mode 100755 (executable)
index 0000000..5f458ae
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+cd /srv/ftp.debian.org/web
+
+cat removals-20*.txt > removals-full.txt
+cat removals.txt >> removals-full.txt
diff --git a/.dotfiles/net:debian.org/host:fasolo/bin/move-changes.sh b/.dotfiles/net:debian.org/host:fasolo/bin/move-changes.sh
new file mode 100755 (executable)
index 0000000..eb051da
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh
+#
+# move changes file and subfiles
+
+set -e
+
+CHANGES="$1"
+CHANGES_DIR=`dirname "$1"`
+CHANGES_FILE=`basename "$1"`
+DEST="$2"
+
+sed '1,/Files:/d' "$CHANGES" | sed '/BEGIN PGP SIGNATURE/,$d' \
+| while read MD SIZE foo bar NAME; do
+    if [ -z "$NAME" ]; then
+      continue
+    fi
+    if [ -f "$CHANGES_DIR/$NAME" ]; then
+      mv "$CHANGES_DIR/$NAME" "$DEST" || exit 1
+    fi
+  done
+mv "$CHANGES" "$DEST"
diff --git a/.dotfiles/net:debian.org/host:fasolo/bin/moveit b/.dotfiles/net:debian.org/host:fasolo/bin/moveit
new file mode 100755 (executable)
index 0000000..c5a8904
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+# Moves Packages from $2 to $3, if needed.
+# BE CAREFUL WITH IT!
+
+dak ls $1 -S -s $2 -f heidi| dak control-suite -a $3
diff --git a/.dotfiles/net:debian.org/host:fasolo/bin/pkg b/.dotfiles/net:debian.org/host:fasolo/bin/pkg
new file mode 100755 (executable)
index 0000000..91a7896
--- /dev/null
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+set -e
+
+dpkg-scanpackages . /dev/null > Packages
+dpkg-scansources . /dev/null > Sources
+gzip -c9 Packages > Packages.gz
+gzip -c9 Sources > Sources.gz
diff --git a/.dotfiles/net:debian.org/host:fasolo/bin/priority b/.dotfiles/net:debian.org/host:fasolo/bin/priority
new file mode 100755 (executable)
index 0000000..9bb017e
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+if [ $# -ne 1 ]; then
+   echo "Need one, and only one, argument, a package name"
+   exit 2
+fi
+for i in $(zcat /srv/ftp-master.debian.org/ftp/dists/sid/main/binary-i386/Packages.gz | grep-dctrl -F Package: '' -a -F Depends $1 -n -s Package - |paste -sd "  \n"); do
+       dak override $i | awk '{print $1 " " $8}'
+done |sort -k2
diff --git a/.dotfiles/net:debian.org/host:fasolo/bin/removals.pl b/.dotfiles/net:debian.org/host:fasolo/bin/removals.pl
new file mode 100755 (executable)
index 0000000..cd5d20b
--- /dev/null
@@ -0,0 +1,82 @@
+#! /usr/bin/perl
+
+#    removals - generate an RSS feed of removals from Debian
+#    (C) Copyright 2005 Tollef Fog Heen <tfheen@err.no>
+#
+#    This program is free software; you can redistribute it and/or
+#    modify it under the terms of the GNU General Public License
+#    version 2 as published by the Free Software Foundation.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#    General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program; if not, write to the Free Software
+#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+#    02111-1307 USA
+
+
+use strict;
+use warnings;
+
+use MIME::Base64 qw(encode_base64);
+use XML::RSS;
+use POSIX qw(strftime);
+use CGI qw/:standard/;
+
+open REMOVALS, "</srv/ftp.debian.org/web/removals.txt";
+
+my @removals;
+
+{           
+     local $/ = "=========================================================================\n=========================================================================";
+     @removals = reverse <REMOVALS>;
+}
+
+my $rss = new XML::RSS (version => '1.0');
+$rss->channel(
+             title        => "Removals from Debian",
+             link         => "http://ftp-master.debian.org/removals.txt",
+             description  => "List of all the removals from Debian's archives",
+             dc => {
+                 date       => POSIX::strftime ("%FT%R+00:00",gmtime()),
+                 subject    => "Removals from Debian",
+                 creator    => 'tfheen@debian.org',
+                 publisher  => 'joerg@debian.org',
+                 rights     => 'Copyright 2005, Tollef Fog Heen',
+                 language   => 'en-us',
+             },
+             syn => {
+                 updatePeriod     => "hourly",
+                 updateFrequency  => "1",
+                 updateBase       => "1901-01-01T00:00+00:00",
+             }
+             );
+
+for (0..15) {
+    my $i = $_;
+    my ($null, $date, $ftpmaster, $body, $reason);
+    $removals[$i] =~ s/=========================================================================//g;
+    $removals[$i] =~ m/\[Date: ([^]]+)\] \[ftpmaster: ([^]]+)\]/; 
+    $date = $1;
+    $ftpmaster = $2;
+    ($null, $body) = split /\n/, $removals[$i], 2;
+    chomp $body;
+    $body =~ m/---- Reason ---.*\n(.*)/;
+    $reason = $1;
+    my $link =  encode_base64($date . $ftpmaster);
+    chomp($link);
+
+    $rss->add_item(title       => "$reason",
+                   link        => "http://ftp-master.debian.org/removals.txt?" . $link,
+                   description => qq[&lt;pre&gt;$body&lt;/pre&gt;],
+                   dc => {
+                           creator => "$ftpmaster",
+                      }
+                 );
+
+}
+print $rss->as_string;
+
diff --git a/.dotfiles/net:debian.org/host:fasolo/bin/remove-slave.sh b/.dotfiles/net:debian.org/host:fasolo/bin/remove-slave.sh
new file mode 100755 (executable)
index 0000000..75a1fc8
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh
+#
+# remove changes file and subfiles
+
+set -e
+
+CHANGES="$1"
+CHANGES_DIR=`dirname "$1"`
+CHANGES_FILE=`basename "$1"`
+
+cd "/home/joerg/slave_new"
+
+sed '1,/Files:/d' "$CHANGES" | sed '/BEGIN PGP SIGNATURE/,$d' \
+| while read MD SIZE foo bar NAME; do
+    if [ -z "$NAME" ]; then
+      continue
+    fi
+    if [ -f "$CHANGES_DIR/$NAME" ]; then
+      rm "$CHANGES_DIR/$NAME" || exit 1
+    fi
+  done
+rm "$CHANGES"
+if [ -f "$(basename $CHANGES .changes).dak" ]; then
+  rm "$(basename $CHANGES .changes).dak"
+fi
diff --git a/.dotfiles/net:debian.org/host:fasolo/bin/source-madison b/.dotfiles/net:debian.org/host:fasolo/bin/source-madison
new file mode 100755 (executable)
index 0000000..70628c3
--- /dev/null
@@ -0,0 +1,136 @@
+#!/usr/bin/ruby
+
+# Extract source/package information used for the removals page
+#
+# Copyright (C) 2007 Joerg Jaspert <joerg@ganneff.de>
+# Based on a perl script (C) 2004 Jeroen van Wolffelaar <jeroen@wolffelaar.nl>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; only version 2.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+#require 'profile'
+# Add a path for own lib stuff
+$: << File.dirname(__FILE__)
+$: << File.dirname(__FILE__) + "/modules"
+
+require "yaml"
+require "logger"
+require "zlib"
+
+# Logging, default is info level. Available is debug, info, warn, error and fatal
+$LOG = Logger.new(STDERR)
+#$LOG.level = Logger::DEBUG
+#$LOG.level = Logger::INFO
+$LOG.level = Logger::WARN
+
+# The following option lets it produce lines like
+# I, [18.12.2006 12:41:23] [#11430]  INFO -- : vcs.rb (C) 2007 by Joerg Jaspert starting...
+$LOG.datetime_format = "%d.%m.%Y %H:%M:%S] ["
+
+$LOG.info("source-madison starting")
+
+OUT = "/home/joerg/data/"
+MIRROR = "/srv/ftp-master.debian.org/ftp/dists"
+
+
+SUITES = ['stable', 'testing', 'unstable', 'experimental']
+SECTIONS = ['main', 'contrib', 'non-free']
+ARCH = ['alpha', 'amd64', 'arm', 'hppa', 'i386', 'ia64', 'm68k', 'mips', 'mipsel', 'powerpc', 's390','sparc', 'hurd-i386']
+
+# to test:
+#SUITES = ['unstable', 'experimental']
+#SECTIONS = ['main']
+#ARCH = ['alpha', 'amd64']
+
+SUITES.each do |suite|
+  $LOG.info("Looking at suite #{suite}")
+  data=Hash.new
+  SECTIONS.each do |section|
+    $LOG.info("Looking at section #{section}")
+    $LOG.info("Using file #{MIRROR}/#{suite}/#{section}/source/Sources.gz")
+
+    package = ""
+    version = ""
+    Zlib::GzipReader.open("#{MIRROR}/#{suite}/#{section}/source/Sources.gz") do |gz|
+      gz.each do |line|
+        if line =~ /^Package:/
+          package = line.chomp.sub(/Package: /, "")
+          $LOG.debug("Looking at package #{package}")
+        elsif line =~ /^Version: /
+          version = line.chomp.sub(/Version: /, "")
+          $LOG.debug("It seems to have version #{version}")
+          data["#{package}"] = Hash.new
+          data["#{package}"]["binary"] = Hash.new
+          data["#{package}"]["binary"]["#{package}"] = Hash.new
+          data["#{package}"]["binary"]["#{package}"]["version"] = version
+          data["#{package}"]["binary"]["#{package}"]["name"] = package
+          data["#{package}"]["binary"]["#{package}"]["arch"] = Array.new
+          data["#{package}"]["binary"]["#{package}"]["arch"] << "source"
+        end
+      end
+    end
+
+    $LOG.info("Sources done, now looking at binary architectures")
+
+    ARCH.each do |arch|
+      $LOG.info("Looking at architecture #{arch}")
+      if File.exist?("#{MIRROR}/#{suite}/#{section}/binary-#{arch}/Packages.gz")
+        $LOG.info("Using file #{MIRROR}/#{suite}/#{section}/binary-#{arch}/Packages.gz")
+
+        package = ""
+        version = ""
+        source = ""
+        Zlib::GzipReader.open("#{MIRROR}/#{suite}/#{section}/binary-#{arch}/Packages.gz") do |gz|
+          gz.each do |line|
+            if line =~ /^Package:/
+              package = line.chomp.sub(/Package: /, "")
+              $LOG.debug("Looking at package #{package}")
+            elsif line =~ /^Source: /
+              source = line.chomp.sub(/Source: /, "")
+              source.sub!(/ \(.*/, "")
+              $LOG.debug("which has source #{source}")
+            elsif line =~ /^Architecture: /
+              arch = line.chomp.sub(/Architecture: /, "")
+              $LOG.debug("and is architecture #{arch}")
+            elsif line =~ /^Version: /
+              version = line.chomp.sub(/Version: /, "")
+              $LOG.debug("and version #{version}")
+              $LOG.debug("faking package to #{package} due to \"no source found\"")
+              source = package if source.empty?
+              
+              if data[source].nil?
+                data[source] = Hash.new
+                data[source]["binary"] = Hash.new
+                data[source]["binary"]["#{package}"] = Hash.new
+                data[source]["binary"]["#{package}"]["arch"] = Array.new
+              end
+              data[source]["binary"]["#{package}"] = Hash.new if data[source]["binary"]["#{package}"].nil?
+              data[source]["binary"]["#{package}"]["arch"] = Array.new if data[source]["binary"]["#{package}"]["arch"].nil?
+              data[source]["binary"]["#{package}"]["version"] = "#{version}"
+              data[source]["binary"]["#{package}"]["name"] = "#{package}"
+              data[source]["binary"]["#{package}"]["arch"] << arch unless data[source]["binary"]["#{package}"]["arch"].include?(arch)
+              source = ""
+            end
+          end
+        end # Zlib
+      else
+        $LOG.info("Package file #{MIRROR}/#{suite}/#{section}/binary-#{arch}/Packages.gz does not exist.")
+      end # if File.exist?
+    end # ARCH.each
+  end # SECTIONS.each
+    $LOG.info("All sources and architectures done, dumping data file")
+    File.open("#{OUT}/#{suite}.yaml", 'w') do |out|
+      YAML.dump(data, out)
+    end
+    $LOG.info("done")
+end
diff --git a/.dotfiles/net:debian.org/host:fasolo/lib/data.rb b/.dotfiles/net:debian.org/host:fasolo/lib/data.rb
new file mode 100644 (file)
index 0000000..d6af91d
--- /dev/null
@@ -0,0 +1,233 @@
+class Pdata
+  def initialize(dbh)
+    $LOG.debug("Initializing Pdata object")
+    @data = Hash.new
+    @helper = Array.new
+    @faked = Array.new
+    @db = dbh
+  end
+
+  def binary_rows()
+    text = ""
+    @helper.uniq!
+    @helper.each do |p|
+      $LOG.debug("Looking at row of package #{p}")
+      if @data.include?(p)
+        $LOG.debug("Which is included in @data")
+        @data[p].each do |unused, binaries|
+          $LOG.debug("And has entry #{binaries}")
+          binaries.each do |name, binary|
+#            text+= "YAML:\n"
+#            text+= YAML::dump(binary)
+#            text+="YAML end\n\n"
+            if not binary.nil? and binary.include?("versions")
+              binary["versions"].each do |version|
+                text += "<tr>\n"
+                text += "   <td class=\"pkg-name\">#{name}</td>\n"
+                text += "   <td class=\"pkg-ver\">#{version}</td>\n"
+                binary[version]["arch"].uniq!
+                text += "   <td class=\"pkg-arches\">#{binary[version]["arch"].join(", ")}</td>\n"
+                text += "</tr>\n"
+              end # binary["versions"].each
+            end # if not
+          end # binaries.each
+        end # @data[p]
+      end # if @data
+    end # @helper.each
+    text
+  end # def binary_rows
+
+  def binarylist(package)
+    packagelist = Array.new
+    $LOG.debug("We are in binarylist now, looking for #{package}")
+    $LOG.debug(YAML::dump(@data))
+    package = "fakejj" if @data.has_key?("fakejj")
+    @data.each_pair do |unused, work|
+      $LOG.debug("Looking at #{unused} - #{work}")
+      $LOG.debug(YAML::dump(work))
+      work.each_pair do |name, tree|
+        $LOG.debug("Looking at entry #{name} with data #{tree}")
+        tree.each_pair do |paket, drop|
+          $LOG.debug("Paket: #{paket}")
+          packagelist << paket
+        end # tree.each
+      end # work.each
+    end # @data.each
+    $LOG.info("Debug packagelist: #{packagelist}")
+    packagelist.join(" ")
+  end # def binarylist
+
+  def add_package(p, suite)
+    $LOG.debug("Adding #{p} from #{suite}")
+    p.sub!(/ /, "")
+    if is_source?(p, suite)
+      @data["#{p}"] = Hash.new
+      @data["#{p}"]["binary"] = Hash.new
+      @data["#{p}"]["binary"]["#{p}"] = Hash.new
+      @data["#{p}"]["binary"]["#{p}"]["name"] = p
+      @helper << p
+    else
+      if not @data["fakejj"] then
+        @data["fakejj"] = Hash.new
+        @data["fakejj"]["binary"] = Hash.new
+      end
+      @data["fakejj"]["binary"]["#{p}"] = Hash.new
+      @data["fakejj"]["binary"]["#{p}"]["name"] = p
+      @helper << "fakejj"
+      @faked << p
+    end # if is_source?
+  end # add_package
+
+  def add_binary_to_source(bin, source)
+    $LOG.debug("Looking at bin #{bin}, source #{source}")
+    @data["#{source}"]["binary"]["#{bin}"] = Hash.new if @data["#{source}"]["binary"]["#{bin}"].nil?
+    @data["#{source}"]["binary"]["#{bin}"]["name"] = bin
+  end # add_binary_to_source
+
+  def check_source_binaries(suite)
+    #  look for all binary package names for the source packages
+    $LOG.debug("Checking all sources binaries in #{suite}")
+    tocheck = Array.new
+    @data.each do |name, entry|
+      if name == "fakejj"
+        $LOG.debug("Checking a fakejj package #{YAML::dump(entry)}")
+        entry["binary"].each do |nam, unused|
+          $LOG.debug("Now checking #{nam}")
+          tocheck << nam
+        end
+      else
+        tocheck << name
+      end
+      $LOG.debug("Now checking #{tocheck}")
+      tocheck.each do |check|
+        @db.query("SELECT DISTINCT b.package as package FROM binaries b, bin_associations ba, suite su, source s WHERE b.source = s.id AND su.id = ba.suite AND b.id = ba.bin AND s.source = ? AND su.id in (?)", check, suite) do |row|
+          add_binary_to_source(row["package"], name)
+          @helper << row["package"]
+        end
+      end
+    end # @data.each
+  end # check_source_binaries
+
+  def check_source(suite)
+    # look up information about the source itself
+    $LOG.debug("Looking up information about the source")
+    @data.each do |name, entry|
+      next if name == "fakejj"
+      @db.query("SELECT s.source, s.version, \'source\', su.suite_name, c.name, m.name FROM source s, suite su, src_associations sa, files f, location l, component c, maintainer m WHERE s.source = ? AND su.id = sa.suite AND s.id = sa.source AND s.file = f.id AND f.location = l.id AND l.component = c.id AND s.maintainer = m.id AND su.id IN (?)", name, suite) do |row|
+        @data["#{name}"]["binary"]["#{name}"] = Hash.new if @data["#{name}"]["binary"]["#{name}"].nil?
+        @data["#{name}"]["binary"]["#{name}"]["versions"] = Array.new if @data["#{name}"]["binary"]["#{name}"]["versions"].nil?
+        @data["#{name}"]["binary"]["#{name}"]["versions"] << row["version"] unless @data["#{name}"]["binary"]["#{name}"]["versions"].include?(row["version"])
+        @data["#{name}"]["binary"]["#{name}"][row["version"]] = Hash.new if @data["#{name}"]["binary"]["#{name}"][row["version"]].nil?
+        @data["#{name}"]["binary"]["#{name}"][row["version"]]["arch"] = Array.new if @data["#{name}"]["binary"]["#{name}"][row["version"]]["arch"].nil?
+        @data["#{name}"]["binary"]["#{name}"][row["version"]]["arch"] << "source"
+      end # db.query
+      @db.query("SELECT m.name,s.version,s.install_date FROM src_associations sa, source s JOIN fingerprint f ON (s.sig_fpr = f.id) JOIN maintainer m ON (s.maintainer = m.id) WHERE s.source = ? AND sa.source = s.id AND sa.suite IN (?)", name, suite) do |row|
+        @data["#{name}"]["binary"]["#{name}"][row["version"]]["uploader"] = row["name"]
+        @data["#{name}"]["binary"]["#{name}"][row["version"]]["uploaded"] = row["install_date"]
+      end # db.query
+    end # @data.each
+  end # check_source
+
+  def check_binaries(suite)
+    # look up information for all the binary packages
+    $LOG.debug("Lookup information about each binary")
+    @data.each do |name, entry|
+      if name == "fakejj"
+        @faked.each do |pack|
+          @db.query("SELECT b.package, b.version, a.arch_string, su.suite_name, c.name, m.name FROM binaries b, architecture a, suite su, bin_associations ba, files f, location l, component c, maintainer m WHERE b.package = ? AND a.id = b.architecture AND su.id = ba.suite AND b.id = ba.bin AND b.file = f.id AND f.location = l.id AND l.component = c.id AND b.maintainer = m.id AND su.id IN (?)", pack, suite) do |row|
+            @data["#{name}"]["binary"]["#{row["package"]}"] = Hash.new if @data["#{name}"]["binary"]["#{row["package"]}"].nil?
+            @data["#{name}"]["binary"]["#{row["package"]}"]["versions"] = Array.new if @data["#{name}"]["binary"]["#{row["package"]}"]["versions"].nil?
+            @data["#{name}"]["binary"]["#{row["package"]}"]["versions"] << row["version"] unless @data["#{name}"]["binary"]["#{row["package"]}"]["versions"].include?(row["version"])
+            @data["#{name}"]["binary"]["#{row["package"]}"][row["version"]] = Hash.new if @data["#{name}"]["binary"]["#{row["package"]}"][row["version"]].nil?
+            @data["#{name}"]["binary"]["#{row["package"]}"][row["version"]]["arch"] = Array.new if @data["#{name}"]["binary"]["#{row["package"]}"][row["version"]]["arch"].nil?
+            @data["#{name}"]["binary"]["#{row["package"]}"][row["version"]]["arch"] << row["arch_string"]
+          end
+        end
+      else
+        @helper.each do |p|
+          @db.query("SELECT b.package, b.version, a.arch_string, su.suite_name, c.name, m.name FROM binaries b, architecture a, suite su, bin_associations ba, files f, location l, component c, maintainer m WHERE b.package = ? AND a.id = b.architecture AND su.id = ba.suite AND b.id = ba.bin AND b.file = f.id AND f.location = l.id AND l.component = c.id AND b.maintainer = m.id AND su.id IN (?)", p, suite) do |row|
+            @data["#{name}"]["binary"]["#{row["package"]}"] = Hash.new if @data["#{name}"]["binary"]["#{row["package"]}"].nil?
+            @data["#{name}"]["binary"]["#{row["package"]}"]["name"] = row["package"]
+            @data["#{name}"]["binary"]["#{row["package"]}"]["versions"] = Array.new if @data["#{name}"]["binary"]["#{row["package"]}"]["versions"].nil?
+            @data["#{name}"]["binary"]["#{row["package"]}"]["versions"] << row["version"] unless @data["#{name}"]["binary"]["#{row["package"]}"]["versions"].include?(row["version"])
+            @data["#{name}"]["binary"]["#{row["package"]}"][row["version"]] = Hash.new if @data["#{name}"]["binary"]["#{row["package"]}"][row["version"]].nil?
+            @data["#{name}"]["binary"]["#{row["package"]}"][row["version"]]["arch"] = Array.new if @data["#{name}"]["binary"]["#{row["package"]}"][row["version"]]["arch"].nil?
+            @data["#{name}"]["binary"]["#{row["package"]}"][row["version"]]["arch"] << row["arch_string"]
+          end
+        end # @helper.each
+      end # if name=="fakejj"
+    end
+  end # check_binaries
+
+  def get_package_names(split)
+    ret = Array.new
+    @data.each do |name, unused|
+      if name == "fakejj"
+        @data["fakejj"]["binary"].each do |bin, unused|
+          ret << bin
+        end
+      else
+        ret << name
+      end
+    end # @data.each
+    $LOG.debug("ret is #{ret.join(split)}")
+    ret.join(split)
+  end # get_package_name
+
+  def get_uploader
+    ret = Array.new
+    @helper.uniq!
+    @helper.each do |p|
+      if @data.include?(p)
+        @data[p].each do |unused, binaries|
+          binaries.each do |name, binary|
+            if not binary.nil? and binary.include?("versions")
+              binary["versions"].each do |version|
+                if binary[version]["arch"].include?("source")
+                  ret << "Last upload: #{binary[version]["uploaded"]} with maintainer set to #{binary[version]["uploader"]}"
+                end # if binary
+              end # binary["versions"].each
+            end # if not
+          end # binaries.each
+        end # @data[p]
+      end # if @data
+    end # @helper.each
+    ret
+  end # get_uploader
+
+  def nosource?
+    true if @data.include?("fakejj")
+  end # nosource?
+
+  def dump
+    YAML::dump(@data)
+  end #dump
+
+  def include?(p)
+    p.each do |entry|
+      true if @data.include?(entry)
+    end
+  end # include?
+
+  # defined to let enumerable work
+  def each
+    @data.each do |name, binary|
+      yield name, binary
+    end
+  end
+
+  private
+
+  def is_source?(p, suite)
+    t = Array.new
+    @db.query("select version from source s, src_associations sa where s.source = ? and sa.source = s.id and sa.suite IN (?);", p, suite) do |row|
+      t << row
+    end
+    if t.length > 0
+      true
+    else
+      false
+    end
+  end # is_source?
+
+end # class
diff --git a/.dotfiles/net:debian.org/host:fasolo/lib/input.rb b/.dotfiles/net:debian.org/host:fasolo/lib/input.rb
new file mode 100644 (file)
index 0000000..307f16f
--- /dev/null
@@ -0,0 +1,107 @@
+def get_bug_data(host, port, server, ns, query, drv)
+  bugdata = Array.new
+  drv.get_status(drv.get_bugs(query)).each do |bugnum, res|
+    originator = res["originator"]
+    $LOG.debug("Looking at bug #{bugnum} from #{originator}")
+    res.package.split(/[ \t?,()]+/).each do |package|
+      if res.subject =~ /^RM:/
+        $LOG.debug("Subject matches, #{res.subject}")
+#        if res.subject.include?("[")
+        if res.subject =~ /^RM: ([0-9a-zA-Z, .\/+-]+) (\[.+\]) -- (.*)/
+          $LOG.debug("RE1 hit")
+          arch = $2
+          reason = $3
+          pack = $1.split(",")
+          if not arch.nil?
+            arch.delete!("[")
+            arch.delete!("]")
+            archs = arch.split(/ /)
+          end
+        elsif res.subject =~ /^RM: ([0-9a-zA-Z, .\/+-]+) -- (.*)/
+          $LOG.debug("RE2 hit")
+          reason = $2
+          arch = ""
+          pack = $1.split(",")
+        elsif res.subject =~ /^RM: ([0-9a-zA-Z, .\/+-]+) (.*)/
+          $LOG.debug("RE3 hit")
+          reason = $2
+          arch = ""
+          pack = $1.split(",")
+        elsif res.subject =~ /^RM: ([0-9a-zA-Z, .\/+-]+): (.*)/
+          $LOG.debug("RE4 hit")
+          reason = $2
+          arch = ""
+          pack = $1.split(",")
+        elsif res.subject =~ /^RM: ([0-9a-zA-Z, .\/+-]+)/
+          $LOG.debug("RE5 hit")
+          reason = ""
+          arch = ""
+          pack = $1.split(",")
+        else
+          $LOG.debug("NO RE hit")
+          reason = ""
+          arch = ""
+          pack = ""
+        end
+
+        dist="unstable"
+        if not pack.nil?
+          temp = Array.new
+          pack.each do |p|
+            if p.include?("/")
+              p =~ /([0-9a-zA-Z.-]+)\/(.*)/
+              temp << $1
+              dist = $2
+            else
+              temp << p
+            end # includes /
+          end # pack.each
+          pack = temp
+        end # if not pack.nil?
+
+        $LOG.debug("Found package #{pack}, arch #{arch}, reason #{reason}")
+
+        data             = Hash.new
+        data["package"]  = pack                                # array
+        data["bugnr"]    = bugnum                              # string/int
+        data["reason"]   = reason                              # string
+        data["date"]     = Time::at(res.date.to_i)             # string
+        data["tags"]     = res.tags.split(",")                 # string (oder array?)
+        data["merged"]   =     res.mergedwith.to_s.split(" ")     # string (oder array?)
+        data["severity"] = res.severity                        # string/int
+        data["dist"]     = dist                                # string
+        data["arch"]     = archs                               # array
+        data["origin"]   = originator                          # string
+        bugdata << data
+      end # if res.subject
+    end # res.package.split
+  end # drv.get_status
+  bugdata
+end # def get_bug_data
+
+
+class Db
+  def initialize(database, dbport=5433)
+    @dbh = DBI.connect("dbi:Pg:dbname=#{database};port=#{dbport}", user="joerg");
+    @dbh['AutoCommit'] = false
+    @transaction = false
+    @pre_initial_transaction=true
+  end # def initialize
+
+  def query(query, *params)
+    sth = @dbh.execute(query, *params)
+    while row = sth.fetch_hash
+      yield row
+    end
+    sth.finish
+  end # def query
+
+  def suite(dist)
+    id = 0
+    query("SELECT id FROM suite WHERE suite_name = ?", dist) do |row|
+      id = row["id"]
+    end
+    id
+  end # def suite
+
+end # Class Db
diff --git a/.dotfiles/net:debian.org/host:fasolo/lib/output.rb b/.dotfiles/net:debian.org/host:fasolo/lib/output.rb
new file mode 100644 (file)
index 0000000..d76d1b8
--- /dev/null
@@ -0,0 +1,329 @@
+class Removal_html
+  require "cgi"
+
+  def initialize(tags)
+    $LOG.debug("Initializing html object")
+    @tags = tags
+  end
+
+  def set_tags(tags)
+    $LOG.debug("Setting new value for tags to #{tags}")
+    @tags = tags
+  end
+
+  def header
+    return <<-EOF
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
+    <head>
+        <meta http-equiv="content-type" content="text/xhtml+xml; charset=utf-8"
+        />
+        <title>Pending Debian Package removals</title>
+        <link type="text/css" rel="stylesheet" href="removals-style.css" />
+        <link rel="shortcut icon" href="http://www.debian.org/favicon.ico" />
+        <script type="text/javascript">
+          //<![CDATA[
+           <!--
+        function toggle(id){
+            var o=document.getElementById(id);
+                   toggleObj(o, "none");
+           }
+        function toggleObj(o){
+            if (! o.style.display || o.style.display=="block") {
+                           o.style.display="none";
+                   } else {
+                           o.style.display="block";
+                   }
+           }
+           function togglePkg(o, hidingClass){
+                   var children = o.parentNode.getElementsByTagName("*");
+                   for (var i = 0; i < children.length; i++) {
+                           if(! children[i].hasAttribute("class"))
+                                   continue;
+                           c = children[i].getAttribute("class").split(" ");
+                           for(var j = 0; j < c.length; j++)
+                                   if(c[j] == hidingClass) {
+                                           toggleObj(children[i]);
+                                   }
+                   }
+           }
+          //-->
+          //]]>
+        </script>
+
+    </head>
+    <body>
+        <div id="logo">
+            <a href="http://www.debian.org/">
+                <img src="http://www.debian.org/logos/openlogo-nd-50.png"
+                alt="debian logo" /></a>
+            <a href="http://www.debian.org/">
+                <img src="http://www.debian.org/Pics/debian.png"
+                alt="Debian Project" /></a>
+        </div>
+        <div id="titleblock">
+            <img src="http://www.debian.org/Pics/red-upperleft.png"
+            id="red-upperleft" alt="corner image"/>
+            <img src="http://www.debian.org/Pics/red-lowerleft.png"
+            id="red-lowerleft" alt="corner image"/>
+            <img src="http://www.debian.org/Pics/red-upperright.png"
+            id="red-upperright" alt="corner image"/>
+            <img src="http://www.debian.org/Pics/red-lowerright.png"
+            id="red-lowerright" alt="corner image"/>
+            <span class="title">
+                Pending Debian Package removals
+            </span>
+        </div>
+        <div id="legend">
+            <p id="legend-title" onclick='toggle("legend-list")'>
+            Commonly used acronyms:
+            <span class="toggle-msg">(click to toggle)</span>
+            </p>
+            <dl id="legend-list" style="display: none">
+                <dt>ROM</dt>
+                <dd>Request Of Maintainer</dd>
+                <dt>RoQA</dt>
+                <dd>Requested by the QA team</dd>
+                <dt>ROP</dt>
+                <dd>Request of Porter</dd>
+                <dt>ROSRM</dt>
+                <dd>Request of Stable Release Manager</dd>
+                <dt>NBS</dt>
+                <dd>Not Built [by] Source</dd>
+                <dt>NPOASR</dt>
+                <dd>Never Part Of A Stable Release</dd>
+                <dt>NVIU</dt>
+                <dd>Newer Version In Unstable</dd>
+                <dt>ANAIS</dt>
+                <dd>Architecture Not Allowed In Source</dd>
+                <dt>ICE</dt>
+                <dd>Internal Compiler Error</dd>
+                <dt>[cruft-report]</dt>
+                <dd>detected by the cruft finder script</dd>
+            </dl>
+        </div>
+        <div id="explain">
+                 <p id="explain-title" onclick='toggle("explain-list")'>
+                 About removals in Debian:
+                 <span class="toggle-msg">(click to toggle)</span>
+                 </p>
+                 <div id="explain-list" style="display: none">
+                       <p>
+                       Removals in Debian are only performed after the submission of a
+                       bugreport filed against the (pseudo)-package ftp.debian.org.
+            To make life easier for the ftp-team please use the following format
+            (<em>reportbug ftp.debian.org</em> will guide you through it and automatically follow this format):
+                       </p>
+                       <p>
+                       The subject of the bug should be of the format <br />
+                       <span class="explain-bold">
+                       RM: $PACKAGE -- REASON
+                       </span>
+                       <br />
+                       for a full removal request ($PACKAGE is the source package)
+                       or <br />
+                       <span class="explain-bold">
+                       RM: $PACKAGE [$ARCHLIST] -- REASON
+                       </span>
+                       <br />
+                       for a partial removal. The arch list should be enclosed in
+                       [] and separated by a space. If the removal is meant to be done in
+            a suite other than unstable add the suite to the package name, separated with /.
+                       </p>
+                       <p>
+                       $REASON should start with one or more of the above listed
+                       acronyms, whichever fits best, followed by a short but
+                       descriptive text explaining why the package should be removed.
+            That text
+                       should be self-contained, ie. one should not need to read
+                       the body of the request to see why the removal should be
+                       done, as this text will end up in the removal logfile.
+                       (But of course the body can and should contain much more
+                       details than this short subject)
+                       </p>
+                       <p>
+                       <span class="explain-bold">
+                       How to help
+                       </span>
+                       <br />
+                       <br />
+            If you want to help out, the most helpful thing you can do is to 
+            ensure that the bug titles follow the above defined format.
+            <br />
+
+            You can also watch those bugs tagged moreinfo and
+                       make sure that those bugs get their info, so the packages
+                       get ready to get removed - or the bug closed.<br /> <br />
+                       <span class="explain-bold">
+                       Everyone is welcome to edit ftp.debian.org bugs, as long as
+            those edits make sense.
+                       </span>
+                       </p>
+                 </div>
+                </div>
+                       
+  EOF
+  end
+
+  def footer
+    d = DateTime.now
+    f = d.strftime("%c")
+    return <<-EOF
+    <div>
+    <p>Last updated: #{f}</p>
+    <p class="logo">
+      <a href="http://validator.w3.org/check?uri=referer">
+       <img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>
+         <a href="http://jigsaw.w3.org/css-validator/check/referer">
+        <img src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!" height="31" width="88" /></a>
+    </p>
+    </div>
+    </body></html>
+  EOF
+  end
+
+  def row_start(row, tags, dist="unstable")
+    if tags_include?("moreinfo") or (dist != "unstable" and dist != "experimental")
+      css = "startHidden"
+    end # if
+
+    if row % 2 != 0
+      "<div class=\"package odd #{css}\">"
+    else
+      "<div class=\"package even #{css}\">"
+    end
+  end
+
+  def info_start
+    "<div class=\"infobox\">"
+  end
+
+  def info_end
+    "</div>"
+  end
+
+  def partial (text)
+    "<div class=\"notes canHide\"" + style +  ">Partial Removal: #{text}</div>"
+  end
+
+  def subject(text, suite, package, bugnr=0)
+    if suite == "unstable"
+      "<div class=\"subject\"" + toggle + ">#{package}: #{text}</div>"
+    else
+      "<div class=\"subject\"" + toggle + ">#{package}/#{suite}: #{text}</div>"
+    end
+  end
+
+  def bts(bugnr, tag)
+    text="<div class=\"bts\"> <a href=\"http://bugs.debian.org/#{bugnr}\">##{bugnr}"
+    if tag.length >= 1
+      text+="(#{tag})</a>"
+    else
+      text+="</a>"
+    end
+    text+="</div>"
+    text
+  end
+
+  def pts(package)
+    "<div class=\"pts\"> <a href=\"http://packages.qa.debian.org/#{package}\">PTS page</a></div>"
+  end
+
+  def originator(origin)
+    "<div class=\"origin canHide\"" + style + ">Removal requested from #{CGI::escapeHTML(origin)}</div>"
+  end
+
+  def infolinks(bugnr, tag, package)
+    text="<div class=\"infolinks\">"
+    text+="<span class=\"bts\"><a href=\"http://bugs.debian.org/#{bugnr}\">Bug ##{bugnr}"
+    if tag.length >= 1
+      text+=" (#{tag})</a>"
+    else
+      text+="</a>"
+    end
+    text+="</span><span class=\"pts\">"
+    text+="<a href=\"http://packages.qa.debian.org/#{package}\">PTS page</a></span>"
+    text+="</div>"
+    text
+  end
+
+  def binary_row(name, version, arch)
+    text ="<tr>\n"
+    text+="   <td class=\"pkg-name\">#{name}</td>\n"
+    text+="   <td class=\"pkg-ver\">#{version}</td>\n"
+    text+="   <td class=\"pkg-arches\">#{arch.join(", ")}</td>\n"
+    text+="</tr>\n"
+    text
+  end
+
+  def start_table
+    "<div class=\"canHide\"" + style + "><table class=\"pkgs\">"
+  end # start_table
+
+  def toggle_all
+    text="<div class=\"inverse\"><p id=\"toggle-info\" onclick='togglePkg(document, \"canHide\")'>"
+    text+="Inverse display AKA toggle visible bugs (tagged moreinfo / not tagged)</p></div>"
+    text+="<div id=\"content\">"
+    text
+  end
+
+  def dak_cmd(bugnum, arch, reason, package, nosource, dist, binarylist)
+    text=""
+    reason="ENOREASON" if reason.length <= 1
+    defargs = "-p -d #{bugnum} -R -C package -m \"#{CGI::escapeHTML(reason)}\""
+
+    if not arch.nil?
+      # Binary removal - list all binary package names on the removal line.
+     if dist == "unstable"
+        text= " <div class=\"dak-command canHide\"" + style + ">dak rm #{defargs} -b -a #{arch.join(",")} #{binarylist}</div>"
+      else
+        text= " <div class=\"dak-command canHide\"" + style + ">dak rm #{defargs} -b -s #{dist} -a #{arch.join(",")} #{binarylist}</div>"
+      end
+    else
+      if dist == "unstable"
+        text= " <div class=\"dak-command canHide\"" + style + ">dak rm -D #{defargs} #{package}</div>"
+      else
+        text= " <div class=\"dak-command canHide\"" + style + ">dak rm #{defargs} -s #{dist} #{package}</div>"
+      end
+    end
+    text
+  end
+
+  def uploader(uploader)
+    $LOG.debug("Uploader is set to #{uploader}")
+    "<div class=\"uploader canHide\"" + style + ">#{CGI::escapeHTML(uploader.to_s)}</div>"
+  end
+
+  private
+
+  def tags_include?(search)
+    return true if @tags.to_s.include?(search)
+    false
+  end # tags_include
+
+  def style
+    if tags_include?("moreinfo")
+      "style=\"display: none\""
+    else
+      ""
+    end
+  end
+
+  def toggle
+    if tags_include?("moreinfo")
+      toggle_hidden
+    else
+      toggle_visible
+    end
+  end
+
+  def toggle_hidden
+    " onclick='togglePkg(this, \"canHide\", \"none\")'"
+  end
+
+  def toggle_visible
+    " onclick='togglePkg(this, \"canHide\", \"block\")'"
+  end
+
+
+end # class
diff --git a/.dotfiles/net:debian.org/host:fasolo/public_html/removals/.htaccess b/.dotfiles/net:debian.org/host:fasolo/public_html/removals/.htaccess
new file mode 100644 (file)
index 0000000..4af03bd
--- /dev/null
@@ -0,0 +1,2 @@
+AddDefaultCharset utf-8
+AddType application/rss+xml .rss
diff --git a/.dotfiles/net:debian.org/host:fasolo/tp/abi.txt b/.dotfiles/net:debian.org/host:fasolo/tp/abi.txt
new file mode 100644 (file)
index 0000000..e4f2b4e
--- /dev/null
@@ -0,0 +1,15 @@
+Hi Maintainer,
+
+im sorry, but I need to reject your package for now.
+I havent done a deep analysis of your package, so this is NOT a
+rating of it, this is due to the running ABI Transition (you are
+depending directly or indirectly on C++-stuff).
+Any new package added now would make it run slower, and we really
+want it to end, so please be patient. After the transition ended
+feel free to reupload your package.
+
+More details about the transition plan can be found here:
+http://lists.debian.org/debian-devel-announce/2005/06/msg00004.html
+
+-- 
+bye Joerg
diff --git a/.dotfiles/net:debian.org/host:fasolo/tp/cdbs.txt b/.dotfiles/net:debian.org/host:fasolo/tp/cdbs.txt
new file mode 100644 (file)
index 0000000..7e3d2f8
--- /dev/null
@@ -0,0 +1,46 @@
+Hi Maintainer,
+
+While checking your package in NEW I found that it has the cdbs "Play with
+my debian/control in a bad way" option turned on, and thus modifies
+Build-Dependencies on the fly.
+
+Sorry, but we must reject such packages. Please read on:
+
+- Modifying them on the fly can mean that they change without you noticing
+  it. This is not a problem for the build you do, but now consider later
+  builds: our autobuilders will get the changed build-dependencies and may
+  then build a substantially different package.
+  NMUs (e.g. for release-critical fixes) or at worst even security updates
+  also become much more fragile when this option is enabled.
+
+- If you need help from a script to set Build-Dependencies or similar,
+  please take another approach:
+  Add another target in your debian/rules, that is *never* called
+  automatically during the build process, but only if you run it with
+  'debian/rules <target>' explicitly so that you have an opportunity to
+  review the changes it makes.
+
+The only exception from modifying something in the first paragraph of
+debian/control is the Uploaders field, as it would be difficult for some big
+group-maintained packages to do that by hand.
+
+You may want to follow bug #311724, which is about exactly this issue.
+
+Note: I haven't looked much deeper into your package, but assuming it is
+      otherwise error-free it may be approved; so feel free to upload a
+      fixed version whenever you want. (Of course, if it violates policy or
+      similar, I will contact you again and let you fix it. This isn't a
+      wildcard. :) ).
+
+Note2: This is *MY* opinion/position on this matter. If you disagree you are of
+       course always free to answer to this mail and state your position, or
+       to reupload an unfixed version and hope that another one processing NEW
+       accepts this.
+
+Oh, while you are changing the debian/ for this, *please* look into the
+debian/control you then take, please fix the broken Build-Depends line it generated
+*before* you upload it again. Thanks.
+
+--
+bye Joerg
+
diff --git a/.dotfiles/net:debian.org/host:fasolo/tp/enhance_copyright.txt b/.dotfiles/net:debian.org/host:fasolo/tp/enhance_copyright.txt
new file mode 100644 (file)
index 0000000..627a561
--- /dev/null
@@ -0,0 +1,10 @@
+Hi  Maintainer,
+
+rejected, please enhance your copyright file. You may want to read
+http://lists.debian.org/debian-devel-announce/2006/03/msg00023.html
+for a bit more information.
+
+.
+
+--
+bye Joerg
diff --git a/.dotfiles/net:debian.org/host:fasolo/tp/fdl.txt b/.dotfiles/net:debian.org/host:fasolo/tp/fdl.txt
new file mode 100644 (file)
index 0000000..c1a6911
--- /dev/null
@@ -0,0 +1,11 @@
+Hi Maintainer,
+
+rejected - your package is using the GFDL license at least for parts
+in its doc/ subdirectory. You need to mention that in your debian/copyright
+and you also need to check if the usage of GFDL it does is ok
+with the vote we had on it, see
+http://www.debian.org/vote/2006/vote_001
+
+
+--
+bye Joerg
diff --git a/.dotfiles/net:debian.org/host:fasolo/tp/gpl_version.txt b/.dotfiles/net:debian.org/host:fasolo/tp/gpl_version.txt
new file mode 100644 (file)
index 0000000..dc3b844
--- /dev/null
@@ -0,0 +1,9 @@
+Hi Maintainer,
+
+rejected, your debian/copyright points to the GPL symlink, but you have
+files licensed as GPLv2 only, ie. not with the "or any later" option. As
+the GPL symlink points to GPLv3 your copyright file is wrong. Please
+fix.
+
+-- 
+bye Joerg
diff --git a/.dotfiles/net:debian.org/host:fasolo/tp/missing_licenses.txt b/.dotfiles/net:debian.org/host:fasolo/tp/missing_licenses.txt
new file mode 100644 (file)
index 0000000..6ab6a47
--- /dev/null
@@ -0,0 +1,9 @@
+Hi Maintainer,
+
+rejected, your debian/copyright file is incomplete and misses
+(C)holders/license data. You have to include all such differences.
+
+.
+
+--
+bye Joerg
diff --git a/.dotfiles/net:debian.org/host:fasolo/tp/php.txt b/.dotfiles/net:debian.org/host:fasolo/tp/php.txt
new file mode 100644 (file)
index 0000000..b23dd73
--- /dev/null
@@ -0,0 +1,57 @@
+Hi Maintainer,
+
+Im sorry but I need to reject this package out of NEW.
+
+The reason for this decision is the license which does not really fit
+the package. You package a php thing, either an addon "library" or a
+php "application" which uses the PHP license. Unfortunately for you
+this license can't really be used with anything else except PHP itself.
+
+Shortcut for packages from the PHP group:
+There was a release of a PHP license version 3.01. That one is usable for
+stuff from the PHP group itself, but still nothing else. So if you got this
+reject having a package from that group - it most probably still uses an older,
+inappropriate, version of the PHP license. As the license usually allows to use
+a newer version of it - do it. Oh, and ask Upstream to update its package.
+
+Package not from PHP group? Read on:
+Note: It is not that the PHP license is non-free. The license itself is free,
+*IF* and only *IF* you package PHP itself. For anything else it renders the
+package basically undistributable, as the license simply doesn't apply.
+(See also http://lists.debian.org/debian-legal/2005/10/msg00124.html
+and following mails for more).
+
+It always only talks about "the product PHP", not about software.
+And "php-whatever" (or how the actual software may be called) isnt really
+"PHP" from the PHP group.
+
+Point 6 (in version 3 of the license, Point 5 in the older version 2) is
+also an advertisement clause. Bad thing which is usually discouraged. (And if
+you/Upstream made the mistake to include GPL licensed files you have more trouble).
+
+And, at the end there is the following text:
+-------------------------------------------------------------------
+This software consists of voluntary contributions made by many
+individuals on behalf of the PHP Group.
+
+The PHP Group can be contacted via Email at group@php.net.
+
+For more information on the PHP Group and the PHP project,
+please see <http://www.php.net>.
+
+This product includes the Zend Engine, freely available at
+<http://www.zend.com>.
+-------------------------------------------------------------------
+
+I doubt that your package is made "on behalf of the PHP group".
+Or that it includes the Zend Engine.
+
+As a good solution for this I suggest to talk to your upstream.
+Looking at the license they've chosen they do want to make it available
+for everyone, so I suggest to use either the original BSD license
+or the LGPL.
+
+As soon as this is fixed you are of course free to reupload the package.
+
+--
+bye Joerg
diff --git a/.dotfiles/net:debian.org/host:fasolo/tp/rfc.txt b/.dotfiles/net:debian.org/host:fasolo/tp/rfc.txt
new file mode 100644 (file)
index 0000000..bc45d69
--- /dev/null
@@ -0,0 +1,8 @@
+Hi Maintainer,
+
+rejected - your package contains a RFC document and they are simply
+not free. Please repackage the source tarball without it and
+reupload.
+
+--
+bye Joerg
diff --git a/.dotfiles/net:debian.org/host:fasolo/tp/ssl.txt b/.dotfiles/net:debian.org/host:fasolo/tp/ssl.txt
new file mode 100644 (file)
index 0000000..b45b7de
--- /dev/null
@@ -0,0 +1,14 @@
+Hi Maintainer,
+
+while looking at your package in NEW I discovered that it is
+linking against openssl, itself beeing GPL licensed.
+Sorry, but this doesnt work, the OpenSSL license and the GPL are
+incompatible. For more information, and a link to give to your
+upstream please visit
+http://www.openssl.org/support/faq.html#LEGAL2 or/and
+http://www.gnome.org/~markmc/openssl-and-the-gpl.html
+
+After this is fixed feel free to upload your package again.
+
+--
+bye Joerg
diff --git a/.dotfiles/net:debian.org/host:fasolo/tp/symbols.txt b/.dotfiles/net:debian.org/host:fasolo/tp/symbols.txt
new file mode 100644 (file)
index 0000000..fce5825
--- /dev/null
@@ -0,0 +1,42 @@
+Hi Maintainer,
+
+rejected, your symbol file contains errors. Using lintian -i on it
+reports the two tags
+
+E:  symbols-file-contains-current-version-with-debian-revision
+W:  symbols-file-contains-debian-revision
+
+for a number of your symbols.
+
+Lintians own informational output says about that:
+
+E; symbols-file-contains-current-version-with-debian-revision
+N: Debian revisions should be stripped from versions in symbols files.
+N: Not doing so leads to dependencies unsatisfiable by backports
+N: (1.0-1~bpo << 1.0-1 while 1.0-1~bpo >= 1.0). If the debian revision
+N: can't be stripped because the symbol really appearead between two
+N: specific Debian revisions, you should postfix the version with a
+N: single "~" (example: 1.0-3~ if the symbol appeared in 1.0-3).
+N:  
+N: This problem normally means that the symbols were added automatically
+N: by dpkg-gensymbols. dpkg-gensymbols uses the full version number for
+N: the dependency associated to any new symbol that it detects. The
+N: maintainer must update the debian/<package>.symbols file by adding the
+N: new symbols with the corresponding upstream version.
+
+and
+W: symbols-file-contains-debian-revision
+N:
+N: Debian revisions should be stripped from versions in symbols files.
+N: Not doing so leads to dependencies unsatisfiable by backports
+N: (1.0-1~bpo << 1.0-1 while 1.0-1~bpo >= 1.0). If the debian revision
+N: can't be stripped because the symbol really appearead between two
+N: specific Debian revisions, you should postfix the version with a
+N: single "~" (example: 1.0-3~ if the symbol appeared in 1.0-3).
+
+
+There is also http://wiki.debian.org/UsingSymbolsFiles having some
+recommendations how to deal with symbol files.
+
+-- 
+bye Joerg
diff --git a/.dotfiles/net:debian.org/host:fasolo/tp/wrong_license_pointer.txt b/.dotfiles/net:debian.org/host:fasolo/tp/wrong_license_pointer.txt
new file mode 100644 (file)
index 0000000..dd769c7
--- /dev/null
@@ -0,0 +1,9 @@
+Hi Maintainer,
+
+rejected, your debian/copyright does not include the license.
+The only exception to "Must include complete license texts" is for those
+files in /usr/share/common-licenses, everything else has to be in the
+copyright file itself.
+
+--
+bye Joerg