Index: tests/fake_repos.py |
diff --git a/tests/fake_repos.py b/tests/fake_repos.py |
index afbbe4e89d99eaabf79eba4ccca3b725f7d29486..55fd976b6deacd3dfb2729c250611c70477d652c 100755 |
--- a/tests/fake_repos.py |
+++ b/tests/fake_repos.py |
@@ -246,6 +246,12 @@ class FakeReposBase(object): |
self.svnserve = None |
self.gitdaemon = None |
self.common_init = False |
+ self.repos_dir = None |
+ self.git_root = None |
+ self.svn_checkout = None |
+ self.svn_repo = None |
+ self.git_dirty = False |
+ self.svn_dirty = False |
def trial_dir(self): |
if not self.TRIAL_DIR: |
@@ -256,17 +262,43 @@ class FakeReposBase(object): |
def setUp(self): |
"""All late initialization comes here. |
- Note that it deletes all trial_dir() and not only repos_dir.""" |
+ Note that it deletes all trial_dir() and not only repos_dir. |
+ """ |
+ self.cleanup_dirt() |
if not self.common_init: |
self.common_init = True |
self.repos_dir = os.path.join(self.trial_dir(), 'repos') |
self.git_root = join(self.repos_dir, 'git') |
- self.svn_root = join(self.repos_dir, 'svn_checkout') |
+ self.svn_checkout = join(self.repos_dir, 'svn_checkout') |
+ self.svn_repo = join(self.repos_dir, 'svn') |
addKill() |
rmtree(self.trial_dir()) |
os.makedirs(self.repos_dir) |
atexit.register(self.tearDown) |
+ def cleanup_dirt(self): |
+ """For each dirty repository, regenerate it.""" |
+ if self.svnserve and self.svn_dirty: |
+ logging.debug('Killing svnserve pid %s' % self.svnserve.pid) |
+ self.svnserve.kill() |
+ self.svnserve = None |
+ if not self.SHOULD_LEAK: |
+ logging.debug('Removing dirty %s' % self.svn_repo) |
+ rmtree(self.svn_repo) |
+ logging.debug('Removing dirty %s' % self.svn_checkout) |
+ rmtree(self.svn_checkout) |
+ else: |
+ logging.warning('Using both leaking checkout and dirty checkout') |
+ if self.gitdaemon and self.git_dirty: |
+ logging.debug('Killing git-daemon pid %s' % self.gitdaemon.pid) |
+ self.gitdaemon.kill() |
+ self.gitdaemon = None |
+ if not self.SHOULD_LEAK: |
+ logging.debug('Removing dirty %s' % self.git_root) |
+ rmtree(self.git_root) |
+ else: |
+ logging.warning('Using both leaking checkout and dirty checkout') |
+ |
def tearDown(self): |
if self.svnserve: |
logging.debug('Killing svnserve pid %s' % self.svnserve.pid) |
@@ -299,36 +331,36 @@ class FakeReposBase(object): |
def setUpSVN(self): |
"""Creates subversion repositories and start the servers.""" |
+ self.setUp() |
if self.svnserve: |
return True |
- self.setUp() |
- root = join(self.repos_dir, 'svn') |
try: |
- check_call(['svnadmin', 'create', root]) |
+ check_call(['svnadmin', 'create', self.svn_repo]) |
except OSError: |
return False |
- write(join(root, 'conf', 'svnserve.conf'), |
+ write(join(self.svn_repo, 'conf', 'svnserve.conf'), |
'[general]\n' |
'anon-access = read\n' |
'auth-access = write\n' |
'password-db = passwd\n') |
text = '[users]\n' |
text += ''.join('%s = %s\n' % (usr, pwd) for usr, pwd in self.USERS) |
- write(join(root, 'conf', 'passwd'), text) |
+ write(join(self.svn_repo, 'conf', 'passwd'), text) |
# Start the daemon. |
cmd = ['svnserve', '-d', '--foreground', '-r', self.repos_dir] |
if self.HOST == '127.0.0.1': |
cmd.append('--listen-host=127.0.0.1') |
- self.svnserve = Popen(cmd, cwd=root) |
+ self.svnserve = Popen(cmd, cwd=self.svn_repo) |
self.populateSvn() |
+ self.svn_dirty = False |
return True |
def setUpGIT(self): |
"""Creates git repositories and start the servers.""" |
+ self.setUp() |
if self.gitdaemon: |
return True |
- self.setUp() |
if sys.platform == 'win32': |
return False |
for repo in ['repo_%d' % r for r in range(1, self.NB_GIT_REPOS + 1)]: |
@@ -341,11 +373,12 @@ class FakeReposBase(object): |
cmd.append('--listen=127.0.0.1') |
logging.debug(cmd) |
self.gitdaemon = Popen(cmd, cwd=self.repos_dir) |
+ self.git_dirty = False |
return True |
def _commit_svn(self, tree): |
- self._genTree(self.svn_root, tree) |
- commit_svn(self.svn_root, self.USERS[0][0], self.USERS[0][1]) |
+ self._genTree(self.svn_checkout, tree) |
+ commit_svn(self.svn_checkout, self.USERS[0][0], self.USERS[0][1]) |
if self.svn_revs and self.svn_revs[-1]: |
new_tree = self.svn_revs[-1].copy() |
new_tree.update(tree) |
@@ -378,10 +411,10 @@ class FakeRepos(FakeReposBase): |
def populateSvn(self): |
"""Creates a few revisions of changes including DEPS files.""" |
# Repos |
- check_call(['svn', 'checkout', 'svn://127.0.0.1/svn', self.svn_root, '-q', |
- '--non-interactive', '--no-auth-cache', |
+ check_call(['svn', 'checkout', 'svn://127.0.0.1/svn', self.svn_checkout, |
+ '-q', '--non-interactive', '--no-auth-cache', |
'--username', self.USERS[0][0], '--password', self.USERS[0][1]]) |
- assert os.path.isdir(join(self.svn_root, '.svn')) |
+ assert os.path.isdir(join(self.svn_checkout, '.svn')) |
def file_system(rev, DEPS): |
fs = { |
'origin': 'svn@%(rev)d\n', |
@@ -694,7 +727,8 @@ def main(argv): |
# Kind of hack. |
if '-l' in sys.argv: |
- FakeRepos.SHOULD_LEAK = True |
+ FakeReposBase.SHOULD_LEAK = True |
+ print 'Leaking!' |
sys.argv.remove('-l') |