def parse_index(self, console=None, update_repo=False): path = fetch_uri(self.base_uri, self.cache_dir, self.index_name, console, update_repo) if path.endswith(".bz2"): import bz2 data = file(path).read() data = bz2.decompress(data) doc = piksemel.parseString(data) else: doc = piksemel.parse(path) for tag in doc.tags('Package'): p = Package(tag) self.packages[p.name] = p self.size += p.size self.inst_size += p.inst_size self.components[p.component] = [] for name in self.packages: p = self.packages[name] for name2 in p.depends: if self.packages.has_key(name2): self.packages[name2].revdeps.append(p.name) else: print "Error: package %s depends on non existing package %s" % (p.name, name2) if self.components.has_key(p.component): self.components[p.component].append(p.name) from pisi.graph import Digraph, CycleException dep_graph = Digraph() for name in self.packages: p = self.packages[name] for dep in p.depends: dep_graph.add_edge(name, dep) try: dep_graph.dfs() except CycleException, c: print "Error: Cyclic dependency detected: %s" % " -> ".join(c.cycle) sys.exit(1)
def parse_index(self, console=None, update_repo=False): path = fetch_uri(self.base_uri, self.cache_dir, self.index_name, console, update_repo) if path.endswith(".bz2"): import bz2 data = open(path).read() data = bz2.decompress(data) doc = piksemel.parseString(data) elif path.endswith(".xz"): try: import lzma except ImportError: print "Install python-pyliblzma package, or try a different index format." return data = open(path).read() data = lzma.decompress(data) doc = piksemel.parseString(data) else: doc = piksemel.parse(path) for tag in doc.tags('Package'): p = Package(tag) self.packages[p.name] = p self.size += p.size self.inst_size += p.inst_size if p.component not in self.components: self.components[p.component] = [] for name in self.packages: p = self.packages[name] for name2 in p.depends: if self.packages.has_key(name2): self.packages[name2].revdeps.append(p.name) else: raise ExPackageMissing, (p.name, name2) if p.component in self.components: self.components[p.component].append(p.name) else: self.components[p.component] = [] from pisi.graph import Digraph, CycleException dep_graph = Digraph() for name in self.packages: p = self.packages[name] for dep in p.depends: dep_graph.add_edge(name, dep) try: dep_graph.dfs() except CycleException, c: raise ExPackageCycle, (c.cycle)
def parse_data(self, path): if path.endswith(".bz2"): import bz2 data = file(path).read() data = bz2.decompress(data) doc = piksemel.parseString(data) else: doc = piksemel.parse(path) for tag in doc.tags('Package'): p = Package(tag) self.packages[p.name] = p self.size += p.size self.inst_size += p.inst_size if p.component not in self.components: self.components[p.component] = [] for name in self.packages: p = self.packages[name] for name2 in p.depends: if self.packages.has_key(name2): self.packages[name2].revdeps.append(p.name) else: raise ExPackageMissing, (p.name, name2) if p.component in self.components: self.components[p.component].append(p.name) else: self.components[p.component] = [] from pisi.graph import Digraph, CycleException dep_graph = Digraph() for name in self.packages: p = self.packages[name] for dep in p.depends: dep_graph.add_edge(name, dep) try: dep_graph.dfs() except CycleException, c: raise ExPackageCycle, (c.cycle)