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

Side by Side Diff: tests/gclient_scm_test.py

Issue 8227033: Make revert more resilient to partial sync failure. (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') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2011 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 """Unit tests for gclient_scm.py.""" 6 """Unit tests for gclient_scm.py."""
7 7
8 # pylint: disable=E1101,E1103,W0403 8 # pylint: disable=E1101,E1103,W0403
9 9
10 # Import before super_mox to keep valid references. 10 # Import before super_mox to keep valid references.
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 gclient_scm.scm.SVN.current_version = None 58 gclient_scm.scm.SVN.current_version = None
59 # Absolute path of the fake checkout directory. 59 # Absolute path of the fake checkout directory.
60 self.base_path = join(self.root_dir, self.relpath) 60 self.base_path = join(self.root_dir, self.relpath)
61 61
62 def tearDown(self): 62 def tearDown(self):
63 SuperMoxTestBase.tearDown(self) 63 SuperMoxTestBase.tearDown(self)
64 64
65 65
66 class SVNWrapperTestCase(BaseTestCase): 66 class SVNWrapperTestCase(BaseTestCase):
67 class OptionsObject(object): 67 class OptionsObject(object):
68 def __init__(self, verbose=False, revision=None): 68 def __init__(self, verbose=False, revision=None, force=False):
69 self.verbose = verbose 69 self.verbose = verbose
70 self.revision = revision 70 self.revision = revision
71 self.manually_grab_svn_rev = True 71 self.manually_grab_svn_rev = True
72 self.deps_os = None 72 self.deps_os = None
73 self.force = False 73 self.force = force
74 self.reset = False 74 self.reset = False
75 self.nohooks = False 75 self.nohooks = False
76 76
77 def Options(self, *args, **kwargs): 77 def Options(self, *args, **kwargs):
78 return self.OptionsObject(*args, **kwargs) 78 return self.OptionsObject(*args, **kwargs)
79 79
80 def setUp(self): 80 def setUp(self):
81 BaseTestCase.setUp(self) 81 BaseTestCase.setUp(self)
82 self.url = self.SvnUrl() 82 self.url = self.SvnUrl()
83 83
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 self.assertRaisesError(exception, scm.RunCommand, 125 self.assertRaisesError(exception, scm.RunCommand,
126 'update', options, self.args) 126 'update', options, self.args)
127 127
128 def testRunCommandUnknown(self): 128 def testRunCommandUnknown(self):
129 # TODO(maruel): if ever used. 129 # TODO(maruel): if ever used.
130 pass 130 pass
131 131
132 def testRevertMissing(self): 132 def testRevertMissing(self):
133 options = self.Options(verbose=True) 133 options = self.Options(verbose=True)
134 gclient_scm.os.path.isdir(self.base_path).AndReturn(False) 134 gclient_scm.os.path.isdir(self.base_path).AndReturn(False)
135 gclient_scm.os.path.exists(self.base_path).AndReturn(False)
135 gclient_scm.scm.SVN.Capture(['--version'] 136 gclient_scm.scm.SVN.Capture(['--version']
136 ).AndReturn('svn, version 1.5.1 (r32289)') 137 ).AndReturn('svn, version 1.5.1 (r32289)')
137 # It'll to a checkout instead. 138 # It'll to a checkout instead.
138 gclient_scm.os.path.exists(join(self.base_path, '.git')).AndReturn(False) 139 gclient_scm.os.path.exists(join(self.base_path, '.git')).AndReturn(False)
139 gclient_scm.os.path.exists(join(self.base_path, '.hg')).AndReturn(False) 140 gclient_scm.os.path.exists(join(self.base_path, '.hg')).AndReturn(False)
140 # Checkout. 141 # Checkout.
141 gclient_scm.os.path.exists(self.base_path).AndReturn(False) 142 gclient_scm.os.path.exists(self.base_path).AndReturn(False)
142 files_list = self.mox.CreateMockAnything() 143 files_list = self.mox.CreateMockAnything()
143 gclient_scm.scm.SVN.RunAndGetFileList( 144 gclient_scm.scm.SVN.RunAndGetFileList(
144 options.verbose, 145 options.verbose,
145 ['checkout', self.url, self.base_path, '--force', '--ignore-externals'], 146 ['checkout', self.url, self.base_path, '--force', '--ignore-externals'],
146 cwd=self.root_dir, 147 cwd=self.root_dir,
147 file_list=files_list) 148 file_list=files_list)
148 149
149 self.mox.ReplayAll() 150 self.mox.ReplayAll()
150 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, 151 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
151 relpath=self.relpath) 152 relpath=self.relpath)
152 scm.revert(options, self.args, files_list) 153 scm.revert(options, self.args, files_list)
153 self.checkstdout( 154 self.checkstdout(
154 ('\n_____ %s is missing, synching instead\n' % self.relpath)) 155 ('\n_____ %s is missing, synching instead\n' % self.relpath))
155 156
157 def testRevertNoDotSvn(self):
158 options = self.Options(verbose=True, force=True)
159 gclient_scm.os.path.isdir(self.base_path).AndReturn(True)
160 gclient_scm.os.path.isdir(join(self.base_path, '.svn')).AndReturn(False)
161 gclient_scm.os.path.isdir(join(self.base_path, '.git')).AndReturn(False)
162 gclient_scm.os.path.isdir(join(self.base_path, '.hg')).AndReturn(False)
163 # Checkout.
164 gclient_scm.os.path.exists(self.base_path).AndReturn(False)
165 gclient_scm.os.path.exists(join(self.base_path, '.git')).AndReturn(False)
166 gclient_scm.os.path.exists(join(self.base_path, '.hg')).AndReturn(False)
167 gclient_scm.os.path.exists(self.base_path).AndReturn(False)
168 files_list = self.mox.CreateMockAnything()
169 gclient_scm.scm.SVN.Capture(['--version']).AndReturn('svn, version 1.6')
170 gclient_scm.scm.SVN.RunAndGetFileList(
171 options.verbose,
172 ['checkout', self.url, self.base_path, '--force', '--ignore-externals'],
173 cwd=self.root_dir,
174 file_list=files_list)
175
176 self.mox.ReplayAll()
177 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
178 relpath=self.relpath)
179 scm.revert(options, self.args, files_list)
180 self.checkstdout(
181 '\n_____ %s is not a valid svn checkout, synching instead\n' %
182 self.relpath)
183
156 def testRevertNone(self): 184 def testRevertNone(self):
157 options = self.Options(verbose=True) 185 options = self.Options(verbose=True)
158 gclient_scm.os.path.isdir(self.base_path).AndReturn(True) 186 gclient_scm.os.path.isdir(self.base_path).AndReturn(True)
187 gclient_scm.os.path.isdir(join(self.base_path, '.svn')).AndReturn(True)
159 gclient_scm.scm.SVN.CaptureStatus(self.base_path).AndReturn([]) 188 gclient_scm.scm.SVN.CaptureStatus(self.base_path).AndReturn([])
160 gclient_scm.scm.SVN.RunAndGetFileList( 189 gclient_scm.scm.SVN.RunAndGetFileList(
161 options.verbose, 190 options.verbose,
162 ['update', '--revision', 'BASE', '--ignore-externals'], 191 ['update', '--revision', 'BASE', '--ignore-externals'],
163 cwd=self.base_path, 192 cwd=self.base_path,
164 file_list=mox.IgnoreArg()) 193 file_list=mox.IgnoreArg())
165 194
166 self.mox.ReplayAll() 195 self.mox.ReplayAll()
167 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, 196 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
168 relpath=self.relpath) 197 relpath=self.relpath)
169 file_list = [] 198 file_list = []
170 scm.revert(options, self.args, file_list) 199 scm.revert(options, self.args, file_list)
171 200
172 def testRevertDirectory(self): 201 def testRevertDirectory(self):
173 options = self.Options(verbose=True) 202 options = self.Options(verbose=True)
174 gclient_scm.os.path.isdir(self.base_path).AndReturn(True) 203 gclient_scm.os.path.isdir(self.base_path).AndReturn(True)
204 gclient_scm.os.path.isdir(join(self.base_path, '.svn')).AndReturn(True)
175 items = [ 205 items = [
176 ('~ ', 'a'), 206 ('~ ', 'a'),
177 ] 207 ]
178 gclient_scm.scm.SVN.CaptureStatus(self.base_path).AndReturn(items) 208 gclient_scm.scm.SVN.CaptureStatus(self.base_path).AndReturn(items)
179 file_path = join(self.base_path, 'a') 209 file_path = join(self.base_path, 'a')
180 gclient_scm.os.path.exists(file_path).AndReturn(True) 210 gclient_scm.os.path.exists(file_path).AndReturn(True)
181 gclient_scm.os.path.isfile(file_path).AndReturn(False) 211 gclient_scm.os.path.isfile(file_path).AndReturn(False)
182 gclient_scm.os.path.islink(file_path).AndReturn(False) 212 gclient_scm.os.path.islink(file_path).AndReturn(False)
183 gclient_scm.os.path.isdir(file_path).AndReturn(True) 213 gclient_scm.os.path.isdir(file_path).AndReturn(True)
184 gclient_scm.gclient_utils.RemoveDirectory(file_path) 214 gclient_scm.gclient_utils.RemoveDirectory(file_path)
(...skipping 704 matching lines...) Expand 10 before | Expand all | Expand 10 after
889 919
890 if __name__ == '__main__': 920 if __name__ == '__main__':
891 if '-v' in sys.argv: 921 if '-v' in sys.argv:
892 logging.basicConfig( 922 logging.basicConfig(
893 level=logging.DEBUG, 923 level=logging.DEBUG,
894 format='%(asctime).19s %(levelname)s %(filename)s:' 924 format='%(asctime).19s %(levelname)s %(filename)s:'
895 '%(lineno)s %(message)s') 925 '%(lineno)s %(message)s')
896 unittest.main() 926 unittest.main()
897 927
898 # vim: ts=2:sw=2:tw=80:et: 928 # vim: ts=2:sw=2:tw=80:et:
OLDNEW
« no previous file with comments | « gclient_scm.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698