X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fgenerate_packages_sources.py;h=3e01da2347d8dbe26043e0a3000a869f53d1a651;hb=b3d7c0ea3704fa38d91b47023e232b94ce05735d;hp=00489083851fade54710495ccd13943839726b39;hpb=1fc854e1829ed9000f02ea1375201366625d73c8;p=dak.git diff --git a/dak/generate_packages_sources.py b/dak/generate_packages_sources.py index 00489083..3e01da23 100755 --- a/dak/generate_packages_sources.py +++ b/dak/generate_packages_sources.py @@ -6,6 +6,7 @@ @copyright: 2000, 2001, 2002, 2006 James Troup @copyright: 2009 Mark Hymers @copyright: 2010 Joerg Jaspert +@license: GNU General Public License version 2 or later """ @@ -31,7 +32,7 @@ import sys import apt_pkg from tempfile import mkstemp, mkdtemp import commands -from multiprocessing import Pool +from multiprocessing import Pool, TimeoutError from daklib import daklog from daklib.dbconn import * @@ -41,6 +42,7 @@ from daklib.config import Config Options = None #: Commandline arguments parsed into this Logger = None #: Our logging object +results = [] #: Results of the subprocesses ################################################################################ @@ -103,38 +105,24 @@ TreeDefault apt_trees={} apt_trees["di"]={} - apt_trees["testing"]=""" -tree "dists/testing" -{ - FakeDI "dists/unstable"; - FileList "/srv/ftp-master.debian.org/database/dists/testing_$(SECTION)_binary-$(ARCH).list"; - SourceFileList "/srv/ftp-master.debian.org/database/dists/testing_$(SECTION)_source.list"; - Sections "main contrib non-free"; - Architectures "%(arch)s"; - BinOverride "override.squeeze.$(SECTION)"; - ExtraOverride "override.squeeze.extra.$(SECTION)"; - SrcOverride "override.squeeze.$(SECTION).src"; -}; -""" - apt_trees["squeeze-updates"]=""" -tree "dists/squeeze-updates" + apt_trees["oldstable"]=""" +tree "dists/oldstable" { - FileList "/srv/ftp-master.debian.org/database/dists/squeeze-updates_$(SECTION)_binary-$(ARCH).list"; - SourceFileList "/srv/ftp-master.debian.org/database/dists/squeeze-updates_$(SECTION)_source.list"; + FileList "/srv/ftp-master.debian.org/database/dists/oldstable_$(SECTION)_binary-$(ARCH).list"; + SourceFileList "/srv/ftp-master.debian.org/database/dists/oldstable_$(SECTION)_source.list"; Sections "main contrib non-free"; Architectures "%(arch)s"; BinOverride "override.squeeze.$(SECTION)"; ExtraOverride "override.squeeze.extra.$(SECTION)"; SrcOverride "override.squeeze.$(SECTION).src"; - Contents " "; }; """ - apt_trees["di"]["testing"]=""" -tree "dists/testing/main" + apt_trees["di"]["oldstable"]=""" +tree "dists/oldstable/main" { - FileList "/srv/ftp-master.debian.org/database/dists/testing_main_$(SECTION)_binary-$(ARCH).list"; + FileList "/srv/ftp-master.debian.org/database/dists/oldstable_main_$(SECTION)_binary-$(ARCH).list"; Sections "debian-installer"; Architectures "%(arch)s"; BinOverride "override.squeeze.main.$(SECTION)"; @@ -144,9 +132,9 @@ tree "dists/testing/main" %(contentsline)s }; -tree "dists/testing/non-free" +tree "dists/oldstable/non-free" { - FileList "/srv/ftp-master.debian.org/database/dists/testing_non-free_$(SECTION)_binary-$(ARCH).list"; + FileList "/srv/ftp-master.debian.org/database/dists/oldstable_non-free_$(SECTION)_binary-$(ARCH).list"; Sections "debian-installer"; Architectures "%(arch)s"; BinOverride "override.squeeze.main.$(SECTION)"; @@ -157,134 +145,6 @@ tree "dists/testing/non-free" }; """ - apt_trees["unstable"]=""" -tree "dists/unstable" -{ - FileList "/srv/ftp-master.debian.org/database/dists/unstable_$(SECTION)_binary-$(ARCH).list"; - SourceFileList "/srv/ftp-master.debian.org/database/dists/unstable_$(SECTION)_source.list"; - Sections "main contrib non-free"; - Architectures "%(arch)s"; - BinOverride "override.sid.$(SECTION)"; - ExtraOverride "override.sid.extra.$(SECTION)"; - SrcOverride "override.sid.$(SECTION).src"; -}; -""" - apt_trees["di"]["unstable"]=""" -tree "dists/unstable/main" -{ - FileList "/srv/ftp-master.debian.org/database/dists/unstable_main_$(SECTION)_binary-$(ARCH).list"; - Sections "debian-installer"; - Architectures "%(arch)s"; - BinOverride "override.sid.main.$(SECTION)"; - SrcOverride "override.sid.main.src"; - BinCacheDB "packages-debian-installer-$(ARCH).db"; - Packages::Extensions ".udeb"; - %(contentsline)s -}; - -tree "dists/unstable/non-free" -{ - FileList "/srv/ftp-master.debian.org/database/dists/unstable_non-free_$(SECTION)_binary-$(ARCH).list"; - Sections "debian-installer"; - Architectures "%(arch)s"; - BinOverride "override.sid.main.$(SECTION)"; - SrcOverride "override.sid.main.src"; - BinCacheDB "packages-debian-installer-$(ARCH).db"; - Packages::Extensions ".udeb"; - %(contentsline)s -}; -""" - - apt_trees["experimental"]=""" -tree "dists/experimental" -{ - FileList "/srv/ftp-master.debian.org/database/dists/experimental_$(SECTION)_binary-$(ARCH).list"; - SourceFileList "/srv/ftp-master.debian.org/database/dists/experimental_$(SECTION)_source.list"; - Sections "main contrib non-free"; - Architectures "%(arch)s"; - BinOverride "override.sid.$(SECTION)"; - SrcOverride "override.sid.$(SECTION).src"; -}; -""" - apt_trees["di"]["experimental"]=""" -tree "dists/experimental/main" -{ - FileList "/srv/ftp-master.debian.org/database/dists/experimental_main_$(SECTION)_binary-$(ARCH).list"; - Sections "debian-installer"; - Architectures "%(arch)s"; - BinOverride "override.sid.main.$(SECTION)"; - SrcOverride "override.sid.main.src"; - BinCacheDB "packages-debian-installer-$(ARCH).db"; - Packages::Extensions ".udeb"; - %(contentsline)s -}; - -tree "dists/experimental/non-free" -{ - FileList "/srv/ftp-master.debian.org/database/dists/experimental_non-free_$(SECTION)_binary-$(ARCH).list"; - Sections "debian-installer"; - Architectures "%(arch)s"; - BinOverride "override.sid.main.$(SECTION)"; - SrcOverride "override.sid.main.src"; - BinCacheDB "packages-debian-installer-$(ARCH).db"; - Packages::Extensions ".udeb"; - %(contentsline)s -}; -""" - - apt_trees["testing-proposed-updates"]=""" -tree "dists/testing-proposed-updates" -{ - FileList "/srv/ftp-master.debian.org/database/dists/testing-proposed-updates_$(SECTION)_binary-$(ARCH).list"; - SourceFileList "/srv/ftp-master.debian.org/database/dists/testing-proposed-updates_$(SECTION)_source.list"; - Sections "main contrib non-free"; - Architectures "%(arch)s"; - BinOverride "override.squeeze.$(SECTION)"; - ExtraOverride "override.squeeze.extra.$(SECTION)"; - SrcOverride "override.squeeze.$(SECTION).src"; - Contents " "; -}; -""" - apt_trees["di"]["testing-proposed-updates"]=""" -tree "dists/testing-proposed-updates/main" -{ - FileList "/srv/ftp-master.debian.org/database/dists/testing-proposed-updates_main_$(SECTION)_binary-$(ARCH).list"; - Sections "debian-installer"; - Architectures "%(arch)s"; - BinOverride "override.squeeze.main.$(SECTION)"; - SrcOverride "override.squeeze.main.src"; - BinCacheDB "packages-debian-installer-$(ARCH).db"; - Packages::Extensions ".udeb"; - Contents " "; -}; -""" - - apt_trees["proposed-updates"]=""" -tree "dists/proposed-updates" -{ - FileList "/srv/ftp-master.debian.org/database/dists/proposed-updates_$(SECTION)_binary-$(ARCH).list"; - SourceFileList "/srv/ftp-master.debian.org/database/dists/proposed-updates_$(SECTION)_source.list"; - Sections "main contrib non-free"; - Architectures "%(arch)s"; - BinOverride "override.lenny.$(SECTION)"; - ExtraOverride "override.lenny.extra.$(SECTION)"; - SrcOverride "override.lenny.$(SECTION).src"; - Contents " "; -}; -""" - apt_trees["di"]["proposed-updates"]=""" -tree "dists/proposed-updates/main" -{ - FileList "/srv/ftp-master.debian.org/database/dists/proposed-updates_main_$(SECTION)_binary-$(ARCH).list"; - Sections "debian-installer"; - Architectures "%(arch)s"; - BinOverride "override.lenny.main.$(SECTION)"; - SrcOverride "override.lenny.main.src"; - BinCacheDB "packages-debian-installer-$(ARCH).db"; - Packages::Extensions ".udeb"; - Contents " "; -}; -""" cnf = Config() try: @@ -312,9 +172,10 @@ tree "dists/proposed-updates/main" # it has errormessages we like to see os.environ['GZIP'] = '--rsyncable' os.chdir(tmppath) - (result, output) = commands.getstatusoutput('apt-ftparchive generate %s' % os.path.basename(ac_name)) + (result, output) = commands.getstatusoutput('apt-ftparchive -o APT::FTPArchive::Contents=off -o APT::FTPArchive::SHA512=off generate %s' % os.path.basename(ac_name)) sn="a-f %s,%s: " % (suite, arch) print sn + output.replace('\n', '\n%s' % (sn)) + return result # Clean up any left behind files finally: @@ -333,11 +194,16 @@ tree "dists/proposed-updates/main" def sname(arch): return arch.arch_string +def get_result(arg): + global results + if arg: + results.append(arg) + ######################################################################## ######################################################################## def main (): - global Options, Logger + global Options, Logger, results cnf = Config() @@ -349,13 +215,13 @@ def main (): ('s',"suite","Generate-Packages-Sources::Options::Suite"), ('f',"force","Generate-Packages-Sources::Options::Force")] - suite_names = apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv) - Options = cnf.SubTree("Generate-Packages-Sources::Options") + suite_names = apt_pkg.parse_commandline(cnf.Cnf, Arguments, sys.argv) + Options = cnf.subtree("Generate-Packages-Sources::Options") if Options["Help"]: usage() - Logger = daklog.Logger(cnf, 'generate-packages-sources') + Logger = daklog.Logger('generate-packages-sources') session = DBConn().session() @@ -375,19 +241,26 @@ def main (): startdir = os.getcwd() os.chdir(cnf["Dir::TempPath"]) + broken=[] # For each given suite, each architecture, run one apt-ftparchive for s in suites: + results=[] # Setup a multiprocessing Pool. As many workers as we have CPU cores. pool = Pool() - arch_list=get_suite_architectures(s.suite_name, skipsrc=False, skipall=True, session=session) + arch_list=get_suite_architectures(s.suite_name, skipsrc=False, skipall=False, session=session) Logger.log(['generating output for Suite %s, Architectures %s' % (s.suite_name, map(sname, arch_list))]) for a in arch_list: - pool.apply_async(generate_packages_sources, (a.arch_string, s.suite_name, cnf["Dir::TempPath"])) + pool.apply_async(generate_packages_sources, (a.arch_string, s.suite_name, cnf["Dir::TempPath"]), callback=get_result) # No more work will be added to our pool, close it and then wait for all to finish pool.close() pool.join() + if len(results) > 0: + Logger.log(['Trouble, something with a-f broke, resultcodes: %s' % (results)]) + print "Trouble, something with a-f broke, resultcodes: %s" % (results) + sys.exit(1) + os.chdir(startdir) # this script doesn't change the database session.close()