#!/usr/bin/env python3 ## Maintainer : @T-Dynamos import os import json import sys filename = os.path.basename(sys.argv[0]) usage = f""" Usage: {filename} ... Add or increment TERMUX_PKG_REVISION of package. {filename} --dependencies Add or increment TERMUX_PKG_REVISION of all the packages that have in TERMUX_PKG_DEPENDS or in TERMUX_PKG_BUILD_DEPENDS """ REPO_PATH = os.path.join("/".join(os.path.realpath(sys.argv[0]).split("/")[:-3]), "repo.json") FOLDERS = [] for folder in list(json.load(open(REPO_PATH)).keys()): if folder != "pkg_format": FOLDERS.append(folder) def is_dep(DEP: str, line: str) -> bool: """ Checks if the dep is in line """ tmp_deps = line.split("=")[1] if tmp_deps.startswith('"'): deps = [dep.strip() for dep in tmp_deps.split('"')[1].split(",")] elif tmp_deps.startswith("'"): deps = [dep.strip() for dep in tmp_deps.split("'")[1].split(",")] else: deps = [tmp_deps] return DEP in deps def get_build_dependent_files(folders: list, DEP: str) -> list: """ Gets all the packages that depend on some package """ build_files = set() for d in folders: for folder in os.listdir(d): if os.path.exists(os.path.join(d, folder, "build.sh")): with open(os.path.join(d, folder, "build.sh"), "r") as file: for line in file.read().split("\n"): if line.startswith("TERMUX_PKG_DEPENDS") or line.startswith( "TERMUX_PKG_BUILD_DEPENDS" ): if is_dep(DEP, line): build_files.add(os.path.join(d, folder, "build.sh")) for subfile_name in os.listdir(os.path.join(d, folder)): if subfile_name.endswith(".subpackage.sh"): with open(os.path.join(d, folder, subfile_name)) as file: for line in file.read().split("\n"): if line.startswith("TERMUX_SUBPKG_DEPENDS"): if is_dep(DEP, line): build_files.add(os.path.join(d, folder, "build.sh")) return build_files def bump_revision(file: str) -> None: """ Bumps version in file """ opened_file = open(file, "r") file_read = opened_file.read().split("\n") revision = 0 if "TERMUX_PKG_REVISION" in "\n".join(file_read): for line in file_read: if line.startswith("TERMUX_PKG_REVISION"): revision = line.split("=")[-1] if revision.startswith('"'): revision = revision.split('"')[1] revision = int(revision) + 1 file_read[file_read.index(line)] = ( line.split("=")[0] + "=" + str(revision) ) break else: for line in file_read: if line.startswith("TERMUX_PKG_VERSION"): file_read.insert(file_read.index(line) + 1, "TERMUX_PKG_REVISION=1") revision = 1 break opened_file.close() opened_file = open(file,"w") opened_file.write("\n".join(file_read)) opened_file.close() print("{} -> {} {}".format(revision - 1, revision, file)) def locate_dir(file: str) -> str: """ Finds package in repo """ for repo in FOLDERS: if file in os.listdir(repo): file_final = f"{repo}/{file}/build.sh" return file_final if os.path.exists(file_final) else exit("Error : File {} does not exists!".format(file_final)) return exit("Package {} not found".format(file)) def parse_args() -> None: if len(sys.argv) == 1 or sys.argv[1] in ["--help", "-h"]: print(usage) exit(0) if sys.argv[1] in ["--dependencies", "-d"] and len(sys.argv) > 2: build_files = get_build_dependent_files(FOLDERS, os.path.basename(sys.argv[2])) print("Bumping all {} files".format(len(build_files)), end="\n\n") for files in build_files: bump_revision(files) exit(0) if len(sys.argv) >= 2 and sys.argv[1] not in ["--dependencies", "-d"]: print("Bumping {} packages".format(len(sys.argv[1:])), end="\n\n") packages = sys.argv[1:] for package in packages: bump_revision(locate_dir(( os.path.basename(package[:-1]) if package[-1] == "/" else os.path.basename(package) ) if "/" in package else package)) exit(0) else: print(usage) exit(0) if __name__ == "__main__": parse_args()