diff options
Diffstat (limited to 'scripts/obs/lib/osc.py')
-rw-r--r-- | scripts/obs/lib/osc.py | 90 |
1 files changed, 76 insertions, 14 deletions
diff --git a/scripts/obs/lib/osc.py b/scripts/obs/lib/osc.py index 2fcdbc6..ef2fc4b 100644 --- a/scripts/obs/lib/osc.py +++ b/scripts/obs/lib/osc.py @@ -6,22 +6,36 @@ import glob import os import shlex import shutil +import sys import lib import lib.config apiurl = None +proj = None -def check_proj(obs_project): - if ":" in obs_project: - return +def check_oscrc(): + configdir = os.environ.get("XDG_CONFIG_HOME", "~/.config") + paths = ["~/.oscrc", f"{configdir}/osc/oscrc"] + for path in paths: + if os.path.exists(os.path.expanduser(path)): + return - print(f"ERROR: this doesn't look like a valid OBS project: {obs_project}") - exit(1) + print("ERROR: oscrc does not exist, please create one as explained in the" + " README.") + sys.exit(1) -def set_apiurl(url): +def set_apiurl(url, obs_proj=None): global apiurl + global proj + + if obs_proj is not None: + if ":" not in obs_proj: + print(f"ERROR: this doesn't look like a valid OBS project: {obs_proj}") + sys.exit(1) + proj = obs_proj + apiurl = url @@ -44,13 +58,14 @@ def run_osc(cmd, *args, **kwargs): return lib.run_cmd(cmd, *args, **kwargs) -def get_remote_pkgs(proj): +def get_remote_pkgs(): print(f"OBS: getting packages in {proj}") ret = run_osc(["list", proj]) return ret.output.rstrip().split("\n") -def get_package_version(proj, package): +def get_package_version(package): + feed = lib.args.feed print(f"{package}: getting OBS version") ret = run_osc(["list", proj, os.path.basename(package)]) @@ -58,18 +73,24 @@ def get_package_version(proj, package): if ret.output == '\n': return "0" - # Extract the version from the dsc filename + # Extract the version from the file list for line in ret.output.split('\n'): line = line.rstrip() - if line.endswith(".dsc"): - return line.split("_")[-1][:-4] + if feed == "master" and package != "osmocom-master": + # Use commit_*.txt + if line.startswith("commit_") and line.endswith(".txt"): + return line.split("_")[1].split(".")[0] + else: + # Use *.dsc + if line.endswith(".dsc"): + return line.split("_")[-1][:-4] lib.exit_error_cmd(ret, "failed to find package version on OBS by" - " extracting the version from the .dsc filename") + " extracting the version from the file list") -def create_package(proj, package): +def create_package(package): print(f"{package}: creating new OBS package") # cut off repository prefix like in "python/osmo-python-tests" @@ -93,7 +114,7 @@ def remove_temp_osc(): lib.run_cmd(["rm", "-rf", f"{lib.config.path_temp}/osc"]) -def update_package(proj, package, version): +def update_package(package, version): print(f"{package}: updating OBS package") # cut off repository prefix like in "python/osmo-python-tests" @@ -118,3 +139,44 @@ def update_package(proj, package, version): run_osc(["commit", "-m", f"upgrade to {version}"], cwd=path_temp_osc_pkg) remove_temp_osc() + + +def delete_package(package, commit_msg): + print(f"{package}: removing from OBS ({commit_msg})") + run_osc(["rdelete", "-m", commit_msg, proj, os.path.basename(package)]) + + +def get_prjconf(output_file): + print(f"{proj}: getting prjconf") + prjconf = lib.osc.run_osc(["meta", "prjconf", proj]).output + with open(output_file, "w") as h: + h.write(prjconf) + + +def update_prjconf(prjconf_file, commit_msg): + print(f"{proj}: updating prjconf") + lib.osc.run_osc(["meta", + "prjconf", + "-F", prjconf_file, + "-m", commit_msg, + proj]) + + +def get_meta(output_file): + print(f"{proj}: getting meta") + meta = lib.osc.run_osc(["meta", "prj", proj]).output + with open(output_file, "w") as h: + h.write(meta) + + +def update_meta(meta_file, commit_msg): + print(f"{proj}: updating meta") + lib.osc.run_osc(["meta", + "prj", + "-F", meta_file, + "-m", commit_msg, + proj]) + +def get_projects(): + print(f"OBS: getting list of projects ({apiurl})") + return lib.osc.run_osc(["ls"]).output.rstrip().split("\n") |