def get_blocks_diff(a,b): d=difflib.Differ() res_r=[] cb_r=[] res_l=[] cb_l=[] change_l=False change_r=False result=list(d.compare(a.splitlines(), b.splitlines())) #from pprint import pprint #pprint(result) for i in result: data=i[2:] if i[:2]=='? ': continue if i[:2]==' ': if not change_l and not change_r: cb_r.append(data) cb_l.append(data) elif not change_l and change_r: res_r.append(cb_r) cb_r=UserList([data]) cb_l.append(data) elif change_l and not change_r: res_l.append(cb_l) cb_l=UserList([data]) cb_r.append(data) elif change_l and change_r: res_r.append(cb_r) cb_r=UserList([data]) res_l.append(cb_l) cb_l=UserList([data]) change_r=False change_l=False elif i[:2]=='- ': if not change_l: res_l.append(cb_l) cb_l=UserList([data]) elif change_l: cb_l.append(data) cb_l.added=True change_l=True #print "1" elif i[:2]=='+ ': if not change_r: res_r.append(cb_r) cb_r=UserList([data]) elif change_r: cb_r.append(data) cb_r.added=True change_r=True if len(cb_r)>0: res_r.append(cb_r) if len(cb_l)>0: res_l.append(cb_l) return res_l, res_r