summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2021-08-01 17:53:56 +0200
committerMatthias Beyer <mail@beyermatthias.de>2021-08-01 17:53:56 +0200
commit2b64f202760ce6137aed368401fafe5b01e50741 (patch)
tree068d97c234ad9b60073a514344f38310313195b4 /src
parent8a150b949e64629a1b987da0f44f77015287b3e0 (diff)
Refactor: Move locking to helper fn for less boilerplate
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
Diffstat (limited to 'src')
-rw-r--r--src/model/backend/worker.rs51
1 files changed, 19 insertions, 32 deletions
diff --git a/src/model/backend/worker.rs b/src/model/backend/worker.rs
index 4ae4686..4b0857c 100644
--- a/src/model/backend/worker.rs
+++ b/src/model/backend/worker.rs
@@ -44,43 +44,35 @@ impl BackendWorker {
}
}
- fn send_branch_list(&self, sender: BackendResponseSender) -> std::result::Result<(), BackendError> {
- let repo_lock = self.repo
- .lock()
- .map_err(|_| BackendError::LockError)?;
-
- let branch_names = get_branch_names(&self.repo_name, &*repo_lock)
- .map_err(|e| BackendError::Str(e.to_string()))?;
+ fn exec_on_repo<R, F>(&self, f: F) -> std::result::Result<R, BackendError>
+ where R: Sized,
+ F: FnOnce(&git2::Repository) -> std::result::Result<R, BackendError>,
+ {
+ self.repo.lock().map_err(|_| BackendError::LockError).and_then(|repo| f(&repo))
+ }
- drop(repo_lock);
+ fn send_branch_list(&self, sender: BackendResponseSender) -> std::result::Result<(), BackendError> {
+ let branch_names = self.exec_on_repo(|repo| {
+ get_branch_names(&self.repo_name, repo).map_err(|e| BackendError::Str(e.to_string()))
+ })?;
sender.send(BackendResponse::BranchList(branch_names.value))
.map_err(|_| BackendError::ChannelError)
}
fn send_tag_list(&self, sender: BackendResponseSender) -> std::result::Result<(), BackendError> {
- let repo_lock = self.repo
- .lock()
- .map_err(|_| BackendError::LockError)?;
-
- let tag_names = get_tag_names(&self.repo_name, &*repo_lock)
- .map_err(|e| BackendError::Str(e.to_string()))?;
-
- drop(repo_lock);
+ let tag_names = self.exec_on_repo(|repo| {
+ get_tag_names(&self.repo_name, repo).map_err(|e| BackendError::Str(e.to_string()))
+ })?;
sender.send(BackendResponse::TagList(tag_names.value))
.map_err(|_| BackendError::ChannelError)
}
fn find_branch_id(&self, name: String, sender: BackendResponseSender) -> std::result::Result<(), BackendError> {
- let repo_lock = self.repo
- .lock()
- .map_err(|_| BackendError::LockError)?;
-
- let branch = repo_lock.find_branch(&name, git2::BranchType::Local)
- .map_err(|_| BackendError::FindBranchError(name))?;
-
- drop(repo_lock);
+ let branch = self.exec_on_repo(|repo| {
+ repo.find_branch(&name, git2::BranchType::Local).map_err(|_| BackendError::FindBranchError(name))
+ })?;
let branch_id = branch.get()
.peel_to_commit()
@@ -92,14 +84,9 @@ impl BackendWorker {
}
fn find_tree_for_id(&self, id: git2::Oid, sender: BackendResponseSender) -> std::result::Result<(), BackendError> {
- let repo_lock = self.repo
- .lock()
- .map_err(|_| BackendError::LockError)?;
-
- let tree = repo_lock.find_tree(id)
- .map_err(|_| BackendError::FindTreeForIdError(id))?;
-
- drop(repo_lock);
+ let tree = self.exec_on_repo(|repo| {
+ repo.find_tree(id).map_err(|_| BackendError::FindTreeForIdError(id))
+ })?;
sender.send(BackendResponse::TreeId(tree.id()))
.map_err(|_| BackendError::ChannelError)