gem-sweep 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 755da66034352c0d2af35834d2bc6806754d77244430fc5b85b3498c99c388d6
4
+ data.tar.gz: 1cead26dfdb7a79af3d3313ce38bea1dd8087f64e46716c20f4e095f62085457
5
+ SHA512:
6
+ metadata.gz: 6366bd855ec3a33a0e26df16d338dc4225f0cc446ba202dbb76902c17864b85c2bf77f6baacca17856b5e82c90d967c1e74cc93cbb8f578cd0ec757c896949bb
7
+ data.tar.gz: 3994c438bd7c77bbbf1175d9e334edd03a62e61e835ffcf6989713a4e1a0463f2d80ace9d877cafea32757e1f754bd98e0cc64c2a218aa4eb18df5bab94a287d
@@ -0,0 +1,61 @@
1
+ require "rbconfig"
2
+ require "pathname"
3
+ require "rubygems/command"
4
+
5
+ module GemSweep
6
+ def self.clean(spec, aggressive: false)
7
+ (spec.full_require_paths - [spec.extension_dir]).each do |path|
8
+ begin
9
+ Dir.glob(File.join(path, "**/*")).each do |file|
10
+ # Prevent deleting files in versioned directories like google-protobuf, nokogiri
11
+ next if file.sub(/#{spec.full_gem_path}\//, "") =~ /(\d+\.\d+\/)/
12
+
13
+ if Pathname(file).extname == ".#{RbConfig::CONFIG["DLEXT"]}"
14
+ File.delete(file)
15
+ puts "Delete #{file}"
16
+ end
17
+ end
18
+ rescue Errno::EPERM
19
+ end
20
+ end
21
+
22
+ if aggressive
23
+ clean_test_directories(spec)
24
+ end
25
+ end
26
+
27
+ def self.clean_test_directories(spec)
28
+ %w[test spec features].each do |dir_name|
29
+ test_dir = File.join(spec.full_gem_path, dir_name)
30
+ if Dir.exist?(test_dir)
31
+ begin
32
+ require "fileutils"
33
+ FileUtils.rm_rf(test_dir)
34
+ puts "Delete #{test_dir}/"
35
+ rescue Errno::EPERM
36
+ puts "Permission denied: #{test_dir}/"
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ class Gem::Commands::SweepCommand < Gem::Command
44
+ def initialize
45
+ super "sweep", "Clean up unnecessary extension files"
46
+
47
+ add_option("-a", "--aggressive", "Also remove test, spec, and features directories") do |value, options|
48
+ options[:aggressive] = true
49
+ end
50
+ end
51
+
52
+ def execute
53
+ aggressive = options[:aggressive]
54
+
55
+ Gem::Specification.each do |spec|
56
+ if aggressive || !spec.extensions.empty?
57
+ GemSweep.clean(spec, aggressive: aggressive)
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,8 @@
1
+ require "rubygems/commands/sweep_command"
2
+ require "rubygems/command_manager"
3
+
4
+ Gem::CommandManager.instance.register_command :sweep
5
+
6
+ Gem.post_install do |installer|
7
+ GemSweep.clean(installer.spec, aggressive: false)
8
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gem-sweep
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Hiroshi SHIBATA
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies: []
12
+ description: Clean up unnecessary extension files for gem command.
13
+ email:
14
+ - hsbt@ruby-lang.org
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/rubygems/commands/sweep_command.rb
20
+ - lib/rubygems_plugin.rb
21
+ homepage: https://github.com/hsbt/gem-sweep
22
+ licenses:
23
+ - Ruby
24
+ - BSD-2-Clause
25
+ metadata:
26
+ homepage_uri: https://github.com/hsbt/gem-sweep
27
+ source_code_uri: https://github.com/hsbt/gem-sweep
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 2.4.0
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubygems_version: 3.6.7
43
+ specification_version: 4
44
+ summary: Clean up unnecessary extension files for gem command.
45
+ test_files: []