diff options
76 files changed, 1900 insertions, 1796 deletions
@@ -1,9 +1,9 @@ * apt.Package: - change all candidateInstalledSize() to installSize(useCandidate=True) - same for candidateOrigin() (see downloadable for a example). + same for candidateOrigin() (see downloadable for a example). - might be better to have "Package.candidate.{downloadable,size,etc} - + * aptsources: - make the distro detection in sources.list more clever by using the origin informaton to avoid adding full uris to (unofficial/internal) - mirrors + mirrors diff --git a/apt/__init__.py b/apt/__init__.py index c6a2ff39..05407aff 100644 --- a/apt/__init__.py +++ b/apt/__init__.py @@ -6,7 +6,8 @@ import os # import some fancy classes from apt.package import Package from apt.cache import Cache -from apt.progress import OpProgress, FetchProgress, InstallProgress, CdromProgress +from apt.progress import ( + OpProgress, FetchProgress, InstallProgress, CdromProgress) from apt.cdrom import Cdrom from apt_pkg import SizeToStr, TimeToStr, VersionCompare diff --git a/aptsources/__init__.py b/aptsources/__init__.py index ddec2bd9..c02341c2 100644 --- a/aptsources/__init__.py +++ b/aptsources/__init__.py @@ -1,4 +1,3 @@ - import apt_pkg # init the package system diff --git a/aptsources/distinfo.py b/aptsources/distinfo.py index 51a4361d..d23c79c5 100644 --- a/aptsources/distinfo.py +++ b/aptsources/distinfo.py @@ -32,11 +32,14 @@ import apt_pkg #from gettext import gettext as _ import gettext -def _(s): return gettext.dgettext("python-apt", s) -import re + +def _(s): + return gettext.dgettext("python-apt", s) + class Template: + def __init__(self): self.name = None self.child = False @@ -64,11 +67,14 @@ class Template: else: return False + class Component: + def __init__(self, name, desc=None, long_desc=None): self.name = name self.description = desc self.description_long = long_desc + def get_description(self): if self.description_long != None: return self.description_long @@ -76,24 +82,32 @@ class Component: return self.description else: return None + def set_description(self, desc): self.description = desc + def set_description_long(self, desc): self.description_long = desc + def get_description_long(self): return self.description_long + class Mirror: ''' Storage for mirror related information ''' + def __init__(self, proto, hostname, dir, location=None): self.hostname = hostname self.repositories = [] self.add_repository(proto, dir) self.location = location + def add_repository(self, proto, dir): self.repositories.append(Repository(proto, dir)) + def get_repositories_for_proto(self, proto): return filter(lambda r: r.proto == proto, self.repositories) + def has_repository(self, proto, dir): if dir is None: return False @@ -101,28 +115,38 @@ class Mirror: if r.proto == proto and dir in r.dir: return True return False + def get_repo_urls(self): return map(lambda r: r.get_url(self.hostname), self.repositories) + def get_location(self): return self.location + def set_location(self, location): self.location = location + class Repository: + def __init__(self, proto, dir): self.proto = proto self.dir = dir + def get_info(self): return self.proto, self.dir + def get_url(self, hostname): return "%s://%s/%s" % (self.proto, hostname, self.dir) + def split_url(url): ''' split a given URL into the protocoll, the hostname and the dir part ''' - return map(lambda a,b: a, re.split(":*\/+", url, maxsplit=2), - [None, None, None]) + return map(lambda a, b: a, re.split(":*\/+", url, maxsplit=2), + [None, None, None]) + class DistInfo: + def __init__(self, dist = None, base_dir = "/usr/share/python-apt/templates"): @@ -132,7 +156,9 @@ class DistInfo: location = None match_loc = re.compile(r"^#LOC:(.+)$") - match_mirror_line = re.compile(r"^(#LOC:.+)|(((http)|(ftp)|(rsync)|(file)|(https))://[A-Za-z0-9/\.:\-_@]+)$") + match_mirror_line = re.compile( + r"^(#LOC:.+)|(((http)|(ftp)|(rsync)|(file)|(https))://" + r"[A-Za-z0-9/\.:\-_@]+)$") #match_mirror_line = re.compile(r".+") if not dist: @@ -143,21 +169,20 @@ class DistInfo: self.dist = dist - map_mirror_sets = {} dist_fname = "%s/%s.info" % (base_dir, dist) - dist_file = open (dist_fname) + dist_file = open(dist_fname) if not dist_file: return template = None component = None for line in dist_file: - tokens = line.split (':', 1) - if len (tokens) < 2: + tokens = line.split(':', 1) + if len(tokens) < 2: continue - field = tokens[0].strip () - value = tokens[1].strip () + field = tokens[0].strip() + value = tokens[1].strip() if field == 'ChangelogURI': self.changelogs_uri = _(value) elif field == 'MetaReleaseURI': @@ -208,7 +233,8 @@ class DistInfo: if mirror_set.has_key(hostname): mirror_set[hostname].add_repository(proto, dir) else: - mirror_set[hostname] = Mirror(proto, hostname, dir, location) + mirror_set[hostname] = Mirror( + proto, hostname, dir, location) map_mirror_sets[value] = mirror_set template.mirror_set = map_mirror_sets[value] elif field == 'Description': @@ -247,7 +273,7 @@ class DistInfo: if __name__ == "__main__": - d = DistInfo ("Ubuntu", "/usr/share/python-apt/templates") + d = DistInfo("Ubuntu", "/usr/share/python-apt/templates") print d.changelogs_uri for template in d.templates: print "\nSuite: %s" % template.name diff --git a/aptsources/distro.py b/aptsources/distro.py index 5e65284d..4d6b7acf 100644 --- a/aptsources/distro.py +++ b/aptsources/distro.py @@ -28,393 +28,411 @@ import os import sys import gettext -def _(s): return gettext.dgettext("python-apt", s) + + +def _(s): + return gettext.dgettext("python-apt", s) class NoDistroTemplateException(Exception): - pass + pass + class Distribution: - def __init__(self, id, codename, description, release): - """ Container for distribution specific informations """ - # LSB information - self.id = id - self.codename = codename - self.description = description - self.release = release - - self.binary_type = "deb" - self.source_type = "deb-src" - - def get_sources(self, sourceslist): - """ - Find the corresponding template, main and child sources - for the distribution - """ - self.sourceslist = sourceslist - # corresponding sources - self.source_template = None - self.child_sources = [] - self.main_sources = [] - self.disabled_sources = [] - self.cdrom_sources = [] - self.download_comps = [] - self.enabled_comps = [] - self.cdrom_comps = [] - self.used_media = [] - self.get_source_code = False - self.source_code_sources = [] - - # location of the sources - self.default_server = "" - self.main_server = "" - self.nearest_server = "" - self.used_servers = [] - - # find the distro template - for template in self.sourceslist.matcher.templates: - if self.is_codename(template.name) and\ - template.distribution == self.id: - #print "yeah! found a template for %s" % self.description - #print template.description, template.base_uri, template.components - self.source_template = template - break - if self.source_template == None: - raise NoDistroTemplateException("Error: could not find a distribution" - " template") - - # find main and child sources - media = [] - comps = [] - cdrom_comps = [] - enabled_comps = [] - source_code = [] - for source in self.sourceslist.list: - if source.invalid == False and\ - self.is_codename(source.dist) and\ - source.template and\ - self.is_codename(source.template.name): - #print "yeah! found a distro repo: %s" % source.line - # cdroms need do be handled differently - if source.uri.startswith("cdrom:") and \ - source.disabled == False: - self.cdrom_sources.append(source) - cdrom_comps.extend(source.comps) - elif source.uri.startswith("cdrom:") and \ - source.disabled == True: - self.cdrom_sources.append(source) - elif source.type == self.binary_type and \ - source.disabled == False: - self.main_sources.append(source) - comps.extend(source.comps) - media.append(source.uri) - elif source.type == self.binary_type and \ - source.disabled == True: - self.disabled_sources.append(source) - elif source.type == self.source_type and source.disabled == False: - self.source_code_sources.append(source) - elif source.type == self.source_type and source.disabled == True: - self.disabled_sources.append(source) - if source.invalid == False and\ - source.template in self.source_template.children: - if source.disabled == False and source.type == self.binary_type: - self.child_sources.append(source) - elif source.disabled == False and source.type == self.source_type: - self.source_code_sources.append(source) - else: - self.disabled_sources.append(source) - self.download_comps = set(comps) - self.cdrom_comps = set(cdrom_comps) - enabled_comps.extend(comps) - enabled_comps.extend(cdrom_comps) - self.enabled_comps = set(enabled_comps) - self.used_media = set(media) + def __init__(self, id, codename, description, release): + """ Container for distribution specific informations """ + # LSB information + self.id = id + self.codename = codename + self.description = description + self.release = release - self.get_mirrors() + self.binary_type = "deb" + self.source_type = "deb-src" - def get_mirrors(self, mirror_template=None): - """ - Provide a set of mirrors where you can get the distribution from - """ - # the main server is stored in the template - self.main_server = self.source_template.base_uri + def get_sources(self, sourceslist): + """ + Find the corresponding template, main and child sources + for the distribution + """ - # other used servers - for medium in self.used_media: - if not medium.startswith("cdrom:"): - # seems to be a network source - self.used_servers.append(medium) + self.sourceslist = sourceslist + # corresponding sources + self.source_template = None + self.child_sources = [] + self.main_sources = [] + self.disabled_sources = [] + self.cdrom_sources = [] + self.download_comps = [] + self.enabled_comps = [] + self.cdrom_comps = [] + self.used_media = [] + self.get_source_code = False + self.source_code_sources = [] + + # location of the sources + self.default_server = "" + self.main_server = "" + self.nearest_server = "" + self.used_servers = [] + + # find the distro template + for template in self.sourceslist.matcher.templates: + if self.is_codename(template.name) and\ + template.distribution == self.id: + #print "yeah! found a template for %s" % self.description + #print template.description, template.base_uri, \ + # template.components + self.source_template = template + break + if self.source_template == None: + raise NoDistroTemplateException("Error: could not find a " + "distribution template") + + # find main and child sources + media = [] + comps = [] + cdrom_comps = [] + enabled_comps = [] + source_code = [] + for source in self.sourceslist.list: + if source.invalid == False and\ + self.is_codename(source.dist) and\ + source.template and\ + self.is_codename(source.template.name): + #print "yeah! found a distro repo: %s" % source.line + # cdroms need do be handled differently + if source.uri.startswith("cdrom:") and \ + source.disabled == False: + self.cdrom_sources.append(source) + cdrom_comps.extend(source.comps) + elif source.uri.startswith("cdrom:") and \ + source.disabled == True: + self.cdrom_sources.append(source) + elif source.type == self.binary_type and \ + source.disabled == False: + self.main_sources.append(source) + comps.extend(source.comps) + media.append(source.uri) + elif source.type == self.binary_type and \ + source.disabled == True: + self.disabled_sources.append(source) + elif source.type == self.source_type \ + and source.disabled == False: + self.source_code_sources.append(source) + elif source.type == self.source_type \ + and source.disabled == True: + self.disabled_sources.append(source) + if source.invalid == False and\ + source.template in self.source_template.children: + if source.disabled == False \ + and source.type == self.binary_type: + self.child_sources.append(source) + elif source.disabled == False \ + and source.type == self.source_type: + self.source_code_sources.append(source) + else: + self.disabled_sources.append(source) + self.download_comps = set(comps) + self.cdrom_comps = set(cdrom_comps) + enabled_comps.extend(comps) + enabled_comps.extend(cdrom_comps) + self.enabled_comps = set(enabled_comps) + self.used_media = set(media) + + self.get_mirrors() + + def get_mirrors(self, mirror_template=None): + """ + Provide a set of mirrors where you can get the distribution from + """ + # the main server is stored in the template + self.main_server = self.source_template.base_uri - if len(self.main_sources) == 0: - self.default_server = self.main_server - else: - self.default_server = self.main_sources[0].uri - - # get a list of country codes and real names - self.countries = {} - try: - f = open("/usr/share/iso-codes/iso_3166.tab", "r") - lines = f.readlines() - for line in lines: - parts = line.split("\t") - self.countries[parts[0].lower()] = parts[1].strip() - except: - print "could not open file '%s'" % file - else: - f.close() - - # try to guess the nearest mirror from the locale - self.country = None - self.country_code = None - locale = os.getenv("LANG", default="en_UK") - a = locale.find("_") - z = locale.find(".") - if z == -1: - z = len(locale) - country_code = locale[a+1:z].lower() - - if mirror_template: - self.nearest_server = mirror_template % country_code - - if self.countries.has_key(country_code): - self.country = self.countries[country_code] - self.country_code = country_code - - def _get_mirror_name(self, server): - ''' Try to get a human readable name for the main mirror of a country - Customize for different distributions ''' - country = None - i = server.find("://") - l = server.find(".archive.ubuntu.com") - if i != -1 and l != -1: - country = server[i+len("://"):l] - if self.countries.has_key(country): - # TRANSLATORS: %s is a country - return _("Server for %s") % \ - gettext.dgettext("iso_3166", - self.countries[country].rstrip()).rstrip() - else: - return("%s" % server.rstrip("/ ")) - - def get_server_list(self): - ''' Return a list of used and suggested servers ''' - def compare_mirrors(mir1, mir2): - '''Helper function that handles comaprision of mirror urls - that could contain trailing slashes''' - return re.match(mir1.strip("/ "), mir2.rstrip("/ ")) - - # Store all available servers: - # Name, URI, active - mirrors = [] - if len(self.used_servers) < 1 or \ - (len(self.used_servers) == 1 and \ - compare_mirrors(self.used_servers[0], self.main_server)): - mirrors.append([_("Main server"), self.main_server, True]) - mirrors.append([self._get_mirror_name(self.nearest_server), - self.nearest_server, False]) - elif len(self.used_servers) == 1 and not \ - compare_mirrors(self.used_servers[0], self.main_server): - mirrors.append([_("Main server"), self.main_server, False]) - # Only one server is used - server = self.used_servers[0] - - # Append the nearest server if it's not already used - if not compare_mirrors(server, self.nearest_server): + # other used servers + for medium in self.used_media: + if not medium.startswith("cdrom:"): + # seems to be a network source + self.used_servers.append(medium) + + if len(self.main_sources) == 0: + self.default_server = self.main_server + else: + self.default_server = self.main_sources[0].uri + + # get a list of country codes and real names + self.countries = {} + try: + f = open("/usr/share/iso-codes/iso_3166.tab", "r") + lines = f.readlines() + for line in lines: + parts = line.split("\t") + self.countries[parts[0].lower()] = parts[1].strip() + except: + print "could not open file '%s'" % file + else: + f.close() + + # try to guess the nearest mirror from the locale + self.country = None + self.country_code = None + locale = os.getenv("LANG", default="en_UK") + a = locale.find("_") + z = locale.find(".") + if z == -1: + z = len(locale) + country_code = locale[a+1:z].lower() + + if mirror_template: + self.nearest_server = mirror_template % country_code + + if self.countries.has_key(country_code): + self.country = self.countries[country_code] + self.country_code = country_code + + def _get_mirror_name(self, server): + ''' Try to get a human readable name for the main mirror of a country + Customize for different distributions ''' + country = None + i = server.find("://") + l = server.find(".archive.ubuntu.com") + if i != -1 and l != -1: + country = server[i+len("://"):l] + if self.countries.has_key(country): + # TRANSLATORS: %s is a country + return _("Server for %s") % \ + gettext.dgettext("iso_3166", + self.countries[country].rstrip()).rstrip() + else: + return("%s" % server.rstrip("/ ")) + + def get_server_list(self): + ''' Return a list of used and suggested servers ''' + + def compare_mirrors(mir1, mir2): + ''' Helper function that handles comaprision of mirror urls + that could contain trailing slashes''' + return re.match(mir1.strip("/ "), mir2.rstrip("/ ")) + + # Store all available servers: + # Name, URI, active + mirrors = [] + if len(self.used_servers) < 1 or \ + (len(self.used_servers) == 1 and \ + compare_mirrors(self.used_servers[0], self.main_server)): + mirrors.append([_("Main server"), self.main_server, True]) mirrors.append([self._get_mirror_name(self.nearest_server), self.nearest_server, False]) - mirrors.append([self._get_mirror_name(server), server, True]) - - elif len(self.used_servers) > 1: - # More than one server is used. Since we don't handle this case - # in the user interface we set "custom servers" to true and - # append a list of all used servers - mirrors.append([_("Main server"), self.main_server, False]) - mirrors.append([self._get_mirror_name(self.nearest_server), - self.nearest_server, False]) - mirrors.append([_("Custom servers"), None, True]) - for server in self.used_servers: - if compare_mirrors(server, self.nearest_server) or\ - compare_mirrors(server, self.main_server): - continue - elif not [self._get_mirror_name(server), server, False] in mirrors: - mirrors.append([self._get_mirror_name(server), server, False]) - - return mirrors - - def add_source(self, type=None, + elif len(self.used_servers) == 1 and not \ + compare_mirrors(self.used_servers[0], self.main_server): + mirrors.append([_("Main server"), self.main_server, False]) + # Only one server is used + server = self.used_servers[0] + + # Append the nearest server if it's not already used + if not compare_mirrors(server, self.nearest_server): + mirrors.append([self._get_mirror_name(self.nearest_server), + self.nearest_server, False]) + mirrors.append([self._get_mirror_name(server), server, True]) + + elif len(self.used_servers) > 1: + # More than one server is used. Since we don't handle this case + # in the user interface we set "custom servers" to true and + # append a list of all used servers + mirrors.append([_("Main server"), self.main_server, False]) + mirrors.append([self._get_mirror_name(self.nearest_server), + self.nearest_server, False]) + mirrors.append([_("Custom servers"), None, True]) + for server in self.used_servers: + mirror_entry = [self._get_mirror_name(server), server, False] + if compare_mirrors(server, self.nearest_server) or\ + compare_mirrors(server, self.main_server): + continue + elif not mirror_entry in mirrors: + mirrors.append(mirror_entry) + + return mirrors + + def add_source(self, type=None, uri=None, dist=None, comps=None, comment=""): - """ - Add distribution specific sources - """ - if uri == None: - # FIXME: Add support for the server selector - uri = self.default_server - if dist == None: - dist = self.codename - if comps == None: - comps = list(self.enabled_comps) - if type == None: - type = self.binary_type - new_source = self.sourceslist.add(type, uri, dist, comps, comment) - # if source code is enabled add a deb-src line after the new - # source - if self.get_source_code == True and type == self.binary_type: - self.sourceslist.add(self.source_type, uri, dist, comps, comment, - file=new_source.file, - pos=self.sourceslist.list.index(new_source)+1) - - def enable_component(self, comp): - """ - Enable a component in all main, child and source code sources - (excluding cdrom based sources) - - comp: the component that should be enabled - """ - def add_component_only_once(source, comps_per_dist): """ - Check if we already added the component to the repository, since - a repository could be splitted into different apt lines. If not - add the component + Add distribution specific sources """ - # if we don't that distro, just reutnr (can happen for e.g. - # dapper-update only in deb-src - if not comps_per_dist.has_key(source.dist): - return - # if we have seen this component already for this distro, - # return (nothing to do - if comp in comps_per_dist[source.dist]: - return - # add it - source.comps.append(comp) - comps_per_dist[source.dist].add(comp) - - sources = [] - sources.extend(self.main_sources) - sources.extend(self.child_sources) - # store what comps are enabled already per distro (where distro is - # e.g. "dapper", "dapper-updates") - comps_per_dist = {} - comps_per_sdist = {} - for s in sources: - if s.type == self.binary_type: - if not comps_per_dist.has_key(s.dist): - comps_per_dist[s.dist] = set() - map(comps_per_dist[s.dist].add, s.comps) - for s in self.source_code_sources: - if s.type == self.source_type: - if not comps_per_sdist.has_key(s.dist): - comps_per_sdist[s.dist] = set() - map(comps_per_sdist[s.dist].add, s.comps) - - # check if there is a main source at all - if len(self.main_sources) < 1: - # create a new main source - self.add_source(comps=["%s"%comp]) - else: - # add the comp to all main, child and source code sources - for source in sources: - add_component_only_once(source, comps_per_dist) + if uri == None: + # FIXME: Add support for the server selector + uri = self.default_server + if dist == None: + dist = self.codename + if comps == None: + comps = list(self.enabled_comps) + if type == None: + type = self.binary_type + new_source = self.sourceslist.add(type, uri, dist, comps, comment) + # if source code is enabled add a deb-src line after the new + # source + if self.get_source_code == True and type == self.binary_type: + self.sourceslist.add(self.source_type, uri, dist, comps, comment, + file=new_source.file, + pos=self.sourceslist.list.index(new_source)+1) + + def enable_component(self, comp): + """ + Enable a component in all main, child and source code sources + (excluding cdrom based sources) - # check if there is a main source code source at all - if self.get_source_code == True: - if len(self.source_code_sources) < 1: - # create a new main source - self.add_source(type=self.source_type, comps=["%s"%comp]) - else: - # add the comp to all main, child and source code sources - for source in self.source_code_sources: - add_component_only_once(source, comps_per_sdist) + comp: the component that should be enabled + """ - def disable_component(self, comp): - """ - Disable a component in all main, child and source code sources - (excluding cdrom based sources) - """ - sources = [] - sources.extend(self.main_sources) - sources.extend(self.child_sources) - sources.extend(self.source_code_sources) - if comp in self.cdrom_comps: + def add_component_only_once(source, comps_per_dist): + """ + Check if we already added the component to the repository, since + a repository could be splitted into different apt lines. If not + add the component + """ + # if we don't that distro, just reutnr (can happen for e.g. + # dapper-update only in deb-src + if not comps_per_dist.has_key(source.dist): + return + # if we have seen this component already for this distro, + # return (nothing to do + if comp in comps_per_dist[source.dist]: + return + # add it + source.comps.append(comp) + comps_per_dist[source.dist].add(comp) + + sources = [] + sources.extend(self.main_sources) + sources.extend(self.child_sources) + # store what comps are enabled already per distro (where distro is + # e.g. "dapper", "dapper-updates") + comps_per_dist = {} + comps_per_sdist = {} + for s in sources: + if s.type == self.binary_type: + if not comps_per_dist.has_key(s.dist): + comps_per_dist[s.dist] = set() + map(comps_per_dist[s.dist].add, s.comps) + for s in self.source_code_sources: + if s.type == self.source_type: + if not comps_per_sdist.has_key(s.dist): + comps_per_sdist[s.dist] = set() + map(comps_per_sdist[s.dist].add, s.comps) + + # check if there is a main source at all + if len(self.main_sources) < 1: + # create a new main source + self.add_source(comps=["%s"%comp]) + else: + # add the comp to all main, child and source code sources + for source in sources: + add_component_only_once(source, comps_per_dist) + + # check if there is a main source code source at all + if self.get_source_code == True: + if len(self.source_code_sources) < 1: + # create a new main source + self.add_source(type=self.source_type, comps=["%s"%comp]) + else: + # add the comp to all main, child and source code sources + for source in self.source_code_sources: + add_component_only_once(source, comps_per_sdist) + + def disable_component(self, comp): + """ + Disable a component in all main, child and source code sources + (excluding cdrom based sources) + """ sources = [] sources.extend(self.main_sources) - for source in sources: - if comp in source.comps: - source.comps.remove(comp) - if len(source.comps) < 1: - self.sourceslist.remove(source) - - def change_server(self, uri): - ''' Change the server of all distro specific sources to - a given host ''' - def change_server_of_source(source, uri, seen): - # Avoid creating duplicate entries - source.uri = uri - for comp in source.comps: - if [source.uri, source.dist, comp] in seen: + sources.extend(self.child_sources) + sources.extend(self.source_code_sources) + if comp in self.cdrom_comps: + sources = [] + sources.extend(self.main_sources) + for source in sources: + if comp in source.comps: source.comps.remove(comp) - else: - seen.append([source.uri, source.dist, comp]) - if len(source.comps) < 1: - self.sourceslist.remove(source) - seen_binary = [] - seen_source = [] - self.default_server = uri - for source in self.main_sources: - change_server_of_source(source, uri, seen_binary) - for source in self.child_sources: - # Do not change the forces server of a child source - if source.template.base_uri == None or \ - source.template.base_uri != source.uri: + if len(source.comps) < 1: + self.sourceslist.remove(source) + + def change_server(self, uri): + ''' Change the server of all distro specific sources to + a given host ''' + + def change_server_of_source(source, uri, seen): + # Avoid creating duplicate entries + source.uri = uri + for comp in source.comps: + if [source.uri, source.dist, comp] in seen: + source.comps.remove(comp) + else: + seen.append([source.uri, source.dist, comp]) + if len(source.comps) < 1: + self.sourceslist.remove(source) + + seen_binary = [] + seen_source = [] + self.default_server = uri + for source in self.main_sources: change_server_of_source(source, uri, seen_binary) - for source in self.source_code_sources: - change_server_of_source(source, uri, seen_source) + for source in self.child_sources: + # Do not change the forces server of a child source + if source.template.base_uri == None or \ + source.template.base_uri != source.uri: + change_server_of_source(source, uri, seen_binary) + for source in self.source_code_sources: + change_server_of_source(source, uri, seen_source) + + def is_codename(self, name): + ''' Compare a given name with the release codename. ''' + if name == self.codename: + return True + else: + return False - def is_codename(self, name): - ''' Compare a given name with the release codename. ''' - if name == self.codename: - return True - else: - return False class DebianDistribution(Distribution): - ''' Class to support specific Debian features ''' + ''' Class to support specific Debian features ''' + + def is_codename(self, name): + ''' Compare a given name with the release codename and check if + if it can be used as a synonym for a development releases ''' + if name == self.codename or self.release in ("testing", "unstable"): + return True + else: + return False + + def _get_mirror_name(self, server): + ''' Try to get a human readable name for the main mirror of a country + Debian specific ''' + country = None + i = server.find("://ftp.") + l = server.find(".debian.org") + if i != -1 and l != -1: + country = server[i+len("://ftp."):l] + if self.countries.has_key(country): + # TRANSLATORS: %s is a country + return _("Server for %s") % gettext.dgettext( + "iso_3166", self.countries[country].rstrip()).rstrip() + else: + return("%s" % server.rstrip("/ ")) + + def get_mirrors(self): + Distribution.get_mirrors( + self, mirror_template="http://ftp.%s.debian.org/debian/") - def is_codename(self, name): - ''' Compare a given name with the release codename and check if - if it can be used as a synonym for a development releases ''' - if name == self.codename or self.release in ("testing", "unstable"): - return True - else: - return False - - def _get_mirror_name(self, server): - ''' Try to get a human readable name for the main mirror of a country - Debian specific ''' - country = None - i = server.find("://ftp.") - l = server.find(".debian.org") - if i != -1 and l != -1: - country = server[i+len("://ftp."):l] - if self.countries.has_key(country): - # TRANSLATORS: %s is a country - return _("Server for %s") % \ - gettext.dgettext("iso_3166", - self.countries[country].rstrip()).rstrip() - else: - return("%s" % server.rstrip("/ ")) - - def get_mirrors(self): - Distribution.get_mirrors(self, - mirror_template="http://ftp.%s.debian.org/debian/") class UbuntuDistribution(Distribution): - ''' Class to support specific Ubuntu features ''' - def get_mirrors(self): - Distribution.get_mirrors(self, - mirror_template="http://%s.archive.ubuntu.com/ubuntu/") + ''' Class to support specific Ubuntu features ''' -def get_distro(id=None,codename=None,description=None,release=None): + def get_mirrors(self): + Distribution.get_mirrors( + self, mirror_template="http://%s.archive.ubuntu.com/ubuntu/") + + +def get_distro(id=None, codename=None, description=None, release=None): """ Check the currently used distribution and return the corresponding distriubtion class that supports distro specific features. @@ -424,17 +442,15 @@ def get_distro(id=None,codename=None,description=None,release=None): """ # make testing easier if not (id and codename and description and release): - lsb_info = [] - for lsb_option in ["-i", "-c", "-d", "-r"]: - pipe = os.popen("lsb_release %s -s" % lsb_option) - lsb_info.append(pipe.read().strip()) - del pipe - (id, codename, description, release) = lsb_info + lsb_info = [] + for lsb_option in ["-i", "-c", "-d", "-r"]: + pipe = os.popen("lsb_release %s -s" % lsb_option) + lsb_info.append(pipe.read().strip()) + del pipe + (id, codename, description, release) = lsb_info if id == "Ubuntu": - return UbuntuDistribution(id, codename, description, - release) + return UbuntuDistribution(id, codename, description, release) elif id == "Debian": return DebianDistribution(id, codename, description, release) else: return Distribution(id, codename, description, release) - diff --git a/aptsources/sourceslist.py b/aptsources/sourceslist.py index 4067920a..be17cd1f 100644 --- a/aptsources/sourceslist.py +++ b/aptsources/sourceslist.py @@ -36,403 +36,420 @@ import sys #from UpdateManager.Common.DistInfo import DistInfo from distinfo import DistInfo + # some global helpers + + def is_mirror(master_uri, compare_uri): - """check if the given add_url is idential or a mirror of orig_uri - e.g. master_uri = archive.ubuntu.com - compare_uri = de.archive.ubuntu.com - -> True - """ - # remove traling spaces and "/" - compare_uri = compare_uri.rstrip("/ ") - master_uri = master_uri.rstrip("/ ") - # uri is identical - if compare_uri == master_uri: - #print "Identical" - return True - # add uri is a master site and orig_uri has the from "XX.mastersite" - # (e.g. de.archive.ubuntu.com) - try: - compare_srv = compare_uri.split("//")[1] - master_srv = master_uri.split("//")[1] - #print "%s == %s " % (add_srv, orig_srv) - except IndexError: # ok, somethings wrong here - #print "IndexError" + """ check if the given add_url is idential or a mirror of orig_uri + e.g. master_uri = archive.ubuntu.com + compare_uri = de.archive.ubuntu.com + -> True + """ + # remove traling spaces and "/" + compare_uri = compare_uri.rstrip("/ ") + master_uri = master_uri.rstrip("/ ") + # uri is identical + if compare_uri == master_uri: + #print "Identical" + return True + # add uri is a master site and orig_uri has the from "XX.mastersite" + # (e.g. de.archive.ubuntu.com) + try: + compare_srv = compare_uri.split("//")[1] + master_srv = master_uri.split("//")[1] + #print "%s == %s " % (add_srv, orig_srv) + except IndexError: # ok, somethings wrong here + #print "IndexError" + return False + # remove the leading "<country>." (if any) and see if that helps + if "." in compare_srv and \ + compare_srv[compare_srv.index(".")+1:] == master_srv: + #print "Mirror" + return True return False - # remove the leading "<country>." (if any) and see if that helps - if "." in compare_srv and \ - compare_srv[compare_srv.index(".")+1:] == master_srv: - #print "Mirror" - return True - return False + def uniq(s): - """ simple and efficient way to return uniq list """ - return list(set(s)) + """ simple and efficient way to return uniq list """ + return list(set(s)) + class SourceEntry: - """ single sources.list entry """ - def __init__(self, line,file=None): - self.invalid = False # is the source entry valid - self.disabled = False # is it disabled ('#' in front) - self.type = "" # what type (deb, deb-src) - self.uri = "" # base-uri - self.dist = "" # distribution (dapper, edgy, etc) - self.comps = [] # list of available componetns (may empty) - self.comment = "" # (optional) comment - self.line = line # the original sources.list line - if file == None: - file = apt_pkg.Config.FindDir("Dir::Etc")+apt_pkg.Config.Find("Dir::Etc::sourcelist") - self.file = file # the file that the entry is located in - self.parse(line) - self.template = None # type DistInfo.Suite - self.children = [] - - def __eq__(self, other): - """ equal operator for two sources.list entries """ - return (self.disabled == other.disabled and - self.type == other.type and - self.uri == other.uri and - self.dist == other.dist and - self.comps == other.comps) - - - def mysplit(self, line): - """ a split() implementation that understands the sources.list - format better and takes [] into account (for e.g. cdroms) """ - line = string.strip(line) - pieces = [] - tmp = "" - # we are inside a [..] block - p_found = False - space_found = False - for i in range(len(line)): - if line[i] == "[": - p_found=True - tmp += line[i] - elif line[i] == "]": - p_found=False - tmp += line[i] - elif space_found and not line[i].isspace(): # we skip one or more space + """ single sources.list entry """ + + def __init__(self, line, file=None): + self.invalid = False # is the source entry valid + self.disabled = False # is it disabled ('#' in front) + self.type = "" # what type (deb, deb-src) + self.uri = "" # base-uri + self.dist = "" # distribution (dapper, edgy, etc) + self.comps = [] # list of available componetns + # (may empty) + self.comment = "" # (optional) comment + self.line = line # the original sources.list line + if file == None: + file = apt_pkg.Config.FindDir( + "Dir::Etc")+apt_pkg.Config.Find("Dir::Etc::sourcelist") + self.file = file # the file that the entry is located in + self.parse(line) + self.template = None # type DistInfo.Suite + self.children = [] + + def __eq__(self, other): + """ equal operator for two sources.list entries """ + return (self.disabled == other.disabled and + self.type == other.type and + self.uri == other.uri and + self.dist == other.dist and + self.comps == other.comps) + + def mysplit(self, line): + """ a split() implementation that understands the sources.list + format better and takes [] into account (for e.g. cdroms) """ + line = string.strip(line) + pieces = [] + tmp = "" + # we are inside a [..] block + p_found = False space_found = False - pieces.append(tmp) - tmp = line[i] - elif line[i].isspace() and not p_found: # found a whitespace - space_found = True - else: - tmp += line[i] - # append last piece - if len(tmp) > 0: - pieces.append(tmp) - return pieces - - def parse(self,line): - """ parse a given sources.list (textual) line and break it up - into the field we have """ - line = string.strip(self.line) - #print line - # check if the source is enabled/disabled - if line == "" or line == "#": # empty line - self.invalid = True - return - if line[0] == "#": - self.disabled = True - pieces = string.split(line[1:]) - # if it looks not like a disabled deb line return - if not pieces[0] in ("rpm", "rpm-src", "deb", "deb-src"): - self.invalid = True - return - else: - line = line[1:] - # check for another "#" in the line (this is treated as a comment) - i = line.find("#") - if i > 0: - self.comment = line[i+1:] - line = line[:i] - # source is ok, split it and see what we have - pieces = self.mysplit(line) - # Sanity check - if len(pieces) < 3: - self.invalid = True - return - # Type, deb or deb-src - self.type = string.strip(pieces[0]) - # Sanity check - if self.type not in ("deb", "deb-src", "rpm", "rpm-src"): - self.invalid = True - return - # URI - self.uri = string.strip(pieces[1]) - if len(self.uri) < 1: - self.invalid = True - # distro and components (optional) - # Directory or distro - self.dist = string.strip(pieces[2]) - if len(pieces) > 3: - # List of components - self.comps = pieces[3:] - else: - self.comps = [] - - def set_enabled(self, new_value): - """ set a line to enabled or disabled """ - self.disabled = not new_value - # enable, remove all "#" from the start of the line - if new_value == True: - i=0 - self.line = string.lstrip(self.line) - while self.line[i] == "#": - i += 1 - self.line = self.line[i:] - else: - # disabled, add a "#" - if string.strip(self.line)[0] != "#": - self.line = "#" + self.line - - def __str__(self): - """ debug helper """ - return self.str().strip() - - def str(self): - """ return the current line as string """ - if self.invalid: - return self.line - line = "" - if self.disabled: - line = "# " - line += "%s %s %s" % (self.type, self.uri, self.dist) - if len(self.comps) > 0: - line += " " + " ".join(self.comps) - if self.comment != "": - line += " #"+self.comment - line += "\n" - return line + for i in range(len(line)): + if line[i] == "[": + p_found=True + tmp += line[i] + elif line[i] == "]": + p_found=False + tmp += line[i] + elif space_found and not line[i].isspace(): + # we skip one or more space + space_found = False + pieces.append(tmp) + tmp = line[i] + elif line[i].isspace() and not p_found: + # found a whitespace + space_found = True + else: + tmp += line[i] + # append last piece + if len(tmp) > 0: + pieces.append(tmp) + return pieces + + def parse(self, line): + """ parse a given sources.list (textual) line and break it up + into the field we have """ + line = string.strip(self.line) + #print line + # check if the source is enabled/disabled + if line == "" or line == "#": # empty line + self.invalid = True + return + if line[0] == "#": + self.disabled = True + pieces = string.split(line[1:]) + # if it looks not like a disabled deb line return + if not pieces[0] in ("rpm", "rpm-src", "deb", "deb-src"): + self.invalid = True + return + else: + line = line[1:] + # check for another "#" in the line (this is treated as a comment) + i = line.find("#") + if i > 0: + self.comment = line[i+1:] + line = line[:i] + # source is ok, split it and see what we have + pieces = self.mysplit(line) + # Sanity check + if len(pieces) < 3: + self.invalid = True + return + # Type, deb or deb-src + self.type = string.strip(pieces[0]) + # Sanity check + if self.type not in ("deb", "deb-src", "rpm", "rpm-src"): + self.invalid = True + return + # URI + self.uri = string.strip(pieces[1]) + if len(self.uri) < 1: + self.invalid = True + # distro and components (optional) + # Directory or distro + self.dist = string.strip(pieces[2]) + if len(pieces) > 3: + # List of components + self.comps = pieces[3:] + else: + self.comps = [] + + def set_enabled(self, new_value): + """ set a line to enabled or disabled """ + self.disabled = not new_value + # enable, remove all "#" from the start of the line + if new_value == True: + i=0 + self.line = string.lstrip(self.line) + while self.line[i] == "#": + i += 1 + self.line = self.line[i:] + else: + # disabled, add a "#" + if string.strip(self.line)[0] != "#": + self.line = "#" + self.line + + def __str__(self): + """ debug helper """ + return self.str().strip() + + def str(self): + """ return the current line as string """ + if self.invalid: + return self.line + line = "" + if self.disabled: + line = "# " + line += "%s %s %s" % (self.type, self.uri, self.dist) + if len(self.comps) > 0: + line += " " + " ".join(self.comps) + if self.comment != "": + line += " #"+self.comment + line += "\n" + return line + class NullMatcher(object): - """ a Matcher that does nothing """ - def match(self, s): - return True + """ a Matcher that does nothing """ + + def match(self, s): + return True + class SourcesList: - """ represents the full sources.list + sources.list.d file """ - def __init__(self, - withMatcher=True, - matcherPath="/usr/share/python-apt/templates/"): - self.list = [] # the actual SourceEntries Type - if withMatcher: - self.matcher = SourceEntryMatcher(matcherPath) - else: - self.matcher = NullMatcher() - self.refresh() - - def refresh(self): - """ update the list of known entries """ - self.list = [] - # read sources.list - dir = apt_pkg.Config.FindDir("Dir::Etc") - file = apt_pkg.Config.Find("Dir::Etc::sourcelist") - self.load(dir+file) - # read sources.list.d - partsdir = apt_pkg.Config.FindDir("Dir::Etc::sourceparts") - for file in glob.glob("%s/*.list" % partsdir): - self.load(file) - # check if the source item fits a predefined template - for source in self.list: - if source.invalid == False: - self.matcher.match(source) - - def __iter__(self): - """ simple iterator to go over self.list, returns SourceEntry - types """ - for entry in self.list: - yield entry - raise StopIteration - - def add(self, type, uri, dist, orig_comps, comment="", pos=-1, file=None): - """ - Add a new source to the sources.list. - The method will search for existing matching repos and will try to - reuse them as far as possible - """ - # create a working copy of the component list so that - # we can modify it later - comps = orig_comps[:] - # check if we have this source already in the sources.list - for source in self.list: - if source.disabled == False and source.invalid == False and \ - source.type == type and uri == source.uri and \ - source.dist == dist: - for new_comp in comps: - if new_comp in source.comps: - # we have this component already, delete it from the new_comps - # list - del comps[comps.index(new_comp)] - if len(comps) == 0: - return source - for source in self.list: - # if there is a repo with the same (type, uri, dist) just add the - # components - if source.disabled == False and source.invalid == False and \ - source.type == type and uri == source.uri and \ - source.dist == dist: - comps = uniq(source.comps + comps) - source.comps = comps - return source - # if there is a corresponding repo which is disabled, enable it - elif source.disabled == True and source.invalid == False and \ - source.type == type and uri == source.uri and \ - source.dist == dist and \ - len(set(source.comps) & set(comps)) == len(comps): - source.disabled = False - return source - # there isn't any matching source, so create a new line and parse it - line = "%s %s %s" % (type,uri,dist) - for c in comps: - line = line + " " + c; - if comment != "": - line = "%s #%s\n" %(line,comment) - line = line + "\n" - new_entry = SourceEntry(line) - if file != None: - new_entry.file = file - self.matcher.match(new_entry) - self.list.insert(pos, new_entry) - return new_entry - - def remove(self, source_entry): - """ remove the specified entry from the sources.list """ - self.list.remove(source_entry) - - def restoreBackup(self, backup_ext): - " restore sources.list files based on the backup extension " - dir = apt_pkg.Config.FindDir("Dir::Etc") - file = apt_pkg.Config.Find("Dir::Etc::sourcelist") - if os.path.exists(dir+file+backup_ext) and \ - os.path.exists(dir+file): - shutil.copy(dir+file+backup_ext,dir+file) - # now sources.list.d - partsdir = apt_pkg.Config.FindDir("Dir::Etc::sourceparts") - for file in glob.glob("%s/*.list" % partsdir): - if os.path.exists(file+backup_ext): - shutil.copy(file+backup_ext,file) - - def backup(self, backup_ext=None): - """ make a backup of the current source files, if no backup extension - is given, the current date/time is used (and returned) """ - already_backuped = set() - if backup_ext == None: - backup_ext = time.strftime("%y%m%d.%H%M") - for source in self.list: - if not source.file in already_backuped and os.path.exists(source.file): - shutil.copy(source.file,"%s%s" % (source.file,backup_ext)) - return backup_ext - - def load(self,file): - """ (re)load the current sources """ - try: - f = open(file, "r") - lines = f.readlines() - for line in lines: - source = SourceEntry(line,file) - self.list.append(source) - except: - print "could not open file '%s'" % file - else: - f.close() - - def save(self): - """ save the current sources """ - files = {} - # write an empty default config file if there aren't any sources - if len(self.list) == 0: - path = "%s%s" % (apt_pkg.Config.FindDir("Dir::Etc"), - apt_pkg.Config.Find("Dir::Etc::sourcelist")) - header = ("## See sources.list(5) for more information, especialy\n" + """ represents the full sources.list + sources.list.d file """ + + def __init__(self, + withMatcher=True, + matcherPath="/usr/share/python-apt/templates/"): + self.list = [] # the actual SourceEntries Type + if withMatcher: + self.matcher = SourceEntryMatcher(matcherPath) + else: + self.matcher = NullMatcher() + self.refresh() + + def refresh(self): + """ update the list of known entries """ + self.list = [] + # read sources.list + dir = apt_pkg.Config.FindDir("Dir::Etc") + file = apt_pkg.Config.Find("Dir::Etc::sourcelist") + self.load(dir+file) + # read sources.list.d + partsdir = apt_pkg.Config.FindDir("Dir::Etc::sourceparts") + for file in glob.glob("%s/*.list" % partsdir): + self.load(file) + # check if the source item fits a predefined template + for source in self.list: + if source.invalid == False: + self.matcher.match(source) + + def __iter__(self): + """ simple iterator to go over self.list, returns SourceEntry + types """ + for entry in self.list: + yield entry + raise StopIteration + + def add(self, type, uri, dist, orig_comps, comment="", pos=-1, file=None): + """ + Add a new source to the sources.list. + The method will search for existing matching repos and will try to + reuse them as far as possible + """ + # create a working copy of the component list so that + # we can modify it later + comps = orig_comps[:] + # check if we have this source already in the sources.list + for source in self.list: + if source.disabled == False and source.invalid == False and \ + source.type == type and uri == source.uri and \ + source.dist == dist: + for new_comp in comps: + if new_comp in source.comps: + # we have this component already, delete it + # from the new_comps list + del comps[comps.index(new_comp)] + if len(comps) == 0: + return source + for source in self.list: + # if there is a repo with the same (type, uri, dist) just add the + # components + if source.disabled == False and source.invalid == False and \ + source.type == type and uri == source.uri and \ + source.dist == dist: + comps = uniq(source.comps + comps) + source.comps = comps + return source + # if there is a corresponding repo which is disabled, enable it + elif source.disabled == True and source.invalid == False and \ + source.type == type and uri == source.uri and \ + source.dist == dist and \ + len(set(source.comps) & set(comps)) == len(comps): + source.disabled = False + return source + # there isn't any matching source, so create a new line and parse it + line = "%s %s %s" % (type, uri, dist) + for c in comps: + line = line + " " + c + if comment != "": + line = "%s #%s\n" % (line, comment) + line = line + "\n" + new_entry = SourceEntry(line) + if file != None: + new_entry.file = file + self.matcher.match(new_entry) + self.list.insert(pos, new_entry) + return new_entry + + def remove(self, source_entry): + """ remove the specified entry from the sources.list """ + self.list.remove(source_entry) + + def restoreBackup(self, backup_ext): + " restore sources.list files based on the backup extension " + dir = apt_pkg.Config.FindDir("Dir::Etc") + file = apt_pkg.Config.Find("Dir::Etc::sourcelist") + if os.path.exists(dir+file+backup_ext) and \ + os.path.exists(dir+file): + shutil.copy(dir+file+backup_ext, dir+file) + # now sources.list.d + partsdir = apt_pkg.Config.FindDir("Dir::Etc::sourceparts") + for file in glob.glob("%s/*.list" % partsdir): + if os.path.exists(file+backup_ext): + shutil.copy(file+backup_ext, file) + + def backup(self, backup_ext=None): + """ make a backup of the current source files, if no backup extension + is given, the current date/time is used (and returned) """ + already_backuped = set() + if backup_ext == None: + backup_ext = time.strftime("%y%m%d.%H%M") + for source in self.list: + if not source.file in already_backuped \ + and os.path.exists(source.file): + shutil.copy(source.file, "%s%s" % (source.file, backup_ext)) + return backup_ext + + def load(self, file): + """ (re)load the current sources """ + try: + f = open(file, "r") + lines = f.readlines() + for line in lines: + source = SourceEntry(line, file) + self.list.append(source) + except: + print "could not open file '%s'" % file + else: + f.close() + + def save(self): + """ save the current sources """ + files = {} + # write an empty default config file if there aren't any sources + if len(self.list) == 0: + path = "%s%s" % (apt_pkg.Config.FindDir("Dir::Etc"), + apt_pkg.Config.Find("Dir::Etc::sourcelist")) + header = ( + "## See sources.list(5) for more information, especialy\n" "# Remember that you can only use http, ftp or file URIs\n" "# CDROMs are managed through the apt-cdrom tool.\n") - open(path,"w").write(header) - return - for source in self.list: - if not files.has_key(source.file): - files[source.file]=open(source.file,"w") - files[source.file].write(source.str()) - for f in files: - files[f].close() - - def check_for_relations(self, sources_list): - """get all parent and child channels in the sources list""" - parents = [] - used_child_templates = {} - for source in sources_list: - # try to avoid checking uninterressting sources - if source.template == None: - continue - # set up a dict with all used child templates and corresponding - # source entries - if source.template.child == True: - key = source.template - if not used_child_templates.has_key(key): - used_child_templates[key] = [] - temp = used_child_templates[key] - temp.append(source) - else: - # store each source with children aka. a parent :) - if len(source.template.children) > 0: - parents.append(source) - #print self.used_child_templates - #print self.parents - return (parents, used_child_templates) - -# matcher class to make a source entry look nice -# lots of predefined matchers to make it i18n/gettext friendly + open(path, "w").write(header) + return + for source in self.list: + if not files.has_key(source.file): + files[source.file] = open(source.file, "w") + files[source.file].write(source.str()) + for f in files: + files[f].close() + + def check_for_relations(self, sources_list): + """get all parent and child channels in the sources list""" + parents = [] + used_child_templates = {} + for source in sources_list: + # try to avoid checking uninterressting sources + if source.template == None: + continue + # set up a dict with all used child templates and corresponding + # source entries + if source.template.child == True: + key = source.template + if not used_child_templates.has_key(key): + used_child_templates[key] = [] + temp = used_child_templates[key] + temp.append(source) + else: + # store each source with children aka. a parent :) + if len(source.template.children) > 0: + parents.append(source) + #print self.used_child_templates + #print self.parents + return (parents, used_child_templates) + + class SourceEntryMatcher: - def __init__(self, matcherPath): - self.templates = [] - # Get the human readable channel and comp names from the channel .infos - spec_files = glob.glob("%s/*.info" % matcherPath) - for f in spec_files: - f = os.path.basename(f) - i = f.find(".info") - f = f[0:i] - dist = DistInfo(f,base_dir=matcherPath) - for template in dist.templates: - if template.match_uri != None: - self.templates.append(template) - return - - def match(self, source): - """Add a matching template to the source""" - _ = gettext.gettext - found = False - for template in self.templates: - if (re.search(template.match_uri, source.uri) and - re.match(template.match_name, source.dist)): - found = True - source.template = template - break - elif (template.is_mirror(source.uri) and - re.match(template.match_name, source.dist)): - found = True - source.template = template - break - return found + """ matcher class to make a source entry look nice + lots of predefined matchers to make it i18n/gettext friendly + """ + + def __init__(self, matcherPath): + self.templates = [] + # Get the human readable channel and comp names from the channel .infos + spec_files = glob.glob("%s/*.info" % matcherPath) + for f in spec_files: + f = os.path.basename(f) + i = f.find(".info") + f = f[0:i] + dist = DistInfo(f, base_dir=matcherPath) + for template in dist.templates: + if template.match_uri != None: + self.templates.append(template) + return + + def match(self, source): + """Add a matching template to the source""" + _ = gettext.gettext + found = False + for template in self.templates: + if (re.search(template.match_uri, source.uri) and + re.match(template.match_name, source.dist)): + found = True + source.template = template + break + elif (template.is_mirror(source.uri) and + re.match(template.match_name, source.dist)): + found = True + source.template = template + break + return found # some simple tests if __name__ == "__main__": - apt_pkg.InitConfig() - sources = SourcesList() - - for entry in sources: - print entry.str() - #print entry.uri + apt_pkg.InitConfig() + sources = SourcesList() - mirror = is_mirror("http://archive.ubuntu.com/ubuntu/", - "http://de.archive.ubuntu.com/ubuntu/") - print "is_mirror(): %s" % mirror + for entry in sources: + print entry.str() + #print entry.uri - print is_mirror("http://archive.ubuntu.com/ubuntu", - "http://de.archive.ubuntu.com/ubuntu/") - print is_mirror("http://archive.ubuntu.com/ubuntu/", - "http://de.archive.ubuntu.com/ubuntu") + mirror = is_mirror("http://archive.ubuntu.com/ubuntu/", + "http://de.archive.ubuntu.com/ubuntu/") + print "is_mirror(): %s" % mirror + print is_mirror("http://archive.ubuntu.com/ubuntu", + "http://de.archive.ubuntu.com/ubuntu/") + print is_mirror("http://archive.ubuntu.com/ubuntu/", + "http://de.archive.ubuntu.com/ubuntu") diff --git a/configure.in b/configure.in index e62985c2..1000f38c 100644 --- a/configure.in +++ b/configure.in @@ -21,7 +21,7 @@ EOF [AC_CHECK_LIB(python$ac_cv_ver_python,PyArg_ParseTuple, [AC_DEFINE(HAVE_PYTHONLIB) PYTHONLIB="-lpython$ac_cv_ver_python $ac_cv_libs_python"],[],$ac_cv_libs_python)]) AC_SUBST(PYTHONLIB) - + PYTHONVER=$ac_cv_ver_python PYTHONPREFIX=$ac_cv_prefix_python PYTHONEXECPREFIX=$ac_cv_execprefix_python diff --git a/data/templates/Debian.info.in b/data/templates/Debian.info.in index dd040c20..5f4486d5 100644 --- a/data/templates/Debian.info.in +++ b/data/templates/Debian.info.in @@ -30,7 +30,7 @@ RepositoryType: deb BaseURI: http://http.us.debian.org/debian/ MatchURI: ftp[0-9]*\.[a-z]\.debian\.org MirrorsFile: /usr/share/python-apt/templates/Debian.mirrors -_Description: Debian 4.0 'Etch' +_Description: Debian 4.0 'Etch' Component: main _CompDescription: Officially supported Component: contrib diff --git a/data/templates/Ubuntu.info.in b/data/templates/Ubuntu.info.in index 67180bcb..0adb8e67 100644 --- a/data/templates/Ubuntu.info.in +++ b/data/templates/Ubuntu.info.in @@ -354,7 +354,7 @@ _CompDescription: Community-maintained (universe) _CompDescriptionLong: Community-maintained Open Source software Component: restricted _CompDescription: Non-free drivers -_CompDescriptionLong: Proprietary drivers for devices +_CompDescriptionLong: Proprietary drivers for devices Component: multiverse _CompDescription: Restricted software (Multiverse) _CompDescriptionLong: Software restricted by copyright or legal issues diff --git a/debian/changelog b/debian/changelog index cd67e51a..a44550d5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -27,8 +27,9 @@ python-apt (0.7.9~exp2) experimental; urgency=low - Build-Depend on python-sphinx (>= 0.5) * aptsources/distinfo.py: - Allow @ in mirror urls (Closes: #478171) (LP: #223097) + * Merge Ben Finney's whitespace changes (Closes: #481563) - -- Julian Andres Klode <jak@debian.org> Sat, 10 Jan 2009 00:30:19 +0100 + -- Julian Andres Klode <jak@debian.org> Sun, 11 Jan 2009 19:25:55 +0100 python-apt (0.7.9~exp1) experimental; urgency=low @@ -187,7 +188,7 @@ python-apt (0.7.4) unstable; urgency=low * apt/debfile.py: - added wrapper around apt_inst.debExtract() - - support dictionary like access + - support dictionary like access * apt/package.py: - fix apt.package.Dependency.relation initialization * python/apt_instmodule.cc: @@ -206,7 +207,7 @@ python-apt (0.7.4) unstable; urgency=low * python/depcache.cc: - be more threading friendly * python/tag.cc - - support "None" as default in + - support "None" as default in ParseSection(control).get(field, default), LP: #44470 * python/progress.cc: - fix refcount problem in OpProgress @@ -238,7 +239,7 @@ python-apt (0.7.3) unstable; urgency=low * doc/examples/records.py: - added example how to use the new Records class * apt/cache.py: - - throw FetchCancelleException, FetchFailedException, + - throw FetchCancelleException, FetchFailedException, LockFailedException exceptions when something goes wrong * aptsources/distro.py: - generalized some code, bringing it into the Distribution @@ -257,7 +258,7 @@ python-apt (0.7.2) unstable; urgency=low * build against the new apt * support for new "aptsources" pythn module - (thanks to Sebastian Heinlein) + (thanks to Sebastian Heinlein) * merged support for translated package descriptions * merged support for automatic removal of unused dependencies @@ -292,7 +293,7 @@ python-apt (0.6.21) unstable; urgency=low - better cdrom handling support * apt/package.py: - added candidateDependencies, installedDependencies - - SizeToString supports PyLong too + - SizeToString supports PyLong too - support pkg.architecture - support candidateRecord, installedRecord * apt/cache.py: @@ -322,7 +323,7 @@ python-apt (0.6.20) unstable; urgency=low - use select() when checking for statusfd (lp: #53282) * acknoledge NMU (closes: #378048, #373512) * python/apt_pkgmodule.cc: - - fix missing docstring (closes: #368907), + - fix missing docstring (closes: #368907), Thanks to Josh Triplett * make it build against python2.5 * python/progress.cc: @@ -374,40 +375,40 @@ python-apt (0.6.18) unstable; urgency=low python-apt (0.6.17) unstable; urgency=low - * apt/progress.py: + * apt/progress.py: - initialize FetchProgress.eta with the correct type - strip the staus str before passing it to InstallProgress.statusChanged() - - added InstallProgress.statusChange(pkg, percent, status) - - make DumbInstallProgress a new-style class + - added InstallProgress.statusChange(pkg, percent, status) + - make DumbInstallProgress a new-style class (thanks to kamion for the suggestions) - fix various pychecker warnings * apt/cache.py: - return useful values on Cache.update() - Release locks on failure (thanks to Colin Watson) - fix various pychecker warnings - * apt/package.py: + * apt/package.py: - fix various pychecker warnings - check if looupRecords succeeded - fix bug in the return statement of _downloadable() * python/srcrecords.cc: - add "Restart" method - - don't run auto "Restart" before performing a Lookup + - don't run auto "Restart" before performing a Lookup - fix the initalization (no need to pass a PkgCacheType to the records) - added "Index" attribute * python/indexfile.cc: - added ArchiveURI() method - + -- Michael Vogt <mvo@debian.org> Mon, 8 May 2006 22:34:58 +0200 python-apt (0.6.16.2) unstable; urgency=low - + * Non-maintainer upload. * debian/control: + Replaces: python-apt (<< 0.6.11), instead of Conflicts which is not correct here. (closes: #308586). -- Pierre Habouzit <madcoder@debian.org> Fri, 14 Apr 2006 19:30:51 +0200 - + python-apt (0.6.16.1) unstable; urgency=low * memleak fixed when pkgCache objects are deallocated @@ -420,11 +421,11 @@ python-apt (0.6.16.1) unstable; urgency=low python-apt (0.6.16) unstable; urgency=low - * added GetPkgAcqFile to queue individual file downloads with the + * added GetPkgAcqFile to queue individual file downloads with the system (dosn't make use of the improved pkgAcqFile yet) * added SourceList.GetIndexes() * rewrote apt.cache.update() to use the improved aquire interface - * apt/ API change: apt.Package.candidateOrigin returns a list of origins + * apt/ API change: apt.Package.candidateOrigin returns a list of origins now instead of a single one * apt_pkg.Cdrom.Add() returns a boolean now, CdromProgress has totalSteps * added support for pkgIndexFile and added SourcesList.FindIndex() @@ -451,8 +452,8 @@ python-apt (0.6.14) unstable; urgency=low (this is the job of the caller now) * python/srcrecords.cc: - support for "srcrecords.Files" added - - always run "Restart" before performing a Lookup - * export locking via: GetLock(),PkgSystem{Lock,UnLock} + - always run "Restart" before performing a Lookup + * export locking via: GetLock(),PkgSystem{Lock,UnLock} * apt/cache.py: - added __iter__ to make "for pkg in apt.Cache:" stuff possible @@ -470,9 +471,9 @@ python-apt (0.6.13) unstable; urgency=low * native apt/ python directory added that contains a more pythonic interface to apt_pkg * made the apt/ python code PEP08 conform - * python exceptions return the apt error message now + * python exceptions return the apt error message now (thanks to Chris Halls for the patch) - + -- Michael Vogt <mvo@debian.org> Fri, 5 Aug 2005 10:30:31 +0200 python-apt (0.6.12.2) unstable; urgency=low @@ -485,7 +486,7 @@ python-apt (0.6.12.1) unstable; urgency=low * rebuild against the latest apt - -- Michael Vogt <mvo@debian.org> Tue, 28 Jun 2005 18:29:57 +0200 + -- Michael Vogt <mvo@debian.org> Tue, 28 Jun 2005 18:29:57 +0200 python-apt (0.6.12ubuntu1) breezy; urgency=low @@ -497,17 +498,17 @@ python-apt (0.6.12ubuntu1) breezy; urgency=low -- Michael Vogt <michael.vogt@ubuntu.com> Thu, 12 May 2005 11:34:05 +0200 python-apt (0.6.12) breezy; urgency=low - + * added a tests/ directory * added tests/pkgsrcrecords.py that will check if the pkgsrcrecords interface does not segfault * new native python "apt" interface that hides the details of apt_pkg -- Michael Vogt <michael.vogt@ubuntu.com> Fri, 6 May 2005 10:11:52 +0200 - + python-apt (0.6.11) experimental; urgency=low - * fixed some reference count problems in the depcache and + * fixed some reference count problems in the depcache and pkgsrcrecords code * DepCache.Init() is never called implicit now * merged with python-apt tree from Greek0@gmx.net--2005-main @@ -583,7 +584,7 @@ python-apt (0.5.8) unstable; urgency=low python-apt (0.5.5.2) unstable; urgency=low - * Add myself to Uploaders so that bugs don't get tagged as NMU-fixed anymore + * Add myself to Uploaders so that bugs don't get tagged as NMU-fixed anymore * Initial support for working with source packages (Closes: #199716) -- Matt Zimmerman <mdz@debian.org> Tue, 22 Jul 2003 22:20:00 -0400 @@ -593,7 +594,7 @@ python-apt (0.5.5.1) unstable; urgency=low * DepIterator::GlobOr increments the iterator; don't increment it again. This caused every other dependency to be skipped (Closes: #195805) * Avoid a null pointer dereference when calling keys() on an empty - configuration (Closes: #149380) + configuration (Closes: #149380) -- Matt Zimmerman <mdz@debian.org> Mon, 2 Jun 2003 23:18:53 -0400 @@ -623,7 +624,7 @@ python-apt (0.5.4.4) unstable; urgency=low Closes: #157773 -- Matt Zimmerman <mdz@debian.org> Tue, 27 Aug 2002 19:22:10 -0400 - + python-apt (0.5.4.3) unstable; urgency=low * #include <new> in python/generic.h so that we can build on ia64, which diff --git a/debian/control b/debian/control index 8a10091d..0cb6e215 100644 --- a/debian/control +++ b/debian/control @@ -16,7 +16,7 @@ Provides: ${python:Provides} Suggests: python-apt-dbg, python-gtk2, python-vte XB-Python-Version: ${python:Versions} Description: Python interface to libapt-pkg - The apt_pkg Python interface will provide full access to the internal + The apt_pkg Python interface will provide full access to the internal libapt-pkg structures allowing Python programs to easily perform a variety of functions, such as: . @@ -25,7 +25,7 @@ Description: Python interface to libapt-pkg - Parsing of Debian package control files, and other files with a similar structure . - The included 'aptsources' Python interface provides an abstraction of + The included 'aptsources' Python interface provides an abstraction of the sources.list configuration on the repository and the distro level. Package: python-apt-dbg @@ -33,7 +33,7 @@ Priority: extra Architecture: any Depends: python-dbg, python-apt (= ${Source-Version}), ${shlibs:Depends} Description: Python interface to libapt-pkg (debug extension) - The apt_pkg Python interface will provide full access to the internal + The apt_pkg Python interface will provide full access to the internal libapt-pkg structures allowing Python programs to easily perform a variety of functions. . diff --git a/debian/copyright b/debian/copyright index 1e310354..f8463185 100644 --- a/debian/copyright +++ b/debian/copyright @@ -1,6 +1,6 @@ -APT is free software; you can redistribute them and/or modify them 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 +APT is free software; you can redistribute them and/or modify them 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. On Debian systems, a copy of the GNU General Public License can be diff --git a/doc/examples/acquire.py b/doc/examples/acquire.py index 939c33a2..58372961 100644 --- a/doc/examples/acquire.py +++ b/doc/examples/acquire.py @@ -4,15 +4,15 @@ import os import sys import tempfile + def get_file(fetcher, uri, destFile): - # get the file - af = apt_pkg.GetPkgAcqFile(fetcher, - uri=uri, - descr="sample descr", destFile=destFile) - res = fetcher.Run() - if res != fetcher.ResultContinue: - return False - return True + # get the file + af = apt_pkg.GetPkgAcqFile(fetcher, uri=uri, descr="sample descr", + destFile=destFile) + res = fetcher.Run() + if res != fetcher.ResultContinue: + return False + return True apt_pkg.init() @@ -32,7 +32,7 @@ depcache.Upgrade(True) progress = apt.progress.TextFetchProgress() fetcher = apt_pkg.GetAcquire(progress) pm = apt_pkg.GetPackageManager(depcache) -pm.GetArchives(fetcher,list,recs) +pm.GetArchives(fetcher, list, recs) print "%s (%s)" % (apt_pkg.SizeToStr(fetcher.FetchNeeded), fetcher.FetchNeeded) actiongroup = apt_pkg.GetPkgActionGroup(depcache) for pkg in cache.Packages: @@ -43,7 +43,7 @@ try: os.mkdir("/tmp/pyapt-test/partial") except OSError: pass -apt_pkg.Config.Set("Dir::Cache::archives","/tmp/pyapt-test") +apt_pkg.Config.Set("Dir::Cache::archives", "/tmp/pyapt-test") pkg = cache["3ddesktop"] depcache.MarkInstall(pkg) @@ -58,7 +58,7 @@ print fetcher get_file(fetcher, "ftp://ftp.debian.org/debian/dists/README", "/tmp/lala") -pm.GetArchives(fetcher,list,recs) +pm.GetArchives(fetcher, list, recs) for item in fetcher.Items: print item @@ -75,6 +75,3 @@ print "fetcher.Run() returned: %s" % res print "now runing pm.DoInstall()" res = pm.DoInstall(1) print "pm.DoInstall() returned: %s"% res - - - diff --git a/doc/examples/action.py b/doc/examples/action.py index adf26539..7153292c 100644 --- a/doc/examples/action.py +++ b/doc/examples/action.py @@ -21,15 +21,6 @@ cache.Update(progress) print "Exiting" sys.exit(0) - - - - - - - - - iter = cache["base-config"] print "example package iter: %s" % iter @@ -45,7 +36,6 @@ depcache.Init(progress) #sys.exit() - # get a canidate version ver= depcache.GetCandidateVer(iter) print "Candidate version: %s " % ver @@ -66,7 +56,6 @@ depcache.MarkDelete(iter) print "DelCount: %s " % depcache.DelCount print "%s.MarkedDelete(): %s" % (iter.Name, depcache.MarkedDelete(iter)) - iter = cache["3dchess"] print "\nMarking '%s' for install" % iter.Name depcache.MarkInstall(iter) @@ -97,10 +86,10 @@ print "UsrSize: %s " % apt_pkg.SizeToStr(depcache.UsrSize) print "DebSize: %s " % apt_pkg.SizeToStr(depcache.DebSize) for pkg in cache.Packages: - if pkg.CurrentVer != None and not depcache.MarkedInstall(pkg) and depcache.IsUpgradable(pkg): + if pkg.CurrentVer != None and not depcache.MarkedInstall(pkg) \ + and depcache.IsUpgradable(pkg): print "Upgrade didn't upgrade (kept): %s" % pkg.Name - print "\nPerforming DistUpgrade" depcache.Upgrade(True) print "Keep: %s " % depcache.KeepCount diff --git a/doc/examples/all_deps.py b/doc/examples/all_deps.py index f4f1741c..e8c9eaaf 100644 --- a/doc/examples/all_deps.py +++ b/doc/examples/all_deps.py @@ -1,34 +1,36 @@ -#!/usr/bin/env python
-
-import sys
-import apt
-
-
-def dependencies(cache, pkg, deps, key="Depends"):
- #print "pkg: %s (%s)" % (pkg.name, deps)
- candver = cache._depcache.GetCandidateVer(pkg._pkg)
- if candver == None:
- return deps
- dependslist = candver.DependsList
- if dependslist.has_key(key):
- for depVerList in dependslist[key]:
- for dep in depVerList:
- if cache.has_key(dep.TargetPkg.Name):
- if pkg.name != dep.TargetPkg.Name and not dep.TargetPkg.Name in deps:
- deps.add(dep.TargetPkg.Name)
- dependencies(cache, cache[dep.TargetPkg.Name], deps, key)
- return deps
-
-
-pkgname = sys.argv[1]
-c = apt.Cache()
-pkg = c[pkgname]
-
-deps = set()
-
-deps = dependencies(c,pkg, deps, "Depends")
-print " ".join(deps)
-
-preDeps = set()
-preDeps = dependencies(c,pkg, preDeps, "PreDepends")
-print " ".join(preDeps)
+#!/usr/bin/env python + +import sys +import apt + + +def dependencies(cache, pkg, deps, key="Depends"): + #print "pkg: %s (%s)" % (pkg.name, deps) + candver = cache._depcache.GetCandidateVer(pkg._pkg) + if candver == None: + return deps + dependslist = candver.DependsList + if dependslist.has_key(key): + for depVerList in dependslist[key]: + for dep in depVerList: + if cache.has_key(dep.TargetPkg.Name): + if pkg.name != dep.TargetPkg.Name and \ + not dep.TargetPkg.Name in deps: + deps.add(dep.TargetPkg.Name) + dependencies( + cache, cache[dep.TargetPkg.Name], deps, key) + return deps + + +pkgname = sys.argv[1] +c = apt.Cache() +pkg = c[pkgname] + +deps = set() + +deps = dependencies(c, pkg, deps, "Depends") +print " ".join(deps) + +preDeps = set() +preDeps = dependencies(c, pkg, preDeps, "PreDepends") +print " ".join(preDeps) diff --git a/doc/examples/build-deps.py b/doc/examples/build-deps.py index 81a8b408..dc1a6f4e 100755 --- a/doc/examples/build-deps.py +++ b/doc/examples/build-deps.py @@ -5,18 +5,20 @@ import apt_pkg import sys import sets # only needed for python2.3, python2.4 supports this naively + def get_source_pkg(pkg, records, depcache): - """ get the source package name of a given package """ - version = depcache.GetCandidateVer(pkg) - if not version: - return None - file, index = version.FileList.pop(0) - records.Lookup((file, index)) - if records.SourcePkg != "": - srcpkg = records.SourcePkg - else: - srcpkg = pkg.Name - return srcpkg + """ get the source package name of a given package """ + version = depcache.GetCandidateVer(pkg) + if not version: + return None + file, index = version.FileList.pop(0) + records.Lookup((file, index)) + if records.SourcePkg != "": + srcpkg = records.SourcePkg + else: + srcpkg = pkg.Name + return srcpkg + # main apt_pkg.init() @@ -28,45 +30,45 @@ srcrecords = apt_pkg.GetPkgSrcRecords() # base package that we use for build-depends calculation if len(sys.argv) < 2: - print "need a package name as argument" - sys.exit(1) + print "need a package name as argument" + sys.exit(1) try: - base = cache[sys.argv[1]] + base = cache[sys.argv[1]] except KeyError: - print "No package %s found" % sys.argv[1] - sys.exit(1) + print "No package %s found" % sys.argv[1] + sys.exit(1) all_build_depends = sets.Set() # get the build depdends for the package itself srcpkg_name = get_source_pkg(base, records, depcache) print "srcpkg_name: %s " % srcpkg_name if not srcpkg_name: - print "Can't find source package for '%s'" % pkg.Name + print "Can't find source package for '%s'" % pkg.Name srcrec = srcrecords.Lookup(srcpkg_name) if srcrec: - print "Files:" - print srcrecords.Files - bd = srcrecords.BuildDepends - print "build-depends of the package: %s " % bd - for b in bd: - all_build_depends.add(b[0]) + print "Files:" + print srcrecords.Files + bd = srcrecords.BuildDepends + print "build-depends of the package: %s " % bd + for b in bd: + all_build_depends.add(b[0]) # calculate the build depends for all dependencies depends = depcache.GetCandidateVer(base).DependsList for dep in depends["Depends"]: # FIXME: do we need to consider PreDepends? - pkg = dep[0].TargetPkg - srcpkg_name = get_source_pkg(pkg, records, depcache) - if not srcpkg_name: - print "Can't find source package for '%s'" % pkg.Name - continue - srcrec = srcrecords.Lookup(srcpkg_name) - if srcrec: - #print srcrecords.Package - #print srcrecords.Binaries - bd = srcrecords.BuildDepends - #print "%s: %s " % (srcpkg_name, bd) - for b in bd: - all_build_depends.add(b[0]) - + pkg = dep[0].TargetPkg + srcpkg_name = get_source_pkg(pkg, records, depcache) + if not srcpkg_name: + print "Can't find source package for '%s'" % pkg.Name + continue + srcrec = srcrecords.Lookup(srcpkg_name) + if srcrec: + #print srcrecords.Package + #print srcrecords.Binaries + bd = srcrecords.BuildDepends + #print "%s: %s " % (srcpkg_name, bd) + for b in bd: + all_build_depends.add(b[0]) + print "\n".join(all_build_depends) diff --git a/doc/examples/cdrom.py b/doc/examples/cdrom.py index bf044d7c..743220a6 100644 --- a/doc/examples/cdrom.py +++ b/doc/examples/cdrom.py @@ -2,7 +2,8 @@ # example how to deal with the depcache import apt_pkg -import sys, os +import sys +import os import copy from progress import CdromProgress @@ -16,17 +17,11 @@ print cdrom progress = CdromProgress() -(res,ident) = cdrom.Ident(progress) +(res, ident) = cdrom.Ident(progress) print "ident result is: %s (%s) " % (res, ident) apt_pkg.Config.Set("APT::CDROM::Rename", "True") cdrom.Add(progress) - - print "Exiting" sys.exit(0) - - - - diff --git a/doc/examples/checkstate.py b/doc/examples/checkstate.py index 2986872f..3368d500 100755 --- a/doc/examples/checkstate.py +++ b/doc/examples/checkstate.py @@ -14,23 +14,23 @@ packages = cache.Packages uninstalled, updated, upgradable = {}, {}, {} for package in packages: - versions = package.VersionList - if not versions: - continue - version = versions[0] - for other_version in versions: - if apt_pkg.VersionCompare(version.VerStr, other_version.VerStr)<0: - version = other_version - if package.CurrentVer: - current = package.CurrentVer - if apt_pkg.VersionCompare(current.VerStr, version.VerStr)<0: - upgradable[package.Name] = version - break - else: - updated[package.Name] = current - else: - uninstalled[package.Name] = version + versions = package.VersionList + if not versions: + continue + version = versions[0] + for other_version in versions: + if apt_pkg.VersionCompare(version.VerStr, other_version.VerStr)<0: + version = other_version + if package.CurrentVer: + current = package.CurrentVer + if apt_pkg.VersionCompare(current.VerStr, version.VerStr)<0: + upgradable[package.Name] = version + break + else: + updated[package.Name] = current + else: + uninstalled[package.Name] = version for l in (uninstalled, updated, upgradable): - print l.items()[0] + print l.items()[0] diff --git a/doc/examples/config.py b/doc/examples/config.py index 24d90a0d..9d4e51fc 100755 --- a/doc/examples/config.py +++ b/doc/examples/config.py @@ -6,49 +6,53 @@ # config.py -no-h --no-help --help=no ; Turn off help # config.py -qqq -q=3 ; verbosity to 3 # config.py -c /etc/apt/apt.conf ; include that config file] -# config.py -o help=true ; Turn on help by giving a config file string +# config.py -o help=true ; Turn on help by giving a +# ; config file string # config.py -no-h -- -help ; Turn off help, specify the file '-help' # -c and -o are standard APT-program options. # This shows how to use the system for configuration and option control. # The other varient is for ISC object config files. See configisc.py. -import apt_pkg,sys,posixpath; +import apt_pkg +import sys +import posixpath # Create a new empty Configuration object - there is also the system global # configuration object apt_pkg.Config which is used interally by apt-pkg # routines to control unusual situations. I recommend using the sytem global # whenever possible.. -Cnf = apt_pkg.newConfiguration(); +Cnf = apt_pkg.newConfiguration() -print "Command line is",sys.argv +print "Command line is", sys.argv # Load the default configuration file, InitConfig() does this better.. -Cnf.Set("config-file","/etc/apt/apt.conf"); # or Cnf["config-file"] = ".."; +Cnf.Set("config-file", "/etc/apt/apt.conf") # or Cnf["config-file"] = ".." if posixpath.exists(Cnf.FindFile("config-file")): - apt_pkg.ReadConfigFile(Cnf,"/etc/apt/apt.conf"); + apt_pkg.ReadConfigFile(Cnf, "/etc/apt/apt.conf") # Merge the command line arguments into the configuration space -Arguments = [('h',"help","help"), - ('v',"version","version"), - ('q',"quiet","quiet","IntLevel"), - ('c',"config-file","","ConfigFile"), - ('o',"option","","ArbItem")] -print "FileNames",apt_pkg.ParseCommandLine(Cnf,Arguments,sys.argv); +Arguments = [('h', "help", "help"), + ('v', "version", "version"), + ('q', "quiet", "quiet", "IntLevel"), + ('c', "config-file", "", "ConfigFile"), + ('o', "option", "", "ArbItem")] +print "FileNames", apt_pkg.ParseCommandLine(Cnf, Arguments, sys.argv) -print "Quiet level selected is",Cnf.FindI("quiet",0); +print "Quiet level selected is", Cnf.FindI("quiet", 0) # Do some stuff with it -if Cnf.FindB("version",0) == 1: - print "Version selected - 1.1"; +if Cnf.FindB("version", 0) == 1: + print "Version selected - 1.1" -if Cnf.FindB("help",0) == 1: - print "python-apt",apt_pkg.Version,"compiled on",apt_pkg.Date,apt_pkg.Time; - print "Hi, I am the help text for this program"; - sys.exit(0); +if Cnf.FindB("help", 0) == 1: + print "python-apt", apt_pkg.Version, \ + "compiled on", apt_pkg.Date, apt_pkg.Time + print "Hi, I am the help text for this program" + sys.exit(0) -print "No help for you, try -h"; +print "No help for you, try -h" # Print the configuration space -print "The Configuration space looks like:"; +print "The Configuration space looks like:" for I in Cnf.keys(): - print "%s \"%s\";"%(I,Cnf[I]); + print "%s \"%s\";" % (I, Cnf[I]) diff --git a/doc/examples/configisc.py b/doc/examples/configisc.py index 1773a919..1d5965f5 100755 --- a/doc/examples/configisc.py +++ b/doc/examples/configisc.py @@ -8,32 +8,37 @@ # doc/examples/ftp-archive.conf # or a bind8 config file.. -import apt_pkg,sys,posixpath; +import apt_pkg +import sys +import posixpath -ConfigFile = apt_pkg.ParseCommandLine(apt_pkg.Config,[],sys.argv); +ConfigFile = apt_pkg.ParseCommandLine(apt_pkg.Config, [], sys.argv) if len(ConfigFile) != 1: - print "Must have exactly 1 file name"; - sys.exit(0); + print "Must have exactly 1 file name" + sys.exit(0) -Cnf = apt_pkg.newConfiguration(); -apt_pkg.ReadConfigFileISC(Cnf,ConfigFile[0]); +Cnf = apt_pkg.newConfiguration() +apt_pkg.ReadConfigFileISC(Cnf, ConfigFile[0]) # Print the configuration space -#print "The Configuration space looks like:"; +#print "The Configuration space looks like:" #for I in Cnf.keys(): -# print "%s \"%s\";"%(I,Cnf[I]); +# print "%s \"%s\";" % (I, Cnf[I]) # bind8 config file.. if Cnf.has_key("Zone"): - print "Zones: ",Cnf.SubTree("zone").List(); - for I in Cnf.List("zone"): - SubCnf = Cnf.SubTree(I); - if SubCnf.Find("type") == "slave": - print "Masters for %s: %s"%(SubCnf.MyTag(),SubCnf.ValueList("masters")); + print "Zones: ", Cnf.SubTree("zone").List() + for I in Cnf.List("zone"): + SubCnf = Cnf.SubTree(I) + if SubCnf.Find("type") == "slave": + print "Masters for %s: %s" % ( + SubCnf.MyTag(), SubCnf.ValueList("masters")) else: - print "Tree definitions:"; - for I in Cnf.List("tree"): - SubCnf = Cnf.SubTree(I); - # This could use Find which would eliminate the possibility of exceptions. - print "Subtree %s with sections '%s' and architectures '%s'"%(SubCnf.MyTag(),SubCnf["Sections"],SubCnf["Architectures"]); + print "Tree definitions:" + for I in Cnf.List("tree"): + SubCnf = Cnf.SubTree(I) + # This could use Find which would eliminate the possibility of + # exceptions. + print "Subtree %s with sections '%s' and architectures '%s'" % ( + SubCnf.MyTag(), SubCnf["Sections"], SubCnf["Architectures"]) diff --git a/doc/examples/deb_inspect.py b/doc/examples/deb_inspect.py index b57526c6..cc0d04be 100755 --- a/doc/examples/deb_inspect.py +++ b/doc/examples/deb_inspect.py @@ -6,11 +6,11 @@ import apt_inst import sys import os.path -def Callback(What,Name,Link,Mode,UID,GID,Size,MTime,Major,Minor): - """ callback for debExtract """ - print "%s '%s','%s',%u,%u,%u,%u,%u,%u,%u"\ - % (What,Name,Link,Mode,UID,GID,Size, MTime, Major, Minor); +def Callback(What, Name, Link, Mode, UID, GID, Size, MTime, Major, Minor): + """ callback for debExtract """ + print "%s '%s','%s',%u,%u,%u,%u,%u,%u,%u" \ + % (What, Name, Link, Mode, UID, GID, Size, MTime, Major, Minor) if __name__ == "__main__": @@ -39,9 +39,11 @@ if __name__ == "__main__": print "extracting archive" dir = "/tmp/deb" os.mkdir(dir) - apt_inst.debExtractArchive(open(file),dir) + apt_inst.debExtractArchive(open(file), dir) + def visit(arg, dirname, names): print "%s/" % dirname for file in names: print "\t%s" % file + os.path.walk(dir, visit, None) diff --git a/doc/examples/depcache.py b/doc/examples/depcache.py index 556c954b..ad884fe7 100644 --- a/doc/examples/depcache.py +++ b/doc/examples/depcache.py @@ -84,7 +84,8 @@ print "UsrSize: %s " % apt_pkg.SizeToStr(depcache.UsrSize) print "DebSize: %s " % apt_pkg.SizeToStr(depcache.DebSize) for pkg in cache.Packages: - if pkg.CurrentVer != None and not depcache.MarkedInstall(pkg) and depcache.IsUpgradable(pkg): + if pkg.CurrentVer != None and not depcache.MarkedInstall(pkg) \ + and depcache.IsUpgradable(pkg): print "Upgrade didn't upgrade (kept): %s" % pkg.Name diff --git a/doc/examples/dependant-pkgs.py b/doc/examples/dependant-pkgs.py index f36936a8..bb10ce70 100755 --- a/doc/examples/dependant-pkgs.py +++ b/doc/examples/dependant-pkgs.py @@ -6,31 +6,31 @@ import sys pkgs = set() cache = apt.Cache() for pkg in cache: - candver = cache._depcache.GetCandidateVer(pkg._pkg) - if candver == None: - continue - dependslist = candver.DependsList - for dep in dependslist.keys(): - # get the list of each dependency object - for depVerList in dependslist[dep]: - for z in depVerList: - # get all TargetVersions of - # the dependency object - for tpkg in z.AllTargets(): - if sys.argv[1] == tpkg.ParentPkg.Name: - pkgs.add(pkg.name) + candver = cache._depcache.GetCandidateVer(pkg._pkg) + if candver == None: + continue + dependslist = candver.DependsList + for dep in dependslist.keys(): + # get the list of each dependency object + for depVerList in dependslist[dep]: + for z in depVerList: + # get all TargetVersions of + # the dependency object + for tpkg in z.AllTargets(): + if sys.argv[1] == tpkg.ParentPkg.Name: + pkgs.add(pkg.name) main = set() universe = set() for pkg in pkgs: - if "universe" in cache[pkg].section: - universe.add(cache[pkg].sourcePackageName) - else: - main.add(cache[pkg].sourcePackageName) + if "universe" in cache[pkg].section: + universe.add(cache[pkg].sourcePackageName) + else: + main.add(cache[pkg].sourcePackageName) -print "main:" +print "main:" print "\n".join(main) print -print "universe:" +print "universe:" print "\n".join(universe) diff --git a/doc/examples/desc.py b/doc/examples/desc.py index 87b9473b..f47517cf 100644 --- a/doc/examples/desc.py +++ b/doc/examples/desc.py @@ -3,7 +3,7 @@ import apt_pkg apt_pkg.init() -apt_pkg.Config.Set("APT::Acquire::Translation","de") +apt_pkg.Config.Set("APT::Acquire::Translation", "de") cache = apt_pkg.GetCache() depcache = apt_pkg.GetDepCache(cache) @@ -15,11 +15,10 @@ print cand desc = cand.TranslatedDescription print desc print desc.FileList -(f,index) = desc.FileList.pop(0) +(f, index) = desc.FileList.pop(0) records = apt_pkg.GetPkgRecords(cache) -records.Lookup((f,index)) +records.Lookup((f, index)) desc = records.LongDesc print len(desc) print desc - diff --git a/doc/examples/gui-inst.py b/doc/examples/gui-inst.py index 9a3b007f..cb49db3e 100755 --- a/doc/examples/gui-inst.py +++ b/doc/examples/gui-inst.py @@ -30,7 +30,5 @@ if __name__ == "__main__": else: cache["2vcard"].markInstall() progress.show_terminal(expanded=True) - cache.commit(progress.fetch, - progress.install) - + cache.commit(progress.fetch, progress.install) gtk.main() diff --git a/doc/examples/indexfile.py b/doc/examples/indexfile.py index d383fd61..22d0b635 100644 --- a/doc/examples/indexfile.py +++ b/doc/examples/indexfile.py @@ -10,7 +10,7 @@ cache = apt_pkg.GetCache() depcache = apt_pkg.GetDepCache(cache) pkg = cache["libimlib2"] cand = depcache.GetCandidateVer(pkg) -for (f,i) in cand.FileList: +for (f, i) in cand.FileList: index = sources.FindIndex(f) print index if index: diff --git a/doc/examples/inst.py b/doc/examples/inst.py index ff9d452c..a3a50356 100644 --- a/doc/examples/inst.py +++ b/doc/examples/inst.py @@ -2,27 +2,34 @@ # example how to deal with the depcache import apt -import sys, os +import sys +import os import copy import time from apt.progress import InstallProgress + class TextInstallProgress(InstallProgress): - def __init__(self): - apt.progress.InstallProgress.__init__(self) - self.last = 0.0 - def updateInterface(self): - InstallProgress.updateInterface(self) - if self.last >= self.percent: - return - sys.stdout.write("\r[%s] %s\n" %(self.percent, self.status)) - sys.stdout.flush() - self.last = self.percent - def conffile(self,current,new): - print "conffile prompt: %s %s" % (current,new) - def error(self, errorstr): - print "got dpkg error: '%s'" % errorstr + + def __init__(self): + apt.progress.InstallProgress.__init__(self) + self.last = 0.0 + + def updateInterface(self): + InstallProgress.updateInterface(self) + if self.last >= self.percent: + return + sys.stdout.write("\r[%s] %s\n" %(self.percent, self.status)) + sys.stdout.flush() + self.last = self.percent + + def conffile(self, current, new): + print "conffile prompt: %s %s" % (current, new) + + def error(self, errorstr): + print "got dpkg error: '%s'" % errorstr + cache = apt.Cache(apt.progress.OpTextProgress()) @@ -33,16 +40,12 @@ pkg = cache["3dchess"] # install or remove, the importend thing is to keep us busy :) if pkg.isInstalled: - print "Going to delete %s" % pkg.name - pkg.markDelete() + print "Going to delete %s" % pkg.name + pkg.markDelete() else: - print "Going to install %s" % pkg.name - pkg.markInstall() + print "Going to install %s" % pkg.name + pkg.markInstall() res = cache.commit(fprogress, iprogress) print res sys.exit(0) - - - - diff --git a/doc/examples/metaindex.py b/doc/examples/metaindex.py index 1bce0dba..f00a7e01 100644 --- a/doc/examples/metaindex.py +++ b/doc/examples/metaindex.py @@ -9,7 +9,7 @@ sources.ReadMainList() for metaindex in sources.List: print metaindex - print "URI: ",metaindex.URI - print "Dist: ",metaindex.Dist - print "IndexFiles: ","\n".join([str(i) for i in metaindex.IndexFiles]) + print "URI: ", metaindex.URI + print "Dist: ", metaindex.Dist + print "IndexFiles: ", "\n".join([str(i) for i in metaindex.IndexFiles]) print diff --git a/doc/examples/print_uris.py b/doc/examples/print_uris.py index c8a64223..3b678e83 100755 --- a/doc/examples/print_uris.py +++ b/doc/examples/print_uris.py @@ -12,11 +12,11 @@ upgradable = filter(lambda p: p.isUpgradable, cache) for pkg in upgradable: - pkg._lookupRecord(True) - path = apt_pkg.ParseSection(pkg._records.Record)["Filename"] - cand = pkg._depcache.GetCandidateVer(pkg._pkg) - for (packagefile,i) in cand.FileList: - indexfile = cache._list.FindIndex(packagefile) - if indexfile: - uri = indexfile.ArchiveURI(path) - print uri + pkg._lookupRecord(True) + path = apt_pkg.ParseSection(pkg._records.Record)["Filename"] + cand = pkg._depcache.GetCandidateVer(pkg._pkg) + for (packagefile, i) in cand.FileList: + indexfile = cache._list.FindIndex(packagefile) + if indexfile: + uri = indexfile.ArchiveURI(path) + print uri diff --git a/doc/examples/progress.py b/doc/examples/progress.py index b90253cb..c56734b7 100644 --- a/doc/examples/progress.py +++ b/doc/examples/progress.py @@ -4,7 +4,9 @@ import sys import time import string + class TextProgress(apt.OpProgress): + def __init__(self): self.last=0.0 @@ -21,6 +23,7 @@ class TextProgress(apt.OpProgress): class TextFetchProgress(apt.FetchProgress): + def __init__(self): pass @@ -31,27 +34,36 @@ class TextFetchProgress(apt.FetchProgress): pass def updateStatus(self, uri, descr, shortDescr, status): - print "UpdateStatus: '%s' '%s' '%s' '%i'" % (uri,descr,shortDescr, status) + print "UpdateStatus: '%s' '%s' '%s' '%i'" % ( + uri, descr, shortDescr, status) + def pulse(self): - print "Pulse: CPS: %s/s; Bytes: %s/%s; Item: %s/%s" % (SizeToStr(self.currentCPS), SizeToStr(self.currentBytes), SizeToStr(self.totalBytes), self.currentItems, self.totalItems) + print "Pulse: CPS: %s/s; Bytes: %s/%s; Item: %s/%s" % ( + SizeToStr(self.currentCPS), SizeToStr(self.currentBytes), + SizeToStr(self.totalBytes), self.currentItems, self.totalItems) return True def mediaChange(self, medium, drive): - print "Please insert medium %s in drive %s" % (medium, drive) - sys.stdin.readline() + print "Please insert medium %s in drive %s" % (medium, drive) + sys.stdin.readline() #return False class TextInstallProgress(apt.InstallProgress): + def __init__(self): apt.InstallProgress.__init__(self) pass + def startUpdate(self): print "StartUpdate" + def finishUpdate(self): print "FinishUpdate" + def statusChange(self, pkg, percent, status): print "[%s] %s: %s" % (percent, pkg, status) + def updateInterface(self): apt.InstallProgress.updateInterface(self) # usefull to e.g. redraw a GUI @@ -59,20 +71,25 @@ class TextInstallProgress(apt.InstallProgress): class TextCdromProgress(apt.CdromProgress): + def __init__(self): pass + # update is called regularly so that the gui can be redrawn + def update(self, text, step): # check if we actually have some text to display if text != "": print "Update: %s %s" % (string.strip(text), step) + def askCdromName(self): print "Please enter cd-name: ", cd_name = sys.stdin.readline() return (True, string.strip(cd_name)) + def changeCdrom(self): print "Please insert cdrom and press <ENTER>" - answer = sys.stdin.readline() + answer = sys.stdin.readline() return True diff --git a/doc/examples/recommends.py b/doc/examples/recommends.py index c1a7eb2e..f0b3b1be 100755 --- a/doc/examples/recommends.py +++ b/doc/examples/recommends.py @@ -5,37 +5,35 @@ apt_pkg.init() cache = apt_pkg.GetCache() + class Wanted: - def __init__(self, name): - self.name = name - self.recommended = [] - self.suggested = [] + def __init__(self, name): + self.name = name + self.recommended = [] + self.suggested = [] + wanted = {} for package in cache.Packages: - current = package.CurrentVer - if not current: - continue - depends = current.DependsList - for (key, attr) in (('Suggests', 'suggested'), - ('Recommends', 'recommended')): - list = depends.get(key, []) - for dependency in list: - name = dependency[0].TargetPkg.Name - dep = cache[name] - if dep.CurrentVer: - continue - getattr(wanted.setdefault(name, Wanted(name)), - attr).append(package.Name) + current = package.CurrentVer + if not current: + continue + depends = current.DependsList + for (key, attr) in (('Suggests', 'suggested'), + ('Recommends', 'recommended')): + list = depends.get(key, []) + for dependency in list: + name = dependency[0].TargetPkg.Name + dep = cache[name] + if dep.CurrentVer: + continue + getattr(wanted.setdefault(name, Wanted(name)), + attr).append(package.Name) ks = wanted.keys() ks.sort() for want in ks: - print want, wanted[want].recommended, wanted[want].suggested - - - - + print want, wanted[want].recommended, wanted[want].suggested diff --git a/doc/examples/records.py b/doc/examples/records.py index ef04b555..a7a87727 100755 --- a/doc/examples/records.py +++ b/doc/examples/records.py @@ -5,8 +5,9 @@ import apt cache = apt.Cache() for pkg in cache: - if not pkg.candidateRecord: - continue - if pkg.candidateRecord.has_key("Task"): - print "Pkg %s is part of '%s'" % (pkg.name, pkg.candidateRecord["Task"].split()) - #print pkg.candidateRecord + if not pkg.candidateRecord: + continue + if pkg.candidateRecord.has_key("Task"): + print "Pkg %s is part of '%s'" % ( + pkg.name, pkg.candidateRecord["Task"].split()) + #print pkg.candidateRecord diff --git a/doc/examples/sources.py b/doc/examples/sources.py index b48c0ba5..49652982 100644 --- a/doc/examples/sources.py +++ b/doc/examples/sources.py @@ -10,6 +10,7 @@ apt_pkg.init() sources = apt_pkg.GetPkgSrcRecords() sources.Restart() while sources.Lookup('hello'): - print sources.Package, sources.Version, sources.Maintainer, sources.Section, `sources.Binaries` - print sources.Files - print sources.Index.ArchiveURI(sources.Files[0][2]) + print sources.Package, sources.Version, sources.Maintainer, \ + sources.Section, `sources.Binaries` + print sources.Files + print sources.Index.ArchiveURI(sources.Files[0][2]) diff --git a/doc/examples/tagfile.py b/doc/examples/tagfile.py index 653c0a71..4faf08ac 100755 --- a/doc/examples/tagfile.py +++ b/doc/examples/tagfile.py @@ -1,8 +1,8 @@ #!/usr/bin/env python import apt_pkg -Parse = apt_pkg.ParseTagFile(open("/var/lib/dpkg/status","r")); +Parse = apt_pkg.ParseTagFile(open("/var/lib/dpkg/status", "r")) while Parse.Step() == 1: - print Parse.Section.get("Package"); - print apt_pkg.ParseDepends(Parse.Section.get("Depends","")); + print Parse.Section.get("Package") + print apt_pkg.ParseDepends(Parse.Section.get("Depends", "")) diff --git a/doc/examples/update.py b/doc/examples/update.py index be7bb679..364fa1c9 100755 --- a/doc/examples/update.py +++ b/doc/examples/update.py @@ -9,5 +9,5 @@ if __name__ == "__main__": "touch /tmp/update-was-run") c = apt.Cache() res = c.update(apt.progress.TextFetchProgress()) - print "res: ",res + print "res: ", res assert(os.path.exists("/tmp/update-about-to-run")) diff --git a/doc/examples/versiontest.py b/doc/examples/versiontest.py index c4e5f44d..dd881f6b 100755 --- a/doc/examples/versiontest.py +++ b/doc/examples/versiontest.py @@ -1,36 +1,40 @@ #!/usr/bin/python # This is a simple clone of tests/versiontest.cc -import apt_pkg,sys,re,string; -apt_pkg.InitConfig(); -apt_pkg.InitSystem(); +import apt_pkg +import sys +import re +import string -TestFile = apt_pkg.ParseCommandLine(apt_pkg.Config,[],sys.argv); +apt_pkg.InitConfig() +apt_pkg.InitSystem() + +TestFile = apt_pkg.ParseCommandLine(apt_pkg.Config, [], sys.argv) if len(TestFile) != 1: - print "Must have exactly 1 file name"; - sys.exit(0); + print "Must have exactly 1 file name" + sys.exit(0) # Go over the file.. -List = open(TestFile[0],"r"); -CurLine = 0; +List = open(TestFile[0], "r") +CurLine = 0 while(1): - Line = List.readline(); - CurLine = CurLine + 1; - if Line == "": - break; - Line = string.strip(Line); - if len(Line) == 0 or Line[0] == '#': - continue; + Line = List.readline() + CurLine = CurLine + 1 + if Line == "": + break + Line = string.strip(Line) + if len(Line) == 0 or Line[0] == '#': + continue - Split = re.split("[ \n]",Line); + Split = re.split("[ \n]", Line) - # Check forward - if apt_pkg.VersionCompare(Split[0],Split[1]) != int(Split[2]): - print "Comparision failed on line %u. '%s' ? '%s' %i != %i"%(CurLine, - Split[0],Split[1],apt_pkg.VersionCompare(Split[0],Split[1]), - int(Split[2])); - # Check reverse - if apt_pkg.VersionCompare(Split[1],Split[0]) != -1*int(Split[2]): - print "Comparision failed on line %u. '%s' ? '%s' %i != %i"%(CurLine, - Split[1],Split[0],apt_pkg.VersionCompare(Split[1],Split[0]), - -1*int(Split[2])); + # Check forward + if apt_pkg.VersionCompare(Split[0], Split[1]) != int(Split[2]): + print "Comparision failed on line %u. '%s' ? '%s' %i != %i" % (CurLine, + Split[0], Split[1], apt_pkg.VersionCompare(Split[0], Split[1]), + int(Split[2])) + # Check reverse + if apt_pkg.VersionCompare(Split[1], Split[0]) != -1 * int(Split[2]): + print "Comparision failed on line %u. '%s' ? '%s' %i != %i" % (CurLine, + Split[1], Split[0], apt_pkg.VersionCompare(Split[1], Split[0]), + -1 * int(Split[2])) diff --git a/python/acquire.cc b/python/acquire.cc index 9cf84928..1ecf55a5 100644 --- a/python/acquire.cc +++ b/python/acquire.cc @@ -16,7 +16,7 @@ static PyObject *AcquireItemAttr(PyObject *Self,char *Name) { pkgAcquire::ItemIterator &I = GetCpp<pkgAcquire::ItemIterator>(Self); - + if (strcmp("ID",Name) == 0) return Py_BuildValue("i",(*I)->ID); else if (strcmp("Status",Name) == 0) @@ -56,7 +56,7 @@ static PyObject *AcquireItemAttr(PyObject *Self,char *Name) static PyObject *AcquireItemRepr(PyObject *Self) { pkgAcquire::ItemIterator &I = GetCpp<pkgAcquire::ItemIterator>(Self); - + char S[300]; snprintf(S,sizeof(S),"<pkgAcquire::ItemIterator object: " "Status: %i Complete: %i Local: %i IsTrusted: %i " @@ -91,11 +91,11 @@ PyTypeObject AcquireItemType = static PyObject *PkgAcquireRun(PyObject *Self,PyObject *Args) -{ +{ pkgAcquire *fetcher = GetCpp<pkgAcquire*>(Self); int pulseInterval = 500000; - if (PyArg_ParseTuple(Args, "|i", &pulseInterval) == 0) + if (PyArg_ParseTuple(Args, "|i", &pulseInterval) == 0) return 0; pkgAcquire::RunResult run = fetcher->Run(pulseInterval); @@ -104,19 +104,19 @@ static PyObject *PkgAcquireRun(PyObject *Self,PyObject *Args) } static PyObject *PkgAcquireShutdown(PyObject *Self,PyObject *Args) -{ +{ pkgAcquire *fetcher = GetCpp<pkgAcquire*>(Self); - if (PyArg_ParseTuple(Args, "") == 0) + if (PyArg_ParseTuple(Args, "") == 0) return 0; fetcher->Shutdown(); Py_INCREF(Py_None); - return HandleErrors(Py_None); + return HandleErrors(Py_None); } -static PyMethodDef PkgAcquireMethods[] = +static PyMethodDef PkgAcquireMethods[] = { {"Run",PkgAcquireRun,METH_VARARGS,"Run the fetcher"}, {"Shutdown",PkgAcquireShutdown, METH_VARARGS,"Shutdown the fetcher"}, @@ -128,16 +128,16 @@ static PyObject *AcquireAttr(PyObject *Self,char *Name) { pkgAcquire *fetcher = GetCpp<pkgAcquire*>(Self); - if(strcmp("TotalNeeded",Name) == 0) + if(strcmp("TotalNeeded",Name) == 0) return Py_BuildValue("d", fetcher->TotalNeeded()); - if(strcmp("FetchNeeded",Name) == 0) + if(strcmp("FetchNeeded",Name) == 0) return Py_BuildValue("d", fetcher->FetchNeeded()); - if(strcmp("PartialPresent",Name) == 0) + if(strcmp("PartialPresent",Name) == 0) return Py_BuildValue("d", fetcher->PartialPresent()); - if(strcmp("Items",Name) == 0) + if(strcmp("Items",Name) == 0) { PyObject *List = PyList_New(0); - for (pkgAcquire::ItemIterator I = fetcher->ItemsBegin(); + for (pkgAcquire::ItemIterator I = fetcher->ItemsBegin(); I != fetcher->ItemsEnd(); I++) { PyObject *Obj; @@ -149,11 +149,11 @@ static PyObject *AcquireAttr(PyObject *Self,char *Name) return List; } // some constants - if(strcmp("ResultContinue",Name) == 0) + if(strcmp("ResultContinue",Name) == 0) return Py_BuildValue("i", pkgAcquire::Continue); - if(strcmp("ResultFailed",Name) == 0) + if(strcmp("ResultFailed",Name) == 0) return Py_BuildValue("i", pkgAcquire::Failed); - if(strcmp("ResultCancelled",Name) == 0) + if(strcmp("ResultCancelled",Name) == 0) return Py_BuildValue("i", pkgAcquire::Cancelled); return Py_FindMethod(PkgAcquireMethods,Self,Name); @@ -201,7 +201,7 @@ PyObject *GetAcquire(PyObject *Self,PyObject *Args) CppPyObject<pkgAcquire*> *FetcherObj = CppPyObject_NEW<pkgAcquire*>(&PkgAcquireType, fetcher); - + return FetcherObj; } @@ -255,8 +255,8 @@ PyObject *GetPkgAcqFile(PyObject *Self, PyObject *Args, PyObject * kwds) "destDir", "destFile", NULL}; if (PyArg_ParseTupleAndKeywords(Args, kwds, "O!s|sissss", kwlist, - &PkgAcquireType, &pyfetcher, &uri, &md5, - &size, &descr, &shortDescr, &destDir, &destFile) == 0) + &PkgAcquireType, &pyfetcher, &uri, &md5, + &size, &descr, &shortDescr, &destDir, &destFile) == 0) return 0; pkgAcquire *fetcher = GetCpp<pkgAcquire*>(pyfetcher); diff --git a/python/apt_instmodule.cc b/python/apt_instmodule.cc index ea703b21..48868d86 100644 --- a/python/apt_instmodule.cc +++ b/python/apt_instmodule.cc @@ -5,10 +5,10 @@ apt_intmodule - Top level for the python module. Create the internal structures for the module in the interpriter. - + Note, this module shares state (particularly global config) with the apt_pkg module. - + ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ @@ -17,7 +17,7 @@ #include <apt-pkg/debfile.h> #include <apt-pkg/error.h> - + #include <sys/stat.h> #include <unistd.h> #include <Python.h> @@ -37,7 +37,7 @@ static PyObject *debExtractControl(PyObject *Self,PyObject *Args) PyObject *File; if (PyArg_ParseTuple(Args,"O!|s",&PyFile_Type,&File,&Member) == 0) return 0; - + // Subscope makes sure any clean up errors are properly handled. PyObject *Res = 0; { @@ -46,13 +46,13 @@ static PyObject *debExtractControl(PyObject *Self,PyObject *Args) debDebFile Deb(Fd); if (_error->PendingError() == true) return HandleErrors(); - + debDebFile::MemControlExtract Extract(Member); if (Extract.Read(Deb) == false) return HandleErrors(); - + // Build the return result - + if (Extract.Control == 0) { Py_INCREF(Py_None); @@ -61,7 +61,7 @@ static PyObject *debExtractControl(PyObject *Self,PyObject *Args) else Res = PyString_FromStringAndSize(Extract.Control,Extract.Length+2); } - + return HandleErrors(Res); } /*}}}*/ @@ -78,11 +78,11 @@ static PyObject *debExtractArchive(PyObject *Self,PyObject *Args) PyObject *File; if (PyArg_ParseTuple(Args,"O!|s",&PyFile_Type,&File,&Rootdir) == 0) return 0; - + // Subscope makes sure any clean up errors are properly handled. bool res = false; { - if(Rootdir != NULL) + if(Rootdir != NULL) { getcwd(cwd, sizeof(cwd)); chdir(Rootdir); @@ -105,7 +105,7 @@ static PyObject *debExtractArchive(PyObject *Self,PyObject *Args) chdir (cwd); if (res == false) return HandleErrors(Py_BuildValue("b",res)); - } + } return HandleErrors(Py_BuildValue("b",res)); } /*}}}*/ @@ -120,13 +120,13 @@ static PyObject *arCheckMember(PyObject *Self,PyObject *Args) PyObject *File; if (PyArg_ParseTuple(Args,"O!s",&PyFile_Type,&File,&Member) == 0) return 0; - + // Open the file and associate the .deb FileFd Fd(fileno(PyFile_AsFile(File)),false); ARArchive AR(Fd); if (_error->PendingError() == true) return HandleErrors(Py_BuildValue("b",res)); - + if(AR.FindMember(Member) != 0) res = true; diff --git a/python/apt_instmodule.h b/python/apt_instmodule.h index c8d09736..45ba5f85 100644 --- a/python/apt_instmodule.h +++ b/python/apt_instmodule.h @@ -4,7 +4,7 @@ /* ###################################################################### Prototypes for the module - + ##################################################################### */ /*}}}*/ #ifndef APT_INSTMODULE_H diff --git a/python/apt_pkgmodule.cc b/python/apt_pkgmodule.cc index 7b13c838..2e488d58 100644 --- a/python/apt_pkgmodule.cc +++ b/python/apt_pkgmodule.cc @@ -5,7 +5,7 @@ apt_pkgmodule - Top level for the python module. Create the internal structures for the module in the interpriter. - + ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ @@ -22,7 +22,7 @@ #include <apt-pkg/sha256.h> #include <apt-pkg/init.h> #include <apt-pkg/pkgsystem.h> - + #include <sys/stat.h> #include <unistd.h> #include <Python.h> @@ -46,16 +46,16 @@ static PyObject *VersionCompare(PyObject *Self,PyObject *Args) char *B; int LenA; int LenB; - + if (PyArg_ParseTuple(Args,"s#s#",&A,&LenA,&B,&LenB) == 0) return 0; - + if (_system == 0) { PyErr_SetString(PyExc_ValueError,"_system not initialized"); return 0; } - + return Py_BuildValue("i",_system->VS->DoCmpVersion(A,A+LenA,B,B+LenB)); } @@ -66,7 +66,7 @@ static PyObject *CheckDep(PyObject *Self,PyObject *Args) char *B; char *OpStr; unsigned int Op = 0; - + if (PyArg_ParseTuple(Args,"sss",&A,&OpStr,&B) == 0) return 0; if (*debListParser::ConvertRelation(OpStr,Op) != 0) @@ -80,7 +80,7 @@ static PyObject *CheckDep(PyObject *Self,PyObject *Args) PyErr_SetString(PyExc_ValueError,"_system not initialized"); return 0; } - + return Py_BuildValue("i",_system->VS->CheckDep(A,Op,B)); // return Py_BuildValue("i",pkgCheckDep(B,A,Op)); } @@ -94,7 +94,7 @@ static PyObject *UpstreamVersion(PyObject *Self,PyObject *Args) return CppPyString(_system->VS->UpstreamVersion(Ver)); } -static char *doc_ParseDepends = +static char *doc_ParseDepends = "ParseDepends(s) -> list of tuples\n" "\n" "The resulting tuples are (Pkg,Ver,Operation). Each anded dependency is a\n" @@ -107,11 +107,11 @@ static PyObject *RealParseDepends(PyObject *Self,PyObject *Args, string Package; string Version; unsigned int Op; - + const char *Start; const char *Stop; int Len; - + if (PyArg_ParseTuple(Args,"s#",&Start,&Len) == 0) return 0; Stop = Start + Len; @@ -121,7 +121,7 @@ static PyObject *RealParseDepends(PyObject *Self,PyObject *Args, { if (Start == Stop) break; - + Start = debListParser::ParseDepends(Start,Stop,Package,Version,Op, ParseArchFlags); if (Start == 0) @@ -130,10 +130,10 @@ static PyObject *RealParseDepends(PyObject *Self,PyObject *Args, Py_DECREF(List); return 0; } - + if (LastRow == 0) LastRow = PyList_New(0); - + if (Package.empty() == false) { PyObject *Obj; @@ -142,7 +142,7 @@ static PyObject *RealParseDepends(PyObject *Self,PyObject *Args, pkgCache::CompTypeDeb(Op))); Py_DECREF(Obj); } - + // Group ORd deps into a single row.. if ((Op & pkgCache::Dep::Or) != pkgCache::Dep::Or) { @@ -150,7 +150,7 @@ static PyObject *RealParseDepends(PyObject *Self,PyObject *Args, PyList_Append(List,LastRow); Py_DECREF(LastRow); LastRow = 0; - } + } } return List; } @@ -171,7 +171,7 @@ static PyObject *md5sum(PyObject *Self,PyObject *Args) PyObject *Obj; if (PyArg_ParseTuple(Args,"O",&Obj) == 0) return 0; - + // Digest of a string. if (PyString_Check(Obj) != 0) { @@ -181,8 +181,8 @@ static PyObject *md5sum(PyObject *Self,PyObject *Args) PyString_AsStringAndSize(Obj, &s, &len); Sum.Add((const unsigned char*)s, len); return CppPyString(Sum.Result().Value()); - } - + } + // Digest of a file if (PyFile_Check(Obj) != 0) { @@ -195,10 +195,10 @@ static PyObject *md5sum(PyObject *Self,PyObject *Args) PyErr_SetFromErrno(PyExc_SystemError); return 0; } - + return CppPyString(Sum.Result().Value()); } - + PyErr_SetString(PyExc_TypeError,"Only understand strings and files"); return 0; } @@ -211,7 +211,7 @@ static PyObject *sha1sum(PyObject *Self,PyObject *Args) PyObject *Obj; if (PyArg_ParseTuple(Args,"O",&Obj) == 0) return 0; - + // Digest of a string. if (PyString_Check(Obj) != 0) { @@ -221,8 +221,8 @@ static PyObject *sha1sum(PyObject *Self,PyObject *Args) PyString_AsStringAndSize(Obj, &s, &len); Sum.Add((const unsigned char*)s, len); return CppPyString(Sum.Result().Value()); - } - + } + // Digest of a file if (PyFile_Check(Obj) != 0) { @@ -235,10 +235,10 @@ static PyObject *sha1sum(PyObject *Self,PyObject *Args) PyErr_SetFromErrno(PyExc_SystemError); return 0; } - + return CppPyString(Sum.Result().Value()); } - + PyErr_SetString(PyExc_TypeError,"Only understand strings and files"); return 0; } @@ -251,7 +251,7 @@ static PyObject *sha256sum(PyObject *Self,PyObject *Args) PyObject *Obj; if (PyArg_ParseTuple(Args,"O",&Obj) == 0) return 0; - + // Digest of a string. if (PyString_Check(Obj) != 0) { @@ -261,8 +261,8 @@ static PyObject *sha256sum(PyObject *Self,PyObject *Args) PyString_AsStringAndSize(Obj, &s, &len); Sum.Add((const unsigned char*)s, len); return CppPyString(Sum.Result().Value()); - } - + } + // Digest of a file if (PyFile_Check(Obj) != 0) { @@ -275,27 +275,27 @@ static PyObject *sha256sum(PyObject *Self,PyObject *Args) PyErr_SetFromErrno(PyExc_SystemError); return 0; } - + return CppPyString(Sum.Result().Value()); } - + PyErr_SetString(PyExc_TypeError,"Only understand strings and files"); return 0; } /*}}}*/ // init - 3 init functions /*{{{*/ // --------------------------------------------------------------------- -static char *doc_Init = +static char *doc_Init = "init() -> None\n" "Legacy. Do InitConfig then parse the command line then do InitSystem\n"; static PyObject *Init(PyObject *Self,PyObject *Args) { if (PyArg_ParseTuple(Args,"") == 0) return 0; - - pkgInitConfig(*_config); + + pkgInitConfig(*_config); pkgInitSystem(*_config,_system); - + Py_INCREF(Py_None); return HandleErrors(Py_None); } @@ -307,9 +307,9 @@ static PyObject *InitConfig(PyObject *Self,PyObject *Args) { if (PyArg_ParseTuple(Args,"") == 0) return 0; - - pkgInitConfig(*_config); - + + pkgInitConfig(*_config); + Py_INCREF(Py_None); return HandleErrors(Py_None); } @@ -321,9 +321,9 @@ static PyObject *InitSystem(PyObject *Self,PyObject *Args) { if (PyArg_ParseTuple(Args,"") == 0) return 0; - + pkgInitSystem(*_config,_system); - + Py_INCREF(Py_None); return HandleErrors(Py_None); } @@ -331,7 +331,7 @@ static PyObject *InitSystem(PyObject *Self,PyObject *Args) // fileutils.cc: GetLock /*{{{*/ // --------------------------------------------------------------------- -static char *doc_GetLock = +static char *doc_GetLock = "GetLock(string) -> int\n" "This will create an empty file of the given name and lock it. Once this" " is done all other calls to GetLock in any other process will fail with" @@ -343,7 +343,7 @@ static PyObject *GetLock(PyObject *Self,PyObject *Args) char errors = false; if (PyArg_ParseTuple(Args,"s|b",&file,&errors) == 0) return 0; - + int fd = GetLock(file, errors); return HandleErrors(Py_BuildValue("i", fd)); @@ -356,9 +356,9 @@ static PyObject *PkgSystemLock(PyObject *Self,PyObject *Args) { if (PyArg_ParseTuple(Args,"") == 0) return 0; - + bool res = _system->Lock(); - + Py_INCREF(Py_None); return HandleErrors(Py_BuildValue("b", res)); } @@ -370,9 +370,9 @@ static PyObject *PkgSystemUnLock(PyObject *Self,PyObject *Args) { if (PyArg_ParseTuple(Args,"") == 0) return 0; - + bool res = _system->UnLock(); - + Py_INCREF(Py_None); return HandleErrors(Py_BuildValue("b", res)); } @@ -382,7 +382,7 @@ static PyObject *PkgSystemUnLock(PyObject *Self,PyObject *Args) // initapt_pkg - Core Module Initialization /*{{{*/ // --------------------------------------------------------------------- /* */ -static PyMethodDef methods[] = +static PyMethodDef methods[] = { // Constructors {"newConfiguration",newConfiguration,METH_VARARGS,doc_newConfiguration}, @@ -404,16 +404,16 @@ static PyMethodDef methods[] = {"ReadConfigFile",LoadConfig,METH_VARARGS,doc_LoadConfig}, {"ReadConfigFileISC",LoadConfigISC,METH_VARARGS,doc_LoadConfig}, {"ParseCommandLine",ParseCommandLine,METH_VARARGS,doc_ParseCommandLine}, - + // Versioning {"VersionCompare",VersionCompare,METH_VARARGS,doc_VersionCompare}, {"CheckDep",CheckDep,METH_VARARGS,doc_CheckDep}, {"UpstreamVersion",UpstreamVersion,METH_VARARGS,doc_UpstreamVersion}, - + // Depends {"ParseDepends",ParseDepends,METH_VARARGS,doc_ParseDepends}, {"ParseSrcDepends",ParseSrcDepends,METH_VARARGS,doc_ParseDepends}, - + // Stuff {"md5sum",md5sum,METH_VARARGS,doc_md5sum}, {"sha1sum",sha1sum,METH_VARARGS,doc_sha1sum}, @@ -473,13 +473,13 @@ extern "C" void initapt_pkg() { PyObject *Module = Py_InitModule("apt_pkg",methods); PyObject *Dict = PyModule_GetDict(Module); - + // Global variable linked to the global configuration class CppPyObject<Configuration *> *Config = CppPyObject_NEW<Configuration *>(&ConfigurationPtrType); Config->Object = _config; PyDict_SetItemString(Dict,"Config",Config); Py_DECREF(Config); - + // Tag file constants PyObject *Obj; PyDict_SetItemString(Dict,"RewritePackageOrder", @@ -488,7 +488,7 @@ extern "C" void initapt_pkg() PyDict_SetItemString(Dict,"RewriteSourceOrder", Obj = CharCharToList(TFRewriteSourceOrder)); Py_DECREF(Obj); - + // Version.. AddStr(Dict,"Version",pkgVersion); AddStr(Dict,"LibVersion",pkgLibVersion); @@ -529,4 +529,4 @@ extern "C" void initapt_pkg() AddInt(Dict,"InstStateHoldReInstReq",pkgCache::State::HoldReInstReq); } /*}}}*/ - + diff --git a/python/apt_pkgmodule.h b/python/apt_pkgmodule.h index 6e02d8e3..38486182 100644 --- a/python/apt_pkgmodule.h +++ b/python/apt_pkgmodule.h @@ -4,7 +4,7 @@ /* ###################################################################### Prototypes for the module - + ##################################################################### */ /*}}}*/ #ifndef APT_PKGMODULE_H @@ -49,7 +49,7 @@ PyObject *StrStringToBool(PyObject *self,PyObject *Args); PyObject *StrTimeRFC1123(PyObject *self,PyObject *Args); PyObject *StrStrToTime(PyObject *self,PyObject *Args); PyObject *StrCheckDomainList(PyObject *Self,PyObject *Args); - + // Cache Stuff extern PyTypeObject PkgCacheType; extern PyTypeObject PkgCacheFileType; diff --git a/python/cache.cc b/python/cache.cc index bd280dec..1c59bece 100644 --- a/python/cache.cc +++ b/python/cache.cc @@ -32,7 +32,7 @@ struct PkgListStruct { pkgCache::PkgIterator Iter; unsigned long LastIndex; - + PkgListStruct(pkgCache::PkgIterator const &I) : Iter(I), LastIndex(0) {} PkgListStruct() {abort();}; // G++ Bug.. }; @@ -43,7 +43,7 @@ struct RDepListStruct pkgCache::DepIterator Start; unsigned long LastIndex; unsigned long Len; - + RDepListStruct(pkgCache::DepIterator const &I) : Iter(I), Start(I), LastIndex(0) { @@ -68,14 +68,14 @@ static PyObject *CreateProvides(PyObject *Owner,pkgCache::PrvIterator I) Ver); PyList_Append(List,Obj); Py_DECREF(Obj); - } + } return List; } // Cache Class /*{{{*/ // --------------------------------------------------------------------- static PyObject *PkgCacheUpdate(PyObject *Self,PyObject *Args) -{ +{ PyObject *CacheFilePy = GetOwner<pkgCache*>(Self); pkgCacheFile *Cache = GetCpp<pkgCacheFile*>(CacheFilePy); @@ -94,7 +94,7 @@ static PyObject *PkgCacheUpdate(PyObject *Self,PyObject *Args) } static PyObject *PkgCacheClose(PyObject *Self,PyObject *Args) -{ +{ PyObject *CacheFilePy = GetOwner<pkgCache*>(Self); pkgCacheFile *Cache = GetCpp<pkgCacheFile*>(CacheFilePy); Cache->Close(); @@ -104,7 +104,7 @@ static PyObject *PkgCacheClose(PyObject *Self,PyObject *Args) } static PyObject *PkgCacheOpen(PyObject *Self,PyObject *Args) -{ +{ PyObject *CacheFilePy = GetOwner<pkgCache*>(Self); pkgCacheFile *Cache = GetCpp<pkgCacheFile*>(CacheFilePy); @@ -134,7 +134,7 @@ static PyObject *PkgCacheOpen(PyObject *Self,PyObject *Args) } -static PyMethodDef PkgCacheMethods[] = +static PyMethodDef PkgCacheMethods[] = { {"Update",PkgCacheUpdate,METH_VARARGS,"Update the cache"}, {"Open", PkgCacheOpen, METH_VARARGS,"Open the cache"}, @@ -145,7 +145,7 @@ static PyMethodDef PkgCacheMethods[] = static PyObject *CacheAttr(PyObject *Self,char *Name) { pkgCache *Cache = GetCpp<pkgCache *>(Self); - + if (strcmp("Packages",Name) == 0) return CppOwnedPyObject_NEW<PkgListStruct>(Self,&PkgListType,Cache->PkgBegin()); else if (strcmp("PackageCount",Name) == 0) @@ -169,7 +169,7 @@ static PyObject *CacheAttr(PyObject *Self,char *Name) Obj = CppOwnedPyObject_NEW<pkgCache::PkgFileIterator>(Self,&PackageFileType,I); PyList_Append(List,Obj); Py_DECREF(Obj); - } + } return List; } @@ -180,15 +180,15 @@ static PyObject *CacheAttr(PyObject *Self,char *Name) static PyObject *CacheMapOp(PyObject *Self,PyObject *Arg) { pkgCache *Cache = GetCpp<pkgCache *>(Self); - + if (PyString_Check(Arg) == 0) { PyErr_SetNone(PyExc_TypeError); return 0; } - + // Search for the package - const char *Name = PyString_AsString(Arg); + const char *Name = PyString_AsString(Arg); pkgCache::PkgIterator Pkg = Cache->FindPkg(Name); if (Pkg.end() == true) { @@ -274,7 +274,7 @@ static PyObject *PkgListItem(PyObject *iSelf,Py_ssize_t Index) Self.LastIndex = 0; Self.Iter = Self.Iter.Cache()->PkgBegin(); } - + while ((unsigned)Index > Self.LastIndex) { Self.LastIndex++; @@ -285,12 +285,12 @@ static PyObject *PkgListItem(PyObject *iSelf,Py_ssize_t Index) return 0; } } - + return CppOwnedPyObject_NEW<pkgCache::PkgIterator>(GetOwner<PkgListStruct>(iSelf),&PackageType, Self.Iter); } -static PySequenceMethods PkgListSeq = +static PySequenceMethods PkgListSeq = { PkgListLen, 0, // concat @@ -298,9 +298,9 @@ static PySequenceMethods PkgListSeq = PkgListItem, 0, // slice 0, // assign item - 0 // assign slice + 0 // assign slice }; - + PyTypeObject PkgListType = { PyObject_HEAD_INIT(&PyType_Type) @@ -320,7 +320,7 @@ PyTypeObject PkgListType = 0, // tp_as_mapping 0, // tp_hash }; - + /*}}}*/ // Package Class /*{{{*/ // --------------------------------------------------------------------- @@ -328,7 +328,7 @@ static PyObject *PackageAttr(PyObject *Self,char *Name) { pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(Self); PyObject *Owner = GetOwner<pkgCache::PkgIterator>(Self); - + if (strcmp("Name",Name) == 0) return PyString_FromString(Pkg.Name()); else if (strcmp("VersionList",Name) == 0) @@ -340,7 +340,7 @@ static PyObject *PackageAttr(PyObject *Self,char *Name) Obj = CppOwnedPyObject_NEW<pkgCache::VerIterator>(Owner,&VersionType,I); PyList_Append(List,Obj); Py_DECREF(Obj); - } + } return List; } else if (strcmp("CurrentVer",Name) == 0) @@ -350,7 +350,7 @@ static PyObject *PackageAttr(PyObject *Self,char *Name) Py_INCREF(Py_None); return Py_None; } - + return CppOwnedPyObject_NEW<pkgCache::VerIterator>(Owner,&VersionType, Pkg.CurrentVer()); } @@ -375,7 +375,7 @@ static PyObject *PackageAttr(PyObject *Self,char *Name) return Py_BuildValue("i",(Pkg->Flags & pkgCache::Flag::Essential) != 0); else if (strcmp("Important",Name) == 0) return Py_BuildValue("i",(Pkg->Flags & pkgCache::Flag::Important) != 0); - + PyErr_SetString(PyExc_AttributeError,Name); return 0; } @@ -383,7 +383,7 @@ static PyObject *PackageAttr(PyObject *Self,char *Name) static PyObject *PackageRepr(PyObject *Self) { pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(Self); - + char S[300]; snprintf(S,sizeof(S),"<pkgCache::Package object: Name:'%s' Section: '%s'" " ID:%u Flags:0x%lX>", @@ -417,7 +417,7 @@ static PyObject *DescriptionAttr(PyObject *Self,char *Name) { pkgCache::DescIterator &Desc = GetCpp<pkgCache::DescIterator>(Self); PyObject *Owner = GetOwner<pkgCache::DescIterator>(Self); - + if (strcmp("LanguageCode",Name) == 0) return PyString_FromString(Desc.LanguageCode()); else if (strcmp("md5",Name) == 0) @@ -425,8 +425,8 @@ static PyObject *DescriptionAttr(PyObject *Self,char *Name) else if (strcmp("FileList",Name) == 0) { /* The second value in the tuple is the index of the VF item. If the - user wants to request a lookup then that number will be used. - Maybe later it can become an object. */ + user wants to request a lookup then that number will be used. + Maybe later it can become an object. */ PyObject *List = PyList_New(0); for (pkgCache::DescFileIterator I = Desc.FileList(); I.end() == false; I++) { @@ -436,7 +436,7 @@ static PyObject *DescriptionAttr(PyObject *Self,char *Name) Obj = Py_BuildValue("Nl",DescFile,I.Index()); PyList_Append(List,Obj); Py_DECREF(Obj); - } + } return List; } PyErr_SetString(PyExc_AttributeError,Name); @@ -446,7 +446,7 @@ static PyObject *DescriptionAttr(PyObject *Self,char *Name) static PyObject *DescriptionRepr(PyObject *Self) { pkgCache::DescIterator &Desc = GetCpp<pkgCache::DescIterator>(Self); - + char S[300]; snprintf(S,sizeof(S), "<pkgCache::Description object: language_code:'%s' md5:'%s' ", @@ -477,14 +477,14 @@ PyTypeObject DescriptionType = // Version Class /*{{{*/ // --------------------------------------------------------------------- -/* This is the simple depends result, the elements are split like +/* This is the simple depends result, the elements are split like ParseDepends does */ static PyObject *MakeDepends(PyObject *Owner,pkgCache::VerIterator &Ver, bool AsObj) { PyObject *Dict = PyDict_New(); PyObject *LastDep = 0; - unsigned LastDepType = 0; + unsigned LastDepType = 0; for (pkgCache::DepIterator D = Ver.DependsList(); D.end() == false;) { pkgCache::DepIterator Start; @@ -498,7 +498,7 @@ static PyObject *MakeDepends(PyObject *Owner,pkgCache::VerIterator &Ver, // it sucks to have it here duplicated, but we get it // translated from libapt and that is certainly not what // we want in a programing interface - const char *Types[] = + const char *Types[] = { "", "Depends","PreDepends","Suggests", "Recommends","Conflicts","Replaces", @@ -512,10 +512,10 @@ static PyObject *MakeDepends(PyObject *Owner,pkgCache::VerIterator &Ver, LastDep = PyList_New(0); PyDict_SetItem(Dict,Dep,LastDep); Py_DECREF(LastDep); - } + } Py_DECREF(Dep); } - + PyObject *OrGroup = PyList_New(0); while (1) { @@ -535,19 +535,19 @@ static PyObject *MakeDepends(PyObject *Owner,pkgCache::VerIterator &Ver, Start.TargetPkg().Name(), Start.TargetVer(), Start.CompType()); - } + } PyList_Append(OrGroup,Obj); Py_DECREF(Obj); - + if (Start == End) break; Start++; } - + PyList_Append(LastDep,OrGroup); Py_DECREF(OrGroup); - } - + } + return Dict; } @@ -555,7 +555,7 @@ static PyObject *VersionAttr(PyObject *Self,char *Name) { pkgCache::VerIterator &Ver = GetCpp<pkgCache::VerIterator>(Self); PyObject *Owner = GetOwner<pkgCache::VerIterator>(Self); - + if (strcmp("VerStr",Name) == 0) return PyString_FromString(Ver.VerStr()); else if (strcmp("Section",Name) == 0) @@ -565,8 +565,8 @@ static PyObject *VersionAttr(PyObject *Self,char *Name) else if (strcmp("FileList",Name) == 0) { /* The second value in the tuple is the index of the VF item. If the - user wants to request a lookup then that number will be used. - Maybe later it can become an object. */ + user wants to request a lookup then that number will be used. + Maybe later it can become an object. */ PyObject *List = PyList_New(0); for (pkgCache::VerFileIterator I = Ver.FileList(); I.end() == false; I++) { @@ -576,7 +576,7 @@ static PyObject *VersionAttr(PyObject *Self,char *Name) Obj = Py_BuildValue("Nl",PkgFile,I.Index()); PyList_Append(List,Obj); Py_DECREF(Obj); - } + } return List; } else if (strcmp("DependsListStr",Name) == 0) @@ -629,7 +629,7 @@ static PyObject *VersionAttr(PyObject *Self,char *Name) static PyObject *VersionRepr(PyObject *Self) { pkgCache::VerIterator &Ver = GetCpp<pkgCache::VerIterator>(Self); - + char S[300]; snprintf(S,sizeof(S),"<pkgCache::Version object: Pkg:'%s' Ver:'%s' " "Section:'%s' Arch:'%s' Size:%lu ISize:%lu Hash:%u " @@ -659,16 +659,16 @@ PyTypeObject VersionType = 0, // tp_as_mapping 0, // tp_hash }; - + /*}}}*/ - + // PackageFile Class /*{{{*/ // --------------------------------------------------------------------- static PyObject *PackageFileAttr(PyObject *Self,char *Name) { pkgCache::PkgFileIterator &File = GetCpp<pkgCache::PkgFileIterator>(Self); // PyObject *Owner = GetOwner<pkgCache::PkgFileIterator>(Self); - + if (strcmp("FileName",Name) == 0) return Safe_FromString(File.FileName()); else if (strcmp("Archive",Name) == 0) @@ -695,7 +695,7 @@ static PyObject *PackageFileAttr(PyObject *Self,char *Name) return Py_BuildValue("i",(File->Flags & pkgCache::Flag::NotAutomatic) != 0); else if (strcmp("ID",Name) == 0) return Py_BuildValue("i",File->ID); - + PyErr_SetString(PyExc_AttributeError,Name); return 0; } @@ -703,7 +703,7 @@ static PyObject *PackageFileAttr(PyObject *Self,char *Name) static PyObject *PackageFileRepr(PyObject *Self) { pkgCache::PkgFileIterator &File = GetCpp<pkgCache::PkgFileIterator>(Self); - + char S[300]; snprintf(S,sizeof(S),"<pkgCache::PackageFile object: " "File:'%s' a=%s,c=%s,v=%s,o=%s,l=%s " @@ -734,7 +734,7 @@ PyTypeObject PackageFileType = 0, // tp_as_mapping 0, // tp_hash }; - + // depends class static PyObject *DependencyRepr(PyObject *Self) @@ -754,7 +754,7 @@ static PyObject *DepSmartTargetPkg(PyObject *Self,PyObject *Args) { if (PyArg_ParseTuple(Args,"") == 0) return 0; - + pkgCache::DepIterator &Dep = GetCpp<pkgCache::DepIterator>(Self); PyObject *Owner = GetOwner<pkgCache::DepIterator>(Self); @@ -764,7 +764,7 @@ static PyObject *DepSmartTargetPkg(PyObject *Self,PyObject *Args) Py_INCREF(Py_None); return Py_None; } - + return CppOwnedPyObject_NEW<pkgCache::PkgIterator>(Owner,&PackageType,P); } @@ -772,7 +772,7 @@ static PyObject *DepAllTargets(PyObject *Self,PyObject *Args) { if (PyArg_ParseTuple(Args,"") == 0) return 0; - + pkgCache::DepIterator &Dep = GetCpp<pkgCache::DepIterator>(Self); PyObject *Owner = GetOwner<pkgCache::DepIterator>(Self); @@ -789,7 +789,7 @@ static PyObject *DepAllTargets(PyObject *Self,PyObject *Args) return List; } -static PyMethodDef DependencyMethods[] = +static PyMethodDef DependencyMethods[] = { {"SmartTargetPkg",DepSmartTargetPkg,METH_VARARGS,"Returns the natural Target or None"}, {"AllTargets",DepAllTargets,METH_VARARGS,"Returns all possible Versions that match this dependency"}, @@ -798,18 +798,18 @@ static PyMethodDef DependencyMethods[] = // Dependency Class /*{{{*/ // --------------------------------------------------------------------- - + static PyObject *DependencyAttr(PyObject *Self,char *Name) { pkgCache::DepIterator &Dep = GetCpp<pkgCache::DepIterator>(Self); PyObject *Owner = GetOwner<pkgCache::DepIterator>(Self); - + if (strcmp("TargetVer",Name) == 0) { if (Dep->Version == 0) return PyString_FromString(""); return PyString_FromString(Dep.TargetVer()); - } + } else if (strcmp("TargetPkg",Name) == 0) return CppOwnedPyObject_NEW<pkgCache::PkgIterator>(Owner,&PackageType, Dep.TargetPkg()); @@ -824,7 +824,7 @@ static PyObject *DependencyAttr(PyObject *Self,char *Name) return PyString_FromString(Dep.DepType()); else if (strcmp("ID",Name) == 0) return Py_BuildValue("i",Dep->ID); - + return Py_FindMethod(DependencyMethods,Self,Name); } @@ -847,7 +847,7 @@ PyTypeObject DependencyType = 0, // tp_as_mapping 0, // tp_hash }; - + /*}}}*/ /*}}}*/ // Reverse Dependency List Class /*{{{*/ @@ -865,13 +865,13 @@ static PyObject *RDepListItem(PyObject *iSelf,Py_ssize_t Index) PyErr_SetNone(PyExc_IndexError); return 0; } - + if ((unsigned)Index < Self.LastIndex) { Self.LastIndex = 0; Self.Iter = Self.Start; } - + while ((unsigned)Index > Self.LastIndex) { Self.LastIndex++; @@ -882,12 +882,12 @@ static PyObject *RDepListItem(PyObject *iSelf,Py_ssize_t Index) return 0; } } - + return CppOwnedPyObject_NEW<pkgCache::DepIterator>(GetOwner<RDepListStruct>(iSelf), &DependencyType,Self.Iter); } -static PySequenceMethods RDepListSeq = +static PySequenceMethods RDepListSeq = { RDepListLen, 0, // concat @@ -895,9 +895,9 @@ static PySequenceMethods RDepListSeq = RDepListItem, 0, // slice 0, // assign item - 0 // assign slice + 0 // assign slice }; - + PyTypeObject RDepListType = { PyObject_HEAD_INIT(&PyType_Type) @@ -917,7 +917,7 @@ PyTypeObject RDepListType = 0, // tp_as_mapping 0, // tp_hash }; - + /*}}}*/ @@ -948,7 +948,7 @@ PyObject *TmpGetCache(PyObject *Self,PyObject *Args) CppOwnedPyObject<pkgCacheFile*> *CacheFileObj = CppOwnedPyObject_NEW<pkgCacheFile*>(0,&PkgCacheFileType, Cache); - + CppOwnedPyObject<pkgCache *> *CacheObj = CppOwnedPyObject_NEW<pkgCache *>(CacheFileObj,&PkgCacheType, (pkgCache *)(*Cache)); diff --git a/python/cdrom.cc b/python/cdrom.cc index aca1be26..0831548e 100644 --- a/python/cdrom.cc +++ b/python/cdrom.cc @@ -19,7 +19,7 @@ struct PkgCdromStruct }; static PyObject *PkgCdromAdd(PyObject *Self,PyObject *Args) -{ +{ PkgCdromStruct &Struct = GetCpp<PkgCdromStruct>(Self); PyObject *pyCdromProgressInst = 0; @@ -32,11 +32,11 @@ static PyObject *PkgCdromAdd(PyObject *Self,PyObject *Args) bool res = Struct.cdrom.Add(&progress); - return HandleErrors(Py_BuildValue("b", res)); + return HandleErrors(Py_BuildValue("b", res)); } static PyObject *PkgCdromIdent(PyObject *Self,PyObject *Args) -{ +{ PkgCdromStruct &Struct = GetCpp<PkgCdromStruct>(Self); PyObject *pyCdromProgressInst = 0; @@ -52,11 +52,11 @@ static PyObject *PkgCdromIdent(PyObject *Self,PyObject *Args) PyObject *result = Py_BuildValue("(bs)", res, ident.c_str()); - return HandleErrors(result); + return HandleErrors(result); } -static PyMethodDef PkgCdromMethods[] = +static PyMethodDef PkgCdromMethods[] = { {"Add",PkgCdromAdd,METH_VARARGS,"Add a cdrom"}, {"Ident",PkgCdromIdent,METH_VARARGS,"Ident a cdrom"}, @@ -100,7 +100,7 @@ PyObject *GetCdrom(PyObject *Self,PyObject *Args) CppOwnedPyObject<pkgCdrom> *CdromObj = CppOwnedPyObject_NEW<pkgCdrom>(0,&PkgCdromType, *cdrom); - + return CdromObj; } diff --git a/python/configuration.cc b/python/configuration.cc index 55eac1bf..f52c3c97 100644 --- a/python/configuration.cc +++ b/python/configuration.cc @@ -10,10 +10,10 @@ ConfigurationPtr - A pointer to a configuration instance, used only for the global instance (_config) ConfigurationSub - A subtree - has a reference to its owner. - + The wrapping is mostly 1:1 with the C++ code, but there are additions to - wrap the linked tree walking into nice flat sequence walking. - + wrap the linked tree walking into nice flat sequence walking. + ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ @@ -113,7 +113,7 @@ static PyObject *CnfSet(PyObject *Self,PyObject *Args) char *Value = 0; if (PyArg_ParseTuple(Args,"ss",&Name,&Value) == 0) return 0; - + GetSelf(Self).Set(Name,Value); Py_INCREF(Py_None); return Py_None; @@ -134,9 +134,9 @@ static PyObject *CnfClear(PyObject *Self,PyObject *Args) char *Name = 0; if (PyArg_ParseTuple(Args,"s",&Name) == 0) return 0; - + GetSelf(Self).Clear(Name); - + Py_INCREF(Py_None); return Py_None; } @@ -170,7 +170,7 @@ static PyObject *CnfList(PyObject *Self,PyObject *Args) char *RootName = 0; if (PyArg_ParseTuple(Args,"|s",&RootName) == 0) return 0; - + // Convert the whole configuration space into a list PyObject *List = PyList_New(0); const Configuration::Item *Top = GetSelf(Self).Tree(RootName); @@ -180,10 +180,10 @@ static PyObject *CnfList(PyObject *Self,PyObject *Args) for (; Top != 0; Top = Top->Next) { PyObject *Obj; - PyList_Append(List,Obj = CppPyString(Top->FullTag(Root))); + PyList_Append(List,Obj = CppPyString(Top->FullTag(Root))); Py_DECREF(Obj); } - + return List; } @@ -195,7 +195,7 @@ static PyObject *CnfValueList(PyObject *Self,PyObject *Args) char *RootName = 0; if (PyArg_ParseTuple(Args,"|s",&RootName) == 0) return 0; - + // Convert the whole configuration space into a list PyObject *List = PyList_New(0); const Configuration::Item *Top = GetSelf(Self).Tree(RootName); @@ -207,7 +207,7 @@ static PyObject *CnfValueList(PyObject *Self,PyObject *Args) PyList_Append(List,Obj = CppPyString(Top->Value)); Py_DECREF(Obj); } - + return List; } @@ -216,7 +216,7 @@ static PyObject *CnfMyTag(PyObject *Self,PyObject *Args) { if (PyArg_ParseTuple(Args,"") == 0) return 0; - + const Configuration::Item *Top = GetSelf(Self).Tree(0); if (Top == 0) return Py_BuildValue("s",""); @@ -230,7 +230,7 @@ static PyObject *CnfKeys(PyObject *Self,PyObject *Args) char *RootName = 0; if (PyArg_ParseTuple(Args,"|s",&RootName) == 0) return 0; - + // Convert the whole configuration space into a list PyObject *List = PyList_New(0); const Configuration::Item *Top = GetSelf(Self).Tree(RootName); @@ -241,17 +241,17 @@ static PyObject *CnfKeys(PyObject *Self,PyObject *Args) if (Top != 0) Root = GetSelf(Self).Tree(0)->Parent; for (; Top != 0;) - { + { PyObject *Obj; PyList_Append(List,Obj = CppPyString(Top->FullTag(Root))); Py_DECREF(Obj); - + if (Top->Child != 0) { Top = Top->Child; continue; } - + while (Top != 0 && Top->Next == 0 && Top != Root && Top->Parent != Stop) Top = Top->Parent; @@ -270,13 +270,13 @@ static PyObject *CnfMap(PyObject *Self,PyObject *Arg) PyErr_SetNone(PyExc_TypeError); return 0; } - + if (GetSelf(Self).Exists(PyString_AsString(Arg)) == false) - { + { PyErr_SetString(PyExc_KeyError,PyString_AsString(Arg)); return 0; } - + return CppPyString(GetSelf(Self).Find(PyString_AsString(Arg))); } @@ -288,7 +288,7 @@ static int CnfMapSet(PyObject *Self,PyObject *Arg,PyObject *Val) PyErr_SetNone(PyExc_TypeError); return -1; } - + GetSelf(Self).Set(PyString_AsString(Arg),PyString_AsString(Val)); return 0; } @@ -305,10 +305,10 @@ PyObject *LoadConfig(PyObject *Self,PyObject *Args) PyErr_SetString(PyExc_TypeError,"argument 1: expected Configuration."); return 0; } - + if (ReadConfigFile(GetSelf(Self),Name,false) == false) return HandleErrors(); - + Py_INCREF(Py_None); return HandleErrors(Py_None); } @@ -323,10 +323,10 @@ PyObject *LoadConfigISC(PyObject *Self,PyObject *Args) PyErr_SetString(PyExc_TypeError,"argument 1: expected Configuration."); return 0; } - + if (ReadConfigFile(GetSelf(Self),Name,true) == false) return HandleErrors(); - + Py_INCREF(Py_None); return HandleErrors(Py_None); } @@ -336,7 +336,7 @@ PyObject *LoadConfigISC(PyObject *Self,PyObject *Args) // --------------------------------------------------------------------- char *doc_ParseCommandLine = "ParseCommandLine(Configuration,ListOfOptions,List-argv) -> List\n" -"\n" +"\n" "This function is like getopt except it manipulates a configuration space.\n" "output is a list of non-option arguments (filenames, etc).\n" "ListOfOptions is a list of tuples of the form:\n" @@ -355,13 +355,13 @@ PyObject *ParseCommandLine(PyObject *Self,PyObject *Args) PyErr_SetString(PyExc_TypeError,"argument 1: expected Configuration."); return 0; } - + // Convert the option list int Length = PySequence_Length(POList); CommandLine::Args *OList = new CommandLine::Args[Length+1]; OList[Length].ShortOpt = 0; OList[Length].LongOpt = 0; - + for (int I = 0; I != Length; I++) { char *Type = 0; @@ -373,7 +373,7 @@ PyObject *ParseCommandLine(PyObject *Self,PyObject *Args) return 0; } OList[I].Flags = 0; - + // Convert the type over to flags.. if (Type != 0) { @@ -389,7 +389,7 @@ PyObject *ParseCommandLine(PyObject *Self,PyObject *Args) OList[I].Flags = CommandLine::ConfigFile; else if (strcasecmp(Type,"ArbItem") == 0) OList[I].Flags = CommandLine::ArbItem; - } + } } // Convert the argument list into a char ** @@ -399,7 +399,7 @@ PyObject *ParseCommandLine(PyObject *Self,PyObject *Args) delete [] OList; return 0; } - + // Do the command line processing PyObject *List = 0; { @@ -410,16 +410,16 @@ PyObject *ParseCommandLine(PyObject *Self,PyObject *Args) delete [] OList; return HandleErrors(); } - + // Convert the file listing into a python sequence for (Length = 0; CmdL.FileList[Length] != 0; Length++); - List = PyList_New(Length); + List = PyList_New(Length); for (int I = 0; CmdL.FileList[I] != 0; I++) { PyList_SetItem(List,I,PyString_FromString(CmdL.FileList[I])); - } + } } - + delete [] argv; delete [] OList; return HandleErrors(List); @@ -427,7 +427,7 @@ PyObject *ParseCommandLine(PyObject *Self,PyObject *Args) /*}}}*/ // Method table for the Configuration object -static PyMethodDef CnfMethods[] = +static PyMethodDef CnfMethods[] = { // Query {"Find",CnfFind,METH_VARARGS,doc_Find}, @@ -444,7 +444,7 @@ static PyMethodDef CnfMethods[] = {"ValueList",CnfValueList,METH_VARARGS,doc_ValueList}, {"MyTag",CnfMyTag,METH_VARARGS,doc_MyTag}, {"Clear",CnfClear,METH_VARARGS,doc_Clear}, - + // Python Special {"keys",CnfKeys,METH_VARARGS,doc_Keys}, {"has_key",CnfExists,METH_VARARGS,doc_Exists}, @@ -462,7 +462,7 @@ static PyObject *CnfGetAttr(PyObject *Self,char *Name) // Type for a Normal Configuration object static PyMappingMethods ConfigurationMap = {0,CnfMap,CnfMapSet}; -PyTypeObject ConfigurationType = +PyTypeObject ConfigurationType = { PyObject_HEAD_INIT(&PyType_Type) 0, // ob_size @@ -481,8 +481,8 @@ PyTypeObject ConfigurationType = &ConfigurationMap, // tp_as_mapping 0, // tp_hash }; - -PyTypeObject ConfigurationPtrType = + +PyTypeObject ConfigurationPtrType = { PyObject_HEAD_INIT(&PyType_Type) 0, // ob_size @@ -501,7 +501,7 @@ PyTypeObject ConfigurationPtrType = &ConfigurationMap, // tp_as_mapping 0, // tp_hash }; - + PyTypeObject ConfigurationSubType = { PyObject_HEAD_INIT(&PyType_Type) @@ -521,4 +521,4 @@ PyTypeObject ConfigurationSubType = &ConfigurationMap, // tp_as_mapping 0, // tp_hash }; - + diff --git a/python/depcache.cc b/python/depcache.cc index 2446dc71..0e83c956 100644 --- a/python/depcache.cc +++ b/python/depcache.cc @@ -39,7 +39,7 @@ static PyObject *PkgDepCacheInit(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); PyObject *pyCallbackInst = 0; @@ -57,18 +57,18 @@ static PyObject *PkgDepCacheInit(PyObject *Self,PyObject *Args) pkgApplyStatus(*depcache); Py_INCREF(Py_None); - return HandleErrors(Py_None); + return HandleErrors(Py_None); } static PyObject *PkgDepCacheCommit(PyObject *Self,PyObject *Args) -{ +{ PyObject *result; pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); PyObject *pyInstallProgressInst = 0; PyObject *pyFetchProgressInst = 0; - if (PyArg_ParseTuple(Args, "OO", + if (PyArg_ParseTuple(Args, "OO", &pyFetchProgressInst, &pyInstallProgressInst) == 0) { return 0; } @@ -78,7 +78,7 @@ static PyObject *PkgDepCacheCommit(PyObject *Self,PyObject *Args) if (_error->PendingError() == true) return HandleErrors(); } - + pkgRecords Recs(*depcache); if (_error->PendingError() == true) HandleErrors(Py_None); @@ -108,22 +108,22 @@ static PyObject *PkgDepCacheCommit(PyObject *Self,PyObject *Args) while (1) { bool Transient = false; - + if (Fetcher.Run() == pkgAcquire::Failed) return false; - + // Print out errors bool Failed = false; for (pkgAcquire::ItemIterator I = Fetcher.ItemsBegin(); I != Fetcher.ItemsEnd(); I++) { - - //std::cout << "looking at: " << (*I)->DestFile + + //std::cout << "looking at: " << (*I)->DestFile // << " status: " << (*I)->Status << std::endl; if ((*I)->Status == pkgAcquire::Item::StatDone && (*I)->Complete == true) continue; - + if ((*I)->Status == pkgAcquire::Item::StatIdle) { //std::cout << "transient failure" << std::endl; @@ -146,7 +146,7 @@ static PyObject *PkgDepCacheCommit(PyObject *Self,PyObject *Args) Py_INCREF(Py_None); return HandleErrors(Py_None); } - + // Try to deal with missing package files if (Failed == true && PM->FixMissing() == false) { @@ -156,9 +156,9 @@ static PyObject *PkgDepCacheCommit(PyObject *Self,PyObject *Args) return HandleErrors(Py_None); } - // fail if something else went wrong - //FIXME: make this more flexible, e.g. with a failedDl handler - if(Failed) + // fail if something else went wrong + //FIXME: make this more flexible, e.g. with a failedDl handler + if(Failed) return Py_BuildValue("b", false); _system->UnLock(true); @@ -174,25 +174,25 @@ static PyObject *PkgDepCacheCommit(PyObject *Self,PyObject *Args) } //std::cout << "looping again, install unfinished" << std::endl; - + // Reload the fetcher object and loop again for media swapping Fetcher.Shutdown(); if (PM->GetArchives(&Fetcher,&List,&Recs) == false) { return Py_BuildValue("b", false); } _system->Lock(); - } - + } + return HandleErrors(Py_None); } static PyObject *PkgDepCacheSetCandidateVer(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); PyObject *PackageObj; PyObject *VersionObj; if (PyArg_ParseTuple(Args,"O!O!", - &PackageType, &PackageObj, + &PackageType, &PackageObj, &VersionType, &VersionObj) == 0) return 0; @@ -202,12 +202,12 @@ static PyObject *PkgDepCacheSetCandidateVer(PyObject *Self,PyObject *Args) return HandleErrors(Py_BuildValue("b",false)); } depcache->SetCandidateVersion(I); - + return HandleErrors(Py_BuildValue("b",true)); } static PyObject *PkgDepCacheGetCandidateVer(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); PyObject *PackageObj; PyObject *CandidateObj; @@ -228,7 +228,7 @@ static PyObject *PkgDepCacheGetCandidateVer(PyObject *Self,PyObject *Args) } static PyObject *PkgDepCacheUpgrade(PyObject *Self,PyObject *Args) -{ +{ bool res; pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); @@ -244,11 +244,11 @@ static PyObject *PkgDepCacheUpgrade(PyObject *Self,PyObject *Args) Py_END_ALLOW_THREADS Py_INCREF(Py_None); - return HandleErrors(Py_BuildValue("b",res)); + return HandleErrors(Py_BuildValue("b",res)); } static PyObject *PkgDepCacheMinimizeUpgrade(PyObject *Self,PyObject *Args) -{ +{ bool res; pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); @@ -260,33 +260,33 @@ static PyObject *PkgDepCacheMinimizeUpgrade(PyObject *Self,PyObject *Args) Py_END_ALLOW_THREADS Py_INCREF(Py_None); - return HandleErrors(Py_BuildValue("b",res)); + return HandleErrors(Py_BuildValue("b",res)); } static PyObject *PkgDepCacheReadPinFile(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); - + char *file=NULL; if (PyArg_ParseTuple(Args,"|s",&file) == 0) return 0; - if(file == NULL) + if(file == NULL) ReadPinFile((pkgPolicy&)depcache->GetPolicy()); else ReadPinFile((pkgPolicy&)depcache->GetPolicy(), file); Py_INCREF(Py_None); - return HandleErrors(Py_None); + return HandleErrors(Py_None); } static PyObject *PkgDepCacheFixBroken(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); - + bool res=true; if (PyArg_ParseTuple(Args,"") == 0) return 0; @@ -294,12 +294,12 @@ static PyObject *PkgDepCacheFixBroken(PyObject *Self,PyObject *Args) res &=pkgFixBroken(*depcache); res &=pkgMinimizeUpgrade(*depcache); - return HandleErrors(Py_BuildValue("b",res)); + return HandleErrors(Py_BuildValue("b",res)); } static PyObject *PkgDepCacheMarkKeep(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache *depcache = GetCpp<pkgDepCache*>(Self); PyObject *PackageObj; @@ -310,11 +310,11 @@ static PyObject *PkgDepCacheMarkKeep(PyObject *Self,PyObject *Args) depcache->MarkKeep(Pkg); Py_INCREF(Py_None); - return HandleErrors(Py_None); + return HandleErrors(Py_None); } static PyObject *PkgDepCacheSetReInstall(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache *depcache = GetCpp<pkgDepCache*>(Self); PyObject *PackageObj; @@ -326,12 +326,12 @@ static PyObject *PkgDepCacheSetReInstall(PyObject *Self,PyObject *Args) depcache->SetReInstall(Pkg,value); Py_INCREF(Py_None); - return HandleErrors(Py_None); + return HandleErrors(Py_None); } static PyObject *PkgDepCacheMarkDelete(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); PyObject *PackageObj; @@ -343,18 +343,18 @@ static PyObject *PkgDepCacheMarkDelete(PyObject *Self,PyObject *Args) depcache->MarkDelete(Pkg,purge); Py_INCREF(Py_None); - return HandleErrors(Py_None); + return HandleErrors(Py_None); } static PyObject *PkgDepCacheMarkInstall(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); PyObject *PackageObj; char autoInst=1; char fromUser=1; - if (PyArg_ParseTuple(Args,"O!|bb",&PackageType,&PackageObj, + if (PyArg_ParseTuple(Args,"O!|bb",&PackageType,&PackageObj, &autoInst, &fromUser) == 0) return 0; @@ -364,11 +364,11 @@ static PyObject *PkgDepCacheMarkInstall(PyObject *Self,PyObject *Args) Py_END_ALLOW_THREADS Py_INCREF(Py_None); - return HandleErrors(Py_None); + return HandleErrors(Py_None); } static PyObject *PkgDepCacheIsUpgradable(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); PyObject *PackageObj; @@ -378,11 +378,11 @@ static PyObject *PkgDepCacheIsUpgradable(PyObject *Self,PyObject *Args) pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(PackageObj); pkgDepCache::StateCache &state = (*depcache)[Pkg]; - return HandleErrors(Py_BuildValue("b",state.Upgradable())); + return HandleErrors(Py_BuildValue("b",state.Upgradable())); } static PyObject *PkgDepCacheIsGarbage(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); PyObject *PackageObj; @@ -392,11 +392,11 @@ static PyObject *PkgDepCacheIsGarbage(PyObject *Self,PyObject *Args) pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(PackageObj); pkgDepCache::StateCache &state = (*depcache)[Pkg]; - return HandleErrors(Py_BuildValue("b",state.Garbage)); + return HandleErrors(Py_BuildValue("b",state.Garbage)); } static PyObject *PkgDepCacheIsAutoInstalled(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); PyObject *PackageObj; @@ -406,11 +406,11 @@ static PyObject *PkgDepCacheIsAutoInstalled(PyObject *Self,PyObject *Args) pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(PackageObj); pkgDepCache::StateCache &state = (*depcache)[Pkg]; - return HandleErrors(Py_BuildValue("b",state.Flags & pkgCache::Flag::Auto)); + return HandleErrors(Py_BuildValue("b",state.Flags & pkgCache::Flag::Auto)); } static PyObject *PkgDepCacheIsNowBroken(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); PyObject *PackageObj; @@ -420,11 +420,11 @@ static PyObject *PkgDepCacheIsNowBroken(PyObject *Self,PyObject *Args) pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(PackageObj); pkgDepCache::StateCache &state = (*depcache)[Pkg]; - return HandleErrors(Py_BuildValue("b",state.NowBroken())); + return HandleErrors(Py_BuildValue("b",state.NowBroken())); } static PyObject *PkgDepCacheIsInstBroken(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); PyObject *PackageObj; @@ -434,12 +434,12 @@ static PyObject *PkgDepCacheIsInstBroken(PyObject *Self,PyObject *Args) pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(PackageObj); pkgDepCache::StateCache &state = (*depcache)[Pkg]; - return HandleErrors(Py_BuildValue("b",state.InstBroken())); + return HandleErrors(Py_BuildValue("b",state.InstBroken())); } static PyObject *PkgDepCacheMarkedInstall(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); PyObject *PackageObj; @@ -449,12 +449,12 @@ static PyObject *PkgDepCacheMarkedInstall(PyObject *Self,PyObject *Args) pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(PackageObj); pkgDepCache::StateCache &state = (*depcache)[Pkg]; - return HandleErrors(Py_BuildValue("b",state.NewInstall())); + return HandleErrors(Py_BuildValue("b",state.NewInstall())); } static PyObject *PkgDepCacheMarkedUpgrade(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); PyObject *PackageObj; @@ -464,11 +464,11 @@ static PyObject *PkgDepCacheMarkedUpgrade(PyObject *Self,PyObject *Args) pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(PackageObj); pkgDepCache::StateCache &state = (*depcache)[Pkg]; - return HandleErrors(Py_BuildValue("b",state.Upgrade())); + return HandleErrors(Py_BuildValue("b",state.Upgrade())); } static PyObject *PkgDepCacheMarkedDelete(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); PyObject *PackageObj; @@ -478,11 +478,11 @@ static PyObject *PkgDepCacheMarkedDelete(PyObject *Self,PyObject *Args) pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(PackageObj); pkgDepCache::StateCache &state = (*depcache)[Pkg]; - return HandleErrors(Py_BuildValue("b",state.Delete())); + return HandleErrors(Py_BuildValue("b",state.Delete())); } static PyObject *PkgDepCacheMarkedKeep(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); PyObject *PackageObj; @@ -492,11 +492,11 @@ static PyObject *PkgDepCacheMarkedKeep(PyObject *Self,PyObject *Args) pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(PackageObj); pkgDepCache::StateCache &state = (*depcache)[Pkg]; - return HandleErrors(Py_BuildValue("b",state.Keep())); + return HandleErrors(Py_BuildValue("b",state.Keep())); } static PyObject *PkgDepCacheMarkedDowngrade(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); PyObject *PackageObj; @@ -506,11 +506,11 @@ static PyObject *PkgDepCacheMarkedDowngrade(PyObject *Self,PyObject *Args) pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(PackageObj); pkgDepCache::StateCache &state = (*depcache)[Pkg]; - return HandleErrors(Py_BuildValue("b",state.Downgrade())); + return HandleErrors(Py_BuildValue("b",state.Downgrade())); } static PyObject *PkgDepCacheMarkedReinstall(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); PyObject *PackageObj; @@ -522,11 +522,11 @@ static PyObject *PkgDepCacheMarkedReinstall(PyObject *Self,PyObject *Args) bool res = state.Install() && (state.iFlags & pkgDepCache::ReInstall); - return HandleErrors(Py_BuildValue("b",res)); + return HandleErrors(Py_BuildValue("b",res)); } -static PyMethodDef PkgDepCacheMethods[] = +static PyMethodDef PkgDepCacheMethods[] = { {"Init",PkgDepCacheInit,METH_VARARGS,"Init the depcache (done on construct automatically)"}, {"GetCandidateVer",PkgDepCacheGetCandidateVer,METH_VARARGS,"Get candidate version"}, @@ -566,20 +566,20 @@ static PyObject *DepCacheAttr(PyObject *Self,char *Name) pkgDepCache *depcache = GetCpp<pkgDepCache *>(Self); // size querries - if(strcmp("KeepCount",Name) == 0) + if(strcmp("KeepCount",Name) == 0) return Py_BuildValue("l", depcache->KeepCount()); - else if(strcmp("InstCount",Name) == 0) + else if(strcmp("InstCount",Name) == 0) return Py_BuildValue("l", depcache->InstCount()); - else if(strcmp("DelCount",Name) == 0) + else if(strcmp("DelCount",Name) == 0) return Py_BuildValue("l", depcache->DelCount()); - else if(strcmp("BrokenCount",Name) == 0) + else if(strcmp("BrokenCount",Name) == 0) return Py_BuildValue("l", depcache->BrokenCount()); - else if(strcmp("UsrSize",Name) == 0) + else if(strcmp("UsrSize",Name) == 0) return Py_BuildValue("d", depcache->UsrSize()); - else if(strcmp("DebSize",Name) == 0) + else if(strcmp("DebSize",Name) == 0) return Py_BuildValue("d", depcache->DebSize()); - - + + return Py_FindMethod(PkgDepCacheMethods,Self,Name); } @@ -660,7 +660,7 @@ PyObject *GetPkgProblemResolver(PyObject *Self,PyObject *Args) static PyObject *PkgProblemResolverResolve(PyObject *Self,PyObject *Args) -{ +{ bool res; pkgProblemResolver *fixer = GetCpp<pkgProblemResolver *>(Self); @@ -676,7 +676,7 @@ static PyObject *PkgProblemResolverResolve(PyObject *Self,PyObject *Args) } static PyObject *PkgProblemResolverResolveByKeep(PyObject *Self,PyObject *Args) -{ +{ bool res; pkgProblemResolver *fixer = GetCpp<pkgProblemResolver *>(Self); if (PyArg_ParseTuple(Args,"") == 0) @@ -690,7 +690,7 @@ static PyObject *PkgProblemResolverResolveByKeep(PyObject *Self,PyObject *Args) } static PyObject *PkgProblemResolverProtect(PyObject *Self,PyObject *Args) -{ +{ pkgProblemResolver *fixer = GetCpp<pkgProblemResolver *>(Self); PyObject *PackageObj; if (PyArg_ParseTuple(Args,"O!",&PackageType,&PackageObj) == 0) @@ -710,11 +710,11 @@ static PyObject *PkgProblemResolverRemove(PyObject *Self,PyObject *Args) pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(PackageObj); fixer->Remove(Pkg); Py_INCREF(Py_None); - return HandleErrors(Py_None); + return HandleErrors(Py_None); } static PyObject *PkgProblemResolverClear(PyObject *Self,PyObject *Args) -{ +{ pkgProblemResolver *fixer = GetCpp<pkgProblemResolver *>(Self); PyObject *PackageObj; if (PyArg_ParseTuple(Args,"O!",&PackageType,&PackageObj) == 0) @@ -722,11 +722,11 @@ static PyObject *PkgProblemResolverClear(PyObject *Self,PyObject *Args) pkgCache::PkgIterator &Pkg = GetCpp<pkgCache::PkgIterator>(PackageObj); fixer->Clear(Pkg); Py_INCREF(Py_None); - return HandleErrors(Py_None); -} + return HandleErrors(Py_None); +} static PyObject *PkgProblemResolverInstallProtect(PyObject *Self,PyObject *Args) -{ +{ pkgProblemResolver *fixer = GetCpp<pkgProblemResolver *>(Self); if (PyArg_ParseTuple(Args,"") == 0) return 0; @@ -735,7 +735,7 @@ static PyObject *PkgProblemResolverInstallProtect(PyObject *Self,PyObject *Args) return HandleErrors(Py_None); } -static PyMethodDef PkgProblemResolverMethods[] = +static PyMethodDef PkgProblemResolverMethods[] = { // config {"Protect", PkgProblemResolverProtect, METH_VARARGS, "Protect(PkgIterator)"}, @@ -753,7 +753,7 @@ static PyMethodDef PkgProblemResolverMethods[] = static PyObject *ProblemResolverAttr(PyObject *Self,char *Name) { pkgProblemResolver *fixer = GetCpp<pkgProblemResolver *>(Self); - + return Py_FindMethod(PkgProblemResolverMethods,Self,Name); } @@ -785,7 +785,7 @@ PyTypeObject PkgProblemResolverType = static PyObject *PkgActionGroupRelease(PyObject *Self,PyObject *Args) -{ +{ pkgDepCache::ActionGroup *ag = GetCpp<pkgDepCache::ActionGroup*>(Self); if (PyArg_ParseTuple(Args,"") == 0) return 0; @@ -794,7 +794,7 @@ static PyObject *PkgActionGroupRelease(PyObject *Self,PyObject *Args) return HandleErrors(Py_None); } -static PyMethodDef PkgActionGroupMethods[] = +static PyMethodDef PkgActionGroupMethods[] = { {"release", PkgActionGroupRelease, METH_VARARGS, "release()"}, {} @@ -804,7 +804,7 @@ static PyMethodDef PkgActionGroupMethods[] = static PyObject *ActionGroupAttr(PyObject *Self,char *Name) { pkgDepCache::ActionGroup *ag = GetCpp<pkgDepCache::ActionGroup*>(Self); - + return Py_FindMethod(PkgActionGroupMethods,Self,Name); } diff --git a/python/generic.cc b/python/generic.cc index 044569b9..7309d978 100644 --- a/python/generic.cc +++ b/python/generic.cc @@ -4,7 +4,7 @@ /* ###################################################################### generic - Some handy functions to make integration a tad simpler - + ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ @@ -24,10 +24,10 @@ PyObject *HandleErrors(PyObject *Res) _error->Discard(); return Res; } - + if (Res != 0) Py_DECREF(Res); - + string Err; int errcnt = 0; while (_error->empty() == false) @@ -55,7 +55,7 @@ const char **ListToCharChar(PyObject *List,bool NullTerm) int Length = PySequence_Length(List); const char **Res = new const char *[Length + (NullTerm == true?1:0)]; for (int I = 0; I != Length; I++) - { + { PyObject *Itm = PySequence_GetItem(List,I); if (PyString_Check(Itm) == 0) { @@ -80,12 +80,12 @@ PyObject *CharCharToList(const char **List,unsigned long Size) for (const char **I = List; *I != 0; I++) Size++; } - + // Convert the whole configuration space into a list PyObject *PList = PyList_New(Size); for (unsigned long I = 0; I != Size; I++, List++) PyList_SetItem(PList,I,PyString_FromString(*List)); - + return PList; } /*}}}*/ diff --git a/python/generic.h b/python/generic.h index a1b662bb..ce79a54c 100644 --- a/python/generic.h +++ b/python/generic.h @@ -4,24 +4,24 @@ /* ###################################################################### generic - Some handy functions to make integration a tad simpler - - Python needs this little _HEAD tacked onto the front of the object.. + + Python needs this little _HEAD tacked onto the front of the object.. This complicates the integration with C++. We use some templates to make that quite transparent to us. It would have been nice if Python internally used a page from the C++ ref counting book to hide its little header from the world, but it doesn't. - The CppPyObject has the target object and the Python header, this is - needed to ensure proper alignment. + The CppPyObject has the target object and the Python header, this is + needed to ensure proper alignment. GetCpp returns the C++ object from a PyObject. CppPyObject_NEW creates the Python object and then uses placement new to init the C++ class.. This is good for simple situations and as an example on how to do it in other more specific cases. - CppPyObject_Dealloc should be used in the Type as the destructor + CppPyObject_Dealloc should be used in the Type as the destructor function. HandleErrors converts errors from the internal _error stack into Python exceptions and makes sure the _error stack is empty. - + ##################################################################### */ /*}}}*/ #ifndef GENERIC_H @@ -38,7 +38,7 @@ typedef int Py_ssize_t; template <class T> struct CppPyObject : public PyObject { // We are only using CppPyObject and friends as dumb structs only, ie the - // c'tor is never called. + // c'tor is never called. // However if T doesn't have a default c'tor C++ doesn't generate one for // CppPyObject (since it can't know how it should initialize Object). // diff --git a/python/indexfile.cc b/python/indexfile.cc index 4e32f2ab..107eae27 100644 --- a/python/indexfile.cc +++ b/python/indexfile.cc @@ -16,7 +16,7 @@ #include <Python.h> static PyObject *PackageIndexFileArchiveURI(PyObject *Self,PyObject *Args) -{ +{ pkgIndexFile *File = GetCpp<pkgIndexFile*>(Self); char *path; @@ -26,7 +26,7 @@ static PyObject *PackageIndexFileArchiveURI(PyObject *Self,PyObject *Args) return HandleErrors(Safe_FromString(File->ArchiveURI(path).c_str())); } -static PyMethodDef PackageIndexFileMethods[] = +static PyMethodDef PackageIndexFileMethods[] = { {"ArchiveURI",PackageIndexFileArchiveURI,METH_VARARGS,"Returns the ArchiveURI"}, {} @@ -48,20 +48,20 @@ static PyObject *PackageIndexFileAttr(PyObject *Self,char *Name) return Py_BuildValue("i",(File->Size())); else if (strcmp("IsTrusted",Name) == 0) return Py_BuildValue("i",(File->IsTrusted())); - + return Py_FindMethod(PackageIndexFileMethods,Self,Name); } static PyObject *PackageIndexFileRepr(PyObject *Self) { pkgIndexFile *File = GetCpp<pkgIndexFile*>(Self); - + char S[1024]; snprintf(S,sizeof(S),"<pkIndexFile object: " "Label:'%s' Describe='%s' Exists='%i' " "HasPackages='%i' Size='%i' " "IsTrusted='%i' ArchiveURI='%s'>", - File->GetType()->Label, File->Describe().c_str(), File->Exists(), + File->GetType()->Label, File->Describe().c_str(), File->Exists(), File->HasPackages(), File->Size(), File->IsTrusted(), File->ArchiveURI("").c_str()); return PyString_FromString(S); @@ -86,7 +86,7 @@ PyTypeObject PackageIndexFileType = 0, // tp_as_mapping 0, // tp_hash }; - + diff --git a/python/makefile b/python/makefile index e0c62541..3e6458f4 100644 --- a/python/makefile +++ b/python/makefile @@ -7,20 +7,20 @@ include ../buildlib/defaults.mak # The apt_pkg module MODULE=apt_pkg -SLIBS = -lapt-pkg +SLIBS = -lapt-pkg LIB_MAKES = apt-pkg/makefile APT_PKG_SRC = apt_pkgmodule.cc configuration.cc generic.cc tag.cc string.cc \ cache.cc pkgrecords.cc pkgsrcrecords.cc sourcelist.cc \ depcache.cc progress.cc cdrom.cc acquire.cc pkgmanager.cc \ indexfile.cc metaindex.cc -SOURCE := $(APT_PKG_SRC) +SOURCE := $(APT_PKG_SRC) include $(PYTHON_H) progress.h -# The apt_int module.. +# The apt_int module.. MODULE=apt_inst SLIBS = -lapt-inst -lapt-pkg LIB_MAKES = apt-inst/makefile APT_INST_SRC = apt_instmodule.cc tar.cc generic.cc -SOURCE := $(APT_INST_SRC) +SOURCE := $(APT_INST_SRC) include $(PYTHON_H) diff --git a/python/metaindex.cc b/python/metaindex.cc index 45c8ef2a..efbc38af 100644 --- a/python/metaindex.cc +++ b/python/metaindex.cc @@ -29,13 +29,13 @@ static PyObject *MetaIndexAttr(PyObject *Self,char *Name) { PyObject *List = PyList_New(0); vector<pkgIndexFile *> *indexFiles = meta->GetIndexFiles(); - for (vector<pkgIndexFile *>::const_iterator I = indexFiles->begin(); + for (vector<pkgIndexFile *>::const_iterator I = indexFiles->begin(); I != indexFiles->end(); I++) { PyObject *Obj; Obj = CppPyObject_NEW<pkgIndexFile*>(&PackageIndexFileType,*I); PyList_Append(List,Obj); - } + } return List; } @@ -46,7 +46,7 @@ static PyObject *MetaIndexAttr(PyObject *Self,char *Name) static PyObject *MetaIndexRepr(PyObject *Self) { metaIndex *meta = GetCpp<metaIndex*>(Self); - + char S[1024]; snprintf(S,sizeof(S),"<metaIndex object: " "Type='%s', URI:'%s' Dist='%s' IsTrusted='%i'>", @@ -75,7 +75,7 @@ PyTypeObject MetaIndexType = 0, // tp_as_mapping 0, // tp_hash }; - + diff --git a/python/pkgmanager.cc b/python/pkgmanager.cc index 9670f238..0eaa28cd 100644 --- a/python/pkgmanager.cc +++ b/python/pkgmanager.cc @@ -19,14 +19,14 @@ static PyObject *PkgManagerGetArchives(PyObject *Self,PyObject *Args) -{ +{ pkgPackageManager *pm = GetCpp<pkgPackageManager*>(Self); PyObject *fetcher, *list, *recs; - + if (PyArg_ParseTuple(Args, "O!O!O!", &PkgAcquireType,&fetcher, &PkgSourceListType, &list, - &PkgRecordsType, &recs) == 0) + &PkgRecordsType, &recs) == 0) return 0; pkgAcquire *s_fetcher = GetCpp<pkgAcquire*>(fetcher); @@ -44,12 +44,12 @@ static PyObject *PkgManagerDoInstall(PyObject *Self,PyObject *Args) //PkgManagerStruct &Struct = GetCpp<PkgManagerStruct>(Self); pkgPackageManager *pm = GetCpp<pkgPackageManager*>(Self); int status_fd = -1; - + if (PyArg_ParseTuple(Args, "|i", &status_fd) == 0) return 0; pkgPackageManager::OrderResult res = pm->DoInstall(status_fd); - + return HandleErrors(Py_BuildValue("i",res)); } @@ -62,11 +62,11 @@ static PyObject *PkgManagerFixMissing(PyObject *Self,PyObject *Args) return 0; bool res = pm->FixMissing(); - + return HandleErrors(Py_BuildValue("b",res)); } -static PyMethodDef PkgManagerMethods[] = +static PyMethodDef PkgManagerMethods[] = { {"GetArchives",PkgManagerGetArchives,METH_VARARGS,"Load the selected archives into the fetcher"}, {"DoInstall",PkgManagerDoInstall,METH_VARARGS,"Do the actual install"}, @@ -81,11 +81,11 @@ static PyObject *PkgManagerAttr(PyObject *Self,char *Name) pkgPackageManager *pm = GetCpp<pkgPackageManager*>(Self); // some constants - if(strcmp("ResultCompleted",Name) == 0) + if(strcmp("ResultCompleted",Name) == 0) return Py_BuildValue("i", pkgPackageManager::Completed); - if(strcmp("ResultFailed",Name) == 0) + if(strcmp("ResultFailed",Name) == 0) return Py_BuildValue("i", pkgPackageManager::Failed); - if(strcmp("ResultIncomplete",Name) == 0) + if(strcmp("ResultIncomplete",Name) == 0) return Py_BuildValue("i", pkgPackageManager::Incomplete); return Py_FindMethod(PkgManagerMethods,Self,Name); @@ -125,7 +125,7 @@ PyObject *GetPkgManager(PyObject *Self,PyObject *Args) CppPyObject<pkgPackageManager*> *PkgManagerObj = CppPyObject_NEW<pkgPackageManager*>(&PkgManagerType,pm); - + return PkgManagerObj; } diff --git a/python/pkgrecords.cc b/python/pkgrecords.cc index 93bc54d9..18240ce0 100644 --- a/python/pkgrecords.cc +++ b/python/pkgrecords.cc @@ -16,20 +16,20 @@ #include <Python.h> /*}}}*/ - + // PkgRecords Class /*{{{*/ // --------------------------------------------------------------------- static PyObject *PkgRecordsLookup(PyObject *Self,PyObject *Args) -{ +{ PkgRecordsStruct &Struct = GetCpp<PkgRecordsStruct>(Self); - + PyObject *PkgFObj; long int Index; if (PyArg_ParseTuple(Args,"(O!l)",&PackageFileType,&PkgFObj,&Index) == 0) return 0; - + // Get the index and check to make sure it is reasonable pkgCache::PkgFileIterator &PkgF = GetCpp<pkgCache::PkgFileIterator>(PkgFObj); pkgCache *Cache = PkgF.Cache(); @@ -39,15 +39,15 @@ static PyObject *PkgRecordsLookup(PyObject *Self,PyObject *Args) PyErr_SetNone(PyExc_IndexError); return 0; } - + // Do the lookup Struct.Last = &Struct.Records.Lookup(pkgCache::VerFileIterator(*Cache,Cache->VerFileP+Index)); // always return true (to make it consistent with the pkgsrcrecords object return Py_BuildValue("i", 1); } - -static PyMethodDef PkgRecordsMethods[] = + +static PyMethodDef PkgRecordsMethods[] = { {"Lookup",PkgRecordsLookup,METH_VARARGS,"Changes to a new package"}, {} @@ -79,14 +79,14 @@ static PyObject *PkgRecordsAttr(PyObject *Self,char *Name) return CppPyString(Struct.Last->Name()); else if (strcmp("Homepage",Name) == 0) return CppPyString(Struct.Last->Homepage()); - else if (strcmp("Record", Name) == 0) + else if (strcmp("Record", Name) == 0) { const char *start, *stop; Struct.Last->GetRec(start, stop); return PyString_FromStringAndSize(start,stop-start); } } - + return Py_FindMethod(PkgRecordsMethods,Self,Name); } PyTypeObject PkgRecordsType = diff --git a/python/pkgrecords.h b/python/pkgrecords.h index 78787eab..1e26c8cf 100644 --- a/python/pkgrecords.h +++ b/python/pkgrecords.h @@ -4,7 +4,7 @@ struct PkgRecordsStruct { pkgRecords Records; pkgRecords::Parser *Last; - + PkgRecordsStruct(pkgCache *Cache) : Records(*Cache), Last(0) {}; PkgRecordsStruct() : Records(*(pkgCache *)0) {abort();}; // G++ Bug.. }; diff --git a/python/pkgsrcrecords.cc b/python/pkgsrcrecords.cc index c698a925..f7f5d7a2 100644 --- a/python/pkgsrcrecords.cc +++ b/python/pkgsrcrecords.cc @@ -21,7 +21,7 @@ struct PkgSrcRecordsStruct pkgSourceList List; pkgSrcRecords *Records; pkgSrcRecords::Parser *Last; - + PkgSrcRecordsStruct() : Last(0) { List.ReadMainList(); Records = new pkgSrcRecords(List); @@ -30,24 +30,24 @@ struct PkgSrcRecordsStruct delete Records; }; }; - + // PkgSrcRecords Class /*{{{*/ // --------------------------------------------------------------------- static char *doc_PkgSrcRecordsLookup = "xxx"; static PyObject *PkgSrcRecordsLookup(PyObject *Self,PyObject *Args) -{ +{ PkgSrcRecordsStruct &Struct = GetCpp<PkgSrcRecordsStruct>(Self); - + char *Name = 0; if (PyArg_ParseTuple(Args,"s",&Name) == 0) return 0; - + Struct.Last = Struct.Records->Find(Name, false); if (Struct.Last == 0) { Struct.Records->Restart(); Py_INCREF(Py_None); - return HandleErrors(Py_None); + return HandleErrors(Py_None); } return Py_BuildValue("i", 1); @@ -55,20 +55,20 @@ static PyObject *PkgSrcRecordsLookup(PyObject *Self,PyObject *Args) static char *doc_PkgSrcRecordsRestart = "Start Lookup from the begining"; static PyObject *PkgSrcRecordsRestart(PyObject *Self,PyObject *Args) -{ +{ PkgSrcRecordsStruct &Struct = GetCpp<PkgSrcRecordsStruct>(Self); - + char *Name = 0; if (PyArg_ParseTuple(Args,"") == 0) return 0; - + Struct.Records->Restart(); Py_INCREF(Py_None); - return HandleErrors(Py_None); + return HandleErrors(Py_None); } -static PyMethodDef PkgSrcRecordsMethods[] = +static PyMethodDef PkgSrcRecordsMethods[] = { {"Lookup",PkgSrcRecordsLookup,METH_VARARGS,doc_PkgSrcRecordsLookup}, {"Restart",PkgSrcRecordsRestart,METH_VARARGS,doc_PkgSrcRecordsRestart}, @@ -111,10 +111,10 @@ static PyObject *PkgSrcRecordsAttr(PyObject *Self,char *Name) PyObject *v; for(unsigned int i=0;i<f.size();i++) { - v = Py_BuildValue("(siss)", - f[i].MD5Hash.c_str(), - f[i].Size, - f[i].Path.c_str(), + v = Py_BuildValue("(siss)", + f[i].MD5Hash.c_str(), + f[i].Size, + f[i].Path.c_str(), f[i].Type.c_str()); PyList_Append(List, v); Py_DECREF(v); @@ -129,7 +129,7 @@ static PyObject *PkgSrcRecordsAttr(PyObject *Self,char *Name) PyObject *v; for(unsigned int i=0;i<bd.size();i++) { - v = Py_BuildValue("(ssii)", bd[i].Package.c_str(), + v = Py_BuildValue("(ssii)", bd[i].Package.c_str(), bd[i].Version.c_str(), bd[i].Op, bd[i].Type); PyList_Append(List, v); Py_DECREF(v); @@ -137,7 +137,7 @@ static PyObject *PkgSrcRecordsAttr(PyObject *Self,char *Name) return List; } } - + return Py_FindMethod(PkgSrcRecordsMethods,Self,Name); } PyTypeObject PkgSrcRecordsType = @@ -174,7 +174,7 @@ PyObject *GetPkgSrcRecords(PyObject *Self,PyObject *Args) #endif if (PyArg_ParseTuple(Args,"") == 0) return 0; - + return HandleErrors(CppPyObject_NEW<PkgSrcRecordsStruct>(&PkgSrcRecordsType)); } diff --git a/python/progress.cc b/python/progress.cc index 99ad0a25..c5a1c138 100644 --- a/python/progress.cc +++ b/python/progress.cc @@ -14,7 +14,7 @@ // generic -bool PyCallbackObj::RunSimpleCallback(const char* method_name, +bool PyCallbackObj::RunSimpleCallback(const char* method_name, PyObject *arglist, PyObject **res) { @@ -50,8 +50,8 @@ bool PyCallbackObj::RunSimpleCallback(const char* method_name, } -// OpProgress interface -void PyOpProgress::Update() +// OpProgress interface +void PyOpProgress::Update() { PyObject *o; o = Py_BuildValue("s", Op.c_str()); @@ -64,7 +64,7 @@ void PyOpProgress::Update() PyObject_SetAttrString(callbackInst, "majorChange", o); Py_XDECREF(o); - // Build up the argument list... + // Build up the argument list... if(CheckChange(0.05)) { PyObject *arglist = Py_BuildValue("(f)", Percent); @@ -128,7 +128,7 @@ void PyFetchProgress::Fail(pkgAcquire::ItemDesc &Itm) // Ignore certain kinds of transient failures (bad code) if (Itm.Owner->Status == pkgAcquire::Item::StatIdle) return; - + if (Itm.Owner->Status == pkgAcquire::Item::StatDone) { UpdateStatus(Itm, DLIgnored); @@ -159,7 +159,7 @@ bool PyFetchProgress::Pulse(pkgAcquire * Owner) //std::cout << "Pulse" << std::endl; if(callbackInst == 0) return false; - + // set stats PyObject *o; o = Py_BuildValue("f", CurrentCPS); @@ -179,11 +179,11 @@ bool PyFetchProgress::Pulse(pkgAcquire * Owner) Py_XDECREF(o); PyObject *arglist = Py_BuildValue("()"); - PyObject *result; + PyObject *result; RunSimpleCallback("pulse", arglist, &result); bool res = true; - if(!PyArg_Parse(result, "b", &res)) + if(!PyArg_Parse(result, "b", &res)) { // most of the time the user who subclasses the pulse() // method forgot to add a return {True,False} so we just @@ -199,22 +199,22 @@ bool PyFetchProgress::Pulse(pkgAcquire * Owner) // install progress -void PyInstallProgress::StartUpdate() +void PyInstallProgress::StartUpdate() { RunSimpleCallback("startUpdate"); } -void PyInstallProgress::UpdateInterface() +void PyInstallProgress::UpdateInterface() { RunSimpleCallback("updateInterface"); } - -void PyInstallProgress::FinishUpdate() + +void PyInstallProgress::FinishUpdate() { RunSimpleCallback("finishUpdate"); } -pkgPackageManager::OrderResult PyInstallProgress::Run(pkgPackageManager *pm) +pkgPackageManager::OrderResult PyInstallProgress::Run(pkgPackageManager *pm) { void *dummy; pkgPackageManager::OrderResult res; @@ -233,7 +233,7 @@ pkgPackageManager::OrderResult PyInstallProgress::Run(pkgPackageManager *pm) std::cerr << "custom fork found" << std::endl; PyObject *arglist = Py_BuildValue("()"); PyObject *result = PyEval_CallObject(method, arglist); - Py_DECREF(arglist); + Py_DECREF(arglist); if (result == NULL) { std::cerr << "fork method invalid" << std::endl; PyErr_Print(); @@ -248,7 +248,7 @@ pkgPackageManager::OrderResult PyInstallProgress::Run(pkgPackageManager *pm) //std::cerr << "using build-in fork()" << std::endl; child_id = fork(); } - + #if 0 // FIXME: this needs to be merged into apt to support medium swaping if (child_id == 0) { @@ -277,7 +277,7 @@ pkgPackageManager::OrderResult PyInstallProgress::Run(pkgPackageManager *pm) //std::cerr << "custom waitChild found" << std::endl; PyObject *arglist = Py_BuildValue("(i)",child_id); PyObject *result = PyEval_CallObject(method, arglist); - Py_DECREF(arglist); + Py_DECREF(arglist); if (result == NULL) { std::cerr << "waitChild method invalid" << std::endl; PyErr_Print(); @@ -291,7 +291,7 @@ pkgPackageManager::OrderResult PyInstallProgress::Run(pkgPackageManager *pm) //std::cerr << "got child_res: " << res << std::endl; } else { //std::cerr << "using build-in waitpid()" << std::endl; - + while (waitpid(child_id, &ret, WNOHANG) == 0) UpdateInterface(); diff --git a/python/progress.h b/python/progress.h index f04bd683..5ac67b1c 100644 --- a/python/progress.h +++ b/python/progress.h @@ -53,7 +53,7 @@ struct PyFetchProgress : public pkgAcquireStatus, public PyCallbackObj virtual bool MediaChange(string Media, string Drive); - /* apt stuff */ + /* apt stuff */ virtual void IMSHit(pkgAcquire::ItemDesc &Itm); virtual void Fetch(pkgAcquire::ItemDesc &Itm); virtual void Done(pkgAcquire::ItemDesc &Itm); diff --git a/python/sourcelist.cc b/python/sourcelist.cc index 76df015d..5dcaf86b 100644 --- a/python/sourcelist.cc +++ b/python/sourcelist.cc @@ -17,18 +17,18 @@ /*}}}*/ - + // PkgsourceList Class /*{{{*/ // --------------------------------------------------------------------- static char *doc_PkgSourceListFindIndex = "xxx"; static PyObject *PkgSourceListFindIndex(PyObject *Self,PyObject *Args) -{ +{ pkgSourceList *list = GetCpp<pkgSourceList*>(Self); PyObject *pyPkgFileIter; PyObject *pyPkgIndexFile; - if (PyArg_ParseTuple(Args, "O!", &PackageFileType,&pyPkgFileIter) == 0) + if (PyArg_ParseTuple(Args, "O!", &PackageFileType,&pyPkgFileIter) == 0) return 0; pkgCache::PkgFileIterator &i = GetCpp<pkgCache::PkgFileIterator>(pyPkgFileIter); @@ -40,7 +40,7 @@ static PyObject *PkgSourceListFindIndex(PyObject *Self,PyObject *Args) } //&PackageIndexFileType,&pyPkgIndexFile) - + Py_INCREF(Py_None); return Py_None; } @@ -61,7 +61,7 @@ static PyObject *PkgSourceListGetIndexes(PyObject *Self,PyObject *Args) PyObject *pyFetcher; char all = 0; - if (PyArg_ParseTuple(Args, "O!|b",&PkgAcquireType,&pyFetcher, &all) == 0) + if (PyArg_ParseTuple(Args, "O!|b",&PkgAcquireType,&pyFetcher, &all) == 0) return 0; pkgAcquire *fetcher = GetCpp<pkgAcquire*>(pyFetcher); @@ -70,7 +70,7 @@ static PyObject *PkgSourceListGetIndexes(PyObject *Self,PyObject *Args) return HandleErrors(Py_BuildValue("b",res)); } -static PyMethodDef PkgSourceListMethods[] = +static PyMethodDef PkgSourceListMethods[] = { {"FindIndex",PkgSourceListFindIndex,METH_VARARGS,doc_PkgSourceListFindIndex}, {"ReadMainList",PkgSourceListReadMainList,METH_VARARGS,doc_PkgSourceListReadMainList}, @@ -85,13 +85,13 @@ static PyObject *PkgSourceListAttr(PyObject *Self,char *Name) if (strcmp("List",Name) == 0) { PyObject *List = PyList_New(0); - for (vector<metaIndex *>::const_iterator I = list->begin(); + for (vector<metaIndex *>::const_iterator I = list->begin(); I != list->end(); I++) { PyObject *Obj; Obj = CppPyObject_NEW<metaIndex*>(&MetaIndexType,*I); PyList_Append(List,Obj); - } + } return List; } return Py_FindMethod(PkgSourceListMethods,Self,Name); diff --git a/python/string.cc b/python/string.cc index 1fa5a901..8168ea5b 100644 --- a/python/string.cc +++ b/python/string.cc @@ -3,22 +3,22 @@ // $Id: string.cc,v 1.3 2002/01/08 06:53:04 jgg Exp $ /* ###################################################################### - string - Mappings for the string functions that are worthwile for + string - Mappings for the string functions that are worthwile for Python users - + ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ #include "apt_pkgmodule.h" #include "generic.h" - + #include <apt-pkg/strutl.h> #include <Python.h> /*}}}*/ - + // Templated function /*{{{*/ -/* Macro for the generic string in string out function */ +/* Macro for the generic string in string out function */ #define MkStr(Python,CFunc) \ PyObject *Python(PyObject *Self,PyObject *Args) \ { \ @@ -36,7 +36,7 @@ PyObject *Python(PyObject *Self,PyObject *Args) \ return 0; \ return CppPyString(CFunc(Val)); \ } - + MkStr(StrDeQuote,DeQuoteString); MkStr(StrBase64Encode,Base64Encode); MkStr(StrURItoFileName,URItoFileName); @@ -58,7 +58,7 @@ PyObject *StrSizeToStr(PyObject *Self,PyObject *Args) return CppPyString(SizeToStr(PyLong_AsDouble(Obj))); if (PyFloat_Check(Obj)) return CppPyString(SizeToStr(PyFloat_AsDouble(Obj))); - + PyErr_SetString(PyExc_TypeError,"Only understand integers and floats"); return 0; } @@ -69,14 +69,14 @@ PyObject *StrQuoteString(PyObject *Self,PyObject *Args) char *Bad = 0; if (PyArg_ParseTuple(Args,"ss",&Str,&Bad) == 0) return 0; - return CppPyString(QuoteString(Str,Bad)); + return CppPyString(QuoteString(Str,Bad)); } PyObject *StrStringToBool(PyObject *Self,PyObject *Args) { char *Str = 0; if (PyArg_ParseTuple(Args,"s",&Str) == 0) - return 0; + return 0; return Py_BuildValue("i",StringToBool(Str)); } @@ -85,14 +85,14 @@ PyObject *StrStrToTime(PyObject *Self,PyObject *Args) char *Str = 0; if (PyArg_ParseTuple(Args,"s",&Str) == 0) return 0; - + time_t Result; if (StrToTime(Str,Result) == false) { Py_INCREF(Py_None); return Py_None; } - + return Py_BuildValue("i",Result); } diff --git a/python/tag.cc b/python/tag.cc index 4b378a55..217be290 100644 --- a/python/tag.cc +++ b/python/tag.cc @@ -4,18 +4,18 @@ /* ###################################################################### Tag - Binding for the RFC 822 tag file parser - + Upon reflection I have make the TagSection wrapper look like a map.. The other option was to use a sequence (which nicely matches the internal - storage) but really makes no sense to a Python Programmer.. One - specialized lookup is provided, the FindFlag lookup - as well as the + storage) but really makes no sense to a Python Programmer.. One + specialized lookup is provided, the FindFlag lookup - as well as the usual set of duplicate things to match the C++ interface. - - The TagFile interface is also slightly different, it has a built in + + The TagFile interface is also slightly different, it has a built in internal TagSection object that is used. Do not hold onto a reference to a TagSection and let TagFile go out of scope! The underlying storage for the section will go away and it will seg. - + ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ @@ -80,7 +80,7 @@ static PyObject *TagSecFind(PyObject *Self,PyObject *Args) char *Default = 0; if (PyArg_ParseTuple(Args,"s|z",&Name,&Default) == 0) return 0; - + const char *Start; const char *Stop; if (GetCpp<pkgTagSection>(Self).Find(Name,Start,Stop) == false) @@ -98,7 +98,7 @@ static PyObject *TagSecFindFlag(PyObject *Self,PyObject *Args) char *Name = 0; if (PyArg_ParseTuple(Args,"s",&Name) == 0) return 0; - + unsigned long Flag = 0; if (GetCpp<pkgTagSection>(Self).FindFlag(Name,Flag,1) == false) { @@ -116,15 +116,15 @@ static PyObject *TagSecMap(PyObject *Self,PyObject *Arg) PyErr_SetNone(PyExc_TypeError); return 0; } - + const char *Start; const char *Stop; if (GetCpp<pkgTagSection>(Self).Find(PyString_AsString(Arg),Start,Stop) == false) - { + { PyErr_SetString(PyExc_KeyError,PyString_AsString(Arg)); return 0; } - + return PyString_FromStringAndSize(Start,Stop-Start); } @@ -142,17 +142,17 @@ static PyObject *TagSecKeys(PyObject *Self,PyObject *Args) pkgTagSection &Tags = GetCpp<pkgTagSection>(Self); if (PyArg_ParseTuple(Args,"") == 0) return 0; - + // Convert the whole configuration space into a list PyObject *List = PyList_New(0); for (unsigned int I = 0; I != Tags.Count(); I++) - { + { const char *Start; const char *Stop; Tags.Get(Start,Stop,I); const char *End = Start; for (; End < Stop && *End != ':'; End++); - + PyObject *Obj; PyList_Append(List,Obj = PyString_FromStringAndSize(Start,End-Start)); Py_DECREF(Obj); @@ -166,7 +166,7 @@ static PyObject *TagSecExists(PyObject *Self,PyObject *Args) char *Name = 0; if (PyArg_ParseTuple(Args,"s",&Name) == 0) return 0; - + const char *Start; const char *Stop; if (GetCpp<pkgTagSection>(Self).Find(Name,Start,Stop) == false) @@ -179,7 +179,7 @@ static PyObject *TagSecBytes(PyObject *Self,PyObject *Args) { if (PyArg_ParseTuple(Args,"") == 0) return 0; - + return Py_BuildValue("i",GetCpp<pkgTagSection>(Self).size()); } @@ -197,11 +197,11 @@ static PyObject *TagFileStep(PyObject *Self,PyObject *Args) { if (PyArg_ParseTuple(Args,"") == 0) return 0; - + TagFileData &Obj = *(TagFileData *)Self; if (Obj.Object.Step(Obj.Section->Object) == false) return HandleErrors(Py_BuildValue("i",0)); - + return HandleErrors(Py_BuildValue("i",1)); } @@ -219,11 +219,11 @@ static PyObject *TagFileJump(PyObject *Self,PyObject *Args) int Offset; if (PyArg_ParseTuple(Args,"i",&Offset) == 0) return 0; - + TagFileData &Obj = *(TagFileData *)Self; if (Obj.Object.Jump(Obj.Section->Object,Offset) == false) return HandleErrors(Py_BuildValue("i",0)); - + return HandleErrors(Py_BuildValue("i",1)); } /*}}}*/ @@ -235,23 +235,23 @@ PyObject *ParseSection(PyObject *self,PyObject *Args) char *Data; if (PyArg_ParseTuple(Args,"s",&Data) == 0) return 0; - + // Create the object.. TagSecData *New = PyObject_NEW(TagSecData,&TagSecType); new (&New->Object) pkgTagSection(); New->Data = new char[strlen(Data)+2]; snprintf(New->Data,strlen(Data)+2,"%s\n",Data); - + if (New->Object.Scan(New->Data,strlen(New->Data)) == false) { cerr << New->Data << endl; Py_DECREF((PyObject *)New); PyErr_SetString(PyExc_ValueError,"Unable to parse section data"); return 0; - } - + } + New->Object.Trim(); - + return New; } /*}}}*/ @@ -264,26 +264,26 @@ PyObject *ParseTagFile(PyObject *self,PyObject *Args) PyObject *File; if (PyArg_ParseTuple(Args,"O!",&PyFile_Type,&File) == 0) return 0; - + TagFileData *New = PyObject_NEW(TagFileData,&TagFileType); new (&New->Fd) FileFd(fileno(PyFile_AsFile(File)),false); New->File = File; Py_INCREF(New->File); new (&New->Object) pkgTagFile(&New->Fd); - + // Create the section New->Section = PyObject_NEW(TagSecData,&TagSecType); new (&New->Section->Object) pkgTagSection(); New->Section->Data = 0; - + return HandleErrors(New); } - /*}}}*/ + /*}}}*/ // RewriteSection - Rewrite a section.. /*{{{*/ // --------------------------------------------------------------------- -/* An interesting future extension would be to add a user settable +/* An interesting future extension would be to add a user settable order list */ -char *doc_RewriteSection = +char *doc_RewriteSection = "RewriteSection(Section,Order,RewriteList) -> String\n" "\n" "The section rewriter allows a section to be taken in, have fields added,\n" @@ -306,10 +306,10 @@ PyObject *RewriteSection(PyObject *self,PyObject *Args) if (PyArg_ParseTuple(Args,"O!O!O!",&TagSecType,&Section, &PyList_Type,&Order,&PyList_Type,&Rewrite) == 0) return 0; - + // Convert the order list const char **OrderList = ListToCharChar(Order,true); - + // Convert the Rewrite list. TFRewriteData *List = new TFRewriteData[PySequence_Length(Rewrite)+1]; memset(List,0,sizeof(*List)*(PySequence_Length(Rewrite)+1)); @@ -324,7 +324,7 @@ PyObject *RewriteSection(PyObject *self,PyObject *Args) return 0; } } - + /* This is a glibc extension.. If not running on glibc I'd just take this whole function out, it is probably infrequently used */ char *bp = 0; @@ -336,13 +336,13 @@ PyObject *RewriteSection(PyObject *self,PyObject *Args) delete [] OrderList; delete [] List; fclose(F); - + if (Res == false) { free(bp); return HandleErrors(); } - + // Return the string PyObject *ResObj = PyString_FromStringAndSize(bp,size); free(bp); @@ -351,13 +351,13 @@ PyObject *RewriteSection(PyObject *self,PyObject *Args) /*}}}*/ // Method table for the Tag Section object -static PyMethodDef TagSecMethods[] = +static PyMethodDef TagSecMethods[] = { // Query {"Find",TagSecFind,METH_VARARGS,doc_Find}, {"FindFlag",TagSecFindFlag,METH_VARARGS,doc_FindFlag}, {"Bytes",TagSecBytes,METH_VARARGS,doc_Bytes}, - + // Python Special {"keys",TagSecKeys,METH_VARARGS,doc_Keys}, {"has_key",TagSecExists,METH_VARARGS,doc_Exists}, @@ -398,13 +398,13 @@ PyTypeObject TagSecType = }; // Method table for the Tag File object -static PyMethodDef TagFileMethods[] = +static PyMethodDef TagFileMethods[] = { // Query {"Step",TagFileStep,METH_VARARGS,doc_Step}, {"Offset",TagFileOffset,METH_VARARGS,doc_Offset}, {"Jump",TagFileJump,METH_VARARGS,doc_Jump}, - + {} }; @@ -418,8 +418,8 @@ static PyObject *TagFileGetAttr(PyObject *Self,char *Name) PyObject *Obj = ((TagFileData *)Self)->Section; Py_INCREF(Obj); return Obj; - } - + } + return Py_FindMethod(TagFileMethods,Self,Name); } diff --git a/python/tar.cc b/python/tar.cc index 61c9d708..e5aaee6f 100644 --- a/python/tar.cc +++ b/python/tar.cc @@ -4,7 +4,7 @@ /* ###################################################################### Tar Inteface - + ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ @@ -23,9 +23,9 @@ class ProcessTar : public pkgDirStream public: PyObject *Function; - + virtual bool DoItem(Item &Itm,int &Fd); - + ProcessTar(PyObject *Function) : Function(Function) { Py_INCREF(Function); @@ -48,55 +48,55 @@ bool ProcessTar::DoItem(Item &Itm,int &Fd) case Item::File: Type = "FILE"; break; - + case Item::HardLink: Type = "HARDLINK"; break; - + case Item::SymbolicLink: Type = "SYMLINK"; break; - + case Item::CharDevice: Type = "CHARDEV"; break; - + case Item::BlockDevice: Type = "BLKDEV"; break; - + case Item::Directory: Type = "DIR"; break; - + case Item::FIFO: Type = "FIFO"; break; } - + if (PyObject_CallFunction(Function,"sssiiiiiii",Type,Itm.Name, Itm.LinkTarget,Itm.Mode,Itm.UID,Itm.GID,Itm.Size, Itm.MTime,Itm.Major,Itm.Minor) == 0) return false; - + Fd = -1; return true; } /*}}}*/ - + // tarExtract - Examine files from a tar /*{{{*/ // --------------------------------------------------------------------- /* */ char *doc_tarExtract = "tarExtract(File,Func,Comp) -> None\n" "The tar file referenced by the file object File, Func called for each\n" -"Tar member. Comp must be the string \"gzip\" (gzip is automatically invoked) \n"; +"Tar member. Comp must be the string \"gzip\" (gzip is automatically invoked) \n"; PyObject *tarExtract(PyObject *Self,PyObject *Args) { PyObject *File; PyObject *Function; char *Comp; - + if (PyArg_ParseTuple(Args,"O!Os",&PyFile_Type,&File, &Function,&Comp) == 0) return 0; @@ -106,19 +106,19 @@ PyObject *tarExtract(PyObject *Self,PyObject *Args) PyErr_SetString(PyExc_TypeError,"argument 2: expected something callable."); return 0; } - + { // Open the file and associate the tar FileFd Fd(fileno(PyFile_AsFile(File)),false); ExtractTar Tar(Fd,0xFFFFFFFF,Comp); if (_error->PendingError() == true) return HandleErrors(); - + ProcessTar Proc(Function); if (Tar.Go(Proc) == false) return HandleErrors(); - } - + } + Py_INCREF(Py_None); return HandleErrors(Py_None); } @@ -138,11 +138,11 @@ PyObject *debExtract(PyObject *Self,PyObject *Args) PyObject *Function; char *Chunk; const char *Comp = "gzip"; - + if (PyArg_ParseTuple(Args,"O!Os",&PyFile_Type,&File, &Function,&Chunk) == 0) return 0; - + if (PyCallable_Check(Function) == 0) { PyErr_SetString(PyExc_TypeError,"argument 2: expected something callable."); @@ -156,15 +156,15 @@ PyObject *debExtract(PyObject *Self,PyObject *Args) debDebFile Deb(Fd); if (_error->PendingError() == true) return HandleErrors(); - - // Get the archive member and positition the file + + // Get the archive member and positition the file const ARArchive::Member *Member = Deb.GotoMember(Chunk); if (Member == 0) { _error->Error("Cannot find chunk %s",Chunk); return HandleErrors(); } - + // Extract it. if (strcmp(".bz2", &Chunk[strlen(Chunk)-4]) == 0) Comp = "bzip2"; @@ -174,8 +174,8 @@ PyObject *debExtract(PyObject *Self,PyObject *Args) ProcessTar Proc(Function); if (Tar.Go(Proc) == false) return HandleErrors(); - } - + } + Py_INCREF(Py_None); return HandleErrors(Py_None); } @@ -16,12 +16,12 @@ import sys # The apt_pkg module files = map(lambda source: "python/"+source, string.split(parse_makefile("python/makefile")["APT_PKG_SRC"])) -apt_pkg = Extension("apt_pkg", files, libraries=["apt-pkg"]); +apt_pkg = Extension("apt_pkg", files, libraries=["apt-pkg"]) # The apt_inst module files = map(lambda source: "python/"+source, string.split(parse_makefile("python/makefile")["APT_INST_SRC"])) -apt_inst = Extension("apt_inst", files, libraries=["apt-pkg","apt-inst"]); +apt_inst = Extension("apt_inst", files, libraries=["apt-pkg", "apt-inst"]) # Replace the leading _ that is used in the templates for translation templates = [] @@ -53,17 +53,16 @@ setup(name="python-apt", description="Python bindings for APT", author="APT Development Team", author_email="deity@lists.debian.org", - ext_modules=[apt_pkg,apt_inst], + ext_modules=[apt_pkg, apt_inst], packages=['apt', 'apt.gtk', 'aptsources'], data_files = [('share/python-apt/templates', glob.glob('build/data/templates/*.info')), ('share/python-apt/templates', glob.glob('data/templates/*.mirrors'))], - cmdclass = { "build" : build_extra.build_extra, - "build_i18n" : build_i18n.build_i18n }, + cmdclass = {"build": build_extra.build_extra, + "build_i18n": build_i18n.build_i18n}, license = 'GNU GPL', - platforms = 'posix' - ) + platforms = 'posix') if len(sys.argv) > 1 and sys.argv[1] == "build": import sphinx diff --git a/tests/apt-test.py b/tests/apt-test.py index 6205cf60..fac2ff43 100644 --- a/tests/apt-test.py +++ b/tests/apt-test.py @@ -20,7 +20,7 @@ if __name__ == "__main__": cache = apt.Cache(progress) for name in cache.keys(): import random - if random.randint(0,1) == 1: + if random.randint(0, 1) == 1: cache[name].markDelete() print "Broken: %s " % cache._depcache.BrokenCount print "DelCount: %s " % cache._depcache.DelCount diff --git a/tests/cache.py b/tests/cache.py index afcad00d..87a544e8 100644 --- a/tests/cache.py +++ b/tests/cache.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.4 +#!/usr/bin/python # # Test for the pkgCache code # @@ -6,44 +6,46 @@ import apt_pkg import sys + def main(): - apt_pkg.init() - cache = apt_pkg.GetCache() - depcache = apt_pkg.GetDepCache(cache) - depcache.Init() - i=0 - all=cache.PackageCount - print "Running Cache test on all packages:" - # first, get all pkgs - for pkg in cache.Packages: - i += 1 - x = pkg.Name - # then get each version - for ver in pkg.VersionList: - # get some version information - a = ver.FileList - b = ver.VerStr - c = ver.Arch - d = ver.DependsListStr - dl = ver.DependsList - # get all dependencies (a dict of string->list, - # e.g. "depends:" -> [ver1,ver2,..] - for dep in dl.keys(): - # get the list of each dependency object - for depVerList in dl[dep]: - for z in depVerList: - # get all TargetVersions of - # the dependency object - for j in z.AllTargets(): - f = j.FileList - g = ver.VerStr - h = ver.Arch - k = ver.DependsListStr - j = ver.DependsList - pass - - print "\r%i/%i=%.3f%% " % (i,all,(float(i)/float(all)*100)), + apt_pkg.init() + cache = apt_pkg.GetCache() + depcache = apt_pkg.GetDepCache(cache) + depcache.Init() + i=0 + all=cache.PackageCount + print "Running Cache test on all packages:" + # first, get all pkgs + for pkg in cache.Packages: + i += 1 + x = pkg.Name + # then get each version + for ver in pkg.VersionList: + # get some version information + a = ver.FileList + b = ver.VerStr + c = ver.Arch + d = ver.DependsListStr + dl = ver.DependsList + # get all dependencies (a dict of string->list, + # e.g. "depends:" -> [ver1,ver2,..] + for dep in dl.keys(): + # get the list of each dependency object + for depVerList in dl[dep]: + for z in depVerList: + # get all TargetVersions of + # the dependency object + for j in z.AllTargets(): + f = j.FileList + g = ver.VerStr + h = ver.Arch + k = ver.DependsListStr + j = ver.DependsList + pass + + print "\r%i/%i=%.3f%% " % (i, all, (float(i) / float(all) * 100)), + if __name__ == "__main__": - main() - sys.exit(0) + main() + sys.exit(0) diff --git a/tests/depcache.py b/tests/depcache.py index 5c78c3a1..b199c812 100644 --- a/tests/depcache.py +++ b/tests/depcache.py @@ -6,47 +6,49 @@ import apt_pkg import sys + def main(): - apt_pkg.init() - cache = apt_pkg.GetCache() - depcache = apt_pkg.GetDepCache(cache) - depcache.Init() - i=0 - all=cache.PackageCount - print "Running DepCache test on all packages" - print "(trying to install each and then mark it keep again):" - # first, get all pkgs - for pkg in cache.Packages: - i += 1 - x = pkg.Name - # then get each version - ver =depcache.GetCandidateVer(pkg) - if ver != None: - depcache.MarkInstall(pkg) - if depcache.InstCount == 0: - if depcache.IsUpgradable(pkg): - print "Error marking %s for install" % x - for p in cache.Packages: - if depcache.MarkedInstall(p): - depcache.MarkKeep(p) - if depcache.InstCount != 0: - print "Error undoing the selection for %s (InstCount: %s)" % (x,depcache.InstCount) - print "\r%i/%i=%.3f%% " % (i,all,(float(i)/float(all)*100)), + apt_pkg.init() + cache = apt_pkg.GetCache() + depcache = apt_pkg.GetDepCache(cache) + depcache.Init() + i=0 + all=cache.PackageCount + print "Running DepCache test on all packages" + print "(trying to install each and then mark it keep again):" + # first, get all pkgs + for pkg in cache.Packages: + i += 1 + x = pkg.Name + # then get each version + ver =depcache.GetCandidateVer(pkg) + if ver != None: + depcache.MarkInstall(pkg) + if depcache.InstCount == 0: + if depcache.IsUpgradable(pkg): + print "Error marking %s for install" % x + for p in cache.Packages: + if depcache.MarkedInstall(p): + depcache.MarkKeep(p) + if depcache.InstCount != 0: + print "Error undoing the selection for %s (InstCount: %s)" % ( + x, depcache.InstCount) + print "\r%i/%i=%.3f%% " % (i, all, (float(i) / float(all) * 100)), - print - print "Trying Upgrade:" - depcache.Upgrade() - print "To install: %s " % depcache.InstCount - print "To remove: %s " % depcache.DelCount - print "Kept back: %s " % depcache.KeepCount + print + print "Trying Upgrade:" + depcache.Upgrade() + print "To install: %s " % depcache.InstCount + print "To remove: %s " % depcache.DelCount + print "Kept back: %s " % depcache.KeepCount - print "Trying DistUpgrade:" - depcache.Upgrade(True) - print "To install: %s " % depcache.InstCount - print "To remove: %s " % depcache.DelCount - print "Kept back: %s " % depcache.KeepCount + print "Trying DistUpgrade:" + depcache.Upgrade(True) + print "To install: %s " % depcache.InstCount + print "To remove: %s " % depcache.DelCount + print "Kept back: %s " % depcache.KeepCount if __name__ == "__main__": - main() - sys.exit(0) + main() + sys.exit(0) diff --git a/tests/lock.py b/tests/lock.py index 86d704ea..d45b3964 100644 --- a/tests/lock.py +++ b/tests/lock.py @@ -4,7 +4,8 @@ # import apt_pkg -import sys, os +import sys +import os if __name__ == "__main__": @@ -21,27 +22,26 @@ if __name__ == "__main__": apt_pkg.PkgSystemLock() except SystemError, s: print "Can't get lock: (error text:\n%s)" % s - sys.exit(0) + sys.exit(0) apt_pkg.PkgSystemUnLock() # low-level lock - fd = apt_pkg.GetLock(lock,True) + fd = apt_pkg.GetLock(lock, True) print "Lockfile fd: %s" % fd # try to get lock without error flag pid = os.fork() if pid == 0: # child - fd = apt_pkg.GetLock(lock,False) + fd = apt_pkg.GetLock(lock, False) print "Lockfile fd (child): %s" % fd - sys.exit(0) + sys.exit(0) # try to get lock with error flag pid = os.fork() if pid == 0: # child - fd = apt_pkg.GetLock(lock,True) + fd = apt_pkg.GetLock(lock, True) print "Lockfile fd (child): %s" % fd - sys.exit(0) - + sys.exit(0) diff --git a/tests/memleak.py b/tests/memleak.py index b5d05afc..659091fc 100755 --- a/tests/memleak.py +++ b/tests/memleak.py @@ -11,36 +11,36 @@ cache = apt.Cache() # memleak for i in range(100): - cache.open(None) - print cache["apt"].name - time.sleep(1) - gc.collect() - f = open("%s" % i,"w") - for obj in gc.get_objects(): - f.write("%s\n" % str(obj)) - f.close() - -# memleak + cache.open(None) + print cache["apt"].name + time.sleep(1) + gc.collect() + f = open("%s" % i, "w") + for obj in gc.get_objects(): + f.write("%s\n" % str(obj)) + f.close() + +# memleak #for i in range(100): -# cache = apt.Cache() -# time.sleep(1) -# cache = None -# gc.collect() +# cache = apt.Cache() +# time.sleep(1) +# cache = None +# gc.collect() # no memleak, but more or less the apt.Cache.open() code for i in range(100): - cache = apt_pkg.GetCache() - depcache = apt_pkg.GetDepCache(cache) - records = apt_pkg.GetPkgRecords(cache) - list = apt_pkg.GetPkgSourceList() - list.ReadMainList() - dict = {} - for pkg in cache.Packages: - if len(pkg.VersionList) > 0: - dict[pkg.Name] = apt.Package(cache,depcache, - records, list, None, pkg) - - print cache["apt"] - time.sleep(1) - - gc.collect() + cache = apt_pkg.GetCache() + depcache = apt_pkg.GetDepCache(cache) + records = apt_pkg.GetPkgRecords(cache) + list = apt_pkg.GetPkgSourceList() + list.ReadMainList() + dict = {} + for pkg in cache.Packages: + if len(pkg.VersionList) > 0: + dict[pkg.Name] = apt.Package(cache, depcache, + records, list, None, pkg) + + print cache["apt"] + time.sleep(1) + + gc.collect() diff --git a/tests/pkgproblemresolver.py b/tests/pkgproblemresolver.py index 0ed32ea6..7d5ae682 100644 --- a/tests/pkgproblemresolver.py +++ b/tests/pkgproblemresolver.py @@ -6,64 +6,65 @@ import apt_pkg import sys + def main(): - apt_pkg.init() - cache = apt_pkg.GetCache() - depcache = apt_pkg.GetDepCache(cache) - depcache.Init() - i=0 - all=cache.PackageCount - print "Running DepCache test on all packages" - print "(trying to install each and then mark it keep again):" - # first, get all pkgs - for pkg in cache.Packages: - i += 1 - x = pkg.Name - # then get each version - ver =depcache.GetCandidateVer(pkg) - if ver != None: - depcache.MarkInstall(pkg) - if depcache.BrokenCount > 0: - fixer = apt_pkg.GetPkgProblemResolver(depcache) - fixer.Clear(pkg) - fixer.Protect(pkg) - # we first try to resolve the problem - # with the package that should be installed - # protected - try: - fixer.Resolve(True) - except SystemError: - # the pkg seems to be broken, the - # returns a exception - fixer.Clear(pkg) - fixer.Resolve(True) - if not depcache.MarkedInstall(pkg): - print "broken in archive: %s " % pkg.Name - fixer = None - if depcache.InstCount == 0: - if depcache.IsUpgradable(pkg): - print "Error marking %s for install" % x - for p in cache.Packages: - if depcache.MarkedInstall(p) or depcache.MarkedUpgrade(p): - depcache.MarkKeep(p) - if depcache.InstCount != 0: - print "Error undoing the selection for %s" % x - print "\r%i/%i=%.3f%% " % (i,all,(float(i)/float(all)*100)), + apt_pkg.init() + cache = apt_pkg.GetCache() + depcache = apt_pkg.GetDepCache(cache) + depcache.Init() + i=0 + all=cache.PackageCount + print "Running DepCache test on all packages" + print "(trying to install each and then mark it keep again):" + # first, get all pkgs + for pkg in cache.Packages: + i += 1 + x = pkg.Name + # then get each version + ver =depcache.GetCandidateVer(pkg) + if ver != None: + depcache.MarkInstall(pkg) + if depcache.BrokenCount > 0: + fixer = apt_pkg.GetPkgProblemResolver(depcache) + fixer.Clear(pkg) + fixer.Protect(pkg) + # we first try to resolve the problem + # with the package that should be installed + # protected + try: + fixer.Resolve(True) + except SystemError: + # the pkg seems to be broken, the + # returns a exception + fixer.Clear(pkg) + fixer.Resolve(True) + if not depcache.MarkedInstall(pkg): + print "broken in archive: %s " % pkg.Name + fixer = None + if depcache.InstCount == 0: + if depcache.IsUpgradable(pkg): + print "Error marking %s for install" % x + for p in cache.Packages: + if depcache.MarkedInstall(p) or depcache.MarkedUpgrade(p): + depcache.MarkKeep(p) + if depcache.InstCount != 0: + print "Error undoing the selection for %s" % x + print "\r%i/%i=%.3f%% " % (i, all, (float(i) / float(all) * 100)), - print - print "Trying Upgrade:" - depcache.Upgrade() - print "To install: %s " % depcache.InstCount - print "To remove: %s " % depcache.DelCount - print "Kept back: %s " % depcache.KeepCount + print + print "Trying Upgrade:" + depcache.Upgrade() + print "To install: %s " % depcache.InstCount + print "To remove: %s " % depcache.DelCount + print "Kept back: %s " % depcache.KeepCount - print "Trying DistUpgrade:" - depcache.Upgrade(True) - print "To install: %s " % depcache.InstCount - print "To remove: %s " % depcache.DelCount - print "Kept back: %s " % depcache.KeepCount + print "Trying DistUpgrade:" + depcache.Upgrade(True) + print "To install: %s " % depcache.InstCount + print "To remove: %s " % depcache.DelCount + print "Kept back: %s " % depcache.KeepCount if __name__ == "__main__": - main() - sys.exit(0) + main() + sys.exit(0) diff --git a/tests/pkgrecords.py b/tests/pkgrecords.py index 43723569..5866847d 100644 --- a/tests/pkgrecords.py +++ b/tests/pkgrecords.py @@ -7,30 +7,34 @@ import apt_pkg import sys + def main(): - apt_pkg.init() - cache = apt_pkg.GetCache() - depcache = apt_pkg.GetDepCache(cache) - depcache.Init() - i=0 - print "Running PkgRecords test on all packages:" - for pkg in cache.Packages: - i += 1 - records = apt_pkg.GetPkgRecords(cache) - if len(pkg.VersionList) == 0: - #print "no available version, cruft" - continue - version = depcache.GetCandidateVer(pkg) - if not version: - continue - file, index = version.FileList.pop(0) - if records.Lookup((file,index)): - #print records.FileName - x = records.FileName - y = records.LongDesc - pass - print "\r%i/%i=%.3f%% " % (i,cache.PackageCount, (float(i)/float(cache.PackageCount)*100)), + apt_pkg.init() + cache = apt_pkg.GetCache() + depcache = apt_pkg.GetDepCache(cache) + depcache.Init() + i=0 + print "Running PkgRecords test on all packages:" + for pkg in cache.Packages: + i += 1 + records = apt_pkg.GetPkgRecords(cache) + if len(pkg.VersionList) == 0: + #print "no available version, cruft" + continue + version = depcache.GetCandidateVer(pkg) + if not version: + continue + file, index = version.FileList.pop(0) + if records.Lookup((file, index)): + #print records.FileName + x = records.FileName + y = records.LongDesc + pass + print "\r%i/%i=%.3f%% " % ( + i, cache.PackageCount, + (float(i) / float(cache.PackageCount) * 100)), + if __name__ == "__main__": - main() - sys.exit(0) + main() + sys.exit(0) diff --git a/tests/pkgsrcrecords.py b/tests/pkgsrcrecords.py index 06c4a1ef..77670540 100644 --- a/tests/pkgsrcrecords.py +++ b/tests/pkgsrcrecords.py @@ -7,19 +7,23 @@ import apt_pkg import sys + def main(): - apt_pkg.init() - cache = apt_pkg.GetCache() - i=0 - print "Running PkgSrcRecords test on all packages:" - for x in cache.Packages: - i += 1 - src = apt_pkg.GetPkgSrcRecords() - if src.Lookup(x.Name): - #print src.Package - pass - print "\r%i/%i=%.3f%% " % (i,cache.PackageCount, (float(i)/float(cache.PackageCount)*100)), + apt_pkg.init() + cache = apt_pkg.GetCache() + i=0 + print "Running PkgSrcRecords test on all packages:" + for x in cache.Packages: + i += 1 + src = apt_pkg.GetPkgSrcRecords() + if src.Lookup(x.Name): + #print src.Package + pass + print "\r%i/%i=%.3f%% " % ( + i, cache.PackageCount, + (float(i) / float(cache.PackageCount) * 100)), + if __name__ == "__main__": - main() - sys.exit(0) + main() + sys.exit(0) diff --git a/tests/refcount.py b/tests/refcount.py index f3230bd3..a29744ae 100755 --- a/tests/refcount.py +++ b/tests/refcount.py @@ -1,6 +1,6 @@ #!/usr/bin/python-dbg -from pprint import pprint,pformat +from pprint import pprint, pformat import apt import sys import gc diff --git a/tests/test_aptsources.py b/tests/test_aptsources.py index c8d84395..3761f3ff 100644 --- a/tests/test_aptsources.py +++ b/tests/test_aptsources.py @@ -1,31 +1,35 @@ #!/usr/bin/env python import unittest -import apt_pkg import os import copy - import sys + sys.path.insert(0, "../") +import apt_pkg import aptsources import aptsources.sourceslist import aptsources.distro + class TestAptSources(unittest.TestCase): + def __init__(self, methodName): unittest.TestCase.__init__(self, methodName) apt_pkg.init() apt_pkg.Config.Set("Dir::Etc", os.getcwd()) - apt_pkg.Config.Set("Dir::Etc::sourceparts","/xxx") + apt_pkg.Config.Set("Dir::Etc::sourceparts", "/xxx") def testIsMirror(self): - self.assertTrue(aptsources.sourceslist.is_mirror("http://archive.ubuntu.com", - "http://de.archive.ubuntu.com")) - self.assertFalse(aptsources.sourceslist.is_mirror("http://archive.ubuntu.com", - "http://ftp.debian.org")) + yes = aptsources.sourceslist.is_mirror("http://archive.ubuntu.com", + "http://de.archive.ubuntu.com") + no = aptsources.sourceslist.is_mirror("http://archive.ubuntu.com", + "http://ftp.debian.org") + self.assertTrue(yes) + self.assertFalse(no) def testSourcesListReading(self): - apt_pkg.Config.Set("Dir::Etc::sourcelist","data/sources.list") + apt_pkg.Config.Set("Dir::Etc::sourcelist", "data/sources.list") sources = aptsources.sourceslist.SourcesList() self.assertEqual(len(sources.list), 6) # test load @@ -34,22 +38,22 @@ class TestAptSources(unittest.TestCase): self.assertEqual(len(sources.list), 6) def testSourcesListAdding(self): - apt_pkg.Config.Set("Dir::Etc::sourcelist","data/sources.list") + apt_pkg.Config.Set("Dir::Etc::sourcelist", "data/sources.list") sources = aptsources.sourceslist.SourcesList() # test to add something that is already there (main) before = copy.deepcopy(sources) - sources.add("deb","http://de.archive.ubuntu.com/ubuntu/", + sources.add("deb", "http://de.archive.ubuntu.com/ubuntu/", "edgy", ["main"]) self.assertTrue(sources.list == before.list) # test to add something that is already there (restricted) before = copy.deepcopy(sources) - sources.add("deb","http://de.archive.ubuntu.com/ubuntu/", + sources.add("deb", "http://de.archive.ubuntu.com/ubuntu/", "edgy", ["restricted"]) self.assertTrue(sources.list == before.list) # test to add something new: multiverse - sources.add("deb","http://de.archive.ubuntu.com/ubuntu/", + sources.add("deb", "http://de.archive.ubuntu.com/ubuntu/", "edgy", ["multiverse"]) found = False @@ -63,7 +67,7 @@ class TestAptSources(unittest.TestCase): # test to add something new: multiverse *and* # something that is already there before = copy.deepcopy(sources) - sources.add("deb","http://de.archive.ubuntu.com/ubuntu/", + sources.add("deb", "http://de.archive.ubuntu.com/ubuntu/", "edgy", ["universe", "something"]) found_universe = 0 @@ -82,7 +86,8 @@ class TestAptSources(unittest.TestCase): self.assertEqual(found_universe, 1) def testMatcher(self): - apt_pkg.Config.Set("Dir::Etc::sourcelist","data/sources.list.testDistribution") + apt_pkg.Config.Set("Dir::Etc::sourcelist", "data/sources.list.test" + "Distribution") sources = aptsources.sourceslist.SourcesList() distro = aptsources.distro.get_distro() distro.get_sources(sources) @@ -93,7 +98,8 @@ class TestAptSources(unittest.TestCase): self.fail("source entry '%s' has no matcher" % s) def testDistribution(self): - apt_pkg.Config.Set("Dir::Etc::sourcelist","data/sources.list.testDistribution") + apt_pkg.Config.Set("Dir::Etc::sourcelist", "data/sources.list.test" + "Distribution") sources = aptsources.sourceslist.SourcesList() distro = aptsources.distro.get_distro() distro.get_sources(sources) @@ -103,7 +109,8 @@ class TestAptSources(unittest.TestCase): if s.template: dist_templates.add(s.template.name) #print dist_templates - for d in ["hardy","hardy-security","hardy-updates","intrepid","hardy-backports"]: + for d in ("hardy", "hardy-security", "hardy-updates", "intrepid", + "hardy-backports"): self.assertTrue(d in dist_templates) # test enable comp = "restricted" @@ -115,7 +122,7 @@ class TestAptSources(unittest.TestCase): "edgy" in entry.dist): for c in entry.comps: if c == comp: - if not found.has_key(entry.dist): + if not entry.dist in found: found[entry.dist] = 0 found[entry.dist] += 1 #print "".join([s.str() for s in sources]) @@ -132,12 +139,13 @@ class TestAptSources(unittest.TestCase): entry.template.name == "edgy"): for c in entry.comps: if c == comp: - if not found.has_key(entry.dist): + if not entry.dist in found.has_key: found[entry.dist] = 0 found[entry.dist] += 1 #print "".join([s.str() for s in sources]) for key in found: self.assertEqual(found[key], 1) + if __name__ == "__main__": unittest.main() diff --git a/tests/test_hashsums.py b/tests/test_hashsums.py index 7fa6eb60..0cf6beb7 100644 --- a/tests/test_hashsums.py +++ b/tests/test_hashsums.py @@ -3,6 +3,7 @@ import unittest import apt_pkg + class testHashes(unittest.TestCase): " test the hashsum functions against strings and files " @@ -45,7 +46,8 @@ class testHashes(unittest.TestCase): def testSHA256(self): # simple s = "foo" - s_hash = "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae" + s_hash = \ + "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae" res = apt_pkg.sha256sum(s) self.assert_(res == s_hash) # file @@ -53,7 +55,8 @@ class testHashes(unittest.TestCase): self.assert_(res == s_hash) # with zero (\0) in the string s = "foo\0bar" - s_hash = "d6b681bfce7155d44721afb79c296ef4f0fa80a9dd6b43c5cf74dd0f64c85512" + s_hash = \ + "d6b681bfce7155d44721afb79c296ef4f0fa80a9dd6b43c5cf74dd0f64c85512" res = apt_pkg.sha256sum(s) self.assert_(res == s_hash) # file diff --git a/utils/get_debian_mirrors.py b/utils/get_debian_mirrors.py index 512731ed..2e3c7296 100755 --- a/utils/get_debian_mirrors.py +++ b/utils/get_debian_mirrors.py @@ -39,11 +39,13 @@ req = urllib2.Request("http://www.debian.org/mirror/mirrors_full") match = re.compile("^.*>([A-Za-z0-9-.\/_]+)<\/a>.*\n$") match_location = re.compile('^<strong><a name="([A-Z]+)">.*') + def add_sites(line, proto, sites, mirror_type): path = match.sub(r"\1", line) for site in sites: mirror_type.append("%s://%s%s\n" % (proto, site.lstrip(), path)) + try: print "Downloading mirrors list from the Debian website..." uri=urllib2.urlopen(req) diff --git a/utils/get_ubuntu_mirrors.py b/utils/get_ubuntu_mirrors.py index 605edcf5..ddd1e369 100755 --- a/utils/get_ubuntu_mirrors.py +++ b/utils/get_ubuntu_mirrors.py @@ -42,10 +42,10 @@ try: uri=urllib2.urlopen(req) p = re.compile('^.*((http|ftp):\/\/[A-Za-z0-9-.:\/_]+).*\n*$') for line in uri.readlines(): - if r"[[Anchor(dvd-images)]]" in line: - break - if "http://" in line or "ftp://" in line: - mirrors.append(p.sub(r"\1", line)) + if r"[[Anchor(dvd-images)]]" in line: + break + if "http://" in line or "ftp://" in line: + mirrors.append(p.sub(r"\1", line)) uri.close() except: print "Failed to download or extract the mirrors list!" @@ -57,5 +57,3 @@ for mirror in mirrors: list.write("%s\n" % mirror) list.close() print "Done." - - diff --git a/utils/get_ubuntu_mirrors_from_lp.py b/utils/get_ubuntu_mirrors_from_lp.py index 1f41e34b..59ddd84e 100755 --- a/utils/get_ubuntu_mirrors_from_lp.py +++ b/utils/get_ubuntu_mirrors_from_lp.py @@ -64,6 +64,8 @@ content_splits = re.split(r'<tr class="highlighted"', 'id="mirrors_list">.+?</table>', content)[0]) lines=[] + + def find(split): country = re.search(r"<strong>(.+?)</strong>", split) if not country: @@ -78,6 +80,7 @@ def find(split): split) map(lambda u: lines.append(u[0]), urls) + map(find, content_splits) print "Writing local mirrors list: %s" % list_path diff --git a/utils/mirrortest b/utils/mirrortest index 75ef917b..a724c81f 100755 --- a/utils/mirrortest +++ b/utils/mirrortest @@ -24,8 +24,8 @@ class MirrorTest: host = mirror.hostname except: continue - print "Pinging (Worker %s) %s (%s) ..." % (self.id, - host, + print "Pinging (Worker %s) %s (%s) ..." % (self.id, + host, MirrorTest.completed_pings) commando = os.popen("ping -q -c 4 -W 2 -i 0.3 %s" % host, "r") |
