aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/obs/lib/osc.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/obs/lib/osc.py')
-rw-r--r--scripts/obs/lib/osc.py90
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")