Skip to content

Commit 672ea0b

Browse files
authored
Merge pull request #2305 from strictdoc-project/stanislaw/diff_fix
[[NODE]] migration: enhance the Diff screen to highlight diffs for all node types
2 parents 8d245ca + e47242d commit 672ea0b

File tree

56 files changed

+520
-249
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+520
-249
lines changed

strictdoc/backend/sdoc/models/document_grammar.py

Lines changed: 99 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -292,10 +292,12 @@ def __init__(
292292

293293
@staticmethod
294294
def create_default(
295-
parent: Optional[SDocDocumentIF], create_section_element: bool = False
295+
parent: Optional[SDocDocumentIF],
296+
create_section_element: bool = False,
297+
enable_mid: bool = False,
296298
) -> "DocumentGrammar":
297299
text_element: GrammarElement = (
298-
DocumentGrammar.create_default_text_element()
300+
DocumentGrammar.create_default_text_element(enable_mid=enable_mid)
299301
)
300302

301303
# @relation(SDOC-SRS-132, scope=range_start)
@@ -305,56 +307,71 @@ def create_default(
305307
GrammarElementFieldSingleChoice,
306308
GrammarElementFieldMultipleChoice,
307309
]
308-
] = [
309-
GrammarElementFieldString(
310-
parent=None,
311-
title=RequirementFieldName.UID,
312-
human_title=None,
313-
required="False",
314-
),
315-
GrammarElementFieldString(
316-
parent=None,
317-
title=RequirementFieldName.LEVEL,
318-
human_title=None,
319-
required="False",
320-
),
321-
GrammarElementFieldString(
322-
parent=None,
323-
title=RequirementFieldName.STATUS,
324-
human_title=None,
325-
required="False",
326-
),
327-
GrammarElementFieldString(
328-
parent=None,
329-
title=RequirementFieldName.TAGS,
330-
human_title=None,
331-
required="False",
332-
),
333-
GrammarElementFieldString(
334-
parent=None,
335-
title=RequirementFieldName.TITLE,
336-
human_title=None,
337-
required="False",
338-
),
339-
GrammarElementFieldString(
340-
parent=None,
341-
title=RequirementFieldName.STATEMENT,
342-
human_title=None,
343-
required="False",
344-
),
345-
GrammarElementFieldString(
346-
parent=None,
347-
title=RequirementFieldName.RATIONALE,
348-
human_title=None,
349-
required="False",
350-
),
351-
GrammarElementFieldString(
352-
parent=None,
353-
title=RequirementFieldName.COMMENT,
354-
human_title=None,
355-
required="False",
356-
),
357-
]
310+
] = []
311+
312+
if enable_mid:
313+
fields.append(
314+
GrammarElementFieldString(
315+
parent=None,
316+
title=RequirementFieldName.MID,
317+
human_title=None,
318+
required="False",
319+
)
320+
)
321+
322+
fields.extend(
323+
[
324+
GrammarElementFieldString(
325+
parent=None,
326+
title=RequirementFieldName.UID,
327+
human_title=None,
328+
required="False",
329+
),
330+
GrammarElementFieldString(
331+
parent=None,
332+
title=RequirementFieldName.LEVEL,
333+
human_title=None,
334+
required="False",
335+
),
336+
GrammarElementFieldString(
337+
parent=None,
338+
title=RequirementFieldName.STATUS,
339+
human_title=None,
340+
required="False",
341+
),
342+
GrammarElementFieldString(
343+
parent=None,
344+
title=RequirementFieldName.TAGS,
345+
human_title=None,
346+
required="False",
347+
),
348+
GrammarElementFieldString(
349+
parent=None,
350+
title=RequirementFieldName.TITLE,
351+
human_title=None,
352+
required="False",
353+
),
354+
GrammarElementFieldString(
355+
parent=None,
356+
title=RequirementFieldName.STATEMENT,
357+
human_title=None,
358+
required="False",
359+
),
360+
GrammarElementFieldString(
361+
parent=None,
362+
title=RequirementFieldName.RATIONALE,
363+
human_title=None,
364+
required="False",
365+
),
366+
GrammarElementFieldString(
367+
parent=None,
368+
title=RequirementFieldName.COMMENT,
369+
human_title=None,
370+
required="False",
371+
),
372+
]
373+
)
374+
358375
requirement_element = GrammarElement(
359376
parent=None,
360377
tag="REQUIREMENT",
@@ -374,7 +391,9 @@ def create_default(
374391

375392
if create_section_element:
376393
section_element: GrammarElement = (
377-
DocumentGrammar.create_default_section_element()
394+
DocumentGrammar.create_default_section_element(
395+
enable_mid=enable_mid
396+
)
378397
)
379398
elements.append(section_element)
380399

@@ -527,27 +546,40 @@ def update_with_elements(self, elements: List[GrammarElement]) -> None:
527546
@staticmethod
528547
def create_default_text_element(
529548
parent: Optional["DocumentGrammar"] = None,
549+
enable_mid: bool = False,
530550
) -> GrammarElement:
531551
fields: List[
532552
Union[
533553
GrammarElementFieldString,
534554
GrammarElementFieldSingleChoice,
535555
GrammarElementFieldMultipleChoice,
536556
]
537-
] = [
538-
GrammarElementFieldString(
539-
parent=None,
540-
title=RequirementFieldName.UID,
541-
human_title=None,
542-
required="False",
543-
),
544-
GrammarElementFieldString(
545-
parent=None,
546-
title=RequirementFieldName.STATEMENT,
547-
human_title=None,
548-
required="True",
549-
),
550-
]
557+
] = []
558+
if enable_mid:
559+
fields.append(
560+
GrammarElementFieldString(
561+
parent=None,
562+
title=RequirementFieldName.MID,
563+
human_title=None,
564+
required="False",
565+
)
566+
)
567+
fields.extend(
568+
[
569+
GrammarElementFieldString(
570+
parent=None,
571+
title=RequirementFieldName.UID,
572+
human_title=None,
573+
required="False",
574+
),
575+
GrammarElementFieldString(
576+
parent=None,
577+
title=RequirementFieldName.STATEMENT,
578+
human_title=None,
579+
required="True",
580+
),
581+
]
582+
)
551583
text_element = GrammarElement(
552584
parent=parent,
553585
tag="TEXT",

strictdoc/backend/sdoc/processor.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ def process_document(self, document: SDocDocument):
5252
or DocumentGrammar.create_default(
5353
document,
5454
create_section_element=self.parse_context.migrate_sections,
55+
enable_mid=document.config.enable_mid,
5556
)
5657
)
5758
self.parse_context.document = document

strictdoc/commands/diff_command.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ def execute(
6666
strictdoc_last_update=datetime.today(),
6767
)
6868

69+
assert change_container.traceability_index_lhs.document_tree is not None
70+
assert change_container.traceability_index_rhs.document_tree is not None
71+
6972
view_object = DiffScreenResultsViewObject(
7073
project_config=project_config,
7174
change_container=change_container,

strictdoc/export/html/generators/view_objects/diff_screen_results_view_object.py

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
# mypy: disable-error-code="attr-defined,no-untyped-call,no-untyped-def"
22
from dataclasses import dataclass
3-
from typing import Optional
3+
from typing import List, Optional, Set
44

55
from markupsafe import Markup
66

77
from strictdoc import __version__
8+
from strictdoc.backend.sdoc.models.document import SDocDocument
9+
from strictdoc.backend.sdoc.models.document_grammar import DocumentGrammar
10+
from strictdoc.core.document_tree import DocumentTree
811
from strictdoc.core.project_config import ProjectConfig
912
from strictdoc.export.html.html_templates import JinjaEnvironment
1013
from strictdoc.export.html.renderers.link_renderer import LinkRenderer
1114
from strictdoc.git.change_generator import ChangeContainer
15+
from strictdoc.helpers.cast import assert_cast
1216

1317

1418
@dataclass
@@ -18,8 +22,8 @@ def __init__(
1822
*,
1923
project_config: ProjectConfig,
2024
change_container: ChangeContainer,
21-
document_tree_lhs,
22-
document_tree_rhs,
25+
document_tree_lhs: DocumentTree,
26+
document_tree_rhs: DocumentTree,
2327
documents_iterator_lhs,
2428
documents_iterator_rhs,
2529
left_revision: str,
@@ -35,8 +39,8 @@ def __init__(
3539
):
3640
self.project_config: ProjectConfig = project_config
3741
self.change_container: ChangeContainer = change_container
38-
self.document_tree_lhs = document_tree_lhs
39-
self.document_tree_rhs = document_tree_rhs
42+
self.document_tree_lhs: DocumentTree = document_tree_lhs
43+
self.document_tree_rhs: DocumentTree = document_tree_rhs
4044
self.documents_iterator_lhs = documents_iterator_lhs
4145
self.documents_iterator_rhs = documents_iterator_rhs
4246
self.left_revision: str = left_revision
@@ -72,3 +76,22 @@ def render_static_url(self, url: str) -> Markup:
7276

7377
def render_static_url_with_prefix(self, url: str) -> str:
7478
return self.link_renderer.render_static_url_with_prefix(url)
79+
80+
def get_node_types(self) -> List[str]:
81+
node_types: Set[str] = set()
82+
83+
document_: SDocDocument
84+
for document_ in self.document_tree_lhs.document_list:
85+
document_grammar = assert_cast(document_.grammar, DocumentGrammar)
86+
87+
for node_type_ in document_grammar.elements_by_type.keys():
88+
node_types.add(node_type_)
89+
90+
for document_ in self.document_tree_rhs.document_list:
91+
document_grammar = assert_cast(document_.grammar, DocumentGrammar)
92+
93+
for node_type_ in document_grammar.elements_by_type.keys():
94+
node_types.add(node_type_)
95+
96+
priority_order = {"SECTION": 0, "TEXT": 1, "REQUIREMENT": 2}
97+
return sorted(node_types, key=lambda x: (priority_order.get(x, 100), x))

strictdoc/export/html/templates/screens/git/changelog_content.jinja

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,6 @@
1313
{% set _sections_modified = "No sections were modified." %}
1414
{% endif %}
1515

16-
{% set requirements_modified = view_object.change_container.change_stats.get_changes_requirements_changed() %}
17-
{% if requirements_modified is not none %}
18-
{% set _requirements_modified = requirements_modified~" ("~view_object.change_container.change_stats.get_changes_requirements_stats_string()~")" %}
19-
{% else %}
20-
{% set _requirements_modified = "No requirements were modified." %}
21-
{% endif %}
22-
2316
<div class="sdoc-table_key_value">
2417
{% with key_value_pair =
2518
{"Section":"Compared revisions"}
@@ -78,14 +71,23 @@
7871
{% include "components/table_key_value/index.jinja" %}
7972
{% endwith %}
8073

81-
{% with key_value_pair =
82-
{
83-
"Key":"Requirements modified",
84-
"Value": _requirements_modified,
85-
}
86-
%}
87-
{% include "components/table_key_value/index.jinja" %}
88-
{% endwith %}
74+
{% for node_type_ in view_object.get_node_types() %}
75+
{% set requirements_modified = view_object.change_container.change_stats.get_changes_requirements_changed(node_type_) %}
76+
{% if requirements_modified is not none %}
77+
{% set _requirements_modified = requirements_modified~" ("~view_object.change_container.change_stats.get_changes_requirements_stats_string(node_type_)~")" %}
78+
{% else %}
79+
{% set _requirements_modified = "No nodes were modified." %}
80+
{% endif %}
81+
82+
{% with key_value_pair =
83+
{
84+
"Key":node_type_~" nodes",
85+
"Value": _requirements_modified,
86+
}
87+
%}
88+
{% include "components/table_key_value/index.jinja" %}
89+
{% endwith %}
90+
{% endfor %}
8991
</div>{# / .sdoc-table_key_value #}
9092

9193
<div class="changelog_changes">

strictdoc/export/html/templates/screens/git/diff_content.jinja

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@
3434

3535
{%- set document_iterator = traceability_index.get_document_iterator(document) -%}
3636
{%- for section_or_requirement in document_iterator.all_content(print_fragments=True, print_fragments_from_files=False) %}
37-
{%- if section_or_requirement.is_requirement() and section_or_requirement.node_type != "SECTION" %}
37+
{%- if section_or_requirement.is_requirement() %}
3838
{%- set requirement = section_or_requirement %}
3939
{% include "screens/git/node/requirement.jinja" %}
4040

41-
{%- elif section_or_requirement.is_section() or section_or_requirement.node_type == "SECTION" %}
41+
{%- elif section_or_requirement.is_section() %}
4242
{%- set section = section_or_requirement %}
4343
{% include "screens/git/node/section.jinja" %}
4444
{%- endif %}

0 commit comments

Comments
 (0)