Skip to main content

RepoService

Struct RepoService 

Source
pub struct RepoService {
    pub permission_gate: PermissionGate,
    pub context_docs: ContextDocsManager,
    /* private fields */
}
Expand description

High-level interface for all VCS operations in NAP.

§Thread safety

RepoService is Send + Sync and safe to share across threads. Internal state (e.g., the permission gate cache, context-doc graph) uses interior mutability.

Fields§

§permission_gate: PermissionGate

Permission gate.

§context_docs: ContextDocsManager

Context-document manager.

Implementations§

Source§

impl RepoService

Source

pub fn new( backend: Box<dyn VcsBackend>, workspace_root: &Path, ) -> Result<Self, NapError>

Create a new RepoService with the given backend and workspace path.

The permission gate is loaded from context/nap-gate.toml if it exists, otherwise a permissive gate is used. Use RepoService::with_gate for custom gate behaviour.

Source

pub fn with_gate( backend: Box<dyn VcsBackend>, workspace_root: &Path, permission_gate: PermissionGate, ) -> Self

Create a RepoService with an explicit permission gate.

Source

pub fn from_env(workspace_root: &Path) -> Result<Self, NapError>

Create a RepoService from environment variables (for the common local-dev case).

Source

pub fn backend(&self) -> &dyn VcsBackend

The underlying VCS backend (for advanced use).

Source

pub fn workspace_root(&self) -> &Path

Workspace root path.

Source

pub fn create_repository( &self, workspace_id: &str, repo_id: &str, _opts: RepoOptions, ) -> Result<Repository, NapError>

Create a repository on the lore server and clone it locally.

This is the primary way to bootstrap a NAP workspace.

Source

pub fn open_workspace(&self) -> Result<Workspace, NapError>

Open an existing local workspace (assumes lore clone already happened, or the workspace directory already exists).

Source

pub fn write_file( &self, path: &str, content: &str, principal: &str, ) -> Result<(), NapError>

Write a file, checking permissions first.

Source

pub fn read_file(&self, path: &str, principal: &str) -> Result<String, NapError>

Read a file, checking permissions first.

Source

pub fn commit(&self, message: &str, author: &str) -> Result<String, NapError>

Commit staged changes.

Source

pub fn log( &self, file: Option<&str>, limit: usize, ) -> Result<Vec<CommitInfo>, NapError>

Get commit history.

Source

pub fn create_branch(&self, name: &str) -> Result<(), NapError>

Create a branch.

Source

pub fn switch_branch(&self, name: &str) -> Result<(), NapError>

Switch to a branch.

Source

pub fn current_branch(&self) -> Result<String, NapError>

Get current branch.

Source

pub fn list_branches(&self) -> Result<Vec<String>, NapError>

List branches.

Source

pub fn create_tag(&self, name: &str) -> Result<(), NapError>

Create a tag.

Source

pub fn list_tags(&self) -> Result<Vec<String>, NapError>

List tags.

Source

pub fn push( &self, remote: Option<&str>, branch: Option<&str>, ) -> Result<(), NapError>

Push to the lore server.

Source

pub fn pull( &self, remote: Option<&str>, branch: Option<&str>, ) -> Result<(), NapError>

Pull from the lore server.

Source

pub fn register_context_doc( &self, path: &str, metadata: &[(&str, &str)], ) -> Result<(), NapError>

Register a context document. See ContextDocsManager::register.

Source

pub fn add_context_dep( &self, source: &str, target: &str, ) -> Result<(), NapError>

Add a dependency between context documents.

Source

pub fn all_context_docs(&self) -> Result<Vec<ContextDocument>, NapError>

Get all context documents.

Source

pub fn start_autopublish( &self, config: AutopublishConfig, ) -> Result<AutopublishHandle, NapError>

Start the autopublish worker.

The worker takes ownership of a new backend instance (created from env variables) so the shared RepoService backend is not consumed. If you need a worker with a specific backend, construct AutopublishWorker directly.

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more