OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright 2014 The Chromium Authors. All rights reserved. | 2 # Copyright 2014 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 """A git command for managing a local cache of git repositories.""" | 6 """A git command for managing a local cache of git repositories.""" |
7 | 7 |
8 from __future__ import print_function | 8 from __future__ import print_function |
9 import errno | 9 import errno |
10 import logging | 10 import logging |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 if norm_url.endswith('.git'): | 178 if norm_url.endswith('.git'): |
179 norm_url = norm_url[:-len('.git')] | 179 norm_url = norm_url[:-len('.git')] |
180 return norm_url.replace('-', '--').replace('/', '-').lower() | 180 return norm_url.replace('-', '--').replace('/', '-').lower() |
181 | 181 |
182 @staticmethod | 182 @staticmethod |
183 def CacheDirToUrl(path): | 183 def CacheDirToUrl(path): |
184 """Convert a cache dir path to its corresponding url.""" | 184 """Convert a cache dir path to its corresponding url.""" |
185 netpath = re.sub(r'\b-\b', '/', os.path.basename(path)).replace('--', '-') | 185 netpath = re.sub(r'\b-\b', '/', os.path.basename(path)).replace('--', '-') |
186 return 'https://%s' % netpath | 186 return 'https://%s' % netpath |
187 | 187 |
188 @staticmethod | |
189 def FindExecutable(executable): | |
190 """This mimics the "which" utility.""" | |
191 path_folders = os.environ.get('PATH').split(os.pathsep) | |
192 | |
193 for path_folder in path_folders: | |
194 target = os.path.join(path_folder, executable) | |
195 # Just incase we have some ~/blah paths. | |
196 target = os.path.abspath(os.path.expanduser(target)) | |
197 if os.path.isfile(target) and os.access(target, os.X_OK): | |
198 return target | |
199 if sys.platform.startswith('win'): | |
200 for suffix in ('.bat', '.cmd', '.exe'): | |
201 alt_target = target + suffix | |
202 if os.path.isfile(alt_target) and os.access(alt_target, os.X_OK): | |
203 return alt_target | |
204 return None | |
205 | |
206 @classmethod | 188 @classmethod |
207 def SetCachePath(cls, cachepath): | 189 def SetCachePath(cls, cachepath): |
208 with cls.cachepath_lock: | 190 with cls.cachepath_lock: |
209 setattr(cls, 'cachepath', cachepath) | 191 setattr(cls, 'cachepath', cachepath) |
210 | 192 |
211 @classmethod | 193 @classmethod |
212 def GetCachePath(cls): | 194 def GetCachePath(cls): |
213 with cls.cachepath_lock: | 195 with cls.cachepath_lock: |
214 if not hasattr(cls, 'cachepath'): | 196 if not hasattr(cls, 'cachepath'): |
215 try: | 197 try: |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 ['config', '--replace-all', 'remote.origin.fetch', refspec, regex], | 248 ['config', '--replace-all', 'remote.origin.fetch', refspec, regex], |
267 cwd=cwd) | 249 cwd=cwd) |
268 | 250 |
269 def bootstrap_repo(self, directory): | 251 def bootstrap_repo(self, directory): |
270 """Bootstrap the repo from Google Stroage if possible. | 252 """Bootstrap the repo from Google Stroage if possible. |
271 | 253 |
272 More apt-ly named bootstrap_repo_from_cloud_if_possible_else_do_nothing(). | 254 More apt-ly named bootstrap_repo_from_cloud_if_possible_else_do_nothing(). |
273 """ | 255 """ |
274 | 256 |
275 python_fallback = False | 257 python_fallback = False |
276 if sys.platform.startswith('win') and not self.FindExecutable('7z'): | 258 if (sys.platform.startswith('win') and |
| 259 not gclient_utils.FindExecutable('7z')): |
277 python_fallback = True | 260 python_fallback = True |
278 elif sys.platform.startswith('darwin'): | 261 elif sys.platform.startswith('darwin'): |
279 # The OSX version of unzip doesn't support zip64. | 262 # The OSX version of unzip doesn't support zip64. |
280 python_fallback = True | 263 python_fallback = True |
281 elif not self.FindExecutable('unzip'): | 264 elif not gclient_utils.FindExecutable('unzip'): |
282 python_fallback = True | 265 python_fallback = True |
283 | 266 |
284 gs_folder = 'gs://%s/%s' % (self.bootstrap_bucket, self.basedir) | 267 gs_folder = 'gs://%s/%s' % (self.bootstrap_bucket, self.basedir) |
285 gsutil = Gsutil(self.gsutil_exe, boto_path=None) | 268 gsutil = Gsutil(self.gsutil_exe, boto_path=None) |
286 # Get the most recent version of the zipfile. | 269 # Get the most recent version of the zipfile. |
287 _, ls_out, _ = gsutil.check_call('ls', gs_folder) | 270 _, ls_out, _ = gsutil.check_call('ls', gs_folder) |
288 ls_out_sorted = sorted(ls_out.splitlines()) | 271 ls_out_sorted = sorted(ls_out.splitlines()) |
289 if not ls_out_sorted: | 272 if not ls_out_sorted: |
290 # This repo is not on Google Storage. | 273 # This repo is not on Google Storage. |
291 return False | 274 return False |
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
695 dispatcher = subcommand.CommandDispatcher(__name__) | 678 dispatcher = subcommand.CommandDispatcher(__name__) |
696 return dispatcher.execute(OptionParser(), argv) | 679 return dispatcher.execute(OptionParser(), argv) |
697 | 680 |
698 | 681 |
699 if __name__ == '__main__': | 682 if __name__ == '__main__': |
700 try: | 683 try: |
701 sys.exit(main(sys.argv[1:])) | 684 sys.exit(main(sys.argv[1:])) |
702 except KeyboardInterrupt: | 685 except KeyboardInterrupt: |
703 sys.stderr.write('interrupted\n') | 686 sys.stderr.write('interrupted\n') |
704 sys.exit(1) | 687 sys.exit(1) |
OLD | NEW |