diff options
| author | tv <tv@krebsco.de> | 2026-11-07 22:35:21 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-11-07 22:35:21 +0100 |
| commit | 389b11b597b6bf60f120b190002bbb76fff28dbf (patch) | |
| tree | 94a9c9aac6aac510218bb454bc90bdd3a6dc920c /src/access/rules.rs | |
| parent | 1a5b5ea02909e6c176ebd85d395e47fe15fcdba0 (diff) | |
access: screening received changes
access::screen: a batch of received changes judged change by change,
those that change what rules read applied before the next is judged;
a refused change stays out with whatever builds on it, kept aside for
operators; changes missing dependencies wait.
Auth plan M6.
Diffstat (limited to 'src/access/rules.rs')
| -rw-r--r-- | src/access/rules.rs | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/access/rules.rs b/src/access/rules.rs index 9a9e5e2..e151cbb 100644 --- a/src/access/rules.rs +++ b/src/access/rules.rs @@ -35,6 +35,10 @@ use crate::document::{ChangeHash, Document, store}; pub(crate) struct Change<'a> { pub(crate) hash: ChangeHash, pub(crate) deps: &'a [ChangeHash], + /// The heads to judge it at: its dependencies, or, for those not applied yet, the + /// changes of the document they build on, where nothing between changed what rules + /// read (`access::screen`). + pub(crate) seen: &'a [ChangeHash], /// The node that made it (its node ID), as its signature proves. pub(crate) committer: Option<&'a str>, /// The user it names (`User:`), if any. @@ -77,7 +81,7 @@ pub(crate) fn judge(doc: &Document, epoch: Epoch, change: &Change<'_>) -> Result )) }; } - let at = At::new(doc, change.deps).ok_or(Refusal::Unready)?; + let at = At::new(doc, change.seen).ok_or(Refusal::Unready)?; let refuse = |why: String| Err(Refusal::Rule(why)); let Some(node) = change.committer else { return refuse("it names no node".to_owned()); @@ -239,6 +243,7 @@ mod tests { &Change { hash: ChangeHash([9; 32]), deps: &deps, + seen: &deps, committer: Some(committer), user, paths: &touched, @@ -363,6 +368,7 @@ mod tests { &Change { hash: ChangeHash([9; 32]), deps, + seen: deps, committer: Some("a"), user: Some("alice"), paths: &touched, @@ -386,6 +392,7 @@ mod tests { &Change { hash: ChangeHash(hash), deps: &[], + seen: &[], committer: None, user: None, paths: &touched, |
