git_curate 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +1 -1
- data/README.md +16 -1
- data/Rakefile +0 -1
- data/VERSION +1 -1
- data/git_curate.gemspec +2 -0
- data/lib/git_curate/runner.rb +90 -0
- data/lib/git_curate/version.rb +1 -1
- data/lib/git_curate.rb +1 -91
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 62b82ad94f1a3524028e3e9f8b8dd60f1b4f2177
|
4
|
+
data.tar.gz: e01c3ba16c3828cdb511f69fea4f042451c851c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 442a5541be149365e52164ade62f83fef05838baadfc3d34ab5c003963891d3bac2c4bed2c3499e30cdce1a2b8fcdb8f964172ae41228aa0d4af8d99ad153f8d
|
7
|
+
data.tar.gz: cb8dab16a57aadd7dfbdd009663a9fb1bc6eaa74ece51bd880656fa749814b3df01848a9437eddcd53221fdd423e393cbbfb82fb72942fb82ebe6f5c65eb661f
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# git curate
|
2
2
|
|
3
|
+
[![Gem Version][GV img]][Gem Version]
|
4
|
+
|
3
5
|
## Motivation
|
4
6
|
|
5
7
|
After a while, my local repo becomes cluttered with branches, and `git branch` outputs an awkwardly
|
@@ -13,10 +15,14 @@ summary), and prompting you either to keep or to delete each branch as you go.
|
|
13
15
|
|
14
16
|
## Installation
|
15
17
|
|
18
|
+
You'll need Ruby v2.1.10 or higher. Run
|
19
|
+
|
16
20
|
```
|
17
21
|
gem install git_curate
|
18
22
|
```
|
19
23
|
|
24
|
+
to install the executable.
|
25
|
+
|
20
26
|
## Usage
|
21
27
|
|
22
28
|
From within a git repo, run:
|
@@ -27,7 +33,13 @@ git curate
|
|
27
33
|
|
28
34
|
This will step you through your local branches one at a time, asking you whether to keep or
|
29
35
|
delete each branch in what should be a fairly self-explanatory fashion. Note the branch
|
30
|
-
you are currently on will not be included in the list
|
36
|
+
you are currently on will not be included in the list, as `git` does not allow you to delete
|
37
|
+
the branch you're on.
|
38
|
+
|
39
|
+
(Note the space after `git`—we have effectively added a subcommand to `git` just by installing
|
40
|
+
a gem. When `git_curate` is installed, an executable is created called `git-curate`.
|
41
|
+
In general, for any executable of the form _git-xyz_ in your `PATH`, `git` will automatically
|
42
|
+
recognize _xyz_ as a subcommand, and will run that executable whenever that subcommand is invoked.)
|
31
43
|
|
32
44
|
## Development
|
33
45
|
|
@@ -41,3 +53,6 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/matt-h
|
|
41
53
|
|
42
54
|
The gem is available as open source under the terms of the [MIT
|
43
55
|
License](http://opensource.org/licenses/MIT).
|
56
|
+
|
57
|
+
[Gem Version]: https://rubygems.org/gems/git_curate
|
58
|
+
[GV img]: https://img.shields.io/gem/v/git_curate.svg?style=plastic
|
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/git_curate.gemspec
CHANGED
@@ -14,6 +14,8 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.homepage = "https://github.com/matt-harvey/git_curate"
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
17
|
+
spec.required_ruby_version = ">= 2.1.10"
|
18
|
+
|
17
19
|
spec.metadata = {
|
18
20
|
"source_code_uri" => "https://github.com/matt-harvey/git_curate",
|
19
21
|
"changelog_uri" => "https://raw.githubusercontent.com/matt-harvey/git_curate/master/CHANGELOG.md"
|
@@ -0,0 +1,90 @@
|
|
1
|
+
module GitCurate
|
2
|
+
|
3
|
+
class Runner
|
4
|
+
|
5
|
+
def run
|
6
|
+
if ARGV.length != 0
|
7
|
+
puts "This script does not accept any arguments."
|
8
|
+
exit
|
9
|
+
end
|
10
|
+
|
11
|
+
branches = `git branch`.split($/).reject { |b| current_branch?(b) }.map(&:strip)
|
12
|
+
|
13
|
+
table = Tabulo::Table.new(branches, vertical_rule_character: " ", intersection_character: " ",
|
14
|
+
horizontal_rule_character: "-", column_padding: 0) do |t|
|
15
|
+
|
16
|
+
t.add_column(:branch, header: "Branch", align_header: :left) { |branch| branch }
|
17
|
+
|
18
|
+
t.add_column("Last commit", align_header: :left) do |branch|
|
19
|
+
`git log -n1 --date=short --format='format:%cd' #{branch}`
|
20
|
+
end
|
21
|
+
|
22
|
+
t.add_column("Last author", align_header: :left) do |branch|
|
23
|
+
`git log -n1 --format='format:%an' #{branch}`
|
24
|
+
end
|
25
|
+
|
26
|
+
t.add_column("Last subject", align_header: :left) do |branch|
|
27
|
+
`git log -n1 --format='format:%s' #{branch}`
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
table.shrinkwrap!(max_table_width: 125)
|
32
|
+
|
33
|
+
branches_to_delete = []
|
34
|
+
|
35
|
+
table.each_with_index do |row, index|
|
36
|
+
case HighLine.ask("#{row} Mark for deletion? [y/n/done/abort/help] ")
|
37
|
+
when "y"
|
38
|
+
branches_to_delete << row.to_h[:branch]
|
39
|
+
when "n"
|
40
|
+
; # do nothing
|
41
|
+
when "done"
|
42
|
+
puts table.horizontal_rule
|
43
|
+
finalize(branches_to_delete)
|
44
|
+
exit
|
45
|
+
when "abort"
|
46
|
+
puts table.horizontal_rule
|
47
|
+
puts "\nAborting. No branches deleted."
|
48
|
+
exit
|
49
|
+
else
|
50
|
+
puts table.horizontal_rule
|
51
|
+
print_help
|
52
|
+
puts table.horizontal_rule unless index == 0
|
53
|
+
redo
|
54
|
+
end
|
55
|
+
end
|
56
|
+
puts table.horizontal_rule
|
57
|
+
|
58
|
+
finalize(branches_to_delete)
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def current_branch?(branch)
|
64
|
+
branch =~ /^\s*\*/
|
65
|
+
end
|
66
|
+
|
67
|
+
def finalize(branches_to_delete)
|
68
|
+
if branches_to_delete.size != 0
|
69
|
+
puts
|
70
|
+
system("git branch -D #{branches_to_delete.join(" ")}")
|
71
|
+
puts "\nDone"
|
72
|
+
else
|
73
|
+
puts "\nNo branches deleted."
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def print_help
|
78
|
+
puts <<-EOL
|
79
|
+
Please enter one of:
|
80
|
+
y -- mark branch for deletion
|
81
|
+
n -- keep branch
|
82
|
+
done -- delete marked branches and exit session
|
83
|
+
abort -- abort without deleting any branches
|
84
|
+
help -- print this help message
|
85
|
+
EOL
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
data/lib/git_curate/version.rb
CHANGED
data/lib/git_curate.rb
CHANGED
@@ -1,94 +1,4 @@
|
|
1
|
+
require "git_curate/runner"
|
1
2
|
require "git_curate/version"
|
2
3
|
require "highline/import"
|
3
4
|
require "tabulo"
|
4
|
-
|
5
|
-
module GitCurate
|
6
|
-
|
7
|
-
class Runner
|
8
|
-
|
9
|
-
def run
|
10
|
-
if ARGV.length != 0
|
11
|
-
puts "This script does not accept any arguments."
|
12
|
-
exit
|
13
|
-
end
|
14
|
-
|
15
|
-
branches = `git branch`.split($/).reject { |b| current_branch?(b) }.map(&:strip)
|
16
|
-
|
17
|
-
table = Tabulo::Table.new(branches, vertical_rule_character: " ", intersection_character: " ",
|
18
|
-
horizontal_rule_character: "-", column_padding: 0) do |t|
|
19
|
-
|
20
|
-
t.add_column(:branch, header: "Branch", align_header: :left) { |branch| branch }
|
21
|
-
|
22
|
-
t.add_column("Last commit date", align_header: :left) do |branch|
|
23
|
-
`git log -n1 --date=short --format='format:%cd' #{branch}`
|
24
|
-
end
|
25
|
-
|
26
|
-
t.add_column("Last commit author", align_header: :left) do |branch|
|
27
|
-
`git log -n1 --format='format:%an' #{branch}`
|
28
|
-
end
|
29
|
-
|
30
|
-
t.add_column("Last commit subject", align_header: :left) do |branch|
|
31
|
-
`git log -n1 --format='format:%s' #{branch}`
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
table.shrinkwrap!(max_table_width: 200)
|
36
|
-
|
37
|
-
branches_to_delete = []
|
38
|
-
|
39
|
-
table.each_with_index do |row, index|
|
40
|
-
case HighLine.ask("#{row} Mark for deletion? [y/n/done/abort/help] ")
|
41
|
-
when "y"
|
42
|
-
branches_to_delete << row.to_h[:branch]
|
43
|
-
when "n"
|
44
|
-
; # do nothing
|
45
|
-
when "done"
|
46
|
-
puts table.horizontal_rule
|
47
|
-
finalize(branches_to_delete)
|
48
|
-
exit
|
49
|
-
when "abort"
|
50
|
-
puts table.horizontal_rule
|
51
|
-
puts "\nAborting. No branches deleted."
|
52
|
-
exit
|
53
|
-
else
|
54
|
-
puts table.horizontal_rule
|
55
|
-
print_help
|
56
|
-
puts table.horizontal_rule unless index == 0
|
57
|
-
redo
|
58
|
-
end
|
59
|
-
end
|
60
|
-
puts table.horizontal_rule
|
61
|
-
|
62
|
-
finalize(branches_to_delete)
|
63
|
-
end
|
64
|
-
|
65
|
-
private
|
66
|
-
|
67
|
-
def current_branch?(branch)
|
68
|
-
branch =~ /^\s*\*/
|
69
|
-
end
|
70
|
-
|
71
|
-
def finalize(branches_to_delete)
|
72
|
-
if branches_to_delete.size != 0
|
73
|
-
puts
|
74
|
-
system("git branch -D #{branches_to_delete.join(" ")}")
|
75
|
-
puts "\nDone"
|
76
|
-
else
|
77
|
-
puts "\nNo branches deleted."
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
def print_help
|
82
|
-
puts <<-EOL
|
83
|
-
Please enter one of:
|
84
|
-
y -- mark branch for deletion
|
85
|
-
n -- keep branch
|
86
|
-
done -- delete marked branches and exit session
|
87
|
-
abort -- abort without deleting any branches
|
88
|
-
help -- print this help message
|
89
|
-
EOL
|
90
|
-
end
|
91
|
-
|
92
|
-
end
|
93
|
-
|
94
|
-
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git_curate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Harvey
|
@@ -101,6 +101,7 @@ files:
|
|
101
101
|
- exe/git-curate
|
102
102
|
- git_curate.gemspec
|
103
103
|
- lib/git_curate.rb
|
104
|
+
- lib/git_curate/runner.rb
|
104
105
|
- lib/git_curate/version.rb
|
105
106
|
homepage: https://github.com/matt-harvey/git_curate
|
106
107
|
licenses:
|
@@ -116,7 +117,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
116
117
|
requirements:
|
117
118
|
- - ">="
|
118
119
|
- !ruby/object:Gem::Version
|
119
|
-
version:
|
120
|
+
version: 2.1.10
|
120
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
122
|
requirements:
|
122
123
|
- - ">="
|