From: Joerg Jaspert Date: Sat, 4 Sep 2010 18:52:35 +0000 (+0200) Subject: Merge branch 'master' into bpo X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=0827a5d8b54def6b0c87b7559519ccd8d514075d;hp=9a7ce31a554b7ac0079ab54b1a029eabd78b4b31;p=dak.git Merge branch 'master' into bpo * master: Update remove leading / Put -print0 at end use the rowcount Fixup, its len(q) Real time changelog testing control_suite.py: fix britney changelog Add distribution to changelogs view Rotate the changelog, 4 copies control_suite.py: generate changelog for britney runs --- diff --git a/config/debian/dak.conf b/config/debian/dak.conf index 9f41d69d..1dd52a4e 100644 --- a/config/debian/dak.conf +++ b/config/debian/dak.conf @@ -778,4 +778,5 @@ Common Changelogs { Testing "/srv/release.debian.org/tools/trille/current-testing"; + Britney "/srv/ftp-master.debian.org/ftp/dists/testing/ChangeLog"; } diff --git a/dak/control_suite.py b/dak/control_suite.py index d8f8227b..9eb8ae22 100755 --- a/dak/control_suite.py +++ b/dak/control_suite.py @@ -63,7 +63,8 @@ Display or alter the contents of a suite using FILE(s), or stdin. -h, --help show this help and exit -l, --list=SUITE list the contents of SUITE -r, --remove=SUITE remove from SUITE - -s, --set=SUITE set SUITE""" + -s, --set=SUITE set SUITE + -b, --britney generate changelog entry for britney runs""" sys.exit(exit_code) @@ -93,7 +94,59 @@ def get_id(package, version, architecture, session): ####################################################################################### -def set_suite(file, suite, session): +def britney_changelog(packages, suite, session): + + old = {} + current = {} + + q = session.execute("""SELECT s.source, s.version, sa.id + FROM source s, src_associations sa + WHERE sa.suite = :suiteid + AND sa.source = s.id""", {'suiteid': suite.suite_id}) + + for p in q.fetchall(): + current[p[0]] = p[1] + for p in packages.keys(): + p = p.split() + if p[2] == "source": + old[p[0]] = p[1] + + new = {} + for p in current.keys(): + if p in old.keys(): + if apt_pkg.VersionCompare(current[p], old[p]) > 0: + new[p] = [current[p], old[p]] + else: + new[p] = [current[p], 0] + + query = "SELECT source, changelog FROM changelogs WHERE" + for p in new.keys(): + query += " source = '%s' AND version > '%s' AND version <= '%s'" \ + % (p, new[p][1], new[p][0]) + query += " AND architecture LIKE '%source%' AND distribution in \ + ('unstable', 'experimental', 'testing-proposed-updates') OR" + query += " False ORDER BY source, version DESC" + q = session.execute(query) + + pu = None + brit = utils.open_file(Config()["Changelogs::Britney"], 'w') + + for u in q: + if pu and pu != u[0]: + brit.write("\n") + brit.write("%s\n" % u[1]) + pu = u[0] + if q.rowcount: brit.write("\n\n\n") + + for p in list(set(old.keys()).difference(current.keys())): + brit.write("REMOVED: %s %s\n" % (p, old[p])) + + brit.flush() + brit.close() + +####################################################################################### + +def set_suite(file, suite, session, britney=False): suite_id = suite.suite_id lines = file.readlines() @@ -155,11 +208,14 @@ def set_suite(file, suite, session): session.commit() + if britney: + britney_changelog(current, suite, session) + ####################################################################################### -def process_file(file, suite, action, session): +def process_file(file, suite, action, session, britney=False): if action == "set": - set_suite(file, suite, session) + set_suite(file, suite, session, britney) return suite_id = suite.suite_id @@ -262,12 +318,13 @@ def main (): cnf = Config() Arguments = [('a',"add","Control-Suite::Options::Add", "HasArg"), + ('b',"britney","Control-Suite::Options::Britney"), ('h',"help","Control-Suite::Options::Help"), ('l',"list","Control-Suite::Options::List","HasArg"), ('r',"remove", "Control-Suite::Options::Remove", "HasArg"), ('s',"set", "Control-Suite::Options::Set", "HasArg")] - for i in ["add", "help", "list", "remove", "set", "version" ]: + for i in ["add", "britney", "help", "list", "remove", "set", "version" ]: if not cnf.has_key("Control-Suite::Options::%s" % (i)): cnf["Control-Suite::Options::%s" % (i)] = "" @@ -305,15 +362,19 @@ def main (): if action == "set" and suite_name not in ["testing"]: utils.fubar("Will not reset suite %s" % (suite_name)) + britney = False + if action == "set" and cnf["Control-Suite::Options::Britney"]: + britney = True + if action == "list": get_list(suite, session) else: Logger = daklog.Logger(cnf.Cnf, "control-suite") if file_list: for f in file_list: - process_file(utils.open_file(f), suite, action, session) + process_file(utils.open_file(f), suite, action, session, britney) else: - process_file(sys.stdin, suite, action, session) + process_file(sys.stdin, suite, action, session, britney) Logger.close() ####################################################################################### diff --git a/dak/dakdb/update35.py b/dak/dakdb/update35.py new file mode 100644 index 00000000..335d70e5 --- /dev/null +++ b/dak/dakdb/update35.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python +# coding=utf8 + +""" +Add distribution to changelogs view + +@contact: Debian FTP Master +@copyright: 2010 Luca Falavigna +@license: GNU General Public License version 2 or later +""" + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +################################################################################ + + +################################################################################ + +import psycopg2 +from daklib.dak_exceptions import DBUpdateError + +################################################################################ +def do_update(self): + """ + Add distribution to changelogs view + """ + print __doc__ + try: + c = self.db.cursor() + c.execute('CREATE OR REPLACE VIEW changelogs AS SELECT cl.id, source, CAST(version AS debversion), architecture, \ + changelog, distribution FROM changes c JOIN changelogs_text cl ON cl.id = c.changelog_id') + c.execute("GRANT SELECT ON changelogs TO public") + c.execute("UPDATE config SET value = '35' WHERE name = 'db_revision'") + self.db.commit() + + except psycopg2.ProgrammingError, msg: + self.db.rollback() + raise DBUpdateError, 'Unable to apply build_queue update 35, rollback issued. Error message : %s' % (str(msg)) diff --git a/dak/queue_report.py b/dak/queue_report.py index 84f6a22f..e2d8578b 100755 --- a/dak/queue_report.py +++ b/dak/queue_report.py @@ -286,7 +286,7 @@ def table_row(source, version, arch, last_mod, maint, distribution, closes, fing print "%s" % (source) print "" for vers in version.split(): - print "%s
" % (source, utils.html_escape(vers), utils.html_escape(vers)) + print "%s
" % (source, utils.html_escape(vers), utils.html_escape(vers)) print "" print "%s" % (arch) print "" diff --git a/dak/update_db.py b/dak/update_db.py index 1fc0cc62..c6dc404b 100755 --- a/dak/update_db.py +++ b/dak/update_db.py @@ -45,7 +45,7 @@ from daklib.dak_exceptions import DBUpdateError ################################################################################ Cnf = None -required_database_schema = 34 +required_database_schema = 35 ################################################################################ diff --git a/docs/README.stable-point-release b/docs/README.stable-point-release index b1e0d778..c906daba 100644 --- a/docs/README.stable-point-release +++ b/docs/README.stable-point-release @@ -3,6 +3,7 @@ Rough Guide to doing Stable Point Releases in Debian o Dump projectb for backup purposes. o get everything listed, dak control-suite -l proposed-updates > p-u.list +o generate the changelog using dak make-changelog o add everything to stable: cat p-u.list |dak control-suite --add stable o remove everything from proposed-updates, dak control-suite -r proposed-updates < p-u.list o sync with stable RM if there is any propup needed. do it, if so. @@ -24,8 +25,8 @@ o Run 'dak generate-releases --force-touch --apt-conf apt.conf.stable stable' begin; -update suite set version = '5.0.4' where suite_name = 'stable'; -update suite set description = 'Debian 5.0.4 Released 29 Januar 2010' where suite_name = 'stable'; +update suite set version = '5.0.6' where suite_name = 'stable'; +update suite set description = 'Debian 5.0.6 Released 04 September 2010' where suite_name = 'stable'; ------------------------------------------------------------------------ Old doc: diff --git a/scripts/debian/import_testing.sh b/scripts/debian/import_testing.sh index 8eeff844..7ee29eab 100755 --- a/scripts/debian/import_testing.sh +++ b/scripts/debian/import_testing.sh @@ -37,7 +37,13 @@ cd $masterdir echo "Importing new data for testing into projectb" # Now load the data -cat $TESTINGINPUT | dak control-suite --set testing +rm ${ftpdir}/dists/testing/ChangeLog +cat ${TESTINGINPUT} | dak control-suite --set testing --britney +NOW=$(date "+%Y%m%d%H%M") +cd ${ftpdir}/dists/testing/ +mv ChangeLog ChangeLog.${NOW} +ln -s ChangeLog.${NOW} ChangeLog +find . -maxdepth 1 -mindepth 1 -type f -mmin +2880 -name 'ChangeLog.*' -print0 | xargs --no-run-if-empty -0 rm echo "Done"