sapling/tests/test_push_dirs.py
Augie Fackler fd079409fb push: Fix a bug in deletion of an entire tree.
This bug meant that if an entire subtree of the repo was
deleted and there were files at varying levels of the
hierarchy, then some of the files at higher levels
might escape deletion when the revision was pushed to svn.
2009-05-08 16:26:33 -05:00

97 lines
3.9 KiB
Python

import unittest
import test_util
class TestPushDirectories(test_util.TestBase):
def setUp(self):
test_util.TestBase.setUp(self)
test_util.load_fixture_and_fetch('emptyrepo.svndump',
self.repo_path,
self.wc_path)
def test_push_dirs(self):
changes = [
# Single file in single directory
('d1/a', 'd1/a', 'a\n'),
# Two files in one directory
('d2/a', 'd2/a', 'a\n'),
('d2/b', 'd2/b', 'a\n'),
# Single file in empty directory hierarchy
('d31/d32/d33/d34/a', 'd31/d32/d33/d34/a', 'a\n'),
('d31/d32/a', 'd31/d32/a', 'a\n'),
]
self.commitchanges(changes)
self.pushrevisions()
self.assertEqual(self.svnls('trunk'),
['d1', 'd1/a', 'd2', 'd2/a', 'd2/b', 'd31',
'd31/d32', 'd31/d32/a', 'd31/d32/d33',
'd31/d32/d33/d34', 'd31/d32/d33/d34/a'])
# Add one revision with changed files only, no directory addition
# or deletion.
changes = [
('d1/a', 'd1/a', 'aa\n'),
('d2/a', 'd2/a', 'aa\n'),
]
self.commitchanges(changes)
self.pushrevisions()
changes = [
# Remove single file in single directory
('d1/a', None, None),
# Remove one file out of two
('d2/a', None, None),
# Removing this file should remove one empty parent dir too
('d31/d32/d33/d34/a', None, None),
]
self.commitchanges(changes)
self.pushrevisions()
self.assertEqual(self.svnls('trunk'),
['d2', 'd2/b', 'd31', 'd31/d32', 'd31/d32/a', ])
class TestPushDirsNotAtRoot(test_util.TestBase):
def test_push_new_dir_project_root_not_repo_root(self):
test_util.load_fixture_and_fetch('fetch_missing_files_subdir.svndump',
self.repo_path,
self.wc_path,
subdir='foo')
changes = [('magic_new/a', 'magic_new/a', 'ohai', ),
]
self.commitchanges(changes)
self.pushrevisions()
self.assertEqual(self.svnls('foo/trunk'), ['bar',
'bar/alpha',
'bar/beta',
'bar/delta',
'bar/gamma',
'foo',
'magic_new',
'magic_new/a'])
def test_push_new_file_existing_dir_root_not_repo_root(self):
test_util.load_fixture_and_fetch('empty_dir_in_trunk_not_repo_root.svndump',
self.repo_path,
self.wc_path,
subdir='project')
changes = [('narf/a', 'narf/a', 'ohai', ),
]
self.commitchanges(changes)
self.assertEqual(self.svnls('project/trunk'), ['a',
'narf',])
self.pushrevisions()
self.assertEqual(self.svnls('project/trunk'), ['a',
'narf',
'narf/a'])
changes = [('narf/a', None, None, ),
]
self.commitchanges(changes)
self.pushrevisions()
self.assertEqual(self.svnls('project/trunk'), ['a' ,])
def suite():
all = [unittest.TestLoader().loadTestsFromTestCase(TestPushDirectories),
]
return unittest.TestSuite(all)