OLD | NEW |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 """This module contains the SourceControl class and related functions.""" | 5 """This module contains the SourceControl class and related functions.""" |
6 | 6 |
7 import os | 7 import os |
8 | 8 |
9 from . import bisect_utils | 9 from . import bisect_utils |
10 | 10 |
(...skipping 18 matching lines...) Expand all Loading... |
29 | 29 |
30 class SourceControl(object): | 30 class SourceControl(object): |
31 """SourceControl is an abstraction over the source control system.""" | 31 """SourceControl is an abstraction over the source control system.""" |
32 | 32 |
33 def __init__(self): | 33 def __init__(self): |
34 super(SourceControl, self).__init__() | 34 super(SourceControl, self).__init__() |
35 | 35 |
36 def SyncToRevisionWithGClient(self, revision): | 36 def SyncToRevisionWithGClient(self, revision): |
37 """Uses gclient to sync to the specified revision. | 37 """Uses gclient to sync to the specified revision. |
38 | 38 |
39 ie. gclient sync --revision <revision> | 39 This is like running gclient sync --revision <revision>. |
40 | 40 |
41 Args: | 41 Args: |
42 revision: The git SHA1 or svn CL (depending on workflow). | 42 revision: A git SHA1 hash or SVN revision number (depending on workflow). |
43 | 43 |
44 Returns: | 44 Returns: |
45 The return code of the call. | 45 The return code of the call. |
46 """ | 46 """ |
47 return bisect_utils.RunGClient(['sync', '--verbose', '--reset', '--force', | 47 return bisect_utils.RunGClient(['sync', '--verbose', '--reset', '--force', |
48 '--delete_unversioned_trees', '--nohooks', '--revision', revision]) | 48 '--delete_unversioned_trees', '--nohooks', '--revision', revision]) |
49 | 49 |
50 def SyncToRevisionWithRepo(self, timestamp): | 50 def SyncToRevisionWithRepo(self, timestamp): |
51 """Uses repo to sync all the underlying git depots to the specified | 51 """Uses the repo command to sync all the underlying git depots to the |
52 time. | 52 specified time. |
53 | 53 |
54 Args: | 54 Args: |
55 timestamp: The unix timestamp to sync to. | 55 timestamp: The Unix timestamp to sync to. |
56 | 56 |
57 Returns: | 57 Returns: |
58 The return code of the call. | 58 The return code of the call. |
59 """ | 59 """ |
60 return bisect_utils.RunRepoSyncAtTimestamp(timestamp) | 60 return bisect_utils.RunRepoSyncAtTimestamp(timestamp) |
61 | 61 |
62 | 62 |
63 class GitSourceControl(SourceControl): | 63 class GitSourceControl(SourceControl): |
64 """GitSourceControl is used to query the underlying source control.""" | 64 """GitSourceControl is used to query the underlying source control.""" |
65 | 65 |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 return int(svn_revision) | 220 return int(svn_revision) |
221 | 221 |
222 return None | 222 return None |
223 | 223 |
224 def QueryRevisionInfo(self, revision, cwd=None): | 224 def QueryRevisionInfo(self, revision, cwd=None): |
225 """Gathers information on a particular revision, such as author's name, | 225 """Gathers information on a particular revision, such as author's name, |
226 email, subject, and date. | 226 email, subject, and date. |
227 | 227 |
228 Args: | 228 Args: |
229 revision: Revision you want to gather information on. | 229 revision: Revision you want to gather information on. |
| 230 |
230 Returns: | 231 Returns: |
231 A dict in the following format: | 232 A dict in the following format: |
232 { | 233 { |
233 'author': %s, | 234 'author': %s, |
234 'email': %s, | 235 'email': %s, |
235 'date': %s, | 236 'date': %s, |
236 'subject': %s, | 237 'subject': %s, |
237 'body': %s, | 238 'body': %s, |
238 } | 239 } |
239 """ | 240 """ |
(...skipping 12 matching lines...) Expand all Loading... |
252 def CheckoutFileAtRevision(self, file_name, revision, cwd=None): | 253 def CheckoutFileAtRevision(self, file_name, revision, cwd=None): |
253 """Performs a checkout on a file at the given revision. | 254 """Performs a checkout on a file at the given revision. |
254 | 255 |
255 Returns: | 256 Returns: |
256 True if successful. | 257 True if successful. |
257 """ | 258 """ |
258 return not bisect_utils.RunGit( | 259 return not bisect_utils.RunGit( |
259 ['checkout', revision, file_name], cwd=cwd)[1] | 260 ['checkout', revision, file_name], cwd=cwd)[1] |
260 | 261 |
261 def RevertFileToHead(self, file_name): | 262 def RevertFileToHead(self, file_name): |
262 """Unstages a file and returns it to HEAD. | 263 """Un-stages a file and resets the file's state to HEAD. |
263 | 264 |
264 Returns: | 265 Returns: |
265 True if successful. | 266 True if successful. |
266 """ | 267 """ |
267 # Reset doesn't seem to return 0 on success. | 268 # Reset doesn't seem to return 0 on success. |
268 bisect_utils.RunGit(['reset', 'HEAD', file_name]) | 269 bisect_utils.RunGit(['reset', 'HEAD', file_name]) |
269 | 270 |
270 return not bisect_utils.RunGit(['checkout', bisect_utils.FILE_DEPS_GIT])[1] | 271 return not bisect_utils.RunGit(['checkout', bisect_utils.FILE_DEPS_GIT])[1] |
271 | 272 |
272 def QueryFileRevisionHistory(self, filename, revision_start, revision_end): | 273 def QueryFileRevisionHistory(self, filename, revision_start, revision_end): |
273 """Returns a list of commits that modified this file. | 274 """Returns a list of commits that modified this file. |
274 | 275 |
275 Args: | 276 Args: |
276 filename: Name of file. | 277 filename: Name of file. |
277 revision_start: Start of revision range. | 278 revision_start: Start of revision range. |
278 revision_end: End of revision range. | 279 revision_end: End of revision range. |
279 | 280 |
280 Returns: | 281 Returns: |
281 Returns a list of commits that touched this file. | 282 Returns a list of commits that touched this file. |
282 """ | 283 """ |
283 cmd = ['log', '--format=%H', '%s~1..%s' % (revision_start, revision_end), | 284 cmd = ['log', '--format=%H', '%s~1..%s' % (revision_start, revision_end), |
284 filename] | 285 filename] |
285 output = bisect_utils.CheckRunGit(cmd) | 286 output = bisect_utils.CheckRunGit(cmd) |
286 | 287 |
287 return [o for o in output.split('\n') if o] | 288 return [o for o in output.split('\n') if o] |
OLD | NEW |