fix(forge,claw): forge keys separate the issue from the pull
The watch key encoded source, repo, and number but not the thread
kind, and on GitLab an issue and a merge request share one number
space: iid 7 twice produced one key, one snapshot, and comments on
the merge request landing in the issue (or a 404 fallback that
misrouted the other way). The key carries the kind now —
{source}:{kind}:{owner}/{name}#{number}, with GitLab spelling the
pull variant mr — comment and snapshot route outright by kind, and a
kind-less payload parses to the unparsable key instead of guessing
issue. The claw's callers thread the kind from the payload and strip
the segment where the bare repo is wanted; pre-kind stored keys parse
as None rather than misroute. Four route-pinning wiremock tests cover
the GitLab split, and the GitHub/Gitea clients take the kind without
using it (their issues and PRs share the same REST space).
This commit is contained in:
1 parent
10efe85f38
commit
00adf092ff
15 files changed
+478
-178
No files matched your search
@@ -8,8 +8,8 @@
|
||||
//! [`crate::Watcher`] polls a [`crate::Forge`] for activity and feeds
|
||||
//! the events to a [`rhema_rsd::Dispatcher`](rhema_rsd) (the forge's
|
||||
//! stable dedup id becomes the event id, and the resource key is spec
|
||||
//! §8's `host:owner/repo#number` shape, so re-polling unchanged history
|
||||
//! dedups away and a changed row re-dispatches), and a dispatched
|
||||
//! §8's `host:kind:owner/repo#number` shape, so re-polling unchanged
|
||||
//! history dedups away and a changed row re-dispatches), and a dispatched
|
||||
//! thread is answered through the same [`crate::Forge`] capabilities,
|
||||
//! with [`crate::decode`] recovering the event behind an inbox item.
|
||||
//! Polling cadence, handler policy, and the loop itself are the
|
||||
@@ -63,8 +63,8 @@ pub mod watcher;
|
||||
pub use async_trait::async_trait;
|
||||
pub use error::ForgeError;
|
||||
pub use event::{
|
||||
EventKind, ForgeEvent, Notification, NotificationPage, NotificationReason, RepoRef, Snapshot,
|
||||
ThreadState, Timestamp,
|
||||
EventKind, ForgeEvent, ForgeThreadKind, Notification, NotificationPage, NotificationReason,
|
||||
RepoRef, Snapshot, ThreadState, Timestamp,
|
||||
};
|
||||
pub use forge::{Forge, ForgePage};
|
||||
pub use gitea::GiteaForge;
|
||||
|
||||
Reference in new issue
Block a user