def make_plan()

in bot/__main__.py [0:0]


def make_plan(branches):
    tracked_packages = config.get("tracked-packages", {})

    local_assets = {}
    for branch, package, version in assets.walk():
        meta = assets.get_meta(branch, package, version)
        if meta is not None:
            local_assets.setdefault(package, {}).setdefault(branch, {}).setdefault(version, meta)

    remote_assets = {}
    for package in tracked_packages:
        for branch in tracked_packages[package]["branches"]:
            package_dir = packages.packages_dir / branch / "packages" / package
            if package_dir.exists():
                for version in os.listdir(package_dir):
                    meta = packages.get_manifest(branch, package, version)
                    if meta is not None:
                        remote_assets.setdefault(package, {}).setdefault(branch, {}).setdefault(version, meta)

    for package in remote_assets:
        for branch in remote_assets[package]:
            local_versions = set(local_assets.get(package, {}).get(branch, {}))
            remote_versions = set(remote_assets[package][branch])

            min_version = tracked_packages[package].get("minimum-version", 0)
            if min_version:
                remote_versions = {v for v in remote_versions if v >= min_version or v in local_versions}

            all_versions = local_versions | remote_versions
            only_local = local_versions - remote_versions
            only_remote = remote_versions - local_versions

            yield (package, branch, all_versions, only_local, only_remote)