@copyright: 2000, 2001, 2002, 2006 James Troup <james@nocrew.org>
@copyright: 2009 Mark Hymers <mhy@debian.org>
@copyright: 2010 Joerg Jaspert <joerg@debian.org>
+@license: GNU General Public License version 2 or later
"""
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 *
Options = None #: Commandline arguments parsed into this
Logger = None #: Our logging object
+results = [] #: Results of the subprocesses
################################################################################
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.wheezy.$(SECTION)";
- ExtraOverride "override.wheezy.extra.$(SECTION)";
- SrcOverride "override.wheezy.$(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"
-{
- FileList "/srv/ftp-master.debian.org/database/dists/testing_main_$(SECTION)_binary-$(ARCH).list";
- Sections "debian-installer";
- Architectures "%(arch)s";
- BinOverride "override.wheezy.main.$(SECTION)";
- SrcOverride "override.wheezy.main.src";
- BinCacheDB "packages-debian-installer-$(ARCH).db";
- Packages::Extensions ".udeb";
- %(contentsline)s
-};
-
-tree "dists/testing/non-free"
+ apt_trees["di"]["oldstable"]="""
+tree "dists/oldstable/main"
{
- FileList "/srv/ftp-master.debian.org/database/dists/testing_non-free_$(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.wheezy.main.$(SECTION)";
- SrcOverride "override.wheezy.main.src";
- BinCacheDB "packages-debian-installer-$(ARCH).db";
- Packages::Extensions ".udeb";
- %(contentsline)s
-};
-"""
-
- 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";
+ BinOverride "override.squeeze.main.$(SECTION)";
+ SrcOverride "override.squeeze.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.wheezy.$(SECTION)";
- ExtraOverride "override.wheezy.extra.$(SECTION)";
- SrcOverride "override.wheezy.$(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.wheezy.main.$(SECTION)";
- SrcOverride "override.wheezy.main.src";
- BinCacheDB "packages-debian-installer-$(ARCH).db";
- Packages::Extensions ".udeb";
- Contents " ";
-};
-"""
- apt_trees["proposed-updates"]="""
-tree "dists/proposed-updates"
+tree "dists/oldstable/non-free"
{
- 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.squeeze.$(SECTION)";
- ExtraOverride "override.squeeze.extra.$(SECTION)";
- SrcOverride "override.squeeze.$(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";
+ 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)";
SrcOverride "override.squeeze.main.src";
BinCacheDB "packages-debian-installer-$(ARCH).db";
Packages::Extensions ".udeb";
- Contents " ";
+ %(contentsline)s
};
"""
+
cnf = Config()
try:
# Write apt.conf
# 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:
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()
('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()
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()