| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # | 2 # |
| 3 # Copyright 2008-2009 Google Inc. All Rights Reserved. | 3 # Copyright 2008-2009 Google Inc. All Rights Reserved. |
| 4 # | 4 # |
| 5 # Licensed under the Apache License, Version 2.0 (the "License"); | 5 # Licensed under the Apache License, Version 2.0 (the "License"); |
| 6 # you may not use this file except in compliance with the License. | 6 # you may not use this file except in compliance with the License. |
| 7 # You may obtain a copy of the License at | 7 # You may obtain a copy of the License at |
| 8 # | 8 # |
| 9 # http://www.apache.org/licenses/LICENSE-2.0 | 9 # http://www.apache.org/licenses/LICENSE-2.0 |
| 10 # | 10 # |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 self._RunSVN = gclient.RunSVN | 114 self._RunSVN = gclient.RunSVN |
| 115 gclient.RunSVN = self.mox.CreateMockAnything() | 115 gclient.RunSVN = self.mox.CreateMockAnything() |
| 116 self._RunSVNAndGetFileList = gclient.RunSVNAndGetFileList | 116 self._RunSVNAndGetFileList = gclient.RunSVNAndGetFileList |
| 117 gclient.RunSVNAndGetFileList = self.mox.CreateMockAnything() | 117 gclient.RunSVNAndGetFileList = self.mox.CreateMockAnything() |
| 118 self._sys_stdout = gclient.sys.stdout | 118 self._sys_stdout = gclient.sys.stdout |
| 119 gclient.sys.stdout = self.mox.CreateMock(self._sys_stdout) | 119 gclient.sys.stdout = self.mox.CreateMock(self._sys_stdout) |
| 120 self._subprocess = gclient.subprocess | 120 self._subprocess = gclient.subprocess |
| 121 gclient.subprocess = self.mox.CreateMock(self._subprocess) | 121 gclient.subprocess = self.mox.CreateMock(self._subprocess) |
| 122 self._os_path_exists = gclient.os.path.exists | 122 self._os_path_exists = gclient.os.path.exists |
| 123 gclient.os.path.exists = self.mox.CreateMockAnything() | 123 gclient.os.path.exists = self.mox.CreateMockAnything() |
| 124 self._gclient_gclient = gclient.GClient |
| 125 gclient.GClient = self.mox.CreateMockAnything() |
| 126 self._scm_wrapper = gclient.SCMWrapper |
| 127 gclient.SCMWrapper = self.mox.CreateMockAnything() |
| 124 | 128 |
| 125 def tearDown(self): | 129 def tearDown(self): |
| 126 gclient.CaptureSVN = self._CaptureSVN | 130 gclient.CaptureSVN = self._CaptureSVN |
| 127 gclient.CaptureSVNInfo = self._CaptureSVNInfo | 131 gclient.CaptureSVNInfo = self._CaptureSVNInfo |
| 128 gclient.CaptureSVNStatus = self._CaptureSVNStatus | 132 gclient.CaptureSVNStatus = self._CaptureSVNStatus |
| 129 gclient.FileRead = self._FileRead | 133 gclient.FileRead = self._FileRead |
| 130 gclient.FileWrite = self._FileWrite | 134 gclient.FileWrite = self._FileWrite |
| 131 gclient.RemoveDirectory = self._RemoveDirectory | 135 gclient.RemoveDirectory = self._RemoveDirectory |
| 132 gclient.RunSVN = self._RunSVN | 136 gclient.RunSVN = self._RunSVN |
| 133 gclient.RunSVNAndGetFileList = self._RunSVNAndGetFileList | 137 gclient.RunSVNAndGetFileList = self._RunSVNAndGetFileList |
| 134 gclient.sys.stdout = self._sys_stdout | 138 gclient.sys.stdout = self._sys_stdout |
| 135 gclient.subprocess = self._subprocess | 139 gclient.subprocess = self._subprocess |
| 136 gclient.os.path.exists = self._os_path_exists | 140 gclient.os.path.exists = self._os_path_exists |
| 141 gclient.GClient = self._gclient_gclient |
| 142 gclient.SCMWrapper = self._scm_wrapper |
| 137 | 143 |
| 138 | 144 |
| 139 class GclientTestCase(GClientBaseTestCase): | 145 class GclientTestCase(GClientBaseTestCase): |
| 140 class OptionsObject(object): | 146 class OptionsObject(object): |
| 141 def __init__(self, test_case, verbose=False, spec=None, | 147 def __init__(self, test_case, verbose=False, spec=None, |
| 142 config_filename='a_file_name', | 148 config_filename='a_file_name', |
| 143 entries_filename='a_entry_file_name', | 149 entries_filename='a_entry_file_name', |
| 144 deps_file='a_deps_file_name', force=False): | 150 deps_file='a_deps_file_name', force=False): |
| 145 self.verbose = verbose | 151 self.verbose = verbose |
| 146 self.spec = spec | 152 self.spec = spec |
| 147 self.config_filename = config_filename | 153 self.config_filename = config_filename |
| 148 self.entries_filename = entries_filename | 154 self.entries_filename = entries_filename |
| 149 self.deps_file = deps_file | 155 self.deps_file = deps_file |
| 150 self.force = force | 156 self.force = force |
| 151 self.revisions = [] | 157 self.revisions = [] |
| 152 self.manually_grab_svn_rev = True | 158 self.manually_grab_svn_rev = True |
| 153 self.deps_os = None | 159 self.deps_os = None |
| 154 self.head = False | 160 self.head = False |
| 155 | 161 |
| 156 # Mox | 162 # Mox |
| 157 self.platform = test_case.platform | 163 self.platform = test_case.platform |
| 158 self.gclient = test_case.gclient | |
| 159 self.scm_wrapper = test_case.scm_wrapper | |
| 160 | 164 |
| 161 def setUp(self): | 165 def setUp(self): |
| 162 GClientBaseTestCase.setUp(self) | 166 GClientBaseTestCase.setUp(self) |
| 163 self.platform = 'darwin' | 167 self.platform = 'darwin' |
| 164 | 168 |
| 165 self.gclient = self.mox.CreateMock(gclient.GClient) | |
| 166 self.scm_wrapper = self.mox.CreateMock(gclient.SCMWrapper) | |
| 167 | |
| 168 self.args = Args() | 169 self.args = Args() |
| 169 self.root_dir = Dir() | 170 self.root_dir = Dir() |
| 170 self.url = Url() | 171 self.url = Url() |
| 171 | 172 |
| 172 | 173 |
| 173 class GClientCommandsTestCase(GClientBaseTestCase): | 174 class GClientCommandsTestCase(GClientBaseTestCase): |
| 174 def testCommands(self): | 175 def testCommands(self): |
| 175 known_commands = [gclient.DoCleanup, gclient.DoConfig, gclient.DoDiff, | 176 known_commands = [gclient.DoCleanup, gclient.DoConfig, gclient.DoDiff, |
| 176 gclient.DoHelp, gclient.DoStatus, gclient.DoUpdate, | 177 gclient.DoHelp, gclient.DoStatus, gclient.DoUpdate, |
| 177 gclient.DoRevert, gclient.DoRunHooks, gclient.DoRevInfo] | 178 gclient.DoRevert, gclient.DoRunHooks, gclient.DoRevInfo] |
| 178 for (k,v) in gclient.gclient_command_map.iteritems(): | 179 for (k,v) in gclient.gclient_command_map.iteritems(): |
| 179 # If it fails, you need to add a test case for the new command. | 180 # If it fails, you need to add a test case for the new command. |
| 180 self.assert_(v in known_commands) | 181 self.assert_(v in known_commands) |
| 181 self.mox.ReplayAll() | 182 self.mox.ReplayAll() |
| 182 self.mox.VerifyAll() | 183 self.mox.VerifyAll() |
| 183 | 184 |
| 184 class TestDoConfig(GclientTestCase): | 185 class TestDoConfig(GclientTestCase): |
| 185 def setUp(self): | 186 def setUp(self): |
| 186 GclientTestCase.setUp(self) | 187 GclientTestCase.setUp(self) |
| 187 # pymox has trouble to mock the class object and not a class instance. | |
| 188 self.gclient = self.mox.CreateMockAnything() | |
| 189 | 188 |
| 190 def testMissingArgument(self): | 189 def testMissingArgument(self): |
| 191 exception_msg = "required argument missing; see 'gclient help config'" | 190 exception_msg = "required argument missing; see 'gclient help config'" |
| 192 | 191 |
| 193 self.mox.ReplayAll() | 192 self.mox.ReplayAll() |
| 194 self.assertRaisesError(exception_msg, gclient.DoConfig, self.Options(), ()) | 193 self.assertRaisesError(exception_msg, gclient.DoConfig, self.Options(), ()) |
| 195 self.mox.VerifyAll() | 194 self.mox.VerifyAll() |
| 196 | 195 |
| 197 def testExistingClientFile(self): | 196 def testExistingClientFile(self): |
| 198 options = self.Options() | 197 options = self.Options() |
| 199 exception_msg = ('%s file already exists in the current directory' % | 198 exception_msg = ('%s file already exists in the current directory' % |
| 200 options.config_filename) | 199 options.config_filename) |
| 201 gclient.os.path.exists(options.config_filename).AndReturn(True) | 200 gclient.os.path.exists(options.config_filename).AndReturn(True) |
| 202 | 201 |
| 203 self.mox.ReplayAll() | 202 self.mox.ReplayAll() |
| 204 self.assertRaisesError(exception_msg, gclient.DoConfig, options, (1,)) | 203 self.assertRaisesError(exception_msg, gclient.DoConfig, options, (1,)) |
| 205 self.mox.VerifyAll() | 204 self.mox.VerifyAll() |
| 206 | 205 |
| 207 def testFromText(self): | 206 def testFromText(self): |
| 208 options = self.Options(spec='config_source_content') | 207 options = self.Options(spec='config_source_content') |
| 209 gclient.os.path.exists(options.config_filename).AndReturn(False) | 208 gclient.os.path.exists(options.config_filename).AndReturn(False) |
| 210 options.gclient('.', options).AndReturn(options.gclient) | 209 gclient.GClient('.', options).AndReturn(gclient.GClient) |
| 211 options.gclient.SetConfig(options.spec) | 210 gclient.GClient.SetConfig(options.spec) |
| 212 options.gclient.SaveConfig() | 211 gclient.GClient.SaveConfig() |
| 213 | 212 |
| 214 self.mox.ReplayAll() | 213 self.mox.ReplayAll() |
| 215 gclient.DoConfig(options, (1,),) | 214 gclient.DoConfig(options, (1,),) |
| 216 self.mox.VerifyAll() | 215 self.mox.VerifyAll() |
| 217 | 216 |
| 218 def testCreateClientFile(self): | 217 def testCreateClientFile(self): |
| 219 options = self.Options() | 218 options = self.Options() |
| 220 gclient.os.path.exists(options.config_filename).AndReturn(False) | 219 gclient.os.path.exists(options.config_filename).AndReturn(False) |
| 221 options.gclient('.', options).AndReturn(options.gclient) | 220 gclient.GClient('.', options).AndReturn(gclient.GClient) |
| 222 options.gclient.SetDefaultConfig('the_name', 'http://svn/url/the_name', | 221 gclient.GClient.SetDefaultConfig('the_name', 'http://svn/url/the_name', |
| 223 'other') | 222 'other') |
| 224 options.gclient.SaveConfig() | 223 gclient.GClient.SaveConfig() |
| 225 | 224 |
| 226 self.mox.ReplayAll() | 225 self.mox.ReplayAll() |
| 227 gclient.DoConfig(options, | 226 gclient.DoConfig(options, |
| 228 ('http://svn/url/the_name', 'other', 'args', 'ignored')) | 227 ('http://svn/url/the_name', 'other', 'args', 'ignored')) |
| 229 self.mox.VerifyAll() | 228 self.mox.VerifyAll() |
| 230 | 229 |
| 231 | 230 |
| 232 class TestDoHelp(GclientTestCase): | 231 class TestDoHelp(GclientTestCase): |
| 233 def testGetUsage(self): | 232 def testGetUsage(self): |
| 234 print(gclient.COMMAND_USAGE_TEXT['config']) | 233 print(gclient.COMMAND_USAGE_TEXT['config']) |
| (...skipping 14 matching lines...) Expand all Loading... |
| 249 self.mox.ReplayAll() | 248 self.mox.ReplayAll() |
| 250 options = self.Options() | 249 options = self.Options() |
| 251 self.assertRaisesError("unknown subcommand 'xyzzy'; see 'gclient help'", | 250 self.assertRaisesError("unknown subcommand 'xyzzy'; see 'gclient help'", |
| 252 gclient.DoHelp, options, ('xyzzy',)) | 251 gclient.DoHelp, options, ('xyzzy',)) |
| 253 self.mox.VerifyAll() | 252 self.mox.VerifyAll() |
| 254 | 253 |
| 255 | 254 |
| 256 class GenericCommandTestCase(GclientTestCase): | 255 class GenericCommandTestCase(GclientTestCase): |
| 257 def ReturnValue(self, command, function, return_value): | 256 def ReturnValue(self, command, function, return_value): |
| 258 options = self.Options() | 257 options = self.Options() |
| 259 self.gclient.LoadCurrentConfig(options).AndReturn(self.gclient) | 258 gclient.GClient.LoadCurrentConfig(options).AndReturn(gclient.GClient) |
| 260 self.gclient.RunOnDeps(command, self.args).AndReturn(return_value) | 259 gclient.GClient.RunOnDeps(command, self.args).AndReturn(return_value) |
| 261 | 260 |
| 262 self.mox.ReplayAll() | 261 self.mox.ReplayAll() |
| 263 result = function(options, self.args) | 262 result = function(options, self.args) |
| 264 self.assertEquals(result, return_value) | 263 self.assertEquals(result, return_value) |
| 265 self.mox.VerifyAll() | 264 self.mox.VerifyAll() |
| 266 | 265 |
| 267 def BadClient(self, function): | 266 def BadClient(self, function): |
| 268 options = self.Options() | 267 options = self.Options() |
| 269 self.gclient.LoadCurrentConfig(options).AndReturn(None) | 268 gclient.GClient.LoadCurrentConfig(options).AndReturn(None) |
| 270 | 269 |
| 271 self.mox.ReplayAll() | 270 self.mox.ReplayAll() |
| 272 self.assertRaisesError( | 271 self.assertRaisesError( |
| 273 "client not configured; see 'gclient config'", | 272 "client not configured; see 'gclient config'", |
| 274 function, options, self.args) | 273 function, options, self.args) |
| 275 self.mox.VerifyAll() | 274 self.mox.VerifyAll() |
| 276 | 275 |
| 277 def Verbose(self, command, function): | 276 def Verbose(self, command, function): |
| 278 options = self.Options(verbose=True) | 277 options = self.Options(verbose=True) |
| 279 self.gclient.LoadCurrentConfig(options).AndReturn(self.gclient) | 278 gclient.GClient.LoadCurrentConfig(options).AndReturn(gclient.GClient) |
| 280 text = "# Dummy content\nclient = 'my client'" | 279 text = "# Dummy content\nclient = 'my client'" |
| 281 self.gclient.ConfigContent().AndReturn(text) | 280 gclient.GClient.ConfigContent().AndReturn(text) |
| 282 print(text) | 281 print(text) |
| 283 self.gclient.RunOnDeps(command, self.args).AndReturn(0) | 282 gclient.GClient.RunOnDeps(command, self.args).AndReturn(0) |
| 284 | 283 |
| 285 self.mox.ReplayAll() | 284 self.mox.ReplayAll() |
| 286 result = function(options, self.args) | 285 result = function(options, self.args) |
| 287 self.assertEquals(result, 0) | 286 self.assertEquals(result, 0) |
| 288 self.mox.VerifyAll() | 287 self.mox.VerifyAll() |
| 289 | 288 |
| 290 class TestDoCleanup(GenericCommandTestCase): | 289 class TestDoCleanup(GenericCommandTestCase): |
| 291 def testGoodClient(self): | 290 def testGoodClient(self): |
| 292 self.ReturnValue('cleanup', gclient.DoCleanup, 0) | 291 self.ReturnValue('cleanup', gclient.DoCleanup, 0) |
| 293 def testError(self): | 292 def testError(self): |
| (...skipping 21 matching lines...) Expand all Loading... |
| 315 def testBadClient(self): | 314 def testBadClient(self): |
| 316 self.BadClient(gclient.DoRunHooks) | 315 self.BadClient(gclient.DoRunHooks) |
| 317 | 316 |
| 318 | 317 |
| 319 class TestDoUpdate(GenericCommandTestCase): | 318 class TestDoUpdate(GenericCommandTestCase): |
| 320 def Options(self, verbose=False, *args, **kwargs): | 319 def Options(self, verbose=False, *args, **kwargs): |
| 321 return self.OptionsObject(self, verbose=verbose, *args, **kwargs) | 320 return self.OptionsObject(self, verbose=verbose, *args, **kwargs) |
| 322 | 321 |
| 323 def ReturnValue(self, command, function, return_value): | 322 def ReturnValue(self, command, function, return_value): |
| 324 options = self.Options() | 323 options = self.Options() |
| 325 self.gclient.LoadCurrentConfig(options).AndReturn(self.gclient) | 324 gclient.GClient.LoadCurrentConfig(options).AndReturn(gclient.GClient) |
| 326 self.gclient.GetVar("solutions") | 325 gclient.GClient.GetVar("solutions") |
| 327 self.gclient.RunOnDeps(command, self.args).AndReturn(return_value) | 326 gclient.GClient.RunOnDeps(command, self.args).AndReturn(return_value) |
| 328 | 327 |
| 329 self.mox.ReplayAll() | 328 self.mox.ReplayAll() |
| 330 result = function(options, self.args) | 329 result = function(options, self.args) |
| 331 self.assertEquals(result, return_value) | 330 self.assertEquals(result, return_value) |
| 332 self.mox.VerifyAll() | 331 self.mox.VerifyAll() |
| 333 | 332 |
| 334 def Verbose(self, command, function): | 333 def Verbose(self, command, function): |
| 335 options = self.Options(verbose=True) | 334 options = self.Options(verbose=True) |
| 336 self.gclient.LoadCurrentConfig(options).AndReturn(self.gclient) | 335 gclient.GClient.LoadCurrentConfig(options).AndReturn(gclient.GClient) |
| 337 self.gclient.GetVar("solutions") | 336 gclient.GClient.GetVar("solutions") |
| 338 text = "# Dummy content\nclient = 'my client'" | 337 text = "# Dummy content\nclient = 'my client'" |
| 339 self.gclient.ConfigContent().AndReturn(text) | 338 gclient.GClient.ConfigContent().AndReturn(text) |
| 340 print(text) | 339 print(text) |
| 341 self.gclient.RunOnDeps(command, self.args).AndReturn(0) | 340 gclient.GClient.RunOnDeps(command, self.args).AndReturn(0) |
| 342 | 341 |
| 343 self.mox.ReplayAll() | 342 self.mox.ReplayAll() |
| 344 result = function(options, self.args) | 343 result = function(options, self.args) |
| 345 self.assertEquals(result, 0) | 344 self.assertEquals(result, 0) |
| 346 self.mox.VerifyAll() | 345 self.mox.VerifyAll() |
| 347 | 346 |
| 348 def Options(self, verbose=False, *args, **kwargs): | 347 def Options(self, verbose=False, *args, **kwargs): |
| 349 return self.OptionsObject(self, verbose=verbose, *args, **kwargs) | 348 return self.OptionsObject(self, verbose=verbose, *args, **kwargs) |
| 350 | 349 |
| 351 def testBasic(self): | 350 def testBasic(self): |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 | 382 |
| 384 class GClientClassTestCase(GclientTestCase): | 383 class GClientClassTestCase(GclientTestCase): |
| 385 def testDir(self): | 384 def testDir(self): |
| 386 members = [ | 385 members = [ |
| 387 'ConfigContent', 'FromImpl', 'GetVar', 'LoadCurrentConfig', | 386 'ConfigContent', 'FromImpl', 'GetVar', 'LoadCurrentConfig', |
| 388 'RunOnDeps', 'SaveConfig', 'SetConfig', 'SetDefaultConfig', | 387 'RunOnDeps', 'SaveConfig', 'SetConfig', 'SetDefaultConfig', |
| 389 'supported_commands', 'PrintRevInfo', | 388 'supported_commands', 'PrintRevInfo', |
| 390 ] | 389 ] |
| 391 | 390 |
| 392 # If you add a member, be sure to add the relevant test! | 391 # If you add a member, be sure to add the relevant test! |
| 393 self.compareMembers(gclient.GClient('root_dir', 'options'), members) | 392 self.compareMembers(self._gclient_gclient('root_dir', 'options'), members) |
| 394 | 393 |
| 395 def testSetConfig_ConfigContent_GetVar_SaveConfig_SetDefaultConfig(self): | 394 def testSetConfig_ConfigContent_GetVar_SaveConfig_SetDefaultConfig(self): |
| 396 options = self.Options() | 395 options = self.Options() |
| 397 text = "# Dummy content\nclient = 'my client'" | 396 text = "# Dummy content\nclient = 'my client'" |
| 398 gclient.FileWrite(os.path.join(self.root_dir, options.config_filename), | 397 gclient.FileWrite(os.path.join(self.root_dir, options.config_filename), |
| 399 text) | 398 text) |
| 400 | 399 |
| 401 self.mox.ReplayAll() | 400 self.mox.ReplayAll() |
| 402 client = gclient.GClient(self.root_dir, options) | 401 client = self._gclient_gclient(self.root_dir, options) |
| 403 client.SetConfig(text) | 402 client.SetConfig(text) |
| 404 self.assertEqual(client.ConfigContent(), text) | 403 self.assertEqual(client.ConfigContent(), text) |
| 405 self.assertEqual(client.GetVar('client'), 'my client') | 404 self.assertEqual(client.GetVar('client'), 'my client') |
| 406 self.assertEqual(client.GetVar('foo'), None) | 405 self.assertEqual(client.GetVar('foo'), None) |
| 407 client.SaveConfig() | 406 client.SaveConfig() |
| 408 | 407 |
| 409 solution_name = 'solution name' | 408 solution_name = 'solution name' |
| 410 solution_url = 'solution url' | 409 solution_url = 'solution url' |
| 411 safesync_url = 'safesync url' | 410 safesync_url = 'safesync url' |
| 412 default_text = gclient.DEFAULT_CLIENT_FILE_TEXT % (solution_name, | 411 default_text = gclient.DEFAULT_CLIENT_FILE_TEXT % (solution_name, |
| 413 solution_url, | 412 solution_url, |
| 414 safesync_url) | 413 safesync_url) |
| 415 client.SetDefaultConfig(solution_name, solution_url, safesync_url) | 414 client.SetDefaultConfig(solution_name, solution_url, safesync_url) |
| 416 self.assertEqual(client.ConfigContent(), default_text) | 415 self.assertEqual(client.ConfigContent(), default_text) |
| 417 solutions = [{ | 416 solutions = [{ |
| 418 'name': solution_name, | 417 'name': solution_name, |
| 419 'url': solution_url, | 418 'url': solution_url, |
| 420 'custom_deps': {}, | 419 'custom_deps': {}, |
| 421 'safesync_url': safesync_url | 420 'safesync_url': safesync_url |
| 422 }] | 421 }] |
| 423 self.assertEqual(client.GetVar('solutions'), solutions) | 422 self.assertEqual(client.GetVar('solutions'), solutions) |
| 424 self.assertEqual(client.GetVar('foo'), None) | 423 self.assertEqual(client.GetVar('foo'), None) |
| 425 self.mox.VerifyAll() | 424 self.mox.VerifyAll() |
| 426 | 425 |
| 427 def testLoadCurrentConfig(self): | 426 def testLoadCurrentConfig(self): |
| 428 # pymox has trouble to mock the class object and not a class instance. | |
| 429 self.gclient = self.mox.CreateMockAnything() | |
| 430 options = self.Options() | 427 options = self.Options() |
| 431 path = os.path.realpath(self.root_dir) | 428 path = os.path.realpath(self.root_dir) |
| 432 gclient.os.path.exists(os.path.join(path, options.config_filename) | 429 gclient.os.path.exists(os.path.join(path, options.config_filename) |
| 433 ).AndReturn(True) | 430 ).AndReturn(True) |
| 434 options.gclient(path, options).AndReturn(options.gclient) | 431 gclient.GClient(path, options).AndReturn(gclient.GClient) |
| 435 options.gclient._LoadConfig() | 432 gclient.GClient._LoadConfig() |
| 436 | 433 |
| 437 self.mox.ReplayAll() | 434 self.mox.ReplayAll() |
| 438 client = gclient.GClient.LoadCurrentConfig(options, self.root_dir) | 435 client = self._gclient_gclient.LoadCurrentConfig(options, self.root_dir) |
| 439 self.mox.VerifyAll() | 436 self.mox.VerifyAll() |
| 440 | 437 |
| 441 def testRunOnDepsNoDeps(self): | 438 def testRunOnDepsNoDeps(self): |
| 442 solution_name = 'testRunOnDepsNoDeps_solution_name' | 439 solution_name = 'testRunOnDepsNoDeps_solution_name' |
| 443 gclient_config = ( | 440 gclient_config = ( |
| 444 "solutions = [ {\n" | 441 "solutions = [ {\n" |
| 445 " 'name': '%s',\n" | 442 " 'name': '%s',\n" |
| 446 " 'url': '%s',\n" | 443 " 'url': '%s',\n" |
| 447 " 'custom_deps': {},\n" | 444 " 'custom_deps': {},\n" |
| 448 "} ]\n" | 445 "} ]\n" |
| 449 ) % (solution_name, self.url) | 446 ) % (solution_name, self.url) |
| 450 | 447 |
| 451 entries_content = ( | 448 entries_content = ( |
| 452 'entries = [\n' | 449 'entries = [\n' |
| 453 ' "%s",\n' | 450 ' "%s",\n' |
| 454 ']\n' | 451 ']\n' |
| 455 ) % solution_name | 452 ) % solution_name |
| 456 | 453 |
| 457 self.scm_wrapper = self.mox.CreateMockAnything() | |
| 458 scm_wrapper_sol = self.mox.CreateMock(gclient.SCMWrapper) | |
| 459 | |
| 460 options = self.Options() | 454 options = self.Options() |
| 461 | 455 |
| 462 checkout_path = os.path.join(self.root_dir, solution_name) | 456 checkout_path = os.path.join(self.root_dir, solution_name) |
| 463 gclient.os.path.exists(os.path.join(checkout_path, '.git')).AndReturn(False) | 457 gclient.os.path.exists(os.path.join(checkout_path, '.git')).AndReturn(False) |
| 464 # Expect a check for the entries file and we say there is not one. | 458 # Expect a check for the entries file and we say there is not one. |
| 465 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) | 459 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) |
| 466 ).AndReturn(False) | 460 ).AndReturn(False) |
| 467 | 461 |
| 468 # An scm will be requested for the solution. | 462 # An scm will be requested for the solution. |
| 469 options.scm_wrapper(self.url, self.root_dir, solution_name | 463 scm_wrapper_sol = self.mox.CreateMockAnything() |
| 464 gclient.SCMWrapper(self.url, self.root_dir, solution_name |
| 470 ).AndReturn(scm_wrapper_sol) | 465 ).AndReturn(scm_wrapper_sol) |
| 471 # Then an update will be performed. | 466 # Then an update will be performed. |
| 472 scm_wrapper_sol.RunCommand('update', options, self.args, []) | 467 scm_wrapper_sol.RunCommand('update', options, self.args, []) |
| 473 # Then an attempt will be made to read its DEPS file. | 468 # Then an attempt will be made to read its DEPS file. |
| 474 gclient.FileRead(os.path.join(self.root_dir, | 469 gclient.FileRead(os.path.join(self.root_dir, |
| 475 solution_name, | 470 solution_name, |
| 476 options.deps_file)).AndRaise(IOError(2, 'No DEPS file')) | 471 options.deps_file)).AndRaise(IOError(2, 'No DEPS file')) |
| 477 | 472 |
| 478 # After everything is done, an attempt is made to write an entries | 473 # After everything is done, an attempt is made to write an entries |
| 479 # file. | 474 # file. |
| 480 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), | 475 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), |
| 481 entries_content) | 476 entries_content) |
| 482 | 477 |
| 483 self.mox.ReplayAll() | 478 self.mox.ReplayAll() |
| 484 client = gclient.GClient(self.root_dir, options) | 479 client = self._gclient_gclient(self.root_dir, options) |
| 485 client.SetConfig(gclient_config) | 480 client.SetConfig(gclient_config) |
| 486 client.RunOnDeps('update', self.args) | 481 client.RunOnDeps('update', self.args) |
| 487 self.mox.VerifyAll() | 482 self.mox.VerifyAll() |
| 488 | 483 |
| 489 def testRunOnDepsRelativePaths(self): | 484 def testRunOnDepsRelativePaths(self): |
| 490 solution_name = 'testRunOnDepsRelativePaths_solution_name' | 485 solution_name = 'testRunOnDepsRelativePaths_solution_name' |
| 491 gclient_config = ( | 486 gclient_config = ( |
| 492 "solutions = [ {\n" | 487 "solutions = [ {\n" |
| 493 " 'name': '%s',\n" | 488 " 'name': '%s',\n" |
| 494 " 'url': '%s',\n" | 489 " 'url': '%s',\n" |
| 495 " 'custom_deps': {},\n" | 490 " 'custom_deps': {},\n" |
| 496 "} ]\n" | 491 "} ]\n" |
| 497 ) % (solution_name, self.url) | 492 ) % (solution_name, self.url) |
| 498 | 493 |
| 499 deps = ( | 494 deps = ( |
| 500 "use_relative_paths = True\n" | 495 "use_relative_paths = True\n" |
| 501 "deps = {\n" | 496 "deps = {\n" |
| 502 " 'src/t': 'svn://scm.t/trunk',\n" | 497 " 'src/t': 'svn://scm.t/trunk',\n" |
| 503 "}\n") | 498 "}\n") |
| 504 | 499 |
| 505 entries_content = ( | 500 entries_content = ( |
| 506 'entries = [\n' | 501 'entries = [\n' |
| 507 ' "%s",\n' | 502 ' "%s",\n' |
| 508 ' "%s",\n' | 503 ' "%s",\n' |
| 509 ']\n' | 504 ']\n' |
| 510 ) % (os.path.join(solution_name, 'src', 't'), solution_name) | 505 ) % (os.path.join(solution_name, 'src', 't'), solution_name) |
| 511 | 506 |
| 512 self.scm_wrapper = self.mox.CreateMockAnything() | 507 scm_wrapper_sol = self.mox.CreateMockAnything() |
| 513 scm_wrapper_sol = self.mox.CreateMock(gclient.SCMWrapper) | 508 scm_wrapper_t = self.mox.CreateMockAnything() |
| 514 scm_wrapper_t = self.mox.CreateMock(gclient.SCMWrapper) | |
| 515 | 509 |
| 516 options = self.Options() | 510 options = self.Options() |
| 517 | 511 |
| 518 gclient.os.path.exists(os.path.join(self.root_dir, solution_name, 'src', | 512 gclient.os.path.exists(os.path.join(self.root_dir, solution_name, 'src', |
| 519 't', '.git') | 513 't', '.git') |
| 520 ).AndReturn(False) | 514 ).AndReturn(False) |
| 521 gclient.os.path.exists(os.path.join(self.root_dir, solution_name, '.git') | 515 gclient.os.path.exists(os.path.join(self.root_dir, solution_name, '.git') |
| 522 ).AndReturn(False) | 516 ).AndReturn(False) |
| 523 # Expect a check for the entries file and we say there is not one. | 517 # Expect a check for the entries file and we say there is not one. |
| 524 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) | 518 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) |
| 525 ).AndReturn(False) | 519 ).AndReturn(False) |
| 526 | 520 |
| 527 # An scm will be requested for the solution. | 521 # An scm will be requested for the solution. |
| 528 options.scm_wrapper(self.url, self.root_dir, solution_name | 522 gclient.SCMWrapper(self.url, self.root_dir, solution_name |
| 529 ).AndReturn(scm_wrapper_sol) | 523 ).AndReturn(scm_wrapper_sol) |
| 530 # Then an update will be performed. | 524 # Then an update will be performed. |
| 531 scm_wrapper_sol.RunCommand('update', options, self.args, []) | 525 scm_wrapper_sol.RunCommand('update', options, self.args, []) |
| 532 # Then an attempt will be made to read its DEPS file. | 526 # Then an attempt will be made to read its DEPS file. |
| 533 gclient.FileRead(os.path.join(self.root_dir, | 527 gclient.FileRead(os.path.join(self.root_dir, |
| 534 solution_name, | 528 solution_name, |
| 535 options.deps_file)).AndReturn(deps) | 529 options.deps_file)).AndReturn(deps) |
| 536 | 530 |
| 537 # Next we expect an scm to be request for dep src/t but it should | 531 # Next we expect an scm to be request for dep src/t but it should |
| 538 # use the url specified in deps and the relative path should now | 532 # use the url specified in deps and the relative path should now |
| 539 # be relative to the DEPS file. | 533 # be relative to the DEPS file. |
| 540 options.scm_wrapper( | 534 gclient.SCMWrapper( |
| 541 'svn://scm.t/trunk', | 535 'svn://scm.t/trunk', |
| 542 self.root_dir, | 536 self.root_dir, |
| 543 os.path.join(solution_name, "src", "t")).AndReturn(scm_wrapper_t) | 537 os.path.join(solution_name, "src", "t")).AndReturn(scm_wrapper_t) |
| 544 scm_wrapper_t.RunCommand('update', options, self.args, []) | 538 scm_wrapper_t.RunCommand('update', options, self.args, []) |
| 545 | 539 |
| 546 # After everything is done, an attempt is made to write an entries | 540 # After everything is done, an attempt is made to write an entries |
| 547 # file. | 541 # file. |
| 548 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), | 542 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), |
| 549 entries_content) | 543 entries_content) |
| 550 | 544 |
| 551 self.mox.ReplayAll() | 545 self.mox.ReplayAll() |
| 552 client = gclient.GClient(self.root_dir, options) | 546 client = self._gclient_gclient(self.root_dir, options) |
| 553 client.SetConfig(gclient_config) | 547 client.SetConfig(gclient_config) |
| 554 client.RunOnDeps('update', self.args) | 548 client.RunOnDeps('update', self.args) |
| 555 self.mox.VerifyAll() | 549 self.mox.VerifyAll() |
| 556 | 550 |
| 557 def testRunOnDepsCustomDeps(self): | 551 def testRunOnDepsCustomDeps(self): |
| 558 solution_name = 'testRunOnDepsCustomDeps_solution_name' | 552 solution_name = 'testRunOnDepsCustomDeps_solution_name' |
| 559 gclient_config = ( | 553 gclient_config = ( |
| 560 "solutions = [ {\n" | 554 "solutions = [ {\n" |
| 561 " 'name': '%s',\n" | 555 " 'name': '%s',\n" |
| 562 " 'url': '%s',\n" | 556 " 'url': '%s',\n" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 575 ) | 569 ) |
| 576 | 570 |
| 577 entries_content = ( | 571 entries_content = ( |
| 578 'entries = [\n' | 572 'entries = [\n' |
| 579 ' "%s",\n' | 573 ' "%s",\n' |
| 580 ' "src/n",\n' | 574 ' "src/n",\n' |
| 581 ' "src/t",\n' | 575 ' "src/t",\n' |
| 582 ']\n' | 576 ']\n' |
| 583 ) % solution_name | 577 ) % solution_name |
| 584 | 578 |
| 585 self.scm_wrapper = self.mox.CreateMockAnything() | 579 scm_wrapper_sol = self.mox.CreateMockAnything() |
| 586 scm_wrapper_sol = self.mox.CreateMock(gclient.SCMWrapper) | 580 scm_wrapper_t = self.mox.CreateMockAnything() |
| 587 scm_wrapper_t = self.mox.CreateMock(gclient.SCMWrapper) | 581 scm_wrapper_n = self.mox.CreateMockAnything() |
| 588 scm_wrapper_n = self.mox.CreateMock(gclient.SCMWrapper) | |
| 589 | 582 |
| 590 options = self.Options() | 583 options = self.Options() |
| 591 | 584 |
| 592 checkout_path = os.path.join(self.root_dir, solution_name) | 585 checkout_path = os.path.join(self.root_dir, solution_name) |
| 593 gclient.os.path.exists(os.path.join(checkout_path, '.git')).AndReturn(False) | 586 gclient.os.path.exists(os.path.join(checkout_path, '.git')).AndReturn(False) |
| 594 gclient.os.path.exists(os.path.join(self.root_dir, 'src/n', '.git') | 587 gclient.os.path.exists(os.path.join(self.root_dir, 'src/n', '.git') |
| 595 ).AndReturn(False) | 588 ).AndReturn(False) |
| 596 gclient.os.path.exists(os.path.join(self.root_dir, 'src/t', '.git') | 589 gclient.os.path.exists(os.path.join(self.root_dir, 'src/t', '.git') |
| 597 ).AndReturn(False) | 590 ).AndReturn(False) |
| 598 | 591 |
| 599 # Expect a check for the entries file and we say there is not one. | 592 # Expect a check for the entries file and we say there is not one. |
| 600 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) | 593 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) |
| 601 ).AndReturn(False) | 594 ).AndReturn(False) |
| 602 | 595 |
| 603 # An scm will be requested for the solution. | 596 # An scm will be requested for the solution. |
| 604 options.scm_wrapper(self.url, self.root_dir, solution_name | 597 gclient.SCMWrapper(self.url, self.root_dir, solution_name |
| 605 ).AndReturn(scm_wrapper_sol) | 598 ).AndReturn(scm_wrapper_sol) |
| 606 # Then an update will be performed. | 599 # Then an update will be performed. |
| 607 scm_wrapper_sol.RunCommand('update', options, self.args, []) | 600 scm_wrapper_sol.RunCommand('update', options, self.args, []) |
| 608 # Then an attempt will be made to read its DEPS file. | 601 # Then an attempt will be made to read its DEPS file. |
| 609 gclient.FileRead(os.path.join(checkout_path, options.deps_file) | 602 gclient.FileRead(os.path.join(checkout_path, options.deps_file) |
| 610 ).AndReturn(deps) | 603 ).AndReturn(deps) |
| 611 | 604 |
| 612 # Next we expect an scm to be request for dep src/n even though it does not | 605 # Next we expect an scm to be request for dep src/n even though it does not |
| 613 # exist in the DEPS file. | 606 # exist in the DEPS file. |
| 614 options.scm_wrapper('svn://custom.n/trunk', | 607 gclient.SCMWrapper('svn://custom.n/trunk', |
| 615 self.root_dir, | 608 self.root_dir, |
| 616 "src/n").AndReturn(scm_wrapper_n) | 609 "src/n").AndReturn(scm_wrapper_n) |
| 617 | 610 |
| 618 # Next we expect an scm to be request for dep src/t but it should | 611 # Next we expect an scm to be request for dep src/t but it should |
| 619 # use the url specified in custom_deps. | 612 # use the url specified in custom_deps. |
| 620 options.scm_wrapper('svn://custom.t/trunk', | 613 gclient.SCMWrapper('svn://custom.t/trunk', |
| 621 self.root_dir, | 614 self.root_dir, |
| 622 "src/t").AndReturn(scm_wrapper_t) | 615 "src/t").AndReturn(scm_wrapper_t) |
| 623 | 616 |
| 624 scm_wrapper_n.RunCommand('update', options, self.args, []) | 617 scm_wrapper_n.RunCommand('update', options, self.args, []) |
| 625 scm_wrapper_t.RunCommand('update', options, self.args, []) | 618 scm_wrapper_t.RunCommand('update', options, self.args, []) |
| 626 | 619 |
| 627 # NOTE: the dep src/b should not create an scm at all. | 620 # NOTE: the dep src/b should not create an scm at all. |
| 628 | 621 |
| 629 # After everything is done, an attempt is made to write an entries | 622 # After everything is done, an attempt is made to write an entries |
| 630 # file. | 623 # file. |
| 631 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), | 624 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), |
| 632 entries_content) | 625 entries_content) |
| 633 | 626 |
| 634 self.mox.ReplayAll() | 627 self.mox.ReplayAll() |
| 635 client = gclient.GClient(self.root_dir, options) | 628 client = self._gclient_gclient(self.root_dir, options) |
| 636 client.SetConfig(gclient_config) | 629 client.SetConfig(gclient_config) |
| 637 client.RunOnDeps('update', self.args) | 630 client.RunOnDeps('update', self.args) |
| 638 self.mox.VerifyAll() | 631 self.mox.VerifyAll() |
| 639 | 632 |
| 640 # Regression test for Issue #11. | 633 # Regression test for Issue #11. |
| 641 # http://code.google.com/p/gclient/issues/detail?id=11 | 634 # http://code.google.com/p/gclient/issues/detail?id=11 |
| 642 def testRunOnDepsSharedDependency(self): | 635 def testRunOnDepsSharedDependency(self): |
| 643 name_a = 'testRunOnDepsSharedDependency_a' | 636 name_a = 'testRunOnDepsSharedDependency_a' |
| 644 name_b = 'testRunOnDepsSharedDependency_b' | 637 name_b = 'testRunOnDepsSharedDependency_b' |
| 645 | 638 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 663 "deps = {\n" | 656 "deps = {\n" |
| 664 " 'src/t' : 'http://svn.t/trunk',\n" | 657 " 'src/t' : 'http://svn.t/trunk',\n" |
| 665 "}\n") | 658 "}\n") |
| 666 | 659 |
| 667 entries_content = ( | 660 entries_content = ( |
| 668 'entries = [\n "%s",\n' | 661 'entries = [\n "%s",\n' |
| 669 ' "%s",\n' | 662 ' "%s",\n' |
| 670 ' "src/t",\n' | 663 ' "src/t",\n' |
| 671 ']\n') % (name_a, name_b) | 664 ']\n') % (name_a, name_b) |
| 672 | 665 |
| 673 self.scm_wrapper = self.mox.CreateMockAnything() | 666 scm_wrapper_a = self.mox.CreateMockAnything() |
| 674 scm_wrapper_a = self.mox.CreateMock(gclient.SCMWrapper) | 667 scm_wrapper_b = self.mox.CreateMockAnything() |
| 675 scm_wrapper_b = self.mox.CreateMock(gclient.SCMWrapper) | 668 scm_wrapper_dep = self.mox.CreateMockAnything() |
| 676 scm_wrapper_dep = self.mox.CreateMock(gclient.SCMWrapper) | |
| 677 | 669 |
| 678 options = self.Options() | 670 options = self.Options() |
| 679 | 671 |
| 680 gclient.os.path.exists(os.path.join(self.root_dir, name_a, '.git') | 672 gclient.os.path.exists(os.path.join(self.root_dir, name_a, '.git') |
| 681 ).AndReturn(False) | 673 ).AndReturn(False) |
| 682 gclient.os.path.exists(os.path.join(self.root_dir, name_b, '.git') | 674 gclient.os.path.exists(os.path.join(self.root_dir, name_b, '.git') |
| 683 ).AndReturn(False) | 675 ).AndReturn(False) |
| 684 gclient.os.path.exists(os.path.join(self.root_dir, 'src/t', '.git') | 676 gclient.os.path.exists(os.path.join(self.root_dir, 'src/t', '.git') |
| 685 ).AndReturn(False) | 677 ).AndReturn(False) |
| 686 | 678 |
| 687 # Expect a check for the entries file and we say there is not one. | 679 # Expect a check for the entries file and we say there is not one. |
| 688 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) | 680 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) |
| 689 ).AndReturn(False) | 681 ).AndReturn(False) |
| 690 | 682 |
| 691 # An scm will be requested for the first solution. | 683 # An scm will be requested for the first solution. |
| 692 options.scm_wrapper(url_a, self.root_dir, name_a).AndReturn( | 684 gclient.SCMWrapper(url_a, self.root_dir, name_a).AndReturn( |
| 693 scm_wrapper_a) | 685 scm_wrapper_a) |
| 694 # Then an attempt will be made to read it's DEPS file. | 686 # Then an attempt will be made to read it's DEPS file. |
| 695 gclient.FileRead(os.path.join(self.root_dir, name_a, options.deps_file) | 687 gclient.FileRead(os.path.join(self.root_dir, name_a, options.deps_file) |
| 696 ).AndReturn(deps_a) | 688 ).AndReturn(deps_a) |
| 697 # Then an update will be performed. | 689 # Then an update will be performed. |
| 698 scm_wrapper_a.RunCommand('update', options, self.args, []) | 690 scm_wrapper_a.RunCommand('update', options, self.args, []) |
| 699 | 691 |
| 700 # An scm will be requested for the second solution. | 692 # An scm will be requested for the second solution. |
| 701 options.scm_wrapper(url_b, self.root_dir, name_b).AndReturn( | 693 gclient.SCMWrapper(url_b, self.root_dir, name_b).AndReturn( |
| 702 scm_wrapper_b) | 694 scm_wrapper_b) |
| 703 # Then an attempt will be made to read its DEPS file. | 695 # Then an attempt will be made to read its DEPS file. |
| 704 gclient.FileRead(os.path.join(self.root_dir, name_b, options.deps_file) | 696 gclient.FileRead(os.path.join(self.root_dir, name_b, options.deps_file) |
| 705 ).AndReturn(deps_b) | 697 ).AndReturn(deps_b) |
| 706 # Then an update will be performed. | 698 # Then an update will be performed. |
| 707 scm_wrapper_b.RunCommand('update', options, self.args, []) | 699 scm_wrapper_b.RunCommand('update', options, self.args, []) |
| 708 | 700 |
| 709 # Finally, an scm is requested for the shared dep. | 701 # Finally, an scm is requested for the shared dep. |
| 710 options.scm_wrapper('http://svn.t/trunk', self.root_dir, 'src/t' | 702 gclient.SCMWrapper('http://svn.t/trunk', self.root_dir, 'src/t' |
| 711 ).AndReturn(scm_wrapper_dep) | 703 ).AndReturn(scm_wrapper_dep) |
| 712 # And an update is run on it. | 704 # And an update is run on it. |
| 713 scm_wrapper_dep.RunCommand('update', options, self.args, []) | 705 scm_wrapper_dep.RunCommand('update', options, self.args, []) |
| 714 | 706 |
| 715 # After everything is done, an attempt is made to write an entries file. | 707 # After everything is done, an attempt is made to write an entries file. |
| 716 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), | 708 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), |
| 717 entries_content) | 709 entries_content) |
| 718 | 710 |
| 719 self.mox.ReplayAll() | 711 self.mox.ReplayAll() |
| 720 client = gclient.GClient(self.root_dir, options) | 712 client = self._gclient_gclient(self.root_dir, options) |
| 721 client.SetConfig(gclient_config) | 713 client.SetConfig(gclient_config) |
| 722 client.RunOnDeps('update', self.args) | 714 client.RunOnDeps('update', self.args) |
| 723 self.mox.VerifyAll() | 715 self.mox.VerifyAll() |
| 724 | 716 |
| 725 def testRunOnDepsSuccess(self): | 717 def testRunOnDepsSuccess(self): |
| 726 # Fake .gclient file. | 718 # Fake .gclient file. |
| 727 name = 'testRunOnDepsSuccess_solution_name' | 719 name = 'testRunOnDepsSuccess_solution_name' |
| 728 gclient_config = """solutions = [ { | 720 gclient_config = """solutions = [ { |
| 729 'name': '%s', | 721 'name': '%s', |
| 730 'url': '%s', | 722 'url': '%s', |
| 731 'custom_deps': {}, | 723 'custom_deps': {}, |
| 732 }, ]""" % (name, self.url) | 724 }, ]""" % (name, self.url) |
| 733 | 725 |
| 734 # pymox has trouble to mock the class object and not a class instance. | |
| 735 self.scm_wrapper = self.mox.CreateMockAnything() | |
| 736 options = self.Options() | 726 options = self.Options() |
| 737 gclient.os.path.exists(os.path.join(self.root_dir, name, '.git') | 727 gclient.os.path.exists(os.path.join(self.root_dir, name, '.git') |
| 738 ).AndReturn(False) | 728 ).AndReturn(False) |
| 739 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) | 729 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) |
| 740 ).AndReturn(False) | 730 ).AndReturn(False) |
| 741 options.scm_wrapper(self.url, self.root_dir, name).AndReturn( | 731 gclient.SCMWrapper(self.url, self.root_dir, name).AndReturn( |
| 742 options.scm_wrapper) | 732 gclient.SCMWrapper) |
| 743 options.scm_wrapper.RunCommand('update', options, self.args, []) | 733 gclient.SCMWrapper.RunCommand('update', options, self.args, []) |
| 744 gclient.FileRead(os.path.join(self.root_dir, name, options.deps_file) | 734 gclient.FileRead(os.path.join(self.root_dir, name, options.deps_file) |
| 745 ).AndReturn("Boo = 'a'") | 735 ).AndReturn("Boo = 'a'") |
| 746 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), | 736 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), |
| 747 'entries = [\n "%s",\n]\n' % name) | 737 'entries = [\n "%s",\n]\n' % name) |
| 748 | 738 |
| 749 self.mox.ReplayAll() | 739 self.mox.ReplayAll() |
| 750 client = gclient.GClient(self.root_dir, options) | 740 client = self._gclient_gclient(self.root_dir, options) |
| 751 client.SetConfig(gclient_config) | 741 client.SetConfig(gclient_config) |
| 752 client.RunOnDeps('update', self.args) | 742 client.RunOnDeps('update', self.args) |
| 753 self.mox.VerifyAll() | 743 self.mox.VerifyAll() |
| 754 | 744 |
| 755 def testRunOnDepsRevisions(self): | 745 def testRunOnDepsRevisions(self): |
| 756 def OptIsRev(options, rev): | 746 def OptIsRev(options, rev): |
| 757 if not options.revision == str(rev): | 747 if not options.revision == str(rev): |
| 758 print("options.revision = %s" % options.revision) | 748 print("options.revision = %s" % options.revision) |
| 759 return options.revision == str(rev) | 749 return options.revision == str(rev) |
| 760 def OptIsRevNone(options): | 750 def OptIsRevNone(options): |
| (...skipping 30 matching lines...) Expand all Loading... |
| 791 entries_content = ( | 781 entries_content = ( |
| 792 'entries = [\n "src",\n' | 782 'entries = [\n "src",\n' |
| 793 ' "foo/third_party/WebKit",\n' | 783 ' "foo/third_party/WebKit",\n' |
| 794 ' "src/third_party/cygwin",\n' | 784 ' "src/third_party/cygwin",\n' |
| 795 ' "src/third_party/python_24",\n' | 785 ' "src/third_party/python_24",\n' |
| 796 ' "src/breakpad/bar",\n' | 786 ' "src/breakpad/bar",\n' |
| 797 ']\n') | 787 ']\n') |
| 798 cygwin_path = 'dummy path cygwin' | 788 cygwin_path = 'dummy path cygwin' |
| 799 webkit_path = 'dummy path webkit' | 789 webkit_path = 'dummy path webkit' |
| 800 | 790 |
| 801 # pymox has trouble to mock the class object and not a class instance. | 791 scm_wrapper_bleh = self.mox.CreateMockAnything() |
| 802 self.scm_wrapper = self.mox.CreateMockAnything() | 792 scm_wrapper_src = self.mox.CreateMockAnything() |
| 803 scm_wrapper_bleh = self.mox.CreateMock(gclient.SCMWrapper) | 793 scm_wrapper_src2 = self.mox.CreateMockAnything() |
| 804 scm_wrapper_src = self.mox.CreateMock(gclient.SCMWrapper) | 794 scm_wrapper_webkit = self.mox.CreateMockAnything() |
| 805 scm_wrapper_src2 = self.mox.CreateMock(gclient.SCMWrapper) | 795 scm_wrapper_breakpad = self.mox.CreateMockAnything() |
| 806 scm_wrapper_webkit = self.mox.CreateMock(gclient.SCMWrapper) | 796 scm_wrapper_cygwin = self.mox.CreateMockAnything() |
| 807 scm_wrapper_breakpad = self.mox.CreateMock(gclient.SCMWrapper) | 797 scm_wrapper_python = self.mox.CreateMockAnything() |
| 808 scm_wrapper_cygwin = self.mox.CreateMock(gclient.SCMWrapper) | |
| 809 scm_wrapper_python = self.mox.CreateMock(gclient.SCMWrapper) | |
| 810 options = self.Options() | 798 options = self.Options() |
| 811 options.revisions = [ 'src@123', 'foo/third_party/WebKit@42', | 799 options.revisions = [ 'src@123', 'foo/third_party/WebKit@42', |
| 812 'src/third_party/cygwin@333' ] | 800 'src/third_party/cygwin@333' ] |
| 813 | 801 |
| 814 # Also, pymox doesn't verify the order of function calling w.r.t. different | 802 # Also, pymox doesn't verify the order of function calling w.r.t. different |
| 815 # mock objects. Pretty lame. So reorder as we wish to make it clearer. | 803 # mock objects. Pretty lame. So reorder as we wish to make it clearer. |
| 816 gclient.FileRead(os.path.join(self.root_dir, 'src', options.deps_file) | 804 gclient.FileRead(os.path.join(self.root_dir, 'src', options.deps_file) |
| 817 ).AndReturn(deps_content) | 805 ).AndReturn(deps_content) |
| 818 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), | 806 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), |
| 819 entries_content) | 807 entries_content) |
| 820 | 808 |
| 821 gclient.os.path.exists(os.path.join(self.root_dir, 'src', '.git') | 809 gclient.os.path.exists(os.path.join(self.root_dir, 'src', '.git') |
| 822 ).AndReturn(False) | 810 ).AndReturn(False) |
| 823 gclient.os.path.exists(os.path.join(self.root_dir, 'foo/third_party/WebKit', | 811 gclient.os.path.exists(os.path.join(self.root_dir, 'foo/third_party/WebKit', |
| 824 '.git') | 812 '.git') |
| 825 ).AndReturn(False) | 813 ).AndReturn(False) |
| 826 gclient.os.path.exists(os.path.join(self.root_dir, 'src/third_party/cygwin', | 814 gclient.os.path.exists(os.path.join(self.root_dir, 'src/third_party/cygwin', |
| 827 '.git') | 815 '.git') |
| 828 ).AndReturn(False) | 816 ).AndReturn(False) |
| 829 gclient.os.path.exists(os.path.join(self.root_dir, | 817 gclient.os.path.exists(os.path.join(self.root_dir, |
| 830 'src/third_party/python_24', '.git') | 818 'src/third_party/python_24', '.git') |
| 831 ).AndReturn(False) | 819 ).AndReturn(False) |
| 832 gclient.os.path.exists(os.path.join(self.root_dir, 'src/breakpad/bar', | 820 gclient.os.path.exists(os.path.join(self.root_dir, 'src/breakpad/bar', |
| 833 '.git') | 821 '.git') |
| 834 ).AndReturn(False) | 822 ).AndReturn(False) |
| 835 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) | 823 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) |
| 836 ).AndReturn(False) | 824 ).AndReturn(False) |
| 837 | 825 |
| 838 options.scm_wrapper(self.url, self.root_dir, 'src').AndReturn( | 826 gclient.SCMWrapper(self.url, self.root_dir, 'src').AndReturn( |
| 839 scm_wrapper_src) | 827 scm_wrapper_src) |
| 840 scm_wrapper_src.RunCommand('update', mox.Func(OptIsRev123), self.args, []) | 828 scm_wrapper_src.RunCommand('update', mox.Func(OptIsRev123), self.args, []) |
| 841 | 829 |
| 842 options.scm_wrapper(self.url, self.root_dir, | 830 gclient.SCMWrapper(self.url, self.root_dir, |
| 843 None).AndReturn(scm_wrapper_src2) | 831 None).AndReturn(scm_wrapper_src2) |
| 844 scm_wrapper_src2.FullUrlForRelativeUrl('/trunk/deps/third_party/cygwin@3248' | 832 scm_wrapper_src2.FullUrlForRelativeUrl('/trunk/deps/third_party/cygwin@3248' |
| 845 ).AndReturn(cygwin_path) | 833 ).AndReturn(cygwin_path) |
| 846 | 834 |
| 847 options.scm_wrapper(self.url, self.root_dir, | 835 gclient.SCMWrapper(self.url, self.root_dir, |
| 848 None).AndReturn(scm_wrapper_src2) | 836 None).AndReturn(scm_wrapper_src2) |
| 849 scm_wrapper_src2.FullUrlForRelativeUrl('/trunk/deps/third_party/WebKit' | 837 scm_wrapper_src2.FullUrlForRelativeUrl('/trunk/deps/third_party/WebKit' |
| 850 ).AndReturn(webkit_path) | 838 ).AndReturn(webkit_path) |
| 851 | 839 |
| 852 options.scm_wrapper(webkit_path, self.root_dir, | 840 gclient.SCMWrapper(webkit_path, self.root_dir, |
| 853 'foo/third_party/WebKit').AndReturn(scm_wrapper_webkit) | 841 'foo/third_party/WebKit').AndReturn(scm_wrapper_webkit) |
| 854 scm_wrapper_webkit.RunCommand('update', mox.Func(OptIsRev42), self.args, []) | 842 scm_wrapper_webkit.RunCommand('update', mox.Func(OptIsRev42), self.args, []) |
| 855 | 843 |
| 856 options.scm_wrapper( | 844 gclient.SCMWrapper( |
| 857 'http://google-breakpad.googlecode.com/svn/trunk/src@285', | 845 'http://google-breakpad.googlecode.com/svn/trunk/src@285', |
| 858 self.root_dir, 'src/breakpad/bar').AndReturn(scm_wrapper_breakpad) | 846 self.root_dir, 'src/breakpad/bar').AndReturn(scm_wrapper_breakpad) |
| 859 scm_wrapper_breakpad.RunCommand('update', mox.Func(OptIsRevNone), | 847 scm_wrapper_breakpad.RunCommand('update', mox.Func(OptIsRevNone), |
| 860 self.args, []) | 848 self.args, []) |
| 861 | 849 |
| 862 options.scm_wrapper(cygwin_path, self.root_dir, | 850 gclient.SCMWrapper(cygwin_path, self.root_dir, |
| 863 'src/third_party/cygwin').AndReturn(scm_wrapper_cygwin) | 851 'src/third_party/cygwin').AndReturn(scm_wrapper_cygwin) |
| 864 scm_wrapper_cygwin.RunCommand('update', mox.Func(OptIsRev333), self.args, | 852 scm_wrapper_cygwin.RunCommand('update', mox.Func(OptIsRev333), self.args, |
| 865 []) | 853 []) |
| 866 | 854 |
| 867 options.scm_wrapper('svn://random_server:123/trunk/python_24@5580', | 855 gclient.SCMWrapper('svn://random_server:123/trunk/python_24@5580', |
| 868 self.root_dir, | 856 self.root_dir, |
| 869 'src/third_party/python_24').AndReturn( | 857 'src/third_party/python_24').AndReturn( |
| 870 scm_wrapper_python) | 858 scm_wrapper_python) |
| 871 scm_wrapper_python.RunCommand('update', mox.Func(OptIsRevNone), self.args, | 859 scm_wrapper_python.RunCommand('update', mox.Func(OptIsRevNone), self.args, |
| 872 []) | 860 []) |
| 873 | 861 |
| 874 self.mox.ReplayAll() | 862 self.mox.ReplayAll() |
| 875 client = gclient.GClient(self.root_dir, options) | 863 client = self._gclient_gclient(self.root_dir, options) |
| 876 client.SetConfig(gclient_config) | 864 client.SetConfig(gclient_config) |
| 877 client.RunOnDeps('update', self.args) | 865 client.RunOnDeps('update', self.args) |
| 878 self.mox.VerifyAll() | 866 self.mox.VerifyAll() |
| 879 | 867 |
| 880 def testRunOnDepsConflictingRevisions(self): | 868 def testRunOnDepsConflictingRevisions(self): |
| 881 # Fake .gclient file. | 869 # Fake .gclient file. |
| 882 name = 'testRunOnDepsConflictingRevisions_solution_name' | 870 name = 'testRunOnDepsConflictingRevisions_solution_name' |
| 883 gclient_config = """solutions = [ { | 871 gclient_config = """solutions = [ { |
| 884 'name': '%s', | 872 'name': '%s', |
| 885 'url': '%s', | 873 'url': '%s', |
| 886 'custom_deps': {}, | 874 'custom_deps': {}, |
| 887 'custom_vars': {}, | 875 'custom_vars': {}, |
| 888 }, ]""" % (name, self.url) | 876 }, ]""" % (name, self.url) |
| 889 # Fake DEPS file. | 877 # Fake DEPS file. |
| 890 deps_content = """deps = { | 878 deps_content = """deps = { |
| 891 'foo/third_party/WebKit': '/trunk/deps/third_party/WebKit', | 879 'foo/third_party/WebKit': '/trunk/deps/third_party/WebKit', |
| 892 }""" | 880 }""" |
| 893 | 881 |
| 894 options = self.Options() | 882 options = self.Options() |
| 895 options.revisions = [ 'foo/third_party/WebKit@42', | 883 options.revisions = [ 'foo/third_party/WebKit@42', |
| 896 'foo/third_party/WebKit@43' ] | 884 'foo/third_party/WebKit@43' ] |
| 897 client = gclient.GClient(self.root_dir, options) | 885 client = self._gclient_gclient(self.root_dir, options) |
| 898 client.SetConfig(gclient_config) | 886 client.SetConfig(gclient_config) |
| 899 exception = "Conflicting revision numbers specified." | 887 exception = "Conflicting revision numbers specified." |
| 900 try: | 888 try: |
| 901 client.RunOnDeps('update', self.args) | 889 client.RunOnDeps('update', self.args) |
| 902 except gclient.Error, e: | 890 except gclient.Error, e: |
| 903 self.assertEquals(e.args[0], exception) | 891 self.assertEquals(e.args[0], exception) |
| 904 else: | 892 else: |
| 905 self.fail('%s not raised' % exception) | 893 self.fail('%s not raised' % exception) |
| 906 | 894 |
| 907 def testRunOnDepsSuccessVars(self): | 895 def testRunOnDepsSuccessVars(self): |
| (...skipping 11 matching lines...) Expand all Loading... |
| 919 } | 907 } |
| 920 deps = { | 908 deps = { |
| 921 'foo/third_party/WebKit': Var('webkit') + 'WebKit', | 909 'foo/third_party/WebKit': Var('webkit') + 'WebKit', |
| 922 }""" | 910 }""" |
| 923 entries_content = ( | 911 entries_content = ( |
| 924 'entries = [\n "foo/third_party/WebKit",\n' | 912 'entries = [\n "foo/third_party/WebKit",\n' |
| 925 ' "%s",\n' | 913 ' "%s",\n' |
| 926 ']\n') % name | 914 ']\n') % name |
| 927 webkit_path = 'dummy path webkit' | 915 webkit_path = 'dummy path webkit' |
| 928 | 916 |
| 929 # pymox has trouble to mock the class object and not a class instance. | 917 scm_wrapper_webkit = self.mox.CreateMockAnything() |
| 930 self.scm_wrapper = self.mox.CreateMockAnything() | 918 scm_wrapper_src = self.mox.CreateMockAnything() |
| 931 scm_wrapper_webkit = self.mox.CreateMock(gclient.SCMWrapper) | |
| 932 scm_wrapper_src = self.mox.CreateMock(gclient.SCMWrapper) | |
| 933 | 919 |
| 934 options = self.Options() | 920 options = self.Options() |
| 935 gclient.FileRead(os.path.join(self.root_dir, name, options.deps_file) | 921 gclient.FileRead(os.path.join(self.root_dir, name, options.deps_file) |
| 936 ).AndReturn(deps_content) | 922 ).AndReturn(deps_content) |
| 937 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), | 923 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), |
| 938 entries_content) | 924 entries_content) |
| 939 | 925 |
| 940 gclient.os.path.exists(os.path.join(self.root_dir, 'foo/third_party/WebKit', | 926 gclient.os.path.exists(os.path.join(self.root_dir, 'foo/third_party/WebKit', |
| 941 '.git')).AndReturn(False) | 927 '.git')).AndReturn(False) |
| 942 gclient.os.path.exists(os.path.join(self.root_dir, name, '.git') | 928 gclient.os.path.exists(os.path.join(self.root_dir, name, '.git') |
| 943 ).AndReturn(False) | 929 ).AndReturn(False) |
| 944 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) | 930 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) |
| 945 ).AndReturn(False) | 931 ).AndReturn(False) |
| 946 options.scm_wrapper(self.url, self.root_dir, name).AndReturn( | 932 gclient.SCMWrapper(self.url, self.root_dir, name).AndReturn( |
| 947 options.scm_wrapper) | 933 gclient.SCMWrapper) |
| 948 options.scm_wrapper.RunCommand('update', options, self.args, []) | 934 gclient.SCMWrapper.RunCommand('update', options, self.args, []) |
| 949 | 935 |
| 950 options.scm_wrapper(self.url, self.root_dir, | 936 gclient.SCMWrapper(self.url, self.root_dir, |
| 951 None).AndReturn(scm_wrapper_src) | 937 None).AndReturn(scm_wrapper_src) |
| 952 scm_wrapper_src.FullUrlForRelativeUrl('/trunk/bar/WebKit' | 938 scm_wrapper_src.FullUrlForRelativeUrl('/trunk/bar/WebKit' |
| 953 ).AndReturn(webkit_path) | 939 ).AndReturn(webkit_path) |
| 954 | 940 |
| 955 options.scm_wrapper(webkit_path, self.root_dir, | 941 gclient.SCMWrapper(webkit_path, self.root_dir, |
| 956 'foo/third_party/WebKit').AndReturn(options.scm_wrapper) | 942 'foo/third_party/WebKit').AndReturn(gclient.SCMWrapper) |
| 957 options.scm_wrapper.RunCommand('update', options, self.args, []) | 943 gclient.SCMWrapper.RunCommand('update', options, self.args, []) |
| 958 | 944 |
| 959 self.mox.ReplayAll() | 945 self.mox.ReplayAll() |
| 960 client = gclient.GClient(self.root_dir, options) | 946 client = self._gclient_gclient(self.root_dir, options) |
| 961 client.SetConfig(gclient_config) | 947 client.SetConfig(gclient_config) |
| 962 client.RunOnDeps('update', self.args) | 948 client.RunOnDeps('update', self.args) |
| 963 self.mox.VerifyAll() | 949 self.mox.VerifyAll() |
| 964 | 950 |
| 965 def testRunOnDepsSuccessCustomVars(self): | 951 def testRunOnDepsSuccessCustomVars(self): |
| 966 # Fake .gclient file. | 952 # Fake .gclient file. |
| 967 name = 'testRunOnDepsSuccessCustomVars_solution_name' | 953 name = 'testRunOnDepsSuccessCustomVars_solution_name' |
| 968 gclient_config = """solutions = [ { | 954 gclient_config = """solutions = [ { |
| 969 'name': '%s', | 955 'name': '%s', |
| 970 'url': '%s', | 956 'url': '%s', |
| 971 'custom_deps': {}, | 957 'custom_deps': {}, |
| 972 'custom_vars': {'webkit': '/trunk/bar_custom/'}, | 958 'custom_vars': {'webkit': '/trunk/bar_custom/'}, |
| 973 }, ]""" % (name, self.url) | 959 }, ]""" % (name, self.url) |
| 974 # Fake DEPS file. | 960 # Fake DEPS file. |
| 975 deps_content = """vars = { | 961 deps_content = """vars = { |
| 976 'webkit': '/trunk/bar/', | 962 'webkit': '/trunk/bar/', |
| 977 } | 963 } |
| 978 deps = { | 964 deps = { |
| 979 'foo/third_party/WebKit': Var('webkit') + 'WebKit', | 965 'foo/third_party/WebKit': Var('webkit') + 'WebKit', |
| 980 }""" | 966 }""" |
| 981 entries_content = ( | 967 entries_content = ( |
| 982 'entries = [\n "foo/third_party/WebKit",\n' | 968 'entries = [\n "foo/third_party/WebKit",\n' |
| 983 ' "%s",\n' | 969 ' "%s",\n' |
| 984 ']\n') % name | 970 ']\n') % name |
| 985 webkit_path = 'dummy path webkit' | 971 webkit_path = 'dummy path webkit' |
| 986 | 972 |
| 987 # pymox has trouble to mock the class object and not a class instance. | 973 scm_wrapper_webkit = self.mox.CreateMockAnything() |
| 988 self.scm_wrapper = self.mox.CreateMockAnything() | 974 scm_wrapper_src = self.mox.CreateMockAnything() |
| 989 scm_wrapper_webkit = self.mox.CreateMock(gclient.SCMWrapper) | |
| 990 scm_wrapper_src = self.mox.CreateMock(gclient.SCMWrapper) | |
| 991 | 975 |
| 992 options = self.Options() | 976 options = self.Options() |
| 993 gclient.FileRead(os.path.join(self.root_dir, name, options.deps_file) | 977 gclient.FileRead(os.path.join(self.root_dir, name, options.deps_file) |
| 994 ).AndReturn(deps_content) | 978 ).AndReturn(deps_content) |
| 995 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), | 979 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), |
| 996 entries_content) | 980 entries_content) |
| 997 | 981 |
| 998 gclient.os.path.exists(os.path.join(self.root_dir, 'foo/third_party/WebKit', | 982 gclient.os.path.exists(os.path.join(self.root_dir, 'foo/third_party/WebKit', |
| 999 '.git') | 983 '.git') |
| 1000 ).AndReturn(False) | 984 ).AndReturn(False) |
| 1001 gclient.os.path.exists(os.path.join(self.root_dir, name, '.git') | 985 gclient.os.path.exists(os.path.join(self.root_dir, name, '.git') |
| 1002 ).AndReturn(False) | 986 ).AndReturn(False) |
| 1003 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) | 987 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) |
| 1004 ).AndReturn(False) | 988 ).AndReturn(False) |
| 1005 options.scm_wrapper(self.url, self.root_dir, name).AndReturn( | 989 gclient.SCMWrapper(self.url, self.root_dir, name).AndReturn( |
| 1006 options.scm_wrapper) | 990 gclient.SCMWrapper) |
| 1007 options.scm_wrapper.RunCommand('update', options, self.args, []) | 991 gclient.SCMWrapper.RunCommand('update', options, self.args, []) |
| 1008 | 992 |
| 1009 options.scm_wrapper(self.url, self.root_dir, | 993 gclient.SCMWrapper(self.url, self.root_dir, |
| 1010 None).AndReturn(scm_wrapper_src) | 994 None).AndReturn(scm_wrapper_src) |
| 1011 scm_wrapper_src.FullUrlForRelativeUrl('/trunk/bar_custom/WebKit' | 995 scm_wrapper_src.FullUrlForRelativeUrl('/trunk/bar_custom/WebKit' |
| 1012 ).AndReturn(webkit_path) | 996 ).AndReturn(webkit_path) |
| 1013 | 997 |
| 1014 options.scm_wrapper(webkit_path, self.root_dir, | 998 gclient.SCMWrapper(webkit_path, self.root_dir, |
| 1015 'foo/third_party/WebKit').AndReturn(options.scm_wrapper) | 999 'foo/third_party/WebKit').AndReturn(gclient.SCMWrapper) |
| 1016 options.scm_wrapper.RunCommand('update', options, self.args, []) | 1000 gclient.SCMWrapper.RunCommand('update', options, self.args, []) |
| 1017 | 1001 |
| 1018 self.mox.ReplayAll() | 1002 self.mox.ReplayAll() |
| 1019 client = gclient.GClient(self.root_dir, options) | 1003 client = self._gclient_gclient(self.root_dir, options) |
| 1020 client.SetConfig(gclient_config) | 1004 client.SetConfig(gclient_config) |
| 1021 client.RunOnDeps('update', self.args) | 1005 client.RunOnDeps('update', self.args) |
| 1022 self.mox.VerifyAll() | 1006 self.mox.VerifyAll() |
| 1023 | 1007 |
| 1024 def testRunOnDepsFailueVars(self): | 1008 def testRunOnDepsFailueVars(self): |
| 1025 # Fake .gclient file. | 1009 # Fake .gclient file. |
| 1026 name = 'testRunOnDepsFailureVars_solution_name' | 1010 name = 'testRunOnDepsFailureVars_solution_name' |
| 1027 gclient_config = """solutions = [ { | 1011 gclient_config = """solutions = [ { |
| 1028 'name': '%s', | 1012 'name': '%s', |
| 1029 'url': '%s', | 1013 'url': '%s', |
| 1030 'custom_deps': {}, | 1014 'custom_deps': {}, |
| 1031 'custom_vars': {}, | 1015 'custom_vars': {}, |
| 1032 }, ]""" % (name, self.url) | 1016 }, ]""" % (name, self.url) |
| 1033 # Fake DEPS file. | 1017 # Fake DEPS file. |
| 1034 deps_content = """deps = { | 1018 deps_content = """deps = { |
| 1035 'foo/third_party/WebKit': Var('webkit') + 'WebKit', | 1019 'foo/third_party/WebKit': Var('webkit') + 'WebKit', |
| 1036 }""" | 1020 }""" |
| 1037 | 1021 |
| 1038 # pymox has trouble to mock the class object and not a class instance. | |
| 1039 self.scm_wrapper = self.mox.CreateMockAnything() | |
| 1040 | |
| 1041 options = self.Options() | 1022 options = self.Options() |
| 1042 gclient.FileRead(os.path.join(self.root_dir, name, options.deps_file) | 1023 gclient.FileRead(os.path.join(self.root_dir, name, options.deps_file) |
| 1043 ).AndReturn(deps_content) | 1024 ).AndReturn(deps_content) |
| 1044 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), | 1025 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), |
| 1045 'dummy entries content') | 1026 'dummy entries content') |
| 1046 | 1027 |
| 1047 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) | 1028 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) |
| 1048 ).AndReturn(False) | 1029 ).AndReturn(False) |
| 1049 options.scm_wrapper(self.url, self.root_dir, name).AndReturn( | 1030 gclient.SCMWrapper(self.url, self.root_dir, name).AndReturn( |
| 1050 options.scm_wrapper) | 1031 gclient.SCMWrapper) |
| 1051 options.scm_wrapper.RunCommand('update', options, self.args, []) | 1032 gclient.SCMWrapper.RunCommand('update', options, self.args, []) |
| 1052 | 1033 |
| 1053 self.mox.ReplayAll() | 1034 self.mox.ReplayAll() |
| 1054 client = gclient.GClient(self.root_dir, options) | 1035 client = self._gclient_gclient(self.root_dir, options) |
| 1055 client.SetConfig(gclient_config) | 1036 client.SetConfig(gclient_config) |
| 1056 exception = "Var is not defined: webkit" | 1037 exception = "Var is not defined: webkit" |
| 1057 try: | 1038 try: |
| 1058 client.RunOnDeps('update', self.args) | 1039 client.RunOnDeps('update', self.args) |
| 1059 except gclient.Error, e: | 1040 except gclient.Error, e: |
| 1060 self.assertEquals(e.args[0], exception) | 1041 self.assertEquals(e.args[0], exception) |
| 1061 else: | 1042 else: |
| 1062 self.fail('%s not raised' % exception) | 1043 self.fail('%s not raised' % exception) |
| 1063 | 1044 |
| 1064 def testRunOnDepsFailureInvalidCommand(self): | 1045 def testRunOnDepsFailureInvalidCommand(self): |
| 1065 options = self.Options() | 1046 options = self.Options() |
| 1066 | 1047 |
| 1067 self.mox.ReplayAll() | 1048 self.mox.ReplayAll() |
| 1068 client = gclient.GClient(self.root_dir, options) | 1049 client = self._gclient_gclient(self.root_dir, options) |
| 1069 exception = "'foo' is an unsupported command" | 1050 exception = "'foo' is an unsupported command" |
| 1070 self.assertRaisesError(exception, gclient.GClient.RunOnDeps, client, 'foo', | 1051 self.assertRaisesError(exception, self._gclient_gclient.RunOnDeps, client, |
| 1071 self.args) | 1052 'foo', self.args) |
| 1072 self.mox.VerifyAll() | 1053 self.mox.VerifyAll() |
| 1073 | 1054 |
| 1074 def testRunOnDepsFailureEmpty(self): | 1055 def testRunOnDepsFailureEmpty(self): |
| 1075 options = self.Options() | 1056 options = self.Options() |
| 1076 | 1057 |
| 1077 self.mox.ReplayAll() | 1058 self.mox.ReplayAll() |
| 1078 client = gclient.GClient(self.root_dir, options) | 1059 client = self._gclient_gclient(self.root_dir, options) |
| 1079 exception = "No solution specified" | 1060 exception = "No solution specified" |
| 1080 self.assertRaisesError(exception, gclient.GClient.RunOnDeps, client, | 1061 self.assertRaisesError(exception, self._gclient_gclient.RunOnDeps, client, |
| 1081 'update', self.args) | 1062 'update', self.args) |
| 1082 self.mox.VerifyAll() | 1063 self.mox.VerifyAll() |
| 1083 | 1064 |
| 1084 def testFromImpl(self): | 1065 def testFromImpl(self): |
| 1085 # TODO(maruel): Test me! | 1066 # TODO(maruel): Test me! |
| 1086 pass | 1067 pass |
| 1087 | 1068 |
| 1088 def test_PrintRevInfo(self): | 1069 def test_PrintRevInfo(self): |
| 1089 # TODO(aharper): no test yet for revinfo, lock it down once we've verified | 1070 # TODO(aharper): no test yet for revinfo, lock it down once we've verified |
| 1090 # implementation for Pulse plugin | 1071 # implementation for Pulse plugin |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1127 GClientBaseTestCase.tearDown(self) | 1108 GClientBaseTestCase.tearDown(self) |
| 1128 gclient.os.path.isdir = self._os_path_isdir | 1109 gclient.os.path.isdir = self._os_path_isdir |
| 1129 | 1110 |
| 1130 def testDir(self): | 1111 def testDir(self): |
| 1131 members = [ | 1112 members = [ |
| 1132 'FullUrlForRelativeUrl', 'RunCommand', 'cleanup', 'diff', 'relpath', | 1113 'FullUrlForRelativeUrl', 'RunCommand', 'cleanup', 'diff', 'relpath', |
| 1133 'revert', 'scm_name', 'status', 'update', 'url', | 1114 'revert', 'scm_name', 'status', 'update', 'url', |
| 1134 ] | 1115 ] |
| 1135 | 1116 |
| 1136 # If you add a member, be sure to add the relevant test! | 1117 # If you add a member, be sure to add the relevant test! |
| 1137 self.compareMembers(gclient.SCMWrapper(), members) | 1118 self.compareMembers(self._scm_wrapper(), members) |
| 1138 | 1119 |
| 1139 def testFullUrlForRelativeUrl(self): | 1120 def testFullUrlForRelativeUrl(self): |
| 1140 self.url = 'svn://a/b/c/d' | 1121 self.url = 'svn://a/b/c/d' |
| 1141 | 1122 |
| 1142 self.mox.ReplayAll() | 1123 self.mox.ReplayAll() |
| 1143 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, | 1124 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
| 1144 relpath=self.relpath) | 1125 relpath=self.relpath) |
| 1145 self.assertEqual(scm.FullUrlForRelativeUrl('/crap'), 'svn://a/b/crap') | 1126 self.assertEqual(scm.FullUrlForRelativeUrl('/crap'), 'svn://a/b/crap') |
| 1146 self.mox.VerifyAll() | 1127 self.mox.VerifyAll() |
| 1147 | 1128 |
| 1148 def testRunCommandException(self): | 1129 def testRunCommandException(self): |
| 1149 options = self.Options(verbose=False) | 1130 options = self.Options(verbose=False) |
| 1150 gclient.os.path.exists(os.path.join(self.root_dir, self.relpath, '.git') | 1131 gclient.os.path.exists(os.path.join(self.root_dir, self.relpath, '.git') |
| 1151 ).AndReturn(False) | 1132 ).AndReturn(False) |
| 1152 | 1133 |
| 1153 self.mox.ReplayAll() | 1134 self.mox.ReplayAll() |
| 1154 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, | 1135 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
| 1155 relpath=self.relpath) | 1136 relpath=self.relpath) |
| 1156 exception = "Unsupported argument(s): %s" % ','.join(self.args) | 1137 exception = "Unsupported argument(s): %s" % ','.join(self.args) |
| 1157 self.assertRaisesError(exception, gclient.SCMWrapper.RunCommand, | 1138 self.assertRaisesError(exception, self._scm_wrapper.RunCommand, |
| 1158 scm, 'update', options, self.args) | 1139 scm, 'update', options, self.args) |
| 1159 self.mox.VerifyAll() | 1140 self.mox.VerifyAll() |
| 1160 | 1141 |
| 1161 def testRunCommandUnknown(self): | 1142 def testRunCommandUnknown(self): |
| 1162 # TODO(maruel): if ever used. | 1143 # TODO(maruel): if ever used. |
| 1163 pass | 1144 pass |
| 1164 | 1145 |
| 1165 def testRevertMissing(self): | 1146 def testRevertMissing(self): |
| 1166 options = self.Options(verbose=True) | 1147 options = self.Options(verbose=True) |
| 1167 base_path = os.path.join(self.root_dir, self.relpath) | 1148 base_path = os.path.join(self.root_dir, self.relpath) |
| 1168 gclient.os.path.isdir(base_path).AndReturn(False) | 1149 gclient.os.path.isdir(base_path).AndReturn(False) |
| 1169 # It'll to a checkout instead. | 1150 # It'll to a checkout instead. |
| 1170 gclient.os.path.exists(os.path.join(base_path, '.git')).AndReturn(False) | 1151 gclient.os.path.exists(os.path.join(base_path, '.git')).AndReturn(False) |
| 1171 print("\n_____ %s is missing, synching instead" % self.relpath) | 1152 print("\n_____ %s is missing, synching instead" % self.relpath) |
| 1172 # Checkout. | 1153 # Checkout. |
| 1173 gclient.os.path.exists(base_path).AndReturn(False) | 1154 gclient.os.path.exists(base_path).AndReturn(False) |
| 1174 files_list = self.mox.CreateMockAnything() | 1155 files_list = self.mox.CreateMockAnything() |
| 1175 gclient.RunSVNAndGetFileList(['checkout', self.url, base_path], | 1156 gclient.RunSVNAndGetFileList(['checkout', self.url, base_path], |
| 1176 self.root_dir, files_list) | 1157 self.root_dir, files_list) |
| 1177 | 1158 |
| 1178 self.mox.ReplayAll() | 1159 self.mox.ReplayAll() |
| 1179 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, | 1160 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
| 1180 relpath=self.relpath) | 1161 relpath=self.relpath) |
| 1181 scm.revert(options, self.args, files_list) | 1162 scm.revert(options, self.args, files_list) |
| 1182 self.mox.VerifyAll() | 1163 self.mox.VerifyAll() |
| 1183 | 1164 |
| 1184 def testRevertNone(self): | 1165 def testRevertNone(self): |
| 1185 options = self.Options(verbose=True) | 1166 options = self.Options(verbose=True) |
| 1186 base_path = os.path.join(self.root_dir, self.relpath) | 1167 base_path = os.path.join(self.root_dir, self.relpath) |
| 1187 gclient.os.path.isdir(base_path).AndReturn(True) | 1168 gclient.os.path.isdir(base_path).AndReturn(True) |
| 1188 gclient.CaptureSVNStatus(base_path).AndReturn([]) | 1169 gclient.CaptureSVNStatus(base_path).AndReturn([]) |
| 1189 | 1170 |
| 1190 self.mox.ReplayAll() | 1171 self.mox.ReplayAll() |
| 1191 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, | 1172 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
| 1192 relpath=self.relpath) | 1173 relpath=self.relpath) |
| 1193 file_list = [] | 1174 file_list = [] |
| 1194 scm.revert(options, self.args, file_list) | 1175 scm.revert(options, self.args, file_list) |
| 1195 self.mox.VerifyAll() | 1176 self.mox.VerifyAll() |
| 1196 | 1177 |
| 1197 def testRevert2Files(self): | 1178 def testRevert2Files(self): |
| 1198 options = self.Options(verbose=True) | 1179 options = self.Options(verbose=True) |
| 1199 base_path = os.path.join(self.root_dir, self.relpath) | 1180 base_path = os.path.join(self.root_dir, self.relpath) |
| 1200 gclient.os.path.isdir(base_path).AndReturn(True) | 1181 gclient.os.path.isdir(base_path).AndReturn(True) |
| 1201 items = [ | 1182 items = [ |
| 1202 ('M ', 'a'), | 1183 ('M ', 'a'), |
| 1203 ('A ', 'b'), | 1184 ('A ', 'b'), |
| 1204 ] | 1185 ] |
| 1205 gclient.CaptureSVNStatus(base_path).AndReturn(items) | 1186 gclient.CaptureSVNStatus(base_path).AndReturn(items) |
| 1206 | 1187 |
| 1207 print(os.path.join(base_path, 'a')) | 1188 print(os.path.join(base_path, 'a')) |
| 1208 print(os.path.join(base_path, 'b')) | 1189 print(os.path.join(base_path, 'b')) |
| 1209 gclient.RunSVN(['revert', 'a', 'b'], base_path) | 1190 gclient.RunSVN(['revert', 'a', 'b'], base_path) |
| 1210 | 1191 |
| 1211 self.mox.ReplayAll() | 1192 self.mox.ReplayAll() |
| 1212 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, | 1193 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
| 1213 relpath=self.relpath) | 1194 relpath=self.relpath) |
| 1214 file_list = [] | 1195 file_list = [] |
| 1215 scm.revert(options, self.args, file_list) | 1196 scm.revert(options, self.args, file_list) |
| 1216 self.mox.VerifyAll() | 1197 self.mox.VerifyAll() |
| 1217 | 1198 |
| 1218 def testStatus(self): | 1199 def testStatus(self): |
| 1219 options = self.Options(verbose=True) | 1200 options = self.Options(verbose=True) |
| 1220 base_path = os.path.join(self.root_dir, self.relpath) | 1201 base_path = os.path.join(self.root_dir, self.relpath) |
| 1221 gclient.os.path.isdir(base_path).AndReturn(True) | 1202 gclient.os.path.isdir(base_path).AndReturn(True) |
| 1222 gclient.RunSVNAndGetFileList(['status'] + self.args, base_path, | 1203 gclient.RunSVNAndGetFileList(['status'] + self.args, base_path, |
| 1223 []).AndReturn(None) | 1204 []).AndReturn(None) |
| 1224 | 1205 |
| 1225 self.mox.ReplayAll() | 1206 self.mox.ReplayAll() |
| 1226 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, | 1207 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
| 1227 relpath=self.relpath) | 1208 relpath=self.relpath) |
| 1228 file_list = [] | 1209 file_list = [] |
| 1229 self.assertEqual(scm.status(options, self.args, file_list), None) | 1210 self.assertEqual(scm.status(options, self.args, file_list), None) |
| 1230 self.mox.VerifyAll() | 1211 self.mox.VerifyAll() |
| 1231 | 1212 |
| 1232 | 1213 |
| 1233 # TODO(maruel): TEST REVISIONS!!! | 1214 # TODO(maruel): TEST REVISIONS!!! |
| 1234 # TODO(maruel): TEST RELOCATE!!! | 1215 # TODO(maruel): TEST RELOCATE!!! |
| 1235 def testUpdateCheckout(self): | 1216 def testUpdateCheckout(self): |
| 1236 options = self.Options(verbose=True) | 1217 options = self.Options(verbose=True) |
| 1237 base_path = os.path.join(self.root_dir, self.relpath) | 1218 base_path = os.path.join(self.root_dir, self.relpath) |
| 1238 file_info = gclient.PrintableObject() | 1219 file_info = gclient.PrintableObject() |
| 1239 file_info.root = 'blah' | 1220 file_info.root = 'blah' |
| 1240 file_info.url = self.url | 1221 file_info.url = self.url |
| 1241 file_info.uuid = 'ABC' | 1222 file_info.uuid = 'ABC' |
| 1242 file_info.revision = 42 | 1223 file_info.revision = 42 |
| 1243 gclient.os.path.exists(os.path.join(base_path, '.git')).AndReturn(False) | 1224 gclient.os.path.exists(os.path.join(base_path, '.git')).AndReturn(False) |
| 1244 # Checkout. | 1225 # Checkout. |
| 1245 gclient.os.path.exists(base_path).AndReturn(False) | 1226 gclient.os.path.exists(base_path).AndReturn(False) |
| 1246 files_list = self.mox.CreateMockAnything() | 1227 files_list = self.mox.CreateMockAnything() |
| 1247 gclient.RunSVNAndGetFileList(['checkout', self.url, base_path], | 1228 gclient.RunSVNAndGetFileList(['checkout', self.url, base_path], |
| 1248 self.root_dir, files_list) | 1229 self.root_dir, files_list) |
| 1249 self.mox.ReplayAll() | 1230 self.mox.ReplayAll() |
| 1250 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, | 1231 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
| 1251 relpath=self.relpath) | 1232 relpath=self.relpath) |
| 1252 scm.update(options, (), files_list) | 1233 scm.update(options, (), files_list) |
| 1253 self.mox.VerifyAll() | 1234 self.mox.VerifyAll() |
| 1254 | 1235 |
| 1255 def testUpdateUpdate(self): | 1236 def testUpdateUpdate(self): |
| 1256 options = self.Options(verbose=True) | 1237 options = self.Options(verbose=True) |
| 1257 base_path = os.path.join(self.root_dir, self.relpath) | 1238 base_path = os.path.join(self.root_dir, self.relpath) |
| 1258 options.force = True | 1239 options.force = True |
| 1259 file_info = { | 1240 file_info = { |
| 1260 'Repository Root': 'blah', | 1241 'Repository Root': 'blah', |
| 1261 'URL': self.url, | 1242 'URL': self.url, |
| 1262 'UUID': 'ABC', | 1243 'UUID': 'ABC', |
| 1263 'Revision': 42, | 1244 'Revision': 42, |
| 1264 } | 1245 } |
| 1265 gclient.os.path.exists(os.path.join(base_path, '.git')).AndReturn(False) | 1246 gclient.os.path.exists(os.path.join(base_path, '.git')).AndReturn(False) |
| 1266 # Checkout or update. | 1247 # Checkout or update. |
| 1267 gclient.os.path.exists(base_path).AndReturn(True) | 1248 gclient.os.path.exists(base_path).AndReturn(True) |
| 1268 gclient.CaptureSVNInfo(os.path.join(base_path, "."), '.' | 1249 gclient.CaptureSVNInfo(os.path.join(base_path, "."), '.' |
| 1269 ).AndReturn(file_info) | 1250 ).AndReturn(file_info) |
| 1270 # Cheat a bit here. | 1251 # Cheat a bit here. |
| 1271 gclient.CaptureSVNInfo(file_info['URL'], '.').AndReturn(file_info) | 1252 gclient.CaptureSVNInfo(file_info['URL'], '.').AndReturn(file_info) |
| 1272 additional_args = [] | 1253 additional_args = [] |
| 1273 if options.manually_grab_svn_rev: | 1254 if options.manually_grab_svn_rev: |
| 1274 additional_args = ['--revision', str(file_info['Revision'])] | 1255 additional_args = ['--revision', str(file_info['Revision'])] |
| 1275 files_list = [] | 1256 files_list = [] |
| 1276 gclient.RunSVNAndGetFileList(['update', base_path] + additional_args, | 1257 gclient.RunSVNAndGetFileList(['update', base_path] + additional_args, |
| 1277 self.root_dir, files_list) | 1258 self.root_dir, files_list) |
| 1278 | 1259 |
| 1279 self.mox.ReplayAll() | 1260 self.mox.ReplayAll() |
| 1280 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, | 1261 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
| 1281 relpath=self.relpath) | 1262 relpath=self.relpath) |
| 1282 scm.update(options, (), files_list) | 1263 scm.update(options, (), files_list) |
| 1283 self.mox.VerifyAll() | 1264 self.mox.VerifyAll() |
| 1284 | 1265 |
| 1285 def testUpdateGit(self): | 1266 def testUpdateGit(self): |
| 1286 options = self.Options(verbose=True) | 1267 options = self.Options(verbose=True) |
| 1287 gclient.os.path.exists(os.path.join(self.root_dir, self.relpath, '.git') | 1268 gclient.os.path.exists(os.path.join(self.root_dir, self.relpath, '.git') |
| 1288 ).AndReturn(True) | 1269 ).AndReturn(True) |
| 1289 print("________ found .git directory; skipping %s" % self.relpath) | 1270 print("________ found .git directory; skipping %s" % self.relpath) |
| 1290 | 1271 |
| 1291 self.mox.ReplayAll() | 1272 self.mox.ReplayAll() |
| 1292 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, | 1273 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
| 1293 relpath=self.relpath) | 1274 relpath=self.relpath) |
| 1294 file_list = [] | 1275 file_list = [] |
| 1295 scm.update(options, self.args, file_list) | 1276 scm.update(options, self.args, file_list) |
| 1296 self.mox.VerifyAll() | 1277 self.mox.VerifyAll() |
| 1297 | 1278 |
| 1298 def testGetSVNFileInfo(self): | 1279 def testGetSVNFileInfo(self): |
| 1299 xml_text = r"""<?xml version="1.0"?> | 1280 xml_text = r"""<?xml version="1.0"?> |
| 1300 <info> | 1281 <info> |
| 1301 <entry kind="file" path="%s" revision="14628"> | 1282 <entry kind="file" path="%s" revision="14628"> |
| 1302 <url>http://src.chromium.org/svn/trunk/src/chrome/app/d</url> | 1283 <url>http://src.chromium.org/svn/trunk/src/chrome/app/d</url> |
| 1303 <repository><root>http://src.chromium.org/svn</root></repository> | 1284 <repository><root>http://src.chromium.org/svn</root></repository> |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1496 """ | 1477 """ |
| 1497 gclient.CaptureSVN = CaptureSVNMock | 1478 gclient.CaptureSVN = CaptureSVNMock |
| 1498 info = gclient.CaptureSVNStatus(None) | 1479 info = gclient.CaptureSVNStatus(None) |
| 1499 self.assertEquals(info, []) | 1480 self.assertEquals(info, []) |
| 1500 | 1481 |
| 1501 | 1482 |
| 1502 if __name__ == '__main__': | 1483 if __name__ == '__main__': |
| 1503 unittest.main() | 1484 unittest.main() |
| 1504 | 1485 |
| 1505 # vim: ts=2:sw=2:tw=80:et: | 1486 # vim: ts=2:sw=2:tw=80:et: |
| OLD | NEW |