<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-12491</id>
	<title>Nabble - debian-dak</title>
	<updated>2009-11-28T15:57:25Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/debian-dak-f12491.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/debian-dak-f12491.html" />
	<subtitle type="html">Discussion about the Debian Archive Software, consisting of dak for the archive and the buildd related parts wanna-build/sbuild.</subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26558291</id>
	<title>[dak/master] fix up cross-component logic</title>
	<published>2009-11-28T15:57:25Z</published>
	<updated>2009-11-28T15:57:25Z</updated>
	<author>
		<name>Mark Hymers-3</name>
	</author>
	<content type="html">Signed-off-by: Mark Hymers &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26558291&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mhy@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;daklib/dbconn.py | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;daklib/queue.py &amp;nbsp;| &amp;nbsp; 37 +++++++++++++++++++++++++++++++------
&lt;br&gt;&amp;nbsp;2 files changed, 32 insertions(+), 7 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/daklib/dbconn.py b/daklib/dbconn.py
&lt;br&gt;index 1418d08..2b2d01d 100644
&lt;br&gt;--- a/daklib/dbconn.py
&lt;br&gt;+++ b/daklib/dbconn.py
&lt;br&gt;@@ -2291,7 +2291,7 @@ def add_dsc_to_db(u, filename, session=None):
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;session.flush()
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return dsc_component, dsc_location_id, pfs
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return source, dsc_component, dsc_location_id, pfs
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;__all__.append('add_dsc_to_db')
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/daklib/queue.py b/daklib/queue.py
&lt;br&gt;index d5057a6..9a238bb 100755
&lt;br&gt;--- a/daklib/queue.py
&lt;br&gt;+++ b/daklib/queue.py
&lt;br&gt;@@ -1830,7 +1830,7 @@ distribution.&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Add the .dsc file to the DB first
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for newfile, entry in self.pkg.files.items():
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if entry[&amp;quot;type&amp;quot;] == &amp;quot;dsc&amp;quot;:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dsc_component, dsc_location_id, pfs = add_dsc_to_db(self, newfile, session)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;source, dsc_component, dsc_location_id, pfs = add_dsc_to_db(self, newfile, session)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for j in pfs:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;poolfiles.append(j)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1842,6 +1842,7 @@ distribution.&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# If this is a sourceful diff only upload that is moving
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# cross-component we need to copy the .orig files into the new
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# component too for the same reasons as above.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# XXX: mhy: I think this should be in add_dsc_to_db
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if self.pkg.changes[&amp;quot;architecture&amp;quot;].has_key(&amp;quot;source&amp;quot;):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for orig_file in self.pkg.orig_files.keys():
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if not self.pkg.orig_files[orig_file].has_key(&amp;quot;id&amp;quot;):
&lt;br&gt;@@ -1861,19 +1862,43 @@ distribution.&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# TODO: Care about size/md5sum collisions etc
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(found, newf) = check_poolfile(new_filename, old_dat['size'], old_dat['md5sum'], dsc_location_id, session)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# TODO: Uhm, what happens if newf isn't None - something has gone badly and we should cope
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if newf is None:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;utils.copy(old_filename, os.path.join(cnf[&amp;quot;Dir::Pool&amp;quot;], new_filename))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;newf = add_poolfile(new_filename, old_dat, dsc_location_id, session)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# TODO: Check that there's only 1 here
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;source = get_sources_from_name(self.pkg.changes[&amp;quot;source&amp;quot;], self.pkg.changes[&amp;quot;version&amp;quot;])[0]
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dscf = get_dscfiles(source_id=source.source_id, poolfile_id=orig_file_id, session=session)[0]
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dscf.poolfile_id = newf.file_id
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;session.add(dscf)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;session.flush()
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Don't reference the old file from this changes
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for p in poolfiles:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if p.file_id == oldf.file_id:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;poolfiles.remove(p)
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;poolfiles.append(newf)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Fix up the DSC references
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;toremove = []
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for df in source.srcfiles:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if df.poolfile.file_id == oldf.file_id:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Add a new DSC entry and mark the old one for deletion
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Don't do it in the loop so we don't change the thing we're iterating over
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;newdscf = DSCFile()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;newdscf.source_id = source.source_id
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;newdscf.poolfile_id = newf.file_id
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;session.add(newdscf)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;toremove.append(df)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for df in toremove:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;session.delete(df)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Flush our changes
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;session.flush()
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Make sure that our source object is up-to-date
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;session.expire(source)
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Install the files into the pool
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for newfile, entry in self.pkg.files.items():
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destination = os.path.join(cnf[&amp;quot;Dir::Pool&amp;quot;], entry[&amp;quot;pool name&amp;quot;], newfile)
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26558291&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26558291&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master--fix-up-cross-component-logic-tp26558291p26558291.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26558064</id>
	<title>[dak/master] fix variable references</title>
	<published>2009-11-28T15:22:02Z</published>
	<updated>2009-11-28T15:22:02Z</updated>
	<author>
		<name>Mark Hymers-3</name>
	</author>
	<content type="html">Signed-off-by: Mark Hymers &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26558064&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mhy@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;daklib/queue.py | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;1 files changed, 1 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/daklib/queue.py b/daklib/queue.py
&lt;br&gt;index 0433a96..d5057a6 100755
&lt;br&gt;--- a/daklib/queue.py
&lt;br&gt;+++ b/daklib/queue.py
&lt;br&gt;@@ -1859,7 +1859,7 @@ distribution.&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new_filename = os.path.join(utils.poolify(self.pkg.changes[&amp;quot;source&amp;quot;], dsc_component), os.path.basename(old_filename))
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# TODO: Care about size/md5sum collisions etc
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(found, newf) = check_poolfile(new_filename, file_size, file_md5sum, dsc_location_id, session)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(found, newf) = check_poolfile(new_filename, old_dat['size'], old_dat['md5sum'], dsc_location_id, session)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if newf is None:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;utils.copy(old_filename, os.path.join(cnf[&amp;quot;Dir::Pool&amp;quot;], new_filename))
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26558064&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26558064&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master--fix-variable-references-tp26558064p26558064.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26557538</id>
	<title>[dak/master 2/2] do not create new db views just improve older ones</title>
	<published>2009-11-28T14:12:56Z</published>
	<updated>2009-11-28T14:12:56Z</updated>
	<author>
		<name>Torsten Werner</name>
	</author>
	<content type="html">Signed-off-by: Torsten Werner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26557538&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;twerner@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dak/cruft_report.py &amp;nbsp; | &amp;nbsp; 54 +++++++++++++++++++++++++++++++++---------------
&lt;br&gt;&amp;nbsp;dak/dakdb/update27.py | &amp;nbsp; 51 ----------------------------------------------
&lt;br&gt;&amp;nbsp;2 files changed, 37 insertions(+), 68 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dak/cruft_report.py b/dak/cruft_report.py
&lt;br&gt;index 384ad0e..ef9362f 100755
&lt;br&gt;--- a/dak/cruft_report.py
&lt;br&gt;+++ b/dak/cruft_report.py
&lt;br&gt;@@ -273,38 +273,58 @@ def do_dubious_nbs(dubious_nbs):
&lt;br&gt;&amp;nbsp;################################################################################
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;def obsolete_source(suite_name, session):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;returns obsolete source packages for suite_name sorted by
&lt;br&gt;- &amp;nbsp; &amp;nbsp;install_date&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;returns obsolete source packages for suite_name without binaries
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;in the same suite sorted by install_date; install_date should help
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;detecting source only (or binary throw away) uploads; duplicates in
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;the suite are skipped
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;subquery 'source_suite_unique' returns source package names from
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;suite without duplicates; the rationale behind is that neither
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;cruft-report nor rm cannot handle duplicates (yet)&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;query = &amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;-SELECT os.src, os.source, os.version, os.install_date
&lt;br&gt;- &amp;nbsp; &amp;nbsp;FROM obsolete_source os
&lt;br&gt;- &amp;nbsp; &amp;nbsp;JOIN suite s on s.id = os.suite
&lt;br&gt;- &amp;nbsp; &amp;nbsp;WHERE s.suite_name = :suite_name
&lt;br&gt;+WITH source_suite_unique AS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;(SELECT source, suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM source_suite GROUP BY source, suite HAVING count(*) = 1)
&lt;br&gt;+SELECT ss.src, ss.source, ss.version,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;to_char(ss.install_date, 'YYYY-MM-DD') AS install_date
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;FROM source_suite ss
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;JOIN source_suite_unique ssu
&lt;br&gt;+	ON ss.source = ssu.source AND ss.suite = ssu.suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;JOIN suite s ON s.id = ss.suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LEFT JOIN bin_associations_binaries bab
&lt;br&gt;+	ON ss.src = bab.source AND ss.suite = bab.suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;WHERE s.suite_name = :suite_name AND bab.id IS NULL
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ORDER BY install_date&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;args = { 'suite_name': suite_name }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return session.execute(query, args)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;def source_bin(source, session):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;returns binaries built by source for all or no suite&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;returns binaries built by source for all or no suite grouped and
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ordered by package name&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;query = &amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;-SELECT package
&lt;br&gt;- &amp;nbsp; &amp;nbsp;FROM source_bin
&lt;br&gt;- &amp;nbsp; &amp;nbsp;WHERE source = :source
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ORDER BY package&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+SELECT b.package
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;FROM binaries b
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;JOIN src_associations_src sas ON b.source = sas.src
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;WHERE sas.source = :source
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;GROUP BY b.package
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ORDER BY b.package&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;args = { 'source': source }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return session.execute(query, args)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;def newest_source_bab(suite_name, package, session):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;returns newest source that builds binary package in suite&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;returns newest source that builds binary package in suite grouped
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;and sorted by source and package name&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;query = &amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;-SELECT source, srcver
&lt;br&gt;- &amp;nbsp; &amp;nbsp;FROM newest_source_bab nsb
&lt;br&gt;- &amp;nbsp; &amp;nbsp;JOIN suite s on s.id = nsb.suite
&lt;br&gt;- &amp;nbsp; &amp;nbsp;WHERE s.suite_name = :suite_name AND nsb.package = :package
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ORDER BY source&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+SELECT sas.source, MAX(sas.version) AS srcver
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;FROM src_associations_src sas
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;JOIN bin_associations_binaries bab ON sas.src = bab.source
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;JOIN suite s on s.id = bab.suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;WHERE s.suite_name = :suite_name AND bab.package = :package
&lt;br&gt;+	GROUP BY sas.source, bab.package
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ORDER BY sas.source, bab.package&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;args = { 'suite_name': suite_name, 'package': package }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return session.execute(query, args)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/dak/dakdb/update27.py b/dak/dakdb/update27.py
&lt;br&gt;index ee8f584..b06932b 100755
&lt;br&gt;--- a/dak/dakdb/update27.py
&lt;br&gt;+++ b/dak/dakdb/update27.py
&lt;br&gt;@@ -50,53 +50,6 @@ CREATE OR REPLACE VIEW bin_associations_binaries AS
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN binaries ON bin_associations.bin = binaries.id;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Drop old views.&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS source_suite_unique CASCADE&amp;quot;)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS obsolete_source CASCADE&amp;quot;)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS source_bin CASCADE&amp;quot;)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS newest_source_bab CASCADE&amp;quot;)
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Create new views.&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# returns source package names from suite without duplicates;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# rationale: cruft-report and rm cannot handle duplicates (yet)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;-CREATE VIEW source_suite_unique
&lt;br&gt;- &amp;nbsp; &amp;nbsp;AS SELECT source, suite
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM source_suite GROUP BY source, suite HAVING count(*) = 1;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# returns obsolete sources without binaries in the same suite;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# outputs install_date to detect source only (or binary throw away)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# uploads; duplicates are skipped
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;-CREATE VIEW obsolete_source
&lt;br&gt;- &amp;nbsp; &amp;nbsp;AS SELECT ss.src, ss.source, ss.version, ss.suite,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;to_char(ss.install_date, 'YYYY-MM-DD') AS install_date
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM source_suite ss
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN source_suite_unique ssu
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ON ss.source = ssu.source AND ss.suite = ssu.suite
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LEFT JOIN bin_associations_binaries bab
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ON ss.src = bab.source AND ss.suite = bab.suite
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WHERE bab.id IS NULL;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# returns source package names and its binaries from any suite
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;-CREATE VIEW source_bin
&lt;br&gt;- &amp;nbsp; &amp;nbsp;AS SELECT b.package, MAX(b.version) AS version, sas.source
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM binaries b
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN src_associations_src sas
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ON b.source = sas.src
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GROUP BY b.package, sas.source
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# returns binaries from suite and their source with max(version)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# grouped by source name, binary name, and suite
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;-CREATE VIEW newest_source_bab
&lt;br&gt;- &amp;nbsp; &amp;nbsp;AS SELECT sas.source, MAX(sas.version) AS srcver, bab.package, bab.suite
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM src_associations_src sas
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN bin_associations_binaries bab ON sas.src = bab.source
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GROUP BY sas.source, bab.package, bab.suite;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Grant permissions to views.&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON binfiles_suite_component_arch TO PUBLIC;&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON srcfiles_suite_component TO PUBLIC;&amp;quot;);
&lt;br&gt;@@ -116,10 +69,6 @@ CREATE VIEW newest_source_bab
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON src_associations_bin TO PUBLIC;&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON almost_obsolete_all_associations TO PUBLIC;&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON obsolete_all_associations TO PUBLIC;&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON source_suite_unique TO PUBLIC;&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON obsolete_source TO PUBLIC;&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON source_bin TO PUBLIC;&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON newest_source_bab TO PUBLIC;&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Committing&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;UPDATE config SET value = '27' WHERE name = 'db_revision'&amp;quot;)
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26557538&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26557538&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-2-2--do-not-create-new-db-views-just-improve-older-ones-tp26557538p26557538.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26557541</id>
	<title>[dak/master 1/2] cruft-report: reimplement 'obsolete source'</title>
	<published>2009-11-28T14:12:56Z</published>
	<updated>2009-11-28T14:12:56Z</updated>
	<author>
		<name>Torsten Werner</name>
	</author>
	<content type="html">Signed-off-by: Torsten Werner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26557541&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;twerner@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dak/cruft_report.py &amp;nbsp; | &amp;nbsp;109 +++++++++++++++++++++++-----------------
&lt;br&gt;&amp;nbsp;dak/dakdb/update27.py | &amp;nbsp;131 +++++++++++++++++++++++++++++++++++++++++++++++++
&lt;br&gt;&amp;nbsp;dak/update_db.py &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;3 files changed, 194 insertions(+), 48 deletions(-)
&lt;br&gt;&amp;nbsp;create mode 100755 dak/dakdb/update27.py
&lt;br&gt;&lt;br&gt;diff --git a/dak/cruft_report.py b/dak/cruft_report.py
&lt;br&gt;index 73619d5..384ad0e 100755
&lt;br&gt;--- a/dak/cruft_report.py
&lt;br&gt;+++ b/dak/cruft_report.py
&lt;br&gt;@@ -272,47 +272,64 @@ def do_dubious_nbs(dubious_nbs):
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;################################################################################
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-def do_obsolete_source(duplicate_bins, bin2source):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;obsolete = {}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;for key in duplicate_bins.keys():
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(source_a, source_b) = key.split('_')
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for source in [ source_a, source_b ]:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if not obsolete.has_key(source):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if not source_binaries.has_key(source):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Source has already been removed
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;continue
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obsolete[source] = [ i.strip() for i in source_binaries[source].split(',') ]
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for binary in duplicate_bins[key]:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if bin2source.has_key(binary) and bin2source[binary][&amp;quot;source&amp;quot;] == source:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;continue
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if binary in obsolete[source]:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obsolete[source].remove(binary)
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;to_remove = []
&lt;br&gt;- &amp;nbsp; &amp;nbsp;output = &amp;quot;Obsolete source package\n&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;output += &amp;quot;-----------------------\n\n&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;obsolete_keys = obsolete.keys()
&lt;br&gt;- &amp;nbsp; &amp;nbsp;obsolete_keys.sort()
&lt;br&gt;- &amp;nbsp; &amp;nbsp;for source in obsolete_keys:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if not obsolete[source]:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;to_remove.append(source)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;output += &amp;quot; * %s (%s)\n&amp;quot; % (source, source_versions[source])
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for binary in [ i.strip() for i in source_binaries[source].split(',') ]:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if bin2source.has_key(binary):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;output += &amp;quot; &amp;nbsp; &amp;nbsp;o %s (%s) is built by %s.\n&amp;quot; \
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;% (binary, bin2source[binary][&amp;quot;version&amp;quot;],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bin2source[binary][&amp;quot;source&amp;quot;])
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;output += &amp;quot; &amp;nbsp; &amp;nbsp;o %s is not built.\n&amp;quot; % binary
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;output += &amp;quot;\n&amp;quot;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if to_remove:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print output
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Suggested command:&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot; dak rm -S -p -m \&amp;quot;[auto-cruft] obsolete source package\&amp;quot; %s&amp;quot; % (&amp;quot; &amp;quot;.join(to_remove))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print
&lt;br&gt;+def obsolete_source(suite_name, session):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;returns obsolete source packages for suite_name sorted by
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;install_date&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;query = &amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+SELECT os.src, os.source, os.version, os.install_date
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;FROM obsolete_source os
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;JOIN suite s on s.id = os.suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;WHERE s.suite_name = :suite_name
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ORDER BY install_date&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;args = { 'suite_name': suite_name }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return session.execute(query, args)
&lt;br&gt;+
&lt;br&gt;+def source_bin(source, session):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;returns binaries built by source for all or no suite&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;query = &amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+SELECT package
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;FROM source_bin
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;WHERE source = :source
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ORDER BY package&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;args = { 'source': source }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return session.execute(query, args)
&lt;br&gt;+
&lt;br&gt;+def newest_source_bab(suite_name, package, session):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;returns newest source that builds binary package in suite&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;query = &amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+SELECT source, srcver
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;FROM newest_source_bab nsb
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;JOIN suite s on s.id = nsb.suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;WHERE s.suite_name = :suite_name AND nsb.package = :package
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ORDER BY source&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;args = { 'suite_name': suite_name, 'package': package }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return session.execute(query, args)
&lt;br&gt;+
&lt;br&gt;+def report_obsolete_source(suite_name, session):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;rows = obsolete_source(suite_name, session)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if rows.rowcount == 0:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;print \
&lt;br&gt;+&amp;quot;&amp;quot;&amp;quot;Obsolete source packages in suite %s
&lt;br&gt;+----------------------------------%s\n&amp;quot;&amp;quot;&amp;quot; % \
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(suite_name, '-' * len(suite_name))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for os_row in rows.fetchall():
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(src, old_source, version, install_date) = os_row
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot; * obsolete source %s version %s installed at %s&amp;quot; % \
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(old_source, version, install_date)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for sb_row in source_bin(old_source, session):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(package, ) = sb_row
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot; &amp;nbsp; - has built binary %s&amp;quot; % package
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for nsb_row in newest_source_bab(suite_name, package, session):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(new_source, srcver) = nsb_row
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot; &amp;nbsp; &amp;nbsp; currently built by source %s version %s&amp;quot; % \
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(new_source, srcver)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot; &amp;nbsp; - suggested command:&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rm_opts = &amp;quot;-S -p -m \&amp;quot;[auto-cruft] obsolete source package\&amp;quot;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot; &amp;nbsp; &amp;nbsp; dak rm -s %s %s %s\n&amp;quot; % (suite_name, rm_opts, old_source)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;def get_suite_binaries(suite, session):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;# Initalize a large hash table of all binary packages
&lt;br&gt;@@ -358,9 +375,7 @@ def main ():
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;# Set up checks based on mode
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if Options[&amp;quot;Mode&amp;quot;] == &amp;quot;daily&amp;quot;:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;checks = [ &amp;quot;nbs&amp;quot;, &amp;quot;nviu&amp;quot;, &amp;quot;nvit&amp;quot; ]
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# 'obsolete source' is broken since the introduction of dak dominate
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#checks = [ &amp;quot;nbs&amp;quot;, &amp;quot;nviu&amp;quot;, &amp;quot;nvit&amp;quot;, &amp;quot;obsolete source&amp;quot; ]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;checks = [ &amp;quot;nbs&amp;quot;, &amp;quot;nviu&amp;quot;, &amp;quot;nvit&amp;quot;, &amp;quot;obsolete source&amp;quot; ]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;elif Options[&amp;quot;Mode&amp;quot;] == &amp;quot;full&amp;quot;:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;checks = [ &amp;quot;nbs&amp;quot;, &amp;quot;nviu&amp;quot;, &amp;quot;nvit&amp;quot;, &amp;quot;obsolete source&amp;quot;, &amp;quot;nfu&amp;quot;, &amp;quot;dubious nbs&amp;quot;, &amp;quot;bnb&amp;quot;, &amp;quot;bms&amp;quot;, &amp;quot;anais&amp;quot; ]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;@@ -385,6 +400,9 @@ def main ():
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;suite_id = suite.suite_id
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;suite_name = suite.suite_name.lower()
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if &amp;quot;obsolete source&amp;quot; in checks:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;report_obsolete_source(suite_name, session)
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;bin_not_built = {}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if &amp;quot;bnb&amp;quot; in checks:
&lt;br&gt;@@ -503,9 +521,6 @@ def main ():
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;packages.close()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;os.unlink(temp_filename)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if &amp;quot;obsolete source&amp;quot; in checks:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;do_obsolete_source(duplicate_bins, bin2source)
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;# Distinguish dubious (version numbers match) and 'real' NBS (they don't)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;dubious_nbs = {}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;real_nbs = {}
&lt;br&gt;diff --git a/dak/dakdb/update27.py b/dak/dakdb/update27.py
&lt;br&gt;new file mode 100755
&lt;br&gt;index 0000000..ee8f584
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/dak/dakdb/update27.py
&lt;br&gt;@@ -0,0 +1,131 @@
&lt;br&gt;+#!/usr/bin/env python
&lt;br&gt;+
&lt;br&gt;+&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+Add views for new obsolete source detection.
&lt;br&gt;+
&lt;br&gt;+@contact: Debian FTP Master &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26557541&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ftpmaster@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+@copyright: 2009 &amp;nbsp;Torsten Werner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26557541&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;twerner@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+@license: GNU General Public License version 2 or later
&lt;br&gt;+&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+
&lt;br&gt;+# This program is free software; you can redistribute it and/or modify
&lt;br&gt;+# it under the terms of the GNU General Public License as published by
&lt;br&gt;+# the Free Software Foundation; either version 2 of the License, or
&lt;br&gt;+# (at your option) any later version.
&lt;br&gt;+
&lt;br&gt;+# This program is distributed in the hope that it will be useful,
&lt;br&gt;+# but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+# GNU General Public License for more details.
&lt;br&gt;+
&lt;br&gt;+# You should have received a copy of the GNU General Public License
&lt;br&gt;+# along with this program; if not, write to the Free Software
&lt;br&gt;+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA &amp;nbsp;02111-1307 &amp;nbsp;USA
&lt;br&gt;+
&lt;br&gt;+import psycopg2
&lt;br&gt;+
&lt;br&gt;+def do_update(self):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;print &amp;quot;Add/modify views for obsolete source detection.&amp;quot;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;try:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c = self.db.cursor()
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Replace old views.&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# joins src_associations and source
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE OR REPLACE VIEW source_suite AS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SELECT src_associations.id, source.id AS src, source.source, source.version,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; src_associations.suite, suite.suite_name, source.install_date
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM source
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN src_associations ON source.id = src_associations.source
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN suite ON suite.id = src_associations.suite;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# joins bin_associations and binaries
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE OR REPLACE VIEW bin_associations_binaries AS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SELECT bin_associations.id, bin_associations.bin, binaries.package,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binaries.version, bin_associations.suite, binaries.architecture,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binaries.source
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM bin_associations
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN binaries ON bin_associations.bin = binaries.id;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Drop old views.&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS source_suite_unique CASCADE&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS obsolete_source CASCADE&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS source_bin CASCADE&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS newest_source_bab CASCADE&amp;quot;)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Create new views.&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# returns source package names from suite without duplicates;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# rationale: cruft-report and rm cannot handle duplicates (yet)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE VIEW source_suite_unique
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;AS SELECT source, suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM source_suite GROUP BY source, suite HAVING count(*) = 1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# returns obsolete sources without binaries in the same suite;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# outputs install_date to detect source only (or binary throw away)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# uploads; duplicates are skipped
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE VIEW obsolete_source
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;AS SELECT ss.src, ss.source, ss.version, ss.suite,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;to_char(ss.install_date, 'YYYY-MM-DD') AS install_date
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM source_suite ss
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN source_suite_unique ssu
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ON ss.source = ssu.source AND ss.suite = ssu.suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LEFT JOIN bin_associations_binaries bab
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ON ss.src = bab.source AND ss.suite = bab.suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WHERE bab.id IS NULL;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# returns source package names and its binaries from any suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE VIEW source_bin
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;AS SELECT b.package, MAX(b.version) AS version, sas.source
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM binaries b
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN src_associations_src sas
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ON b.source = sas.src
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GROUP BY b.package, sas.source
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# returns binaries from suite and their source with max(version)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# grouped by source name, binary name, and suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE VIEW newest_source_bab
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;AS SELECT sas.source, MAX(sas.version) AS srcver, bab.package, bab.suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM src_associations_src sas
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN bin_associations_binaries bab ON sas.src = bab.source
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GROUP BY sas.source, bab.package, bab.suite;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Grant permissions to views.&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON binfiles_suite_component_arch TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON srcfiles_suite_component TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON binaries_suite_arch TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON newest_all_associations TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON obsolete_any_by_all_associations TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON newest_any_associations TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON obsolete_any_associations TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON source_suite TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON newest_source TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON newest_src_association TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON any_associations_source TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON src_associations_src TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON almost_obsolete_src_associations TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON obsolete_src_associations TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON bin_associations_binaries TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON src_associations_bin TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON almost_obsolete_all_associations TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON obsolete_all_associations TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON source_suite_unique TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON obsolete_source TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON source_bin TO PUBLIC;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;GRANT SELECT ON newest_source_bab TO PUBLIC;&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Committing&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;UPDATE config SET value = '27' WHERE name = 'db_revision'&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.db.commit()
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;except psycopg2.InternalError, msg:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.db.rollback()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;raise DBUpdateError, &amp;quot;Database error, rollback issued. Error message : %s&amp;quot; % (str(msg))
&lt;br&gt;+
&lt;br&gt;diff --git a/dak/update_db.py b/dak/update_db.py
&lt;br&gt;index e7b1984..5d1cb86 100755
&lt;br&gt;--- a/dak/update_db.py
&lt;br&gt;+++ b/dak/update_db.py
&lt;br&gt;@@ -45,7 +45,7 @@ from daklib.dak_exceptions import DBUpdateError
&lt;br&gt;&amp;nbsp;################################################################################
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;Cnf = None
&lt;br&gt;-required_database_schema = 26
&lt;br&gt;+required_database_schema = 27
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;################################################################################
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26557541&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26557541&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-1-2--cruft-report%3A-reimplement-%27obsolete-source%27-tp26557541p26557541.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26555866</id>
	<title>[dak/master] fix OverrideSuite handling</title>
	<published>2009-11-28T10:34:31Z</published>
	<updated>2009-11-28T10:34:31Z</updated>
	<author>
		<name>Torsten Werner</name>
	</author>
	<content type="html">do it in determine_new() (queue.py) instead of do_new() (process_new.py)
&lt;br&gt;&lt;br&gt;Signed-off-by: Torsten Werner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26555866&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;twerner@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dak/process_new.py | &amp;nbsp; 15 ---------------
&lt;br&gt;&amp;nbsp;daklib/queue.py &amp;nbsp; &amp;nbsp;| &amp;nbsp; 16 ++++++++++++++++
&lt;br&gt;&amp;nbsp;2 files changed, 16 insertions(+), 15 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dak/process_new.py b/dak/process_new.py
&lt;br&gt;index 060fa23..894d07d 100755
&lt;br&gt;--- a/dak/process_new.py
&lt;br&gt;+++ b/dak/process_new.py
&lt;br&gt;@@ -611,21 +611,6 @@ def do_new(upload, session):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;# Make a copy of distribution we can happily trample on
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;changes[&amp;quot;suite&amp;quot;] = copy.copy(changes[&amp;quot;distribution&amp;quot;])
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;# Fix up the list of target suites
&lt;br&gt;- &amp;nbsp; &amp;nbsp;for suite in changes[&amp;quot;suite&amp;quot;].keys():
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;override = cnf.Find(&amp;quot;Suite::%s::OverrideSuite&amp;quot; % (suite))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if override:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(olderr, newerr) = (get_suite(suite, session) == None,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;get_suite(override, session) == None)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if olderr or newerr:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(oinv, newinv) = (&amp;quot;&amp;quot;, &amp;quot;&amp;quot;)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if olderr: oinv = &amp;quot;invalid &amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if newerr: ninv = &amp;quot;invalid &amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;warning: overriding %ssuite %s to %ssuite %s&amp;quot; % (
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;oinv, suite, ninv, override)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;del changes[&amp;quot;suite&amp;quot;][suite]
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;changes[&amp;quot;suite&amp;quot;][override] = 1
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;# The main NEW processing loop
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;done = 0
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;while not done:
&lt;br&gt;diff --git a/daklib/queue.py b/daklib/queue.py
&lt;br&gt;index 5ea545f..0433a96 100755
&lt;br&gt;--- a/daklib/queue.py
&lt;br&gt;+++ b/daklib/queue.py
&lt;br&gt;@@ -148,6 +148,22 @@ def determine_new(changes, files, warn=1):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if f.has_key(&amp;quot;othercomponents&amp;quot;):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new[pkg][&amp;quot;othercomponents&amp;quot;] = f[&amp;quot;othercomponents&amp;quot;]
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# Fix up the list of target suites
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;cnf = Config()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for suite in changes[&amp;quot;suite&amp;quot;].keys():
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;override = cnf.Find(&amp;quot;Suite::%s::OverrideSuite&amp;quot; % (suite))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if override:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(olderr, newerr) = (get_suite(suite, session) == None,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;get_suite(override, session) == None)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if olderr or newerr:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(oinv, newinv) = (&amp;quot;&amp;quot;, &amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if olderr: oinv = &amp;quot;invalid &amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if newerr: ninv = &amp;quot;invalid &amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;warning: overriding %ssuite %s to %ssuite %s&amp;quot; % (
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;oinv, suite, ninv, override)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;del changes[&amp;quot;suite&amp;quot;][suite]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;changes[&amp;quot;suite&amp;quot;][override] = 1
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;for suite in changes[&amp;quot;suite&amp;quot;].keys():
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for pkg in new.keys():
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ql = get_override(pkg, suite, new[pkg][&amp;quot;component&amp;quot;], new[pkg][&amp;quot;type&amp;quot;], session)
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26555866&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26555866&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master--fix-OverrideSuite-handling-tp26555866p26555866.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26522210</id>
	<title>[dak/master] Adjust regex</title>
	<published>2009-11-25T15:17:53Z</published>
	<updated>2009-11-25T15:17:53Z</updated>
	<author>
		<name>Luca Falavigna-5</name>
	</author>
	<content type="html">Match &amp;quot;Archive maintenance timestamp&amp;quot; only if present at the
&lt;br&gt;beginning of the row, thus ignoring bogus messages eventually registered
&lt;br&gt;in the logs.
&lt;br&gt;&lt;br&gt;Signed-off-by: Luca Falavigna &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26522210&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dktrkranz@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;tools/logs.py | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;1 files changed, 1 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/tools/logs.py b/tools/logs.py
&lt;br&gt;index c4eb6be..6db78d9 100755
&lt;br&gt;--- a/tools/logs.py
&lt;br&gt;+++ b/tools/logs.py
&lt;br&gt;@@ -46,7 +46,7 @@ if m:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;raise Exception(&amp;quot;I don't like command line arguments including char '%s'&amp;quot;%m.group(0))
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;if args:
&lt;br&gt;- &amp;nbsp;for l in os.popen('bzgrep -H &amp;quot;Archive maintenance timestamp&amp;quot; &amp;quot;'+'&amp;quot; &amp;quot;'.join(args)+'&amp;quot;'):
&lt;br&gt;+ &amp;nbsp;for l in os.popen('bzgrep -H &amp;quot;^Archive maintenance timestamp&amp;quot; &amp;quot;'+'&amp;quot; &amp;quot;'.join(args)+'&amp;quot;'):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;m = LINE.match(l)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if not m:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;raise Exception(&amp;quot;woops '%s'&amp;quot;%l)
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26522210&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26522210&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master--Adjust-regex-tp26522210p26522210.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26521954</id>
	<title>[dak/master] different tags</title>
	<published>2009-11-25T15:12:32Z</published>
	<updated>2009-11-25T15:12:32Z</updated>
	<author>
		<name>Joerg Jaspert</name>
	</author>
	<content type="html">Signed-off-by: Joerg Jaspert &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26521954&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;joerg@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;tools/logs.py | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;1 files changed, 1 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/tools/logs.py b/tools/logs.py
&lt;br&gt;index c4eb6be..182cdbd 100755
&lt;br&gt;--- a/tools/logs.py
&lt;br&gt;+++ b/tools/logs.py
&lt;br&gt;@@ -14,7 +14,7 @@ LINE = re.compile(r'(?:|.*/)dinstall_(\d{4})\.(\d{2})\.(\d{2})-(\d{2}):(\d{2}):(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;r'Archive maintenance timestamp \(([^\)]*)\): (\d{2}):(\d{2}):(\d{2})$')
&lt;br&gt;&amp;nbsp;UNSAFE = re.compile(r'[^a-zA-Z/\._:0-9\- ]')
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-graphs = {&amp;quot;dinstall1&amp;quot;: {&amp;quot;keystolist&amp;quot;:[&amp;quot;pg_dump1&amp;quot;, &amp;quot;i18n 1&amp;quot;, &amp;quot;accepted&amp;quot;, &amp;quot;make-suite-file-list&amp;quot;, &amp;quot;apt-ftparchive&amp;quot;,
&lt;br&gt;+graphs = {&amp;quot;dinstall1&amp;quot;: {&amp;quot;keystolist&amp;quot;:[&amp;quot;pg_dump1&amp;quot;, &amp;quot;i18n 1&amp;quot;, &amp;quot;accepted&amp;quot;, &amp;quot;dominate&amp;quot;, &amp;quot;generate-filelist&amp;quot;, &amp;quot;apt-ftparchive&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;pdiff&amp;quot;, &amp;quot;release files&amp;quot;, &amp;quot;w-b&amp;quot;, &amp;quot;i18n 2&amp;quot;, &amp;quot;apt-ftparchive cleanup&amp;quot;],
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;showothers&amp;quot;:True},
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;dinstall2&amp;quot;: {&amp;quot;keystolist&amp;quot;:['External Updates', 'p-u-new', 'o-p-u-new', 'cruft', 'import-keyring', 'overrides', 'cleanup', 'scripts', 'mirror hardlinks', 'stats', 'compress', &amp;quot;pkg-file-mapping&amp;quot; ],
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26521954&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26521954&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master--different-tags-tp26521954p26521954.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26520513</id>
	<title>[dak/master] Do not break manual rejects when a note exists</title>
	<published>2009-11-25T13:21:48Z</published>
	<updated>2009-11-25T13:21:48Z</updated>
	<author>
		<name>Joerg Jaspert</name>
	</author>
	<content type="html">Signed-off-by: Joerg Jaspert &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26520513&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;joerg@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dak/process_new.py | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;daklib/queue.py &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;9 +++++----
&lt;br&gt;&amp;nbsp;2 files changed, 6 insertions(+), 5 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dak/process_new.py b/dak/process_new.py
&lt;br&gt;index 7841a7d..060fa23 100755
&lt;br&gt;--- a/dak/process_new.py
&lt;br&gt;+++ b/dak/process_new.py
&lt;br&gt;@@ -679,7 +679,7 @@ def do_new(upload, session):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif answer == 'M' and not Options[&amp;quot;Trainee&amp;quot;]:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;aborted = upload.do_reject(manual=1,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; reject_message=Options[&amp;quot;Manual-Reject&amp;quot;],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; note=get_new_comments(changes.get(&amp;quot;source&amp;quot;, &amp;quot;&amp;quot;), session=session))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; notes=get_new_comments(changes.get(&amp;quot;source&amp;quot;, &amp;quot;&amp;quot;), session=session))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if not aborted:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;upload.pkg.remove_known_changes(session=session)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;session.commit()
&lt;br&gt;diff --git a/daklib/queue.py b/daklib/queue.py
&lt;br&gt;index c9a6532..5ea545f 100755
&lt;br&gt;--- a/daklib/queue.py
&lt;br&gt;+++ b/daklib/queue.py
&lt;br&gt;@@ -2061,7 +2061,7 @@ distribution.&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;os.close(dest_fd)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;###########################################################################
&lt;br&gt;- &amp;nbsp; &amp;nbsp;def do_reject (self, manual=0, reject_message=&amp;quot;&amp;quot;, note=&amp;quot;&amp;quot;):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;def do_reject (self, manual=0, reject_message=&amp;quot;&amp;quot;, notes=&amp;quot;&amp;quot;):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reject an upload. If called without a reject message or C{manual} is
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;true, spawn an editor so the user can write one.
&lt;br&gt;@@ -2080,9 +2080,10 @@ distribution.&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if manual and not reject_message:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(fd, temp_filename) = utils.temp_filename()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;temp_file = os.fdopen(fd, 'w')
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if len(note) &amp;gt; 0:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for line in note:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;temp_file.write(line)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if len(notes) &amp;gt; 0:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for note in notes:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;temp_file.write(&amp;quot;\nAuthor: %s\nVersion: %s\nTimestamp: %s\n\n%s&amp;quot; \
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;% (note.author, note.version, note.notedate, note.comment))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;temp_file.close()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;editor = os.environ.get(&amp;quot;EDITOR&amp;quot;,&amp;quot;vi&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;answer = 'E'
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26520513&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26520513&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master--Do-not-break-manual-rejects-when-a-note-exists-tp26520513p26520513.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26520294</id>
	<title>[dak/master 1/2] p-n</title>
	<published>2009-11-25T13:05:44Z</published>
	<updated>2009-11-25T13:05:44Z</updated>
	<author>
		<name>Joerg Jaspert</name>
	</author>
	<content type="html">call upload.remove_known_changes in a few more places.
&lt;br&gt;also give it our session.
&lt;br&gt;&lt;br&gt;Signed-off-by: Joerg Jaspert &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26520294&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;joerg@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dak/process_new.py | &amp;nbsp; &amp;nbsp;4 +++-
&lt;br&gt;&amp;nbsp;1 files changed, 3 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dak/process_new.py b/dak/process_new.py
&lt;br&gt;index 6bdd301..b5fd912 100755
&lt;br&gt;--- a/dak/process_new.py
&lt;br&gt;+++ b/dak/process_new.py
&lt;br&gt;@@ -95,6 +95,7 @@ def recheck(upload, session):
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if answer == 'R':
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;upload.do_reject(manual=0, reject_message='\n'.join(upload.rejects))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;upload.pkg.remove_known_changes(session=session)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 0
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif answer == 'S':
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 0
&lt;br&gt;@@ -679,7 +680,7 @@ def do_new(upload, session):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; reject_message=Options[&amp;quot;Manual-Reject&amp;quot;],
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; note=get_new_comments(changes.get(&amp;quot;source&amp;quot;, &amp;quot;&amp;quot;), session=session))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if not aborted:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;upload.pkg.remove_known_changes()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;upload.pkg.remove_known_changes(session=session)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Logger.log([&amp;quot;NEW REJECT: %s&amp;quot; % (upload.pkg.changes_file)])
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;done = 1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif answer == 'N':
&lt;br&gt;@@ -769,6 +770,7 @@ def do_byhand(upload, session):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif answer == 'M':
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Logger.log([&amp;quot;BYHAND REJECT: %s&amp;quot; % (upload.pkg.changes_file)])
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;upload.do_reject(manual=1, reject_message=Options[&amp;quot;Manual-Reject&amp;quot;])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;upload.pkg.remove_known_changes(session=session)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;done = 1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif answer == 'S':
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;done = 1
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26520294&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26520294&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-1-2--p-n-tp26520294p26520294.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26520295</id>
	<title>[dak/master 2/2] p-n</title>
	<published>2009-11-25T13:05:44Z</published>
	<updated>2009-11-25T13:05:44Z</updated>
	<author>
		<name>Joerg Jaspert</name>
	</author>
	<content type="html">make sure to commit after we rejected stuff and changed database.
&lt;br&gt;&lt;br&gt;Signed-off-by: Joerg Jaspert &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26520295&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;joerg@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dak/process_new.py | &amp;nbsp; &amp;nbsp;3 +++
&lt;br&gt;&amp;nbsp;1 files changed, 3 insertions(+), 0 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dak/process_new.py b/dak/process_new.py
&lt;br&gt;index b5fd912..7841a7d 100755
&lt;br&gt;--- a/dak/process_new.py
&lt;br&gt;+++ b/dak/process_new.py
&lt;br&gt;@@ -96,6 +96,7 @@ def recheck(upload, session):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if answer == 'R':
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;upload.do_reject(manual=0, reject_message='\n'.join(upload.rejects))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;upload.pkg.remove_known_changes(session=session)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;session.commit()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 0
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif answer == 'S':
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 0
&lt;br&gt;@@ -681,6 +682,7 @@ def do_new(upload, session):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; note=get_new_comments(changes.get(&amp;quot;source&amp;quot;, &amp;quot;&amp;quot;), session=session))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if not aborted:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;upload.pkg.remove_known_changes(session=session)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;session.commit()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Logger.log([&amp;quot;NEW REJECT: %s&amp;quot; % (upload.pkg.changes_file)])
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;done = 1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif answer == 'N':
&lt;br&gt;@@ -771,6 +773,7 @@ def do_byhand(upload, session):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Logger.log([&amp;quot;BYHAND REJECT: %s&amp;quot; % (upload.pkg.changes_file)])
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;upload.do_reject(manual=1, reject_message=Options[&amp;quot;Manual-Reject&amp;quot;])
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;upload.pkg.remove_known_changes(session=session)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;session.commit()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;done = 1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif answer == 'S':
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;done = 1
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26520295&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26520295&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-2-2--p-n-tp26520295p26520295.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26520165</id>
	<title>[dak/master] import-users</title>
	<published>2009-11-25T12:57:26Z</published>
	<updated>2009-11-25T12:57:26Z</updated>
	<author>
		<name>Joerg Jaspert</name>
	</author>
	<content type="html">delete no longer existing users instead of just needlessly spamming us
&lt;br&gt;with their names
&lt;br&gt;&lt;br&gt;Signed-off-by: Joerg Jaspert &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26520165&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;joerg@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dak/import_users_from_passwd.py | &amp;nbsp; &amp;nbsp;5 +++--
&lt;br&gt;&amp;nbsp;1 files changed, 3 insertions(+), 2 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dak/import_users_from_passwd.py b/dak/import_users_from_passwd.py
&lt;br&gt;index 07c6193..9584867 100755
&lt;br&gt;--- a/dak/import_users_from_passwd.py
&lt;br&gt;+++ b/dak/import_users_from_passwd.py
&lt;br&gt;@@ -99,8 +99,9 @@ def main ():
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;keys = postgres_unames.keys()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;keys.sort()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;for uname in keys:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if not passwd_unames.has_key(uname)and not known_postgres_unames.has_key(uname):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;W: %s is in Postgres but not the passwd file or list of known Postgres users.&amp;quot; % (uname)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if not passwd_unames.has_key(uname) and not known_postgres_unames.has_key(uname):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;I: Deleting %s from Postgres, no longer in passwd or list of known Postgres users&amp;quot; % (uname)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;q = session.execute('DROP USER &amp;quot;%s&amp;quot;' % (uname))
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;keys = passwd_unames.keys()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;keys.sort()
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26520165&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26520165&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master--import-users-tp26520165p26520165.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26505079</id>
	<title>[dak/master 1/2] Handle broken pipe while waiting for action</title>
	<published>2009-11-24T15:04:42Z</published>
	<updated>2009-11-24T15:04:42Z</updated>
	<author>
		<name>Luca Falavigna-5</name>
	</author>
	<content type="html">our_raw_input waits for action, but an exception is raised if user
&lt;br&gt;does not provide it. Loop until a correct action is taken, this way
&lt;br&gt;dak does not horribly crash each time.
&lt;br&gt;&lt;br&gt;Signed-off-by: Luca Falavigna &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26505079&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dktrkranz@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;daklib/utils.py | &amp;nbsp; &amp;nbsp;7 ++++++-
&lt;br&gt;&amp;nbsp;1 files changed, 6 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/daklib/utils.py b/daklib/utils.py
&lt;br&gt;index 3cc4053..cfbf8aa 100644
&lt;br&gt;--- a/daklib/utils.py
&lt;br&gt;+++ b/daklib/utils.py
&lt;br&gt;@@ -115,7 +115,12 @@ def open_file(filename, mode='r'):
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;def our_raw_input(prompt=&amp;quot;&amp;quot;):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if prompt:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sys.stdout.write(prompt)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while 1:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sys.stdout.write(prompt)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;except IOError:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pass
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;sys.stdout.flush()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;try:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ret = raw_input()
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26505079&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26505079&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-1-2--Handle-broken-pipe-while-waiting-for-action-tp26505079p26505079.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26505083</id>
	<title>[dak/master 2/2] web: add link to cruft-report-daily.txt</title>
	<published>2009-11-24T15:04:42Z</published>
	<updated>2009-11-24T15:04:42Z</updated>
	<author>
		<name>Torsten Werner</name>
	</author>
	<content type="html">Signed-off-by: Torsten Werner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26505083&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;twerner@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;web/index.html | &amp;nbsp; &amp;nbsp;7 +++++++
&lt;br&gt;&amp;nbsp;1 files changed, 7 insertions(+), 0 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/web/index.html b/web/index.html
&lt;br&gt;index 9f0adca..8b42060 100644
&lt;br&gt;--- a/web/index.html
&lt;br&gt;+++ b/web/index.html
&lt;br&gt;@@ -41,6 +41,7 @@
&lt;br&gt;&amp;nbsp;			&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#new&amp;quot;&amp;gt;NEW&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&lt;br&gt;&amp;nbsp;			&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#pending&amp;quot;&amp;gt;Pending removals&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&lt;br&gt;&amp;nbsp;			&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#removed&amp;quot;&amp;gt;Removed packages&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&lt;br&gt;+			&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#cruft&amp;quot;&amp;gt;Cruft Report&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&lt;br&gt;&amp;nbsp;			&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#testing&amp;quot;&amp;gt;Testing&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&lt;br&gt;&amp;nbsp;			&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#stable&amp;quot;&amp;gt;Stable&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&lt;br&gt;&amp;nbsp;			&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#rejections&amp;quot;&amp;gt;Rejections&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&lt;br&gt;@@ -161,6 +162,12 @@
&lt;br&gt;&amp;nbsp;		&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/div&amp;gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;div id=&amp;quot;cruft&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;h1&amp;gt;Cruft Report&amp;lt;/h1&amp;gt;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;&amp;lt;p&amp;gt;Some packages which needs to be removed manually are found in
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;&amp;lt;a href=&amp;quot;cruft-report-daily.txt&amp;quot;&amp;gt;the cruft-report&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/div&amp;gt;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;div id=&amp;quot;testing&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;h1&amp;gt;Testing&amp;lt;/h1&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;p&amp;gt;Squeeze is testing, sid is unstable. For more details please look
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26505083&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26505083&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-2-2--web%3A-add-link-to-cruft-report-daily.txt-tp26505083p26505083.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26504460</id>
	<title>[dak/master 2/3] Fix indentation on commit to be outside for loop but inside try. Add update to db_revision to set it to 26.</title>
	<published>2009-11-24T14:17:51Z</published>
	<updated>2009-11-24T14:17:51Z</updated>
	<author>
		<name>Barry deFreese-4</name>
	</author>
	<content type="html">---
&lt;br&gt;&amp;nbsp;dak/dakdb/update26.py | &amp;nbsp; &amp;nbsp;5 +++--
&lt;br&gt;&amp;nbsp;1 files changed, 3 insertions(+), 2 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dak/dakdb/update26.py b/dak/dakdb/update26.py
&lt;br&gt;index 70ad62b..3c7b082 100755
&lt;br&gt;--- a/dak/dakdb/update26.py
&lt;br&gt;+++ b/dak/dakdb/update26.py
&lt;br&gt;@@ -57,8 +57,9 @@ def do_update(self):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;CREATE TRIGGER modified_%s BEFORE UPDATE ON %s 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FOR EACH ROW EXECUTE PROCEDURE tfunc_set_modified()&amp;quot;&amp;quot;&amp;quot; % (updatetable, updatetable))
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;- &amp;nbsp; &amp;nbsp;print &amp;quot;Committing&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;self.db.commit()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Committing&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;UPDATE config SET value = '26' WHERE name = 'db_revision'&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.db.commit()
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;except psycopg2.InternalError, msg:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.db.rollback()
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26504460&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26504460&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-2-3--Fix-indentation-on-commit-to-be-outside-for-loop-but-inside-try.-Add-update-to-db_revision-to-set-it-to-26.-tp26504460p26504460.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26504461</id>
	<title>[dak/master 3/3] Update update_db to use schema 26</title>
	<published>2009-11-24T14:17:51Z</published>
	<updated>2009-11-24T14:17:51Z</updated>
	<author>
		<name>Barry deFreese-4</name>
	</author>
	<content type="html">---
&lt;br&gt;&amp;nbsp;dak/update_db.py | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;1 files changed, 1 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dak/update_db.py b/dak/update_db.py
&lt;br&gt;index 50b293f..e7b1984 100755
&lt;br&gt;--- a/dak/update_db.py
&lt;br&gt;+++ b/dak/update_db.py
&lt;br&gt;@@ -45,7 +45,7 @@ from daklib.dak_exceptions import DBUpdateError
&lt;br&gt;&amp;nbsp;################################################################################
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;Cnf = None
&lt;br&gt;-required_database_schema = 25
&lt;br&gt;+required_database_schema = 26
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;################################################################################
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26504461&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26504461&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-3-3--Update-update_db-to-use-schema-26-tp26504461p26504461.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26504465</id>
	<title>[dak/master 1/3] Add dakdb/update26.py to add created and modified fields on all tables and add a trigger to update the modified field on update</title>
	<published>2009-11-24T14:17:51Z</published>
	<updated>2009-11-24T14:17:51Z</updated>
	<author>
		<name>Barry deFreese-4</name>
	</author>
	<content type="html">---
&lt;br&gt;&amp;nbsp;dak/dakdb/update26.py | &amp;nbsp; 66 +++++++++++++++++++++++++++++++++++++++++++++++++
&lt;br&gt;&amp;nbsp;1 files changed, 66 insertions(+), 0 deletions(-)
&lt;br&gt;&amp;nbsp;create mode 100755 dak/dakdb/update26.py
&lt;br&gt;&lt;br&gt;diff --git a/dak/dakdb/update26.py b/dak/dakdb/update26.py
&lt;br&gt;new file mode 100755
&lt;br&gt;index 0000000..70ad62b
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/dak/dakdb/update26.py
&lt;br&gt;@@ -0,0 +1,66 @@
&lt;br&gt;+#!/usr/bin/env python
&lt;br&gt;+
&lt;br&gt;+&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+Add created,modified columns for all tables.
&lt;br&gt;+
&lt;br&gt;+@contact: Debian FTP Master &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26504465&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ftpmaster@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+@copyright: 2009 &amp;nbsp;Barry deFreese &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26504465&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bdefreese@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+@license: GNU General Public License version 2 or later
&lt;br&gt;+&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+
&lt;br&gt;+# This program is free software; you can redistribute it and/or modify
&lt;br&gt;+# it under the terms of the GNU General Public License as published by
&lt;br&gt;+# the Free Software Foundation; either version 2 of the License, or
&lt;br&gt;+# (at your option) any later version.
&lt;br&gt;+
&lt;br&gt;+# This program is distributed in the hope that it will be useful,
&lt;br&gt;+# but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+# GNU General Public License for more details.
&lt;br&gt;+
&lt;br&gt;+# You should have received a copy of the GNU General Public License
&lt;br&gt;+# along with this program; if not, write to the Free Software
&lt;br&gt;+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA &amp;nbsp;02111-1307 &amp;nbsp;USA
&lt;br&gt;+
&lt;br&gt;+import psycopg2
&lt;br&gt;+
&lt;br&gt;+def do_update(self):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;print &amp;quot;Add created, modified fields for all tables.&amp;quot;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;updatetables = ['architecture', 'archive', 'bin_associations', 'bin_contents',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'binaries', 'binary_acl', 'binary_acl_map', 'build_queue', 'build_queue_files',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'changes', 'changes_pending_binaries', 'changes_pending_files', 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'changes_pending_files_map', 'changes_pending_source', 'changes_pending_source_files', 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'changes_pool_files', 'component', 'config', 'dsc_files', 'files', 'fingerprint', 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'keyring_acl_map', 'keyrings', 'location', 'maintainer', 'new_comments', 'override', 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'override_type', 'policy_queue', 'priority', 'section', 'source', 'source_acl', 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'src_associations', 'src_format', 'src_uploaders', 'suite', 'suite_architectures', 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'suite_build_queue_copy', 'suite_src_formats', 'uid', 'upload_blocks']
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;c = self.db.cursor()
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;print &amp;quot;Create trigger function.&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;CREATE OR REPLACE FUNCTION tfunc_set_modified() RETURNS trigger AS $$ 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BEGIN NEW.modified = now(); return NEW; END;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;$$ LANGUAGE 'plpgsql'&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;try:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for updatetable in updatetables:
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Add created field to %s.&amp;quot; % updatetable
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;ALTER TABLE %s ADD COLUMN created TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now()&amp;quot; % updatetable)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Add modified field to %s.&amp;quot; % updatetable
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;ALTER TABLE %s ADD COLUMN modified TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now()&amp;quot; % updatetable)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Create modified trigger.&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;CREATE TRIGGER modified_%s BEFORE UPDATE ON %s 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FOR EACH ROW EXECUTE PROCEDURE tfunc_set_modified()&amp;quot;&amp;quot;&amp;quot; % (updatetable, updatetable))
&lt;br&gt;+	
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;print &amp;quot;Committing&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;self.db.commit()
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;except psycopg2.InternalError, msg:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.db.rollback()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;raise DBUpdateError, &amp;quot;Database error, rollback issued. Error message : %s&amp;quot; % (str(msg))
&lt;br&gt;+
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26504465&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26504465&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-1-3--Add-dakdb-update26.py-to-add-created-and-modified-fields-on-all-tables-and-add-a-trigger-to-update-the-modified-field-on-update-tp26504465p26504465.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26492168</id>
	<title>[dak/master] Cnf[...] changed to cnf[...] in override.py</title>
	<published>2009-11-24T00:12:23Z</published>
	<updated>2009-11-24T00:12:23Z</updated>
	<author>
		<name>Barry deFreese-4</name>
	</author>
	<content type="html">---
&lt;br&gt;&amp;nbsp;dak/override.py | &amp;nbsp; &amp;nbsp;6 +++---
&lt;br&gt;&amp;nbsp;1 files changed, 3 insertions(+), 3 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dak/override.py b/dak/override.py
&lt;br&gt;index e253967..ce35d92 100755
&lt;br&gt;--- a/dak/override.py
&lt;br&gt;+++ b/dak/override.py
&lt;br&gt;@@ -240,9 +240,9 @@ def main ():
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Subst[&amp;quot;__BCC__&amp;quot;] = &amp;quot;Bcc: &amp;quot; + &amp;quot;, &amp;quot;.join(bcc)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Subst[&amp;quot;__BCC__&amp;quot;] = &amp;quot;X-Filler: 42&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Subst[&amp;quot;__CC__&amp;quot;] = &amp;quot;Cc: &amp;quot; + package + &amp;quot;@&amp;quot; + Cnf[&amp;quot;Dinstall::PackagesServer&amp;quot;] + &amp;quot;\nX-DAK: dak override&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Subst[&amp;quot;__ADMIN_ADDRESS__&amp;quot;] = Cnf[&amp;quot;Dinstall::MyAdminAddress&amp;quot;]
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Subst[&amp;quot;__DISTRO__&amp;quot;] = Cnf[&amp;quot;Dinstall::MyDistribution&amp;quot;]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Subst[&amp;quot;__CC__&amp;quot;] = &amp;quot;Cc: &amp;quot; + package + &amp;quot;@&amp;quot; + cnf[&amp;quot;Dinstall::PackagesServer&amp;quot;] + &amp;quot;\nX-DAK: dak override&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Subst[&amp;quot;__ADMIN_ADDRESS__&amp;quot;] = cnf[&amp;quot;Dinstall::MyAdminAddress&amp;quot;]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Subst[&amp;quot;__DISTRO__&amp;quot;] = cnf[&amp;quot;Dinstall::MyDistribution&amp;quot;]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Subst[&amp;quot;__WHOAMI__&amp;quot;] = utils.whoami()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Subst[&amp;quot;__SOURCE__&amp;quot;] = package
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26492168&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26492168&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master--Cnf-...--changed-to-cnf-...--in-override.py-tp26492168p26492168.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26480024</id>
	<title>[PATCH] Add SIG_SUBPACKET as a known_keyword.</title>
	<published>2009-11-23T07:22:23Z</published>
	<updated>2009-11-23T07:22:23Z</updated>
	<author>
		<name>Jeremy T. Bouse [c]</name>
	</author>
	<content type="html">SIG_SUBPACKET denotes a preferred keyserver was set for the key but requires no
&lt;br&gt;additional processing and has no bearing on signature validity. It simply needs
&lt;br&gt;to be ignored.
&lt;br&gt;&lt;br&gt;Signed-off-by: Jeremy T. Bouse &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26480024&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jbouse@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;daklib/utils.py | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;1 files changed, 1 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/daklib/utils.py b/daklib/utils.py
&lt;br&gt;index 3cc4053..7d5c4c4 100644
&lt;br&gt;--- a/daklib/utils.py
&lt;br&gt;+++ b/daklib/utils.py
&lt;br&gt;@@ -1360,7 +1360,7 @@ def check_signature (sig_filename, data_filename=&amp;quot;&amp;quot;, keyrings=None, autofetch=No
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;# Finally ensure there's not something we don't recognise
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;known_keywords = dict(VALIDSIG=&amp;quot;&amp;quot;,SIG_ID=&amp;quot;&amp;quot;,GOODSIG=&amp;quot;&amp;quot;,BADSIG=&amp;quot;&amp;quot;,ERRSIG=&amp;quot;&amp;quot;,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SIGEXPIRED=&amp;quot;&amp;quot;,KEYREVOKED=&amp;quot;&amp;quot;,NO_PUBKEY=&amp;quot;&amp;quot;,BADARMOR=&amp;quot;&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SIGEXPIRED=&amp;quot;&amp;quot;,KEYREVOKED=&amp;quot;&amp;quot;,NO_PUBKEY=&amp;quot;&amp;quot;,BADARMOR=&amp;quot;&amp;quot;,SIG_SUBPACKET=&amp;quot;&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NODATA=&amp;quot;&amp;quot;,NOTATION_DATA=&amp;quot;&amp;quot;,NOTATION_NAME=&amp;quot;&amp;quot;,KEYEXPIRED=&amp;quot;&amp;quot;,POLICY_URL=&amp;quot;&amp;quot;)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;for keyword in keywords.keys():
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26480024&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26480024&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--Add-SIG_SUBPACKET-as-a-known_keyword.-tp26480024p26480024.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26470814</id>
	<title>[dak/master] p-n</title>
	<published>2009-11-22T15:39:01Z</published>
	<updated>2009-11-22T15:39:01Z</updated>
	<author>
		<name>Joerg Jaspert</name>
	</author>
	<content type="html">only remove known changes if reject isnt aborted
&lt;br&gt;&lt;br&gt;Signed-off-by: Joerg Jaspert &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26470814&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;joerg@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dak/process_new.py | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;1 files changed, 1 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dak/process_new.py b/dak/process_new.py
&lt;br&gt;index 9f7694d..6bdd301 100755
&lt;br&gt;--- a/dak/process_new.py
&lt;br&gt;+++ b/dak/process_new.py
&lt;br&gt;@@ -675,11 +675,11 @@ def do_new(upload, session):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif answer == 'E' and not Options[&amp;quot;Trainee&amp;quot;]:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new = edit_overrides (new, upload, session)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif answer == 'M' and not Options[&amp;quot;Trainee&amp;quot;]:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;upload.pkg.remove_known_changes()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;aborted = upload.do_reject(manual=1,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; reject_message=Options[&amp;quot;Manual-Reject&amp;quot;],
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; note=get_new_comments(changes.get(&amp;quot;source&amp;quot;, &amp;quot;&amp;quot;), session=session))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if not aborted:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;upload.pkg.remove_known_changes()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Logger.log([&amp;quot;NEW REJECT: %s&amp;quot; % (upload.pkg.changes_file)])
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;done = 1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif answer == 'N':
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26470814&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26470814&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master--p-n-tp26470814p26470814.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26470462</id>
	<title>[dak/master 2/2] no longer changes, its self.pkg.changes here</title>
	<published>2009-11-22T14:53:33Z</published>
	<updated>2009-11-22T14:53:33Z</updated>
	<author>
		<name>Joerg Jaspert</name>
	</author>
	<content type="html">Signed-off-by: Joerg Jaspert &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26470462&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;joerg@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;daklib/queue.py | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;1 files changed, 1 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/daklib/queue.py b/daklib/queue.py
&lt;br&gt;index 33310da..c9a6532 100755
&lt;br&gt;--- a/daklib/queue.py
&lt;br&gt;+++ b/daklib/queue.py
&lt;br&gt;@@ -427,7 +427,7 @@ class Upload(object):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.pkg.changes[&amp;quot;changedbyemail&amp;quot;] = &amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.rejects.append(&amp;quot;%s: Changed-By field ('%s') failed to parse: %s&amp;quot; \
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; % (filename, changes[&amp;quot;changed-by&amp;quot;], msg))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; % (filename, self.pkg.changes[&amp;quot;changed-by&amp;quot;], msg))
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Ensure all the values in Closes: are numbers
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if self.pkg.changes.has_key(&amp;quot;closes&amp;quot;):
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26470462&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26470462&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-2-2--no-longer-changes%2C-its-self.pkg.changes-here-tp26470462p26470462.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26470463</id>
	<title>[dak/master 1/2] its self.rejects</title>
	<published>2009-11-22T14:53:33Z</published>
	<updated>2009-11-22T14:53:33Z</updated>
	<author>
		<name>Joerg Jaspert</name>
	</author>
	<content type="html">Signed-off-by: Joerg Jaspert &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26470463&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;joerg@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;daklib/queue.py | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;1 files changed, 1 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/daklib/queue.py b/daklib/queue.py
&lt;br&gt;index 67e6563..33310da 100755
&lt;br&gt;--- a/daklib/queue.py
&lt;br&gt;+++ b/daklib/queue.py
&lt;br&gt;@@ -2307,7 +2307,7 @@ distribution.&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cansave = 1
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if not cansave:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.reject.append(&amp;quot;%s: old version (%s) in %s &amp;lt;= new version (%s) targeted at %s.&amp;quot; % (filename, existent_version, suite, new_version, target_suite))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.rejects.append(&amp;quot;%s: old version (%s) in %s &amp;lt;= new version (%s) targeted at %s.&amp;quot; % (filename, existent_version, suite, new_version, target_suite))
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;################################################################################
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;def check_binary_against_db(self, filename, session):
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26470463&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26470463&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-1-2--its-self.rejects-tp26470463p26470463.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26467125</id>
	<title>[dak/master] Remove suite validation and use check_distributions instead and move it further up in process</title>
	<published>2009-11-22T08:48:44Z</published>
	<updated>2009-11-22T08:48:44Z</updated>
	<author>
		<name>Barry deFreese-4</name>
	</author>
	<content type="html">---
&lt;br&gt;&amp;nbsp;dak/process_new.py | &amp;nbsp; &amp;nbsp;7 +++----
&lt;br&gt;&amp;nbsp;1 files changed, 3 insertions(+), 4 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dak/process_new.py b/dak/process_new.py
&lt;br&gt;index 4b2cff3..9f7694d 100755
&lt;br&gt;--- a/dak/process_new.py
&lt;br&gt;+++ b/dak/process_new.py
&lt;br&gt;@@ -603,6 +603,9 @@ def do_new(upload, session):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;changes = upload.pkg.changes
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;cnf = Config()
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# Check for a valid distribution
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;upload.check_distributions()
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;# Make a copy of distribution we can happily trample on
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;changes[&amp;quot;suite&amp;quot;] = copy.copy(changes[&amp;quot;distribution&amp;quot;])
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -620,10 +623,6 @@ def do_new(upload, session):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;oinv, suite, ninv, override)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;del changes[&amp;quot;suite&amp;quot;][suite]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;changes[&amp;quot;suite&amp;quot;][override] = 1
&lt;br&gt;- &amp;nbsp; &amp;nbsp;# Validate suites
&lt;br&gt;- &amp;nbsp; &amp;nbsp;for suite in changes[&amp;quot;suite&amp;quot;].keys():
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if get_suite(suite, session) is None:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;utils.fubar(&amp;quot;%s has invalid suite '%s' (possibly overriden). &amp;nbsp;say wha?&amp;quot; % (changes, suite))
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;# The main NEW processing loop
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;done = 0
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26467125&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26467125&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master--Remove-suite-validation-and-use-check_distributions-instead-and-move-it-further-up-in-process-tp26467125p26467125.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26456784</id>
	<title>[dak/master 2/3] daklib/holding.py: ftptrainees don't have write permissions to holding directory, so allow them to store packages to be reviewed into TempPath.</title>
	<published>2009-11-21T05:37:01Z</published>
	<updated>2009-11-21T05:37:01Z</updated>
	<author>
		<name>Luca Falavigna-5</name>
	</author>
	<content type="html">Signed-off-by: Luca Falavigna &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26456784&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dktrkranz@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;daklib/holding.py | &amp;nbsp; &amp;nbsp;3 +++
&lt;br&gt;&amp;nbsp;1 files changed, 3 insertions(+), 0 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/daklib/holding.py b/daklib/holding.py
&lt;br&gt;index b637738..79d5ef7 100644
&lt;br&gt;--- a/daklib/holding.py
&lt;br&gt;+++ b/daklib/holding.py
&lt;br&gt;@@ -46,6 +46,9 @@ class Holding(object):
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.in_holding = {}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.holding_dir = Config()[&amp;quot;Dir::Queue::Holding&amp;quot;]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# ftptrainees haven't access to holding, use a temp directory instead
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if not os.access(self.holding_dir, os.W_OK):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.holding_dir = Config()[&amp;quot;TempPath::TempPath&amp;quot;]
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;def copy_to_holding(self, filename):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;base_filename = os.path.basename(filename)
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26456784&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26456784&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-2-3--daklib-holding.py%3A-ftptrainees-don%27t-have-write-permissions-to-holding-directory%2C-so-allow-them-to-store-packages-to-be-reviewed-into-TempPath.-tp26456784p26456784.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26456786</id>
	<title>[dak/master 1/3] config/debian/dak.conf, dak/transitions.py:</title>
	<published>2009-11-21T05:37:01Z</published>
	<updated>2009-11-21T05:37:01Z</updated>
	<author>
		<name>Luca Falavigna-5</name>
	</author>
	<content type="html">Move TempPath under its own domain, so it can be used by some other
&lt;br&gt;pieces of dak. Adjust transitions accordingly.
&lt;br&gt;&lt;br&gt;Signed-off-by: Luca Falavigna &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26456786&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dktrkranz@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;config/debian/dak.conf | &amp;nbsp; &amp;nbsp;6 +++++-
&lt;br&gt;&amp;nbsp;dak/transitions.py &amp;nbsp; &amp;nbsp; | &amp;nbsp; 12 ++++++------
&lt;br&gt;&amp;nbsp;2 files changed, 11 insertions(+), 7 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/config/debian/dak.conf b/config/debian/dak.conf
&lt;br&gt;index ceafaed..d7006c8 100644
&lt;br&gt;--- a/config/debian/dak.conf
&lt;br&gt;+++ b/config/debian/dak.conf
&lt;br&gt;@@ -49,7 +49,6 @@ Dinstall
&lt;br&gt;&amp;nbsp;Transitions
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; Notifications &amp;quot;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26456786&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-devel@...&lt;/a&gt;&amp;quot;;
&lt;br&gt;- &amp;nbsp; TempPath &amp;quot;/srv/ftp.debian.org/tmp/&amp;quot;;
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;Generate-Index-Diffs
&lt;br&gt;@@ -744,3 +743,8 @@ Contents
&lt;br&gt;&amp;nbsp; &amp;nbsp;Header &amp;quot;contents&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp;Root &amp;quot;/srv/ftp.debian.org/test/&amp;quot;;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+TempPath
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; TempPath &amp;quot;/srv/ftp.debian.org/tmp/&amp;quot;;
&lt;br&gt;+};
&lt;br&gt;diff --git a/dak/transitions.py b/dak/transitions.py
&lt;br&gt;index 4c4ac78..2bd3238 100755
&lt;br&gt;--- a/dak/transitions.py
&lt;br&gt;+++ b/dak/transitions.py
&lt;br&gt;@@ -287,8 +287,8 @@ def write_transitions_from_file(from_file):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;# Lets check if from_file is in the directory we expect it to be in
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if not os.path.abspath(from_file).startswith(Cnf[&amp;quot;Transitions::TempPath&amp;quot;]):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Will not accept transitions file outside of %s&amp;quot; % (Cnf[&amp;quot;Transitions::TempPath&amp;quot;])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if not os.path.abspath(from_file).startswith(Cnf[&amp;quot;TempPath::TempPath&amp;quot;]):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Will not accept transitions file outside of %s&amp;quot; % (Cnf[&amp;quot;TempPath::TempPath&amp;quot;])
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sys.exit(3)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if Options[&amp;quot;sudo&amp;quot;]:
&lt;br&gt;@@ -318,7 +318,7 @@ def temp_transitions_file(transitions):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sudo-ed script and would be unreadable if it has default mkstemp mode
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;(fd, path) = tempfile.mkstemp(&amp;quot;&amp;quot;, &amp;quot;transitions&amp;quot;, Cnf[&amp;quot;Transitions::TempPath&amp;quot;])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;(fd, path) = tempfile.mkstemp(&amp;quot;&amp;quot;, &amp;quot;transitions&amp;quot;, Cnf[&amp;quot;TempPath::TempPath&amp;quot;])
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;os.chmod(path, 0644)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;f = open(path, &amp;quot;w&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;yaml.dump(transitions, f, default_flow_style=False)
&lt;br&gt;@@ -577,13 +577,13 @@ def main():
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(Cnf[&amp;quot;Dinstall::Reject::ReleaseTransitions&amp;quot;]))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sys.exit(1)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;# Also check if our temp directory is defined and existant
&lt;br&gt;- &amp;nbsp; &amp;nbsp;temppath = Cnf.get(&amp;quot;Transitions::TempPath&amp;quot;, &amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;temppath = Cnf.get(&amp;quot;TempPath::TempPath&amp;quot;, &amp;quot;&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if temppath == &amp;quot;&amp;quot;:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;utils.warn(&amp;quot;Transitions::TempPath not defined&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;utils.warn(&amp;quot;TempPath::TempPath not defined&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sys.exit(1)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if not os.path.exists(temppath):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;utils.warn(&amp;quot;Temporary path %s not found.&amp;quot; %
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(Cnf[&amp;quot;Transitions::TempPath&amp;quot;]))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(Cnf[&amp;quot;TempPath::TempPath&amp;quot;]))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sys.exit(1)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if Options[&amp;quot;import&amp;quot;]:
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26456786&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26456786&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-1-3--config-debian-dak.conf%2C-dak-transitions.py%3A-tp26456786p26456786.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26456790</id>
	<title>[dak/master 3/3] Move TempPath under Dir option instead of creating a new one</title>
	<published>2009-11-21T05:37:01Z</published>
	<updated>2009-11-21T05:37:01Z</updated>
	<author>
		<name>Luca Falavigna-4</name>
	</author>
	<content type="html">Signed-off-by: Luca Falavigna &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26456790&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dktrkranz@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;config/debian/dak.conf | &amp;nbsp; &amp;nbsp;6 +-----
&lt;br&gt;&amp;nbsp;dak/transitions.py &amp;nbsp; &amp;nbsp; | &amp;nbsp; 12 ++++++------
&lt;br&gt;&amp;nbsp;daklib/holding.py &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;3 files changed, 8 insertions(+), 12 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/config/debian/dak.conf b/config/debian/dak.conf
&lt;br&gt;index d7006c8..bb7682b 100644
&lt;br&gt;--- a/config/debian/dak.conf
&lt;br&gt;+++ b/config/debian/dak.conf
&lt;br&gt;@@ -554,6 +554,7 @@ Dir
&lt;br&gt;&amp;nbsp; &amp;nbsp;Override &amp;quot;/srv/ftp.debian.org/scripts/override/&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp;QueueBuild &amp;quot;/srv/incoming.debian.org/buildd/&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp;UrgencyLog &amp;quot;/srv/release.debian.org/britney/input/urgencies/&amp;quot;;
&lt;br&gt;+ &amp;nbsp;TempPath &amp;quot;/srv/ftp.debian.org/tmp/&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp;Queue
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Byhand &amp;quot;/srv/ftp.debian.org/queue/byhand/&amp;quot;;
&lt;br&gt;@@ -743,8 +744,3 @@ Contents
&lt;br&gt;&amp;nbsp; &amp;nbsp;Header &amp;quot;contents&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp;Root &amp;quot;/srv/ftp.debian.org/test/&amp;quot;;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;-TempPath
&lt;br&gt;-{
&lt;br&gt;- &amp;nbsp; TempPath &amp;quot;/srv/ftp.debian.org/tmp/&amp;quot;;
&lt;br&gt;-};
&lt;br&gt;diff --git a/dak/transitions.py b/dak/transitions.py
&lt;br&gt;index 2bd3238..157e1c0 100755
&lt;br&gt;--- a/dak/transitions.py
&lt;br&gt;+++ b/dak/transitions.py
&lt;br&gt;@@ -287,8 +287,8 @@ def write_transitions_from_file(from_file):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;# Lets check if from_file is in the directory we expect it to be in
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if not os.path.abspath(from_file).startswith(Cnf[&amp;quot;TempPath::TempPath&amp;quot;]):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Will not accept transitions file outside of %s&amp;quot; % (Cnf[&amp;quot;TempPath::TempPath&amp;quot;])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if not os.path.abspath(from_file).startswith(Cnf[&amp;quot;Dir::TempPath&amp;quot;]):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Will not accept transitions file outside of %s&amp;quot; % (Cnf[&amp;quot;Dir::TempPath&amp;quot;])
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sys.exit(3)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if Options[&amp;quot;sudo&amp;quot;]:
&lt;br&gt;@@ -318,7 +318,7 @@ def temp_transitions_file(transitions):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sudo-ed script and would be unreadable if it has default mkstemp mode
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;(fd, path) = tempfile.mkstemp(&amp;quot;&amp;quot;, &amp;quot;transitions&amp;quot;, Cnf[&amp;quot;TempPath::TempPath&amp;quot;])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;(fd, path) = tempfile.mkstemp(&amp;quot;&amp;quot;, &amp;quot;transitions&amp;quot;, Cnf[&amp;quot;Dir::TempPath&amp;quot;])
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;os.chmod(path, 0644)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;f = open(path, &amp;quot;w&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;yaml.dump(transitions, f, default_flow_style=False)
&lt;br&gt;@@ -577,13 +577,13 @@ def main():
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(Cnf[&amp;quot;Dinstall::Reject::ReleaseTransitions&amp;quot;]))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sys.exit(1)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;# Also check if our temp directory is defined and existant
&lt;br&gt;- &amp;nbsp; &amp;nbsp;temppath = Cnf.get(&amp;quot;TempPath::TempPath&amp;quot;, &amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;temppath = Cnf.get(&amp;quot;Dir::TempPath&amp;quot;, &amp;quot;&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if temppath == &amp;quot;&amp;quot;:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;utils.warn(&amp;quot;TempPath::TempPath not defined&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;utils.warn(&amp;quot;Dir::TempPath not defined&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sys.exit(1)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if not os.path.exists(temppath):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;utils.warn(&amp;quot;Temporary path %s not found.&amp;quot; %
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(Cnf[&amp;quot;TempPath::TempPath&amp;quot;]))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(Cnf[&amp;quot;Dir::TempPath&amp;quot;]))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sys.exit(1)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if Options[&amp;quot;import&amp;quot;]:
&lt;br&gt;diff --git a/daklib/holding.py b/daklib/holding.py
&lt;br&gt;index 79d5ef7..f77416c 100644
&lt;br&gt;--- a/daklib/holding.py
&lt;br&gt;+++ b/daklib/holding.py
&lt;br&gt;@@ -48,7 +48,7 @@ class Holding(object):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.holding_dir = Config()[&amp;quot;Dir::Queue::Holding&amp;quot;]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# ftptrainees haven't access to holding, use a temp directory instead
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if not os.access(self.holding_dir, os.W_OK):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.holding_dir = Config()[&amp;quot;TempPath::TempPath&amp;quot;]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.holding_dir = Config()[&amp;quot;Dir::TempPath&amp;quot;]
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;def copy_to_holding(self, filename):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;base_filename = os.path.basename(filename)
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26456790&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26456790&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-3-3--Move-TempPath-under-Dir-option-instead-of-creating-a-new-one-tp26456790p26456790.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26435746</id>
	<title>[dak/master 3/5] cruft-report: disable OBS in daily mode</title>
	<published>2009-11-19T14:50:48Z</published>
	<updated>2009-11-19T14:50:48Z</updated>
	<author>
		<name>Torsten Werner</name>
	</author>
	<content type="html">Signed-off-by: Torsten Werner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26435746&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;twerner@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dak/cruft_report.py | &amp;nbsp; &amp;nbsp;4 +++-
&lt;br&gt;&amp;nbsp;1 files changed, 3 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dak/cruft_report.py b/dak/cruft_report.py
&lt;br&gt;index cc475f5..4b78487 100755
&lt;br&gt;--- a/dak/cruft_report.py
&lt;br&gt;+++ b/dak/cruft_report.py
&lt;br&gt;@@ -358,7 +358,9 @@ def main ():
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;# Set up checks based on mode
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if Options[&amp;quot;Mode&amp;quot;] == &amp;quot;daily&amp;quot;:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;checks = [ &amp;quot;nbs&amp;quot;, &amp;quot;nviu&amp;quot;, &amp;quot;nvit&amp;quot;, &amp;quot;obsolete source&amp;quot; ]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;checks = [ &amp;quot;nbs&amp;quot;, &amp;quot;nviu&amp;quot;, &amp;quot;nvit&amp;quot; ]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# 'obsolete source' is broken since the introduction of dak dominate
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#checks = [ &amp;quot;nbs&amp;quot;, &amp;quot;nviu&amp;quot;, &amp;quot;nvit&amp;quot;, &amp;quot;obsolete source&amp;quot; ]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;elif Options[&amp;quot;Mode&amp;quot;] == &amp;quot;full&amp;quot;:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;checks = [ &amp;quot;nbs&amp;quot;, &amp;quot;nviu&amp;quot;, &amp;quot;nvit&amp;quot;, &amp;quot;obsolete source&amp;quot;, &amp;quot;nfu&amp;quot;, &amp;quot;dubious nbs&amp;quot;, &amp;quot;bnb&amp;quot;, &amp;quot;bms&amp;quot;, &amp;quot;anais&amp;quot; ]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26435746&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26435746&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-3-5--cruft-report%3A-disable-OBS-in-daily-mode-tp26435746p26435746.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26435751</id>
	<title>[dak/master 1/5] cruft-report: always check revdeps on NBS removals</title>
	<published>2009-11-19T14:50:48Z</published>
	<updated>2009-11-19T14:50:48Z</updated>
	<author>
		<name>Torsten Werner</name>
	</author>
	<content type="html">Signed-off-by: Torsten Werner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26435751&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;twerner@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dak/cruft_report.py | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;1 files changed, 1 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dak/cruft_report.py b/dak/cruft_report.py
&lt;br&gt;index 4541bf6..80b2831 100755
&lt;br&gt;--- a/dak/cruft_report.py
&lt;br&gt;+++ b/dak/cruft_report.py
&lt;br&gt;@@ -238,7 +238,7 @@ def do_nbs(real_nbs):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;output += &amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;o %s: %s\n&amp;quot; % (version, &amp;quot;, &amp;quot;.join(packages))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if all_packages:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;all_packages.sort()
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cmd_output += &amp;quot; dak rm -m \&amp;quot;[auto-cruft] NBS (was built by %s)\&amp;quot; -s %s -b %s\n\n&amp;quot; % (source, suite.suite_name, &amp;quot; &amp;quot;.join(all_packages))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cmd_output += &amp;quot; dak rm -m \&amp;quot;[auto-cruft] NBS (was built by %s)\&amp;quot; -s %s -b %s -R\n\n&amp;quot; % (source, suite.suite_name, &amp;quot; &amp;quot;.join(all_packages))
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;output += &amp;quot;\n&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26435751&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26435751&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-1-5--cruft-report%3A-always-check-revdeps-on-NBS-removals-tp26435751p26435751.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26435753</id>
	<title>[dak/master 2/5] cruft-report: ignore duplicate source packages</title>
	<published>2009-11-19T14:50:48Z</published>
	<updated>2009-11-19T14:50:48Z</updated>
	<author>
		<name>Torsten Werner</name>
	</author>
	<content type="html">Signed-off-by: Torsten Werner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26435753&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;twerner@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dak/cruft_report.py | &amp;nbsp; &amp;nbsp;4 ++--
&lt;br&gt;&amp;nbsp;1 files changed, 2 insertions(+), 2 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dak/cruft_report.py b/dak/cruft_report.py
&lt;br&gt;index 80b2831..cc475f5 100755
&lt;br&gt;--- a/dak/cruft_report.py
&lt;br&gt;+++ b/dak/cruft_report.py
&lt;br&gt;@@ -419,8 +419,8 @@ def main ():
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Check for duplicated packages and build indices for checking &amp;quot;no source&amp;quot; later
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;source_index = component + '/' + source
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if src_pkgs.has_key(source):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot; %s is a duplicated source package (%s and %s)&amp;quot; % (source, source_index, src_pkgs[source])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#if src_pkgs.has_key(source):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# &amp;nbsp; &amp;nbsp;print &amp;quot; %s is a duplicated source package (%s and %s)&amp;quot; % (source, source_index, src_pkgs[source])
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src_pkgs[source] = source_index
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for binary in binaries_list:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if bin_pkgs.has_key(binary):
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26435753&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26435753&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-2-5--cruft-report%3A-ignore-duplicate-source-packages-tp26435753p26435753.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26435756</id>
	<title>[dak/master 5/5] queue: fix sponsored uploads</title>
	<published>2009-11-19T14:50:48Z</published>
	<updated>2009-11-19T14:50:48Z</updated>
	<author>
		<name>Torsten Werner</name>
	</author>
	<content type="html">---
&lt;br&gt;&amp;nbsp;daklib/queue.py | &amp;nbsp; 19 +++++++++----------
&lt;br&gt;&amp;nbsp;1 files changed, 9 insertions(+), 10 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/daklib/queue.py b/daklib/queue.py
&lt;br&gt;index e39b72d..67e6563 100755
&lt;br&gt;--- a/daklib/queue.py
&lt;br&gt;+++ b/daklib/queue.py
&lt;br&gt;@@ -1445,16 +1445,15 @@ class Upload(object):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.check_dm_upload(fpr, session)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Check source-based permissions for other types
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if self.pkg.changes[&amp;quot;architecture&amp;quot;].has_key(&amp;quot;source&amp;quot;):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if fpr.source_acl.access_level is None:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rej = 'Fingerprint %s may not upload source' % fpr.fingerprint
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rej += '\nPlease contact ftpmaster if you think this is incorrect'
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.rejects.append(rej)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# If not a DM, we allow full upload rights
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uid_email = &amp;quot;%&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26435756&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;s@...&lt;/a&gt;&amp;quot; % (fpr.uid.uid)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.check_if_upload_is_sponsored(uid_email, fpr.uid.name)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if self.pkg.changes[&amp;quot;architecture&amp;quot;].has_key(&amp;quot;source&amp;quot;) and \
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fpr.source_acl.access_level is None:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rej = 'Fingerprint %s may not upload source' % fpr.fingerprint
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rej += '\nPlease contact ftpmaster if you think this is incorrect'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.rejects.append(rej)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# If not a DM, we allow full upload rights
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uid_email = &amp;quot;%&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26435756&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;s@...&lt;/a&gt;&amp;quot; % (fpr.uid.uid)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.check_if_upload_is_sponsored(uid_email, fpr.uid.name)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Check binary upload permissions
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26435756&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26435756&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-5-5--queue%3A-fix-sponsored-uploads-tp26435756p26435756.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26435761</id>
	<title>[dak/master 4/5] cruft-report: fix exception in full mode</title>
	<published>2009-11-19T14:50:48Z</published>
	<updated>2009-11-19T14:50:48Z</updated>
	<author>
		<name>Torsten Werner</name>
	</author>
	<content type="html">Signed-off-by: Torsten Werner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26435761&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;twerner@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dak/cruft_report.py | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;1 files changed, 1 insertions(+), 1 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dak/cruft_report.py b/dak/cruft_report.py
&lt;br&gt;index 4b78487..73619d5 100755
&lt;br&gt;--- a/dak/cruft_report.py
&lt;br&gt;+++ b/dak/cruft_report.py
&lt;br&gt;@@ -388,7 +388,7 @@ def main ():
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;bin_not_built = {}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if &amp;quot;bnb&amp;quot; in checks:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bins_in_suite = get_suite_binaries(suite_name, session)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bins_in_suite = get_suite_binaries(suite, session)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;# Checks based on the Sources files
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;components = cnf.ValueList(&amp;quot;Suite::%s::Components&amp;quot; % (suite_name))
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26435761&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26435761&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-4-5--cruft-report%3A-fix-exception-in-full-mode-tp26435761p26435761.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26422208</id>
	<title>[dak/master] Really replace msfl by dominate in dinstall</title>
	<published>2009-11-18T23:53:28Z</published>
	<updated>2009-11-18T23:53:28Z</updated>
	<author>
		<name>Torsten Werner</name>
	</author>
	<content type="html">Signed-off-by: Torsten Werner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26422208&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;twerner@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;config/debian/dinstall.functions | &amp;nbsp; &amp;nbsp;6 +++---
&lt;br&gt;&amp;nbsp;1 files changed, 3 insertions(+), 3 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/config/debian/dinstall.functions b/config/debian/dinstall.functions
&lt;br&gt;index ddce969..26c1c8b 100644
&lt;br&gt;--- a/config/debian/dinstall.functions
&lt;br&gt;+++ b/config/debian/dinstall.functions
&lt;br&gt;@@ -129,9 +129,9 @@ function cruft() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;dak check-overrides
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-function msfl() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;log &amp;quot;Generating suite file lists for apt-ftparchive&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;dak make-suite-file-list
&lt;br&gt;+function dominate() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;log &amp;quot;Removing obsolete source and binary associations&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;dak dominate
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;function filelist() {
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26422208&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26422208&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master--Really-replace-msfl-by-dominate-in-dinstall-tp26422208p26422208.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26416617</id>
	<title>[dak/master 3/3] NEW</title>
	<published>2009-11-18T14:03:44Z</published>
	<updated>2009-11-18T14:03:44Z</updated>
	<author>
		<name>Joerg Jaspert</name>
	</author>
	<content type="html">dont fillin automated reject message when doing a manual NEW reject.
&lt;br&gt;&lt;br&gt;Signed-off-by: Joerg Jaspert &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26416617&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;joerg@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;daklib/queue.py | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;1 files changed, 1 insertions(+), 0 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/daklib/queue.py b/daklib/queue.py
&lt;br&gt;index c7e66a4..e39b72d 100755
&lt;br&gt;--- a/daklib/queue.py
&lt;br&gt;+++ b/daklib/queue.py
&lt;br&gt;@@ -2139,6 +2139,7 @@ distribution.&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;user_email_address = utils.whoami() + &amp;quot; &amp;lt;%s&amp;gt;&amp;quot; % (cnf[&amp;quot;Dinstall::MyAdminAddress&amp;quot;])
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.Subst[&amp;quot;__REJECTOR_ADDRESS__&amp;quot;] = user_email_address
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.Subst[&amp;quot;__MANUAL_REJECT_MESSAGE__&amp;quot;] = reject_message
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.Subst[&amp;quot;__REJECT_MESSAGE__&amp;quot;] = &amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.Subst[&amp;quot;__CC__&amp;quot;] = &amp;quot;Cc: &amp;quot; + cnf[&amp;quot;Dinstall::MyEmailAddress&amp;quot;]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reject_mail_message = utils.TemplateSubst(self.Subst, rej_template)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Write the rejection email out as the &amp;lt;foo&amp;gt;.reason file
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26416617&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26416617&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-3-3--NEW-tp26416617p26416617.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26416830</id>
	<title>[dak/master 2/3] log ids of deleted rows to aid debugging</title>
	<published>2009-11-18T14:03:44Z</published>
	<updated>2009-11-18T14:03:44Z</updated>
	<author>
		<name>Torsten Werner</name>
	</author>
	<content type="html">Signed-off-by: Torsten Werner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26416830&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;twerner@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dak/dominate.py | &amp;nbsp; &amp;nbsp;7 ++++---
&lt;br&gt;&amp;nbsp;1 files changed, 4 insertions(+), 3 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/dak/dominate.py b/dak/dominate.py
&lt;br&gt;index 73eee8c..7bb74c6 100755
&lt;br&gt;--- a/dak/dominate.py
&lt;br&gt;+++ b/dak/dominate.py
&lt;br&gt;@@ -35,10 +35,11 @@ def fetch(reason, query, args, session):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;for row in session.execute(query, args).fetchall():
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(id, package, version, suite_name, architecture) = row
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if Options['No-Action']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Delete %s %s from %s architecture %s (%s)&amp;quot; % \
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(package, version, suite_name, architecture, reason)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Delete %s %s from %s architecture %s (%s, %d)&amp;quot; % \
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(package, version, suite_name, architecture, reason, id)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Logger.log([reason, package, version, suite_name, architecture])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Logger.log([reason, package, version, suite_name, \
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;architecture, id])
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;idList.append(id)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return idList
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26416830&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26416830&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-2-3--log-ids-of-deleted-rows-to-aid-debugging-tp26416830p26416830.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26416838</id>
	<title>[dak/master 1/3] replace msfl by dominate</title>
	<published>2009-11-18T14:03:44Z</published>
	<updated>2009-11-18T14:03:44Z</updated>
	<author>
		<name>Torsten Werner</name>
	</author>
	<content type="html">---
&lt;br&gt;&amp;nbsp;config/debian/cron.dinstall | &amp;nbsp; &amp;nbsp;4 ++--
&lt;br&gt;&amp;nbsp;1 files changed, 2 insertions(+), 2 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/config/debian/cron.dinstall b/config/debian/cron.dinstall
&lt;br&gt;index e3c6f4e..747db2f 100755
&lt;br&gt;--- a/config/debian/cron.dinstall
&lt;br&gt;+++ b/config/debian/cron.dinstall
&lt;br&gt;@@ -244,8 +244,8 @@ rm -f &amp;quot;$LOCK_ACCEPTED&amp;quot;
&lt;br&gt;&amp;nbsp;rm -f &amp;quot;$LOCK_NEW&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;GO=(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;FUNC=&amp;quot;msfl&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;TIME=&amp;quot;make-suite-file-list&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;FUNC=&amp;quot;dominate&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;TIME=&amp;quot;dominate&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ARGS=&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ERR=&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp;)
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26416838&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26416838&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master-1-3--replace-msfl-by-dominate-tp26416838p26416838.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26397384</id>
	<title>[dak/master] add dominate.py and db upgrade script #25</title>
	<published>2009-11-17T12:37:53Z</published>
	<updated>2009-11-17T12:37:53Z</updated>
	<author>
		<name>Torsten Werner</name>
	</author>
	<content type="html">&lt;a href=&quot;http://ftp-master.debian.org/wiki/projects/arch-all-tracking/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://ftp-master.debian.org/wiki/projects/arch-all-tracking/&lt;/a&gt;&lt;br&gt;---
&lt;br&gt;&amp;nbsp;dak/dak.py &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;4 +-
&lt;br&gt;&amp;nbsp;dak/dakdb/update25.py | &amp;nbsp;189 +++++++++++++++++++++++++++++++++++++++++++++++++
&lt;br&gt;&amp;nbsp;dak/dominate.py &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;151 +++++++++++++++++++++++++++++++++++++++
&lt;br&gt;&amp;nbsp;dak/update_db.py &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;4 files changed, 344 insertions(+), 2 deletions(-)
&lt;br&gt;&amp;nbsp;create mode 100755 dak/dakdb/update25.py
&lt;br&gt;&amp;nbsp;create mode 100755 dak/dominate.py
&lt;br&gt;&lt;br&gt;diff --git a/dak/dak.py b/dak/dak.py
&lt;br&gt;index 1d9336d..443e458 100755
&lt;br&gt;--- a/dak/dak.py
&lt;br&gt;+++ b/dak/dak.py
&lt;br&gt;@@ -70,8 +70,10 @@ def init():
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;quot;process-upload&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;Process packages in queue/unchecked&amp;quot;),
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;quot;dominate&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;Remove obsolete source and binary associations from suites&amp;quot;),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;quot;make-suite-file-list&amp;quot;,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;Generate lists of packages per suite for apt-ftparchive&amp;quot;),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;OBSOLETE: replaced by dominate and generate-filelist&amp;quot;),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;quot;make-pkg-file-mapping&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;Generate package &amp;lt;-&amp;gt; file mapping&amp;quot;),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;quot;generate-filelist&amp;quot;,
&lt;br&gt;diff --git a/dak/dakdb/update25.py b/dak/dakdb/update25.py
&lt;br&gt;new file mode 100755
&lt;br&gt;index 0000000..b2813d9
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/dak/dakdb/update25.py
&lt;br&gt;@@ -0,0 +1,189 @@
&lt;br&gt;+#!/usr/bin/env python
&lt;br&gt;+
&lt;br&gt;+&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+Add views for new dominate command.
&lt;br&gt;+
&lt;br&gt;+@contact: Debian FTP Master &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26397384&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ftpmaster@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+@copyright: 2009 &amp;nbsp;Torsten Werner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26397384&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;twerner@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+@license: GNU General Public License version 2 or later
&lt;br&gt;+&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+
&lt;br&gt;+# This program is free software; you can redistribute it and/or modify
&lt;br&gt;+# it under the terms of the GNU General Public License as published by
&lt;br&gt;+# the Free Software Foundation; either version 2 of the License, or
&lt;br&gt;+# (at your option) any later version.
&lt;br&gt;+
&lt;br&gt;+# This program is distributed in the hope that it will be useful,
&lt;br&gt;+# but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+# GNU General Public License for more details.
&lt;br&gt;+
&lt;br&gt;+# You should have received a copy of the GNU General Public License
&lt;br&gt;+# along with this program; if not, write to the Free Software
&lt;br&gt;+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA &amp;nbsp;02111-1307 &amp;nbsp;USA
&lt;br&gt;+
&lt;br&gt;+import psycopg2
&lt;br&gt;+
&lt;br&gt;+def do_update(self):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;print &amp;quot;Add views for generate_filelist to database.&amp;quot;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;try:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c = self.db.cursor()
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Drop old views.&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS binaries_suite_arch CASCADE&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS newest_all_associations CASCADE&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS obsolete_any_by_all_associations CASCADE&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS newest_any_associations CASCADE&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS obsolete_any_associations CASCADE&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS source_suite CASCADE&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS newest_source CASCADE&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS newest_src_association CASCADE&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS any_associations_source CASCADE&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS src_associations_src CASCADE&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS almost_obsolete_src_associations CASCADE&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS obsolete_src_associations CASCADE&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS bin_associations_binaries CASCADE&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS src_associations_bin CASCADE&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS almost_obsolete_all_associations CASCADE&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;DROP VIEW IF EXISTS obsolete_all_associations CASCADE&amp;quot;)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Create new views.&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE VIEW binaries_suite_arch AS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SELECT bin_associations.id, binaries.id AS bin, binaries.package,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binaries.version, binaries.source, bin_associations.suite,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; suite.suite_name, binaries.architecture, architecture.arch_string
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM binaries JOIN bin_associations ON binaries.id = bin_associations.bin
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN suite ON suite.id = bin_associations.suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN architecture ON binaries.architecture = architecture.id;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE VIEW newest_all_associations AS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SELECT package, max(version) AS version, suite, architecture
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM binaries_suite_arch
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WHERE architecture = 2 GROUP BY package, suite, architecture;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE VIEW obsolete_any_by_all_associations AS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SELECT binaries_suite_arch.id, binaries_suite_arch.package,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binaries_suite_arch.version, binaries_suite_arch.suite,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binaries_suite_arch.architecture
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM binaries_suite_arch
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN newest_all_associations
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ON (binaries_suite_arch.package = newest_all_associations.package AND
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;binaries_suite_arch.version &amp;lt; newest_all_associations.version AND
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;binaries_suite_arch.suite = newest_all_associations.suite AND
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;binaries_suite_arch.architecture &amp;gt; 2);
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE VIEW newest_any_associations AS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SELECT package, max(version) AS version, suite, architecture
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM binaries_suite_arch
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WHERE architecture &amp;gt; 2 GROUP BY package, suite, architecture;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE VIEW obsolete_any_associations AS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SELECT id, binaries_suite_arch.architecture, binaries_suite_arch.version,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binaries_suite_arch.package, binaries_suite_arch.suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM binaries_suite_arch
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN newest_any_associations
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ON binaries_suite_arch.architecture = newest_any_associations.architecture AND
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binaries_suite_arch.package = newest_any_associations.package AND
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binaries_suite_arch.suite = newest_any_associations.suite AND
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binaries_suite_arch.version != newest_any_associations.version;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE VIEW source_suite AS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SELECT src_associations.id, source.id AS src , source.source, source.version,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; src_associations.suite, suite.suite_name
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM source
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN src_associations ON source.id = src_associations.source
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN suite ON suite.id = src_associations.suite;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE VIEW newest_source AS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SELECT source, max(version) AS version, suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM source_suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GROUP BY source, suite;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE VIEW newest_src_association AS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SELECT id, src, source, version, suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM source_suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN newest_source USING (source, version, suite);
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE VIEW any_associations_source AS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SELECT bin_associations.id, bin_associations.suite, binaries.id AS bin,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binaries.package, binaries.version AS binver, binaries.architecture,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; source.id AS src, source.source, source.version AS srcver
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM bin_associations
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN binaries ON bin_associations.bin = binaries.id AND architecture != 2
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN source ON binaries.source = source.id;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE VIEW src_associations_src AS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SELECT src_associations.id, src_associations.suite, source.id AS src,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; source.source, source.version
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM src_associations
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN source ON src_associations.source = source.id;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE VIEW almost_obsolete_src_associations AS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SELECT src_associations_src.id, src_associations_src.src,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; src_associations_src.source, src_associations_src.version, suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM src_associations_src
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LEFT JOIN any_associations_source USING (src, suite)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WHERE bin IS NULL;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE VIEW obsolete_src_associations AS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SELECT almost.id, almost.src, almost.source, almost.version, almost.suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM almost_obsolete_src_associations as almost
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;JOIN newest_src_association AS newest
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ON almost.source &amp;nbsp;= newest.source AND
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; almost.version &amp;lt; newest.version AND
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; almost.suite &amp;nbsp; = newest.suite;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE VIEW bin_associations_binaries AS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SELECT bin_associations.id, bin_associations.bin, binaries.package,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binaries.version, bin_associations.suite, binaries.architecture
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM bin_associations
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN binaries ON bin_associations.bin = binaries.id;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE VIEW src_associations_bin AS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SELECT src_associations.id, src_associations.source, src_associations.suite,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; binaries.id AS bin, binaries.architecture
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM src_associations
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN source ON src_associations.source = source.id
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN binaries ON source.id = binaries.source;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE VIEW almost_obsolete_all_associations AS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SELECT bin_associations_binaries.id AS id, bin, bin_associations_binaries.package,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bin_associations_binaries.version, suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM bin_associations_binaries
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LEFT JOIN src_associations_bin USING (bin, suite, architecture)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WHERE source IS NULL AND architecture = 2;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+CREATE VIEW obsolete_all_associations AS
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SELECT almost.id, almost.bin, almost.package, almost.version, almost.suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM almost_obsolete_all_associations AS almost
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN newest_all_associations AS newest
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ON almost.package = newest.package AND
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; almost.version &amp;lt; newest.version AND
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; almost.suite &amp;nbsp; = newest.suite;
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Committing&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c.execute(&amp;quot;UPDATE config SET value = '25' WHERE name = 'db_revision'&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.db.commit()
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;except psycopg2.InternalError, msg:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.db.rollback()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;raise DBUpdateError, &amp;quot;Database error, rollback issued. Error message : %s&amp;quot; % (str(msg))
&lt;br&gt;+
&lt;br&gt;diff --git a/dak/dominate.py b/dak/dominate.py
&lt;br&gt;new file mode 100755
&lt;br&gt;index 0000000..73eee8c
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/dak/dominate.py
&lt;br&gt;@@ -0,0 +1,151 @@
&lt;br&gt;+#!/usr/bin/python
&lt;br&gt;+
&lt;br&gt;+&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+Remove obsolete source and binary associations from suites.
&lt;br&gt;+
&lt;br&gt;+@contact: Debian FTP Master &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26397384&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ftpmaster@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+@copyright: 2009 &amp;nbsp;Torsten Werner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26397384&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;twerner@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+@license: GNU General Public License version 2 or later
&lt;br&gt;+&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+
&lt;br&gt;+# This program is free software; you can redistribute it and/or modify
&lt;br&gt;+# it under the terms of the GNU General Public License as published by
&lt;br&gt;+# the Free Software Foundation; either version 2 of the License, or
&lt;br&gt;+# (at your option) any later version.
&lt;br&gt;+
&lt;br&gt;+# This program is distributed in the hope that it will be useful,
&lt;br&gt;+# but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;+# GNU General Public License for more details.
&lt;br&gt;+
&lt;br&gt;+# You should have received a copy of the GNU General Public License
&lt;br&gt;+# along with this program; if not, write to the Free Software
&lt;br&gt;+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA &amp;nbsp;02111-1307 &amp;nbsp;USA
&lt;br&gt;+
&lt;br&gt;+from daklib.dbconn import *
&lt;br&gt;+from daklib.config import Config
&lt;br&gt;+from daklib import daklog, utils
&lt;br&gt;+import apt_pkg, sys
&lt;br&gt;+
&lt;br&gt;+Options = None
&lt;br&gt;+Logger = None
&lt;br&gt;+
&lt;br&gt;+def fetch(reason, query, args, session):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;idList = []
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for row in session.execute(query, args).fetchall():
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(id, package, version, suite_name, architecture) = row
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if Options['No-Action']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;Delete %s %s from %s architecture %s (%s)&amp;quot; % \
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(package, version, suite_name, architecture, reason)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Logger.log([reason, package, version, suite_name, architecture])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;idList.append(id)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return idList
&lt;br&gt;+
&lt;br&gt;+def obsoleteAnyByAllAssociations(suite, session):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;query = &amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SELECT obsolete.id, package, obsolete.version, suite_name, arch_string
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM obsolete_any_by_all_associations AS obsolete
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN architecture ON obsolete.architecture = architecture.id
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN suite ON obsolete.suite = suite.id
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WHERE suite = :suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return fetch('newer_all', query, { 'suite': suite }, session)
&lt;br&gt;+
&lt;br&gt;+def obsoleteAnyAssociations(suite, session):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;query = &amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SELECT obsolete.id, package, obsolete.version, suite_name, arch_string
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM obsolete_any_associations AS obsolete
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN architecture ON obsolete.architecture = architecture.id
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN suite ON obsolete.suite = suite.id
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WHERE suite = :suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return fetch('newer_any', query, { 'suite': suite }, session)
&lt;br&gt;+
&lt;br&gt;+def obsoleteSrcAssociations(suite, session):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;query = &amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SELECT obsolete.id, source, obsolete.version, suite_name,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;'source' AS arch_string
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM obsolete_src_associations AS obsolete
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN suite ON obsolete.suite = suite.id
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WHERE suite = :suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return fetch('old_and_unreferenced', query, { 'suite': suite }, session)
&lt;br&gt;+
&lt;br&gt;+def obsoleteAllAssociations(suite, session):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;query = &amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SELECT obsolete.id, package, obsolete.version, suite_name,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;'all' AS arch_string
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM obsolete_all_associations AS obsolete
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JOIN suite ON obsolete.suite = suite.id
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WHERE suite = :suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return fetch('old_and_unreferenced', query, { 'suite': suite }, session)
&lt;br&gt;+
&lt;br&gt;+def deleteAssociations(table, idList, session):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;query = &amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DELETE
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FROM %s
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WHERE id = :id
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot; % table
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;session.execute(query, [{'id': id} for id in idList])
&lt;br&gt;+
&lt;br&gt;+def doDaDoDa(suite, session):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# keep this part disabled because it is too dangerous
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;#idList = obsoleteAnyByAllAssociations(suite, session)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;#deleteAssociations('bin_associations', idList, session)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;idList = obsoleteAnyAssociations(suite, session)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;deleteAssociations('bin_associations', idList, session)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;idList = obsoleteSrcAssociations(suite, session)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;deleteAssociations('src_associations', idList, session)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;idList = obsoleteAllAssociations(suite, session)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;deleteAssociations('bin_associations', idList, session)
&lt;br&gt;+
&lt;br&gt;+def usage():
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;print &amp;quot;&amp;quot;&amp;quot;Usage: dak dominate [OPTIONS]
&lt;br&gt;+Remove obsolete source and binary associations from suites.
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;-s, --suite=SUITE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;act on this suite
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;-h, --help &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; show this help and exit
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;-n, --no-action &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;don't commit changes
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;-f, --force &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;also clean up untouchable suites
&lt;br&gt;+
&lt;br&gt;+SUITE can be comma (or space) separated list, e.g.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;--suite=testing,unstable&amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;sys.exit()
&lt;br&gt;+
&lt;br&gt;+def main():
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;global Options, Logger
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;cnf = Config()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Arguments = [('h', &amp;quot;help&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;Obsolete::Options::Help&amp;quot;),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ('s', &amp;quot;suite&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;quot;Obsolete::Options::Suite&amp;quot;, &amp;quot;HasArg&amp;quot;),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ('n', &amp;quot;no-action&amp;quot;, &amp;quot;Obsolete::Options::No-Action&amp;quot;),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ('f', &amp;quot;force&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;quot;Obsolete::Options::Force&amp;quot;)]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;query_suites = DBConn().session().query(Suite)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;suites = [suite.suite_name for suite in query_suites.all()]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if not cnf.has_key('Obsolete::Options::Suite'):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cnf['Obsolete::Options::Suite'] = ','.join(suites)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;cnf['Obsolete::Options::Help'] = ''
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;cnf['Obsolete::Options::No-Action'] = ''
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;cnf['Obsolete::Options::Force'] = ''
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Options = cnf.SubTree(&amp;quot;Obsolete::Options&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if Options['Help']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;usage()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Logger = daklog.Logger(cnf.Cnf, &amp;quot;dominate&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;session = DBConn().session()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for suite_name in utils.split_args(Options['Suite']):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;suite = session.query(Suite).filter_by(suite_name = suite_name).one()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if not suite.untouchable or Options['Force']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doDaDoDa(suite.suite_id, session)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if Options['No-Action']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;session.rollback()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;session.commit()
&lt;br&gt;+
&lt;br&gt;+if __name__ == '__main__':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;main()
&lt;br&gt;+
&lt;br&gt;diff --git a/dak/update_db.py b/dak/update_db.py
&lt;br&gt;index ecdd99a..50b293f 100755
&lt;br&gt;--- a/dak/update_db.py
&lt;br&gt;+++ b/dak/update_db.py
&lt;br&gt;@@ -45,7 +45,7 @@ from daklib.dak_exceptions import DBUpdateError
&lt;br&gt;&amp;nbsp;################################################################################
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;Cnf = None
&lt;br&gt;-required_database_schema = 24
&lt;br&gt;+required_database_schema = 25
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;################################################################################
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-- 
&lt;br&gt;1.6.3.3
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;To UNSUBSCRIBE, email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26397384&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;debian-dak-request@...&lt;/a&gt;
&lt;br&gt;with a subject of &amp;quot;unsubscribe&amp;quot;. Trouble? Contact &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26397384&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;listmaster@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-dak-master--add-dominate.py-and-db-upgrade-script--25-tp26397384p26397384.html" />
</entry>

</feed>
