From: Salim Fadhley Date: Tue, 13 Jan 2015 22:06:09 +0000 (+0000) Subject: Merge branch 'master' into unstable X-Git-Tag: v0.2.26^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d02c2cee5ce31ad35cfd3943ab260a1995b1f6bd;p=tools%2Fpython-jenkinsapi.git Merge branch 'master' into unstable Conflicts: jenkinsapi/job.py --- d02c2cee5ce31ad35cfd3943ab260a1995b1f6bd diff --cc jenkinsapi/job.py index 0ecd54d,af9a036..ff6122d --- a/jenkinsapi/job.py +++ b/jenkinsapi/job.py @@@ -188,39 -176,67 +188,40 @@@ class Job(JenkinsBase, MutableJenkinsTh # Either copy the params dict or make a new one. build_params = build_params and dict( build_params.items()) or {} # Via POSTed JSON - params = {} # Via Get string - with invocation: - if len(self.get_params_list()) == 0: - if self.is_queued(): - raise WillNotBuild('%s is already queued' % repr(self)) - - elif self.is_running(): - if skip_if_running: - raise WillNotBuild('%s is already running' % repr(self)) - else: - log.warn( - "Will re-schedule %s even though it is already running", self.name) - elif self.has_queued_build(build_params): - msg = 'A build with these parameters is already queued.' - raise WillNotBuild(msg) - - log.info("Attempting to start %s on %s", self.name, repr( - self.get_jenkins_obj())) - - url = self.get_build_triggerurl() - # If job has file parameters - it must be triggered - # using "/build", not by "/buildWithParameters" - # "/buildWithParameters" will ignore non-file parameters + url = self.get_build_triggerurl(files) + if cause: + build_params['cause'] = cause + + # Build require params as form fields + # and as Json. + data = {'json': self.mk_json_from_build_parameters(build_params, files)} + data.update(build_params) + + response = self.jenkins.requester.post_and_confirm_status( + url, + data=data, + params=params, + files=files, + valid=[200, 201, 303], + allow_redirects=False + ) + + redirect_url = response.headers['location'] + + if not redirect_url.startswith("%s/queue/item" % self.jenkins.baseurl): ++ if files: - url = "%s/build" % self.baseurl - - if cause: - build_params['cause'] = cause - - if securitytoken: - params['token'] = securitytoken - - build_params['json'] = self.mk_json_from_build_parameters(build_params, files) - data = build_params - - response = self.jenkins.requester.post_and_confirm_status( - url, - data=data, - params=params, - files=files, - valid=[200, 201] - ) - response = response - if invoke_pre_check_delay > 0: - log.info( - "Waiting for %is to allow Jenkins to catch up", invoke_pre_check_delay) - sleep(invoke_pre_check_delay) - if block: - total_wait = 0 - - while self.is_queued(): - log.info( - "Waited %is for %s to begin...", total_wait, self.name) - sleep(invoke_block_delay) - total_wait += invoke_block_delay - if self.is_running(): - running_build = self.get_last_build() - running_build.block_until_complete( - delay=invoke_pre_check_delay) - return invocation + raise ValueError('Builds with file parameters are not ' + 'supported by this jenkinsapi version. ' + 'Please use previous version.') + else: + raise ValueError("Not a Queue URL: %s" % redirect_url) + + qi = QueueItem(redirect_url, self.jenkins) + if block: + qi.block_until_complete(delay=delay) + return qi def _buildid_for_type(self, buildtype): """Gets a buildid for a given type of build""" diff --cc jenkinsapi_tests/unittests/test_build.py index d7cf728,817db97..549bd2e --- a/jenkinsapi_tests/unittests/test_build.py +++ b/jenkinsapi_tests/unittests/test_build.py @@@ -83,15 -83,13 +83,19 @@@ class test_build(unittest.TestCase) @mock.patch.object(Build, 'get_data') def test_build_depth(self, get_data_mock): - build = Build('http://halob:8080/job/foo/98', 98, self.j, depth=0) - get_data_mock.assert_called_with('http://halob:8080/job/foo/98/api/python?depth=0') + Build('http://halob:8080/job/foo/98', 98, self.j, depth=0) + get_data_mock.assert_called_with('http://halob:8080/job/foo/98/api/' + 'python', + tree=None, params={'depth': 0}) + + def test_get_revision_no_scm(self): + """ with no scm, get_revision should return None """ + self.assertEqual(self.b.get_revision(), None) + def test_get_revision_no_scm(self): + """ with no scm, get_revision should return None """ + self.assertEqual(self.b.get_revision(), None) + ## TEST DISABLED - DOES NOT WORK # def test_downstream(self): # expected = ['SingleJob','MultipleJobs']