@@ -827,6 +827,74 @@ fn test(
827
827
. env ( "EXPECTED_LINES" , tput_output ( "lines" ) ?. trim ( ) ) ,
828
828
) ?;
829
829
830
+ integration_test ! ( "Checking PANTS_BIN_NAME handling" ) ;
831
+ {
832
+ let check_pants_bin_name_chroot = create_tempdir ( ) ?;
833
+
834
+ let bin_dir = check_pants_bin_name_chroot. path ( ) . join ( "bin" ) ;
835
+ let project_dir = check_pants_bin_name_chroot. path ( ) . join ( "project" ) ;
836
+ let existing_path =
837
+ env:: split_paths ( & env:: var_os ( "PATH" ) . unwrap_or ( "" . into ( ) ) ) . collect :: < Vec < _ > > ( ) ;
838
+ let path = env:: join_paths (
839
+ [ bin_dir. as_os_str ( ) ]
840
+ . into_iter ( )
841
+ . chain ( existing_path. iter ( ) . map ( |p| p. as_os_str ( ) ) ) ,
842
+ )
843
+ . unwrap ( ) ;
844
+ ensure_directory ( & bin_dir, true ) ?;
845
+
846
+ ensure_directory ( & project_dir, true ) ?;
847
+ write_file (
848
+ & project_dir. join ( "pants.toml" ) ,
849
+ false ,
850
+ r#"
851
+ [GLOBAL]
852
+ pants_version = "2.14.1"
853
+ # TODO(John Sirois): This works around ongoing issues with pantsd termination
854
+ # variously crashing or hanging depending on Pants version.
855
+ pantsd = false
856
+ [anonymous-telemetry]
857
+ enabled = false
858
+ "# ,
859
+ ) ?;
860
+
861
+ softlink ( scie_pants_scie, & bin_dir. join ( "foo" ) ) ?;
862
+ softlink ( scie_pants_scie, & project_dir. join ( "bar" ) ) ?;
863
+ let absolute_argv0_path = check_pants_bin_name_chroot. path ( ) . join ( "baz" ) ;
864
+ softlink ( scie_pants_scie, & absolute_argv0_path) ?;
865
+
866
+ let assert_pants_bin_name =
867
+ |argv0 : & str , expected_bin_name : & str , extra_envs : Vec < ( _ , _ ) > | -> ExitResult {
868
+ let output = String :: from_utf8 (
869
+ execute (
870
+ Command :: new ( argv0)
871
+ . arg ( "help-advanced" )
872
+ . arg ( "global" )
873
+ . env ( "PATH" , & path)
874
+ . envs ( extra_envs)
875
+ . current_dir ( & project_dir)
876
+ . stdout ( Stdio :: piped ( ) ) ,
877
+ ) ?
878
+ . stdout ,
879
+ )
880
+ . unwrap ( ) ;
881
+ let expected_output =
882
+ format ! ( "current value: {expected_bin_name} (from env var PANTS_BIN_NAME)" ) ;
883
+ assert ! (
884
+ output. contains( & expected_output) ,
885
+ "Expected:{EOL}{expected_output}{EOL}STDOUT was:{EOL}{output}"
886
+ ) ;
887
+ Ok ( ( ) )
888
+ } ;
889
+
890
+ assert_pants_bin_name ( "foo" , "foo" , vec ! [ ] ) ?;
891
+ assert_pants_bin_name ( "./bar" , "./bar" , vec ! [ ] ) ?;
892
+
893
+ let absolute_argv0 = absolute_argv0_path. to_str ( ) . unwrap ( ) ;
894
+ assert_pants_bin_name ( absolute_argv0, absolute_argv0, vec ! [ ] ) ?;
895
+ assert_pants_bin_name ( absolute_argv0, "spam" , vec ! [ ( "PANTS_BIN_NAME" , "spam" ) ] ) ?;
896
+ }
897
+
830
898
integration_test ! ( "Checking .pants.bootstrap handling ignores bash functions" ) ;
831
899
// N.B.: We run this test after 1st having run the test above to ensure pants is already
832
900
// bootstrapped so that we don't get stderr output from that process. We also use
0 commit comments