use bstr::BString;
use crate::{driver, eol, Driver, Pipeline};
#[derive(Default, Debug, Copy, Clone, Eq, PartialEq)]
pub enum CrlfRoundTripCheck {
Fail,
#[default]
Warn,
Skip,
}
#[derive(Default, Clone)]
pub struct Options {
pub drivers: Vec<Driver>,
pub eol_config: eol::Configuration,
pub crlf_roundtrip_check: CrlfRoundTripCheck,
pub encodings_with_roundtrip_check: Vec<&'static encoding_rs::Encoding>,
pub object_hash: gix_hash::Kind,
}
#[derive(Default, Debug, Clone)]
pub struct Context {
pub ref_name: Option<BString>,
pub treeish: Option<gix_hash::ObjectId>,
pub blob: Option<gix_hash::ObjectId>,
}
const ATTRS: [&str; 6] = ["crlf", "ident", "filter", "eol", "text", "working-tree-encoding"];
impl Pipeline {
pub fn new(context: gix_command::Context, options: Options) -> Self {
let mut attrs = gix_attributes::search::Outcome::default();
attrs.initialize_with_selection(&Default::default(), ATTRS);
Pipeline {
attrs,
context: Context::default(),
processes: driver::State::new(context),
options,
bufs: Default::default(),
}
}
pub fn into_driver_state(self) -> driver::State {
self.processes
}
}
impl Default for Pipeline {
fn default() -> Self {
Pipeline::new(Default::default(), Default::default())
}
}
impl Pipeline {
pub fn driver_state_mut(&mut self) -> &mut driver::State {
&mut self.processes
}
pub fn driver_context_mut(&mut self) -> &mut Context {
&mut self.context
}
pub fn options_mut(&mut self) -> &mut Options {
&mut self.options
}
pub fn buffers_mut(&mut self) -> &mut gix_utils::Buffers {
&mut self.bufs
}
}
pub mod convert;
pub(crate) mod util;