@@ -492,3 +492,101 @@ fn ignore_lockfile_inner() {
492
492
)
493
493
. run ( ) ;
494
494
}
495
+
496
+ #[ cargo_test]
497
+ fn use_workspace_root_lockfile ( ) {
498
+ // Issue #11148
499
+ // Workspace members should use `Cargo.lock` at workspace root
500
+
501
+ Package :: new ( "serde" , "0.2.0" ) . publish ( ) ;
502
+
503
+ let p = project ( )
504
+ . file (
505
+ "Cargo.toml" ,
506
+ r#"
507
+ [package]
508
+ name = "foo"
509
+ version = "0.0.1"
510
+ authors = []
511
+ license = "MIT"
512
+ description = "foo"
513
+
514
+ [dependencies]
515
+ serde = "0.2"
516
+
517
+ [workspace]
518
+ members = ["bar"]
519
+ "# ,
520
+ )
521
+ . file ( "src/main.rs" , "fn main() {}" )
522
+ . file (
523
+ "bar/Cargo.toml" ,
524
+ r#"
525
+ [package]
526
+ name = "bar"
527
+ version = "0.0.1"
528
+ authors = []
529
+ license = "MIT"
530
+ description = "bar"
531
+ workspace = ".."
532
+
533
+ [dependencies]
534
+ serde = "0.2"
535
+ "# ,
536
+ )
537
+ . file ( "bar/src/main.rs" , "fn main() {}" )
538
+ . build ( ) ;
539
+
540
+ // Create `Cargo.lock` in the workspace root.
541
+ p. cargo ( "generate-lockfile" ) . run ( ) ;
542
+
543
+ // Now, add a newer version of `serde`.
544
+ Package :: new ( "serde" , "0.2.1" ) . publish ( ) ;
545
+
546
+ // Expect: package `bar` uses `serde v0.2.0` as required by workspace `Cargo.lock`.
547
+ p. cargo ( "package --workspace" )
548
+ . with_stderr (
549
+ "\
550
+ [WARNING] manifest has no documentation, [..]
551
+ See [..]
552
+ [PACKAGING] bar v0.0.1 ([CWD]/bar)
553
+ [UPDATING] `dummy-registry` index
554
+ [VERIFYING] bar v0.0.1 ([CWD]/bar)
555
+ [DOWNLOADING] crates ...
556
+ [DOWNLOADED] serde v0.2.0 ([..])
557
+ [COMPILING] serde v0.2.0
558
+ [COMPILING] bar v0.0.1 ([CWD][..])
559
+ [FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
560
+ [PACKAGED] 4 files, [..]
561
+ [WARNING] manifest has no documentation, [..]
562
+ See [..]
563
+ [PACKAGING] foo v0.0.1 ([CWD])
564
+ [VERIFYING] foo v0.0.1 ([CWD])
565
+ [COMPILING] serde v0.2.0
566
+ [COMPILING] foo v0.0.1 ([CWD][..])
567
+ [FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
568
+ [PACKAGED] 4 files, [..]
569
+ " ,
570
+ )
571
+ . run ( ) ;
572
+
573
+ let package_path = p. root ( ) . join ( "target/package/foo-0.0.1.crate" ) ;
574
+ assert ! ( package_path. is_file( ) ) ;
575
+ let f = File :: open ( & package_path) . unwrap ( ) ;
576
+ validate_crate_contents (
577
+ f,
578
+ "foo-0.0.1.crate" ,
579
+ & [ "Cargo.lock" , "Cargo.toml" , "Cargo.toml.orig" , "src/main.rs" ] ,
580
+ & [ ] ,
581
+ ) ;
582
+
583
+ let package_path = p. root ( ) . join ( "target/package/bar-0.0.1.crate" ) ;
584
+ assert ! ( package_path. is_file( ) ) ;
585
+ let f = File :: open ( & package_path) . unwrap ( ) ;
586
+ validate_crate_contents (
587
+ f,
588
+ "bar-0.0.1.crate" ,
589
+ & [ "Cargo.lock" , "Cargo.toml" , "Cargo.toml.orig" , "src/main.rs" ] ,
590
+ & [ ] ,
591
+ ) ;
592
+ }
0 commit comments