def break_loop(packages_infor, depnum): # Remove the bypass dependencies in packages_infor. for pkgfn in packages_infor.keys(): topdeps = packages_infor[pkgfn][depnum] curdeplist = [] for dep in topdeps: curdeplist.append((dep, [])) subdeps_map = {} loopdeps_map = {} while curdeplist != []: newdeplist = [] for (dep, deppath) in curdeplist: newdeppath = deppath + [dep] if dep == pkgfn: os.write(logfd, 'LoopDep: %s\n' % str(newdeppath)) for d in deppath: loopdeps_map[d] = 'y' continue # Do not go more on loop dependency. if not packages_infor.has_key(dep): continue depdeplist = packages_infor[dep][depnum] for depdep in depdeplist: if subdeps_map.has_key(depdep): continue if deppath != [] and depdep in topdeps: #print pkgfn, newdeppath, depdep continue newdeplist.append((depdep, newdeppath)) subdeps_map[depdep] = str(newdeppath) curdeplist = newdeplist newtopdeps = [] # Loop Dependency should be reserved. for dep in loopdeps_map.keys(): if dep != pkgfn: newtopdeps.append(dep) for dep in topdeps: if loopdeps_map.has_key(dep): continue if subdeps_map.has_key(dep): os.write( logfd, '%s is removed from the deplist of %s because %s.\n' % (dep, pkgfn, subdeps_map[dep])) continue newtopdeps.append(dep) packages_infor[pkgfn][depnum] = newtopdeps del (subdeps_map) # Release the space occupied by subdeps_map. return packages_infor
def break_loop(packages_infor, depnum): # Remove the bypass dependencies in packages_infor. for pkgfn in packages_infor.keys(): topdeps = packages_infor[pkgfn][depnum] curdeplist = [] for dep in topdeps: curdeplist.append((dep, [])) subdeps_map = {} loopdeps_map = {} while curdeplist != []: newdeplist = [] for (dep, deppath) in curdeplist: newdeppath = deppath + [dep] if dep == pkgfn: os.write(logfd, 'LoopDep: %s\n' % str(newdeppath)) for d in deppath: loopdeps_map[d] = 'y' continue # Do not go more on loop dependency. if not packages_infor.has_key(dep): continue depdeplist = packages_infor[dep][depnum] for depdep in depdeplist: if subdeps_map.has_key(depdep): continue if deppath != [] and depdep in topdeps: #print pkgfn, newdeppath, depdep continue newdeplist.append((depdep, newdeppath)) subdeps_map[depdep] = str(newdeppath) curdeplist = newdeplist newtopdeps = [] # Loop Dependency should be reserved. for dep in loopdeps_map.keys(): if dep != pkgfn: newtopdeps.append(dep) for dep in topdeps: if loopdeps_map.has_key(dep): continue if subdeps_map.has_key(dep): os.write(logfd, '%s is removed from the deplist of %s because %s.\n' % (dep, pkgfn, subdeps_map[dep])) continue newtopdeps.append(dep) packages_infor[pkgfn][depnum] = newtopdeps del(subdeps_map) # Release the space occupied by subdeps_map. return packages_infor
def get_pkg_weight_number(packages_infor, depnum): # Increase the weight number of each pkg by every pkg's dependency packages_weight_number = {} for pkgfn in packages_infor.keys(): topdeps = packages_infor[pkgfn][depnum] curdeplist = [] for dep in topdeps: curdeplist.append((dep, [])) subdeps_map = {} loopdeps_map = {} while curdeplist != []: newdeplist = [] for (dep, deppath) in curdeplist: newdeppath = deppath + [dep] if dep == pkgfn: #os.write(logfd, 'LoopDep: %s\n' % str(newdeppath)) for d in deppath: loopdeps_map[d] = 'y' continue # Do not go more on loop dependency. if not packages_infor.has_key(dep): continue depdeplist = packages_infor[dep][depnum] for depdep in depdeplist: if subdeps_map.has_key(depdep): continue if deppath != [] and depdep in topdeps: #print pkgfn, newdeppath, depdep continue newdeplist.append((depdep, newdeppath)) subdeps_map[depdep] = str(newdeppath) curdeplist = newdeplist import copy all_dep_pkg = [] all_dep_pkg = copy.deepcopy(subdeps_map.keys()) all_dep_pkg.extend(topdeps) all_dep_pkg = list(set(all_dep_pkg)) for pkg in all_dep_pkg: if packages_weight_number.has_key(pkg): packages_weight_number[pkg] += 1 else: packages_weight_number[pkg] = 1 del (subdeps_map) # Release the space occupied by subdeps_map. return packages_weight_number
def get_pkg_weight_number(packages_infor, depnum): # Increase the weight number of each pkg by every pkg's dependency packages_weight_number = {} for pkgfn in packages_infor.keys(): topdeps = packages_infor[pkgfn][depnum] curdeplist = [] for dep in topdeps: curdeplist.append((dep, [])) subdeps_map = {} loopdeps_map = {} while curdeplist != []: newdeplist = [] for (dep, deppath) in curdeplist: newdeppath = deppath + [dep] if dep == pkgfn: #os.write(logfd, 'LoopDep: %s\n' % str(newdeppath)) for d in deppath: loopdeps_map[d] = 'y' continue # Do not go more on loop dependency. if not packages_infor.has_key(dep): continue depdeplist = packages_infor[dep][depnum] for depdep in depdeplist: if subdeps_map.has_key(depdep): continue if deppath != [] and depdep in topdeps: #print pkgfn, newdeppath, depdep continue newdeplist.append((depdep, newdeppath)) subdeps_map[depdep] = str(newdeppath) curdeplist = newdeplist import copy all_dep_pkg = [] all_dep_pkg = copy.deepcopy(subdeps_map.keys()) all_dep_pkg.extend(topdeps) all_dep_pkg = list(set(all_dep_pkg)) for pkg in all_dep_pkg: if packages_weight_number.has_key(pkg): packages_weight_number[pkg] += 1 else: packages_weight_number[pkg] = 1 del(subdeps_map) # Release the space occupied by subdeps_map. return packages_weight_number
#---------------------------- # First Sort for placement in placement_list: # We can only sort by basepkg in first time, because it will break the order. if use_sort_by_base_pkg: placement = sort_by_basepkg(placement, basepkg_list) result_list = sort_by_dep(placement, packages_infor, pkgpublic.deps, {}) minset_list.append(result_list) for result in result_list: minset_map[result] = 'y' # Search all packages that are not arrange yet. last_list = [] for pkgfn in packages_infor.keys(): if minset_map.has_key(pkgfn): continue last_list.append(pkgfn) # We can only sort by basepkg in first time, because it will break the order. if use_sort_by_base_pkg: last_list = sort_by_basepkg(last_list, basepkg_list) result_list = sort_by_dep(last_list, packages_infor, pkgpublic.deps, {}) minset_list.append(result_list) #--------------------------- # Second Sort # clean the minset_map firstly minset_map.clear() if use_script_in_dep:
result = result + sort_by_dep(pkgdeplist, packages_infor, depnum, curmap) + [pkg] return result #---------------------------- # First Sort for placement in placement_list: # We can only sort by basepkg in first time, because it will break the order. if use_sort_by_base_pkg: placement = sort_by_basepkg(placement, basepkg_list) result_list = sort_by_dep(placement, packages_infor, pkgpublic.deps, {}) minset_list.append(result_list) for result in result_list: minset_map[result] = 'y' # Search all packages that are not arrange yet. last_list = [] for pkgfn in packages_infor.keys(): if minset_map.has_key(pkgfn): continue last_list.append(pkgfn) # We can only sort by basepkg in first time, because it will break the order. if use_sort_by_base_pkg: last_list = sort_by_basepkg(last_list, basepkg_list) result_list = sort_by_dep(last_list, packages_infor, pkgpublic.deps, {}) minset_list.append(result_list) #--------------------------- # Second Sort # clean the minset_map firstly minset_map.clear() if use_script_in_dep: