Skip to content

Diff: Recognize when child relations are modified #2054

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 3, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions strictdoc/git/project_diff_analyzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
SDocNodeField,
)
from strictdoc.backend.sdoc.models.reference import (
ChildReqReference,
ParentReqReference,
)
from strictdoc.backend.sdoc.models.section import SDocSection
Expand Down Expand Up @@ -134,13 +135,10 @@ def contains_requirement_relations(
if other_requirement is None:
return False
for reference_ in other_requirement.relations:
if isinstance(reference_, ParentReqReference):
parent_reference: ParentReqReference = assert_cast(
reference_, ParentReqReference
)
if isinstance(reference_, (ParentReqReference, ChildReqReference)):
if (
parent_reference.ref_uid == relation_uid
and parent_reference.role == relation_role
reference_.ref_uid == relation_uid
and reference_.role == relation_role
):
return True
return False
Expand Down Expand Up @@ -994,7 +992,9 @@ def analyze_document(
)

for reference_ in node.relations:
if isinstance(reference_, ParentReqReference):
if isinstance(
reference_, (ParentReqReference, ChildReqReference)
):
hasher.update(reference_.ref_uid.encode("utf-8"))
if reference_.role is not None:
hasher.update(reference_.role.encode("utf-8"))
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[DOCUMENT]
TITLE: Hello world doc 1

[REQUIREMENT]
UID: REQ-1
TITLE: Requirement #1
STATEMENT: System shall do 1.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[DOCUMENT]
TITLE: Hello world doc 2

[REQUIREMENT]
UID: REQ-2
TITLE: Requirement #2
STATEMENT: System shall do 2.
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
[DOCUMENT]
TITLE: Hello world doc 1

[GRAMMAR]
ELEMENTS:
- TAG: TEXT
FIELDS:
- TITLE: UID
TYPE: String
REQUIRED: False
- TITLE: STATEMENT
TYPE: String
REQUIRED: False
- TAG: REQUIREMENT
FIELDS:
- TITLE: UID
TYPE: String
REQUIRED: False
- TITLE: TITLE
TYPE: String
REQUIRED: False
- TITLE: STATEMENT
TYPE: String
REQUIRED: False
RELATIONS:
- TYPE: Child

[REQUIREMENT]
UID: REQ-1
TITLE: Requirement #1
STATEMENT: System shall do 1.
RELATIONS:
- TYPE: Child
VALUE: REQ-2
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[DOCUMENT]
TITLE: Hello world doc 2

[REQUIREMENT]
UID: REQ-2
TITLE: Requirement #2
STATEMENT: System shall do 2.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[project]
title = "Test Project"

features = [
"DIFF",
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
RUN: %strictdoc diff %S/lhs %S/rhs --output-dir Output

RUN: cat %S/Output/changelog.html | filecheck %s --check-prefix=CHECK-CHANGELOG

CHECK-CHANGELOG:<div class="sdoc-table_key_value-key">Nodes modified</div>
CHECK-CHANGELOG:<div class="sdoc-table_key_value-value">1</div>

CHECK-CHANGELOG:<div class="sdoc-table_key_value-key">Documents modified</div>
CHECK-CHANGELOG:<div class="sdoc-table_key_value-value">No documents were modified.</div>

CHECK-CHANGELOG:<div class="sdoc-table_key_value-key">Sections modified</div>
CHECK-CHANGELOG:<div class="sdoc-table_key_value-value">No sections were modified.</div>

CHECK-CHANGELOG:<div class="sdoc-table_key_value-key">Requirements modified</div>
CHECK-CHANGELOG:<div class="sdoc-table_key_value-value">1 (1 modified)</div>

CHECK-CHANGELOG:# 1
CHECK-CHANGELOG:Requirement modified

CHECK-CHANGELOG:REQ-1
CHECK-CHANGELOG:Requirement #1
CHECK-CHANGELOG:System shall do 1.

CHECK-CHANGELOG:REQ-1
CHECK-CHANGELOG:Requirement #1
CHECK-CHANGELOG:System shall do 1.
CHECK-CHANGELOG:text="child-relation"{{.*}}REQ-2
CHECK-CHANGELOG:Requirement #2

RUN: cat %S/Output/diff.html | filecheck %s --check-prefix=CHECK-DIFF

# The left document: no specific assertions.
CHECK-DIFF: modified="left"

# The right column has REQ-1 and REQ-2 pointing to each other as child and parent.
CHECK-DIFF: modified="right"
CHECK-DIFF:<span class="badge" text="UID"></span><span class="sdoc_pre_content">REQ-1</span>
CHECK-DIFF:<span class="badge" text="child-relation"></span><div class="sdoc_pre_content"><b>REQ-2</b>
CHECK-DIFF:<span class="badge" text="UID"></span><span class="sdoc_pre_content">REQ-2</span>
CHECK-DIFF:<span class="badge" text="relation"></span><div class="sdoc_pre_content"><b>REQ-1</b>
Loading