예제 #1
0
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
예제 #2
0
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
예제 #3
0
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
예제 #4
0
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
예제 #5
0

#----------------------------
# 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:
예제 #6
0
        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: