File tree 6 files changed +74
-6
lines changed
6 files changed +74
-6
lines changed Original file line number Diff line number Diff line change @@ -96,7 +96,7 @@ module Shebang
96
96
module_function
97
97
98
98
# A regex to match potential shebang permutations.
99
- NODE_SHEBANG_REGEX = %r{^#! ?/usr/bin/(?:env )?node( |$)}
99
+ NODE_SHEBANG_REGEX = %r{^#! ?(?: /usr/bin/(?:env )? )?node( |$)}
100
100
101
101
# The length of the longest shebang matching `SHEBANG_REGEX`.
102
102
NODE_SHEBANG_MAX_LENGTH = T . let ( "#! /usr/bin/env node " . length , Integer )
Original file line number Diff line number Diff line change @@ -15,7 +15,7 @@ module Shebang
15
15
module_function
16
16
17
17
# A regex to match potential shebang permutations.
18
- PERL_SHEBANG_REGEX = %r{^#! ?/usr/bin/(?:env )?perl( |$)}
18
+ PERL_SHEBANG_REGEX = %r{^#! ?(?: /usr/bin/(?:env )? )?perl( |$)}
19
19
20
20
# The length of the longest shebang matching `SHEBANG_REGEX`.
21
21
PERL_SHEBANG_MAX_LENGTH = T . let ( "#! /usr/bin/env perl " . length , Integer )
Original file line number Diff line number Diff line change @@ -112,7 +112,7 @@ module Shebang
112
112
module_function
113
113
114
114
# A regex to match potential shebang permutations.
115
- PYTHON_SHEBANG_REGEX = %r{^#! ?/usr/bin/(?:env )?python(?:[23](?:\. \d {1,2})?)?( |$)}
115
+ PYTHON_SHEBANG_REGEX = %r{^#! ?(?: /usr/bin/(?:env )? )?python(?:[23](?:\. \d {1,2})?)?( |$)}
116
116
117
117
# The length of the longest shebang matching `SHEBANG_REGEX`.
118
118
PYTHON_SHEBANG_MAX_LENGTH = T . let ( "#! /usr/bin/env pythonx.yyy " . length , Integer )
Original file line number Diff line number Diff line change 5
5
6
6
RSpec . describe Language ::Node ::Shebang do
7
7
let ( :file ) { Tempfile . new ( "node-shebang" ) }
8
+ let ( :broken_file ) { Tempfile . new ( "node-shebang" ) }
8
9
let ( :f ) do
9
10
f = { }
10
11
40
41
c
41
42
EOS
42
43
file . flush
44
+ broken_file . write <<~EOS
45
+ #!node
46
+ a
47
+ b
48
+ c
49
+ EOS
50
+ broken_file . flush
43
51
end
44
52
45
- after { file . unlink }
53
+ after { [ file , broken_file ] . each ( & : unlink) }
46
54
47
55
describe "#detected_node_shebang" do
48
56
it "can be used to replace Node shebangs" do
57
65
EOS
58
66
end
59
67
68
+ it "can fix broken shebang like `#!node`" do
69
+ allow ( Formulary ) . to receive ( :factory ) . with ( f [ :node18 ] . name ) . and_return ( f [ :node18 ] )
70
+ Utils ::Shebang . rewrite_shebang described_class . detected_node_shebang ( f [ :versioned_node_dep ] ) , broken_file . path
71
+
72
+ expect ( File . read ( broken_file ) ) . to eq <<~EOS
73
+ #!#{ HOMEBREW_PREFIX /"opt/node@18/bin/node" }
74
+ a
75
+ b
76
+ c
77
+ EOS
78
+ end
79
+
60
80
it "errors if formula doesn't depend on node" do
61
81
expect { Utils ::Shebang . rewrite_shebang described_class . detected_node_shebang ( f [ :no_deps ] ) , file . path }
62
82
. to raise_error ( ShebangDetectionError , "Cannot detect Node shebang: formula does not depend on Node." )
Original file line number Diff line number Diff line change 5
5
6
6
RSpec . describe Language ::Perl ::Shebang do
7
7
let ( :file ) { Tempfile . new ( "perl-shebang" ) }
8
+ let ( :broken_file ) { Tempfile . new ( "perl-shebang" ) }
8
9
let ( :f ) do
9
10
f = { }
10
11
39
40
c
40
41
EOS
41
42
file . flush
43
+ broken_file . write <<~EOS
44
+ #!perl
45
+ a
46
+ b
47
+ c
48
+ EOS
49
+ broken_file . flush
42
50
end
43
51
44
- after { file . unlink }
52
+ after { [ file , broken_file ] . each ( & : unlink) }
45
53
46
54
describe "#detected_perl_shebang" do
47
55
it "can be used to replace Perl shebangs when depends_on \" perl\" is used" do
74
82
EOS
75
83
end
76
84
85
+ it "can fix broken shebang like `#!perl`" do
86
+ allow ( Formulary ) . to receive ( :factory ) . with ( f [ :perl ] . name ) . and_return ( f [ :perl ] )
87
+ Utils ::Shebang . rewrite_shebang described_class . detected_perl_shebang ( f [ :uses_from_macos ] ) , broken_file . path
88
+
89
+ expected_shebang = if OS . mac?
90
+ "/usr/bin/perl#{ MacOS . preferred_perl_version } "
91
+ else
92
+ HOMEBREW_PREFIX /"opt/perl/bin/perl"
93
+ end
94
+
95
+ expect ( File . read ( broken_file ) ) . to eq <<~EOS
96
+ #!#{ expected_shebang }
97
+ a
98
+ b
99
+ c
100
+ EOS
101
+ end
102
+
77
103
it "errors if formula doesn't depend on perl" do
78
104
expect { Utils ::Shebang . rewrite_shebang described_class . detected_perl_shebang ( f [ :no_deps ] ) , file . path }
79
105
. to raise_error ( ShebangDetectionError , "Cannot detect Perl shebang: formula does not depend on Perl." )
Original file line number Diff line number Diff line change 5
5
6
6
RSpec . describe Language ::Python ::Shebang do
7
7
let ( :file ) { Tempfile . new ( "python-shebang" ) }
8
+ let ( :broken_file ) { Tempfile . new ( "python-shebang" ) }
8
9
let ( :f ) do
9
10
f = { }
10
11
40
41
c
41
42
EOS
42
43
file . flush
44
+ broken_file . write <<~EOS
45
+ #!python
46
+ a
47
+ b
48
+ c
49
+ EOS
50
+ broken_file . flush
43
51
end
44
52
45
- after { file . unlink }
53
+ after { [ file , broken_file ] . each ( & : unlink) }
46
54
47
55
describe "#detected_python_shebang" do
48
56
it "can be used to replace Python shebangs" do
72
80
EOS
73
81
end
74
82
83
+ it "can fix broken shebang line `#!python`" do
84
+ Utils ::Shebang . rewrite_shebang (
85
+ described_class . detected_python_shebang ( f [ :versioned_python_dep ] ,
86
+ use_python_from_path : true ) , broken_file . path
87
+ )
88
+
89
+ expect ( File . read ( broken_file ) ) . to eq <<~EOS
90
+ #!/usr/bin/env python3
91
+ a
92
+ b
93
+ c
94
+ EOS
95
+ end
96
+
75
97
it "errors if formula doesn't depend on python" do
76
98
expect do
77
99
Utils ::Shebang . rewrite_shebang (
You can’t perform that action at this time.
0 commit comments