* plan emerge
This commit is contained in:
@@ -651,6 +651,7 @@ class Builder:
|
|||||||
|
|
||||||
ctx.ui.info(_("Creating PISI package %s.") % name)
|
ctx.ui.info(_("Creating PISI package %s.") % name)
|
||||||
|
|
||||||
|
# somebody explain to me why this is done here -- exa
|
||||||
if old_build_number:
|
if old_build_number:
|
||||||
old_package_name = util.package_name(package.name,
|
old_package_name = util.package_name(package.name,
|
||||||
self.spec.source.version,
|
self.spec.source.version,
|
||||||
|
|||||||
+37
-14
@@ -607,36 +607,59 @@ installed in the respective order to satisfy dependencies:
|
|||||||
|
|
||||||
ctx.ui.notify(ui.packagestogo, order = order)
|
ctx.ui.notify(ui.packagestogo, order = order)
|
||||||
|
|
||||||
|
ctx.config.output_dir = ctx.config.packages_dir()
|
||||||
for x in order:
|
for x in order:
|
||||||
atomicoperations.install_single_name(x)
|
package_names, blah = atomicoperations.build(x)
|
||||||
|
install(package_names) # handle inter-package deps here
|
||||||
|
|
||||||
def plan_emerge(A):
|
def plan_emerge(A):
|
||||||
|
|
||||||
# try to construct a pisi graph of packages to
|
# try to construct a pisi graph of packages to
|
||||||
# install / reinstall
|
# install / reinstall
|
||||||
|
|
||||||
G_f = pgraph.PGraph(packagedb) # construct G_f
|
G_f = pisi.graph.Digraph()
|
||||||
|
|
||||||
# find the "install closure" graph of G_f by package
|
def get_src(name):
|
||||||
# set A using packagedb
|
return ctx.sourcedb.get_source(sf)[1].source
|
||||||
for x in A:
|
def add_src(name):
|
||||||
G_f.add_package(x)
|
if not str(src.name) in G_f.vertices():
|
||||||
|
G_f.add_vertex(str(src.name), (src.version, src.release))
|
||||||
|
#for pkg in sf.packages:
|
||||||
|
# pkgtosrc[str(pkg.name)] = str(src.name)
|
||||||
|
def pkgtosrc(pkg):
|
||||||
|
return ctx.sourcedb.pkgtosrc(pkg)
|
||||||
|
|
||||||
|
# setup first
|
||||||
|
#specfiles = [ ctx.sourcedb.get_source(x)[1] for x in A ]
|
||||||
|
#pkgtosrc = {}
|
||||||
B = A
|
B = A
|
||||||
|
|
||||||
while len(B) > 0:
|
while len(B) > 0:
|
||||||
Bp = set()
|
Bp = set()
|
||||||
for x in B:
|
for x in B:
|
||||||
pkg = packagedb.get_package(x)
|
src = get_src(x)
|
||||||
for dep in pkg.runtimeDependencies():
|
add_src(src)
|
||||||
ctx.ui.debug('checking %s' % str(dep))
|
|
||||||
# we don't deal with already *satisfied* dependencies
|
# add dependencies
|
||||||
if not dependency.installed_satisfies_dep(dep):
|
for builddep in src.buildDependencies:
|
||||||
|
srcdep = pkgtosrc(builddep.package)
|
||||||
|
add_src(srcdep)
|
||||||
if not dep.package in G_f.vertices():
|
if not dep.package in G_f.vertices():
|
||||||
Bp.add(str(dep.package))
|
Bp.add(srcdep)
|
||||||
G_f.add_dep(x, dep)
|
G_f.add_edge(src.name, srcdep)
|
||||||
|
for pkg in x.packages:
|
||||||
|
for rtdep in pkg.packageDependencies:
|
||||||
|
if not dependency.installed_satisfies_dep(rtdep):
|
||||||
|
srcdep = pkgtosrc(rtdep.package)
|
||||||
|
add_src(srcdep)
|
||||||
|
if not dep.package in G_f.vertices():
|
||||||
|
Bp.add(srcdep)
|
||||||
|
if not src.name == srcdep: # firefox - firefox-devel thing
|
||||||
|
G_f.add_edge(src.name, srcdep )
|
||||||
B = Bp
|
B = Bp
|
||||||
|
|
||||||
if ctx.config.get_option('debug'):
|
if ctx.config.get_option('debug'):
|
||||||
G_f.write_graphviz(sys.stdout)
|
G_f.write_graphviz(sys.stdout)
|
||||||
order = G_f.topological_sort()
|
order = G_f.topological_sort()
|
||||||
order.reverse()
|
order.reverse()
|
||||||
check_conflicts(order)
|
|
||||||
return G_f, order
|
return G_f, order
|
||||||
|
|||||||
+9
-2
@@ -37,6 +37,7 @@ class SourceDB(object):
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.d = shelve.LockedDBShelf('source')
|
self.d = shelve.LockedDBShelf('source')
|
||||||
|
self.dpkgtosrc = shelve.LockedDBShelf('pkgtosrc')
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
self.d.close()
|
self.d.close()
|
||||||
@@ -60,6 +61,10 @@ class SourceDB(object):
|
|||||||
return (s[repo], repo)
|
return (s[repo], repo)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def pkgtosrc(self, name):
|
||||||
|
name = str(name)
|
||||||
|
return self.dpkgtosrc[name]
|
||||||
|
|
||||||
def add_source(self, source_info, repo, txn = None):
|
def add_source(self, source_info, repo, txn = None):
|
||||||
assert not source_info.errors()
|
assert not source_info.errors()
|
||||||
name = str(source_info.name)
|
name = str(source_info.name)
|
||||||
@@ -68,9 +73,11 @@ class SourceDB(object):
|
|||||||
if not self.d.has_key(name):
|
if not self.d.has_key(name):
|
||||||
s = dict()
|
s = dict()
|
||||||
else:
|
else:
|
||||||
s = self.d[name]
|
s = self.d.get(name, txn)
|
||||||
s[repo] = source_info
|
s[repo] = source_info
|
||||||
self.d[name] = s
|
self.d.put(name, s, txn)
|
||||||
|
for pkg in source_info.packages:
|
||||||
|
self.dpkgtosrc.put(pkg.name, name, txn)
|
||||||
self.d.txn_proc(proc, txn)
|
self.d.txn_proc(proc, txn)
|
||||||
|
|
||||||
def remove_source(self, name, repo):
|
def remove_source(self, name, repo):
|
||||||
|
|||||||
Reference in New Issue
Block a user