gem-sweep 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 755da66034352c0d2af35834d2bc6806754d77244430fc5b85b3498c99c388d6
4
- data.tar.gz: 1cead26dfdb7a79af3d3313ce38bea1dd8087f64e46716c20f4e095f62085457
3
+ metadata.gz: 83fdc6784ffa93a41bf7ad97f00a645a80bfb092359e8550f906d5d93d6624bc
4
+ data.tar.gz: 97cd1b17370e0f5d54ba9964db4c219475367c2fd864e89e12cb17e3480f3eba
5
5
  SHA512:
6
- metadata.gz: 6366bd855ec3a33a0e26df16d338dc4225f0cc446ba202dbb76902c17864b85c2bf77f6baacca17856b5e82c90d967c1e74cc93cbb8f578cd0ec757c896949bb
7
- data.tar.gz: 3994c438bd7c77bbbf1175d9e334edd03a62e61e835ffcf6989713a4e1a0463f2d80ace9d877cafea32757e1f754bd98e0cc64c2a218aa4eb18df5bab94a287d
6
+ metadata.gz: 7dddc51dc52249664a449a3ddae891be8580fc46a8aef825155bb275267deb19c44055d6f29cace7be2d1a7f6e5e20b94299758737d6375bfbc14f28db8fd704
7
+ data.tar.gz: 92c659ecf2aebbfa1f56b9461ed24366710cf338c2a72fa0cf578c14d06a269bd85d3c176fc8764af13507f42e0defb1b8fc67fd59c96be1cf0894b50f3c3189
@@ -3,7 +3,15 @@ require "pathname"
3
3
  require "rubygems/command"
4
4
 
5
5
  module GemSweep
6
- def self.clean(spec, aggressive: false)
6
+ def self.clean(spec, aggressive: false, dryrun: false)
7
+ targets = collect_cleanup_targets(spec, aggressive: aggressive)
8
+ remove_targets(targets, dryrun: dryrun)
9
+ end
10
+
11
+ def self.collect_cleanup_targets(spec, aggressive: false)
12
+ targets = []
13
+
14
+ # Collect extension files
7
15
  (spec.full_require_paths - [spec.extension_dir]).each do |path|
8
16
  begin
9
17
  Dir.glob(File.join(path, "**/*")).each do |file|
@@ -11,30 +19,45 @@ module GemSweep
11
19
  next if file.sub(/#{spec.full_gem_path}\//, "") =~ /(\d+\.\d+\/)/
12
20
 
13
21
  if Pathname(file).extname == ".#{RbConfig::CONFIG["DLEXT"]}"
14
- File.delete(file)
15
- puts "Delete #{file}"
22
+ targets << file
16
23
  end
17
24
  end
18
25
  rescue Errno::EPERM
19
26
  end
20
27
  end
21
28
 
29
+ # Collect development directories if aggressive mode
22
30
  if aggressive
23
- clean_test_directories(spec)
31
+ # Collect test/spec/features directories
32
+ %w[test spec features].each do |dir_name|
33
+ dir_path = File.join(spec.full_gem_path, dir_name)
34
+ targets << dir_path if Dir.exist?(dir_path)
35
+ end
36
+
37
+ # Collect tmp directories recursively
38
+ begin
39
+ Dir.glob(File.join(spec.full_gem_path, "**/tmp")).each do |tmp_dir|
40
+ targets << tmp_dir if Dir.exist?(tmp_dir)
41
+ end
42
+ rescue Errno::EPERM
43
+ end
24
44
  end
45
+
46
+ targets
25
47
  end
26
48
 
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
49
+ def self.remove_targets(targets, dryrun: false)
50
+ targets.each do |path|
51
+ begin
52
+ if dryrun
53
+ puts "Would delete #{path}#{Dir.exist?(path) ? '/' : ''}"
54
+ else
32
55
  require "fileutils"
33
- FileUtils.rm_rf(test_dir)
34
- puts "Delete #{test_dir}/"
35
- rescue Errno::EPERM
36
- puts "Permission denied: #{test_dir}/"
56
+ FileUtils.rm_rf(path)
57
+ puts "Delete #{path}#{Dir.exist?(path) ? '/' : ''}"
37
58
  end
59
+ rescue Errno::EPERM
60
+ puts "Permission denied: #{path}#{Dir.exist?(path) ? '/' : ''}"
38
61
  end
39
62
  end
40
63
  end
@@ -43,18 +66,28 @@ end
43
66
  class Gem::Commands::SweepCommand < Gem::Command
44
67
  def initialize
45
68
  super "sweep", "Clean up unnecessary extension files"
46
-
69
+
47
70
  add_option("-a", "--aggressive", "Also remove test, spec, and features directories") do |value, options|
48
71
  options[:aggressive] = true
49
72
  end
73
+
74
+ add_option("-n", "--dryrun", "Show what would be deleted without actually deleting") do |value, options|
75
+ options[:dryrun] = true
76
+ end
50
77
  end
51
78
 
52
79
  def execute
53
80
  aggressive = options[:aggressive]
54
-
81
+ dryrun = options[:dryrun]
82
+
83
+ if dryrun
84
+ puts "Dry run mode: showing what would be deleted"
85
+ puts
86
+ end
87
+
55
88
  Gem::Specification.each do |spec|
56
89
  if aggressive || !spec.extensions.empty?
57
- GemSweep.clean(spec, aggressive: aggressive)
90
+ GemSweep.clean(spec, aggressive: aggressive, dryrun: dryrun)
58
91
  end
59
92
  end
60
93
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gem-sweep
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiroshi SHIBATA