Uses a ThreadsafeFunction to perform JS function calls - mainly scm::create_source_control and SourceControl::create_resource_group. The only relevant functionality not yet implemented is QuickDiffProvider, which will be added in an upcoming change.
OUADGWKR6A7G3UHCLSC7AWLJIMS45Y56NPVTQ7FENJPYNTAMXXMAC create_source_control:vscode_sys::threadsafe_function::scm::create_source_control::get(vscode_object)?,
initialize_source_control: env.create_function_from_closure("initialize_source_control",initialize_source_control::callback,)?.build_threadsafe_function().build()?,
) -> Result<vscode_sys::reference::SourceControlRef, napi::Error> {let arguments = FnArgs::from((id, name, Some(uri)));
pijul_label: String,changes_label: String,untracked_label: String,) -> Result<(vscode_sys::reference::SourceControlRef,vscode_sys::reference::SourceControlResourceGroupRef,vscode_sys::reference::SourceControlResourceGroupRef,),napi::Error,> {let arguments = FnArgs::from((uri, pijul_label, changes_label, untracked_label));
}}mod initialize_source_control {use napi::bindgen_prelude::{FnArgs, FunctionCallContext};use crate::vscode_sys;pub type Arguments = (vscode_sys::reference::UriRef, String, String, String);pub type Return = (vscode_sys::reference::SourceControlRef,vscode_sys::reference::SourceControlResourceGroupRef,vscode_sys::reference::SourceControlResourceGroupRef,);pub type Prototype = napi::threadsafe_function::ThreadsafeFunction<FnArgs<Arguments>,Return,FnArgs<Arguments>,napi::Status,false,false,0,>;pub fn callback(function_call_context: FunctionCallContext) -> Result<Return, napi::Error> {let (repository_uri_ref, pijul_label, changes_label, untracked_label): Arguments =function_call_context.args()?;let source_control = vscode_sys::scm::create_source_control(function_call_context.env,"pijul",&pijul_label,&repository_uri_ref.get_inner(function_call_context.env)?,)?;let unrecorded_changes = source_control.create_resource_group("changes", &changes_label)?;let untracked_paths =source_control.create_resource_group("untracked", &untracked_label)?;Ok((source_control.create_ref()?,unrecorded_changes.create_ref()?,untracked_paths.create_ref()?,))
}struct Repository {repository: pijul_extension::FileSystemRepository,source_control: vscode_sys::reference::SourceControlRef,open_editors: HashMap<Utf8PathBuf, vscode_sys::reference::TextEditorRef>,unrecorded_changes: vscode_sys::reference::SourceControlResourceGroupRef,untracked_paths: vscode_sys::reference::SourceControlResourceGroupRef,
let repository_uri_ref = match threadsafe_functions
let std::collections::hash_map::Entry::Vacant(repository_entry) =repositories.entry(repository_path.clone())else {tracing::warn!(message = "Ignoring existing repository");continue;};let repository_uri = match threadsafe_functions
let (source_control, unrecorded_changes, untracked_paths) =match threadsafe_functions.initialize_source_control(repository_uri,String::from("Pijul"),String::from("Changes"),String::from("Untracked"),).await{Ok(initialized_source_control) => initialized_source_control,Err(error) => {tracing::error!(message = "Unable to create source control",?error);continue;}};
let source_control_ref = match threadsafe_functions.create_source_control(String::from("pijul"),String::from("Pijul"),repository_uri_ref,).await{Ok(source_control_ref) => source_control_ref,Err(error) => {tracing::error!(message = "Unable to create source control", ?error);continue;}};
let file_system_repository =match pijul_extension::FileSystemRepository::new(&repository_path) {Ok(repository) => repository,Err(error) => {tracing::error!(message = "Failed to open repository", ?error);continue;}};repository_entry.insert(Repository {repository: file_system_repository,source_control,open_editors: HashMap::new(),unrecorded_changes,untracked_paths,});
pub fn start(vscode_object: &napi::bindgen_prelude::Object) -> Result<(), napi::Error> {let threadsafe_functions = threadsafe_function::ThreadsafeFunctions::get(vscode_object)?;
pub fn start(env: &napi::Env,vscode_object: &napi::bindgen_prelude::Object,) -> Result<(), napi::Error> {let threadsafe_functions = threadsafe_function::ThreadsafeFunctions::get(env, vscode_object)?;