@@ -285,6 +285,7 @@ def merge_line_list(mod_text, vanilla_text, gen_text):
285285 mod_ops = SequenceMatcher (None , vanilla_text , mod_text ).get_opcodes ()
286286 outfile = []
287287 for block in three_way_merge (gen_text , gen_ops , mod_text , mod_ops ):
288+ log .d ('writing block' )
288289 outfile .extend (block )
289290 status = outfile .pop ()
290291 return status , outfile
@@ -293,39 +294,62 @@ def three_way_merge(gen_text, van_gen_ops, mod_text, van_mod_ops):
293294 """Yield blocks of lines from a three-way-merge. Last block is status."""
294295 status , cur_v , mod_i2 , gen_i2 = 0 , 0 , 1 , 1
295296 while van_mod_ops and van_gen_ops :
297+ log .d ('before pop' )
298+ log .d ('gen ops: ' + str (van_gen_ops ))
299+ log .d ('mod ops: ' + str (van_mod_ops ))
300+ log .d ('mod_i2: ' + str (mod_i2 ) + ' gen_i2: ' + str (gen_i2 ) + ' cur_v: ' + str (cur_v ))
296301 if mod_i2 <= cur_v :
302+ log .d ('pop mod' )
297303 van_mod_ops .pop (0 )
298304 if gen_i2 <= cur_v :
305+ log .d ('pop gen' )
299306 van_gen_ops .pop (0 )
307+ log .d ('after pop' )
308+ log .d ('gen ops: ' + str (van_gen_ops ))
309+ log .d ('mod ops: ' + str (van_mod_ops ))
310+ if len (van_mod_ops ) == 0 or len (van_gen_ops ) == 0 :
311+ log .d ('out of entries' )
312+ break
300313 _ , _ , mod_i2 , mod_j1 , mod_j2 = van_mod_ops [0 ]
301314 gen_tag , _ , gen_i2 , gen_j1 , gen_j2 = van_gen_ops [0 ]
302315 low_i2 = min (mod_i2 , gen_i2 )
303316 if van_mod_ops [0 ][0 ] == 'equal' :
317+ log .d ('equal mod ops' )
304318 if gen_tag == 'equal' :
319+ log .d ('equal gen tag' )
305320 yield gen_text [cur_v :low_i2 ]
306321 cur_v = low_i2
322+ log .d ('back from equal gen tag' )
307323 continue
324+ log .d ('not equal gen tag' )
308325 yield gen_text [gen_j1 :gen_j2 ]
309326 cur_v = gen_i2
310327 continue
311328 if gen_tag == 'equal' :
329+ log .d ('not equal mod op, equal gen tag' )
312330 yield mod_text [mod_j1 :mod_j2 ]
313331 cur_v = mod_i2
314332 continue
315- yield mod_text [cur_v :low_i2 ]
333+
334+ log .d ('yield mod text (cur_v: ' + str (cur_v ) + ', mod_j2: ' + str (mod_j2 ) + '): ' + str (mod_text [cur_v :mod_j2 ]))
335+ yield mod_text [cur_v :mod_j2 ]
336+ log .d ('back from yield mod text' )
316337 if gen_text [cur_v :low_i2 ] != mod_text [cur_v :low_i2 ]:
317338 status = 2
318339 log .d ('Overwrite merge at line {}' .format (cur_v ))
319340 log .v ('- ' + '- ' .join (gen_text [cur_v :low_i2 ]) +
320341 '+ ' + '+ ' .join (mod_text [cur_v :low_i2 ]))
321342 cur_v = low_i2
322343 while van_mod_ops :
344+ log .d ('popping mod ops' )
323345 _ , _ , _ , mod_j1 , mod_j2 = van_mod_ops .pop (0 )
324346 yield mod_text [mod_j1 :mod_j2 ]
325347 while van_gen_ops :
348+ log .d ('popping gen ops' )
326349 _ , _ , _ , gen_j1 , gen_j2 = van_gen_ops .pop (0 )
327350 yield gen_text [gen_j1 :gen_j2 ]
328- yield status
351+ log .d ('yield status' )
352+ yield [status ]
329353
330354def clear_temp ():
331355 """Resets the folder in which raws are mixed."""
0 commit comments