def _parse_hunk(diff, source_start, source_len, target_start, target_len): hunk = Hunk(source_start, source_len, target_start, target_len) modified = 0 deleting = 0 for line in diff: valid_line = RE_HUNK_BODY_LINE.match(line) if valid_line: action = valid_line.group(0) original_line = line[1:] if action == '+': hunk.append_added_line(original_line) # modified lines == deleted immediately followed by added if deleting > 0: modified += 1 deleting -= 1 elif action == '-': hunk.append_deleted_line(original_line) deleting += 1 elif action == ' ': hunk.append_context_line(original_line) hunk.add_to_modified_counter(modified) # reset modified auxiliar variables deleting = 0 modified = 0 else: raise UnidiffParseException('Hunk diff data expected') # check hunk len(old_lines) and len(new_lines) are ok if hunk.is_valid(): break return hunk