15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
19
from cStringIO import StringIO
21
22
from tempfile import TemporaryFile
24
from bzrlib import tests
23
25
from bzrlib.diff import (
33
from bzrlib.errors import BinaryFile, NoDiff
35
from bzrlib.errors import BinaryFile, NoDiff, ExecutableMissing
34
36
import bzrlib.osutils as osutils
35
37
import bzrlib.patiencediff
36
38
import bzrlib._patiencediff_py
663
665
' \@\@\n-old\n\+new\n\n')
665
667
def test_diff_kind_change(self):
668
self.requireFeature(tests.SymlinkFeature)
666
669
self.build_tree_contents([('old-tree/olddir/',),
667
670
('old-tree/olddir/oldfile', 'old\n')])
668
671
self.old_tree.add('olddir')
1243
1246
self.addCleanup(diff_obj.finish)
1244
1247
self.assertEqual(['diff', '%(old_path)s', '%(new_path)s'],
1245
1248
diff_obj.command_template)
1250
def test_from_string_u5(self):
1246
1251
diff_obj = DiffFromTool.from_string('diff -u\\ 5', None, None, None)
1252
self.addCleanup(diff_obj.finish)
1247
1253
self.assertEqual(['diff', '-u 5', '%(old_path)s', '%(new_path)s'],
1248
1254
diff_obj.command_template)
1249
1255
self.assertEqual(['diff', '-u 5', 'old-path', 'new-path'],
1256
1262
None, None, output)
1257
1263
self.addCleanup(diff_obj.finish)
1258
1264
diff_obj._execute('old', 'new')
1259
self.assertEqual(output.getvalue(), 'old new\n')
1265
self.assertEqual(output.getvalue().rstrip(), 'old new')
1267
def test_excute_missing(self):
1268
diff_obj = DiffFromTool(['a-tool-which-is-unlikely-to-exist'],
1270
self.addCleanup(diff_obj.finish)
1271
e = self.assertRaises(ExecutableMissing, diff_obj._execute, 'old',
1273
self.assertEqual('a-tool-which-is-unlikely-to-exist could not be found'
1274
' on this machine', str(e))
1261
1276
def test_prepare_files(self):
1262
1277
output = StringIO()
1263
1278
tree = self.make_branch_and_tree('tree')
1264
self.build_tree_contents([('tree/file', 'oldcontent')])
1265
tree.add('file', 'file-id')
1266
tree.commit('old tree')
1267
self.build_tree_contents([('tree/file', 'newcontent')])
1279
self.build_tree_contents([('tree/oldname', 'oldcontent')])
1280
tree.add('oldname', 'file-id')
1281
tree.commit('old tree', timestamp=0)
1282
tree.rename_one('oldname', 'newname')
1283
self.build_tree_contents([('tree/newname', 'newcontent')])
1268
1284
old_tree = tree.basis_tree()
1269
1285
old_tree.lock_read()
1270
1286
self.addCleanup(old_tree.unlock)
1288
self.addCleanup(tree.unlock)
1271
1289
diff_obj = DiffFromTool(['python', '-c',
1272
1290
'print "%(old_path)s %(new_path)s"'],
1273
1291
old_tree, tree, output)
1276
1294
old_path, new_path = diff_obj._prepare_files('file-id', 'oldname',
1278
1296
self.assertContainsRe(old_path, 'old/oldname$')
1297
self.assertEqual(0, os.stat(old_path).st_mtime)
1279
1298
self.assertContainsRe(new_path, 'new/newname$')
1280
1299
self.assertFileEqual('oldcontent', old_path)
1281
1300
self.assertFileEqual('newcontent', new_path)
1301
if osutils.has_symlinks():
1302
self.assertTrue(os.path.samefile('tree/newname', new_path))
1282
1303
# make sure we can create files with the same parent directories
1283
1304
diff_obj._prepare_files('file-id', 'oldname2', 'newname2')