| OLD | NEW |
| 1 # Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2010 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 """Gclient-specific SCM-specific operations.""" | 5 """Gclient-specific SCM-specific operations.""" |
| 6 | 6 |
| 7 import logging | 7 import logging |
| 8 import os | 8 import os |
| 9 import posixpath | 9 import posixpath |
| 10 import re | 10 import re |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 rev_str = ' at %s' % revision | 179 rev_str = ' at %s' % revision |
| 180 files = [] | 180 files = [] |
| 181 | 181 |
| 182 printed_path = False | 182 printed_path = False |
| 183 verbose = [] | 183 verbose = [] |
| 184 if options.verbose: | 184 if options.verbose: |
| 185 print('\n_____ %s%s' % (self.relpath, rev_str)) | 185 print('\n_____ %s%s' % (self.relpath, rev_str)) |
| 186 verbose = ['--verbose'] | 186 verbose = ['--verbose'] |
| 187 printed_path = True | 187 printed_path = True |
| 188 | 188 |
| 189 # See if the url has changed | |
| 190 current_url = self._Capture(['config', 'remote.origin.url']) | |
| 191 if current_url != url: | |
| 192 print('_____ switching %s to a new upstream' % self.relpath) | |
| 193 # Make sure it's clean | |
| 194 self._CheckClean(rev_str) | |
| 195 # Switch over to the new upstream | |
| 196 self._Run(['remote', 'set-url', 'origin', url], options) | |
| 197 quiet = [] | |
| 198 if not options.verbose: | |
| 199 quiet = ['--quiet'] | |
| 200 self._Run(['fetch', 'origin', '--prune'] + quiet, options) | |
| 201 self._Run(['reset', '--hard', 'origin/master'] + quiet, options) | |
| 202 files = self._Capture(['ls-files']).splitlines() | |
| 203 file_list.extend([os.path.join(self.checkout_path, f) for f in files]) | |
| 204 return | |
| 205 | |
| 206 if revision.startswith('refs/heads/'): | 189 if revision.startswith('refs/heads/'): |
| 207 rev_type = "branch" | 190 rev_type = "branch" |
| 208 elif revision.startswith('origin/'): | 191 elif revision.startswith('origin/'): |
| 209 # For compatability with old naming, translate 'origin' to 'refs/heads' | 192 # For compatability with old naming, translate 'origin' to 'refs/heads' |
| 210 revision = revision.replace('origin/', 'refs/heads/') | 193 revision = revision.replace('origin/', 'refs/heads/') |
| 211 rev_type = "branch" | 194 rev_type = "branch" |
| 212 else: | 195 else: |
| 213 # hash is also a tag, only make a distinction at checkout | 196 # hash is also a tag, only make a distinction at checkout |
| 214 rev_type = "hash" | 197 rev_type = "hash" |
| 215 | 198 |
| 216 if not os.path.exists(self.checkout_path): | 199 if not os.path.exists(self.checkout_path): |
| 217 self._Clone(revision, url, options) | 200 self._Clone(revision, url, options) |
| 218 files = self._Capture(['ls-files']).splitlines() | 201 files = self._Capture(['ls-files']).splitlines() |
| 219 file_list.extend([os.path.join(self.checkout_path, f) for f in files]) | 202 file_list.extend([os.path.join(self.checkout_path, f) for f in files]) |
| 220 if not verbose: | 203 if not verbose: |
| 221 # Make the output a little prettier. It's nice to have some whitespace | 204 # Make the output a little prettier. It's nice to have some whitespace |
| 222 # between projects when cloning. | 205 # between projects when cloning. |
| 223 print('') | 206 print('') |
| 224 return | 207 return |
| 225 | 208 |
| 226 if not os.path.exists(os.path.join(self.checkout_path, '.git')): | 209 if not os.path.exists(os.path.join(self.checkout_path, '.git')): |
| 227 raise gclient_utils.Error('\n____ %s%s\n' | 210 raise gclient_utils.Error('\n____ %s%s\n' |
| 228 '\tPath is not a git repo. No .git dir.\n' | 211 '\tPath is not a git repo. No .git dir.\n' |
| 229 '\tTo resolve:\n' | 212 '\tTo resolve:\n' |
| 230 '\t\trm -rf %s\n' | 213 '\t\trm -rf %s\n' |
| 231 '\tAnd run gclient sync again\n' | 214 '\tAnd run gclient sync again\n' |
| 232 % (self.relpath, rev_str, self.relpath)) | 215 % (self.relpath, rev_str, self.relpath)) |
| 233 | 216 |
| 217 # See if the url has changed |
| 218 current_url = self._Capture(['config', 'remote.origin.url']) |
| 219 if current_url != url: |
| 220 print('_____ switching %s to a new upstream' % self.relpath) |
| 221 # Make sure it's clean |
| 222 self._CheckClean(rev_str) |
| 223 # Switch over to the new upstream |
| 224 self._Run(['remote', 'set-url', 'origin', url], options) |
| 225 quiet = [] |
| 226 if not options.verbose: |
| 227 quiet = ['--quiet'] |
| 228 self._Run(['fetch', 'origin', '--prune'] + quiet, options) |
| 229 self._Run(['reset', '--hard', 'origin/master'] + quiet, options) |
| 230 files = self._Capture(['ls-files']).splitlines() |
| 231 file_list.extend([os.path.join(self.checkout_path, f) for f in files]) |
| 232 return |
| 233 |
| 234 cur_branch = self._GetCurrentBranch() | 234 cur_branch = self._GetCurrentBranch() |
| 235 | 235 |
| 236 # Cases: | 236 # Cases: |
| 237 # 0) HEAD is detached. Probably from our initial clone. | 237 # 0) HEAD is detached. Probably from our initial clone. |
| 238 # - make sure HEAD is contained by a named ref, then update. | 238 # - make sure HEAD is contained by a named ref, then update. |
| 239 # Cases 1-4. HEAD is a branch. | 239 # Cases 1-4. HEAD is a branch. |
| 240 # 1) current branch is not tracking a remote branch (could be git-svn) | 240 # 1) current branch is not tracking a remote branch (could be git-svn) |
| 241 # - try to rebase onto the new hash or branch | 241 # - try to rebase onto the new hash or branch |
| 242 # 2) current branch is tracking a remote branch with local committed | 242 # 2) current branch is tracking a remote branch with local committed |
| 243 # changes, but the DEPS file switched to point to a hash | 243 # changes, but the DEPS file switched to point to a hash |
| (...skipping 677 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 921 | 921 |
| 922 This method returns a new list to be used as a command.""" | 922 This method returns a new list to be used as a command.""" |
| 923 new_command = command[:] | 923 new_command = command[:] |
| 924 if revision: | 924 if revision: |
| 925 new_command.extend(['--revision', str(revision).strip()]) | 925 new_command.extend(['--revision', str(revision).strip()]) |
| 926 # --force was added to 'svn update' in svn 1.5. | 926 # --force was added to 'svn update' in svn 1.5. |
| 927 if ((options.force or options.manually_grab_svn_rev) and | 927 if ((options.force or options.manually_grab_svn_rev) and |
| 928 scm.SVN.AssertVersion("1.5")[0]): | 928 scm.SVN.AssertVersion("1.5")[0]): |
| 929 new_command.append('--force') | 929 new_command.append('--force') |
| 930 return new_command | 930 return new_command |
| OLD | NEW |