Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: scm.py

Issue 1739021: Modify scm.GIT.GetUpstreamBranch to behave like git-cl. (Closed)
Patch Set: Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « gclient_scm.py ('k') | tests/scm_unittest.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2006-2009 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 glob 7 import glob
8 import os 8 import os
9 import re 9 import re
10 import shutil 10 import shutil
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 if url in svn_refs: 195 if url in svn_refs:
196 svn_branch = svn_refs[url] 196 svn_branch = svn_refs[url]
197 proc.stdout.close() # Cut pipe. 197 proc.stdout.close() # Cut pipe.
198 break 198 break
199 return svn_branch 199 return svn_branch
200 200
201 @staticmethod 201 @staticmethod
202 def FetchUpstreamTuple(cwd): 202 def FetchUpstreamTuple(cwd):
203 """Returns a tuple containg remote and remote ref, 203 """Returns a tuple containg remote and remote ref,
204 e.g. 'origin', 'refs/heads/master' 204 e.g. 'origin', 'refs/heads/master'
205 Tries to be intelligent and understand git-svn.
205 """ 206 """
206 remote = '.' 207 remote = '.'
207 branch = GIT.GetBranch(cwd) 208 branch = GIT.GetBranch(cwd)
208 upstream_branch = None 209 upstream_branch = None
209 upstream_branch = GIT.Capture( 210 upstream_branch = GIT.Capture(
210 ['config', 'branch.%s.merge' % branch], in_directory=cwd, 211 ['config', 'branch.%s.merge' % branch], in_directory=cwd,
211 error_ok=True)[0].strip() 212 error_ok=True)[0].strip()
212 if upstream_branch: 213 if upstream_branch:
213 remote = GIT.Capture( 214 remote = GIT.Capture(
214 ['config', 'branch.%s.remote' % branch], 215 ['config', 'branch.%s.remote' % branch],
215 in_directory=cwd, error_ok=True)[0].strip() 216 in_directory=cwd, error_ok=True)[0].strip()
216 else: 217 else:
217 # Fall back on trying a git-svn upstream branch. 218 # Fall back on trying a git-svn upstream branch.
218 if GIT.IsGitSvn(cwd): 219 if GIT.IsGitSvn(cwd):
219 upstream_branch = GIT.GetSVNBranch(cwd) 220 upstream_branch = GIT.GetSVNBranch(cwd)
221 # Fall back on origin/master if it exits.
222 elif GIT.Capture(['branch', '-r'], in_directory=cwd
223 )[0].split().count('origin/master'):
224 remote = 'origin'
225 upstream_branch = 'refs/heads/master'
226 else:
227 remote = None
228 upstream_branch = None
220 return remote, upstream_branch 229 return remote, upstream_branch
221 230
222 @staticmethod 231 @staticmethod
223 def GetUpstream(cwd): 232 def GetUpstreamBranch(cwd):
224 """Gets the current branch's upstream branch.""" 233 """Gets the current branch's upstream branch."""
225 remote, upstream_branch = GIT.FetchUpstreamTuple(cwd) 234 remote, upstream_branch = GIT.FetchUpstreamTuple(cwd)
226 if remote != '.': 235 if remote != '.':
227 upstream_branch = upstream_branch.replace('heads', 'remotes/' + remote) 236 upstream_branch = upstream_branch.replace('heads', 'remotes/' + remote)
228 return upstream_branch 237 return upstream_branch
229 238
230 @staticmethod 239 @staticmethod
231 def GenerateDiff(cwd, branch=None, branch_head='HEAD', full_move=False, 240 def GenerateDiff(cwd, branch=None, branch_head='HEAD', full_move=False,
232 files=None): 241 files=None):
233 """Diffs against the upstream branch or optionally another branch. 242 """Diffs against the upstream branch or optionally another branch.
234 243
235 full_move means that move or copy operations should completely recreate the 244 full_move means that move or copy operations should completely recreate the
236 files, usually in the prospect to apply the patch for a try job.""" 245 files, usually in the prospect to apply the patch for a try job."""
237 if not branch: 246 if not branch:
238 branch = GIT.GetUpstream(cwd) 247 branch = GIT.GetUpstreamBranch(cwd)
239 command = ['diff', '-p', '--no-prefix', branch + "..." + branch_head] 248 command = ['diff', '-p', '--no-prefix', branch + "..." + branch_head]
240 if not full_move: 249 if not full_move:
241 command.append('-C') 250 command.append('-C')
242 # TODO(maruel): --binary support. 251 # TODO(maruel): --binary support.
243 if files: 252 if files:
244 command.append('--') 253 command.append('--')
245 command.extend(files) 254 command.extend(files)
246 diff = GIT.Capture(command, cwd)[0].splitlines(True) 255 diff = GIT.Capture(command, cwd)[0].splitlines(True)
247 for i in range(len(diff)): 256 for i in range(len(diff)):
248 # In the case of added files, replace /dev/null with the path to the 257 # In the case of added files, replace /dev/null with the path to the
249 # file being added. 258 # file being added.
250 if diff[i].startswith('--- /dev/null'): 259 if diff[i].startswith('--- /dev/null'):
251 diff[i] = '--- %s' % diff[i+1][4:] 260 diff[i] = '--- %s' % diff[i+1][4:]
252 return ''.join(diff) 261 return ''.join(diff)
253 262
254 @staticmethod 263 @staticmethod
255 def GetDifferentFiles(cwd, branch=None, branch_head='HEAD'): 264 def GetDifferentFiles(cwd, branch=None, branch_head='HEAD'):
256 """Returns the list of modified files between two branches.""" 265 """Returns the list of modified files between two branches."""
257 if not branch: 266 if not branch:
258 branch = GIT.GetUpstream(cwd) 267 branch = GIT.GetUpstreamBranch(cwd)
259 command = ['diff', '--name-only', branch + "..." + branch_head] 268 command = ['diff', '--name-only', branch + "..." + branch_head]
260 return GIT.Capture(command, cwd)[0].splitlines(False) 269 return GIT.Capture(command, cwd)[0].splitlines(False)
261 270
262 @staticmethod 271 @staticmethod
263 def GetPatchName(cwd): 272 def GetPatchName(cwd):
264 """Constructs a name for this patch.""" 273 """Constructs a name for this patch."""
265 short_sha = GIT.Capture(['rev-parse', '--short=4', 'HEAD'], cwd)[0].strip() 274 short_sha = GIT.Capture(['rev-parse', '--short=4', 'HEAD'], cwd)[0].strip()
266 return "%s-%s" % (GIT.GetBranch(cwd), short_sha) 275 return "%s-%s" % (GIT.GetBranch(cwd), short_sha)
267 276
268 @staticmethod 277 @staticmethod
(...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after
778 if not SVN.current_version: 787 if not SVN.current_version:
779 SVN.current_version = SVN.Capture(['--version']).split()[2] 788 SVN.current_version = SVN.Capture(['--version']).split()[2]
780 current_version_list = map(only_int, SVN.current_version.split('.')) 789 current_version_list = map(only_int, SVN.current_version.split('.'))
781 for min_ver in map(int, min_version.split('.')): 790 for min_ver in map(int, min_version.split('.')):
782 ver = current_version_list.pop(0) 791 ver = current_version_list.pop(0)
783 if ver < min_ver: 792 if ver < min_ver:
784 return (False, SVN.current_version) 793 return (False, SVN.current_version)
785 elif ver > min_ver: 794 elif ver > min_ver:
786 return (True, SVN.current_version) 795 return (True, SVN.current_version)
787 return (True, SVN.current_version) 796 return (True, SVN.current_version)
OLDNEW
« no previous file with comments | « gclient_scm.py ('k') | tests/scm_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698