From 7eabd8b98f7464668372283bb49fbbac434b44b1 Mon Sep 17 00:00:00 2001 From: Yuming Zhu Date: Mar 14 2018 10:37:38 +0000 Subject: [PATCH 1/3] fix subprocess.check_output for py2.6 --- diff --git a/koji/daemon.py b/koji/daemon.py index 4e6a974..bef0675 100644 --- a/koji/daemon.py +++ b/koji/daemon.py @@ -512,7 +512,14 @@ class SCM(object): } if self.scmtype.startswith('GIT'): cmd = ['git', 'rev-parse', 'HEAD'] - fragment = subprocess.check_output(cmd, cwd=self.sourcedir).strip() + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, + cwd=self.sourcedir, + shell=True) + out, _ = proc.communicate() + status = proc.wait() + if status != 0: + raise koji.GenericError('Error getting commit hash for git') + fragment = out.strip() scheme = self.scheme[:-3] netloc = self.host path = self.repository From c008ac8bb9272f088f3120e974206d635df350d2 Mon Sep 17 00:00:00 2001 From: Yuming Zhu Date: Mar 14 2018 11:10:12 +0000 Subject: [PATCH 2/3] unittest for scm.get_source --- diff --git a/tests/test_scm.py b/tests/test_scm.py index 5742026..43a8345 100644 --- a/tests/test_scm.py +++ b/tests/test_scm.py @@ -379,3 +379,40 @@ class TestSCMCheckouts(unittest.TestCase): self.uploadpath, cwd=self.tempdir, logerror=1, append=False, env=None) self.log_output.assert_has_calls([call1]) + + @mock.patch('subprocess.Popen') + def test_get_source_git(self, popen): + popen.return_value.wait.return_value = 0 + popen.return_value.communicate = mock.MagicMock() + popen.return_value.communicate.return_value = ('hash ', 'any') + + url = "git://default/koji.git#asdasd" + scm = SCM(url) + scm.assert_allowed(self.config) + scm.checkout(self.tempdir, session=self.session, + uploadpath=self.uploadpath, logfile=self.logfile) + + source = scm.get_source() + self.assertEqual(source, {'url': url, + 'source': 'git://default/koji.git#hash'}) + + popen.return_value.wait.return_value = 1 + with self.assertRaises(koji.GenericError) as cm: + source = scm.get_source() + self.assertEqual(cm.exception.args[0], + 'Error getting commit hash for git') + + @mock.patch('subprocess.Popen') + def test_get_source_other(self, popen): + popen.return_value.wait.return_value = 0 + popen.return_value.communicate = mock.MagicMock() + popen.return_value.communicate.return_value = ('hash ', 'any') + + url = "svn+ssh://user@nocommon/dist?rpms/foo/EL3#revision" + scm = SCM(url) + scm.assert_allowed(self.config) + scm.checkout(self.tempdir, session=self.session, + uploadpath=self.uploadpath, logfile=self.logfile) + + source = scm.get_source() + self.assertEqual(source, {'url': url, 'source': url}) From 43a433d37a2e2e94f7aaba2cef679f0ab402e38d Mon Sep 17 00:00:00 2001 From: Yuming Zhu Date: Mar 14 2018 12:23:24 +0000 Subject: [PATCH 3/3] do not shell=True --- diff --git a/koji/daemon.py b/koji/daemon.py index bef0675..decee91 100644 --- a/koji/daemon.py +++ b/koji/daemon.py @@ -513,8 +513,7 @@ class SCM(object): if self.scmtype.startswith('GIT'): cmd = ['git', 'rev-parse', 'HEAD'] proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, - cwd=self.sourcedir, - shell=True) + cwd=self.sourcedir,) out, _ = proc.communicate() status = proc.wait() if status != 0: