executable-hooks 1.3.2 → 1.4.0.alpha0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
|
4
|
-
|
3
|
+
metadata.gz: a3043d0088ce1f3b75f8d6b586c9a63a1bdc9d91
|
4
|
+
data.tar.gz: 37aad6f0e9cf450aba70d6ccd31742b11e919365
|
5
5
|
SHA512:
|
6
|
-
|
7
|
-
|
6
|
+
metadata.gz: b61715a1115ac1499bbf060d026085f87d796472b736c6fb9bfeeea84a7fd32119d653a01ec94aa5b4ce02d876d4dce43e7b4b1084763b570e292e0f8aca433c
|
7
|
+
data.tar.gz: 82cd911d40f9b4a6abc76ef6df4740f40b628c2143e2e7e3b39cb1c423d4c87c77b698eafc30fc89d19592c0ce6035e52bccacf33b5c43cfc0f641bb475f8a93
|
@@ -6,6 +6,18 @@ require 'executable-hooks/wrapper'
|
|
6
6
|
class RegenerateBinstubsCommand < Gem::Command
|
7
7
|
def initialize
|
8
8
|
super 'regenerate_binstubs', 'Re run generation of executable wrappers for gems.'
|
9
|
+
|
10
|
+
add_option(:"Install/Update", '-i', '--install-dir DIR',
|
11
|
+
'Gem repository directory to get installed',
|
12
|
+
'gems') do |value, options|
|
13
|
+
options[:install_dir] = File.expand_path(value)
|
14
|
+
end
|
15
|
+
|
16
|
+
add_option(:"Install/Update", '-n', '--bindir DIR',
|
17
|
+
'Directory where binary files are',
|
18
|
+
'located') do |value, options|
|
19
|
+
options[:bin_dir] = File.expand_path(value)
|
20
|
+
end
|
9
21
|
end
|
10
22
|
|
11
23
|
def arguments # :nodoc:
|
@@ -33,7 +45,7 @@ class RegenerateBinstubsCommand < Gem::Command
|
|
33
45
|
# https://github.com/rubygems/rubygems/issues/326
|
34
46
|
puts "try also: gem pristine --binstubs"
|
35
47
|
end
|
36
|
-
ExecutableHooks::Wrapper.install
|
48
|
+
ExecutableHooks::Wrapper.install(options)
|
37
49
|
execute_no_wrapper
|
38
50
|
end
|
39
51
|
|
@@ -55,7 +67,7 @@ class RegenerateBinstubsCommand < Gem::Command
|
|
55
67
|
def try_to_fix_binstubs(spec)
|
56
68
|
executable_paths =
|
57
69
|
spec.executables.map do |executable|
|
58
|
-
path = expanded_bin_paths.detect{|
|
70
|
+
path = expanded_bin_paths.detect{|bin_path| File.exist?(File.join(bin_path, executable)) }
|
59
71
|
File.join(path, executable) if path
|
60
72
|
end
|
61
73
|
return false if executable_paths.include?(nil) # not found
|
@@ -63,7 +75,7 @@ class RegenerateBinstubsCommand < Gem::Command
|
|
63
75
|
executable_paths.map do |path|
|
64
76
|
[path, File.readlines(path).map(&:chomp)]
|
65
77
|
end
|
66
|
-
return false if executable_shebangs.detect{|path, lines| !lines[0] =~ /^#!\// }
|
78
|
+
return false if executable_shebangs.detect{|path, lines| !(lines[0] =~ /^#!\//) }
|
67
79
|
puts "#{spec.name} #{spec.version}"
|
68
80
|
executable_mode = 0111
|
69
81
|
executable_shebangs.map do |path, lines|
|
@@ -85,19 +97,21 @@ class RegenerateBinstubsCommand < Gem::Command
|
|
85
97
|
end
|
86
98
|
|
87
99
|
def try_to_install_binstubs(spec)
|
88
|
-
org_gem_path =
|
89
|
-
File.exists? File.join path, 'gems', spec.full_name
|
90
|
-
} || Gem.dir
|
100
|
+
org_gem_path = options[:install_dir] || existing_gem_path(spec.full_name) || Gem.dir
|
91
101
|
cache_gem = File.join(org_gem_path, 'cache', spec.file_name)
|
92
102
|
if File.exist? cache_gem
|
93
103
|
puts "#{spec.name} #{spec.version}"
|
94
|
-
inst = Gem::Installer.new Dir[cache_gem].first, :wrappers => true, :force => true, :install_dir => org_gem_path
|
104
|
+
inst = Gem::Installer.new Dir[cache_gem].first, :wrappers => true, :force => true, :install_dir => org_gem_path, :bin_dir => options[:bin_dir]
|
95
105
|
ExecutableHooksInstaller.bundler_generate_bin(inst)
|
96
106
|
else
|
97
107
|
false
|
98
108
|
end
|
99
109
|
end
|
100
110
|
|
111
|
+
def existing_gem_path(full_name)
|
112
|
+
expanded_gem_paths.find{|path| File.exists? File.join path, 'gems', full_name}
|
113
|
+
end
|
114
|
+
|
101
115
|
def expanded_gem_paths
|
102
116
|
@expanded_gem_paths ||=
|
103
117
|
Gem.path.map do |path|
|
@@ -4,35 +4,21 @@ require 'rubygems'
|
|
4
4
|
require 'executable-hooks/specification'
|
5
5
|
|
6
6
|
module ExecutableHooks
|
7
|
-
|
7
|
+
class Wrapper
|
8
8
|
def self.wrapper_name
|
9
9
|
'ruby_executable_hooks'
|
10
10
|
end
|
11
|
+
|
11
12
|
def self.expanded_wrapper_name
|
12
13
|
Gem.default_exec_format % self.wrapper_name
|
13
14
|
end
|
14
|
-
def self.bindir
|
15
|
-
Gem.respond_to?(:bindir,true) ? Gem.send(:bindir) : File.join(Gem.dir, 'bin')
|
16
|
-
end
|
17
|
-
def self.destination
|
18
|
-
File.expand_path( expanded_wrapper_name, bindir )
|
19
|
-
end
|
20
|
-
def self.ensure_custom_shebang
|
21
|
-
expected_shebang = "$env #{expanded_wrapper_name}"
|
22
15
|
|
23
|
-
|
16
|
+
def initialize(options)
|
24
17
|
|
25
|
-
if Gem.configuration[:custom_shebang] != expected_shebang
|
26
|
-
warn("
|
27
|
-
Warning:
|
28
|
-
Found custom_shebang: '#{Gem.configuration[:custom_shebang]}',
|
29
|
-
Expected custom_shebang: '#{expected_shebang}',
|
30
|
-
this can potentially break 'executable-hooks' and gem executables overall!
|
31
|
-
Check your '~/.gemrc' and '/etc/gemrc' for 'custom_shebang' and remove it.
|
32
|
-
")
|
33
|
-
end
|
34
18
|
end
|
35
|
-
|
19
|
+
|
20
|
+
def install
|
21
|
+
@bindir = options[:bin_dir] if options[:bin_dir]
|
36
22
|
ensure_custom_shebang
|
37
23
|
|
38
24
|
executable_hooks_spec = ExecutableHooks::Specification.find
|
@@ -42,7 +28,7 @@ Check your '~/.gemrc' and '/etc/gemrc' for 'custom_shebang' and remove it.
|
|
42
28
|
end
|
43
29
|
end
|
44
30
|
|
45
|
-
def
|
31
|
+
def install_from(full_gem_path)
|
46
32
|
wrapper_path = File.expand_path( "bin/#{wrapper_name}", full_gem_path )
|
47
33
|
|
48
34
|
if File.exist?(wrapper_path) && !File.exist?(destination)
|
@@ -53,8 +39,36 @@ Check your '~/.gemrc' and '/etc/gemrc' for 'custom_shebang' and remove it.
|
|
53
39
|
File.chmod(0775, destination)
|
54
40
|
end
|
55
41
|
end
|
56
|
-
|
42
|
+
|
43
|
+
def uninstall
|
57
44
|
FileUtils.rm_f(destination) if File.exist?(destination)
|
58
45
|
end
|
46
|
+
|
47
|
+
def calculate_bindir(options)
|
48
|
+
return options[:bin_dir] if options[:bin_dir]
|
49
|
+
Gem.respond_to?(:bindir,true) ? Gem.send(:bindir) : File.join(Gem.dir, 'bin')
|
50
|
+
end
|
51
|
+
|
52
|
+
def calculate_destination(bindir)
|
53
|
+
File.expand_path( expanded_wrapper_name, bindir )
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
def ensure_custom_shebang
|
58
|
+
expected_shebang = "$env #{self.class.expanded_wrapper_name}"
|
59
|
+
|
60
|
+
Gem.configuration[:custom_shebang] ||= expected_shebang
|
61
|
+
|
62
|
+
if Gem.configuration[:custom_shebang] != expected_shebang
|
63
|
+
warn("
|
64
|
+
Warning:
|
65
|
+
Found custom_shebang: '#{Gem.configuration[:custom_shebang]}',
|
66
|
+
Expected custom_shebang: '#{expected_shebang}',
|
67
|
+
this can potentially break 'executable-hooks' and gem executables overall!
|
68
|
+
Check your '~/.gemrc' and '/etc/gemrc' for 'custom_shebang' and remove it.
|
69
|
+
")
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
59
73
|
end
|
60
74
|
end
|
data/lib/rubygems_plugin.rb
CHANGED
@@ -12,8 +12,8 @@ if
|
|
12
12
|
require 'executable-hooks/wrapper'
|
13
13
|
|
14
14
|
# Set the custom_shebang if user did not set one
|
15
|
-
Gem.pre_install do |
|
16
|
-
ExecutableHooks::Wrapper.install
|
15
|
+
Gem.pre_install do |gem_installer|
|
16
|
+
ExecutableHooks::Wrapper.install(gem_installer.options)
|
17
17
|
end
|
18
18
|
|
19
19
|
if Gem::Version.new(Gem::VERSION) < Gem::Version.new('2.0') then
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: executable-hooks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0.alpha0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michal Papis
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2018-01-26 00:00:00 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: tf
|
@@ -69,11 +69,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
69
69
|
- *id002
|
70
70
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
|
-
-
|
72
|
+
- - ">"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 1.3.1
|
73
75
|
requirements: []
|
74
76
|
|
75
77
|
rubyforge_project:
|
76
|
-
rubygems_version: 2.0.
|
78
|
+
rubygems_version: 2.0.17
|
77
79
|
signing_key:
|
78
80
|
specification_version: 4
|
79
81
|
summary: Hook into rubygems executables allowing extra actions to be taken before executable is run.
|