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 (
32
from bzrlib.errors import BinaryFile, NoDiff
35
from bzrlib.errors import BinaryFile, NoDiff, ExecutableMissing
33
36
import bzrlib.osutils as osutils
34
37
import bzrlib.patiencediff
35
38
import bzrlib._patiencediff_py
1233
1237
from bzrlib._patiencediff_py import recurse_matches_py
1234
1238
self.assertIs(recurse_matches_py,
1235
1239
bzrlib.patiencediff.recurse_matches)
1242
class TestDiffFromTool(TestCaseWithTransport):
1244
def test_from_string(self):
1245
diff_obj = DiffFromTool.from_string('diff', None, None, None)
1246
self.addCleanup(diff_obj.finish)
1247
self.assertEqual(['diff', '%(old_path)s', '%(new_path)s'],
1248
diff_obj.command_template)
1250
def test_from_string_u5(self):
1251
diff_obj = DiffFromTool.from_string('diff -u\\ 5', None, None, None)
1252
self.addCleanup(diff_obj.finish)
1253
self.assertEqual(['diff', '-u 5', '%(old_path)s', '%(new_path)s'],
1254
diff_obj.command_template)
1255
self.assertEqual(['diff', '-u 5', 'old-path', 'new-path'],
1256
diff_obj._get_command('old-path', 'new-path'))
1258
def test_execute(self):
1260
diff_obj = DiffFromTool(['python', '-c',
1261
'print "%(old_path)s %(new_path)s"'],
1263
self.addCleanup(diff_obj.finish)
1264
diff_obj._execute('old', 'new')
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))
1276
def test_prepare_files(self):
1278
tree = self.make_branch_and_tree('tree')
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')])
1284
old_tree = tree.basis_tree()
1285
old_tree.lock_read()
1286
self.addCleanup(old_tree.unlock)
1288
self.addCleanup(tree.unlock)
1289
diff_obj = DiffFromTool(['python', '-c',
1290
'print "%(old_path)s %(new_path)s"'],
1291
old_tree, tree, output)
1292
self.addCleanup(diff_obj.finish)
1293
self.assertContainsRe(diff_obj._root, 'bzr-diff-[^/]*')
1294
old_path, new_path = diff_obj._prepare_files('file-id', 'oldname',
1296
self.assertContainsRe(old_path, 'old/oldname$')
1297
self.assertEqual(0, os.stat(old_path).st_mtime)
1298
self.assertContainsRe(new_path, 'new/newname$')
1299
self.assertFileEqual('oldcontent', old_path)
1300
self.assertFileEqual('newcontent', new_path)
1301
if osutils.has_symlinks():
1302
self.assertTrue(os.path.samefile('tree/newname', new_path))
1303
# make sure we can create files with the same parent directories
1304
diff_obj._prepare_files('file-id', 'oldname2', 'newname2')