Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Meta checkout manager supporting both Subversion and GIT. | 6 """Meta checkout manager supporting both Subversion and GIT. |
| 7 | 7 |
| 8 Files | 8 Files |
| 9 .gclient : Current client configuration, written by 'config' command. | 9 .gclient : Current client configuration, written by 'config' command. |
| 10 Format is a Python script defining 'solutions', a list whose | 10 Format is a Python script defining 'solutions', a list whose |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 115 def GetPath(self): | 115 def GetPath(self): |
| 116 return os.path.split(self.file_location)[0] | 116 return os.path.split(self.file_location)[0] |
| 117 | 117 |
| 118 def GetFilename(self): | 118 def GetFilename(self): |
| 119 rev_tokens = self.file_location.split('@') | 119 rev_tokens = self.file_location.split('@') |
| 120 return os.path.split(rev_tokens[0])[1] | 120 return os.path.split(rev_tokens[0])[1] |
| 121 | 121 |
| 122 def GetRevision(self): | 122 def GetRevision(self): |
| 123 rev_tokens = self.file_location.split('@') | 123 rev_tokens = self.file_location.split('@') |
| 124 if len(rev_tokens) > 1: | 124 if len(rev_tokens) > 1: |
| 125 return rev_tokens[1] | 125 return rev_tokens[1] |
|
Peter Mayo
2012/02/23 20:32:56
Is this check correct if we remove the restriction
M-A Ruel
2012/02/23 20:50:07
In theory, yes, in practice, it's not a problem be
| |
| 126 return None | 126 return None |
| 127 | 127 |
| 128 class VarImpl(object): | 128 class VarImpl(object): |
| 129 def __init__(self, custom_vars, local_scope): | 129 def __init__(self, custom_vars, local_scope): |
| 130 self._custom_vars = custom_vars | 130 self._custom_vars = custom_vars |
| 131 self._local_scope = local_scope | 131 self._local_scope = local_scope |
| 132 | 132 |
| 133 def Lookup(self, var_name): | 133 def Lookup(self, var_name): |
| 134 """Implements the Var syntax.""" | 134 """Implements the Var syntax.""" |
| 135 if var_name in self._custom_vars: | 135 if var_name in self._custom_vars: |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 161 self._should_process = should_process | 161 self._should_process = should_process |
| 162 | 162 |
| 163 # These are only set in .gclient and not in DEPS files. | 163 # These are only set in .gclient and not in DEPS files. |
| 164 self._custom_vars = custom_vars or {} | 164 self._custom_vars = custom_vars or {} |
| 165 self._custom_deps = custom_deps or {} | 165 self._custom_deps = custom_deps or {} |
| 166 | 166 |
| 167 # Post process the url to remove trailing slashes. | 167 # Post process the url to remove trailing slashes. |
| 168 if isinstance(self._url, basestring): | 168 if isinstance(self._url, basestring): |
| 169 # urls are sometime incorrectly written as proto://host/path/@rev. Replace | 169 # urls are sometime incorrectly written as proto://host/path/@rev. Replace |
| 170 # it to proto://host/path@rev. | 170 # it to proto://host/path@rev. |
| 171 if self._url.count('@') > 1: | |
| 172 raise gclient_utils.Error('Invalid url "%s"' % self._url) | |
| 173 self._url = self._url.replace('/@', '@') | 171 self._url = self._url.replace('/@', '@') |
|
Peter Mayo
2012/02/23 20:32:56
I think the RFC precludes using slashes in the use
Peter Mayo
2012/02/23 20:49:57
1738 section 3.1 requires encoding of the @ and /
M-A Ruel
2012/02/23 20:50:07
As long as we make sure it doesn't work, it's fine
M-A Ruel
2012/02/23 20:51:04
The important part is that it'll fail to sync. Whi
| |
| 174 elif not isinstance(self._url, | 172 elif not isinstance(self._url, |
| 175 (self.FromImpl, self.FileImpl, None.__class__)): | 173 (self.FromImpl, self.FileImpl, None.__class__)): |
| 176 raise gclient_utils.Error( | 174 raise gclient_utils.Error( |
| 177 ('dependency url must be either a string, None, ' | 175 ('dependency url must be either a string, None, ' |
| 178 'File() or From() instead of %s') % self._url.__class__.__name__) | 176 'File() or From() instead of %s') % self._url.__class__.__name__) |
| 179 if '/' in self._deps_file or '\\' in self._deps_file: | 177 if '/' in self._deps_file or '\\' in self._deps_file: |
| 180 raise gclient_utils.Error('deps_file name must not be a path, just a ' | 178 raise gclient_utils.Error('deps_file name must not be a path, just a ' |
| 181 'filename. %s' % self._deps_file) | 179 'filename. %s' % self._deps_file) |
| 182 | 180 |
| 183 @property | 181 @property |
| (...skipping 1356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1540 except (gclient_utils.Error, subprocess2.CalledProcessError), e: | 1538 except (gclient_utils.Error, subprocess2.CalledProcessError), e: |
| 1541 print >> sys.stderr, 'Error: %s' % str(e) | 1539 print >> sys.stderr, 'Error: %s' % str(e) |
| 1542 return 1 | 1540 return 1 |
| 1543 | 1541 |
| 1544 | 1542 |
| 1545 if '__main__' == __name__: | 1543 if '__main__' == __name__: |
| 1546 fix_encoding.fix_encoding() | 1544 fix_encoding.fix_encoding() |
| 1547 sys.exit(Main(sys.argv[1:])) | 1545 sys.exit(Main(sys.argv[1:])) |
| 1548 | 1546 |
| 1549 # vim: ts=2:sw=2:tw=80:et: | 1547 # vim: ts=2:sw=2:tw=80:et: |
| OLD | NEW |