delete_derived_data 0.0.2
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 +7 -0
- data/bin/delete_derived_data +41 -0
- data/lib/delete_derived_data/delete.rb +32 -0
- data/lib/delete_derived_data/search.rb +97 -0
- data/lib/delete_derived_data/trash.rb +26 -0
- data/lib/delete_derived_data/utils.rb +18 -0
- data/lib/delete_derived_data/version.rb +3 -0
- data/lib/delete_derived_data.rb +20 -0
- data/lib/main2.rb +261 -0
- metadata +94 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f80bfe4f6605d37411e9448fe83f8b51a49d3bf758ccb7e06825e2fe6202c508
|
4
|
+
data.tar.gz: 2a031dc848460a5250a578d522105cb654b36c72781ccb926202bb1eece66f85
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: dde7195c24042679dae743e345663d488d8a3d72916719888ea5cf812b7a25164e6f78580ffd606662fdfed798f1c14ec43ee0715f8b7e608c2b21abe908be04
|
7
|
+
data.tar.gz: 527bf98c50f94d2c44e8a0c462955bf6ac099d55fab33920895b690417fba74011e92f0774cb0dd65192118f7b8c5005f2123e3217b232c4048c692b64ac32cc
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
if $PROGRAM_NAME == __FILE__
|
4
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'delete_derived_data'
|
8
|
+
require 'optparse'
|
9
|
+
|
10
|
+
options = {}
|
11
|
+
|
12
|
+
OptionParser.new do |opts|
|
13
|
+
opts.banner = "Usage: delete_derived_data [options] | delete_derived_data"
|
14
|
+
|
15
|
+
opts.on('-d', '--directory PATH', "Directory that should be searching") do |path|
|
16
|
+
options[:root_dir] = path
|
17
|
+
end
|
18
|
+
|
19
|
+
opts.on('-a', '--archives', "Xcode Archives should be deleted") do |a|
|
20
|
+
options[:archives] = a
|
21
|
+
end
|
22
|
+
|
23
|
+
opts.on('-s', '--sempty', "Secure empty trash contents") do |s|
|
24
|
+
options[:sempty] = s
|
25
|
+
end
|
26
|
+
|
27
|
+
opts.on('-t', '--trash', "Empty trash contents") do |t|
|
28
|
+
options[:trash] = t
|
29
|
+
end
|
30
|
+
|
31
|
+
opts.on("-V", '--verbose', "Show more debugging information") do |v|
|
32
|
+
options[:verbose] = v
|
33
|
+
end
|
34
|
+
|
35
|
+
opts.on_tail('-h', '--help', 'Show this message') { puts opts; exit }
|
36
|
+
opts.on_tail("-v", "--version", "Show version") { puts DeleteDerivedData::VERSION; exit }
|
37
|
+
opts.parse!
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
DeleteDerivedData.delete(options)
|
@@ -0,0 +1,32 @@
|
|
1
|
+
|
2
|
+
require "find"
|
3
|
+
require "pathname"
|
4
|
+
require "tty-table"
|
5
|
+
require "tty-spinner"
|
6
|
+
require "delete_derived_data/trash"
|
7
|
+
|
8
|
+
require "tty-prompt"
|
9
|
+
|
10
|
+
module DeleteDerivedData
|
11
|
+
class Delete
|
12
|
+
def self.run(paths, options)
|
13
|
+
if paths == nil || paths.length <= 0
|
14
|
+
puts "No Data to be cleaning!"
|
15
|
+
return nil
|
16
|
+
end
|
17
|
+
|
18
|
+
paths.each {|d| Trash.move_to_trash(d)}
|
19
|
+
|
20
|
+
prompt = TTY::Prompt.new(enable_color: false, interrupt: :signal)
|
21
|
+
answer = options[:trash] || prompt.yes?("Are you sure you want to empty the trash (this cannot be undone)?")
|
22
|
+
return if !answer
|
23
|
+
|
24
|
+
if options[:sempty]
|
25
|
+
Trash.empty_securely_trash()
|
26
|
+
else
|
27
|
+
Trash.empty_trash()
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
|
2
|
+
require "delete_derived_data/utils"
|
3
|
+
|
4
|
+
module DeleteDerivedData
|
5
|
+
class Search
|
6
|
+
attr_accessor :verbose, :root_dir
|
7
|
+
|
8
|
+
def initialize(options = {})
|
9
|
+
@verbose = options[:verbose]
|
10
|
+
@root_dir = options[:root_dir] || ENV["HOME"]
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_s
|
14
|
+
"#{verbose} #{root_dir}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def getDerivedDatas
|
18
|
+
|
19
|
+
directory_paths = get_directory_paths(root_dir)
|
20
|
+
derived_paths = []
|
21
|
+
threads = []
|
22
|
+
|
23
|
+
table = TTY::Table.new(["Directory paths to be search"], directory_paths.map { |f| [f] })
|
24
|
+
puts table.render(:ascii)
|
25
|
+
|
26
|
+
directory_paths.each do |folder|
|
27
|
+
threads << Thread.new {
|
28
|
+
begin
|
29
|
+
Find.find(folder, ignore_error: true) {|path| derived_paths << path if path =~ /.*\DerivedData$/}
|
30
|
+
rescue Exception => e
|
31
|
+
puts e.message
|
32
|
+
end
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
spinner = TTY::Spinner.new("[:spinner] Search Derived Data ...", format: :dots_2)
|
37
|
+
spinner.auto_spin
|
38
|
+
|
39
|
+
threads.each {|t| t.join}
|
40
|
+
|
41
|
+
derived_size = 0
|
42
|
+
data = [:separator]
|
43
|
+
derived_paths.each { |d|
|
44
|
+
size = Filesize.dirSize(d)
|
45
|
+
derived_size = derived_size + size
|
46
|
+
data << [d, Filesize.size(size)] if verbose
|
47
|
+
}
|
48
|
+
data << :separator
|
49
|
+
data << ["Derived Data total size", Filesize.size(derived_size)]
|
50
|
+
|
51
|
+
spinner.stop
|
52
|
+
|
53
|
+
table = TTY::Table.new(["DerivedData", "Size"], data)
|
54
|
+
puts table.render(:ascii, alignments: [:left, :right], padding: [0,1,0,1])
|
55
|
+
|
56
|
+
derived_paths
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
def getArchives
|
61
|
+
|
62
|
+
spinner = TTY::Spinner.new("[:spinner] Search Xcode Archives ...", format: :dots_2)
|
63
|
+
spinner.auto_spin
|
64
|
+
|
65
|
+
xcode_archives = []
|
66
|
+
data = []
|
67
|
+
xcode_archives_size = 0
|
68
|
+
|
69
|
+
data << :separator
|
70
|
+
Dir["#{ENV["HOME"]}/Library/Developer/Xcode/Archives/**"].select { |d|
|
71
|
+
size = Filesize.dirSize(d)
|
72
|
+
xcode_archives_size = xcode_archives_size + size
|
73
|
+
data << [d, Filesize.size(size)] if verbose
|
74
|
+
xcode_archives << d
|
75
|
+
}
|
76
|
+
data << :separator
|
77
|
+
data << ["Xcode Archives total size", Filesize.size(xcode_archives_size)]
|
78
|
+
|
79
|
+
spinner.stop
|
80
|
+
|
81
|
+
table = TTY::Table.new(["Xcode Archives", "Size"], data)
|
82
|
+
puts table.render(:ascii, alignments: [:left, :right], padding: [0,1,0,1])
|
83
|
+
|
84
|
+
xcode_archives
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
def get_directory_paths(root_dir)
|
91
|
+
Pathname.new(root_dir).children.select { |c|
|
92
|
+
c.directory? && c.zero? == false && c.blockdev? == false && c.basename.to_s[0] != '.'
|
93
|
+
}
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
|
2
|
+
module DeleteDerivedData
|
3
|
+
class Trash
|
4
|
+
def self.move_to_trash(file)
|
5
|
+
puts "Telling Finder to move the file #{file} to trash... "
|
6
|
+
IO.popen("osascript", "w") do |stdin|
|
7
|
+
stdin.puts %Q{tell app "Finder" to move the POSIX file "#{file}" to trash}
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.empty_trash
|
12
|
+
puts "Telling Finder to empty trash... "
|
13
|
+
IO.popen("osascript", "w") do |stdin|
|
14
|
+
stdin.puts %Q{tell app "Finder" to empty trash}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.empty_securely_trash
|
19
|
+
puts "Telling Finder to securely empty trash... "
|
20
|
+
IO.popen("osascript", "w") do |stdin|
|
21
|
+
stdin.puts %Q{tell app "Finder" to empty trash with security}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
module DeleteDerivedData
|
3
|
+
class Filesize
|
4
|
+
def self.dirSize(path)
|
5
|
+
File.size(path) + Dir["#{path}/**/*"].select { |f| File.file?(f) }.sum { |f| File.size(f) }
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.size(size)
|
9
|
+
units = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'Pib', 'EiB']
|
10
|
+
|
11
|
+
return '0.0 B' if size == 0
|
12
|
+
exp = (Math.log(size) / Math.log(1024)).to_i
|
13
|
+
exp = 6 if exp > 6
|
14
|
+
|
15
|
+
'%.1f %s' % [size.to_f / 1024 ** exp, units[exp]]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
require "delete_derived_data/search"
|
3
|
+
require "delete_derived_data/delete"
|
4
|
+
require "delete_derived_data/version"
|
5
|
+
|
6
|
+
module DeleteDerivedData
|
7
|
+
def self.delete(options = {})
|
8
|
+
search = Search.new(options)
|
9
|
+
derived_paths = search.getDerivedDatas
|
10
|
+
archives_paths = search.getArchives if options[:archives]
|
11
|
+
|
12
|
+
if !derived_paths.nil? && derived_paths.length > 0
|
13
|
+
Delete.run(derived_paths, options)
|
14
|
+
end
|
15
|
+
|
16
|
+
if !archives_paths.nil? && archives_paths.length > 0
|
17
|
+
Delete.run(archives_paths, options)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/main2.rb
ADDED
@@ -0,0 +1,261 @@
|
|
1
|
+
|
2
|
+
require 'find'
|
3
|
+
require "tty-spinner"
|
4
|
+
require "tty-prompt"
|
5
|
+
require "tty-table"
|
6
|
+
require 'trash'
|
7
|
+
|
8
|
+
require "pathname"
|
9
|
+
|
10
|
+
require 'logger'
|
11
|
+
|
12
|
+
class DerivedData
|
13
|
+
def self.hi(language = "english")
|
14
|
+
cmd = 'ls'
|
15
|
+
system(cmd)
|
16
|
+
|
17
|
+
puts "Hello world!"
|
18
|
+
puts language
|
19
|
+
spinner = TTY::Spinner.new("[:spinner] Loading ...", format: :pulse_2)
|
20
|
+
|
21
|
+
spinner.auto_spin # Automatic animation with default interval
|
22
|
+
|
23
|
+
# sleep(2) # Perform task
|
24
|
+
|
25
|
+
derived_paths = []
|
26
|
+
# Find.find('../..') do |path|
|
27
|
+
# derived_paths << path if path =~ /.*\DerivedData$/
|
28
|
+
# end
|
29
|
+
Find.find('../') do |path|
|
30
|
+
# derived_paths << File.expand_path(path, __dir__) if path =~ /.*\DerivedData$/
|
31
|
+
derived_paths << path if path =~ /.*\DerivedData$/
|
32
|
+
end
|
33
|
+
|
34
|
+
spinner.stop("Done!") # Stop animation
|
35
|
+
|
36
|
+
puts derived_paths
|
37
|
+
# trash = Trash.new
|
38
|
+
# trash.throw_out(*derived_paths)
|
39
|
+
# Trash.new.throw_out(*derived_paths)
|
40
|
+
|
41
|
+
somedir = derived_paths?.first
|
42
|
+
# FileUtils.mv(derived_paths.first, File.expand_path('~/.Trash/'))
|
43
|
+
if File.directory?(somedir)
|
44
|
+
puts somedir
|
45
|
+
FileUtils.remove_dir(somedir)
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.clean
|
51
|
+
# cmd = 'sh delete_all_derived_data.sh'
|
52
|
+
# system(cmd)
|
53
|
+
|
54
|
+
# cmd = "echo 'hi'"
|
55
|
+
# value = %x( echo 'hi' )
|
56
|
+
# value = %x[ #{cmd} ]
|
57
|
+
# wasGood = system( "echo 'hi'" )
|
58
|
+
# wasGood = system( cmd )
|
59
|
+
|
60
|
+
spinner = TTY::Spinner.new("[:spinner] Search ...", format: :dots_2)
|
61
|
+
spinner.auto_spin
|
62
|
+
# puts File.expand_path('../', __dir__)
|
63
|
+
# system('find ../ -type d -name "DerivedData" 2>/dev/null -exec trash -v {} +')
|
64
|
+
# system('trash -e')
|
65
|
+
somedir = "/Users/nicolaerogojan/gitRepository/Personal/delete_all_derived_data/DerivedData"
|
66
|
+
# FileUtils.remove_dir(somedir)
|
67
|
+
system("echo #{somedir}")
|
68
|
+
# system("trash #{somedir}") # OK
|
69
|
+
|
70
|
+
system("trash", "-v", "#{somedir}")
|
71
|
+
# system("trash -e")
|
72
|
+
spinner.stop("Done!")
|
73
|
+
end
|
74
|
+
|
75
|
+
def find
|
76
|
+
logger = Logger.new(STDOUT)
|
77
|
+
logger.level = Logger::DEBUG
|
78
|
+
logger.debug(Dir.home)
|
79
|
+
puts "Started At #{Time.now}"
|
80
|
+
|
81
|
+
spinner = TTY::Spinner.new("[:spinner] Search ...", format: :dots_2)
|
82
|
+
spinner.auto_spin
|
83
|
+
|
84
|
+
# base_dir_path = Dir.home
|
85
|
+
# base_dir_path = "/Users/nicolaerogojan/gitRepository"
|
86
|
+
# base_dir_path = "/Users/nicolaerogojan/gitRepository/Personal/delete_all_derived_data"
|
87
|
+
base_dir_path = "/Users/nicolaerogojan/.Trash"
|
88
|
+
# directory_paths = Dir.glob(File.join(base_dir_path, '*', ''))
|
89
|
+
directory_paths = Pathname.new(base_dir_path).children.select { |c| c.directory? && c.basename(path)[0] != ?. }
|
90
|
+
|
91
|
+
logger.debug base_dir_path
|
92
|
+
logger.debug directory_paths
|
93
|
+
|
94
|
+
derived_paths = []
|
95
|
+
arr = []
|
96
|
+
|
97
|
+
# directory_paths.each do |f|
|
98
|
+
# arr << Thread.new {
|
99
|
+
# Find.find(f) {|path| derived_paths << path if path =~ /.*\DerivedData$/}
|
100
|
+
# }
|
101
|
+
# end
|
102
|
+
|
103
|
+
# directory_paths.each do |folder|
|
104
|
+
# Find.find(folder) do |path|
|
105
|
+
# if FileTest.directory?(path)
|
106
|
+
# if File.basename(path)[0] == ?.
|
107
|
+
# Find.prune # Don't look any further into this directory.
|
108
|
+
# else
|
109
|
+
# next
|
110
|
+
# end
|
111
|
+
# else
|
112
|
+
# if path =~ /.*\DerivedData$/
|
113
|
+
# puts path
|
114
|
+
# derived_paths << path
|
115
|
+
# end
|
116
|
+
# end
|
117
|
+
# end
|
118
|
+
# end
|
119
|
+
|
120
|
+
directory_paths.each do |folder|
|
121
|
+
arr << Thread.new {
|
122
|
+
Find.find(folder){ |path|
|
123
|
+
next if !File.directory?(path)
|
124
|
+
next if File.basename(path)[0] == ?.
|
125
|
+
|
126
|
+
# puts File.stat(path).blockdev?
|
127
|
+
next if File.stat(path).blockdev? == true
|
128
|
+
if path =~ /.*\DerivedData$/
|
129
|
+
puts path
|
130
|
+
derived_paths << path
|
131
|
+
end
|
132
|
+
}
|
133
|
+
}
|
134
|
+
end
|
135
|
+
|
136
|
+
arr.each {|t| t.join}
|
137
|
+
|
138
|
+
logger.debug arr.count
|
139
|
+
logger.debug derived_paths
|
140
|
+
|
141
|
+
# derived_paths.each {|f| logger.debug f; trash(f)}
|
142
|
+
spinner.stop("Done!")
|
143
|
+
puts "End at #{Time.now}"
|
144
|
+
end
|
145
|
+
|
146
|
+
def find_in_path(folder)
|
147
|
+
derived_paths = []
|
148
|
+
Find.find(folder) do |path|
|
149
|
+
derived_paths << path if path =~ /.*\DerivedData$/
|
150
|
+
end
|
151
|
+
puts derived_paths
|
152
|
+
end
|
153
|
+
|
154
|
+
def trash(file)
|
155
|
+
IO.popen("osascript", "w") do |stdin|
|
156
|
+
stdin.puts %Q{tell app "Finder" to move the POSIX file "#{file}" to trash}
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
def find2
|
161
|
+
spinner = TTY::Spinner.new("[:spinner] Search ...", format: :dots_2)
|
162
|
+
spinner.auto_spin
|
163
|
+
|
164
|
+
base_dir_path = ENV["HOME"]
|
165
|
+
# base_dir_path = "/Users/nicolaerogojan/.Trash"
|
166
|
+
# directory_paths = Dir.glob(File.join(base_dir_path, '*', ''))
|
167
|
+
directory_paths = []
|
168
|
+
derived_paths = []
|
169
|
+
threads = []
|
170
|
+
|
171
|
+
Pathname.new(base_dir_path).children.select do |c|
|
172
|
+
# c.directory? && c.zero?
|
173
|
+
# puts "dirname -> #{c.dirname}"
|
174
|
+
# puts "basename -> #{c.basename}"
|
175
|
+
# puts "directory -> #{c.directory?}"
|
176
|
+
# puts "blockdev -> #{c.blockdev?}"
|
177
|
+
# puts "zero -> #{c.zero?}"
|
178
|
+
# puts " -> #{c.to_s[0]}"
|
179
|
+
# puts " -> #{c.to_s[0] != '.'}"
|
180
|
+
# puts " -> #{c.basename != '.'}"
|
181
|
+
# puts " -> #{c.basename.to_s[0] != '.'}"
|
182
|
+
# puts "owned -> #{c.owned?}"
|
183
|
+
# puts "=============================="
|
184
|
+
# if c.directory? && c.zero? == false && c.blockdev? == false && c.basename.to_s[0] != '.' && c.basename.to_s != 'Library'
|
185
|
+
if c.directory? && c.zero? == false && c.blockdev? == false && c.basename.to_s[0] != '.'
|
186
|
+
directory_paths << c
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
# puts
|
191
|
+
# puts base_dir_path
|
192
|
+
# puts "=============================="
|
193
|
+
# puts directory_paths
|
194
|
+
# puts "=============================="
|
195
|
+
|
196
|
+
directory_paths.each do |folder|
|
197
|
+
threads << Thread.new {
|
198
|
+
begin
|
199
|
+
Find.find(folder, ignore_error: true) {|path| derived_paths << path if path =~ /.*\DerivedData$/}
|
200
|
+
rescue Exception => e
|
201
|
+
puts e.message
|
202
|
+
end
|
203
|
+
}
|
204
|
+
end
|
205
|
+
|
206
|
+
# Thread.abort_on_exception = false
|
207
|
+
# Thread.report_on_exception = false
|
208
|
+
# threads.each {|t| t.abort_on_exception = false; t.report_on_exception = false; t.join}
|
209
|
+
threads.each {|t| t.join}
|
210
|
+
|
211
|
+
# table = TTY::Table.new(["header1","header2"], [["a1", "a2"], ["b1", "b2"]])
|
212
|
+
|
213
|
+
# roys = [["a1"], ["a2"]]
|
214
|
+
# roys = []
|
215
|
+
# directory_paths.each do |folder|
|
216
|
+
# roys << [folder]
|
217
|
+
# end
|
218
|
+
|
219
|
+
roys = directory_paths.map { |f| [f] }
|
220
|
+
table = TTY::Table.new(["directory_paths"], roys)
|
221
|
+
puts
|
222
|
+
puts table.render(:ascii)
|
223
|
+
|
224
|
+
puts derived_paths
|
225
|
+
puts "=============================="
|
226
|
+
|
227
|
+
xcode_archives_size = Filesize.size(Dir["#{ENV["HOME"]}/Library/Developer/Xcode/Archives/**/*"].select { |f| File.file?(f) }.sum { |f| File.size(f) })
|
228
|
+
puts "Xcode Archives size: #{xcode_archives_size}"
|
229
|
+
spinner.stop("Done!")
|
230
|
+
|
231
|
+
prompt = TTY::Prompt.new
|
232
|
+
|
233
|
+
# answer = prompt.yes?("Do you like Ruby?")
|
234
|
+
answer = prompt.yes?("Are you a human?") do |q|
|
235
|
+
q.default false
|
236
|
+
q.positive "Yup"
|
237
|
+
q.negative "Nope"
|
238
|
+
end
|
239
|
+
|
240
|
+
puts "Answer: #{answer}"
|
241
|
+
|
242
|
+
end
|
243
|
+
|
244
|
+
end
|
245
|
+
|
246
|
+
class Filesize
|
247
|
+
def self.size(size)
|
248
|
+
units = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'Pib', 'EiB']
|
249
|
+
|
250
|
+
return '0.0 B' if size == 0
|
251
|
+
exp = (Math.log(size) / Math.log(1024)).to_i
|
252
|
+
exp = 6 if exp > 6
|
253
|
+
|
254
|
+
'%.1f %s' % [size.to_f / 1024 ** exp, units[exp]]
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
clean = DerivedData.new
|
259
|
+
# DerivedData.hi("Test")
|
260
|
+
# DerivedData.new.find()
|
261
|
+
DerivedData.new.find2()
|
metadata
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: delete_derived_data
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Rogojan Nicolae
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-05-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: tty-spinner
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.9.3
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.9.3
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: tty-prompt
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.23.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.23.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: tty-table
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.12.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.12.0
|
55
|
+
description: Search all DerivedData folders and moves files or folders to the trash.
|
56
|
+
Empty the trash (asks for confirmation)
|
57
|
+
email: rogojan.colea@gmail.com
|
58
|
+
executables:
|
59
|
+
- delete_derived_data
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- bin/delete_derived_data
|
64
|
+
- lib/delete_derived_data.rb
|
65
|
+
- lib/delete_derived_data/delete.rb
|
66
|
+
- lib/delete_derived_data/search.rb
|
67
|
+
- lib/delete_derived_data/trash.rb
|
68
|
+
- lib/delete_derived_data/utils.rb
|
69
|
+
- lib/delete_derived_data/version.rb
|
70
|
+
- lib/main2.rb
|
71
|
+
homepage: https://github.com/rognick/delete_derived_data
|
72
|
+
licenses:
|
73
|
+
- MIT
|
74
|
+
metadata: {}
|
75
|
+
post_install_message:
|
76
|
+
rdoc_options: []
|
77
|
+
require_paths:
|
78
|
+
- lib
|
79
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
requirements: []
|
90
|
+
rubygems_version: 3.1.4
|
91
|
+
signing_key:
|
92
|
+
specification_version: 4
|
93
|
+
summary: Delete all derived data!
|
94
|
+
test_files: []
|