Exemplo n.º 1
0
    def test_uplift_info(self):
        info = patchanalysis.uplift_info(909494, 'release')
        self.assertEqual(info['landing_delta'], timedelta(0, 1091))
        self.assertEqual(info['release_delta'], timedelta(17, 44927))
        self.assertEqual(info['uplift_accepted'], False)
        self.assertEqual(info['response_delta'], timedelta(0, 843))
        self.assertEqual(info['uplift_author']['email'], '*****@*****.**')
        self.assertEqual(info['uplift_comment']['id'], 7810070)
        self.assertEqual(len(info['uplift_comment']['text'].split('\n')), 14)

        # Approved without request.
        with warnings.catch_warnings(record=True) as w:
            info = patchanalysis.uplift_info(859425, 'release')
            self.assertWarnings(
                w, ['Bug 859425 doesn\'t have a uplift request date.'])
            self.assertEqual(info['landing_delta'], timedelta(1, 60500))
            self.assertEqual(info['release_delta'], timedelta(0, 50345))
            self.assertEqual(info['uplift_accepted'], True)
            self.assertEqual(info['response_delta'], timedelta(0))
            self.assertEqual(info['uplift_author']['email'],
                             '*****@*****.**')
            self.assertEqual(info['uplift_comment']['id'], 7292379)
            self.assertEqual(len(info['uplift_comment']['text'].split('\n')),
                             9)

        # Pending request.
        with warnings.catch_warnings(record=True) as w:
            info = patchanalysis.uplift_info(1283017, 'aurora')
            self.assertEqual(info['landing_delta'], timedelta(-14, 66356))
            self.assertEqual(info['release_delta'], timedelta(32, 12341))
            self.assertEqual(info['uplift_accepted'], True)
            self.assertEqual(info['uplift_author']['email'], '*****@*****.**')
            self.assertEqual(info['uplift_comment']['id'], 11516158)
            self.assertEqual(len(info['uplift_comment']['text'].split('\n')),
                             9)

        # Multiple requests in the same bug, one accepted, one rejected.
        try:
            info = patchanalysis.uplift_info(1229760, 'release')
        except Exception as e:
            self.assertEqual(str(e), 'Uplift either accepted or rejected.')
Exemplo n.º 2
0
def analyze_bug(bug):
    sys.stdout = sys.stderr = open('analyze_bugs_' + str(os.getpid()) + ".out",
                                   "a",
                                   buffering=0)

    uplift_channels = utils.uplift_channels(bug)

    try:
        info = patchanalysis.bug_analysis(bug,
                                          author_cache=author_cache,
                                          reviewer_cache=reviewer_cache)

        # Translate sets into lists, as sets are not JSON-serializable.
        info['users']['authors'] = list(info['users']['authors'])
        info['users']['reviewers'] = list(info['users']['reviewers'])

        info['component'] = bug['component']
        info['channels'] = uplift_channels
        info['types'] = utils.get_bug_types(bug)

        for channel in uplift_channels:
            uplift_info = patchanalysis.uplift_info(bug, channel)
            del uplift_info['landings']
            info[channel + '_uplift_info'] = uplift_info
            # Transform timedelta objects to number of seconds (to make them JSON-serializable).
            info[channel + '_uplift_info']['landing_delta'] = int(
                uplift_info['landing_delta'].total_seconds())
            info[channel + '_uplift_info']['response_delta'] = int(
                uplift_info['response_delta'].total_seconds())
            info[channel + '_uplift_info']['release_delta'] = int(
                uplift_info['release_delta'].total_seconds())
            if uplift_info['uplift_accepted']:
                info[channel +
                     '_uplift_info']['uplift_date'] = utils.get_uplift_date(
                         bug, channel).strftime('%Y-%m-%d')
            uplift_reject_date = utils.get_uplift_reject_date(bug, channel)
            if uplift_reject_date is not None:
                info[channel + '_uplift_info'][
                    'uplift_reject_date'] = uplift_reject_date.strftime(
                        '%Y-%m-%d')

        analyzed_bugs_shared[str(bug['id'])] = info
    except Exception as e:
        print('Error with bug ' + str(bug['id']) + ': ' + str(e))
        traceback.print_exc()