Exemple #1
0
    def test_required_flags_found(self):

        extractor = BugzillaExtractor("", required_flags=[
            'myos-1.0+', 'pm_ack+'])
        bug1 = ('123456', 'Did something interesting.')
        bug2 = ('444555', 'Something else.')
        bug3 = ('987654', 'Such amaze!')
        extractor._extract_bzs = Mock(return_value=[
            bug1, bug2, bug3])
        extractor._check_for_bugzilla_creds = Mock()

        bug_mocks = [
            MockBug(bug1[0], ['myos-1.0+', 'pm_ack+']),
            MockBug(bug2[0], ['myos-2.0?', 'pm_ack?']),
            MockBug(bug3[0], ['myos-1.0+', 'pm_ack+'])]

        def next_bug(*args):
            return bug_mocks.pop(0)

        extractor._load_bug = Mock(side_effect=next_bug)

        results = extractor.extract()

        self.assertEquals(2, len(extractor.bzs))
        self.assertEquals(bug1[0], extractor.bzs[0][0])
        self.assertEquals(bug1[1], extractor.bzs[0][1])
        self.assertEquals(bug3[0], extractor.bzs[1][0])
        self.assertEquals(bug3[1], extractor.bzs[1][1])

        self.assertEquals(2, len(results))
        self.assertEquals("Resolves: #123456 - Did something interesting.",
                results[0])
        self.assertEquals("Resolves: #987654 - Such amaze!",
                results[1])
Exemple #2
0
    def test_same_id_multiple_times(self):

        extractor = BugzillaExtractor("", required_flags=[
            'myos-1.0+', 'pm_ack+'])
        bug1 = ('123456', 'Did something interesting.')
        bug3 = ('123456', 'Oops, lets try again.')
        extractor._extract_bzs = Mock(return_value=[
            bug1, bug3])
        extractor._check_for_bugzilla_creds = Mock()

        extractor._load_bug = Mock(
            return_value=MockBug(bug1[0], ['myos-1.0+', 'pm_ack+']))

        results = extractor.extract()

        self.assertEquals(2, len(extractor.bzs))
        self.assertEquals(bug1[0], extractor.bzs[0][0])
        self.assertEquals(bug1[1], extractor.bzs[0][1])
        self.assertEquals(bug3[0], extractor.bzs[1][0])
        self.assertEquals(bug3[1], extractor.bzs[1][1])

        self.assertEquals(2, len(results))
        self.assertEquals("Resolves: #123456 - Did something interesting.",
                results[0])
        self.assertEquals("Resolves: #123456 - Oops, lets try again.",
                results[1])
Exemple #3
0
    def test_required_flags_missing(self, mock_error):
        required_flags = ['myos-2.0+']
        extractor = BugzillaExtractor("", required_flags)
        bug1 = ('123456', 'Did something interesting.')
        bug2 = ('444555', 'Something else.')
        bug3 = ('987654', 'Such amaze!')
        extractor._extract_bzs = Mock(return_value=[
            bug1, bug2, bug3])
        extractor._check_for_bugzilla_creds = Mock()

        bug_mocks = [
            MockBug(bug1[0], ['myos-1.0+', 'pm_ack+']),
            MockBug(bug2[0], ['myos-2.0?', 'pm_ack?']),
            MockBug(bug3[0], ['myos-1.0+', 'pm_ack+'])]

        def next_bug(*args):
            return bug_mocks.pop(0)

        extractor._load_bug = Mock(side_effect=next_bug)

        results = extractor.extract()

        self.assertEquals(0, len(extractor.bzs))
        self.assertEquals(0, len(results))
        mock_error.assert_called_once_with("No bugzillas found with required flags: %s" % required_flags)
Exemple #4
0
 def test_diff_format(self):
     commit_log = "+- 123456: Did something interesting."
     extractor = BugzillaExtractor(commit_log)
     results = extractor.extract()
     self.assertEquals(1, len(results))
     self.assertEquals("Resolves: #123456 - Did something interesting.",
             results[0])
Exemple #5
0
 def test_single_with_no_spaces(self):
     commit_log = "- 123456-Did something interesting."
     extractor = BugzillaExtractor(commit_log)
     results = extractor.extract()
     self.assertEquals(1, len(results))
     self.assertEquals("Resolves: #123456 - Did something interesting.",
             results[0])
Exemple #6
0
 def test_multi_line(self):
     commit_log = "- 123456: Did something interesting.\n- Another commit.\n" \
         "- 456789: A third commit."
     extractor = BugzillaExtractor(commit_log)
     results = extractor.extract()
     self.assertEquals(2, len(results))
     self.assertEquals("Resolves: #123456 - Did something interesting.",
             results[0])
     self.assertEquals("Resolves: #456789 - A third commit.",
             results[1])
Exemple #7
0
    def _confirm_commit_msg(self, diff_output):
        """
        Generates a commit message in a temporary file, gives the user a
        chance to edit it, and returns the filename to the caller.
        """

        fd, name = tempfile.mkstemp()
        debug("Storing commit message in temp file: %s" % name)
        write(fd, "Update %s to %s\n" % (self.project_name,
            self.builder.build_version))
        # Write out Resolves line for all bugzillas we see in commit diff:
        # TODO: move to DistGitBuilder only?
        try:
            (required_bz_flags, placeholder_bz) = self._get_bz_flags()
            extractor = BugzillaExtractor(diff_output,
                required_flags=required_bz_flags,
                placeholder_bz=placeholder_bz)
            for line in extractor.extract():
                write(fd, line + "\n")
        except MissingBugzillaCredsException:
            error_out([
                "Releaser specifies required flags but you have not configured",
                "a ~/.bugzillarc with your bugzilla credentials.",
                "Example:",
                "",
                "[bugzilla.redhat.com]",
                "user = [email protected]",
                "password = mypassword"])

        print("")
        print("##### Commit message: #####")
        print("")

        os.lseek(fd, 0, 0)
        f = os.fdopen(fd)
        for line in f.readlines():
            print(line)
        f.close()

        print("")
        print("###############################")
        print("")
        if self._ask_yes_no("Would you like to edit this commit message? [y/n] ", False):
            debug("Opening editor for user to edit commit message in: %s" % name)
            editor = 'vi'
            if "EDITOR" in os.environ:
                editor = os.environ["EDITOR"]
            subprocess.call(editor.split() + [name])

        return name
Exemple #8
0
    def test_bug_doesnt_exist(self, mock_error):
        required_flags = ['myos-1.0+', 'pm_ack+']
        extractor = BugzillaExtractor("", required_flags)
        bug1 = ('123456', 'Did something interesting.')
        extractor._extract_bzs = Mock(return_value=[
            bug1])
        extractor._check_for_bugzilla_creds = Mock()

        from tito.compat import xmlrpclib
        extractor._load_bug = Mock(side_effect=xmlrpclib.Fault("", ""))

        results = extractor.extract()

        self.assertEquals(0, len(extractor.bzs))
        self.assertEquals(0, len(results))
        mock_error.assert_called_once_with("No bugzillas found with required flags: %s" % required_flags)
Exemple #9
0
    def test_required_flags_missing_with_placeholder(self):

        extractor = BugzillaExtractor("", required_flags=[
            'myos-2.0+'], placeholder_bz="54321")
        bug1 = ('123456', 'Did something interesting.')
        extractor._extract_bzs = Mock(return_value=[
            bug1])
        extractor._check_for_bugzilla_creds = Mock()

        extractor._load_bug = Mock(
            return_value=MockBug(bug1[0], ['myos-1.0+', 'pm_ack+']))

        results = extractor.extract()

        self.assertEquals(0, len(extractor.bzs))

        self.assertEquals(1, len(results))
        self.assertEquals("Related: #54321", results[0])
Exemple #10
0
    def test_single_required_flag_found(self):

        extractor = BugzillaExtractor("", required_flags=[
            'myos-1.0+', 'pm_ack+'])
        bug1 = ('123456', 'Did something interesting.')
        extractor._extract_bzs = Mock(return_value=[
            bug1])
        extractor._check_for_bugzilla_creds = Mock()

        extractor._load_bug = Mock(
            return_value=MockBug(bug1[0], ['myos-1.0+', 'pm_ack+']))

        results = extractor.extract()

        self.assertEquals(1, len(extractor.bzs))
        self.assertEquals(bug1[0], extractor.bzs[0][0])
        self.assertEquals(bug1[1], extractor.bzs[0][1])

        self.assertEquals(1, len(results))
        self.assertEquals("Resolves: #123456 - Did something interesting.",
                results[0])
Exemple #11
0
    def _confirm_commit_msg(self, diff_output):
        """
        Generates a commit message in a temporary file, gives the user a
        chance to edit it, and returns the filename to the caller.
        """

        fd, name = tempfile.mkstemp()
        debug("Storing commit message in temp file: %s" % name)
        write(fd, "Update %s to %s\n" % (self.obs_package_name,
            self.builder.build_version))
        # Write out Resolves line for all bugzillas we see in commit diff:
        extractor = BugzillaExtractor(diff_output)
        for line in extractor.extract():
            write(fd, line + "\n")

        print("")
        print("##### Commit message: #####")
        print("")

        os.lseek(fd, 0, 0)
        commit_file = os.fdopen(fd)
        for line in commit_file.readlines():
            print(line)
        commit_file.close()

        print("")
        print("###############################")
        print("")
        if self._ask_yes_no("Would you like to edit this commit message? [y/n] ", False):
            debug("Opening editor for user to edit commit message in: %s" % name)
            editor = 'vi'
            if "EDITOR" in os.environ:
                editor = os.environ["EDITOR"]
            subprocess.call(editor.split() + [name])

        return name
Exemple #12
0
    def test_bug_doesnt_exist(self, mock_error):
        required_flags = ['myos-1.0+', 'pm_ack+']
        extractor = BugzillaExtractor("", required_flags)
        bug1 = ('123456', 'Did something interesting.')
        extractor._extract_bzs = Mock(return_value=[bug1])
        extractor._check_for_bugzilla_creds = Mock()

        from tito.compat import xmlrpclib
        extractor._load_bug = Mock(side_effect=xmlrpclib.Fault("", ""))

        results = extractor.extract()

        self.assertEquals(0, len(extractor.bzs))
        self.assertEquals(0, len(results))
        mock_error.assert_called_once_with(
            "No bugzillas found with required flags: %s" % required_flags)
Exemple #13
0
    def test_required_flags_missing_with_placeholder(self):

        extractor = BugzillaExtractor("",
                                      required_flags=['myos-2.0+'],
                                      placeholder_bz="54321")
        bug1 = ('123456', 'Did something interesting.')
        extractor._extract_bzs = Mock(return_value=[bug1])
        extractor._check_for_bugzilla_creds = Mock()

        extractor._load_bug = Mock(
            return_value=MockBug(bug1[0], ['myos-1.0+', 'pm_ack+']))

        results = extractor.extract()

        self.assertEquals(0, len(extractor.bzs))

        self.assertEquals(1, len(results))
        self.assertEquals("Related: #54321", results[0])
Exemple #14
0
    def test_single_required_flag_found(self):

        extractor = BugzillaExtractor("",
                                      required_flags=['myos-1.0+', 'pm_ack+'])
        bug1 = ('123456', 'Did something interesting.')
        extractor._extract_bzs = Mock(return_value=[bug1])
        extractor._check_for_bugzilla_creds = Mock()

        extractor._load_bug = Mock(
            return_value=MockBug(bug1[0], ['myos-1.0+', 'pm_ack+']))

        results = extractor.extract()

        self.assertEquals(1, len(extractor.bzs))
        self.assertEquals(bug1[0], extractor.bzs[0][0])
        self.assertEquals(bug1[1], extractor.bzs[0][1])

        self.assertEquals(1, len(results))
        self.assertEquals("Resolves: #123456 - Did something interesting.",
                          results[0])
Exemple #15
0
 def test_single_line_no_bz(self):
     commit_log = "- Did something interesting."
     extractor = BugzillaExtractor(commit_log)
     results = extractor.extract()
     self.assertEquals(0, len(results))
Exemple #16
0
 def test_single_line_no_bz(self):
     commit_log = "- Did something interesting."
     extractor = BugzillaExtractor(commit_log)
     results = extractor.extract()
     self.assertEquals(0, len(results))