rpmgit: catch potential errors while running git
Log them and report them as RuntimeError. Also add a couple tests for
them.
(cherry picked from commit 61efa91a03)
Related: rhbz#1709594
			
			
This commit is contained in:
		
							parent
							
								
									b3b1180b7b
								
							
						
					
					
						commit
						adede63a95
					
				| @ -59,7 +59,11 @@ class GitArchiveTarball: | ||||
|         # Clone the repository into a temporary location | ||||
|         cmd = ["git", "clone", self._gitRepo["repo"], joinpaths(sourcesDir, "gitrepo")] | ||||
|         log.debug(cmd) | ||||
|         subprocess.check_call(cmd) | ||||
|         try: | ||||
|             subprocess.check_output(cmd) | ||||
|         except subprocess.CalledProcessError as e: | ||||
|             log.error("Failed to clone %s: %s", self._gitRepo["repo"], e.output) | ||||
|             raise RuntimeError("Failed to clone %s" % self._gitRepo["repo"]) | ||||
| 
 | ||||
|         oldcwd = os.getcwd() | ||||
|         try: | ||||
| @ -72,7 +76,11 @@ class GitArchiveTarball: | ||||
| 
 | ||||
|             cmd = ["git", "archive", "--prefix", self._gitRepo["rpmname"] + "/", "-o", joinpaths(sourcesDir, self.sourceName), self._gitRepo["ref"]] | ||||
|             log.debug(cmd) | ||||
|             subprocess.check_call(cmd) | ||||
|             try: | ||||
|                 subprocess.check_output(cmd) | ||||
|             except subprocess.CalledProcessError as e: | ||||
|                 log.error("Failed to archive %s: %s", self._gitRepo["repo"], e.output) | ||||
|                 raise RuntimeError("Failed to clone %s" % self._gitRepo["repo"]) | ||||
|         finally: | ||||
|             # Cleanup even if there was an error | ||||
|             os.chdir(oldcwd) | ||||
| @ -197,6 +205,10 @@ def create_gitrpm_repo(results_dir, recipe): | ||||
|         make_git_rpm(r, gitrepo) | ||||
|     cmd = ["createrepo_c", gitrepo] | ||||
|     log.debug(cmd) | ||||
|     subprocess.check_call(cmd) | ||||
|     try: | ||||
|         subprocess.check_output(cmd) | ||||
|     except subprocess.CalledProcessError as e: | ||||
|         log.error("Failed to create repo at %s: %s", gitrepo, e.output) | ||||
|         raise RuntimeError("Failed to create repo at %s" % gitrepo) | ||||
| 
 | ||||
|     return gitrepo | ||||
|  | ||||
| @ -24,7 +24,7 @@ import tarfile | ||||
| import tempfile | ||||
| import unittest | ||||
| 
 | ||||
| from pylorax.api.gitrpm import GitArchiveTarball, make_git_rpm, create_gitrpm_repo | ||||
| from pylorax.api.gitrpm import GitArchiveTarball, GitRpmBuild, make_git_rpm, create_gitrpm_repo | ||||
| from pylorax.sysutils import joinpaths | ||||
| 
 | ||||
| def _setup_git_repo(self): | ||||
| @ -175,6 +175,38 @@ class GitArchiveTest(unittest.TestCase): | ||||
|         archive = GitArchiveTarball(git_repo["repos"]["git"][0]) | ||||
|         self._check_tar(archive, "git-rpm-test/", "second") | ||||
| 
 | ||||
|     def git_fail_repo_test(self): | ||||
|         """Test creating an archive from a bad url""" | ||||
|         git_repo = toml.loads(""" | ||||
|             [[repos.git]] | ||||
|             rpmname="git-rpm-test" | ||||
|             rpmversion="1.0.0" | ||||
|             rpmrelease="1" | ||||
|             summary="Testing the git rpm code" | ||||
|             repo="file://%s" | ||||
|             ref="v1.1.0" | ||||
|             destination="/srv/testing-rpm/" | ||||
|         """ % ("/tmp/no-repo-here/")) | ||||
|         with self.assertRaises(RuntimeError): | ||||
|             archive = GitArchiveTarball(git_repo["repos"]["git"][0]) | ||||
|             self._check_tar(archive, "git-rpm-test/", None) | ||||
| 
 | ||||
|     def git_fail_ref_test(self): | ||||
|         """Test creating an archive from a bad ref""" | ||||
|         git_repo = toml.loads(""" | ||||
|             [[repos.git]] | ||||
|             rpmname="git-rpm-test" | ||||
|             rpmversion="1.0.0" | ||||
|             rpmrelease="1" | ||||
|             summary="Testing the git rpm code" | ||||
|             repo="file://%s" | ||||
|             ref="0297617d7b8baa263a69ae7dc901bbbcefd0eaa4" | ||||
|             destination="/srv/testing-rpm/" | ||||
|         """ % (self.repodir)) | ||||
|         with self.assertRaises(RuntimeError): | ||||
|             archive = GitArchiveTarball(git_repo["repos"]["git"][0]) | ||||
|             self._check_tar(archive, "git-rpm-test/", None) | ||||
| 
 | ||||
| 
 | ||||
| class GitRpmTest(unittest.TestCase): | ||||
|     @classmethod | ||||
| @ -293,3 +325,19 @@ class GitRpmTest(unittest.TestCase): | ||||
| 
 | ||||
|         finally: | ||||
|             shutil.rmtree(temp_dir) | ||||
| 
 | ||||
| 
 | ||||
| class GitRpmBuildTest(unittest.TestCase): | ||||
|     def get_base_dir_test(self): | ||||
|         """Make sure base_dir is created""" | ||||
|         gitRpm = GitRpmBuild("rpmtest", "1.0.0", "1", ["noarch"]) | ||||
|         base_dir = gitRpm.get_base_dir() | ||||
|         self.assertTrue("lorax-git-rpm" in base_dir) | ||||
|         gitRpm.cleanup_tmpdir() | ||||
| 
 | ||||
|     def short_base_dir_test(self): | ||||
|         """Make sure cleanup of an unusually short base_dir fails""" | ||||
|         gitRpm = GitRpmBuild("rpmtest", "1.0.0", "1", ["noarch"]) | ||||
|         gitRpm._base_dir = "/aa/" | ||||
|         with self.assertRaises(RuntimeError): | ||||
|             gitRpm.cleanup_tmpdir() | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user