1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
mod evolve;
mod execute;
mod plan;
pub mod rewrite_hooks;
use std::sync::Mutex;
pub use evolve::{find_abandoned_children, find_rewrite_target};
pub use execute::{
execute_rebase_plan, move_branches, ExecuteRebasePlanOptions, ExecuteRebasePlanResult,
MergeConflictInfo,
};
pub use plan::{BuildRebasePlanError, BuildRebasePlanOptions, RebasePlan, RebasePlanBuilder};
use tracing::instrument;
use crate::core::task::{Resource, ResourcePool};
use crate::git::Repo;
#[derive(Debug)]
pub struct RepoResource {
repo: Mutex<Repo>,
}
impl RepoResource {
#[instrument]
pub fn new_pool(repo: &Repo) -> eyre::Result<ResourcePool<Self>> {
let repo = Mutex::new(repo.try_clone()?);
let resource = Self { repo };
Ok(ResourcePool::new(resource))
}
}
impl Resource for RepoResource {
type Output = Repo;
type Error = eyre::Error;
fn try_create(&self) -> Result<Self::Output, Self::Error> {
let repo = self
.repo
.lock()
.map_err(|_| eyre::eyre!("Poisoned mutex for RepoResource"))?;
repo.try_clone()
}
}
pub type RepoPool = ResourcePool<RepoResource>;