@@ -2469,3 +2469,290 @@ version = "0.1.0"
2469
2469
& [ ( "Cargo.toml" , & rewritten_toml) ] ,
2470
2470
) ;
2471
2471
}
2472
+
2473
+ fn verify_packaged_status_line (
2474
+ output : std:: process:: Output ,
2475
+ num_files : usize ,
2476
+ uncompressed_size : usize ,
2477
+ compressed_size : usize ,
2478
+ ) {
2479
+ let stderr = String :: from_utf8 ( output. stderr ) . unwrap ( ) ;
2480
+ let mut packaged_lines = stderr
2481
+ . lines ( )
2482
+ . filter ( |line| line. trim ( ) . starts_with ( "Packaged" ) ) ;
2483
+ let packaged_line = packaged_lines
2484
+ . next ( )
2485
+ . expect ( "`Packaged` status line should appear in stderr" ) ;
2486
+ assert ! (
2487
+ packaged_lines. next( ) . is_none( ) ,
2488
+ "Only one `Packaged` status line should appear in stderr"
2489
+ ) ;
2490
+ let size_info = packaged_line. trim ( ) . trim_start_matches ( "Packaged" ) . trim ( ) ;
2491
+ let uncompressed = cargo:: util:: format_bytes ( uncompressed_size as f32 ) ;
2492
+ let compressed = cargo:: util:: format_bytes ( compressed_size as f32 ) ;
2493
+ let expected = format ! (
2494
+ "{} files, {:.1}{}B ({:.1}{}B compressed)" ,
2495
+ num_files, uncompressed. 0 , uncompressed. 1 , compressed. 0 , compressed. 1
2496
+ ) ;
2497
+ assert_eq ! ( size_info, expected) ;
2498
+ }
2499
+
2500
+ #[ cargo_test]
2501
+ fn basic_filesizes ( ) {
2502
+ let cargo_toml_orig_contents = r#"
2503
+ [package]
2504
+ name = "foo"
2505
+ version = "0.0.1"
2506
+ authors = []
2507
+ exclude = ["*.txt"]
2508
+ license = "MIT"
2509
+ description = "foo"
2510
+ "# ;
2511
+ let main_rs_contents = r#"fn main() { println!("🦀"); }"# ;
2512
+ let cargo_toml_contents = format ! (
2513
+ r#"{}
2514
+ [package]
2515
+ name = "foo"
2516
+ version = "0.0.1"
2517
+ authors = []
2518
+ exclude = ["*.txt"]
2519
+ description = "foo"
2520
+ license = "MIT"
2521
+ "# ,
2522
+ cargo:: core:: package:: MANIFEST_PREAMBLE
2523
+ ) ;
2524
+ let cargo_lock_contents = r#"# This file is automatically @generated by Cargo.
2525
+ # It is not intended for manual editing.
2526
+ version = 3
2527
+
2528
+ [[package]]
2529
+ name = "foo"
2530
+ version = "0.0.1"
2531
+ "# ;
2532
+ let p = project ( )
2533
+ . file ( "Cargo.toml" , cargo_toml_orig_contents)
2534
+ . file ( "src/main.rs" , main_rs_contents)
2535
+ . file ( "src/bar.txt" , "Ignored text file contents" ) // should be ignored when packaging
2536
+ . build ( ) ;
2537
+
2538
+ let uncompressed_size = cargo_toml_orig_contents. len ( )
2539
+ + main_rs_contents. len ( )
2540
+ + cargo_toml_contents. len ( )
2541
+ + cargo_lock_contents. len ( ) ;
2542
+ let output = p. cargo ( "package" ) . exec_with_output ( ) . unwrap ( ) ;
2543
+
2544
+ assert ! ( p. root( ) . join( "target/package/foo-0.0.1.crate" ) . is_file( ) ) ;
2545
+ p. cargo ( "package -l" )
2546
+ . with_stdout (
2547
+ "\
2548
+ Cargo.lock
2549
+ Cargo.toml
2550
+ Cargo.toml.orig
2551
+ src/main.rs
2552
+ " ,
2553
+ )
2554
+ . run ( ) ;
2555
+ p. cargo ( "package" ) . with_stdout ( "" ) . run ( ) ;
2556
+
2557
+ let f = File :: open ( & p. root ( ) . join ( "target/package/foo-0.0.1.crate" ) ) . unwrap ( ) ;
2558
+ let compressed_size = f. metadata ( ) . unwrap ( ) . len ( ) as usize ;
2559
+ verify_packaged_status_line ( output, 4 , uncompressed_size, compressed_size) ;
2560
+ validate_crate_contents (
2561
+ f,
2562
+ "foo-0.0.1.crate" ,
2563
+ & [ "Cargo.lock" , "Cargo.toml" , "Cargo.toml.orig" , "src/main.rs" ] ,
2564
+ & [
2565
+ ( "Cargo.lock" , cargo_lock_contents) ,
2566
+ ( "Cargo.toml" , & cargo_toml_contents) ,
2567
+ ( "Cargo.toml.orig" , cargo_toml_orig_contents) ,
2568
+ ( "src/main.rs" , main_rs_contents) ,
2569
+ ] ,
2570
+ ) ;
2571
+ }
2572
+
2573
+ #[ cargo_test]
2574
+ fn larger_filesizes ( ) {
2575
+ let cargo_toml_orig_contents = r#"
2576
+ [package]
2577
+ name = "foo"
2578
+ version = "0.0.1"
2579
+ authors = []
2580
+ license = "MIT"
2581
+ description = "foo"
2582
+ "# ;
2583
+ let lots_of_crabs = std:: iter:: repeat ( "🦀" ) . take ( 1337 ) . collect :: < String > ( ) ;
2584
+ let main_rs_contents = format ! ( r#"fn main() {{ println!("{}"); }}"# , lots_of_crabs) ;
2585
+ let bar_txt_contents = "This file is relatively uncompressible, to increase the compressed
2586
+ package size beyond 1KiB.
2587
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt
2588
+ ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
2589
+ ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
2590
+ reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
2591
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est
2592
+ laborum." ;
2593
+ let cargo_toml_contents = format ! (
2594
+ r#"{}
2595
+ [package]
2596
+ name = "foo"
2597
+ version = "0.0.1"
2598
+ authors = []
2599
+ description = "foo"
2600
+ license = "MIT"
2601
+ "# ,
2602
+ cargo:: core:: package:: MANIFEST_PREAMBLE
2603
+ ) ;
2604
+ let cargo_lock_contents = r#"# This file is automatically @generated by Cargo.
2605
+ # It is not intended for manual editing.
2606
+ version = 3
2607
+
2608
+ [[package]]
2609
+ name = "foo"
2610
+ version = "0.0.1"
2611
+ "# ;
2612
+ let p = project ( )
2613
+ . file ( "Cargo.toml" , cargo_toml_orig_contents)
2614
+ . file ( "src/main.rs" , & main_rs_contents)
2615
+ . file ( "src/bar.txt" , bar_txt_contents)
2616
+ . build ( ) ;
2617
+
2618
+ let uncompressed_size = cargo_toml_orig_contents. len ( )
2619
+ + main_rs_contents. len ( )
2620
+ + cargo_toml_contents. len ( )
2621
+ + cargo_lock_contents. len ( )
2622
+ + bar_txt_contents. len ( ) ;
2623
+
2624
+ let output = p. cargo ( "package" ) . exec_with_output ( ) . unwrap ( ) ;
2625
+ assert ! ( p. root( ) . join( "target/package/foo-0.0.1.crate" ) . is_file( ) ) ;
2626
+ p. cargo ( "package -l" )
2627
+ . with_stdout (
2628
+ "\
2629
+ Cargo.lock
2630
+ Cargo.toml
2631
+ Cargo.toml.orig
2632
+ src/bar.txt
2633
+ src/main.rs
2634
+ " ,
2635
+ )
2636
+ . run ( ) ;
2637
+ p. cargo ( "package" ) . with_stdout ( "" ) . run ( ) ;
2638
+
2639
+ let f = File :: open ( & p. root ( ) . join ( "target/package/foo-0.0.1.crate" ) ) . unwrap ( ) ;
2640
+ let compressed_size = f. metadata ( ) . unwrap ( ) . len ( ) as usize ;
2641
+ verify_packaged_status_line ( output, 5 , uncompressed_size, compressed_size) ;
2642
+ validate_crate_contents (
2643
+ f,
2644
+ "foo-0.0.1.crate" ,
2645
+ & [
2646
+ "Cargo.lock" ,
2647
+ "Cargo.toml" ,
2648
+ "Cargo.toml.orig" ,
2649
+ "src/bar.txt" ,
2650
+ "src/main.rs" ,
2651
+ ] ,
2652
+ & [
2653
+ ( "Cargo.lock" , cargo_lock_contents) ,
2654
+ ( "Cargo.toml" , & cargo_toml_contents) ,
2655
+ ( "Cargo.toml.orig" , cargo_toml_orig_contents) ,
2656
+ ( "src/bar.txt" , bar_txt_contents) ,
2657
+ ( "src/main.rs" , & main_rs_contents) ,
2658
+ ] ,
2659
+ ) ;
2660
+ }
2661
+
2662
+ #[ cargo_test]
2663
+ fn symlink_filesizes ( ) {
2664
+ if !symlink_supported ( ) {
2665
+ return ;
2666
+ }
2667
+
2668
+ let cargo_toml_orig_contents = r#"
2669
+ [package]
2670
+ name = "foo"
2671
+ version = "0.0.1"
2672
+ authors = []
2673
+ license = "MIT"
2674
+ description = "foo"
2675
+ "# ;
2676
+ let lots_of_crabs = std:: iter:: repeat ( "🦀" ) . take ( 1337 ) . collect :: < String > ( ) ;
2677
+ let main_rs_contents = format ! ( r#"fn main() {{ println!("{}"); }}"# , lots_of_crabs) ;
2678
+ let bar_txt_contents = "This file is relatively uncompressible, to increase the compressed
2679
+ package size beyond 1KiB.
2680
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt
2681
+ ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
2682
+ ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
2683
+ reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
2684
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est
2685
+ laborum." ;
2686
+ let cargo_toml_contents = format ! (
2687
+ r#"{}
2688
+ [package]
2689
+ name = "foo"
2690
+ version = "0.0.1"
2691
+ authors = []
2692
+ description = "foo"
2693
+ license = "MIT"
2694
+ "# ,
2695
+ cargo:: core:: package:: MANIFEST_PREAMBLE
2696
+ ) ;
2697
+ let cargo_lock_contents = r#"# This file is automatically @generated by Cargo.
2698
+ # It is not intended for manual editing.
2699
+ version = 3
2700
+
2701
+ [[package]]
2702
+ name = "foo"
2703
+ version = "0.0.1"
2704
+ "# ;
2705
+
2706
+ let p = project ( )
2707
+ . file ( "Cargo.toml" , cargo_toml_orig_contents)
2708
+ . file ( "src/main.rs" , & main_rs_contents)
2709
+ . file ( "bla/bar.txt" , bar_txt_contents)
2710
+ . symlink_dir ( "bla" , "foo" )
2711
+ . build ( ) ;
2712
+
2713
+ let uncompressed_size = cargo_toml_orig_contents. len ( )
2714
+ + main_rs_contents. len ( )
2715
+ + cargo_toml_contents. len ( )
2716
+ + cargo_lock_contents. len ( )
2717
+ + bar_txt_contents. len ( ) * 2 ;
2718
+
2719
+ let output = p. cargo ( "package" ) . exec_with_output ( ) . unwrap ( ) ;
2720
+ assert ! ( p. root( ) . join( "target/package/foo-0.0.1.crate" ) . is_file( ) ) ;
2721
+ p. cargo ( "package -l" )
2722
+ . with_stdout (
2723
+ "\
2724
+ Cargo.lock
2725
+ Cargo.toml
2726
+ Cargo.toml.orig
2727
+ bla/bar.txt
2728
+ foo/bar.txt
2729
+ src/main.rs
2730
+ " ,
2731
+ )
2732
+ . run ( ) ;
2733
+ p. cargo ( "package" ) . with_stdout ( "" ) . run ( ) ;
2734
+
2735
+ let f = File :: open ( & p. root ( ) . join ( "target/package/foo-0.0.1.crate" ) ) . unwrap ( ) ;
2736
+ let compressed_size = f. metadata ( ) . unwrap ( ) . len ( ) as usize ;
2737
+ verify_packaged_status_line ( output, 6 , uncompressed_size, compressed_size) ;
2738
+ validate_crate_contents (
2739
+ f,
2740
+ "foo-0.0.1.crate" ,
2741
+ & [
2742
+ "Cargo.lock" ,
2743
+ "Cargo.toml" ,
2744
+ "Cargo.toml.orig" ,
2745
+ "bla/bar.txt" ,
2746
+ "foo/bar.txt" ,
2747
+ "src/main.rs" ,
2748
+ ] ,
2749
+ & [
2750
+ ( "Cargo.lock" , cargo_lock_contents) ,
2751
+ ( "Cargo.toml" , & cargo_toml_contents) ,
2752
+ ( "Cargo.toml.orig" , cargo_toml_orig_contents) ,
2753
+ ( "bla/bar.txt" , bar_txt_contents) ,
2754
+ ( "foo/bar.txt" , bar_txt_contents) ,
2755
+ ( "src/main.rs" , & main_rs_contents) ,
2756
+ ] ,
2757
+ ) ;
2758
+ }
0 commit comments