| Index: appengine/findit/crash/findit.py
|
| diff --git a/appengine/findit/crash/findit.py b/appengine/findit/crash/findit.py
|
| index 8300d366e50e15eda56673bb746347f60a57a31a..cc43f0fbf5e6aa3027f3da4d387414fee78f50f1 100644
|
| --- a/appengine/findit/crash/findit.py
|
| +++ b/appengine/findit/crash/findit.py
|
| @@ -9,7 +9,7 @@ import logging
|
| from google.appengine.ext import ndb
|
|
|
| from common import appengine_util
|
| -from common import chrome_dependency_fetcher
|
| +from common.chrome_dependency_fetcher import ChromeDependencyFetcher
|
| from common import constants
|
| from crash.crash_report import CrashReport
|
| from libs import time_util
|
| @@ -28,14 +28,21 @@ from model.crash.crash_config import CrashConfig
|
| # This class should be renamed to avoid confustion between Findit and Predator.
|
| # Think of a good name (e.g.'PredatorApp') for this class.
|
| class Findit(object):
|
| - def __init__(self, repository):
|
| + def __init__(self, get_repository):
|
| """
|
| Args:
|
| - repository (Repository): the Git repository for getting CLs to classify.
|
| + get_repository (callable): a function from DEP urls to ``Repository``
|
| + objects, so we can get changelogs and blame for each dep. Notably,
|
| + to keep the code here generic, we make no assumptions about
|
| + which subclass of ``Repository`` this function returns. Thus,
|
| + it is up to the caller to decide what class to return and handle
|
| + any other arguments that class may require (e.g., an http client
|
| + for ``GitilesRepository``).
|
| """
|
| - self._repository = repository
|
| + self._get_repository = get_repository
|
| + self._dep_fetcher = ChromeDependencyFetcher(get_repository)
|
| # TODO(http://crbug.com/659354): because self.client is volatile,
|
| - # we need some way of updating the Azelea instance whenever the
|
| + # we need some way of updating the Predator instance whenever the
|
| # config changes. How to do that cleanly?
|
| self._predator = None
|
| self._stacktrace_parser = None
|
| @@ -209,11 +216,9 @@ class Findit(object):
|
| # Use up-to-date ``top_n`` in self.config to filter top n frames.
|
| stacktrace = self._stacktrace_parser.Parse(
|
| model.stack_trace,
|
| - chrome_dependency_fetcher.ChromeDependencyFetcher(
|
| - self._repository).GetDependency(
|
| - model.crashed_version,
|
| - model.platform),
|
| - model.signature, self.config.get('top_n'))
|
| + self._dep_fetcher.GetDependency(model.crashed_version, model.platform),
|
| + model.signature,
|
| + self.config.get('top_n'))
|
| if not stacktrace:
|
| logging.warning('Failed to parse the stacktrace %s', model.stack_trace)
|
| return None
|
|
|