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

Side by Side Diff: scm.py

Issue 8228017: Revert r104938 "Make svn update not prompt during a sync." (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Created 9 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « gclient_scm.py ('k') | tests/gclient_scm_test.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) 2011 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2011 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 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 subprocess2.check_call( 79 subprocess2.check_call(
80 ['git', 'rev-parse', '--show-cdup'], 80 ['git', 'rev-parse', '--show-cdup'],
81 stdout=subprocess2.VOID, 81 stdout=subprocess2.VOID,
82 stderr=subprocess2.VOID, 82 stderr=subprocess2.VOID,
83 cwd=root) 83 cwd=root)
84 return 'git' 84 return 'git'
85 except (OSError, subprocess2.CalledProcessError): 85 except (OSError, subprocess2.CalledProcessError):
86 return None 86 return None
87 87
88 88
89 def only_int(val):
90 if val.isdigit():
91 return int(val)
92 else:
93 return 0
94
95
96 class GIT(object): 89 class GIT(object):
97 current_version = None
98
99 @staticmethod 90 @staticmethod
100 def Capture(args, **kwargs): 91 def Capture(args, **kwargs):
101 return subprocess2.check_output( 92 return subprocess2.check_output(
102 ['git'] + args, stderr=subprocess2.PIPE, **kwargs) 93 ['git'] + args, stderr=subprocess2.PIPE, **kwargs)
103 94
104 @staticmethod 95 @staticmethod
105 def CaptureStatus(files, upstream_branch=None): 96 def CaptureStatus(files, upstream_branch=None):
106 """Returns git status. 97 """Returns git status.
107 98
108 @files can be a string (one file) or a list of files. 99 @files can be a string (one file) or a list of files.
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 short_sha = GIT.Capture(['rev-parse', '--short=4', 'HEAD'], cwd=cwd).strip() 363 short_sha = GIT.Capture(['rev-parse', '--short=4', 'HEAD'], cwd=cwd).strip()
373 return "%s#%s" % (GIT.GetBranch(cwd), short_sha) 364 return "%s#%s" % (GIT.GetBranch(cwd), short_sha)
374 365
375 @staticmethod 366 @staticmethod
376 def GetCheckoutRoot(cwd): 367 def GetCheckoutRoot(cwd):
377 """Returns the top level directory of a git checkout as an absolute path. 368 """Returns the top level directory of a git checkout as an absolute path.
378 """ 369 """
379 root = GIT.Capture(['rev-parse', '--show-cdup'], cwd=cwd).strip() 370 root = GIT.Capture(['rev-parse', '--show-cdup'], cwd=cwd).strip()
380 return os.path.abspath(os.path.join(cwd, root)) 371 return os.path.abspath(os.path.join(cwd, root))
381 372
382 @classmethod 373 @staticmethod
383 def AssertVersion(cls, min_version): 374 def AssertVersion(min_version):
384 """Asserts git's version is at least min_version.""" 375 """Asserts git's version is at least min_version."""
385 if cls.current_version is None: 376 def only_int(val):
386 cls.current_version = cls.Capture(['--version']).split()[-1] 377 if val.isdigit():
387 current_version_list = map(only_int, cls.current_version.split('.')) 378 return int(val)
379 else:
380 return 0
381 current_version = GIT.Capture(['--version']).split()[-1]
382 current_version_list = map(only_int, current_version.split('.'))
388 for min_ver in map(int, min_version.split('.')): 383 for min_ver in map(int, min_version.split('.')):
389 ver = current_version_list.pop(0) 384 ver = current_version_list.pop(0)
390 if ver < min_ver: 385 if ver < min_ver:
391 return (False, cls.current_version) 386 return (False, current_version)
392 elif ver > min_ver: 387 elif ver > min_ver:
393 return (True, cls.current_version) 388 return (True, current_version)
394 return (True, cls.current_version) 389 return (True, current_version)
395 390
396 391
397 class SVN(object): 392 class SVN(object):
398 current_version = None 393 current_version = None
399 394
400 @staticmethod 395 @staticmethod
401 def Capture(args, **kwargs): 396 def Capture(args, **kwargs):
402 """Always redirect stderr. 397 """Always redirect stderr.
403 398
404 Throws an exception if non-0 is returned. 399 Throws an exception if non-0 is returned.
(...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after
921 info = SVN.CaptureInfo(parent) 916 info = SVN.CaptureInfo(parent)
922 if (info['Repository Root'] != cur_dir_repo_root or 917 if (info['Repository Root'] != cur_dir_repo_root or
923 info['URL'] != os.path.dirname(url)): 918 info['URL'] != os.path.dirname(url)):
924 break 919 break
925 url = info['URL'] 920 url = info['URL']
926 except subprocess2.CalledProcessError: 921 except subprocess2.CalledProcessError:
927 break 922 break
928 directory = parent 923 directory = parent
929 return GetCasedPath(directory) 924 return GetCasedPath(directory)
930 925
931 @classmethod 926 @staticmethod
932 def AssertVersion(cls, min_version): 927 def AssertVersion(min_version):
933 """Asserts svn's version is at least min_version.""" 928 """Asserts svn's version is at least min_version."""
934 if cls.current_version is None: 929 def only_int(val):
935 cls.current_version = cls.Capture(['--version']).split()[2] 930 if val.isdigit():
936 current_version_list = map(only_int, cls.current_version.split('.')) 931 return int(val)
932 else:
933 return 0
934 if not SVN.current_version:
935 SVN.current_version = SVN.Capture(['--version']).split()[2]
936 current_version_list = map(only_int, SVN.current_version.split('.'))
937 for min_ver in map(int, min_version.split('.')): 937 for min_ver in map(int, min_version.split('.')):
938 ver = current_version_list.pop(0) 938 ver = current_version_list.pop(0)
939 if ver < min_ver: 939 if ver < min_ver:
940 return (False, cls.current_version) 940 return (False, SVN.current_version)
941 elif ver > min_ver: 941 elif ver > min_ver:
942 return (True, cls.current_version) 942 return (True, SVN.current_version)
943 return (True, cls.current_version) 943 return (True, SVN.current_version)
944 944
945 @staticmethod 945 @staticmethod
946 def Revert(repo_root, callback=None, ignore_externals=False): 946 def Revert(repo_root, callback=None, ignore_externals=False):
947 """Reverts all svn modifications in repo_root, including properties. 947 """Reverts all svn modifications in repo_root, including properties.
948 948
949 Deletes any modified files or directory. 949 Deletes any modified files or directory.
950 950
951 A "svn update --revision BASE" call is required after to revive deleted 951 A "svn update --revision BASE" call is required after to revive deleted
952 files. 952 files.
953 """ 953 """
(...skipping 29 matching lines...) Expand all
983 if (file_status[0][0] in ('D', 'A', '!') or 983 if (file_status[0][0] in ('D', 'A', '!') or
984 not file_status[0][1:].isspace()): 984 not file_status[0][1:].isspace()):
985 # Added, deleted file requires manual intervention and require calling 985 # Added, deleted file requires manual intervention and require calling
986 # revert, like for properties. 986 # revert, like for properties.
987 try: 987 try:
988 SVN.Capture(['revert', file_status[1]], cwd=repo_root) 988 SVN.Capture(['revert', file_status[1]], cwd=repo_root)
989 except subprocess2.CalledProcessError: 989 except subprocess2.CalledProcessError:
990 if not os.path.exists(file_path): 990 if not os.path.exists(file_path):
991 continue 991 continue
992 raise 992 raise
OLDNEW
« no previous file with comments | « gclient_scm.py ('k') | tests/gclient_scm_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698