Create fully-initialized `SourceControl` object in `event_loop`
Dependencies
- [2]
WFWTKCJNCreate initial Visual Studio Code extension - [3]
3YGYMEXVCreate `event_loop` module - [4]
TDTLSDFGCreate macro for defining `ThreadsafeFunction`s - [5]
NB2MF3MYAdd `OpenWorkspaceFolder` event - [6]
MGJ23FHFAssign repository URI to source control in `OpenWorkspaceFolder` events
Change contents
- replacement in extensions/vscode/src/lib.rs at line 393
event_loop::start(&vscode_object)?;event_loop::start(env, &vscode_object)?; - replacement in extensions/vscode/src/event_loop/threadsafe_function.rs at line 6
create_source_control: vscode_sys::threadsafe_function::scm::create_source_control::Prototype,initialize_source_control: initialize_source_control::Prototype, - replacement in extensions/vscode/src/event_loop/threadsafe_function.rs at line 11
pub fn get(vscode_object: &Object) -> Result<Self, napi::Error> {pub fn get(env: &napi::Env, vscode_object: &Object) -> Result<Self, napi::Error> { - replacement in extensions/vscode/src/event_loop/threadsafe_function.rs at line 13
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()?, - replacement in extensions/vscode/src/event_loop/threadsafe_function.rs at line 24
pub async fn create_source_control(pub async fn initialize_source_control( - edit in extensions/vscode/src/event_loop/threadsafe_function.rs at line 26
id: String,name: String, - replacement in extensions/vscode/src/event_loop/threadsafe_function.rs at line 27
) -> 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)); - replacement in extensions/vscode/src/event_loop/threadsafe_function.rs at line 40
self.create_source_control.call_async(arguments).awaitself.initialize_source_control.call_async(arguments).await - edit in extensions/vscode/src/event_loop/threadsafe_function.rs at line 50
}}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()?,)) - edit in extensions/vscode/src/event_loop/mod.rs at line 1
use std::collections::HashMap; - edit in extensions/vscode/src/event_loop/mod.rs at line 7
use crate::vscode_sys; - edit in extensions/vscode/src/event_loop/mod.rs at line 19
}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, - edit in extensions/vscode/src/event_loop/mod.rs at line 35
let mut repositories: HashMap<Utf8PathBuf, Repository> = HashMap::new(); - replacement in extensions/vscode/src/event_loop/mod.rs at line 71
let repository_uri_ref = match threadsafe_functionslet 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 - replacement in extensions/vscode/src/event_loop/mod.rs at line 82
Ok(repository_uri_ref) => repository_uri_ref,Ok(repository_uri) => repository_uri, - edit in extensions/vscode/src/event_loop/mod.rs at line 92
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;}}; - replacement in extensions/vscode/src/event_loop/mod.rs at line 113[6.2972]→[5.2001:2073](∅→∅),[5.2001]→[5.2001:2073](∅→∅),[5.2073]→[6.2973:3197](∅→∅),[6.3197]→[5.2171:2519](∅→∅),[5.2171]→[5.2171:2519](∅→∅)
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,}); - replacement in extensions/vscode/src/event_loop/mod.rs at line 130
tracing::info!(message = "Opened workspace folder", ?workspace_path);tracing::info!(message = "Opened repository",?repository_path,?workspace_path); - replacement in extensions/vscode/src/event_loop/mod.rs at line 146
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)?;