Commit a4c0bec6 authored by Miguel Angel Reina Ortega's avatar Miguel Angel Reina Ortega
Browse files

Fix for determining which clauses are changed

parent d0869d26
Loading
Loading
Loading
Loading
+38 −5
Original line number Diff line number Diff line
@@ -113,6 +113,7 @@ def find_all_clauses(progress:Progress, mdLines:list[str]):
    clause.to_id = index - 1
    clauses.append(clause)

    logging.debug("Number of clauses: {len(clauses)}")
    return clauses

class MR:
@@ -153,14 +154,15 @@ https://forge.etsi.org/rep/cdm/pipeline-scripts/-/blob/main/common/Dockerfile.st
        if patched_file.source_file.startswith("a/TS"):
            logging.debug(f"Looking at changes in {patched_file.source_file}")
            for change in patched_file:
                change_start_line, change_end_line, lines_added, lines_removed = changeDetails(change)
                # Check the previous changed_clause
                if (changed_clause.from_id <= change.target_start) and (changed_clause.to_id >= (change.target_start - 1 + change.target_length)):
                if (changed_clause.from_id <= change_start_line) and (changed_clause.to_id + lines_added - lines_removed >= change_end_line):
                    generateMDforChange(progress, mdLines, changed_clause, change, outDirectory, True)
                    break
                i = 0 
                # Check all clauses
                for clause in clauses:
                    if (clause.from_id <= change.target_start) and (clause.to_id >= (change.target_start - 1 + change.target_length)):
                    if (clause.from_id <= change_start_line) and (clause.to_id + lines_added - lines_removed >= change_end_line):
                        changed_clause = clauses.pop(i)
                        changed_clauses.append(clause)
                        generateMDforChange(progress, mdLines, changed_clause, change, outDirectory, False)
@@ -172,6 +174,30 @@ https://forge.etsi.org/rep/cdm/pipeline-scripts/-/blob/main/common/Dockerfile.st

    return changed_clauses

def changeDetails(change) -> (int, int, int, int):
    i = 0
    lines_added = 0
    lines_removed = 0
    change_start_line = change.target_start
    change_end_line = change_start_line
    for line in change:
        if line.is_added or line.is_removed:
            if change_start_line == change.target_start:
                change_start_line = change.target_start + i
                change_end_line = change_end_line + i
            else:
                change_end_line = change_end_line + i
            i = 0
            if line.is_added:
                lines_added = lines_added + 1
            elif line.is_removed:
                lines_removed = lines_removed + 1

        i = i + 1

    change_end_line = change_end_line - lines_removed
    return change_start_line, change_end_line, lines_added, lines_removed

def generateMDforChange(progress:Progress, mdLines:list[str],changed_clause:Clause, change, outDirectory:str, existing_clause:bool):
    '''
    Generate the MD for the clauses that have been modified by the merge request
@@ -198,7 +224,10 @@ https://forge.etsi.org/rep/cdm/pipeline-scripts/-/blob/main/common/Dockerfile.st
                for element in tableElements:
                    if not element.strip() == '':
                        modifiedElements.append("<span class=\"underline\">" + element.strip() + "</span>")
                modifiedRow = "|" + "|".join(modifiedElements) + "|" + "\n"
                #modifiedRow = "|" + "|".join(modifiedElements) + "|" + "\n"
                    else:
                        modifiedElements.append(element)
                modifiedRow = "|".join(modifiedElements) + "\n"
                clauseMDlines.insert(j,modifiedRow)
                clauseMDlines.pop(j + 1)
            else:
@@ -212,13 +241,17 @@ https://forge.etsi.org/rep/cdm/pipeline-scripts/-/blob/main/common/Dockerfile.st
                for element in tableElements:
                    if not element.strip() == '':
                        modifiedElements.append("~~" + element.strip() + "~~")
                modifiedRow = "|" + "|".join(modifiedElements) + "|" + "\n"
                #modifiedRow = "|" + "|".join(modifiedElements) + "|" + "\n"
                    else:
                        modifiedElements.append(element)
                modifiedRow = "|".join(modifiedElements) + "\n"
                clauseMDlines.insert(j, modifiedRow)
            else:
                clauseMDlines.insert(j, "~~" + line.value.strip() + "~~")
            
        j = j + 1

    clauseMDlines.insert(j, "\n\n<br />")
    writeMDFile(progress, clauseMDlines, changed_clause.clause_nr.replace(" ","") + '.md', outDirectory)

def process(document:str, outDirectory:str, mr:MR) -> None: