def __init__(self, options, repo=None, logger=None): self.options = options if logger is None: self.logger = standard_logger(self.__class__.__name__, options.debug) if repo is None: self.repo = GitUtils.get_repo() else: self.repo = repo # Nested dict mapping dependents -> dependencies -> files # causing that dependency -> numbers of lines within that file # causing that dependency. The first two levels form edges in # the dependency graph, and the latter two tell us what caused # those edges. self.dependencies = {} # A TODO list (queue) and dict of dependencies which haven't # yet been recursively followed. Only useful when recursing. self.todo = [] self.todo_d = {} # An ordered list and dict of commits whose dependencies we # have already detected. self.done = [] self.done_d = {} # A cache mapping SHA1s to commit objects self.commits = {} # Memoization for branch_contains() self.branch_contains_cache = {} # Callbacks to be invoked when a new dependency has been # discovered. self.listeners = []
def test_new(): repo = GitUtils.get_repo() exploder = GitExploder(repo, "HEAD~5", "HEAD", False, 1) assert exploder is not None
def main(args): args = parse_args(args) repo = GitUtils.get_repo() exploder = GitExploder(repo, args.base, args.head, args.debug, args.context_lines) exploder.run()