diff --git a/app/src/lib/backend/projects.ts b/app/src/lib/backend/projects.ts
index 89cd0eeff..5bca58ee3 100644
--- a/app/src/lib/backend/projects.ts
+++ b/app/src/lib/backend/projects.ts
@@ -27,6 +27,7 @@ export class Project {
use_diff_context: boolean | undefined;
snapshot_lines_threshold!: number | undefined;
use_new_locking!: boolean;
+ ignore_project_semaphore!: boolean;
get vscodePath() {
return this.path.includes('\\') ? '/' + this.path.replace('\\', '/') : this.path;
diff --git a/app/src/lib/settings/PreferencesForm.svelte b/app/src/lib/settings/PreferencesForm.svelte
index 361eb7bac..d83224517 100644
--- a/app/src/lib/settings/PreferencesForm.svelte
+++ b/app/src/lib/settings/PreferencesForm.svelte
@@ -23,6 +23,7 @@
let allowForcePushing = project?.ok_with_force_push;
let omitCertificateCheck = project?.omit_certificate_check;
let useNewLocking = project?.use_new_locking || false;
+ let ignoreProjectSemaphore = project?.ignore_project_semaphore || false;
let signCommits = false;
const gitConfig = getContext(GitConfigService);
@@ -101,8 +102,13 @@
project.use_new_locking = value;
await projectService.updateProject(project);
}
+ async function setIgnoreProjectSemaphore(value: boolean) {
+ project.ignore_project_semaphore = value;
+ await projectService.updateProject(project);
+ }
$: setUseNewLocking(useNewLocking);
+ $: setIgnoreProjectSemaphore(ignoreProjectSemaphore);
onMount(async () => {
let gitConfigSettings = await gitConfig.getGbConfig(project.id);
@@ -288,4 +294,15 @@
+
+
+ Disable project semaphore usage
+
+ This is an experimental setting used to test if the project semaphore used in the GitButler
+ app API is necessary, or if it can be removed.
+
+
+
+
+
diff --git a/crates/gitbutler-core/src/projects/project.rs b/crates/gitbutler-core/src/projects/project.rs
index 12d744f9d..8493ea527 100644
--- a/crates/gitbutler-core/src/projects/project.rs
+++ b/crates/gitbutler-core/src/projects/project.rs
@@ -90,6 +90,8 @@ pub struct Project {
#[serde(default = "default_true")]
pub use_new_locking: bool,
+ #[serde(default)]
+ pub ignore_project_semaphore: bool,
}
fn default_true() -> bool {
diff --git a/crates/gitbutler-core/src/projects/storage.rs b/crates/gitbutler-core/src/projects/storage.rs
index 02b2689cb..e343ec619 100644
--- a/crates/gitbutler-core/src/projects/storage.rs
+++ b/crates/gitbutler-core/src/projects/storage.rs
@@ -29,6 +29,7 @@ pub struct UpdateRequest {
pub use_diff_context: Option,
pub snapshot_lines_threshold: Option,
pub use_new_locking: Option,
+ pub ignore_project_semaphore: Option,
}
impl Storage {
@@ -127,6 +128,10 @@ impl Storage {
project.use_new_locking = use_new_locking;
}
+ if let Some(ignore_project_semaphore) = update_request.ignore_project_semaphore {
+ project.ignore_project_semaphore = ignore_project_semaphore;
+ }
+
self.inner
.write(PROJECTS_FILE, &serde_json::to_string_pretty(&projects)?)?;
diff --git a/crates/gitbutler-core/src/virtual_branches/controller.rs b/crates/gitbutler-core/src/virtual_branches/controller.rs
index 08d95fc8d..1325c30b1 100644
--- a/crates/gitbutler-core/src/virtual_branches/controller.rs
+++ b/crates/gitbutler-core/src/virtual_branches/controller.rs
@@ -41,7 +41,7 @@ impl Controller {
ownership: Option<&BranchOwnershipClaims>,
run_hooks: bool,
) -> Result {
- let _permit = self.semaphore.acquire().await;
+ self.permit(project.ignore_project_semaphore).await;
let project_repository = open_with_verify(project)?;
let snapshot_tree = project_repository.project().prepare_snapshot();
let result = super::commit(
@@ -76,7 +76,7 @@ impl Controller {
&self,
project: &Project,
) -> Result<(Vec, Vec)> {
- let _permit = self.semaphore.acquire().await;
+ self.permit(project.ignore_project_semaphore).await;
let project_repository = open_with_verify(project)?;
super::list_virtual_branches(&project_repository).map_err(Into::into)
@@ -87,7 +87,7 @@ impl Controller {
project: &Project,
create: &super::branch::BranchCreateRequest,
) -> Result {
- let _permit = self.semaphore.acquire().await;
+ self.permit(project.ignore_project_semaphore).await;
let project_repository = open_with_verify(project)?;
let branch_id = super::create_virtual_branch(&project_repository, create)?.id;
@@ -99,7 +99,7 @@ impl Controller {
project: &Project,
branch: &git::Refname,
) -> Result {
- let _permit = self.semaphore.acquire().await;
+ self.permit(project.ignore_project_semaphore).await;
let project_repository = open_with_verify(project)?;
super::create_virtual_branch_from_branch(&project_repository, branch).map_err(Into::into)
@@ -141,7 +141,7 @@ impl Controller {
project: &Project,
branch_id: BranchId,
) -> Result<()> {
- let _permit = self.semaphore.acquire().await;
+ self.permit(project.ignore_project_semaphore).await;
let project_repository = open_with_verify(project)?;
let _ = project_repository
@@ -151,7 +151,7 @@ impl Controller {
}
pub async fn update_base_branch(&self, project: &Project) -> Result> {
- let _permit = self.semaphore.acquire().await;
+ self.permit(project.ignore_project_semaphore).await;
let project_repository = open_with_verify(project)?;
let _ = project_repository
@@ -172,7 +172,7 @@ impl Controller {
project: &Project,
branch_update: super::branch::BranchUpdateRequest,
) -> Result<()> {
- let _permit = self.semaphore.acquire().await;
+ self.permit(project.ignore_project_semaphore).await;
let project_repository = open_with_verify(project)?;
let snapshot_tree = project_repository.project().prepare_snapshot();
@@ -197,7 +197,7 @@ impl Controller {
project: &Project,
branch_id: BranchId,
) -> Result<()> {
- let _permit = self.semaphore.acquire().await;
+ self.permit(project.ignore_project_semaphore).await;
let project_repository = open_with_verify(project)?;
super::delete_branch(&project_repository, branch_id)
@@ -208,7 +208,7 @@ impl Controller {
project: &Project,
ownership: &BranchOwnershipClaims,
) -> Result<()> {
- let _permit = self.semaphore.acquire().await;
+ self.permit(project.ignore_project_semaphore).await;
let project_repository = open_with_verify(project)?;
let _ = project_repository
@@ -218,7 +218,7 @@ impl Controller {
}
pub async fn reset_files(&self, project: &Project, files: &Vec) -> Result<()> {
- let _permit = self.semaphore.acquire().await;
+ self.permit(project.ignore_project_semaphore).await;
let project_repository = open_with_verify(project)?;
let _ = project_repository
@@ -234,7 +234,7 @@ impl Controller {
commit_oid: git2::Oid,
ownership: &BranchOwnershipClaims,
) -> Result {
- let _permit = self.semaphore.acquire().await;
+ self.permit(project.ignore_project_semaphore).await;
let project_repository = open_with_verify(project)?;
let _ = project_repository
@@ -251,7 +251,7 @@ impl Controller {
to_commit_oid: git2::Oid,
ownership: &BranchOwnershipClaims,
) -> Result {
- let _permit = self.semaphore.acquire().await;
+ self.permit(project.ignore_project_semaphore).await;
let project_repository = open_with_verify(project)?;
let _ = project_repository
@@ -273,7 +273,7 @@ impl Controller {
branch_id: BranchId,
commit_oid: git2::Oid,
) -> Result<()> {
- let _permit = self.semaphore.acquire().await;
+ self.permit(project.ignore_project_semaphore).await;
let project_repository = open_with_verify(project)?;
let snapshot_tree = project_repository.project().prepare_snapshot();
@@ -296,7 +296,7 @@ impl Controller {
commit_oid: git2::Oid,
offset: i32,
) -> Result<()> {
- let _permit = self.semaphore.acquire().await;
+ self.permit(project.ignore_project_semaphore).await;
let project_repository = open_with_verify(project)?;
let _ = project_repository
@@ -313,7 +313,7 @@ impl Controller {
commit_oid: git2::Oid,
offset: i32,
) -> Result<()> {
- let _permit = self.semaphore.acquire().await;
+ self.permit(project.ignore_project_semaphore).await;
let project_repository = open_with_verify(project)?;
let _ = project_repository
@@ -329,7 +329,7 @@ impl Controller {
branch_id: BranchId,
target_commit_oid: git2::Oid,
) -> Result<()> {
- let _permit = self.semaphore.acquire().await;
+ self.permit(project.ignore_project_semaphore).await;
let project_repository = open_with_verify(project)?;
let _ = project_repository
@@ -344,7 +344,7 @@ impl Controller {
branch_id: BranchId,
name_conflict_resolution: NameConflitResolution,
) -> Result {
- let _permit = self.semaphore.acquire().await;
+ self.permit(project.ignore_project_semaphore).await;
let project_repository = open_with_verify(project)?;
let snapshot_tree = project_repository.project().prepare_snapshot();
@@ -366,7 +366,7 @@ impl Controller {
with_force: bool,
askpass: Option