 98a53e4781
			
		
	
	
		98a53e4781
		
			
		
	
	
	
	
		
			
			Some formulae are flexible about the version of Python3 that they use. However, when we use `#detected_python_shebang` on these formulae, they become coupled to the specific version of Python3 declared in the formula. This is harmful because 1. it prevents us from using `uses_from_macos "python"` even in formulae where we should be able to 2. it forces us to rebuild the formula whenever we make changes to the Python dependency when nothing but the shebang would have changed as a consequence of the rebuild For an example of this, see Homebrew/homebrew-core#107905. I'd also like to do this to get rid of some really terrible hacks we have in `glib-utils` as a means of decoupling `glib` from the specific versioned Python dependency it used to have. See Homebrew/homebrew-core#103916, or Homebrew/homebrew-core#106045 for a proposal to give the same treatment to `gobject-introspection`.
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # typed: false
 | |
| # frozen_string_literal: true
 | |
| 
 | |
| require "language/python"
 | |
| require "utils/shebang"
 | |
| 
 | |
| describe Language::Python::Shebang do
 | |
|   let(:file) { Tempfile.new("python-shebang") }
 | |
|   let(:python_f) do
 | |
|     formula "python@3.11" do
 | |
|       url "https://brew.sh/python-1.0.tgz"
 | |
|     end
 | |
|   end
 | |
|   let(:f) do
 | |
|     formula "foo" do
 | |
|       url "https://brew.sh/foo-1.0.tgz"
 | |
| 
 | |
|       depends_on "python@3.11"
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   before do
 | |
|     file.write <<~EOS
 | |
|       #!/usr/bin/python2
 | |
|       a
 | |
|       b
 | |
|       c
 | |
|     EOS
 | |
|     file.flush
 | |
|   end
 | |
| 
 | |
|   after { file.unlink }
 | |
| 
 | |
|   describe "#detected_python_shebang" do
 | |
|     it "can be used to replace Python shebangs" do
 | |
|       expect(Formulary).to receive(:factory).with(python_f.name).and_return(python_f)
 | |
|       Utils::Shebang.rewrite_shebang described_class.detected_python_shebang(f, use_python_from_path: false), file
 | |
| 
 | |
|       expect(File.read(file)).to eq <<~EOS
 | |
|         #!#{HOMEBREW_PREFIX}/opt/python@3.11/bin/python3.11
 | |
|         a
 | |
|         b
 | |
|         c
 | |
|       EOS
 | |
|     end
 | |
| 
 | |
|     it "can be pointed to a `python3` in PATH" do
 | |
|       Utils::Shebang.rewrite_shebang described_class.detected_python_shebang(f, use_python_from_path: true), file
 | |
| 
 | |
|       expect(File.read(file)).to eq <<~EOS
 | |
|         #!/usr/bin/env python3
 | |
|         a
 | |
|         b
 | |
|         c
 | |
|       EOS
 | |
|     end
 | |
|   end
 | |
| end
 |