wtfcleaner 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.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/lib/wtfcleaner.rb +58 -0
  3. data/lib/wtfcleaner_lib.rb +71 -0
  4. metadata +44 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 14843034334d63c5e25d06d49dc78649b6e830ffb0a6f4e956d8efe2905d6e04
4
+ data.tar.gz: 78660a81142421445042e5bd30038ef8788932852dd50d14abb978441e671848
5
+ SHA512:
6
+ metadata.gz: 5b9e5a5a1bca536409cb3465a5c29e323d1265ae50fc6bd4bdc1d3c72b6adcbd642392b0aef8eeba917e35124f17317a591f202b8a7a111f7954a66b79b16991
7
+ data.tar.gz: 8ab8ef1dcd3e08c49fedcf420e12394644c0b9e3314b571cfec478f7f3355b5d242d6579d39c6c8819ccce569614acf92721cd40bb33f79392d0cf300aff1b61
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/ruby
2
+ require 'optparse'
3
+ require_relative 'wtfcleaner_lib'
4
+
5
+ options = {:nuke => false, :annihilate => false}
6
+
7
+ banner_desc = "Tool for cleaning all build caches from Android/Gradle projects.
8
+ Helpful when IDE and Gradle let\'s you down.
9
+
10
+ Usage: gradle_cleaner.rb [options]\n\n"
11
+ nuke_desc = "nuke"
12
+ annihilate_desc = "☠THIS IS POWERFUL STUFF☠
13
+ Deepest of all cleans.
14
+ Clears out global folders:
15
+ * the global Gradle cache
16
+ * the wrapper-downloaded Gradle distros
17
+ * the Gradle daemon data
18
+ * the Android build cache
19
+ Nothing will be the same after that.
20
+ "
21
+
22
+ parser = OptionParser.new do |opts|
23
+ opts.banner = banner_desc
24
+
25
+ opts.on('-n', '--nuke', nuke_desc) do
26
+ options[:nuke] = true
27
+ end
28
+
29
+ opts.on('-a', '--annihilate', annihilate_desc) do
30
+ options[:annihilate] = true
31
+ end
32
+
33
+ opts.on('-h', '--help', 'display help') do
34
+ puts opts
35
+ exit
36
+ end
37
+ end
38
+
39
+ parser.parse!
40
+
41
+ if options[:nuke] && options[:annihilate]
42
+ puts "Annihilating and nuking at the same time is prohibited by The Geneva Convention.Unfortunately (╥_╥)"
43
+ exit
44
+ end
45
+
46
+ gradlew = "./gradlew"
47
+
48
+ gentle_clean(gradlew)
49
+
50
+ if options[:nuke]
51
+ nuke_cache(gradlew)
52
+ end
53
+
54
+ if options[:annihilate]
55
+ annihilate_cache(gradlew)
56
+ end
57
+
58
+ kill_java()
@@ -0,0 +1,71 @@
1
+ #!/usr/bin/ruby
2
+ require 'fileutils'
3
+
4
+ def puts?(text, should_display)
5
+ if should_display
6
+ puts text
7
+ end
8
+ end
9
+
10
+ def remove_matching_subdirs(name, silent=false)
11
+ (Dir['**/*'] + Dir['**/.*'])
12
+ .select { |d| File.directory? d }
13
+ .select { |d| File.basename(d).downcase == name.downcase }
14
+ .each { |d| puts?("\tRemoving: #{d}", !silent) }
15
+ .each { |d| FileUtils.rm_r d }
16
+ end
17
+
18
+ def gentle_clean(gradlew, silent=false)
19
+ puts?('Starting Gradle clean...', !silent)
20
+ `#{gradlew} clean -q`
21
+
22
+ puts?('Killing Gradle daemon...', !silent)
23
+ `#{gradlew} --stop`
24
+
25
+ puts?('Killing ADB server...', !silent)
26
+ `adb kill-server`
27
+
28
+ puts?('Removing all build directories...', !silent)
29
+ remove_matching_subdirs('build')
30
+
31
+ puts?('Removing all .gradle directories...', !silent)
32
+ remove_matching_subdirs('.gradle')
33
+ end
34
+
35
+ def nuke_cache(gradlew, silent=false)
36
+ puts?("Nuking all build caches...", !silent)
37
+ `#{gradlew} cleanBuildCache`
38
+
39
+ Dir["#{Dir.home}/.*"]
40
+ .select { |d| File.directory? d }
41
+ .select { |d| File.basename(d).downcase == '.gradle'}
42
+ .map { |d| "#{File.join(d, 'caches', 'build-cache-1')}" }
43
+ .select { |d| File.exist?(d) && File.directory?(d) }
44
+ .each { |d| puts?("\tNuking #{d}", !silent) }
45
+ .each { |d| FileUtils.rm_r d }
46
+ end
47
+
48
+ def remove_gradle_subdir?(subdir)
49
+ name = File.basename(subdir).downcase
50
+ targets = ["build-scan-data", "caches", "daemon", "wrapper"]
51
+ targets.each do |t|
52
+ name == t ? (return true) : next
53
+ end
54
+ return false
55
+ end
56
+
57
+ def annihilate_cache(gradlew, silent=false)
58
+ puts?('Annihilating Gradle global caches...', !silent)
59
+ `#{gradlew} cleanBuildCache`
60
+
61
+ Dir["#{Dir.home}/.gradle/*"]
62
+ .select { |d| File.directory? d }
63
+ .select { |d| remove_gradle_subdir? d }
64
+ .each { |d| puts?("\tAnnihilating #{d}", !silent) }
65
+ .each { |d| FileUtils.rm_r d }
66
+ end
67
+
68
+ def kill_java(silent=false)
69
+ puts?('Killing every CLI Java instance...', !silent)
70
+ `killall java`
71
+ end
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wtfcleaner
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - voltar13
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-12-05 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Solution for those wtf cache moments in Android Studio
14
+ email:
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/wtfcleaner.rb
20
+ - lib/wtfcleaner_lib.rb
21
+ homepage: https://rubygems.org/gems/wtfcleaner
22
+ licenses:
23
+ - MIT
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubygems_version: 3.0.6
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: wtfcleaner
44
+ test_files: []