Skip to main content

JjVcs

Struct JjVcs 

Source
pub struct JjVcs { /* private fields */ }

Implementations§

Source§

impl JjVcs

Source

pub fn open(root: &Path) -> Result<Self, VcsError>

Source

pub fn open_with_settings( root: &Path, settings: &DiffSettings, ) -> Result<Self, VcsError>

Trait Implementations§

Source§

impl Vcs for JjVcs

Source§

fn read_jj_view(&self, log_limit: usize) -> Result<Option<JjView>, VcsError>

Change ids cover twice log_limit, since jj and git order a busy history differently.

Source§

fn status(&self) -> Result<StatusModel, VcsError>

One diff pass of @- vs the working copy. jj marks a new file intent-to-add in the index, so git’s three lists would count it twice.

Source§

fn resolve(&self, revision: &str) -> Result<String, VcsError>

Git syntax (main~2, refs, oids, HEAD as @-) resolves through git, since a colocated repo’s git refs are current where jj’s import of them may lag. With no .git the store’s refs are stale or absent, so jj’s bookmarks name the commit there, and git applies the ancestry suffix. What git cannot read (trunk(), change ids) is a jj revset; a git suffix never goes to jj, which reads ~ as a set difference.

Source§

fn branches(&self) -> Result<Vec<BranchInfo>, VcsError>

A repo with no .git lists jj’s local bookmarks; the one @ sits on or under counts as checked out.

Source§

fn divergence(&self, branch: &str) -> Result<Option<(usize, usize)>, VcsError>

A repo with no .git measures a bookmark against its first remote namesake.

Source§

fn pull_target(&self) -> Result<Option<PullTarget>, VcsError>

origin wins when the bookmark tracks several remotes.

Source§

fn commit(&self, message: &str) -> Result<String, VcsError>

Messages go as --message=<text>: clap reads a separate value that starts with - as a flag.

Source§

fn amend( &self, message: Option<&str>, use_index: bool, ) -> Result<String, VcsError>

None squashes with -u, since a bare squash opens an editor when both sides are described. Some without use_index rewords @- alone.

Source§

fn create_branch(&self, name: &str, _checkout: bool) -> Result<(), VcsError>

Bookmarks @; checkout is moot since @ is already checked out.

Source§

fn delete_branch(&self, name: &str) -> Result<(), VcsError>

exact:, since jj reads a bare name as a glob.

Source§

fn checkout(&self, name: &str) -> Result<(), VcsError>

jj new <rev> works on top of the branch and keeps the change left behind; jj edit would rewrite the tip in place.

Source§

fn network_argv(&self, op: NetworkOp) -> Result<Vec<String>, VcsError>

A push sends what JjVcs::push_selection picks, and jj tracks the remote bookmark it makes. A pull is the fetch alone; Vcs::rebase_onto_remote follows it.

Source§

fn has_index(&self) -> bool

Whether this backend has a staging area. jj has none, so its whole working copy reads as StatusModel::staged.
Source§

fn native_git_checkout(&self) -> bool

Whether a raw git/forge CLI command may check out a branch. False for jj, whose operation log would miss the write, so we go through Vcs::checkout there.
Source§

fn git_dir(&self) -> Result<PathBuf, VcsError>

Resolved metadata directory. In a linked worktree this is the gitdir the .git file points at.
Source§

fn head(&self) -> Result<HeadInfo, VcsError>

Source§

fn adopt_jj_view(&self, view: JjView)

Take a view another handle read, with no subprocess.
Source§

fn working_tree_diff(&self) -> Result<DiffModel, VcsError>

HEAD vs index + worktree, untracked files included.
Source§

fn tree_to_workdir_diff(&self, base_oid: &str) -> Result<DiffModel, VcsError>

Vcs::working_tree_diff taken from base_oid.
Source§

fn commit_diff(&self, oid: &str) -> Result<DiffModel, VcsError>

Changes a single commit introduced over its first parent.
Source§

fn range_diff( &self, oldest_oid: &str, newest_oid: &str, ) -> Result<DiffModel, VcsError>

git diff <oldest>^..<newest>. A root oldest diffs from the empty tree.
Source§

fn tree_diff( &self, base_oid: &str, newest_oid: &str, ) -> Result<DiffModel, VcsError>

git diff <base> <newest>; with base a merge base this is a three-dot diff.
Source§

fn merge_base(&self, a: &str, b: &str) -> Result<String, VcsError>

Source§

fn log( &self, limit: usize, all_branches: bool, ) -> Result<Vec<LogEntry>, VcsError>

History from HEAD, or from every branch, remote branch and tag with all_branches, newest first and each commit before its parents.
Source§

fn default_branch(&self, remote: &str) -> Result<Option<String>, VcsError>

The branch a pull request merges into by default, if the repo says.
Source§

fn commits_between( &self, base: &str, head: &str, ) -> Result<Vec<LogEntry>, VcsError>

Commits reachable from head but not base, newest first.
Source§

fn unpushed(&self, limit: usize) -> Result<Option<Vec<LogEntry>>, VcsError>

Commits on HEAD that no remote-tracking branch contains, newest first, at most limit. None when the repo has no remote-tracking refs. We ask the remotes since a configured upstream may be a local branch or a stale ref.
Source§

fn blame(&self, rel: &Path) -> Result<Vec<BlameSpan>, VcsError>

Last commit to touch each line of rel as the worktree has it, in line order. Uncommitted lines come back as spans owned by no commit.
Source§

fn read_at(&self, rev: &str, path: &str) -> Result<Option<String>, VcsError>

One file’s content in rev’s tree, None when the tree lacks it.
Source§

fn read_blob(&self, oid: &str) -> Result<Option<Vec<u8>>, VcsError>

A blob’s raw bytes by its hex id (a crate::model::BlobIds side), None when the object store has no such blob.
Source§

fn tracked_files(&self) -> Result<Vec<PathBuf>, VcsError>

Every tracked file, repo-relative and sorted. This is the index, so a staged new file is tracked and an untracked one is not.
Source§

fn attr(&self, rel: &Path, name: &str) -> bool

Whether the repo’s git attributes set name to true for rel. Unreadable attribute files read as unset.
Source§

fn all_branches(&self) -> Result<Vec<String>, VcsError>

Local and remote-tracking branch names.
Source§

fn stage(&self, _rel: &Path) -> Result<(), VcsError>

Stage a whole file (worktree deletions become staged deletions).
Source§

fn stage_everything(&self) -> Result<(), VcsError>

Stage every change in the worktree, deletions and untracked files included.
Source§

fn unstage_everything(&self) -> Result<(), VcsError>

Reset the whole index back to HEAD, keeping the worktree.
Source§

fn stage_hunk(&self, _rel: &Path, _hunk: &HunkId) -> Result<(), VcsError>

Stage one hunk out of the unstaged (or untracked) changes of a file.
Source§

fn unstage(&self, _rel: &Path) -> Result<(), VcsError>

Reset a file’s index entry back to HEAD, keeping the worktree.
Source§

fn unstage_hunk(&self, _rel: &Path, _hunk: &HunkId) -> Result<(), VcsError>

Remove one staged hunk from the index, keeping the worktree.
Source§

fn discard(&self, rel: &Path) -> Result<(), VcsError>

Throw away worktree changes only; an untracked file is deleted. Refused while the file has staged changes (unstage first).
Source§

fn commit_paths( &self, message: &str, paths: &[String], ) -> Result<String, VcsError>

Commit only paths (files or folders) of the working copy, which jj can do with no index; returns the new commit id.
Source§

fn change(&self, op: &ChangeOp) -> Result<(), VcsError>

A jj change verb; git has none.
Source§

fn rebase_onto_remote( &self, bookmark: &str, remote: &str, ) -> Result<PullOutcome, VcsError>

After a fetch, rebase @’s branch onto bookmark@remote when that moved.
Source§

fn commit_message(&self, oid: &str) -> Result<String, VcsError>

Full message of the commit oid.
Source§

fn head_message(&self) -> Result<String, VcsError>

Full message of the HEAD commit, for amend/reword editor templates.
Source§

fn stash_push(&self, _message: Option<&str>) -> Result<(), VcsError>

Stash tracked changes, leaving untracked files in place like git stash. message None lets the backend label it.
Source§

fn stash_pop(&self) -> Result<(), VcsError>

Restore the most recent stash and drop it. Refused when there is no stash or the pop would conflict.
Source§

fn workdir(&self) -> Result<PathBuf, VcsError>

Source§

fn remote_url(&self, name: &str) -> Result<Option<String>, VcsError>

Source§

fn remotes(&self) -> Result<Vec<String>, VcsError>

Source§

fn set_diff_algorithm(&self, algorithm: DiffAlgorithm, indent_heuristic: bool)

Set the line-diff algorithm for every later diff of this instance.

Auto Trait Implementations§

§

impl !Freeze for JjVcs

§

impl !RefUnwindSafe for JjVcs

§

impl !Sync for JjVcs

§

impl Send for JjVcs

§

impl Unpin for JjVcs

§

impl UnsafeUnpin for JjVcs

§

impl UnwindSafe for JjVcs

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, 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.