Chromium Code Reviews| Index: appengine/findit/common/git_repository.py |
| diff --git a/appengine/findit/common/git_repository.py b/appengine/findit/common/git_repository.py |
| index a1fb155b28606fbc067ee7988e9f5548ccb135f2..5fdcb10b6abc0d0e156b758f06beb55bfff82624 100644 |
| --- a/appengine/findit/common/git_repository.py |
| +++ b/appengine/findit/common/git_repository.py |
| @@ -141,11 +141,7 @@ class GitRepository(Repository): |
| if reverted_revision_match: |
| return reverted_revision_match.group(1) |
| - def GetChangeLog(self, revision): |
| - url, data = self._DownloadChangeLogData(revision) |
| - if not data: |
| - return None |
| - |
| + def _ParseChangeLogFromLogData(self, data): |
| commit_position, code_review_url = ( |
| self.ExtractCommitPositionAndCodeReviewUrl(data['message'])) |
| @@ -161,6 +157,7 @@ class GitRepository(Repository): |
| author_time = self._GetDateTimeFromString(data['author']['time']) |
| committer_time = self._GetDateTimeFromString(data['committer']['time']) |
| reverted_revision = self.GetRevertedRevision(data['message']) |
| + url = '%s/+/%s' % (self.repo_url, data['commit']) |
| return ChangeLog( |
| data['author']['name'], self._NormalizeEmail(data['author']['email']), |
| @@ -171,6 +168,13 @@ class GitRepository(Repository): |
| data['message'], touched_files, url, code_review_url, |
| reverted_revision) |
| + def GetChangeLog(self, revision): |
| + _, data = self._DownloadChangeLogData(revision) |
| + if not data: |
| + return None |
| + |
| + return self._ParseChangeLogFromLogData(data) |
| + |
| def GetCommitsBetweenRevisions(self, start_revision, end_revision, n=1000): |
| """Gets a list of commit hashes between start_revision and end_revision. |
| @@ -236,24 +240,31 @@ class GitRepository(Repository): |
| return self._SendRequestForTextResponse(url) |
| def GetChangeLogs(self, start_revision, end_revision, n=1000): |
| - """Gets a list of ChangeLogs in revision range. |
| + """Gets a list of ChangeLogs in revision range by batch. |
| Args: |
| start_revision (str): The oldest revision in the range. |
| end_revision (str): The latest revision in the range. |
| - n (int): The maximum number of revisions to request at a time. |
| + n (int): The maximum number of revisions to request at a time (default |
| + to 1000). |
| Returns: |
| A list of changelogs in (start_revision, end_revision]. |
| """ |
| - revisions = self.GetCommitsBetweenRevisions(start_revision, end_revision, n) |
| + next_end_revision = end_revision |
| changelogs = [] |
| - for revision in revisions: |
| - changelog = self.GetChangeLog(revision) |
| - if not changelog: |
| - raise Exception('Failed to pull changelog for revision %s' % revision) |
| - |
| - changelogs.append(changelog) |
| + while next_end_revision: |
| + url = '%s/+log/%s..%s' % (self.repo_url, |
| + start_revision, next_end_revision) |
| + data = self._SendRequestForJsonResponse(url, {'n': str(n), |
| + 'name-status': '1'}) |
|
stgao
2016/05/06 06:59:18
Will this include the file change?
Sharu Jiang
2016/05/06 17:46:12
Yes, it includes the 'tree-diff's
|
| + for log in data['log']: |
| + changelogs.append(self._ParseChangeLogFromLogData(log)) |
| + |
| + if 'next' in data: |
| + next_end_revision = data['next'] |
| + else: |
| + next_end_revision = None |
| return changelogs |