From f72cbc4c8779e3abeb1927866feccbdcff808348 Mon Sep 17 00:00:00 2001 From: Miguel Angel Reina Ortega <miguelangel.reinaortega@etsi.org> Date: Thu, 20 Jul 2023 10:21:31 +0200 Subject: [PATCH] Generation of changemark CR: - generation of changemark MD files per modified Clause - conversion of MD files to docx files - combination of the docx files into the CR docx file --- .gitlab-ci.yml | 2 +- generate_changemarks.sh | 23 +++- onem2m_coversheet_template.docx | Bin 42519 -> 42296 bytes onem2m_delimiter_end.docx | Bin 24204 -> 23984 bytes onem2m_delimiter_start.docx | Bin 23849 -> 23837 bytes pandocFilter/changemarks.py | 236 ++++++++++++++++++++++++++++++++ pandocFilter/requirements.txt | 2 + pandocFilter/setup.py | 3 +- 8 files changed, 260 insertions(+), 6 deletions(-) create mode 100644 pandocFilter/changemarks.py diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4c10dc6..e470ecf 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -28,7 +28,7 @@ Build pythonForPandocFilter docker image: - pandocFilter/setup.py - pandocFilter/requirements.txt - pandocFilter/pandocFilter.py - + - pandocFilter/changemarks.py Word CR text: stage: generation diff --git a/generate_changemarks.sh b/generate_changemarks.sh index 0861f57..c50a558 100644 --- a/generate_changemarks.sh +++ b/generate_changemarks.sh @@ -1,6 +1,8 @@ #!/bin/bash -DOCKER_IMAGE=forge.3gpp.org:5050/tools/3gpp-scripts/forgelib:v2.2.0 +FORGELIB_DOCKER_IMAGE=forge.3gpp.org:5050/tools/3gpp-scripts/forgelib:v2.5.0 +PANDOC_FILTER_DOCKER_IMAGE=pandocfilter:latest +DOCKER_IMAGE=pandoc/core:3.1.1.0 echo "\n------ Checking for docker image --------" docker pull "$DOCKER_IMAGE" @@ -11,13 +13,26 @@ rm **/*.docx echo "------ Parsing repo URL --------" HOST_URL=$(echo $1 | cut -d'/' -f 1-3) -PROJECT_NAME=$(echo $1 | cut -d'/' -f 4- | cut -d'.' -f 1) +PROJECT_NAME=$(echo $1 | cut -d'/' -f 6- | cut -d'.' -f 1) echo "HOST URL:" $HOST_URL echo "PROJECT NAME:" $PROJECT_NAME echo "PROJECT ID:" $2 echo "MERGE IID:" $3 -echo "\n------ Generating change marks --------" -docker container run --rm -v $(pwd):/tmp/ "$DOCKER_IMAGE" forgelib-changedocs -vv --combine --diffs --preprocessor onem2m --outPath=/tmp/docs --startdelimiter "/tmp/$4" --enddelimiter "/tmp/$5" --coversheet "/tmp/$6" "$HOST_URL" "$2" "$PROJECT_NAME" "$3" +echo "\n------ Generating change marks MD --------" +#docker container run --rm -v $(pwd):/tmp/ "$DOCKER_IMAGE" forgelib-changedocs -vv --combine --diffs --preprocessor onem2m --outPath=/tmp/docs --startdelimiter "/tmp/$4" --enddelimiter "/tmp/$5" --coversheet "/tmp/$6" "$HOST_URL" "$2" "$PROJECT_NAME" "$3" +docker container run --rm -v $(pwd):/tmp/ -u $(id -u):$(id -g) "$PANDOC_FILTER_DOCKER_IMAGE" changemarks -o "/tmp/out" "$HOST_URL" "$2" "$3" + +echo "\n------ Generating changemarks docx --------" +for i in out/*.md ; do + DOCUMENT_NAME=$(echo $i | cut -d'/' -f 2) + echo "\n------ Preparaing spec --------" + docker run --rm -v $(pwd):/tmp/ -u $(id -u):$(id -g) "$PANDOC_FILTER_DOCKER_IMAGE" pandocFilter -o "/tmp/out" "/tmp/$i" + echo "\n------ Publishing spec --------" + docker run --rm -v $(pwd):/data -u $(id -u):$(id -g) "$DOCKER_IMAGE" "/data/$i" -f markdown -t docx --reference-doc "Spec-template.docx" -o "/data/out/${DOCUMENT_NAME}.docx" +done + +echo "\n------ Combining docx --------" +docker container run --rm -v $(pwd):/tmp/ -u $(id -u):$(id -g) "$FORGELIB_DOCKER_IMAGE" forgelib-changedocs -vv -sf "/tmp/out/" --preprocessor onem2m --outPath=/tmp/docs --startdelimiter "/tmp/$4" --enddelimiter "/tmp/$5" --coversheet "/tmp/$6" "$HOST_URL" "$2" "$3" exit 0 diff --git a/onem2m_coversheet_template.docx b/onem2m_coversheet_template.docx index e93264f9c2751c408774ea4965565b0cec72a962..e59b7a310a864a161e843427276c01f11ee9516f 100644 GIT binary patch delta 10443 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 delta 10728 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 diff --git a/onem2m_delimiter_end.docx b/onem2m_delimiter_end.docx index 4e5bfed1ded1ae4614de8815b33a3ac60ba81044..c86f45b8583c94167a34463367014cdff113e749 100644 GIT binary patch delta 6292 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 delta 6572 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 LVg=ZoB0vfO8J}OS diff --git a/onem2m_delimiter_start.docx b/onem2m_delimiter_start.docx index 5b786d7e9db7dcaff417f932cb010364ed502c4f..ec52d4eb637802df8f3514ce4ca68c39763e7f17 100644 GIT binary patch delta 5525 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	Mep0SnD)O6b%tv5b4 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 delta 5514 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 byfnsv<z@&2!{pZ?a+BF(1=#L~fvg1pq4i)V diff --git a/pandocFilter/changemarks.py b/pandocFilter/changemarks.py new file mode 100644 index 0000000..9d4a0a5 --- /dev/null +++ b/pandocFilter/changemarks.py @@ -0,0 +1,236 @@ +## +# changemarks.py +# +# Script to generate a markdown file per clause modified in a merge request +# +# (c) 2023 by Miguel Angel Reina Ortega +# License: BSD 3-Clause License. See the LICENSE file for further details. +# + +import argparse, os, re, sys +from rich import print +from rich.progress import Progress, TextColumn, TimeElapsedColumn +import logging +import requests +from unidiff import PatchSet + +def fetch(url : str, expected_content_type : str = None) -> requests.Response: + r = requests.get(url) + logging.debug(f"Fetching {url}") + if (r.status_code != 200): + errorMessage = f"Failed attempting to retrieve {url}, status code {r.status_code}" + logging.error(errorMessage) + raise ValueError(errorMessage) + if expected_content_type: + if r.headers['Content-Type'] != expected_content_type: + errorMessage = f"Unexpected content type retrieving {url}. Expected {expected_content_type}, got {r.headers['Content-Type']}" + logging.error(errorMessage) + raise ValueError(errorMessage) + return r + +def fetch_text(url : str, expected_content_type : str = None) -> str: + r = fetch(url, expected_content_type) + return r.text + +def fetch_json(url : str, expected_content_type : str = None) -> requests.Response: + r = fetch(url, expected_content_type) + return r.json() + +def readMDFile(progress:Progress, document:str) -> list[str]: + """ Read the markdown file and return a list of lines. + """ + _taskID = progress.add_task('[blue]Reading document', start=False, total=0) + + # Check if file exists + if not os.path.exists(document): + print(f'File {document} does not exist') + exit(1) + + # Read the file + with open(document, 'r', encoding='utf-8', errors = 'replace') as f: + progress.stop_task(_taskID) + return f.readlines() + + +def writeMDFile(progress:Progress, mdLines:list[str], document:str, outDirectory:str) -> None: + """ Write the markdown file. + + """ + _taskID = progress.add_task('[blue]Writing document', start=False, total=0) + + # Write the file + with open(f'{outDirectory}/{os.path.basename(document)}', 'w', encoding='utf-8', errors = 'replace') as f: + f.writelines(mdLines) + progress.stop_task(_taskID) + + +class Clause(): + ''' + Defines a clause of the base document + ''' + + def __init__(self, line, from_id, to_id, clause_nr): + self.raw = line + self.from_id = from_id + self.to_id = to_id + self.clause_nr = clause_nr + + + +def find_all_clauses(progress:Progress, mdLines:list[str]): + ''' + Scans the body of the document to find all clauses + Returns a list of Clauses, start index and end index + ''' + + _taskID = progress.add_task('[blue]Find all available clauses', start=False, total=0) + + clauseregex = re.compile('^#+\s(\d(\.\d)*|Annex \w|\w*(\.\d)*).*') + clauses:list[Clause] = [] + + index = 1 + empty = "" + clause = Clause(empty,0,0,empty) + + for line in mdLines: + if line.startswith('#'): + matches = re.findall(clauseregex, line) # Match heading + if matches: # It may be the end of the clause or the start of a subclause + if index - 2 == clause.from_id: # It is a subclause + clause.from_id = index + clause.raw = line + clause.clause_nr = matches[0][0] + else: # It is the end of the clause + clause.to_id = index - 1 + clauses.append(clause) + clause = Clause(line,index,index,matches[0][0]) + else: # it is last clause + print("Unknown heading") + + index = index + 1 + + # Append last clause (usually History) + clause.to_id = index - 1 + clauses.append(clause) + + return clauses + +class MR: + def __init__(self, project_id, mr_id, root = "https://git.onem2m.org"): + self.project_id = project_id + self.mr_id = mr_id + self.root = root + self.raw_project_details = fetch_json(self.api_url()) + self.web_url = self.raw_project_details['web_url'] + self.raw_mr_details = fetch_json(self.api_url(f'/merge_requests/{self.mr_id}')) + self.author = self.raw_mr_details['author']['name'] + self.target_branch = self.raw_mr_details['target_branch'] + self.source_branch = self.raw_mr_details['source_branch'] + self.title = self.raw_mr_details['title'] + self.description = self.raw_mr_details['description'] + self.raw_diff = fetch_text(f'{self.web_url}/-/merge_requests/{self.mr_id}.diff', expected_content_type='text/plain') + self.patch_set = PatchSet.from_string(self.raw_diff) + + def api_url(self, route : str = "") -> str: + return f"{self.root}/api/v4/projects/{self.project_id}/{route}" + def retrieve_text(self, branch: str, filename: str) -> str: + return fetch_text(f"{self.web_url}/-/raw/{branch}/{filename}") + +def find_changed_clauses(progress:Progress, mdLines:list[str], clauses:list[Clause], mr:MR, outDirectory:str ): + ''' + Determine the clauses that have been modified by the merge request +https://forge.etsi.org/rep/cdm/pipeline-scripts/-/blob/main/common/Dockerfile.stfubuntu Returns a list of Clauses, start index and end index + ''' + + _taskID = progress.add_task('[blue]Find changed clauses', start=False, total=0) + + changed_clauses:list[Clause] = [] + empty = "" + changed_clause = Clause(empty,0,0,empty) + + for patched_file in mr.patch_set: + if patched_file.source_file.startswith("a/TS"): + logging.debug(f"Looking at changes in {patched_file.source_file}") + for change in patched_file: + # 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)): + 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)): + changed_clause = clauses.pop(i) + changed_clauses.append(clause) + generateMDforChange(progress, mdLines, changed_clause, change, outDirectory, False) + break + i = i + 1 + + for clause in changed_clauses: + logging.debug(f"Clause {clause.clause_nr} contains modifications") + + return changed_clauses + +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 +https://forge.etsi.org/rep/cdm/pipeline-scripts/-/blob/main/common/Dockerfile.stfubuntu Returns a list of Clauses, start index and end index + ''' + + _taskID = progress.add_task('[blue]Generate MD for changed clauses', start=False, total=0) + + if not existing_clause: + index = changed_clause.from_id - 1 + clauseMDlines: list[str] = [] + while index < changed_clause.to_id: + clauseMDlines.append(mdLines[index]+'\n') + index = index + 1 + else: + clauseMDlines = readMDFile(progress, changed_clause.clause_nr +'.md') + + j = change.target_start - changed_clause.from_id # index gap + for line in change: + if (not (line.value.strip() == '') and (line.is_added)): + clauseMDlines.insert(j, "<span class=\"underline\">" + line.value + "</span>\n\n") + #clauseMDlines.insert(j, "<mark>" + line.value.strip("\n") + "</mark>\n\n") + clauseMDlines.pop(j+1) + elif line.is_removed: + clauseMDlines.insert(j, "~~" + line.value.strip() + "~~") + + j = j + 1 + + writeMDFile(progress, clauseMDlines, changed_clause.clause_nr.replace(" ","") + '.md', outDirectory) + +def process(document:str, outDirectory:str, mr:MR) -> None: + with Progress(TextColumn('{task.description}'), TimeElapsedColumn()) as progress: + sourceText = mr.retrieve_text(mr.source_branch, document) + sourceMdLines = sourceText.splitlines(keepends=False) + clauses = find_all_clauses(progress, sourceMdLines) + changed_clauses = find_changed_clauses(progress, sourceMdLines, clauses, mr, outDirectory) + +def main(args=None): + # Parse command line arguments + parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser.add_argument('--outdir', '-o', action='store', dest='outDirectory', default = 'out', metavar = '<output directory>', help = 'specify output directory') + parser.add_argument('rootURL', help="Forge root URL") + parser.add_argument('projectID', help="Forge project ID") + parser.add_argument('mergeID', help="Merge IID") + + pargs = parser.parse_args() + + # Process documents and print output + + os.makedirs(pargs.outDirectory, exist_ok = True) + + mr = MR(pargs.projectID, pargs.mergeID, pargs.rootURL) + + for patched_file in mr.patch_set: + if patched_file.source_file.startswith("a/TS"): + filename = patched_file.source_file.split("/")[1] + process(filename, pargs.outDirectory, mr) + else: + logging.debug(f"Cannot process file named {patched_file.source_file}") + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/pandocFilter/requirements.txt b/pandocFilter/requirements.txt index 4c6b806..986b28e 100644 --- a/pandocFilter/requirements.txt +++ b/pandocFilter/requirements.txt @@ -12,3 +12,5 @@ pygments==2.15.1 # via rich rich==13.3.5 # via oneM2M-markdown-to-pandoc-filter (setup.py) +requests==2.31.0 +unidiff==0.7.5 diff --git a/pandocFilter/setup.py b/pandocFilter/setup.py index 7d47e52..066d12e 100644 --- a/pandocFilter/setup.py +++ b/pandocFilter/setup.py @@ -11,7 +11,8 @@ setup( 'rich', ], entry_points= { - 'console_scripts' : ['pandocFilter=pandocFilter:main'] + 'console_scripts' : ['pandocFilter=pandocFilter:main', + 'changemarks=changemarks:main'] } ) -- GitLab