diff --git a/generateChangemarks/changemarks.py b/generateChangemarks/changemarks.py index 57a0bf0796ebaaf2ede95ef88aa0d7354d1be449..55cbfa28494ab514d018b833a4e0175e2019848e 100644 --- a/generateChangemarks/changemarks.py +++ b/generateChangemarks/changemarks.py @@ -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: