Skip to content

Commit 2b1c75d

Browse files
committed
fix: deduplicate concurrent refresh requests (Fixes #383)
1 parent a99cf64 commit 2b1c75d

File tree

4 files changed

+1650
-136
lines changed

4 files changed

+1650
-136
lines changed

crates/pet-poetry/src/lib.rs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,15 @@ impl Poetry {
143143
pub fn from(environment: &dyn Environment) -> Poetry {
144144
Poetry::new(environment)
145145
}
146+
147+
pub fn sync_search_result_from(&self, source: &Poetry) {
148+
let search_result = source.search_result.read().unwrap().clone();
149+
self.search_result
150+
.write()
151+
.unwrap()
152+
.clone_from(&search_result);
153+
}
154+
146155
fn find_with_cache(&self) -> Option<LocatorResult> {
147156
// First check if we have cached results
148157
{
@@ -294,3 +303,50 @@ impl Locator for Poetry {
294303
}
295304
}
296305
}
306+
307+
#[cfg(test)]
308+
mod tests {
309+
use super::*;
310+
use pet_core::os_environment::EnvironmentApi;
311+
312+
#[test]
313+
fn test_sync_search_result_from_replaces_cached_result() {
314+
let environment = EnvironmentApi::new();
315+
let target = Poetry::from(&environment);
316+
let source = Poetry::from(&environment);
317+
318+
target
319+
.search_result
320+
.write()
321+
.unwrap()
322+
.replace(LocatorResult {
323+
managers: vec![],
324+
environments: vec![PythonEnvironment {
325+
name: Some("stale".to_string()),
326+
kind: Some(PythonEnvironmentKind::Poetry),
327+
..Default::default()
328+
}],
329+
});
330+
331+
source
332+
.search_result
333+
.write()
334+
.unwrap()
335+
.replace(LocatorResult {
336+
managers: vec![],
337+
environments: vec![PythonEnvironment {
338+
name: Some("fresh".to_string()),
339+
kind: Some(PythonEnvironmentKind::Poetry),
340+
..Default::default()
341+
}],
342+
});
343+
344+
target.sync_search_result_from(&source);
345+
346+
let result = target.search_result.read().unwrap().clone();
347+
assert_eq!(
348+
result.unwrap().environments[0].name.as_deref(),
349+
Some("fresh")
350+
);
351+
}
352+
}

0 commit comments

Comments
 (0)