Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: unblock

Please unblock package piuparts (or age it), we missed the freeze deadline by
a day because I had forgotten the new binary packages added by Andreas...

The diff is mostly only relevant for people running piuparts in
master/slave mode (which afaik+sadly noone does besides Andreas and me), non
comment changes to piuparts.py are 4 lines. It would still be nice to
have this version in buster as it will make future updates less a
hazzle.

$ git diff 0.97..0.98|diffstat
 TODO                                                                           
                |   14 
 conf/distros.conf                                                              
                |   12 
 
custom-scripts/scripts-multi-distro-upgrade/post_distupgrade_base_cleanup_multi-distro-upgrade
 |   15 
 custom-scripts/scripts/is_testable_uninstallable                               
                |  158 ++++++----
 debian/changelog                                                               
                |   36 ++
 debian/control                                                                 
                |   66 ++++
 instances/piuparts.conf-template.pejacevic                                     
                |  135 ++++++++
 instances/piuparts.conf.anbe                                                   
                |   28 +
 master-bin/generate_daily_report.in                                            
                |    8 
 master-bin/prepare_backup.in                                                   
                |    4 
 master-bin/reschedule_piuparts_tests.in                                        
                |    5 
 piuparts-report.py                                                             
                |    4 
 piuparts-slave.py                                                              
                |   29 +
 piuparts.py                                                                    
                |   22 -
 14 files changed, 435 insertions(+), 101 deletions(-)

Actuall diff between the two .dsc files is attached.

unblock piuparts/0.98

Thanks for your work on Buster, exciting times ahead! :)


-- 
tschau,
        Holger

-------------------------------------------------------------------------------
               holger@(debian|reproducible-builds|layer-acht).org
       PGP fingerprint: B8BF 5413 7B09 D35C F026 FE9D 091A B856 069A AA1C
diff -Nru piuparts-0.97/conf/distros.conf piuparts-0.98/conf/distros.conf
--- piuparts-0.97/conf/distros.conf	2019-01-13 16:57:15.000000000 +0100
+++ piuparts-0.98/conf/distros.conf	2019-03-01 11:27:47.000000000 +0100
@@ -132,6 +132,13 @@
 target-release = stretch-backports
 
 
+[buster/updates]
+uri = http://security.debian.org
+depends = buster
+
+[buster-updates]
+depends = buster
+
 [buster-proposed-updates]
 depends = buster
 
@@ -139,6 +146,11 @@
 uri = http://deb.debian.org/debian-debug
 depends = buster
 
+[buster-proposed]
+uri = None
+depends = buster buster/updates buster-updates buster-proposed-updates
+candidates = buster buster/updates buster-proposed-updates
+
 
 [sid-debug]
 uri = http://deb.debian.org/debian-debug
diff -Nru piuparts-0.97/custom-scripts/scripts/is_testable_uninstallable piuparts-0.98/custom-scripts/scripts/is_testable_uninstallable
--- piuparts-0.97/custom-scripts/scripts/is_testable_uninstallable	2018-10-21 13:56:11.000000000 +0200
+++ piuparts-0.98/custom-scripts/scripts/is_testable_uninstallable	2019-03-01 11:27:47.000000000 +0100
@@ -45,6 +45,105 @@
 #   we usually skip the failing initial install, too, since that is
 #   *not a bug* in the package.
 
+
+if [ "${PIUPARTS_DISTRIBUTION}" = "lenny" ]; then
+
+	case ${PIUPARTS_OBJECTS%%=*} in
+		blootbot)
+			skip_distupgrade "#502753: fails to install: prompts without using debconf"
+			;;
+		distributed-net)
+			skip_distupgrade "#655922: noninteractive install: postinst loops infinitely"
+			;;
+		dnscache-run)
+			skip_distupgrade "#664848: breaks dns resolution in chroot"
+			;;
+		libpils0|\
+		libpils-dev|\
+		libstonith0|\
+		libstonith-dev)
+			skip_distupgrade "#702055: transitional packages uninstallable in lenny"
+			;;
+		mhc)
+			skip_distupgrade "#696231: fails to install: emacs-package-install failure"
+			;;
+		multex-bin)
+			skip_distupgrade "#668791: fails to install: The format file of 'multex' is NOT built successfully."
+			;;
+		python-milter|\
+		spf-milter-python)
+			skip_always "python-milter contains virus signatures that may get blocked by the firewall"
+			;;
+		runit-run)
+			skip_distupgrade "#542157: fails to install"
+			;;
+		sun-java5-doc|\
+		sun-java6-doc)
+			skip_distupgrade "#709967: fails to install: download location no longer available"
+			;;
+		trn)
+			skip_distupgrade "fails to install: prompts without using debconf"
+			;;
+		ttf-root-installer)
+			skip_distupgrade "#678807: fails to install: ftp:// download location disappeared"
+			;;
+	esac
+
+fi
+
+if [ "${PIUPARTS_DISTRIBUTION}" = "squeeze" ]; then
+
+	case ${PIUPARTS_OBJECTS%%=*} in
+		distributed-net)
+			skip_distupgrade "#655922: noninteractive install: postinst loops infinitely"
+			;;
+		firmware-b43-lpphy-installer)
+			skip_distupgrade "#623703: download location no longer available"
+			;;
+		fossology|\
+		fossology-agents|\
+		fossology-agents-single|\
+		fossology-scheduler|\
+		fossology-web|\
+		fossology-web-single)
+			# removed after squeeze
+			skip_distupgrade "#595593: fails to install"
+			;;
+		mini-buildd-bld|\
+		mini-buildd-rep)
+			skip_distupgrade "#632955, #656746: time limit exceeded during install"
+			fail_test "#632955, #656746: time limit exceeded during install"
+			;;
+	esac
+
+fi
+
+if [ "${PIUPARTS_DISTRIBUTION}" = "wheezy" ]; then
+
+	case ${PIUPARTS_OBJECTS%%=*} in
+		firmware-b43-lpphy-installer)
+			skip_distupgrade "#623703: download location no longer available"
+			;;
+		nautilus-dropbox)
+			skip_distupgrade "#770402: downloads awfully slow, hangs during installation"
+			;;
+	esac
+
+fi
+
+if [ "${PIUPARTS_DISTRIBUTION}" = "jessie" ]; then
+
+	case ${PIUPARTS_OBJECTS%%=*} in
+		steam)
+			skip_distupgrade "#772598: cannot preseed licence acceptance"
+			;;
+		susv4)
+			skip_distupgrade "#900882: download location no longer available"
+			;;
+	esac
+
+fi
+
 case ${PIUPARTS_OBJECTS%%=*}@${PIUPARTS_DISTRIBUTION} in
 	acgvision-agent@squeeze)
 		# removed after squeeze
@@ -55,9 +154,6 @@
 			skip_distupgrade "arch:all package no longer installable in stretch/i386"
 		fi
 		;;
-	blootbot@lenny)
-		skip_distupgrade "#502753: fails to install: prompts without using debconf"
-		;;
 	bugzilla3@lenny)
 		# fixed in squeeze, removed after squeeze, excluded from squeeze-lts
 		skip_distupgrade "was excluded from squeeze-lts"
@@ -75,13 +171,6 @@
 		# removed after lenny
 		skip_distupgrade "#523770: must use invoke-rc.d"
 		;;
-	distributed-net@lenny|\
-	distributed-net@squeeze)
-		skip_distupgrade "#655922: noninteractive install: postinst loops infinitely"
-		;;
-	dnscache-run@lenny)
-		skip_distupgrade "#664848: breaks dns resolution in chroot"
-		;;
 	docbookwiki@lenny)
 		# removed after lenny
 		skip_distupgrade "unconditionally uses mysql-client during purge"
@@ -102,15 +191,6 @@
 		# removed after lenny
 		skip_distupgrade "#574220: package purge (after dependencies removal) fails"
 		;;
-	fossology@squeeze|\
-	fossology-agents@squeeze|\
-	fossology-agents-single@squeeze|\
-	fossology-scheduler@squeeze|\
-	fossology-web@squeeze|\
-	fossology-web-single@squeeze)
-		# removed after squeeze
-		skip_distupgrade "#595593: fails to install"
-		;;
 	gclcvs@squeeze)
 		# removed after squeeze
 		skip_distupgrade "modifies conffiles: /etc/default/gclcvs"
@@ -126,12 +206,6 @@
 		# removed after lenny
 		skip_distupgrade "modifies conffiles: /etc/security/pam_rsa.conf"
 		;;
-	libpils0@lenny|\
-	libpils-dev@lenny|\
-	libstonith0@lenny|\
-	libstonith-dev@lenny)
-		skip_distupgrade "#702055: transitional packages uninstallable in lenny"
-		;;
 	localepurge@*)
 		skip_distupgrade "requires a full --reinstall to restore disappeared files"
 		;;
@@ -143,20 +217,6 @@
 		# removed after lenny
 		skip_distupgrade "#574228: package purge (after dependencies removal) fails"
 		;;
-	mhc@lenny)
-		skip_distupgrade "#696231: fails to install: emacs-package-install failure"
-		;;
-	mini-buildd-bld@squeeze|\
-	mini-buildd-rep@squeeze)
-		skip_distupgrade "#632955, #656746: time limit exceeded during install"
-		fail_test "#632955, #656746: time limit exceeded during install"
-		;;
-	multex-bin@lenny)
-		skip_distupgrade "#668791: fails to install: The format file of 'multex' is NOT built successfully."
-		;;
-	nautilus-dropbox@wheezy)
-		skip_distupgrade "#770402: downloads awfully slow, hangs during installation"
-		;;
 	nessusd@lenny|\
 	harden-remoteaudit@lenny)
 		# removed after lenny
@@ -176,10 +236,6 @@
 		# removed after squeeze
 		skip_distupgrade "#698533: modifies a shipped file: /usr/share/poker-web/currency_one.php"
 		;;
-	python-milter@lenny|\
-	spf-milter-python@lenny)
-		skip_always "virus signatures in python-milter may trigger the firewall"
-		;;
 	python-poker-stats@squeeze)
 		# removed after squeeze
 		skip_distupgrade "#608646: cronjob exits with error after package removal"
@@ -192,28 +248,12 @@
 		# removed after squeeze
 		skip_distupgrade "fails to purge: rt3.8-rtfm.postrm: ucf: not found"
 		;;
-	runit-run@lenny)
-		skip_distupgrade "#542157: fails to install"
-		;;
 	sdic-eijiro@lenny)
 		skip_distupgrade "requires a dictionary CD"
 		;;
 	sdic-eijiro@*)
 		skip_always "requires a dictionary CD"
 		;;
-	steam@jessie)
-		skip_distupgrade "#772598: cannot preseed licence acceptance"
-		;;
-	sun-java5-doc@lenny|\
-	sun-java6-doc@lenny)
-		skip_distupgrade "#709967: fails to install: download location no longer available"
-		;;
-	trn@lenny)
-		skip_distupgrade "fails to install: prompts without using debconf"
-		;;
-	ttf-root-installer@lenny)
-		skip_always "fails to install: download location disappeared"
-		;;
 	usrmerge@*)
 		skip_always "performs piuparts-unfriendy filesystem layout changes"
 		;;
diff -Nru piuparts-0.97/custom-scripts/scripts-multi-distro-upgrade/post_distupgrade_base_cleanup_multi-distro-upgrade piuparts-0.98/custom-scripts/scripts-multi-distro-upgrade/post_distupgrade_base_cleanup_multi-distro-upgrade
--- piuparts-0.97/custom-scripts/scripts-multi-distro-upgrade/post_distupgrade_base_cleanup_multi-distro-upgrade	1970-01-01 01:00:00.000000000 +0100
+++ piuparts-0.98/custom-scripts/scripts-multi-distro-upgrade/post_distupgrade_base_cleanup_multi-distro-upgrade	2019-03-01 11:27:47.000000000 +0100
@@ -0,0 +1,15 @@
+#!/bin/sh
+set -e
+
+# Only while creating the reference chroot.
+test "$PIUPARTS_PHASE" = "" || exit 0
+
+
+if	[ "$PIUPARTS_DISTRIBUTION" = "buster" ] || \
+	[ "$PIUPARTS_DISTRIBUTION" = "buster-proposed" ] ; then
+
+	if [ -d /etc/init ]; then
+		rmdir --ignore-fail-on-non-empty -v /etc/init
+	fi
+
+fi
diff -Nru piuparts-0.97/debian/changelog piuparts-0.98/debian/changelog
--- piuparts-0.97/debian/changelog	2019-02-11 12:30:10.000000000 +0100
+++ piuparts-0.98/debian/changelog	2019-03-01 11:27:47.000000000 +0100
@@ -1,3 +1,39 @@
+piuparts (0.98) unstable; urgency=medium
+
+  [ Holger Levsen ]
+  * piuparts-reports.py: add link to states graph for each suite.
+  * instances/piuparts.conf-template.pejacevic: increase sid-nodoc's
+    precedence.
+  * Refactor reschedule_piuparts_tests to use new global configuration
+    variable 'testing-suite'.
+  * generate_daily_report: show failures in sid, $TESTING and testing2sid
+    at the top of the report.
+  * master-bin/prepare_backup: ignore empty submissions.txt for $TESTING-pu
+    and $TESTING-security.
+  * Update TODO for bullseye.
+
+  [ Andreas Beckmann ]
+  * piuparts.py:
+    - If packages were downgraded to restore the reference chroot state
+      reinstall the downgraded-to version again to recover potentially lost
+      files in case of bad interactions of Breaks/Replaces with downgrading.
+  * distros.conf: Add support for buster partial distros.
+  * piuparts.conf:
+    - Use --warn-on-others for [sid-strict] only.
+    - Add sections [buster-security], [buster-pu] and [buster2proposed].
+    - Add sections [stretch2Xbuster] and [stretch2Xbuster-rcmd].
+    - Add section [sid-broken-symlinks], failing on broken symlinks
+  * piuparts-slave.py:
+    - Catch IOError while creating tarballs, will be retried later.
+  * scripts/is_testable_uninstallable:
+    - Refactor handling of known uninstallable packages.
+  * scripts-multi-distro-upgrade/: New custom scripts for distupgrade tests
+    spanning a series of distros.
+  * Add metapackages piuparts-{master,slave}-from-git-deps to ease running
+    piuparts-master and piuparts-slave instances from git.
+
+ -- Holger Levsen <hol...@debian.org>  Fri, 01 Mar 2019 11:27:47 +0100
+
 piuparts (0.97) unstable; urgency=medium
 
   [ Andreas Beckmann ]
diff -Nru piuparts-0.97/debian/control piuparts-0.98/debian/control
--- piuparts-0.97/debian/control	2019-01-13 16:57:15.000000000 +0100
+++ piuparts-0.98/debian/control	2019-03-01 11:27:47.000000000 +0100
@@ -32,6 +32,7 @@
 Architecture: all
 Depends:
  piuparts-common (= ${binary:Version}),
+# keep this list in sync with piuparts-slave-from-git-deps
  debootstrap (>= 1.0.89~),
  debsums (>= 2.2.2~),
  lsb-release,
@@ -62,9 +63,11 @@
 Depends:
  piuparts-common (>= ${source:Version}),
  piuparts-common (<< ${source:Version}+),
+# keep this list in sync with piuparts-master-from-git-deps
  adduser,
  openssh-server,
  python-debianbts,
+ python-setproctitle,
  tango-icon-theme,
  xz-utils,
  python-yaml,
@@ -90,11 +93,42 @@
  operate. It also contains piuparts-report to generate web pages with the
  testing results as well as documentation.
 
+Package: piuparts-master-from-git-deps
+Architecture: all
+Depends:
+ git,
+# this list is synced from piuparts-master
+ adduser,
+ openssh-server,
+ python-debianbts,
+ python-setproctitle,
+ tango-icon-theme,
+ xz-utils,
+ python-yaml,
+ python (>= 2.7),
+# selected packages from piuparts-master Recommends
+ apache2 | httpd,
+ python-rpy2,
+# this list is synced from piuparts-common
+ python-apt,
+ python-distro-info,
+ python-lzma,
+ ${misc:Depends},
+Description: dependencies for running piuparts master from git
+ piuparts is meant as a quality assurance tool for people who create .deb
+ packages to test them before they upload them to the Debian package archive.
+ A master/slave piuparts installation is used for testing complete archives
+ as it is done on https://piuparts.debian.org/.
+ .
+ This metapackage provides all the dependencies needed for running a
+ piuparts-master instance (including piuparts-report etc.) from git.
+
 Package: piuparts-slave
 Architecture: all
 Depends:
  piuparts (= ${binary:Version}),
  piuparts-common (= ${binary:Version}),
+# keep this list in sync with piuparts-slave-from-git-deps
  adduser,
  openssh-client,
  screen,
@@ -113,9 +147,41 @@
  This package provides the piuparts slave components, which need a piuparts
  master to operate. See the documentation in the piuparts-master package.
 
+Package: piuparts-slave-from-git-deps
+Architecture: all
+Depends:
+ git,
+# this list is synced from piuparts-slave
+ adduser,
+ openssh-client,
+ screen,
+ sudo,
+ python (>= 2.7),
+# this list is synced from piuparts
+ debootstrap (>= 1.0.89~),
+ debsums (>= 2.2.2~),
+ lsb-release,
+ lsof,
+ mount,
+ python-debian,
+# this list is synced from piuparts-common
+ python-apt,
+ python-distro-info,
+ python-lzma,
+ ${misc:Depends},
+Description: dependencies for running piuparts slave from git
+ piuparts is meant as a quality assurance tool for people who create .deb
+ packages to test them before they upload them to the Debian package archive.
+ A master/slave piuparts installation is used for testing complete archives
+ as it is done on https://piuparts.debian.org/.
+ .
+ This metapackage provides all the dependencies needed for running a
+ piuparts-slave instance from git.
+
 Package: piuparts-common
 Architecture: all
 Depends:
+# keep this list in sync with piuparts-{master,slave}-from-git-deps
  python-apt,
  python-distro-info,
  python-lzma,
diff -Nru piuparts-0.97/instances/piuparts.conf.anbe piuparts-0.98/instances/piuparts.conf.anbe
--- piuparts-0.97/instances/piuparts.conf.anbe	2019-02-11 12:30:10.000000000 +0100
+++ piuparts-0.98/instances/piuparts.conf.anbe	2019-03-01 11:27:47.000000000 +0100
@@ -4,7 +4,6 @@
 
 [DEFAULT]
 flags-base =
-	--warn-on-others
 	--no-eatmydata
 	--scriptsdir /etc/piuparts/scripts
 	--allow-database
@@ -13,6 +12,7 @@
 	%(flags-base)s
 	--warn-on-leftovers-after-purge
 flags-leftovers =
+	--warn-on-others
 	%(flags-base)s
 	--scriptsdir /etc/piuparts/scripts-leftovers
 
@@ -406,6 +406,8 @@
 	lenny_i386/non-free
 	lenny2squeeze/non-free
 #
+testing-suite = buster
+#
 json-sections = none
 #
 proxy = http://localhost:3128
@@ -2225,6 +2227,7 @@
 	%(flags-default)s
 	%(flags-start-lenny)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 arch = amd64
 area = main
 components = main
@@ -2240,6 +2243,7 @@
 	%(flags-default)s
 	%(flags-start-lenny)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = lenny222testing/main lenny222testing/non-free
 arch = amd64
 area = contrib
@@ -2253,6 +2257,7 @@
 	%(flags-default)s
 	%(flags-start-lenny)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = lenny222testing/main lenny222testing/contrib
 arch = amd64
 area = non-free
@@ -2267,6 +2272,7 @@
 	%(flags-default)s
 	%(flags-start-lenny)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 arch = i386
 setarch = linux32
 area = main
@@ -2283,6 +2289,7 @@
 	%(flags-default)s
 	%(flags-start-lenny)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = lenny222testing_i386/main lenny222testing_i386/non-free
 arch = i386
 setarch = linux32
@@ -2297,6 +2304,7 @@
 	%(flags-default)s
 	%(flags-start-lenny)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = lenny222testing_i386/main lenny222testing_i386/contrib
 arch = i386
 setarch = linux32
@@ -2623,6 +2631,7 @@
 	%(flags-default)s
 	%(flags-start-squeeze)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 arch = amd64
 area = main
 components = main
@@ -2636,6 +2645,7 @@
 	%(flags-default)s
 	%(flags-start-squeeze)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = squeeze222testing/main squeeze222testing/non-free
 arch = amd64
 area = contrib
@@ -2649,6 +2659,7 @@
 	%(flags-default)s
 	%(flags-start-squeeze)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = squeeze222testing/main squeeze222testing/contrib
 arch = amd64
 area = non-free
@@ -2663,6 +2674,7 @@
 	%(flags-default)s
 	%(flags-start-squeeze)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 arch = i386
 setarch = linux32
 area = main
@@ -2677,6 +2689,7 @@
 	%(flags-default)s
 	%(flags-start-squeeze)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = squeeze222testing_i386/main squeeze222testing_i386/non-free
 arch = i386
 setarch = linux32
@@ -2691,6 +2704,7 @@
 	%(flags-default)s
 	%(flags-start-squeeze)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = squeeze222testing_i386/main squeeze222testing_i386/contrib
 arch = i386
 setarch = linux32
@@ -3110,6 +3124,7 @@
 	%(flags-default)s
 	%(flags-start-wheezy)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 arch = amd64
 area = main
 components = main
@@ -3123,6 +3138,7 @@
 	%(flags-default)s
 	%(flags-start-wheezy)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = wheezy222testing/main wheezy222testing/non-free
 arch = amd64
 area = contrib
@@ -3136,6 +3152,7 @@
 	%(flags-default)s
 	%(flags-start-wheezy)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = wheezy222testing/main wheezy222testing/contrib
 arch = amd64
 area = non-free
@@ -3150,6 +3167,7 @@
 	%(flags-default)s
 	%(flags-start-wheezy)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 arch = i386
 setarch = linux32
 area = main
@@ -3164,6 +3182,7 @@
 	%(flags-default)s
 	%(flags-start-wheezy)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = wheezy222testing_i386/main wheezy222testing_i386/non-free
 arch = i386
 setarch = linux32
@@ -3178,6 +3197,7 @@
 	%(flags-default)s
 	%(flags-start-wheezy)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = wheezy222testing_i386/main wheezy222testing_i386/contrib
 arch = i386
 setarch = linux32
@@ -3701,6 +3721,7 @@
 	%(flags-default)s
 	%(flags-start-jessie)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 arch = amd64
 area = main
 components = main
@@ -3714,6 +3735,7 @@
 	%(flags-default)s
 	%(flags-start-jessie)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = jessie222testing/main jessie222testing/non-free
 arch = amd64
 area = contrib
@@ -3727,6 +3749,7 @@
 	%(flags-default)s
 	%(flags-start-jessie)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = jessie222testing/main jessie222testing/contrib
 arch = amd64
 area = non-free
@@ -3741,6 +3764,7 @@
 	%(flags-default)s
 	%(flags-start-jessie)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 arch = i386
 setarch = linux32
 area = main
@@ -3755,6 +3779,7 @@
 	%(flags-default)s
 	%(flags-start-jessie)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = jessie222testing_i386/main jessie222testing_i386/non-free
 arch = i386
 setarch = linux32
@@ -3769,6 +3794,7 @@
 	%(flags-default)s
 	%(flags-start-jessie)s
 	%(flags-end-testing)s
+	--scriptsdir /etc/piuparts/scripts-multi-distro-upgrade
 depends-sections = jessie222testing_i386/main jessie222testing_i386/contrib
 arch = i386
 setarch = linux32
diff -Nru piuparts-0.97/instances/piuparts.conf-template.pejacevic piuparts-0.98/instances/piuparts.conf-template.pejacevic
--- piuparts-0.97/instances/piuparts.conf-template.pejacevic	2019-02-11 12:30:10.000000000 +0100
+++ piuparts-0.98/instances/piuparts.conf-template.pejacevic	2019-03-01 11:27:47.000000000 +0100
@@ -1,8 +1,6 @@
 [DEFAULT]
 # these are needed always
 flags-base =
-# restrict to problems in the package being tested
-	--warn-on-others
 # default exceptions
 	--scriptsdir /etc/piuparts/scripts
 # pejacevic's slaves are doing everything relevant on a ramdisk anyway
@@ -18,6 +16,8 @@
 # like default flags, but failing on leftover files
 flags-leftovers =
 	%(flags-base)s
+# restrict to problems in the package being tested
+	--warn-on-others
 # perform some additional cleanup
 	--scriptsdir /etc/piuparts/scripts-leftovers
 
@@ -104,6 +104,46 @@
 # and removing a shell would remove its entry from /etc/shells
 	-i /etc/shells
 
+# common flags for testing for broken symlinks
+flags-broken-symlinks =
+	%(flags-default)s
+	--fail-on-broken-symlinks
+	--install-recommends
+	--scriptsdir /etc/piuparts/scripts-broken-symlinks
+#	--fake-essential-packages libjs-sphinxdoc
+# ignore intentionally broken symlinks
+	-i :/usr/lib/libcxx/test/std/experimental/filesystem/Inputs/static_test_env/bad_symlink
+	-i :/usr/share/gocode/src/github.com/Masterminds/glide/testdata/path/x/vendor
+	-i :/usr/share/gocode/src/github.com/constabulary/gb/internal/fileutils/_testdata/copyfile/a/rick
+	-i :/usr/share/gocode/src/github.com/hashicorp/atlas-go/archive/test-fixtures/archive-symlink/link/link
+	-i :/usr/share/gocode/src/github.com/prometheus/procfs/fixtures/26231/exe
+	-i :/usr/share/gocode/src/github.com/prometheus/procfs/fixtures/26231/ns/mnt
+	-i :/usr/share/gocode/src/github.com/prometheus/procfs/fixtures/26231/ns/net
+	-i :/usr/share/gocode/src/github.com/prometheus/procfs/fixtures/26232/cwd
+	-i :/usr/share/gocode/src/github.com/prometheus/procfs/fixtures/26232/root
+# ignore broken symlinks
+	-i :/etc/systemd/system/display-manager.service
+#   civicrm-common, #857601, wontfix, /usr/share/civicrm/packages/OpenFlashChart/open-flash-chart.swf -> ../../../../local/open-flash-chart.swf
+	-i :/usr/share/civicrm/packages/OpenFlashChart/open-flash-chart.swf
+#   musescore-common, #910145, wontfix, /usr/share/mscore-2.3/sound/{sf2,sfz} -> ../../sounds/{sf2,sfz}
+	-i :/usr/share/mscore-2.3/sound/sf2
+	-i :/usr/share/mscore-2.3/sound/sfz
+	-i :/usr/share/mscore-3.0/sound/sf2
+	-i :/usr/share/mscore-3.0/sound/sfz
+#   mender-client, #915680, /var/lib/mender -> /data/mender
+	-i :/var/lib/mender
+# ignore broken symlinks (patterns)
+	-I :/etc/.*/supervise
+	-I /usr/include/python2\.7_d/.*\.h
+	-I /usr/include/python3\..dm/.*\.h
+	-I /usr/include/python3\..dm/internal
+	-I :/usr/lib/jvm/java-.*-openjdk-.*/src\.zip
+	-I :/usr/share/doc/kde/HTML/.*/common
+	-I :/usr/share/man/man1/(.*-)?python.*-config\.1\.gz
+# ignore broken symlinks (third party game data)
+	-I :/usr/lib/openjk/JediAcademy/base/assets.\.pk3
+	-I :/usr/lib/rtcw/main/.*\.(cfg|pk3)
+
 
 [global]
 basetgz-sections =
@@ -120,13 +160,20 @@
 	sid
 	sid-strict
 	sid-nodoc
+	sid-broken-symlinks
 	testing2sid
 	stable2sid
 	stable22sid
 	buster
 	buster-rcmd
+	buster-security
+	buster-pu
+#	buster-proposed
+	buster2proposed
 	stretch2buster
+	stretch2Xbuster
 	stretch2buster-rcmd
+	stretch2Xbuster-rcmd
 	stretch2bpo2buster
 	stretch2bpo
 	stretch
@@ -166,6 +213,7 @@
 	squeeze2squeeze-lts
 	squeeze
 	lenny2squeeze
+testing-suite = buster
 mirror = @MIRROR@
 master-host = pejacevic.debian.org
 master-user = piupartsm
@@ -314,7 +362,7 @@
 
 
 [sid-nodoc]
-precedence = 9
+precedence = 7
 description = + Testing without files in /usr/share/doc.
 piuparts-flags =
 	%(flags-default)s
@@ -322,6 +370,15 @@
 distro = sid
 
 
+[sid-broken-symlinks]
+precedence = 9
+description = + Failing on broken symlinks.
+json-sections = none
+piuparts-flags =
+	%(flags-broken-symlinks)s
+distro = sid
+
+
 [testing2sid]
 precedence = 2
 piuparts-flags =
@@ -394,6 +451,49 @@
 distro = buster
 
 
+[buster-security]
+precedence = 2
+json-sections = none
+piuparts-flags =
+	%(flags-default)s
+	%(flags-start-buster)s
+	%(flags-end-buster)s
+depends-sections = buster
+distro = buster/updates
+
+
+[buster-pu]
+precedence = 3
+json-sections = none
+piuparts-flags =
+	%(flags-default)s
+	%(flags-start-buster)s
+	%(flags-end-buster)s
+depends-sections = buster
+distro = buster-proposed-updates
+
+
+[buster-proposed]
+precedence = 3
+json-sections = none
+piuparts-flags =
+	%(flags-default)s
+	%(flags-start-buster)s
+	%(flags-end-buster)s
+distro = buster-proposed
+
+
+[buster2proposed]
+precedence = 3
+json-sections = none
+piuparts-flags =
+	%(flags-default)s
+	%(flags-start-buster)s
+	%(flags-end-buster)s
+distro = buster
+upgrade-test-distros = buster buster-proposed
+
+
 [stretch2buster]
 precedence = 4
 json-sections = none
@@ -405,6 +505,20 @@
 upgrade-test-distros = stretch buster
 
 
+[stretch2Xbuster]
+precedence = 5
+json-sections = none
+description = + Testing two-stage upgrades.
+piuparts-flags =
+	--upgrade-before-dist-upgrade
+	%(flags-default)s
+	%(flags-start-stretch)s
+	%(flags-end-buster)s
+distro = stretch
+upgrade-test-distros = stretch buster
+exclude-known-problems = packages_have_been_kept_back_error.conf packages_have_been_kept_back_issue.conf
+
+
 [stretch2buster-rcmd]
 precedence = 5
 json-sections = none
@@ -418,6 +532,21 @@
 upgrade-test-distros = stretch buster
 
 
+[stretch2Xbuster-rcmd]
+precedence = 6
+json-sections = none
+description = + Testing two-stage upgrades with --install-recommends.
+piuparts-flags =
+	--install-recommends
+	--upgrade-before-dist-upgrade
+	%(flags-default)s
+	%(flags-start-stretch)s
+	%(flags-end-buster)s
+distro = stretch
+upgrade-test-distros = stretch buster
+exclude-known-problems = packages_have_been_kept_back_error.conf packages_have_been_kept_back_issue.conf
+
+
 [stretch2bpo2buster]
 precedence = 5
 json-sections = none
diff -Nru piuparts-0.97/master-bin/generate_daily_report.in piuparts-0.98/master-bin/generate_daily_report.in
--- piuparts-0.97/master-bin/generate_daily_report.in	2018-12-09 22:27:32.000000000 +0100
+++ piuparts-0.98/master-bin/generate_daily_report.in	2019-03-01 11:27:47.000000000 +0100
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 # Copyright © 2011-2013 Andreas Beckmann (a...@debian.org)
-# Copyright © 2018 Holger Levsen (hol...@layer-acht.org)
+# Copyright © 2018-2019 Holger Levsen (hol...@layer-acht.org)
 #
 # 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
@@ -24,6 +24,7 @@
 get_config_value HTDOCS global output-directory
 get_config_value URLBASE global urlbase https://piuparts.debian.org
 get_config_value PYTHONPATH global PYTHONPATH ''
+get_config_value TESTING global testing-suite
 
 export PYTHONPATH
 
@@ -82,7 +83,10 @@
 done | sed s#^$MASTER#$URLBASE# >> $DAILYTMP
 
 echo "$(cat $DAILYTMP | wc -l) new failures:" >> $DAILYREPORT
-cat $DAILYTMP >> $DAILYREPORT
+# show failures (and show failures in sid, $TESTING and testing2sid first
+cat $DAILYTMP | (egrep "/(sid|$TESTING|testing2sid)/" 2>/dev/null || true) >> $DAILYREPORT
+echo >> $DAILYREPORT
+cat $DAILYTMP | (egrep -v "/(sid|$TESTING|testing2sid)/" 2>/dev/null || true) >> $DAILYREPORT
 rm $DAILYTMP
 
 echo "" >> $DAILYREPORT
diff -Nru piuparts-0.97/master-bin/prepare_backup.in piuparts-0.98/master-bin/prepare_backup.in
--- piuparts-0.97/master-bin/prepare_backup.in	2019-01-13 16:57:15.000000000 +0100
+++ piuparts-0.98/master-bin/prepare_backup.in	2019-03-01 11:27:47.000000000 +0100
@@ -32,11 +32,13 @@
 get_config_value MASTER global master-directory
 get_config_value HTDOCS global output-directory
 get_config_value BACKUPDIR global backup-directory ''
-
+get_config_value TESTING global testing-suite
 
 copy_to_backupdir() {
 	if [ -f $MASTER/$1 ]; then
 		cp $MASTER/$1 $BACKUPDIR/$1
+	elif [ "$(basename $1)" = "submissions.txt" ] && ([ "$(dirname $1)" = "${TESTING}-pu" ] || [ "$(dirname $1)" = "${TESTING}-security" ]) ; then
+	       :	# during development these suites are created but stay empty
 	else
 		echo "Warning: $MASTER/$1 does not exist." # this produces a mail and that's a feature
 	fi
diff -Nru piuparts-0.97/master-bin/reschedule_piuparts_tests.in piuparts-0.98/master-bin/reschedule_piuparts_tests.in
--- piuparts-0.97/master-bin/reschedule_piuparts_tests.in	2018-04-22 04:30:08.000000000 +0200
+++ piuparts-0.98/master-bin/reschedule_piuparts_tests.in	2019-03-01 11:27:47.000000000 +0100
@@ -2,6 +2,7 @@
 set -e
 
 # Copyright © 2013-2017 Andreas Beckmann (a...@debian.org)
+# Copyright © 2018 Holger Levsen (hol...@layer-acht.org)
 #
 # 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
@@ -21,9 +22,7 @@
 
 get_config_value MASTER global master-directory
 get_config_value SECTIONS global sections
-
-
-TESTING="buster"
+get_config_value TESTING global testing-suite
 
 dryrun=""
 current=""
diff -Nru piuparts-0.97/piuparts.py piuparts-0.98/piuparts.py
--- piuparts-0.97/piuparts.py	2019-02-11 12:30:10.000000000 +0100
+++ piuparts-0.98/piuparts.py	2019-03-01 11:27:47.000000000 +0100
@@ -3,7 +3,7 @@
 #
 # Copyright 2005 Lars Wirzenius (l...@iki.fi)
 # Copyright © 2007-2018 Holger Levsen (hol...@layer-acht.org)
-# Copyright © 2010-2018 Andreas Beckmann (a...@debian.org)
+# Copyright © 2010-2019 Andreas Beckmann (a...@debian.org)
 #
 # 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
@@ -672,7 +672,7 @@
     parts = []
     while pathname:
         (head, tail) = os.path.split(pathname)
-        # print "split '%s' => '%s' + '%s'" % (pathname, head, tail)
+        # print("split '%s' => '%s' + '%s'" % (pathname, head, tail))
         if tail:
             parts.append(tail)
         elif not head:
@@ -697,18 +697,18 @@
     one for each symlink encountered.
 
     """
-    # print "\nCANONICALIZE %s %s" % (root, pathname)
+    # print("\nCANONICALIZE %s %s" % (root, pathname))
     links = []
     seen = []
     parts = split_path(pathname)
-    # print "PARTS ", list(reversed(parts))
+    # print("PARTS ", list(reversed(parts)))
     path = "/"
     while parts:
         tag = "\n".join(parts + [path])
-        # print "TEST '%s' + " % path, list(reversed(parts))
+        # print("TEST '%s' + " % path, list(reversed(parts)))
         if tag in seen or len(seen) > 1024:
             fullpath = os.path.join(path, *reversed(parts))
-            # print "LOOP %s" % fullpath
+            # print("LOOP %s" % fullpath)
             path = fullpath
             logging.error("ELOOP: Too many symbolic links in '%s'" % path)
             break
@@ -724,14 +724,14 @@
             path = "/"
         elif os.path.islink(rootedpath):
             target = os.readlink(rootedpath)
-            # print "LINK to '%s'" % target
+            # print("LINK to '%s'" % target)
             links.append((newpath, target))
             if os.path.isabs(target):
                 path = "/"
             parts.extend(split_path(target))
         else:
             path = newpath
-    # print "FINAL '%s'" % path
+    # print("FINAL '%s'" % path)
     if report_links:
         return links
     return path
@@ -747,7 +747,7 @@
 
     # The symlink chain, if any, has now been resolved. Does the target
     # exist?
-    # print "EXISTS ", pathname, os.path.exists(pathname)
+    # print("EXISTS ", pathname, os.path.exists(pathname))
     return not os.path.exists(pathname)
 
 
@@ -1561,6 +1561,10 @@
             self.apt_get_install(to_remove=all_to_remove,
                                  to_install=version_qualified,
                                  flags=["--no-install-recommends", "--force-yes"])
+            # reinstall potentially downgraded packages, they may have
+            # missing files in case of unfortunate Breaks+Replaces timing
+            self.apt_get_install(to_install=version_qualified,
+                                 flags=["--no-install-recommends", "--reinstall"])
         else:
             self.remove_packages(all_to_remove)
 
diff -Nru piuparts-0.97/piuparts-report.py piuparts-0.98/piuparts-report.py
--- piuparts-0.97/piuparts-report.py	2019-02-11 12:30:10.000000000 +0100
+++ piuparts-0.98/piuparts-report.py	2019-03-01 11:27:47.000000000 +0100
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 #
 # Copyright 2005 Lars Wirzenius (l...@iki.fi)
-# Copyright 2009-2018 Holger Levsen (hol...@layer-acht.org)
+# Copyright 2009-2019 Holger Levsen (hol...@layer-acht.org)
 # Copyright © 2011-2018 Andreas Beckmann (a...@debian.org)
 # Copyright 2013 David Steele (dste...@gmail.com)
 #
@@ -758,6 +758,8 @@
                  % (doc_root, current_section)
     tablerows += "<tr><td class=\"contentcell\"><a href=\"%s/%s/source/\">by source package</a></td></tr>\n" \
                  % (doc_root, current_section)
+    tablerows += "<tr><td class=\"contentcell\">states <a href=\"%s/%s/states.png/\">graph</a></td></tr>\n" \
+                 % (doc_root, current_section)
     tablerows += "<tr class=\"titlerow\"><td class=\"alerttitlecell\">all tested suites</td></tr>"
     for section in section_names:
         tablerows += ("<tr class=\"normalrow\"><td class=\"contentcell\"><a href='%s/%s'>%s</a></td></tr>\n") % \
diff -Nru piuparts-0.97/piuparts-slave.py piuparts-0.98/piuparts-slave.py
--- piuparts-0.97/piuparts-slave.py	2019-02-11 12:30:10.000000000 +0100
+++ piuparts-0.98/piuparts-slave.py	2019-03-01 11:27:47.000000000 +0100
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 #
 # Copyright 2005 Lars Wirzenius (l...@iki.fi)
-# Copyright © 2011-2017 Andreas Beckmann (a...@debian.org)
+# Copyright © 2011-2019 Andreas Beckmann (a...@debian.org)
 #
 # 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
@@ -919,17 +919,22 @@
                                        time.gmtime()))
             output.write("Executing: " + command2string(command) + "\n\n")
             logging.debug("Executing: " + command2string(command))
-            p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
-            for line in p.stdout:
-                output.write(line)
-                logging.debug(">> " + line.rstrip())
-            p.wait()
-            output.write(time.strftime("\nEnd: %Y-%m-%d %H:%M:%S %Z\n",
-                                       time.gmtime()))
-            if os.path.exists(tarball + ".new"):
-                os.rename(tarball + ".new", tarball)
-            else:
-                logging.error("Tarball creation failed, see %s" % output_name)
+            try:
+                p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+                for line in p.stdout:
+                    output.write(line)
+                    logging.debug(">> " + line.rstrip())
+                p.wait()
+                output.write(time.strftime("\nEnd: %Y-%m-%d %H:%M:%S %Z\n",
+                                           time.gmtime()))
+                if os.path.exists(tarball + ".new"):
+                    os.rename(tarball + ".new", tarball)
+                else:
+                    logging.error("Tarball creation failed, see %s" % output_name)
+            except IOError:
+                output.write(time.strftime("\nFAIL: %Y-%m-%d %H:%M:%S %Z\n",
+                                           time.gmtime()))
+                logging.error("Tarball creation failed with IOError")
 
 
 def create_file(filename, contents):
diff -Nru piuparts-0.97/TODO piuparts-0.98/TODO
--- piuparts-0.97/TODO	2018-10-21 13:56:11.000000000 +0200
+++ piuparts-0.98/TODO	2019-03-01 11:27:47.000000000 +0100
@@ -6,7 +6,9 @@
 expressed…
 
 
-Some stuff we might tackle for 0.9x, during the buster development cycle:
+Some stuff we might tackle during the bullseye development cycle:
+
+- switch to python3 (that's actually a must)
 
 - do an 1.0.0 release, it's about time since 10 years :)
 
@@ -87,14 +89,10 @@
   (piuparts), adopting apt's naming
 
 
-Ideas for 1.0.x and later:
-
-- piuparts.conf.pejacevic: maybe use mirror via nfs (faster)
+Ideas for later:
 
 - maybe compress all logfiles
 
-- piuparts-master: keep track of to whom a reservation was given
-
 - install from git/Makefile: remove the need for /etc/piuparts
 
 - accept a PIUPARTS_CONF environment variable everywhere to point to a different
@@ -139,10 +137,6 @@
   debugging output for piuparts.py - see
   http://docs.python.org/library/logging.html
 
-- commandline-switches for all programms
-
-- move shell cronjobs functionality into master, slave & report
-
 - automated testing of piuparts using an archive of known broken packages:
   - create archive of broken packages to provide test cases for piuparts testing.
   - create emacspeak-broken-dpkg-preconfigure package for broken repo. (then later

Attachment: signature.asc
Description: PGP signature

Reply via email to