@@ -2507,3 +2507,83 @@ fn install_incompat_msrv() {
2507
2507
" )
2508
2508
. with_status ( 101 ) . run ( ) ;
2509
2509
}
2510
+
2511
+ #[ cfg( windows) ]
2512
+ #[ cargo_test]
2513
+ fn uninstall_running_binary ( ) {
2514
+ Package :: new ( "foo" , "0.0.1" )
2515
+ . file ( "src/lib.rs" , "" )
2516
+ . file (
2517
+ "Cargo.toml" ,
2518
+ r#"
2519
+ [package]
2520
+ name = "foo"
2521
+ version = "0.0.1"
2522
+
2523
+ [[bin]]
2524
+ name = "foo"
2525
+ path = "src/main.rs"
2526
+ "# ,
2527
+ )
2528
+ . file (
2529
+ "src/main.rs" ,
2530
+ r#"
2531
+ use std::{{thread, time}};
2532
+ fn main() {
2533
+ println!("start longrunning job.");
2534
+ thread::sleep(time::Duration::from_secs(3));
2535
+ println!("end longrunning job.");
2536
+ }
2537
+ "# ,
2538
+ )
2539
+ . publish ( ) ;
2540
+
2541
+ cargo_process ( "install foo" )
2542
+ . with_stderr (
2543
+ "\
2544
+ [UPDATING] `[..]` index
2545
+ [DOWNLOADING] crates ...
2546
+ [DOWNLOADED] foo v0.0.1 (registry [..])
2547
+ [INSTALLING] foo v0.0.1
2548
+ [COMPILING] foo v0.0.1
2549
+ [FINISHED] release [optimized] target(s) in [..]
2550
+ [INSTALLING] [CWD]/home/.cargo/bin/foo[EXE]
2551
+ [INSTALLED] package `foo v0.0.1` (executable `foo[EXE]`)
2552
+ [WARNING] be sure to add `[..]` to your PATH to be able to run the installed binaries
2553
+ " ,
2554
+ )
2555
+ . run ( ) ;
2556
+ assert_has_installed_exe ( cargo_home ( ) , "foo" ) ;
2557
+
2558
+ use cargo_util:: ProcessBuilder ;
2559
+ use std:: thread;
2560
+ let foo_bin = cargo_test_support:: install:: cargo_home ( )
2561
+ . join ( "bin" )
2562
+ . join ( cargo_test_support:: install:: exe ( "foo" ) ) ;
2563
+
2564
+ let t = thread:: spawn ( || ProcessBuilder :: new ( foo_bin) . exec ( ) . unwrap ( ) ) ;
2565
+
2566
+ cargo_process ( "uninstall foo" )
2567
+ . with_status ( 101 )
2568
+ . with_stderr_contains ( "[ERROR] failed to remove file `[CWD]/home/.cargo/bin/foo[EXE]`" )
2569
+ . run ( ) ;
2570
+ assert_has_installed_exe ( cargo_home ( ) , "foo" ) ;
2571
+
2572
+ t. join ( ) . unwrap ( ) ;
2573
+ cargo_process ( "uninstall foo" )
2574
+ . with_stderr ( "[REMOVING] [CWD]/home/.cargo/bin/foo[EXE]" )
2575
+ . run ( ) ;
2576
+ cargo_process ( "install foo" )
2577
+ . with_stderr (
2578
+ "\
2579
+ [UPDATING] `[..]` index
2580
+ [INSTALLING] foo v0.0.1
2581
+ [COMPILING] foo v0.0.1
2582
+ [FINISHED] release [optimized] target(s) in [..]
2583
+ [INSTALLING] [CWD]/home/.cargo/bin/foo[EXE]
2584
+ [INSTALLED] package `foo v0.0.1` (executable `foo[EXE]`)
2585
+ [WARNING] be sure to add `[..]` to your PATH to be able to run the installed binaries
2586
+ " ,
2587
+ )
2588
+ . run ( ) ;
2589
+ }
0 commit comments