buntrail-services 0.3.0

Filesystem, Git, terminal, search and connection services.
Documentation
use super::*;
use buntrail_core::contracts::*;
use std::sync::atomic::AtomicBool;
impl LocalGitService {
    pub fn read_sync(
        &self,
        worktree: WorktreeIdentity,
        query: GitRead,
        cancel: &AtomicBool,
    ) -> Result<GitReadOutput, CoreError> {
        let root = self.validate(&worktree, cancel)?;
        let args: &[&str] = match query {
            GitRead::Upstream => &[
                "for-each-ref",
                "--format=%(refname)%00%(upstream:remotename)%00%(upstream:remoteref)",
                "refs/heads",
            ],
            GitRead::StatusShort => &["status", "--short", "--branch"],
            GitRead::StatusPorcelain => {
                &["status", "--porcelain=v1", "-z", "--untracked-files=all"]
            }
            GitRead::Head => &["rev-parse", "--abbrev-ref", "HEAD"],
            GitRead::HeadSymbolic => &["symbolic-ref", "--quiet", "--short", "HEAD"],
            GitRead::Inside => &["rev-parse", "--is-inside-work-tree"],
            GitRead::Refs => &[
                "for-each-ref",
                "--format=%(refname)%00%(HEAD)%00%(symref)",
                "refs/heads",
                "refs/remotes",
                "refs/tags",
            ],
            GitRead::Stashes => &["stash", "list", "--format=%gd: %s"],
            GitRead::Remotes => &["remote", "-v"],
            GitRead::Diff => &["diff", "--no-ext-diff", "--no-textconv", "--"],
            GitRead::StagedDiff => &["diff", "--cached", "--no-ext-diff", "--no-textconv", "--"],
            GitRead::Log => &["log", "-30", "--oneline", "--decorate"],
            GitRead::Graph => &["log", "--graph", "--oneline", "--decorate", "--all", "-100"],
        };
        let output = process::run(&root, &process::args(args), cancel)?;
        Ok(GitReadOutput {
            stdout: output.stdout,
            stderr: output.stderr,
            success: output.success,
        })
    }
}