2010-07-14 17:39:18 +04:00
|
|
|
import test_util
|
|
|
|
|
2008-11-05 15:37:08 +03:00
|
|
|
import sys
|
|
|
|
|
2008-11-15 01:18:24 +03:00
|
|
|
class TestPushRenames(test_util.TestBase):
|
2013-08-09 21:30:25 +04:00
|
|
|
obsolete_mode_tests = True
|
2013-08-10 01:46:00 +04:00
|
|
|
stupid_mode_tests = True
|
2013-08-09 21:30:25 +04:00
|
|
|
|
2008-11-05 15:37:08 +03:00
|
|
|
def setUp(self):
|
2008-11-15 01:18:24 +03:00
|
|
|
test_util.TestBase.setUp(self)
|
2013-08-10 01:46:00 +04:00
|
|
|
self.repo_path = self.load_and_fetch('pushrenames.svndump')[1]
|
2008-11-05 15:37:08 +03:00
|
|
|
|
|
|
|
def _debug_print_copies(self, ctx):
|
|
|
|
w = sys.stderr.write
|
|
|
|
for f in ctx.files():
|
|
|
|
if f not in ctx:
|
|
|
|
w('R %s\n' % f)
|
|
|
|
else:
|
|
|
|
w('U %s %r\n' % (f, ctx[f].data()))
|
|
|
|
if ctx[f].renamed():
|
|
|
|
w('%s copied from %s\n' % (f, ctx[f].renamed()[0]))
|
|
|
|
|
2008-11-15 01:18:24 +03:00
|
|
|
def test_push_renames(self):
|
2008-11-05 15:37:08 +03:00
|
|
|
changes = [
|
|
|
|
# Regular copy of a single file
|
|
|
|
('a', 'a2', None),
|
|
|
|
# Copy and update of target
|
|
|
|
('a', 'a3', 'aa\n'),
|
|
|
|
# Regular move of a single file
|
|
|
|
('b', 'b2', None),
|
|
|
|
('b', None, None),
|
|
|
|
# Regular move and update of target
|
|
|
|
('c', 'c2', 'c\nc\n'),
|
|
|
|
('c', None, None),
|
|
|
|
# Copy and update of source and targets
|
|
|
|
('d', 'd2', 'd\nd2\n'),
|
|
|
|
('d', 'd', 'd\nd\n'),
|
|
|
|
# Double copy and removal (aka copy and move)
|
|
|
|
('e', 'e2', 'e\ne2\n'),
|
|
|
|
('e', 'e3', 'e\ne3\n'),
|
|
|
|
('e', None, None),
|
|
|
|
]
|
2008-11-15 01:18:24 +03:00
|
|
|
self.commitchanges(changes)
|
|
|
|
self.pushrevisions()
|
2008-11-05 15:37:08 +03:00
|
|
|
tip = self.repo['tip']
|
|
|
|
# self._debug_print_copies(tip)
|
|
|
|
self.assertchanges(changes, tip)
|
|
|
|
|
2009-12-24 22:38:06 +03:00
|
|
|
def test_push_rename_with_space(self):
|
|
|
|
changes = [
|
|
|
|
('random/dir with space/file with space',
|
|
|
|
'random/dir with space/file with space',
|
|
|
|
'file contents'),
|
|
|
|
]
|
|
|
|
self.commitchanges(changes)
|
|
|
|
|
|
|
|
changes = [
|
|
|
|
('random/dir with space/file with space',
|
|
|
|
'random2/dir with space/file with space',
|
|
|
|
None),
|
|
|
|
('random/dir with space/file with space',
|
|
|
|
None, None),
|
|
|
|
]
|
|
|
|
self.commitchanges(changes)
|
|
|
|
self.pushrevisions()
|
2015-03-28 02:44:05 +03:00
|
|
|
self.assertEqual(sorted(self.repo['tip'].manifest().keys()),
|
|
|
|
['a', 'b', 'c', 'd', 'e',
|
2009-12-24 22:38:06 +03:00
|
|
|
'random2/dir with space/file with space'])
|
|
|
|
|
2009-05-09 01:26:33 +04:00
|
|
|
def test_push_rename_tree(self):
|
|
|
|
changes = [
|
|
|
|
('geek/alpha', 'geek/alpha', 'content',),
|
|
|
|
('geek/beta', 'geek/beta', 'content',),
|
|
|
|
('geek/delta', 'geek/delta', 'content',),
|
|
|
|
('geek/gamma', 'geek/gamma', 'content',),
|
|
|
|
('geek/later/pi', 'geek/later/pi', 'content geek/later/pi',),
|
2011-10-12 11:35:25 +04:00
|
|
|
('geek/later/rho', 'geek/later/rho', 'content geek/later/rho',),
|
|
|
|
('geek/other/blah', 'geek/other/blah', 'content geek/other/blah',),
|
|
|
|
('geek/other/another/layer', 'geek/other/another/layer', 'content deep file',),
|
2009-05-09 01:26:33 +04:00
|
|
|
]
|
|
|
|
|
|
|
|
self.commitchanges(changes)
|
|
|
|
self.pushrevisions()
|
|
|
|
self.assertchanges(changes, self.repo['tip'])
|
|
|
|
|
|
|
|
changes = [
|
|
|
|
# rename (copy + remove) all of geek to greek
|
2011-10-12 11:35:25 +04:00
|
|
|
('geek/alpha', 'greek/alpha', None,),
|
|
|
|
('geek/beta', 'greek/beta', None,),
|
|
|
|
('geek/delta', 'greek/delta', None,),
|
|
|
|
('geek/gamma', 'greek/gamma', None,),
|
|
|
|
('geek/later/pi', 'greek/later/pi', None,),
|
|
|
|
('geek/later/rho', 'greek/later/rho', None,),
|
|
|
|
('geek/other/blah', 'greek/other/blah', None,),
|
|
|
|
('geek/other/another/layer', 'greek/other/another/layer', None,),
|
2009-05-09 01:26:33 +04:00
|
|
|
|
2011-10-12 11:35:25 +04:00
|
|
|
('geek/alpha', None, None,),
|
|
|
|
('geek/beta', None, None,),
|
|
|
|
('geek/delta', None, None,),
|
|
|
|
('geek/gamma', None, None,),
|
|
|
|
('geek/later/pi', None, None,),
|
|
|
|
('geek/later/rho', None, None,),
|
|
|
|
('geek/other/blah', None, None,),
|
|
|
|
('geek/other/another/layer', None, None,),
|
2009-05-09 01:26:33 +04:00
|
|
|
]
|
|
|
|
self.commitchanges(changes)
|
|
|
|
self.pushrevisions()
|
|
|
|
assert reduce(lambda x, y: x and y,
|
2012-04-19 20:29:30 +04:00
|
|
|
('geek' not in f for f in test_util.svnls(self.repo_path, 'trunk'))), (
|
2009-05-09 01:26:33 +04:00
|
|
|
'This failure means rename of an entire tree is broken.'
|
|
|
|
' There is a print on the preceding line commented out '
|
|
|
|
'that should help you.')
|