Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : master
---------------------------------------------------------------
commit 03784aedf0f1bcf72614a84747e45e3c64f0c73a
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Tue Jul 28 14:23:40 2015 +0200
[copr][backend] handle error's caused by failure to obtain srpm from dist-git
---------------------------------------------------------------
backend/backend/mockremote/__init__.py | 18 ++-------
backend/backend/mockremote/builder.py | 65 +++++++++++++++++--------------
2 files changed, 40 insertions(+), 43 deletions(-)
diff --git a/backend/backend/mockremote/__init__.py
b/backend/backend/mockremote/__init__.py
index 4a2f47d..3f2eee9 100755
--- a/backend/backend/mockremote/__init__.py
+++ b/backend/backend/mockremote/__init__.py
@@ -307,7 +307,6 @@ class MockRemote(object):
# building
self.log.info("Start build: {}".format(self.job))
- build_error = build_details = None
try:
build_details, build_stdout = self.builder.build(self.job.git_repo,
self.job.git_hash,
@@ -317,21 +316,12 @@ class MockRemote(object):
self.log.exception("builder.build error building pkg `{}`: {}"
.format(self.job.package_name, error))
build_error = error
-
- # TODO: try to use
- # finally:
-
- self.log.info("End Build: {0}".format(self.job))
-
- # downloading
- self.log.info("Start retrieve results for: {0}".format(self.job))
- self.builder.download(self.pkg_dest_path)
- # self.add_log_symlinks() # todo: add config option, need this for nginx
- self.log.info("End retrieve results for: {0}".format(self.job))
-
- if build_error:
raise MockRemoteError("Error occurred during build {}: {}"
.format(self.job, build_error))
+ finally:
+ self.builder.download(self.pkg_dest_path)
+ # self.add_log_symlinks() # todo: add config option, need this for nginx
+ self.log.info("End Build: {0}".format(self.job))
self.on_success_build()
return build_details
diff --git a/backend/backend/mockremote/builder.py
b/backend/backend/mockremote/builder.py
index 1d3de5f..0895e13 100644
--- a/backend/backend/mockremote/builder.py
+++ b/backend/backend/mockremote/builder.py
@@ -116,6 +116,10 @@ class Builder(object):
return conn.run()
def _get_remote_results_dir(self):
+ if any(x is None for x in [self.remote_build_dir,
+ self.remote_pkg_name,
+ self.job.chroot]):
+ return None
# the pkg will build into a dir by mockchain named:
# $tempdir/build/results/$chroot/$packagename
return os.path.normpath(os.path.join(
@@ -208,7 +212,7 @@ class Builder(object):
self.remote_pkg_name =
os.path.basename(self.remote_pkg_path).replace(".src.rpm", "")
except Exception:
self.log.exception("Failed to obtain srpm from dist-git")
- raise BuilderError("Failed to obtain srpm from dist-git: ansible results
{}".format(results))
+ raise DistGitError("Failed to obtain srpm from dist-git: ansible results
{}".format(results))
self.log.info("Gor srpm to build: {}".format(self.remote_pkg_path))
@@ -357,34 +361,37 @@ class Builder(object):
return build_details, build_out
def download(self, target_dir):
- # download the pkg to destdir using rsync + ssh
-
- # # make spaces work w/our rsync command below :(
- destdir = "'" + target_dir.replace("'",
"'\\''") + "'"
-
- # build rsync command line from the above
- remote_src = "{}@{}:{}/*".format(self.opts.build_user,
- self.hostname,
- self._get_remote_results_dir())
- ssh_opts = "'ssh -o PasswordAuthentication=no -o
StrictHostKeyChecking=no'"
-
- rsync_log_filepath = os.path.join(destdir, self.job.rsync_log_name)
- command = "{} -avH -e {} {} {}/ &> {}".format(
- rsync, ssh_opts, remote_src, destdir,
- rsync_log_filepath)
-
- # dirty magic with Popen due to IO buffering
- # see
http://thraxil.org/users/anders/posts/2008/03/13/Subprocess-Hanging-PIPE-...
- # alternative: use tempfile.Tempfile as Popen stdout/stderr
- try:
- cmd = Popen(command, shell=True)
- cmd.wait()
- except Exception as error:
- raise BuilderError(msg="Failed to download from builder due to rsync
error, "
- "see logs dir. Original error:
{}".format(error))
- if cmd.returncode != 0:
- raise BuilderError(msg="Failed to download from builder due to rsync
error, "
- "see logs dir.",
return_code=cmd.returncode)
+ if self._get_remote_results_dir():
+ self.log.info("Start retrieve results for: {0}".format(self.job))
+ # download the pkg to destdir using rsync + ssh
+
+ # # make spaces work w/our rsync command below :(
+ destdir = "'" + target_dir.replace("'",
"'\\''") + "'"
+
+ # build rsync command line from the above
+ remote_src = "{}@{}:{}/*".format(self.opts.build_user,
+ self.hostname,
+ self._get_remote_results_dir())
+ ssh_opts = "'ssh -o PasswordAuthentication=no -o
StrictHostKeyChecking=no'"
+
+ rsync_log_filepath = os.path.join(destdir, self.job.rsync_log_name)
+ command = "{} -avH -e {} {} {}/ &> {}".format(
+ rsync, ssh_opts, remote_src, destdir,
+ rsync_log_filepath)
+
+ # dirty magic with Popen due to IO buffering
+ # see
http://thraxil.org/users/anders/posts/2008/03/13/Subprocess-Hanging-PIPE-...
+ # alternative: use tempfile.Tempfile as Popen stdout/stderr
+ try:
+ cmd = Popen(command, shell=True)
+ cmd.wait()
+ self.log.info("End retrieve results for:
{0}".format(self.job))
+ except Exception as error:
+ raise BuilderError(msg="Failed to download from builder due to rsync
error, "
+ "see logs dir. Original error:
{}".format(error))
+ if cmd.returncode != 0:
+ raise BuilderError(msg="Failed to download from builder due to rsync
error, "
+ "see logs dir.",
return_code=cmd.returncode)
def check(self):
# do check of host