From 1a5a2c3136d29e73ac22a7a168593ec1ea48fc0e Mon Sep 17 00:00:00 2001 From: Davide Cavalca Date: Nov 10 2020 01:06:59 +0000 Subject: create-review: handle placeholders in upload_target --- diff --git a/src/FedoraReview/create_review.py b/src/FedoraReview/create_review.py index 2f25e00..45a5471 100644 --- a/src/FedoraReview/create_review.py +++ b/src/FedoraReview/create_review.py @@ -132,7 +132,7 @@ class Settings(object): """ gitsync Settings """ # upload target - upload_target = "fedorapeople.org:public_html/" + upload_target = "@username@.fedorapeople.org:public_html/" def __init__(self): """Constructor of the Settings object. @@ -194,6 +194,9 @@ class ReviewRequest(object): within the class. """ + USERNAME_PLACEHOLDER = "@username@" + PKGNAME_PLACEHOLDER = "@pkgname@" + def __init__(self): """ Constructor. """ self.settings = Settings() @@ -281,12 +284,30 @@ class ReviewRequest(object): else: raise FedoraCreateReviewError("Failed to acquire a valid Kerberos ticket") + def upload_target(self): + """ Get the upload target from settings and fill in the placeholders + if needed. + """ + target = self.settings.upload_target + # ensure we're always setting the right fedorapeople URL + if target.startswith("fedorapeople.org:"): + target = target.replace("fedorapeople.org:", "@username@.fedorapeople.org:") + # fill in placeholders + if self.USERNAME_PLACEHOLDER in target: + target = target.replace(self.USERNAME_PLACEHOLDER, self.username) + if self.PKGNAME_PLACEHOLDER in target: + package_name = self.retrieve_name() + target = target.replace(self.PKGNAME_PLACEHOLDER, package_name) + if not target.endswith("/"): + target = "{}/".format(target) + + return target + def fill_urls(self): """ Fill the spec and src.rpm urls into the info table using the info in the settings. """ - complement_url = self.settings.upload_target.split("public_html/")[1] - url = "https://{}.fedorapeople.org/{}/".format(self.username, complement_url) + url = "https://{}".format(self.upload_target().replace(":public_html", "")) self.info["specurl"] = url + os.path.basename(self.specfile) self.info["srpmurl"] = url + os.path.basename(self.srpmfile) @@ -399,7 +420,15 @@ class ReviewRequest(object): """ Upload the spec file and the src.rpm files into fedorapeople.org, ensuring readable mode.""" print("Uploading files into fedorapeople") - self.log.debug("Target: %s", self.settings.upload_target) + upload_target = self.upload_target() + self.log.debug("Target: %s", upload_target) + upload_host, upload_path = upload_target.split(":") + cmd = [ + "ssh", + upload_host, + "mkdir -p {}".format(upload_path), + ] + self.run_command(cmd) for path in [self.specfile, self.srpmfile]: mode = os.stat(path)[0] mode |= stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH @@ -408,7 +437,7 @@ class ReviewRequest(object): "scp", self.specfile, self.srpmfile, - self.username + "@" + self.settings.upload_target, + self.username + "@" + upload_target, ] return self.run_command(cmd)