OLD | NEW |
---|---|
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 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 """SCM-specific utility classes.""" | 5 """SCM-specific utility classes.""" |
6 | 6 |
7 import cStringIO | 7 import cStringIO |
8 import glob | 8 import glob |
9 import logging | 9 import logging |
10 import os | 10 import os |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
134 # these 2 branches instead diffing to upstream. | 134 # these 2 branches instead diffing to upstream. |
135 m = re.match('^(\w)+\t(.+)$', statusline) | 135 m = re.match('^(\w)+\t(.+)$', statusline) |
136 if not m: | 136 if not m: |
137 raise gclient_utils.Error( | 137 raise gclient_utils.Error( |
138 'status currently unsupported: %s' % statusline) | 138 'status currently unsupported: %s' % statusline) |
139 # Only grab the first letter. | 139 # Only grab the first letter. |
140 results.append(('%s ' % m.group(1)[0], m.group(2))) | 140 results.append(('%s ' % m.group(1)[0], m.group(2))) |
141 return results | 141 return results |
142 | 142 |
143 @staticmethod | 143 @staticmethod |
144 def IsWorkTreeDirty(cwd): | |
145 return GIT.Capture(['status', '-s'], cwd=cwd) != '' | |
146 | |
147 @staticmethod | |
144 def GetEmail(cwd): | 148 def GetEmail(cwd): |
145 """Retrieves the user email address if known.""" | 149 """Retrieves the user email address if known.""" |
146 # We could want to look at the svn cred when it has a svn remote but it | 150 # We could want to look at the svn cred when it has a svn remote but it |
147 # should be fine for now, users should simply configure their git settings. | 151 # should be fine for now, users should simply configure their git settings. |
148 try: | 152 try: |
149 return GIT.Capture(['config', 'user.email'], cwd=cwd) | 153 return GIT.Capture(['config', 'user.email'], cwd=cwd) |
150 except subprocess2.CalledProcessError: | 154 except subprocess2.CalledProcessError: |
151 return '' | 155 return '' |
152 | 156 |
153 @staticmethod | 157 @staticmethod |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
383 return "%s#%s" % (GIT.GetBranch(cwd), short_sha) | 387 return "%s#%s" % (GIT.GetBranch(cwd), short_sha) |
384 | 388 |
385 @staticmethod | 389 @staticmethod |
386 def GetCheckoutRoot(cwd): | 390 def GetCheckoutRoot(cwd): |
387 """Returns the top level directory of a git checkout as an absolute path. | 391 """Returns the top level directory of a git checkout as an absolute path. |
388 """ | 392 """ |
389 root = GIT.Capture(['rev-parse', '--show-cdup'], cwd=cwd) | 393 root = GIT.Capture(['rev-parse', '--show-cdup'], cwd=cwd) |
390 return os.path.abspath(os.path.join(cwd, root)) | 394 return os.path.abspath(os.path.join(cwd, root)) |
391 | 395 |
392 @staticmethod | 396 @staticmethod |
397 def GetGitDir(cwd): | |
398 return GIT.Capture(['rev-parse', '--git-dir'], cwd=cwd) | |
agable
2014/03/04 21:45:59
Note that this returns a relative path if you're a
nodir
2014/03/04 22:51:19
Done.
| |
399 | |
400 @staticmethod | |
401 def IsInsideWorkTree(cwd): | |
402 try: | |
403 return GIT.Capture(['rev-parse', '--is-inside-work-tree'], cwd=cwd) | |
404 except (OSError, subprocess2.CalledProcessError): | |
405 return False | |
406 | |
407 @staticmethod | |
393 def GetGitSvnHeadRev(cwd): | 408 def GetGitSvnHeadRev(cwd): |
394 """Gets the most recently pulled git-svn revision.""" | 409 """Gets the most recently pulled git-svn revision.""" |
395 try: | 410 try: |
396 output = GIT.Capture(['svn', 'info'], cwd=cwd) | 411 output = GIT.Capture(['svn', 'info'], cwd=cwd) |
397 match = re.search(r'^Revision: ([0-9]+)$', output, re.MULTILINE) | 412 match = re.search(r'^Revision: ([0-9]+)$', output, re.MULTILINE) |
398 return int(match.group(1)) if match else None | 413 return int(match.group(1)) if match else None |
399 except (subprocess2.CalledProcessError, ValueError): | 414 except (subprocess2.CalledProcessError, ValueError): |
400 return None | 415 return None |
401 | 416 |
402 @staticmethod | 417 @staticmethod |
(...skipping 704 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1107 # revert, like for properties. | 1122 # revert, like for properties. |
1108 if not os.path.isdir(cwd): | 1123 if not os.path.isdir(cwd): |
1109 # '.' was deleted. It's not worth continuing. | 1124 # '.' was deleted. It's not worth continuing. |
1110 return | 1125 return |
1111 try: | 1126 try: |
1112 SVN.Capture(['revert', file_status[1]], cwd=cwd) | 1127 SVN.Capture(['revert', file_status[1]], cwd=cwd) |
1113 except subprocess2.CalledProcessError: | 1128 except subprocess2.CalledProcessError: |
1114 if not os.path.exists(file_path): | 1129 if not os.path.exists(file_path): |
1115 continue | 1130 continue |
1116 raise | 1131 raise |
OLD | NEW |