git_eraser 0.1.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/console +14 -0
- data/bin/setup +8 -0
- data/exe/git_eraser +6 -0
- data/lib/git_eraser/version.rb +3 -0
- data/lib/git_eraser.rb +246 -0
- metadata +165 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 9c2a260bb2d50039ee1c4a8cf97d7113ff7b5cb51dee191ddb18c3ea19f381d1
|
4
|
+
data.tar.gz: 93a8034decfab3b1d3ef4dc5e8b8d6dc5bde6405bc95053d0aefe40bce06db58
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 25f0806bc3ed68855ecf58bae3747e7febd66cef2f718cd8ee8397f3f58fa3030b58ba001b85334a2d05eeac4ce51a0843e8980a374cc8925146e3912b68f6ca
|
7
|
+
data.tar.gz: 3dae50239cac78518abb2345959f425db9d948e7b3b62de912f831d142e6f87ee25f19b13a934440c0debba0d6201124f0096bc29e4a50fb1b80f1af6ed23137
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "git_eraser"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
data/exe/git_eraser
ADDED
data/lib/git_eraser.rb
ADDED
@@ -0,0 +1,246 @@
|
|
1
|
+
require "git_eraser/version"
|
2
|
+
require "thor"
|
3
|
+
require "highline"
|
4
|
+
require "rainbow"
|
5
|
+
require "httpclient"
|
6
|
+
require "git"
|
7
|
+
|
8
|
+
module GitEraser
|
9
|
+
class Error < StandardError; end
|
10
|
+
|
11
|
+
class Eraser < Thor
|
12
|
+
|
13
|
+
desc 'erase', 'Erase git branches that had been merged into master'
|
14
|
+
option :local
|
15
|
+
option :origin
|
16
|
+
def erase
|
17
|
+
erase_local if options[:local]
|
18
|
+
erase_origin if options[:origin]
|
19
|
+
Helper.new.print_no_flag_error_message if options.empty?
|
20
|
+
end
|
21
|
+
|
22
|
+
desc 'preview', 'Preview git branches that had been merged into master'
|
23
|
+
option :local
|
24
|
+
option :origin
|
25
|
+
def preview
|
26
|
+
preview_local if options[:local]
|
27
|
+
preview_origin if options[:origin]
|
28
|
+
Helper.new.print_no_flag_error_message if options.empty?
|
29
|
+
end
|
30
|
+
|
31
|
+
no_commands do
|
32
|
+
def preview_local
|
33
|
+
Git.configure do |config|
|
34
|
+
# If you want to use a custom git binary
|
35
|
+
config.binary_path = "/usr/bin/git"
|
36
|
+
end
|
37
|
+
current_directory = Dir.pwd
|
38
|
+
|
39
|
+
Helper.new.print_preview_message('local')
|
40
|
+
begin
|
41
|
+
g = Git.open("#{current_directory}")
|
42
|
+
|
43
|
+
g.branches.local.each_with_index do |local_branch, index|
|
44
|
+
puts " 🧹 #{index + 1}. #{local_branch}"
|
45
|
+
end
|
46
|
+
|
47
|
+
puts "\n\n"
|
48
|
+
rescue
|
49
|
+
Helper.new.print_no_git_error_message
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
no_commands do
|
55
|
+
def preview_origin
|
56
|
+
Git.configure do |config|
|
57
|
+
# If you want to use a custom git binary
|
58
|
+
config.binary_path = "/usr/bin/git"
|
59
|
+
end
|
60
|
+
current_directory = Dir.pwd
|
61
|
+
|
62
|
+
Helper.new.print_preview_message('origin')
|
63
|
+
begin
|
64
|
+
g = Git.open("#{current_directory}")
|
65
|
+
|
66
|
+
g.branches.remote.each_with_index do |origin_branch, index|
|
67
|
+
puts " 🧹 #{index + 1}. #{origin_branch}"
|
68
|
+
end
|
69
|
+
|
70
|
+
puts "\n\n"
|
71
|
+
rescue
|
72
|
+
Helper.new.print_no_git_error_message
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
no_commands do
|
78
|
+
def erase_local
|
79
|
+
current_directory = Dir.pwd
|
80
|
+
|
81
|
+
Helper.new.print_cleanup_message
|
82
|
+
begin
|
83
|
+
g = Git.open("#{current_directory}")
|
84
|
+
|
85
|
+
g.branches.local.each_with_index do |local_branch, index|
|
86
|
+
puts " 🧹 #{index + 1}. #{local_branch}"
|
87
|
+
end
|
88
|
+
|
89
|
+
puts "\n\n"
|
90
|
+
|
91
|
+
inputStream = HighLine.new
|
92
|
+
should_delete_branches = inputStream.agree("Delete these branches? (y/n) ")
|
93
|
+
if should_delete_branches == true
|
94
|
+
puts "\n\n"
|
95
|
+
g.checkout('master')
|
96
|
+
g.branches.local.each_with_index do |local_branch, index|
|
97
|
+
begin
|
98
|
+
if g.branch('master').contains?(local_branch)
|
99
|
+
local_branch.delete
|
100
|
+
puts " #{index + 1}. '#{local_branch}' Removed ✅"
|
101
|
+
else
|
102
|
+
puts " #{index + 1}. '#{local_branch}' Not merged into 'master' ❌"
|
103
|
+
end
|
104
|
+
rescue
|
105
|
+
puts " #{index + 1}. Can't remove '#{local_branch}' ❌"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
puts "\n\n"
|
110
|
+
rescue
|
111
|
+
Helper.new.print_no_git_error_message
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
no_commands do
|
117
|
+
def erase_origin
|
118
|
+
current_directory = Dir.pwd
|
119
|
+
|
120
|
+
Helper.new.print_cleanup_message
|
121
|
+
begin
|
122
|
+
g = Git.open("#{current_directory}")
|
123
|
+
|
124
|
+
g.branches.remote.each_with_index do |origin_branch, index|
|
125
|
+
puts " 🧹 #{index + 1}. #{origin_branch}"
|
126
|
+
end
|
127
|
+
|
128
|
+
puts "\n\n"
|
129
|
+
|
130
|
+
inputStream = HighLine.new
|
131
|
+
should_delete_branches = inputStream.agree("Delete these branches? (y/n) ")
|
132
|
+
|
133
|
+
if should_delete_branches == true
|
134
|
+
puts "\n\n"
|
135
|
+
g.checkout('master')
|
136
|
+
g.pull('origin', 'master')
|
137
|
+
array_of_remote_deleted_branches = []
|
138
|
+
g.branches.remote.each_with_index do |origin_branch, index|
|
139
|
+
begin
|
140
|
+
branch_string = origin_branch.to_s
|
141
|
+
branch_string['remotes/origin/'] = ''
|
142
|
+
g.checkout(branch_string)
|
143
|
+
if g.branch('master').contains?(branch_string) && branch_string != 'master'
|
144
|
+
system "git push -u origin --delete #{branch_string} -q"
|
145
|
+
puts " #{index + 1}. '#{origin_branch}' Removed ✅"
|
146
|
+
array_of_remote_deleted_branches.append(branch_string)
|
147
|
+
elsif branch_string == 'master'
|
148
|
+
puts " #{index + 1}. '#{origin_branch}' Can't remove 'master' branch ❌"
|
149
|
+
else
|
150
|
+
puts " #{index + 1}. '#{origin_branch}' Not merged into 'master' ❌"
|
151
|
+
end
|
152
|
+
rescue
|
153
|
+
puts " #{index + 1}. Can't remove '#{origin_branch}' ❌"
|
154
|
+
end
|
155
|
+
end
|
156
|
+
g.checkout('master')
|
157
|
+
delete_local_after_origin(array_of_remote_deleted_branches)
|
158
|
+
end
|
159
|
+
puts "\n\n"
|
160
|
+
rescue
|
161
|
+
Helper.new.print_no_git_error_message
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
no_commands do
|
167
|
+
def delete_local_after_origin(branches)
|
168
|
+
current_directory = Dir.pwd
|
169
|
+
begin
|
170
|
+
g = Git.open("#{current_directory}")
|
171
|
+
g.branches.local.each do |local_branch|
|
172
|
+
puts "Local: #{local_branch}"
|
173
|
+
branches.each do |value|
|
174
|
+
puts "coming: #{value}"
|
175
|
+
if local_branch.to_s == value
|
176
|
+
local_branch.delete
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
rescue
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
class Helper
|
188
|
+
def print_cleanup_message
|
189
|
+
text2 = "
|
190
|
+
_____ _ _ ______
|
191
|
+
/ ____(_) | | ____|
|
192
|
+
| | __ _| |_ | |__ _ __ __ _ ___ ___ _ __
|
193
|
+
| | |_ | | __| | __| | '__/ _` / __|/ _ \\ '__|
|
194
|
+
| |__| | | |_ | |____| | | (_| \\__ \\ __/ |
|
195
|
+
\\_____|_|\\__| |______|_| \\__,_|___/\\___|_|
|
196
|
+
"
|
197
|
+
puts "#{text2} \n"
|
198
|
+
puts "Welcome to the #{Rainbow("Git Eraser").underline.bright.red} 🧹🧹 project!
|
199
|
+
Before we start cleaning your git branches, here is a preview of your branches: \n\n"
|
200
|
+
end
|
201
|
+
|
202
|
+
def print_preview_message(git_type)
|
203
|
+
text2 = "
|
204
|
+
_____ _ _ ______
|
205
|
+
/ ____(_) | | ____|
|
206
|
+
| | __ _| |_ | |__ _ __ __ _ ___ ___ _ __
|
207
|
+
| | |_ | | __| | __| | '__/ _` / __|/ _ \\ '__|
|
208
|
+
| |__| | | |_ | |____| | | (_| \\__ \\ __/ |
|
209
|
+
\\_____|_|\\__| |______|_| \\__,_|___/\\___|_|
|
210
|
+
"
|
211
|
+
puts "#{text2} \n"
|
212
|
+
puts "Welcome to the #{Rainbow("Git Eraser").underline.bright.red} 🧹🧹 project!
|
213
|
+
Here is a preview of your #{git_type} branches: \n\n"
|
214
|
+
end
|
215
|
+
|
216
|
+
def print_no_git_error_message
|
217
|
+
text2 = "
|
218
|
+
_____ _ _ ______
|
219
|
+
/ ____(_) | | ____|
|
220
|
+
| | __ _| |_ | |__ _ __ __ _ ___ ___ _ __
|
221
|
+
| | |_ | | __| | __| | '__/ _` / __|/ _ \\ '__|
|
222
|
+
| |__| | | |_ | |____| | | (_| \\__ \\ __/ |
|
223
|
+
\\_____|_|\\__| |______|_| \\__,_|___/\\___|_|
|
224
|
+
"
|
225
|
+
puts "#{text2} \n"
|
226
|
+
puts "Welcome to the #{Rainbow("Git Eraser").underline.bright.red} 🧹🧹 project! \n\n"
|
227
|
+
puts "⚠️⚠️ There is no #{Rainbow("git").underline.bright.red} directory here 😡 \n\n"
|
228
|
+
end
|
229
|
+
|
230
|
+
def print_no_flag_error_message
|
231
|
+
text2 = "
|
232
|
+
_____ _ _ ______
|
233
|
+
/ ____(_) | | ____|
|
234
|
+
| | __ _| |_ | |__ _ __ __ _ ___ ___ _ __
|
235
|
+
| | |_ | | __| | __| | '__/ _` / __|/ _ \\ '__|
|
236
|
+
| |__| | | |_ | |____| | | (_| \\__ \\ __/ |
|
237
|
+
\\_____|_|\\__| |______|_| \\__,_|___/\\___|_|
|
238
|
+
"
|
239
|
+
puts "#{text2} \n"
|
240
|
+
puts "Welcome to the #{Rainbow("Git Eraser").underline.bright.red} 🧹🧹 project! \n\n"
|
241
|
+
puts "⚠️⚠️ You didn't specify any flag, please use --local or --origin flag 😡 \n\n"
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
|
246
|
+
end
|
metadata
ADDED
@@ -0,0 +1,165 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: git_eraser
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- KarimEbrahem
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-05-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: thor
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.20.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.20.3
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: highline
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.0.2
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.0.2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rainbow
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 3.0.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 3.0.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: git
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.5.0
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.5.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: httpclient
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 2.8.3
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 2.8.3
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: bundler
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '2.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rake
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '10.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '10.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rspec
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '3.0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '3.0'
|
125
|
+
description: git_eraser is used to help you in cleaning your branches.
|
126
|
+
email:
|
127
|
+
- karimabdelazizmansour@gmail.com
|
128
|
+
executables:
|
129
|
+
- git_eraser
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- bin/console
|
134
|
+
- bin/setup
|
135
|
+
- exe/git_eraser
|
136
|
+
- lib/git_eraser.rb
|
137
|
+
- lib/git_eraser/version.rb
|
138
|
+
homepage: https://github.com/KarimEbrahemAbdelaziz/git_eraser
|
139
|
+
licenses:
|
140
|
+
- MIT
|
141
|
+
metadata:
|
142
|
+
allowed_push_host: https://RubyGems.org
|
143
|
+
homepage_uri: https://github.com/KarimEbrahemAbdelaziz/git_eraser
|
144
|
+
source_code_uri: https://github.com/KarimEbrahemAbdelaziz/git_eraser
|
145
|
+
changelog_uri: https://github.com/KarimEbrahemAbdelaziz/git_eraser
|
146
|
+
post_install_message:
|
147
|
+
rdoc_options: []
|
148
|
+
require_paths:
|
149
|
+
- lib
|
150
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - ">="
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: '0'
|
155
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
requirements: []
|
161
|
+
rubygems_version: 3.0.1
|
162
|
+
signing_key:
|
163
|
+
specification_version: 4
|
164
|
+
summary: git_eraser is used to help you in cleaning your git branches.
|
165
|
+
test_files: []
|