@@ -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