110 line1 and line2 are text1 and text2 split with splitnewlines() if |
110 line1 and line2 are text1 and text2 split with splitnewlines() if |
111 they are already available. |
111 they are already available. |
112 """ |
112 """ |
113 if opts is None: |
113 if opts is None: |
114 opts = defaultopts |
114 opts = defaultopts |
115 if lines1 is None: |
|
116 lines1 = splitnewlines(text1) |
|
117 if lines2 is None: |
|
118 lines2 = splitnewlines(text2) |
|
119 if opts.ignorews or opts.ignorewsamount: |
115 if opts.ignorews or opts.ignorewsamount: |
120 text1 = wsclean(opts, text1, False) |
116 text1 = wsclean(opts, text1, False) |
121 text2 = wsclean(opts, text2, False) |
117 text2 = wsclean(opts, text2, False) |
122 diff = bdiff.blocks(text1, text2) |
118 diff = bdiff.blocks(text1, text2) |
123 for i, s1 in enumerate(diff): |
119 for i, s1 in enumerate(diff): |
128 if i > 0: |
124 if i > 0: |
129 s = diff[i - 1] |
125 s = diff[i - 1] |
130 else: |
126 else: |
131 s = [0, 0, 0, 0] |
127 s = [0, 0, 0, 0] |
132 s = [s[1], s1[0], s[3], s1[2]] |
128 s = [s[1], s1[0], s[3], s1[2]] |
133 old = lines1[s[0]:s[1]] |
|
134 new = lines2[s[2]:s[3]] |
|
135 |
129 |
136 # bdiff sometimes gives huge matches past eof, this check eats them, |
130 # bdiff sometimes gives huge matches past eof, this check eats them, |
137 # and deals with the special first match case described above |
131 # and deals with the special first match case described above |
138 if old or new: |
132 if s[0] != s[1] or s[2] != s[3]: |
139 type = '!' |
133 type = '!' |
140 if opts.ignoreblanklines: |
134 if opts.ignoreblanklines: |
141 cold = wsclean(opts, "".join(old)) |
135 if lines1 is None: |
142 cnew = wsclean(opts, "".join(new)) |
136 lines1 = splitnewlines(text1) |
143 if cold == cnew: |
137 if lines2 is None: |
|
138 lines2 = splitnewlines(text2) |
|
139 old = wsclean(opts, "".join(lines1[s[0]:s[1]])) |
|
140 new = wsclean(opts, "".join(lines2[s[2]:s[3]])) |
|
141 if old == new: |
144 type = '~' |
142 type = '~' |
145 yield s, type |
143 yield s, type |
146 yield s1, '=' |
144 yield s1, '=' |
147 |
145 |
148 def diffline(revs, a, b, opts): |
146 def diffline(revs, a, b, opts): |