Esempio n. 1
0
    def rewrite_jsvm_lcov(self):
        files = os.listdir('ccov-artifacts')
        for fname in files:
            if 'jsvm' not in fname or not fname.endswith('.zip'):
                continue

            zip_file_path = 'ccov-artifacts/' + fname
            out_dir = 'ccov-artifacts/' + fname[:-4]

            zip_file = zipfile.ZipFile(zip_file_path, 'r')
            zip_file.extractall(out_dir)
            zip_file.close()

            lcov_files = [
                os.path.abspath(os.path.join(out_dir, f))
                for f in os.listdir(out_dir)
            ]
            run([
                'gecko-env', './mach', 'python',
                'python/mozbuild/mozbuild/codecoverage/lcov_rewriter.py'
            ] + lcov_files,
                cwd=self.repo_dir)

            for lcov_file in lcov_files:
                os.remove(lcov_file)

            lcov_out_files = [
                os.path.abspath(os.path.join(out_dir, f))
                for f in os.listdir(out_dir)
            ]
            for lcov_out_file in lcov_out_files:
                os.rename(lcov_out_file, lcov_out_file[:-4])
Esempio n. 2
0
    def find_issues(self, path, modified_lines):
        '''
        Run mozlint through mach, without gecko-env
        '''

        # Run mozlint on a file
        command = ['./mach', 'lint', '-f', 'json', '--no-ignore', path]
        returncode, output, error = run(' '.join(command), cwd=self.repo_dir)
        if returncode == 0:
            logger.debug('No Mozlint errors', path=path)
            return

        # Load output as json
        # Only consider last line, as ./mach lint may output
        # linter setup output on stdout :/
        try:
            lines = list(filter(None, output.decode('utf-8').split('\n')))
            payload = json.loads(lines[-1])
        except json.decoder.JSONDecodeError:
            logger.warn('Invalid json output', path=path)
            return

        full_path = os.path.join(self.repo_dir, path)
        if full_path not in payload:
            logger.warn('Missing path in linter output', path=path)
            return

        return [
            MozLintIssue(self.repo_dir, path, modified_lines, **issue)
            for issue in payload[full_path]
        ]
Esempio n. 3
0
    def find_issues(self, path):
        '''
        Run mozlint through mach, using gecko-env
        '''

        # Run mozlint on a file
        command = [
            'gecko-env', './mach', 'lint', '-f', 'json', '--quiet', path
        ]
        returncode, output, error = run(' '.join(command),
                                        cwd=settings.repo_dir)
        if returncode == 0:
            logger.debug('No Mozlint errors', path=path)
            return

        # Load output as json
        # Only consider last line, as ./mach lint may output
        # linter setup output on stdout :/
        try:
            lines = list(filter(None, output.decode('utf-8').split('\n')))
            payload = json.loads(lines[-1])
        except json.decoder.JSONDecodeError:
            logger.warn('Invalid json output', path=path, lines=lines)
            raise

        full_path = os.path.join(settings.repo_dir, path)
        if full_path not in payload and path not in payload:
            logger.warn('Missing path in linter output', path=path)
            return

        # Mozlint uses both full & relative path to index issues
        return [
            MozLintIssue(**issue) for p in (path, full_path)
            for issue in payload.get(p, [])
        ]
Esempio n. 4
0
    def find_issues(self, path, revision):
        '''
        Run mozlint through mach, using gecko-env
        '''
        # Check file exists (before mode)
        full_path = os.path.join(settings.repo_dir, path)
        if not os.path.exists(full_path):
            logger.info('Modified file not found {}'.format(full_path))
            return

        # Run mozlint on a file
        command = [
            'gecko-env',
            './mach', 'lint',
            '-f', 'json',
            '--warnings',
            '--quiet',
            path
        ]
        returncode, output, error = run(' '.join(command), cwd=settings.repo_dir)
        output = output.decode('utf-8')

        # Dump raw mozlint output as a Taskcluster artifact (for debugging)
        output_path = os.path.join(
            settings.taskcluster.results_dir,
            '{}-mozlint.txt'.format(repr(revision)),
        )
        with open(output_path, 'a') as f:
            f.write(output)

        if returncode == 0:
            logger.debug('No Mozlint errors', path=path)
            return
        assert 'error: problem with lint setup' not in output, \
            'Mach lint setup failed'

        # Load output as json
        # Only consider last line, as ./mach lint may output
        # linter setup output on stdout :/
        try:
            lines = list(filter(None, output.split('\n')))
            payload = json.loads(lines[-1])
        except json.decoder.JSONDecodeError:
            raise AnalysisException('mozlint', 'Invalid json output', path=path, lines=lines)

        if full_path not in payload and path not in payload:
            logger.warn('Missing path in linter output', path=path)
            return

        # Mozlint uses both full & relative path to index issues
        return [
            MozLintIssue(revision=revision, **issue)
            for p in (path, full_path)
            for issue in payload.get(p, [])
        ]
Esempio n. 5
0
    def find_issues(self, path, revision):
        '''
        Run mozlint through mach, using gecko-env
        '''
        # Check file exists (before mode)
        full_path = os.path.join(settings.repo_dir, path)
        if not os.path.exists(full_path):
            logger.info('Modified file not found {}'.format(full_path))
            return

        # Run mozlint on a file
        command = [
            'gecko-env',
            './mach', 'lint',
            '-f', 'json',
            '--quiet',
            path
        ]
        returncode, output, error = run(' '.join(command), cwd=settings.repo_dir)
        output = output.decode('utf-8')

        # Dump raw mozlint output as a Taskcluster artifact (for debugging)
        output_path = os.path.join(
            settings.taskcluster.results_dir,
            '{}-mozlint.txt'.format(repr(revision)),
        )
        with open(output_path, 'a') as f:
            f.write(output)

        if returncode == 0:
            logger.debug('No Mozlint errors', path=path)
            return
        assert 'error: problem with lint setup' not in output, \
            'Mach lint setup failed'

        # Load output as json
        # Only consider last line, as ./mach lint may output
        # linter setup output on stdout :/
        try:
            lines = list(filter(None, output.split('\n')))
            payload = json.loads(lines[-1])
        except json.decoder.JSONDecodeError:
            raise AnalysisException('mozlint', 'Invalid json output', path=path, lines=lines)

        if full_path not in payload and path not in payload:
            logger.warn('Missing path in linter output', path=path)
            return

        # Mozlint uses both full & relative path to index issues
        return [
            MozLintIssue(revision=revision, **issue)
            for p in (path, full_path)
            for issue in payload.get(p, [])
        ]