Skip to main content

GitLabAdapter

Struct GitLabAdapter 

Source
pub struct GitLabAdapter { /* private fields */ }
Expand description

The glab adapter. Spawns glab issue <create|update|close|list> with the configured project and, when a secret is configured, the GITLAB_TOKEN env pair.

Implementations§

Source§

impl GitLabAdapter

Source

pub fn new( runner: impl CommandRunner + 'static, token: Option<String>, base_url: Option<String>, project: String, ) -> Self

Trait Implementations§

Source§

impl TrackerAdapter for GitLabAdapter

Source§

fn set_relations( &mut self, remote_ref: &str, relations: &[MappedRelation], ) -> Result<()>

glab issue update <ref> --blocking <refs> (WP07 T030).

The only relation affordance glab exposes on an issue update is --blocking, so a blocks edge is the only thing that can leave the machine — and that is decided by the shared seam, not here. What arrives is already filtered; this method only renders it.

--blocking is not additive in glab: it replaces the issue’s blocked-by set. So the full set is sent in one call rather than one call per edge, which is also one fewer chance to leave the remote half-configured.

Source§

fn set_projects( &mut self, _remote_ref: &str, projects: &[MappedProject], ) -> Result<()>

GitLab’s side of the project-association seam — and its answer is “nothing” (WP08 T036).

glab names the one project an issue lives in (--project <path>, which this adapter already passes on every call) and exposes no membership flag, so there is no command line a membership list could be rendered as. Inventing one is precisely what T036 step 3 forbids, and sending a partial list would drop the rest of it, which C-005 forbids.

So this returns without spawning anything, and the debug_assert states the invariant the seam holds it to: the table that decides representability (PROJECT_WIRE_VERIFIED) is empty, so a value cannot reach here — and flipping that table without an implementation here would be a silent drop, which is loud in every test build instead.

Source§

fn set_epics(&mut self, _remote_ref: &str, epics: &[MappedEpic]) -> Result<()>

GitLab’s side of the epic-reference seam — and its answer is “nothing” (WP08, mission epics-work-items-01M3BYW4).

glab’s issue carries at most one epic (epic_iid, which this adapter already reads as the issue’s single parent) and exposes no flag to set it and no list form, so there is no command line an epic membership list could be rendered as. Inventing one is precisely what T038 step 3 forbids, and sending one member of a list would drop the rest, which C-007 forbids.

So this returns without spawning anything, and the debug_assert states the invariant the seam holds it to: the table that decides representability (EPIC_WIRE_VERIFIED) is empty, so a value cannot reach here — and flipping that table without an implementation here would be a silent drop, which is loud in every test build instead.

Source§

fn tool(&self) -> Tool

Source§

fn create_issue( &mut self, title: &str, body: &str, labels: &[String], assignee: Option<&str>, _priority: Option<&str>, _status: &str, ) -> Result<String>

Create a remote issue and return its remote id (GitLab iid, Linear identifier).
Source§

fn update_issue( &mut self, remote_ref: &str, title: &str, body: &str, labels: &[String], assignee: Option<&str>, _priority: Option<&str>, _status: &str, ) -> Result<()>

Update an existing remote issue in place.
Source§

fn mark_done(&mut self, remote_ref: &str) -> Result<()>

Convey “done” (GitLab: issue close <id>). Only invoked when done_via_status is false.
Source§

fn list_open(&mut self) -> Result<Vec<RemoteIssue>>

List open remote issues (the import source). Closed/done issues are excluded.
Source§

fn done_via_status(&self) -> bool

Linear sets done through the status flag; GitLab needs a separate close call.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.