pub struct Jj<R: ProcessRunner = JobRunner> { /* private fields */ }Expand description
The real jj client. Generic over the ProcessRunner so tests can inject
a fake process executor; Jj::new() uses the real job-backed runner.
Implementations§
Source§impl<R: ProcessRunner> Jj<R>
impl<R: ProcessRunner> Jj<R>
Sourcepub fn with_runner(runner: R) -> Self
pub fn with_runner(runner: R) -> Self
Create a client driving runner — inject a fake in tests.
Sourcepub fn default_timeout(self, timeout: Duration) -> Self
pub fn default_timeout(self, timeout: Duration) -> Self
Apply a default timeout to every command this client builds.
Sourcepub fn default_env(
self,
key: impl AsRef<OsStr>,
value: impl AsRef<OsStr>,
) -> Self
pub fn default_env( self, key: impl AsRef<OsStr>, value: impl AsRef<OsStr>, ) -> Self
Set an environment variable on every command this client builds
(e.g. GIT_TERMINAL_PROMPT=0).
Sourcepub fn default_env_remove(self, key: impl AsRef<OsStr>) -> Self
pub fn default_env_remove(self, key: impl AsRef<OsStr>) -> Self
Remove an inherited environment variable on every command this client builds.
Source§impl<R: ProcessRunner> Jj<R>
impl<R: ProcessRunner> Jj<R>
Sourcepub fn default_cancel_on(self, token: CancellationToken) -> Self
pub fn default_cancel_on(self, token: CancellationToken) -> Self
Cancel every command this client builds when token fires (a
per-command cancel_on replaces the default — see
CliClient::default_cancel_on).
Source§impl<R: ProcessRunner> Jj<R>
impl<R: ProcessRunner> Jj<R>
Sourcepub async fn run_args(&self, args: &[&str]) -> Result<String>
pub async fn run_args(&self, args: &[&str]) -> Result<String>
Run jj <args> over string slices — jj.run_args(&["log", "-r", "@"])
without allocating a Vec<String>. Inherent (not on the object-safe
trait), so it can take &[&str]; forwards to the same path as
JjApi::run.
Sourcepub async fn workspace_roots(
&self,
dir: &Path,
names: &[String],
) -> Vec<Result<PathBuf>> ⓘ
pub async fn workspace_roots( &self, dir: &Path, names: &[String], ) -> Vec<Result<PathBuf>> ⓘ
Resolve several workspaces’ root paths in one bounded fan-out — one
jj workspace root --name <n> per name, at most
WORKSPACE_ROOTS_CONCURRENCY (8) live at a time — instead of awaiting each in
turn. Per-name Ok/Err mirrors workspace_root
(a non-zero exit or spawn failure → Err); results come back in names
order. Runs through this client’s own runner, so a ScriptedRunner test
drives it hermetically. Inherent (not on the object-safe trait): it’s a
throughput shape over the trait method, and the batch primitive isn’t a
mockable per-call seam.
Sourcepub async fn run_raw_args(&self, args: &[&str]) -> Result<ProcessResult<String>>
pub async fn run_raw_args(&self, args: &[&str]) -> Result<ProcessResult<String>>
Like run_args but never errors on a non-zero exit
(mirrors JjApi::run_raw).
Sourcepub async fn transaction<'a, T, F, Fut>(
&'a self,
dir: &'a Path,
f: F,
) -> Result<T>
pub async fn transaction<'a, T, F, Fut>( &'a self, dir: &'a Path, f: F, ) -> Result<T>
Run a mutation sequence with op-log rollback: capture the current
operation (op_head), run f with a JjAt bound to
dir, and on Err restore the repo to the captured operation
(op_restore) before returning the error.
jj.transaction(std::path::Path::new("."), |tx| async move {
tx.describe("wip").await?;
tx.new_change("next").await // an Err here rolls back the describe
})
.await?;Inherent (not on the object-safe trait): the closure parameter is
generic, which mockall / trait objects can’t express.
Caveats:
- Rollback runs on
Erronly — not on panic or cancellation (a dropped future); there is no asyncDrop. Convert panics toErrinsidefif you need that safety. - If the restore itself fails, the original error from
fis returned and the repo may be left mid-transaction; re-probeop_headto detect that.
Trait Implementations§
Source§impl<R: ProcessRunner> JjApi for Jj<R>
impl<R: ProcessRunner> JjApi for Jj<R>
Source§fn run<'life0, 'life1, 'async_trait>(
&'life0 self,
args: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn run<'life0, 'life1, 'async_trait>(
&'life0 self,
args: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
jj <args>, returning trimmed stdout (throws on a non-zero exit).Source§fn run_raw<'life0, 'life1, 'async_trait>(
&'life0 self,
args: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<ProcessResult<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn run_raw<'life0, 'life1, 'async_trait>(
&'life0 self,
args: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<ProcessResult<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
JjApi::run but never errors on a non-zero exit — returns the
captured ProcessResult.Source§fn version<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn version<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
jj --version).Source§fn capabilities<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<JjCapabilities>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn capabilities<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<JjCapabilities>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
JjCapabilities
(jj --version). A value type — probe once and keep it; an
unrecognisable version string is an Error::Parse.Source§fn status<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<Vec<ChangedPath>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn status<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<Vec<ChangedPath>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
@
(jj diff -r @ --summary), mirroring vcs_git status.Source§fn status_text<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn status_text<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
jj status text (human-readable) — the unparsed counterpart of
status, mirroring vcs_git status_text.Source§fn log<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
max: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Change>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn log<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
max: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Change>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
revset, newest first, up to max (jj log).Source§fn current_change<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<Change>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn current_change<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<Change>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
jj log -r @).Source§fn describe<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
message: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn describe<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
message: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
jj describe -m).Source§fn describe_rev<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
message: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn describe_rev<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
message: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
jj describe -r <revset> -m).Source§fn new_change<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
message: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn new_change<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
message: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
jj new -m).Source§fn bookmarks<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<Vec<Bookmark>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn bookmarks<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<Vec<Bookmark>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
jj bookmark list).Source§fn bookmarks_all<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<Vec<BookmarkRef>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn bookmarks_all<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<Vec<BookmarkRef>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
jj bookmark list -a).Source§fn reachable_bookmarks<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<Vec<Bookmark>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn reachable_bookmarks<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<Vec<Bookmark>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
@
(log -r 'heads(::@ & bookmarks())') — the candidate targets a commit
“belongs to”. A commit carrying several bookmarks yields one entry each.Source§fn bookmark_track<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
name: &'life2 str,
remote: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn bookmark_track<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
name: &'life2 str,
remote: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
jj bookmark track <name>@<remote>).Source§fn bookmark_set<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
name: &'life2 str,
revision: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn bookmark_set<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
name: &'life2 str,
revision: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
revision (jj bookmark set <name> -r <revision>).Source§fn git_fetch<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn git_fetch<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
jj git fetch); transient (network) failures
are retried (3 attempts, 500 ms backoff).Source§fn git_fetch_from<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
remote: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn git_fetch_from<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
remote: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
jj git fetch --remote <remote>);
transient failures are retried like git_fetch.Source§fn git_push<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
bookmark: Option<String>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn git_push<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
bookmark: Option<String>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
jj git push, optionally -b <bookmark>). The
bookmark is owned (Option<String>) to keep the trait mockall-friendly.Source§fn root<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<PathBuf>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn root<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<PathBuf>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
jj root).Source§fn current_bookmark<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<Option<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn current_bookmark<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<Option<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
@, if exactly one (or the
first of several); None when @ carries no bookmark. ws enforces the
one-bookmark policy on top.Source§fn trunk<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<Option<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn trunk<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<Option<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
jj log -r 'trunk()'); None when unresolved.Source§fn bookmark_create<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
name: &'life2 str,
revision: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn bookmark_create<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
name: &'life2 str,
revision: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
bookmark create <name> -r <rev>).Source§fn bookmark_rename<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
old: &'life2 str,
new: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn bookmark_rename<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
old: &'life2 str,
new: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
bookmark rename <old> <new>).Source§fn bookmark_delete<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
name: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn bookmark_delete<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
name: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
bookmark delete <name>).Source§fn bookmark_move<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
name: &'life2 str,
to: &'life3 str,
allow_backwards: bool,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn bookmark_move<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
name: &'life2 str,
to: &'life3 str,
allow_backwards: bool,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
bookmark move <name> --to <rev> [--allow-backwards]).Source§fn diff_summary<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
from: &'life2 str,
to: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<ChangedPath>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn diff_summary<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
from: &'life2 str,
to: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<ChangedPath>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
diff -r <from>..<to> --summary).Source§fn diff_stat<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<DiffStat>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn diff_stat<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<DiffStat>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
diff -r <revset> --stat).Source§fn diff_text<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
spec: DiffSpec,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn diff_text<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
spec: DiffSpec,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
spec (diff -r <spec> --git) —
stable machine output.Source§fn diff<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
spec: DiffSpec,
) -> Pin<Box<dyn Future<Output = Result<Vec<FileDiff>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn diff<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
spec: DiffSpec,
) -> Pin<Box<dyn Future<Output = Result<Vec<FileDiff>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
spec, layered on diff_text.Source§fn commit_count<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn commit_count<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
log -r <revset> --no-graph, one id per line).Source§fn is_conflicted<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn is_conflicted<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn has_workingcopy_conflict<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn has_workingcopy_conflict<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
jj status).Source§fn resolve_list<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn resolve_list<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
revset (jj resolve --list -r <revset>).
Empty when there are none.Source§fn template_query<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
template: &'life3 str,
limit: Option<usize>,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn template_query<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
template: &'life3 str,
limit: Option<usize>,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
jj log query and return raw stdout
(log -r <revset> --no-graph [--limit n] -T <template>).Source§fn description<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn description<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
revset resolves
to, trailing whitespace trimmed; empty for an undescribed change — or for
a revset matching no commit (an invalid revset still errors). A
multi-commit revset yields only the newest commit’s description
(jj log order, --limit 1).Source§fn evolog<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
max: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Change>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn evolog<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
max: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Change>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
max (jj evolog -r <revset>) — one Change row per recorded
predecessor.Source§fn file_annotate<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
path: &'life2 str,
revset: Option<String>,
) -> Pin<Box<dyn Future<Output = Result<Vec<AnnotationLine>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn file_annotate<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
path: &'life2 str,
revset: Option<String>,
) -> Pin<Box<dyn Future<Output = Result<Vec<AnnotationLine>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
path (jj file annotate <path> [-r <revset>];
None = @): which change introduced each line.Source§fn file_show<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
path: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn file_show<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
path: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
jj file show -r <revset> file:"<path>" — the path is wrapped as an exact-path fileset, so
fileset metacharacters in the name stay literal). Content is decoded
lossily — a binary file comes back mangled rather than erroring.Source§fn rebase<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
onto: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn rebase<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
onto: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
rebase -d <onto>).Source§fn rebase_branch<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
branch: &'life2 str,
dest: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn rebase_branch<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
branch: &'life2 str,
dest: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
rebase -b <branch> -d <dest>).Source§fn edit<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn edit<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
edit <rev>).Source§fn squash_into<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
into: &'life2 str,
use_destination_message: bool,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn squash_into<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
into: &'life2 str,
use_destination_message: bool,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
squash --into <rev>). When
use_destination_message, keep the destination’s description
(--use-destination-message) instead of combining the two.Source§fn commit_paths<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
filesets: &'life2 [JjFileset],
message: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn commit_paths<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
filesets: &'life2 [JjFileset],
message: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
commit -m <message> <filesets>); the rest stay in the new working-copy change.Source§fn squash_paths<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
spec: SquashPaths,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn squash_paths<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
spec: SquashPaths,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
squash --from <from> --into <into> [--use-destination-message] <filesets>).Source§fn sparse_set<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
patterns: &'life2 [String],
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn sparse_set<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
patterns: &'life2 [String],
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
patterns
(sparse set --clear --add <p>…); an empty list clears the working copy.Source§fn new_merge<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
message: &'life2 str,
parents: Vec<String>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn new_merge<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
message: &'life2 str,
parents: Vec<String>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
new -m <msg> <p1> <p2> …).Source§fn abandon<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn abandon<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
abandon <rev>).Source§fn git_fetch_branch<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
branch: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn git_fetch_branch<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
branch: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
git fetch --remote origin -b <branch>);
transient failures are retried (3×, 500 ms).Source§fn git_import<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn git_import<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
jj git import) — colocated-repo sync.Source§fn git_clone<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
url: &'life1 str,
dest: &'life2 Path,
colocate: bool,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn git_clone<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
url: &'life1 str,
dest: &'life2 Path,
colocate: bool,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
dest (jj git clone <url> <dest> --colocate|--no-colocate). Runs without a working directory — pass an
absolute dest. The flag is always passed explicitly: whether
colocation (a visible .git alongside .jj) is jj’s default depends
on the jj version and the user’s git.colocate config, so colocate
decides deterministically.Source§fn absorb<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
from: Option<String>,
filesets: &'life2 [JjFileset],
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn absorb<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
from: Option<String>,
filesets: &'life2 [JjFileset],
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
absorb [--from <revset>] [<filesets>…]); empty
filesets absorbs everything.Source§fn split_paths<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
filesets: &'life2 [JjFileset],
message: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn split_paths<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
filesets: &'life2 [JjFileset],
message: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
@ into their own commit described
by message (split -m <message> <filesets>…); the remainder stays
behind. filesets must be non-empty — a fileset-less split opens jj’s
interactive diff editor (a headless hang), so it is refused with an
error before spawning.Source§fn duplicate<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn duplicate<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
revset: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
duplicate <revset>).Source§fn op_head<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn op_head<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
op log --no-graph --limit 1) — capture before
a risky sequence to roll back to.Source§fn op_log<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Operation>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn op_log<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Operation>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
limit operations, newest first (op log --no-graph --limit n).Source§fn op_restore<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
op_id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn op_restore<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
op_id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
op restore <id>).Source§fn op_undo<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn op_undo<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
op undo).Source§fn workspace_list<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<Vec<Workspace>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn workspace_list<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
) -> Pin<Box<dyn Future<Output = Result<Vec<Workspace>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
workspace list).Source§fn workspace_root<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
name: Option<String>,
) -> Pin<Box<dyn Future<Output = Result<PathBuf>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn workspace_root<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
name: Option<String>,
) -> Pin<Box<dyn Future<Output = Result<PathBuf>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
workspace root [--name <name>]).Source§fn workspace_add<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
spec: WorkspaceAdd,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn workspace_add<'life0, 'life1, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
spec: WorkspaceAdd,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
workspace add --name <name> -r <base> <path>).Source§fn workspace_forget<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
name: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn workspace_forget<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
dir: &'life1 Path,
name: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
workspace forget <name>).