Execute a single benchmark as defined in a file.
        If called directly, ensure that config and executor attributes are set up.
        @param benchmark_file: the name of a benchmark-definition XML file
        @return: a result value from the executor module

def execute_benchmark(self, benchmark_file):
        """
        Execute a single benchmark as defined in a file.
        If called directly, ensure that config and executor attributes are set up.
        @param benchmark_file: the name of a benchmark-definition XML file
        @return: a result value from the executor module
        """
        benchmark = Benchmark(benchmark_file, self.config,
                              self.config.start_time or time.localtime())
        self.check_existing_results(benchmark)

        self.executor.init(self.config, benchmark)
        output_handler = OutputHandler(benchmark, self.executor.get_system_info(),
                                       self.config.compress_results)

        logging.debug("I'm benchmarking %r consisting of %s run sets.",
                      benchmark_file, len(benchmark.run_sets))

        try:
            result = self.executor.execute_benchmark(benchmark, output_handler)
        finally:
            output_handler.close()
            # remove useless log folder if it is empty
            try:
                os.rmdir(benchmark.log_folder)
            except:
                pass

        if self.config.commit and not self.stopped_by_interrupt:
            try:
                util.add_files_to_git_repository(self.config.output_path,
                        output_handler.all_created_files,
                        self.config.commit_message + '\n\n'
                            + output_handler.description + '\n\n'
                            + str(output_handler.statistics))
            except OSError as e:
                logging.warning('Could not add files to git repository: %s', e)
        return result