Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2031)

Unified Diff: appengine/findit/crash/changelist_classifier.py

Issue 2605943002: Removing the mutation in the factories for getting dep repositories (Closed)
Patch Set: Added the Factory method to CachedGitilesRepository Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: appengine/findit/crash/changelist_classifier.py
diff --git a/appengine/findit/crash/changelist_classifier.py b/appengine/findit/crash/changelist_classifier.py
index 0bb80faa3cbd8adee6a573bfbeec1916443d15c5..0f7ad501f62f7c1308e9512755f156f31a0a01c8 100644
--- a/appengine/findit/crash/changelist_classifier.py
+++ b/appengine/findit/crash/changelist_classifier.py
@@ -20,14 +20,11 @@ from libs.gitiles.diff import ChangeType
class ChangelistClassifier(namedtuple('ChangelistClassifier',
- ['repository', 'get_repository', 'top_n_results', 'confidence_threshold'])):
+ ['get_repository', 'top_n_results', 'confidence_threshold'])):
__slots__ = ()
- def __new__(cls, repository, get_repository, top_n_results=3,
- confidence_threshold=0.999):
+ def __new__(cls, get_repository, top_n_results=3, confidence_threshold=0.999):
"""Args:
- repository (Repository): the Git repository of the main project
- we're trying to classify CLs from.
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
@@ -40,7 +37,7 @@ class ChangelistClassifier(namedtuple('ChangelistClassifier',
the first suspect.
"""
return super(cls, ChangelistClassifier).__new__(
- cls, repository, get_repository, top_n_results, confidence_threshold)
+ cls, get_repository, top_n_results, confidence_threshold)
def __str__(self): # pragma: no cover
return ('%s(top_n_results=%d, confidence_threshold=%g)'
@@ -68,7 +65,7 @@ class ChangelistClassifier(namedtuple('ChangelistClassifier',
logging.info('ChangelistClassifier.__call__: Regression range %s:%s',
last_good_version, first_bad_version)
- dependency_fetcher = ChromeDependencyFetcher(self.repository)
+ dependency_fetcher = ChromeDependencyFetcher(self.get_repository)
# We are only interested in the deps in crash stack (the callstack that
# caused the crash).
@@ -96,7 +93,7 @@ class ChangelistClassifier(namedtuple('ChangelistClassifier',
regression_deps_rolls[dep_path] = dep_roll
dep_to_file_to_changelogs, ignore_cls = GetChangeLogsForFilesGroupedByDeps(
- regression_deps_rolls, stack_deps, self.repository)
+ regression_deps_rolls, stack_deps, self.get_repository)
dep_to_file_to_stack_infos = GetStackInfosForFilesGroupedByDeps(
report.stacktrace, stack_deps)
@@ -138,7 +135,7 @@ def GetDepsInCrashStack(crash_stack, crash_deps):
# TODO(katesonia): Remove the repository argument after refatoring cl committed.
def GetChangeLogsForFilesGroupedByDeps(regression_deps_rolls, stack_deps,
- repository):
+ get_repository):
"""Gets a dict containing files touched by changelogs for deps in stack_deps.
Regression ranges for each dep is determined by regression_deps_rolls.
@@ -149,7 +146,13 @@ def GetChangeLogsForFilesGroupedByDeps(regression_deps_rolls, stack_deps,
regression range.
stack_deps (dict): Represents all the dependencies shown in
the crash stack.
- repository (Repository): Repository to get changelogs from.
+ 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``).
Returns:
A tuple (dep_to_file_to_changelogs, reverted_cls).
@@ -199,7 +202,7 @@ def GetChangeLogsForFilesGroupedByDeps(regression_deps_rolls, stack_deps,
if not dep_roll:
continue
- repository.repo_url = dep_roll.repo_url
+ repository = get_repository(dep_roll.repo_url)
changelogs = repository.GetChangeLogs(dep_roll.old_revision,
dep_roll.new_revision)

Powered by Google App Engine
This is Rietveld 408576698