X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=apt_dht%2FAptPackages.py;h=a2e743e60fde74f07c9c9bed7d6132b6e66f9d4a;hb=a8b3c6aa78dbd0e19273ea11c2b27a2085e6c663;hp=8ebcf918b0e3dcef43c1232a788c3f84941daca5;hpb=0e7833ee84550e1a07f5c77d1a70bbd4a7aa6459;p=quix0rs-apt-p2p.git diff --git a/apt_dht/AptPackages.py b/apt_dht/AptPackages.py index 8ebcf91..a2e743e 100644 --- a/apt_dht/AptPackages.py +++ b/apt_dht/AptPackages.py @@ -17,6 +17,8 @@ from apt import OpProgress apt_pkg.init() +TRACKED_FILES = ['release', 'sources', 'packages'] + class PackageFileList(DictMixin): """Manages a list of package files belonging to a backend. @@ -48,7 +50,7 @@ class PackageFileList(DictMixin): fake lists and sources.list. """ filename = cache_path.split('/')[-1] - if filename=="Packages" or filename=="Release" or filename=="Sources": + if filename.lower() in TRACKED_FILES: log.msg("Registering package file: "+cache_path) self.packages[cache_path] = file_path return True @@ -208,6 +210,7 @@ class AptPackages: self.apt_config['Dir::Etc::sourcelist']) sources = open(sources_filename, 'w') sources_count = 0 + deb_src_added = False self.packages.check_files() self.indexrecords = {} for f in self.packages: @@ -219,6 +222,7 @@ class AptPackages: fake_uri='http://apt-dht'+f fake_dirname = '/'.join(fake_uri.split('/')[:-1]) if f.endswith('Sources'): + deb_src_added = True source_line='deb-src '+fake_dirname+'/ /' else: source_line='deb '+fake_dirname+'/ /' @@ -247,7 +251,10 @@ class AptPackages: self.cache = apt_pkg.GetCache(OpProgress()) self.records = apt_pkg.GetPkgRecords(self.cache) - self.srcrecords = apt_pkg.GetPkgSrcRecords() + if deb_src_added: + self.srcrecords = apt_pkg.GetPkgSrcRecords() + else: + self.srcrecords = None self.loaded = 1 return True @@ -275,9 +282,16 @@ class AptPackages: deferLoad = self.load() deferLoad.addCallback(self._findHash, path, d) + deferLoad.addErrback(self._findHash_error, path, d) return d + def _findHash_error(self, failure, path, d): + """An error occurred while trying to find a hash.""" + log.msg('An error occurred while looking up a hash for: %s' % path) + log.err(failure) + d.callback((None, None)) + def _findHash(self, loadResult, path, d): """Really find the hash for a path. @@ -311,12 +325,13 @@ class AptPackages: pass # Check the source packages' files - self.srcrecords.Restart() - if self.srcrecords.Lookup(package): - for f in self.srcrecords.Files: - if path == '/' + f[2]: - d.callback((f[0], f[1])) - return loadResult + if self.srcrecords: + self.srcrecords.Restart() + if self.srcrecords.Lookup(package): + for f in self.srcrecords.Files: + if path == '/' + f[2]: + d.callback((f[0], f[1])) + return loadResult d.callback((None, None)) return loadResult