Index: presubmit_support.py |
diff --git a/presubmit_support.py b/presubmit_support.py |
index 0b9e75b4c39e1acaaf3522cc40f75e4e07567211..62a39be3cfb8e158a1bd7ea4590a9968bd7c6027 100755 |
--- a/presubmit_support.py |
+++ b/presubmit_support.py |
@@ -500,6 +500,9 @@ class InputApi(object): |
class _DiffCache(object): |
"""Caches diffs retrieved from a particular SCM.""" |
+ def __init__(self, upstream=None): |
+ """Stores the upstream revision against which all diffs will be computed.""" |
+ self._upstream = upstream |
def GetDiff(self, path, local_root): |
"""Get the diff for a particular path.""" |
@@ -508,8 +511,8 @@ class _DiffCache(object): |
class _SvnDiffCache(_DiffCache): |
"""DiffCache implementation for subversion.""" |
- def __init__(self): |
- super(_SvnDiffCache, self).__init__() |
+ def __init__(self, *args, **kwargs): |
+ super(_SvnDiffCache, self).__init__(*args, **kwargs) |
self._diffs_by_file = {} |
def GetDiff(self, path, local_root): |
@@ -521,8 +524,8 @@ class _SvnDiffCache(_DiffCache): |
class _GitDiffCache(_DiffCache): |
"""DiffCache implementation for git; gets all file diffs at once.""" |
- def __init__(self): |
- super(_GitDiffCache, self).__init__() |
+ def __init__(self, upstream): |
+ super(_GitDiffCache, self).__init__(upstream=upstream) |
self._diffs_by_file = None |
def GetDiff(self, path, local_root): |
@@ -533,7 +536,8 @@ class _GitDiffCache(_DiffCache): |
# Don't specify any filenames below, because there are command line length |
# limits on some platforms and GenerateDiff would fail. |
- unified_diff = scm.GIT.GenerateDiff(local_root, files=[], full_move=True) |
+ unified_diff = scm.GIT.GenerateDiff(local_root, files=[], full_move=True, |
+ branch=self._upstream) |
# This regex matches the path twice, separated by a space. Note that |
# filename itself may contain spaces. |
@@ -567,7 +571,7 @@ class AffectedFile(object): |
# Method could be a function |
# pylint: disable=R0201 |
- def __init__(self, path, action, repository_root, diff_cache=None): |
+ def __init__(self, path, action, repository_root, diff_cache): |
self._path = path |
self._action = action |
self._local_root = repository_root |
@@ -575,10 +579,7 @@ class AffectedFile(object): |
self._properties = {} |
self._cached_changed_contents = None |
self._cached_new_contents = None |
- if diff_cache: |
- self._diff_cache = diff_cache |
- else: |
- self._diff_cache = self.DIFF_CACHE() |
+ self._diff_cache = diff_cache |
logging.debug('%s(%s)' % (self.__class__.__name__, self._path)) |
def ServerPath(self): |
@@ -792,12 +793,14 @@ class Change(object): |
scm = '' |
def __init__( |
- self, name, description, local_root, files, issue, patchset, author): |
+ self, name, description, local_root, files, issue, patchset, author, |
+ upstream=None): |
if files is None: |
files = [] |
self._name = name |
# Convert root into an absolute path. |
self._local_root = os.path.abspath(local_root) |
+ self._upstream = upstream |
self.issue = issue |
self.patchset = patchset |
self.author_email = author |
@@ -810,7 +813,7 @@ class Change(object): |
assert all( |
(isinstance(f, (list, tuple)) and len(f) == 2) for f in files), files |
- diff_cache = self._AFFECTED_FILES.DIFF_CACHE() |
+ diff_cache = self._AFFECTED_FILES.DIFF_CACHE(self._upstream) |
self._affected_files = [ |
self._AFFECTED_FILES(path, action.strip(), self._local_root, diff_cache) |
for action, path in files |
@@ -1612,7 +1615,8 @@ def Main(argv): |
files, |
options.issue, |
options.patchset, |
- options.author) |
+ options.author, |
+ upstream=options.upstream) |
trybots = DoGetTrySlaves( |
change, |
change.LocalPaths(), |
@@ -1631,7 +1635,8 @@ def Main(argv): |
files, |
options.issue, |
options.patchset, |
- options.author), |
+ options.author, |
+ upstream=options.upstream), |
options.commit, |
options.verbose, |
sys.stdout, |