Skip to content
Snippets Groups Projects
pipdeps.py 39.4 KiB
Newer Older
  • Learn to ignore specific revisions
  •                 reqs.append(comb)
            for pkg, version in reqs[0]:
                if 'installed_version' in data[pkg].keys() and \
                   data[pkg]['installed_version'] != version:
                    out.append((pkg, version))
            return out
        return None
    
    def ibranch(data, fix=False):
        """
        Return upgradeable versions of independent branch
        """
        out = {}
        no_news_req = get_no_news_req(data)
        branches = get_branches(data)
        _package_no_news, package_with_news = single_multi(data)
        co_branches = get_co_branches(branches)
        for branch in branches:
            if branch in co_branches:
                continue
            if fix:
                version = pvector(branch, data)[0][1]
                pkg_reqs = save_version({}, data, branch, version)
                common_reqs = merge_two_dicts(pkg_reqs, no_news_req)
                packages = [pvector(pkg, data)[:2] \
                            for pkg in branches[branch] if pkg in package_with_news]
            else:
                common_reqs = no_news_req.copy()
                packages = [pvector(branch, data)]+[pvector(pkg, data) \
                            for pkg in branches[branch] if pkg in package_with_news]
            compatible = u_comb(data, packages, common_reqs)
            if compatible:
                for pkg, version in compatible:
                    out = save_ic(out, pkg, compatible=version)
        return out
    
    def p_upgrade(data, pkg, compatible=None, incompatible=None):
        """
        Partial upgrade
        """
        if compatible:
            data[pkg]['upgradeable_version'] = compatible
        if incompatible:
            for version in incompatible:
                if compatible and version not in compatible:
                    data = move_incompatible(data, [(pkg, version)])
                elif not compatible:
                    data = move_incompatible(data, [(pkg, version)])
        return data
    
    def first_loop(data):
        """
        Upgrade loop
        """
        while True:
            to_delete_hards = del_hards(data)
            data = move_incompatible(data, to_delete_hards)
            to_delete_no_news = del_no_news(data)
            data = move_incompatible(data, to_delete_no_news)
            to_delete_one_ver = del_one_ver(data)
            data = move_incompatible(data, to_delete_one_ver)
    
            phase_one_packages = phase_one(data)
            for pkg, pkg_data in phase_one_packages.iteritems():
                data = p_upgrade(data, pkg, compatible=pkg_data['compatible'],
                                 incompatible=pkg_data['incompatible'])
    
            cross_pkgs = cross_packages(data)
            for pkg, pkg_data in cross_pkgs.iteritems():
                data = p_upgrade(data, pkg, compatible=pkg_data['compatible'],
                                 incompatible=pkg_data['incompatible'])
    
            to_delete_noti = del_notinstalled(data)
            data = move_incompatible(data, to_delete_noti)
    
            i_branch = ibranch(data, fix=True)
            for pkg, pkg_data in i_branch.iteritems():
                data = p_upgrade(data, pkg, compatible=pkg_data['compatible'])
            if all([not to_delete_hards, not to_delete_no_news, not to_delete_one_ver,
                    not phase_one_packages, not cross_pkgs, not to_delete_noti, not i_branch]):
                break
        return data
    
    Marek Chrastina's avatar
    Marek Chrastina committed
    def main():
        """
        main function
        """
        os.environ["PYTHONWARNINGS"] = "ignore:DEPRECATION"
        arguments = arg_parse()
    
        packages_data = get_pkg_data()
        packages_data = first_loop(packages_data)
    
        i_branch = ibranch(packages_data)
        for package, data in i_branch.iteritems():
            if data['compatible']:
                packages_data[package]['upgradeable_version'] = data['compatible']
    
        check_co_branches(packages_data)
        check_extras(packages_data)
    
    Marek Chrastina's avatar
    Marek Chrastina committed
    
    
            sys.exit(print_list(packages_data))
        if arguments.show is not None:
            if arguments.show:
                pkgs = arguments.show
            else:
                pkgs = packages_data
            for pkg in pkgs:
    
    Marek Chrastina's avatar
    Marek Chrastina committed
                pprint.pprint({pkg: packages_data[pkg]})
            sys.exit(0)
    
            to_upgrade = []
            for pkg in sorted(select_upkgs(packages_data, 'upgradeable_version')):
                to_upgrade.append((pkg, packages_data[pkg]['upgradeable_version']))
            upgrade_package(to_upgrade)
    
    Marek Chrastina's avatar
    Marek Chrastina committed
    
    if __name__ == "__main__":
        main()