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

Side by Side Diff: tests/fake_repos.py

Issue 2487003: Fix gclient_smoketest for svn 1.5 and python 2.5 (Closed)
Patch Set: Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | tests/gclient_smoketest.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 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2010 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 """Generate fake repositories for testing.""" 6 """Generate fake repositories for testing."""
7 7
8 import atexit 8 import atexit
9 import errno 9 import errno
10 import logging 10 import logging
11 import os 11 import os
12 import pprint 12 import pprint
13 import re 13 import re
14 import stat 14 import stat
15 import subprocess 15 import subprocess
16 import sys 16 import sys
17 import time 17 import time
18 import unittest 18 import unittest
19 19
20 20
21 ## Utility functions 21 ## Utility functions
22 22
23 23
24 def addKill(): 24 def addKill():
25 """Add kill() method to subprocess.Popen for python <2.6""" 25 """Add kill() method to subprocess.Popen for python <2.6"""
26 if getattr(subprocess.Popen, 'kill', None): 26 if getattr(subprocess.Popen, 'kill', None):
27 return 27 return
28 if sys.platform.startswith('win'): 28 if sys.platform == 'win32':
29 def kill_win(process): 29 def kill_win(process):
30 import win32process 30 import win32process
31 return win32process.TerminateProcess(process._handle, -1) 31 return win32process.TerminateProcess(process._handle, -1)
32 subprocess.kill = kill_win 32 subprocess.Popen.kill = kill_win
33 else: 33 else:
34 def kill_nix(process): 34 def kill_nix(process):
35 import signal 35 import signal
36 return os.kill(process.pid, signal.SIGKILL) 36 return os.kill(process.pid, signal.SIGKILL)
37 subprocess.kill = kill_nix 37 subprocess.Popen.kill = kill_nix
38 38
39 39
40 def rmtree(*path): 40 def rmtree(*path):
41 """Recursively removes a directory, even if it's marked read-only. 41 """Recursively removes a directory, even if it's marked read-only.
42 42
43 Remove the directory located at *path, if it exists. 43 Remove the directory located at *path, if it exists.
44 44
45 shutil.rmtree() doesn't work on Windows if any of the files or directories 45 shutil.rmtree() doesn't work on Windows if any of the files or directories
46 are read-only, which svn repositories and some .svn files are. We need to 46 are read-only, which svn repositories and some .svn files are. We need to
47 be able to force the files to be writable (i.e., deletable) as we traverse 47 be able to force the files to be writable (i.e., deletable) as we traverse
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 168
169 169
170 def commit_svn(repo): 170 def commit_svn(repo):
171 """Commits the changes and returns the new revision number.""" 171 """Commits the changes and returns the new revision number."""
172 # Basic parsing. 172 # Basic parsing.
173 to_add = [] 173 to_add = []
174 to_remove = [] 174 to_remove = []
175 for item in Popen(['svn', 'status'], 175 for item in Popen(['svn', 'status'],
176 cwd=repo).communicate()[0].splitlines(False): 176 cwd=repo).communicate()[0].splitlines(False):
177 if item[0] == '?': 177 if item[0] == '?':
178 to_add.append(item[8:]) 178 to_add.append(item[7:].strip())
Mandeep Singh Baines 2010/06/02 01:33:01 This seems fragile. How about: item.split()[1] T
179 elif item[0] == '!': 179 elif item[0] == '!':
180 to_remove.append(item[8:]) 180 to_remove.append(item[7:].strip())
181 if to_add: 181 if to_add:
182 check_call(['svn', 'add', '--no-auto-props', '-q'] + to_add, cwd=repo) 182 check_call(['svn', 'add', '--no-auto-props', '-q'] + to_add, cwd=repo)
183 if to_remove: 183 if to_remove:
184 check_call(['svn', 'remove', '-q'] + to_remove, cwd=repo) 184 check_call(['svn', 'remove', '-q'] + to_remove, cwd=repo)
185 out = Popen(['svn', 'commit', repo, '-m', 'foo', '--non-interactive', 185 proc = Popen(['svn', 'commit', repo, '-m', 'foo', '--non-interactive',
186 '--no-auth-cache', '--username', 'user1', '--password', 'foo'], 186 '--no-auth-cache', '--username', 'user1', '--password', 'foo'],
187 cwd=repo).communicate()[0] 187 cwd=repo)
188 rev = re.search(r'revision (\d+).', out).group(1) 188 out, err = proc.communicate()
189 match = re.search(r'revision (\d+).', out)
190 if not match:
191 raise Exception('Commit failed', out, err, proc.returncode)
192 rev = match.group(1)
189 st = Popen(['svn', 'status'], cwd=repo).communicate()[0] 193 st = Popen(['svn', 'status'], cwd=repo).communicate()[0]
190 assert len(st) == 0, st 194 assert len(st) == 0, st
191 logging.debug('At revision %s' % rev) 195 logging.debug('At revision %s' % rev)
192 return rev 196 return rev
193 197
194 198
195 def commit_git(repo): 199 def commit_git(repo):
196 """Commits the changes and returns the new hash.""" 200 """Commits the changes and returns the new hash."""
197 check_call(['git', 'add', '-A', '-f'], cwd=repo) 201 check_call(['git', 'add', '-A', '-f'], cwd=repo)
198 check_call(['git', 'commit', '-q', '--message', 'foo'], cwd=repo) 202 check_call(['git', 'commit', '-q', '--message', 'foo'], cwd=repo)
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 'password-db = passwd\n') 312 'password-db = passwd\n')
309 write(join(root, 'conf', 'passwd'), 313 write(join(root, 'conf', 'passwd'),
310 '[users]\n' 314 '[users]\n'
311 'user1 = foo\n' 315 'user1 = foo\n'
312 'user2 = bar\n') 316 'user2 = bar\n')
313 317
314 # Start the daemon. 318 # Start the daemon.
315 cmd = ['svnserve', '-d', '--foreground', '-r', self.repos_dir] 319 cmd = ['svnserve', '-d', '--foreground', '-r', self.repos_dir]
316 if self.HOST == '127.0.0.1': 320 if self.HOST == '127.0.0.1':
317 cmd.append('--listen-host=127.0.0.1') 321 cmd.append('--listen-host=127.0.0.1')
318 logging.debug(cmd)
319 self.svnserve = Popen(cmd, cwd=root) 322 self.svnserve = Popen(cmd, cwd=root)
320 self.populateSvn() 323 self.populateSvn()
321 324
322 def populateSvn(self): 325 def populateSvn(self):
323 """Creates a few revisions of changes including DEPS files.""" 326 """Creates a few revisions of changes including DEPS files."""
324 # Repos 327 # Repos
325 check_call(['svn', 'checkout', 'svn://127.0.0.1/svn', self.svn_root, '-q', 328 check_call(['svn', 'checkout', 'svn://127.0.0.1/svn', self.svn_root, '-q',
326 '--non-interactive', '--no-auth-cache', 329 '--non-interactive', '--no-auth-cache',
327 '--username', 'user1', '--password', 'foo']) 330 '--username', 'user1', '--password', 'foo'])
328 assert os.path.isdir(join(self.svn_root, '.svn')) 331 assert os.path.isdir(join(self.svn_root, '.svn'))
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 fake.setUp() 580 fake.setUp()
578 print('Fake setup, press enter to quit or Ctrl-C to keep the checkouts.') 581 print('Fake setup, press enter to quit or Ctrl-C to keep the checkouts.')
579 sys.stdin.readline() 582 sys.stdin.readline()
580 except KeyboardInterrupt: 583 except KeyboardInterrupt:
581 fake.SHOULD_LEAK = True 584 fake.SHOULD_LEAK = True
582 return 0 585 return 0
583 586
584 587
585 if __name__ == '__main__': 588 if __name__ == '__main__':
586 sys.exit(main(sys.argv)) 589 sys.exit(main(sys.argv))
OLDNEW
« no previous file with comments | « no previous file | tests/gclient_smoketest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698