예제 #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 sort_by_dep(pkglist, packages_infor, depnum, curmap):
    # pkglist might be duplicated but curmap can skip it.
    if pkglist == []:
        return []
    result = []
    for pkg in pkglist:
        if minset_map.has_key(pkg):
            continue
        if curmap.has_key(pkg):
            continue
        curmap[pkg] = 'y'
        if not packages_infor.has_key(pkg):
            pkgdeplist = []
        else:
            pkgdeplist = packages_infor[pkg][depnum]
        result = result + sort_by_dep(pkgdeplist, packages_infor, depnum, curmap) + [pkg]
    return result
예제 #3
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
예제 #4
0
def sort_by_dep(pkglist, packages_infor, depnum, curmap):
    # pkglist might be duplicated but curmap can skip it.
    if pkglist == []:
        return []
    result = []
    for pkg in pkglist:
        if minset_map.has_key(pkg):
            continue
        if curmap.has_key(pkg):
            continue
        curmap[pkg] = 'y'
        if not packages_infor.has_key(pkg):
            pkgdeplist = []
        else:
            pkgdeplist = packages_infor[pkg][depnum]
        result = result + sort_by_dep(pkgdeplist, packages_infor, depnum,
                                      curmap) + [pkg]
    return result
예제 #5
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
예제 #6
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
예제 #7
0
def add_rm_dep(packages_infor, depnum):
    # Adjust dependencies according to add_deps, remove_deps
    adjdeps_map = {}
    for k in add_deps.keys():
        adjdeps_map[k] = 'y'
    for k in remove_deps.keys():
        adjdeps_map[k] = 'y'
    for pkg in adjdeps_map.keys():
        add_map = {}
        remove_map = {}
        if add_deps.has_key(pkg):
            for dep in add_deps[pkg]:
                add_map[dep] = 'y'
        if remove_deps.has_key(pkg):
            for dep in remove_deps[pkg]:
                remove_map[dep] = 'y'
        if packages_infor.has_key(pkg):
            for dep in packages_infor[pkg][depnum]:
                if not remove_map.has_key(dep):
                    add_map[dep] = 'y'
            packages_infor[pkg][depnum] = add_map.keys()
예제 #8
0
def add_rm_dep(packages_infor, depnum):
    # Adjust dependencies according to add_deps, remove_deps
    adjdeps_map = {}
    for k in add_deps.keys():
        adjdeps_map[k] = 'y'
    for k in remove_deps.keys():
        adjdeps_map[k] = 'y'
    for pkg in adjdeps_map.keys():
        add_map = {}
        remove_map = {}
        if add_deps.has_key(pkg):
            for dep in add_deps[pkg]:
                add_map[dep] = 'y'
        if remove_deps.has_key(pkg):
            for dep in remove_deps[pkg]:
                remove_map[dep] = 'y'
        if packages_infor.has_key(pkg):
            for dep in packages_infor[pkg][depnum]:
                if not remove_map.has_key(dep):
                    add_map[dep] = 'y'
            packages_infor[pkg][depnum] = add_map.keys()