Merge branch 'master' into unstable
authorSalim Fadhley <sal@stodge.org>
Tue, 13 Jan 2015 22:06:09 +0000 (22:06 +0000)
committerSalim Fadhley <sal@stodge.org>
Tue, 13 Jan 2015 22:06:09 +0000 (22:06 +0000)
Conflicts:
jenkinsapi/job.py

1  2 
jenkinsapi/job.py
jenkinsapi/queue.py
jenkinsapi_tests/unittests/test_build.py

index 0ecd54d2f056490e3220cecc9b85436bf3dbaacb,af9a03610b36ca1325e5155b90e0847668cb7eb8..ff6122dae6933525f31fc3cece62423e373f86c3
@@@ -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"""
Simple merge
index d7cf7282a7b8c8848f7d092ec4296c6bd55f1215,817db9750b63e8dea5a067202e0f616bf1367556..549bd2e7eb11cf15141506834efa081cf7d6d743
@@@ -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']