From 23309dd07eb1a3422546dc733ddcf61e43442149 Mon Sep 17 00:00:00 2001 From: Lucas Biaggi Date: Thu, 21 Mar 2024 03:09:27 +0000 Subject: [PATCH] Insert an example using custom validator and sha --- reqs/ext/.doorstop.yml | 9 +++++++++ reqs/ext/.req_sha_item_validator.py | 28 ++++++++++++++++++++++++++++ reqs/ext/EXT001.yml | 14 ++++++++++++++ reqs/ext/EXT002.yml | 14 ++++++++++++++ reqs/ext/test-modified.file | 1 + reqs/ext/test.file | 1 + 6 files changed, 67 insertions(+) create mode 100644 reqs/ext/.doorstop.yml create mode 100644 reqs/ext/.req_sha_item_validator.py create mode 100644 reqs/ext/EXT001.yml create mode 100644 reqs/ext/EXT002.yml create mode 100644 reqs/ext/test-modified.file create mode 100644 reqs/ext/test.file diff --git a/reqs/ext/.doorstop.yml b/reqs/ext/.doorstop.yml new file mode 100644 index 000000000..090108289 --- /dev/null +++ b/reqs/ext/.doorstop.yml @@ -0,0 +1,9 @@ +settings: + digits: 3 + itemformat: yaml + parent: REQ + prefix: EXT + sep: "" +extensions: + item_validator: .req_sha_item_validator.py + item_sha_required: true diff --git a/reqs/ext/.req_sha_item_validator.py b/reqs/ext/.req_sha_item_validator.py new file mode 100644 index 000000000..3012029e3 --- /dev/null +++ b/reqs/ext/.req_sha_item_validator.py @@ -0,0 +1,28 @@ +# SPDX-License-Identifier: LGPL-3.0-only +from doorstop import DoorstopInfo, DoorstopWarning, DoorstopError +from subprocess import check_output +from copy import copy +from random import random + + +def item_validator(item): + if getattr(item, "references") == None: + return [] + + for ref in item.references: + if ref['sha'] != item._hash_reference(ref['path']): + yield DoorstopWarning("Hash has changed and it was not reviewed properly") + + if 'modified' in ref['path']: + temp_item = copy(item) + current_value = item.is_reviewed() + check_output( + "echo '1111' > $(git rev-parse --show-toplevel)/reqs/ext/test-modified.file", shell=True) + temp_item.review() + next_value = item.is_reviewed() + check_output( + "echo '0000' > $(git rev-parse --show-toplevel)/reqs/ext/test-modified.file", shell=True) + + yield DoorstopWarning(f"""This is a demonstration of a validator per folder identifying a external ref modified + without a proper review current SHA {current_value} modified SHA {next_value }. + Result: { next_value == current_value} """) diff --git a/reqs/ext/EXT001.yml b/reqs/ext/EXT001.yml new file mode 100644 index 000000000..b86847a72 --- /dev/null +++ b/reqs/ext/EXT001.yml @@ -0,0 +1,14 @@ +active: true +derived: false +header: '' +level: 1.0 +links: [] +normative: true +ref: '' +references: +- path: reqs/ext/test.file + sha: 24d9b35c727e6c78676c2ad378a8c3c47cfb539f3583d3cd9e1eafee51d5679d + type: file +reviewed: n0xxAj0z-SqNcebKEu8p9HDE8jAs5I8Vz4kX-5ZieA4= +text: | + Test where we calculate the SHA diff --git a/reqs/ext/EXT002.yml b/reqs/ext/EXT002.yml new file mode 100644 index 000000000..80989fdd2 --- /dev/null +++ b/reqs/ext/EXT002.yml @@ -0,0 +1,14 @@ +active: true +derived: false +header: '' +level: 2.0 +links: [] +normative: true +ref: '' +references: +- path: reqs/ext/test-modified.file + sha: 49ca5d81054fdd20572294b9350b605d05e0df91da09a46fb8bde7fd6c1c172d + type: file +reviewed: arLWz1tqET94t2j7FG0ncvKpwGe5twDi-jPbBnikxho= +text: | + Test where we calculate the SHA, file modified during evaluation diff --git a/reqs/ext/test-modified.file b/reqs/ext/test-modified.file new file mode 100644 index 000000000..739d79706 --- /dev/null +++ b/reqs/ext/test-modified.file @@ -0,0 +1 @@ +0000 diff --git a/reqs/ext/test.file b/reqs/ext/test.file new file mode 100644 index 000000000..635047563 --- /dev/null +++ b/reqs/ext/test.file @@ -0,0 +1 @@ +0001