17 import os |
17 import os |
18 import unittest |
18 import unittest |
19 from unittest import TestCase |
19 from unittest import TestCase |
20 import imp |
20 import imp |
21 import shutil |
21 import shutil |
22 from mercurial import util |
22 from mercurial import util, simplemerge |
23 |
23 |
24 # copy simplemerge to the cwd to avoid creating a .pyc file in the source tree |
24 # bzr compatible interface, for the tests |
25 shutil.copyfile(os.path.join(os.environ['TESTDIR'], os.path.pardir, |
25 class Merge3(simplemerge.Merge3Text): |
26 'contrib', 'simplemerge'), |
26 """3-way merge of texts. |
27 'simplemerge.py') |
27 |
28 simplemerge = imp.load_source('simplemerge', 'simplemerge.py') |
28 Given BASE, OTHER, THIS, tries to produce a combined text |
29 Merge3 = simplemerge.Merge3 |
29 incorporating the changes from both BASE->OTHER and BASE->THIS. |
|
30 All three will typically be sequences of lines.""" |
|
31 def __init__(self, base, a, b): |
|
32 basetext = '\n'.join([i.strip('\n') for i in base] + ['']) |
|
33 atext = '\n'.join([i.strip('\n') for i in a] + ['']) |
|
34 btext = '\n'.join([i.strip('\n') for i in b] + ['']) |
|
35 if util.binary(basetext) or util.binary(atext) or util.binary(btext): |
|
36 raise util.Abort("don't know how to merge binary files") |
|
37 simplemerge.Merge3Text.__init__(self, basetext, atext, btext, |
|
38 base, a, b) |
|
39 |
30 CantReprocessAndShowBase = simplemerge.CantReprocessAndShowBase |
40 CantReprocessAndShowBase = simplemerge.CantReprocessAndShowBase |
31 |
41 |
32 def split_lines(t): |
42 def split_lines(t): |
33 from cStringIO import StringIO |
43 from cStringIO import StringIO |
34 return StringIO(t).readlines() |
44 return StringIO(t).readlines() |