blob: 15fd32eabb8fe1baf69661b4624893d2421a6b44 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright 2017 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Git bisector to bisect a range of git commits.
$ ./ init --old rev1 --new rev2 --git-repo /path/to/git/repo
$ ./ config switch ./
$ ./ config eval ./
$ ./ run
import logging
from bisect_kit import bisector_cli
from bisect_kit import cli
from bisect_kit import core
from bisect_kit import errors
from bisect_kit import git_util
logger = logging.getLogger(__name__)
class GitDomain(core.BisectDomain):
"""BisectDomain for git revisions."""
revtype = staticmethod(cli.argtype_notempty)
help = globals()['__doc__']
def add_init_arguments(parser):
help='Git repository path',
def init(opts):
opts.old = git_util.get_commit_hash(opts.git_repo, opts.old)
except ValueError as e:
raise errors.ArgumentError('--old', str(e))
try: = git_util.get_commit_hash(opts.git_repo,
except ValueError as e:
raise errors.ArgumentError('--new', str(e))
config = dict(git_repo=opts.git_repo)
revlist = git_util.get_revlist(opts.git_repo, opts.old,
details = {}
metas = git_util.get_batch_commit_metadata(opts.git_repo, revlist)
for rev in revlist:
meta = metas.get(rev)
commit_summary = git_util.CommitMeta.get_summary(meta)
action = {'rev': rev, 'commit_summary': commit_summary}
details[rev] = {'actions': [action]}
return config, {'revlist': revlist}
def __init__(self, config):
self.config = config
def setenv(self, env, rev):
env['GIT_REPO'] = self.config['git_repo']
env['GIT_REV'] = rev
def fill_candidate_summary(self, summary):
# Do nothing.
if __name__ == '__main__':