git-cleanup 0.1.3 → 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.
- data/bin/git-cleanup +33 -1
- data/git-cleanup.gemspec +3 -1
- data/lib/git-cleanup.rb +37 -18
- data/lib/git-cleanup/branch.rb +6 -6
- data/lib/git-cleanup/helper.rb +6 -1
- data/lib/git-cleanup/version.rb +3 -0
- metadata +44 -38
data/bin/git-cleanup
CHANGED
@@ -1,3 +1,35 @@
|
|
1
1
|
require 'git-cleanup'
|
2
|
+
require 'optparse'
|
2
3
|
|
3
|
-
|
4
|
+
trap("INT") {
|
5
|
+
Formatador.redisplay("[bold][yellow]No more cleanup[/]\n")
|
6
|
+
exit(1)
|
7
|
+
}
|
8
|
+
|
9
|
+
conf = {
|
10
|
+
:skip_unmerged => false
|
11
|
+
}
|
12
|
+
|
13
|
+
opts = OptionParser.new do |opts|
|
14
|
+
opts.banner = "Usage: git-cleanup [OPTIONS] -- ... commands"
|
15
|
+
opts.on("-s", "--skip-unmerged", "Unmerge branches will be skipped") do |u|
|
16
|
+
conf[:skip_unmerged] = true
|
17
|
+
end
|
18
|
+
opts.on("-v", "--version", "Shows version") do
|
19
|
+
puts GitCleanup::VERSION
|
20
|
+
exit
|
21
|
+
end
|
22
|
+
opts.on("-h", "--help", "Shows this help") do
|
23
|
+
puts opts
|
24
|
+
exit
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
begin
|
29
|
+
opts.parse!(ARGV)
|
30
|
+
rescue OptionParser::ParseError => ex
|
31
|
+
$stderr.puts ex
|
32
|
+
exit 1
|
33
|
+
end
|
34
|
+
|
35
|
+
GitCleanup.run(conf)
|
data/git-cleanup.gemspec
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "git-cleanup/version"
|
3
4
|
|
4
5
|
Gem::Specification.new do |s|
|
5
6
|
s.name = "git-cleanup"
|
6
|
-
s.version =
|
7
|
+
s.version = GitCleanup::VERSION
|
7
8
|
s.platform = Gem::Platform::RUBY
|
8
9
|
s.authors = ["Martyn Loughran"]
|
9
10
|
s.email = ["me@mloughran.com"]
|
@@ -12,6 +13,7 @@ Gem::Specification.new do |s|
|
|
12
13
|
s.description = %q{Command line tool for interactively cleaning up old git branches (remotely and locally)}
|
13
14
|
|
14
15
|
s.add_dependency 'grit', '~> 2.2.0'
|
16
|
+
s.add_dependency 'formatador', '~> 0.2.1'
|
15
17
|
|
16
18
|
s.files = `git ls-files`.split("\n")
|
17
19
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/lib/git-cleanup.rb
CHANGED
@@ -1,15 +1,22 @@
|
|
1
1
|
require 'grit'
|
2
2
|
require 'tempfile'
|
3
|
-
|
3
|
+
require 'formatador'
|
4
4
|
# Grit.debug = true
|
5
5
|
|
6
|
+
# No default indent
|
7
|
+
class Formatador
|
8
|
+
def initialize
|
9
|
+
@indent = 0
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
6
13
|
class GitCleanup
|
7
|
-
def self.run
|
14
|
+
def self.run(options = {})
|
8
15
|
repo = Grit::Repo.new(Dir.pwd)
|
9
16
|
|
10
17
|
master = repo.heads.find { |h| h.name == 'master' }
|
11
18
|
|
12
|
-
|
19
|
+
self.prune(repo)
|
13
20
|
|
14
21
|
local_branches = repo.branches.map { |b| b.name }
|
15
22
|
|
@@ -23,28 +30,39 @@ class GitCleanup
|
|
23
30
|
commits = branch.commits(master)
|
24
31
|
|
25
32
|
msg = "Branch #{branch.to_s} (#{index+1}/#{remote_branches.size})"
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
puts commits
|
33
|
+
Formatador.display_line
|
34
|
+
|
35
|
+
Formatador.display_line("[bold][green]#{msg}[/]")
|
36
|
+
Formatador.display_line "[bold][green]" + '-' * msg.size + "[/]"
|
31
37
|
|
32
38
|
if diff.empty?
|
39
|
+
Formatador.display_line "Branch merged. Last commit on branch:"
|
33
40
|
last_commit = branch.commit
|
34
41
|
if last_commit
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
42
|
+
Formatador.indent {
|
43
|
+
Formatador.display_line "Author: #{last_commit.author}"
|
44
|
+
Formatador.display_line "Date: #{last_commit.committed_date}"
|
45
|
+
Formatador.display_line "SHA: #{last_commit.sha}"
|
46
|
+
Formatador.display_line "#{last_commit.message}"
|
47
|
+
}
|
41
48
|
end
|
42
49
|
|
43
|
-
Helper.boolean '
|
50
|
+
Helper.boolean 'Do you want the branch deleted?' do
|
44
51
|
branch.delete(local_branches)
|
45
52
|
end
|
46
53
|
else
|
47
|
-
|
54
|
+
if options[:skip_unmerged]
|
55
|
+
Helper.info "Branch not merged. Skipped"
|
56
|
+
next
|
57
|
+
end
|
58
|
+
|
59
|
+
Formatador.display_line "Branch not merged. Commits on branch:"
|
60
|
+
|
61
|
+
Formatador.indent {
|
62
|
+
Formatador.display_lines commits.split("\n")
|
63
|
+
}
|
64
|
+
|
65
|
+
Helper.boolean "Do you want to see a diff?" do
|
48
66
|
Tempfile.open('diff') do |tempfile|
|
49
67
|
tempfile << diff
|
50
68
|
tempfile.flush
|
@@ -52,7 +70,7 @@ class GitCleanup
|
|
52
70
|
if ENV["GIT_EDITOR"]
|
53
71
|
`#{ENV["GIT_EDITOR"]} #{tempfile.path}`
|
54
72
|
else
|
55
|
-
|
73
|
+
Formatador.display_line diff
|
56
74
|
end
|
57
75
|
end
|
58
76
|
Helper.boolean "Do you want the branch deleted?" do
|
@@ -66,7 +84,7 @@ class GitCleanup
|
|
66
84
|
# Prunes branches that have already been removed on origin
|
67
85
|
def self.prune(repo)
|
68
86
|
list = repo.git.native(:remote, {}, 'prune', '-n', "origin")
|
69
|
-
if list.
|
87
|
+
if !list.empty?
|
70
88
|
Helper.boolean "Planning to prune the following. Ok?\n#{list}" do
|
71
89
|
repo.git.native(:remote, {}, 'prune', "origin")
|
72
90
|
end
|
@@ -76,3 +94,4 @@ end
|
|
76
94
|
|
77
95
|
require 'git-cleanup/branch'
|
78
96
|
require 'git-cleanup/helper'
|
97
|
+
require 'git-cleanup/version'
|
data/lib/git-cleanup/branch.rb
CHANGED
@@ -11,7 +11,7 @@ class GitCleanup
|
|
11
11
|
def initialize(repo, ref)
|
12
12
|
@repo = repo
|
13
13
|
@ref = ref
|
14
|
-
@remote, @name = ref.name.split('/')
|
14
|
+
@remote, @name = ref.name.split('/', 2)
|
15
15
|
end
|
16
16
|
|
17
17
|
def to_s
|
@@ -31,15 +31,15 @@ class GitCleanup
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def delete(local_branches = nil)
|
34
|
-
|
34
|
+
Formatador.display('[red]Deleting...[/]')
|
35
35
|
@repo.git.native(:push, {}, @remote, ":#{@name}")
|
36
|
-
|
36
|
+
Formatador.display_line('[red]done[/]')
|
37
37
|
|
38
38
|
if local_branches && local_branches.include?(name)
|
39
39
|
Helper.boolean "There is also a local branch called #{name}. Would you like to delete that too?" do
|
40
|
-
|
41
|
-
|
42
|
-
|
40
|
+
Formatador.display('[red]Deleting...[/]')
|
41
|
+
@repo.git.native(:branch, {}, '-d', name)
|
42
|
+
Formatador.display_line('[red]done[/]')
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
data/lib/git-cleanup/helper.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
class GitCleanup
|
2
2
|
module Helper
|
3
3
|
def self.boolean(question, &block)
|
4
|
-
|
4
|
+
Formatador.display_line ""
|
5
|
+
Formatador.display("[bold][blue][QUESTION][/] #{question} (y/n)[/] ")
|
5
6
|
answer = STDIN.gets.chomp
|
6
7
|
if answer == 'y'
|
7
8
|
yield
|
@@ -11,5 +12,9 @@ class GitCleanup
|
|
11
12
|
boolean(question, &block)
|
12
13
|
end
|
13
14
|
end
|
15
|
+
|
16
|
+
def self.info(info)
|
17
|
+
Formatador.display_line "[bold][yellow][INFO][/] #{info}[/]"
|
18
|
+
end
|
14
19
|
end
|
15
20
|
end
|
metadata
CHANGED
@@ -1,39 +1,47 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: git-cleanup
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.1.3
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Martyn Loughran
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
dependencies:
|
16
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-04-12 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
17
15
|
name: grit
|
18
|
-
|
19
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70356485463960 !ruby/object:Gem::Requirement
|
20
17
|
none: false
|
21
|
-
requirements:
|
18
|
+
requirements:
|
22
19
|
- - ~>
|
23
|
-
- !ruby/object:Gem::Version
|
20
|
+
- !ruby/object:Gem::Version
|
24
21
|
version: 2.2.0
|
25
22
|
type: :runtime
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70356485463960
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: formatador
|
27
|
+
requirement: &70356485462640 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.2.1
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70356485462640
|
36
|
+
description: Command line tool for interactively cleaning up old git branches (remotely
|
37
|
+
and locally)
|
38
|
+
email:
|
29
39
|
- me@mloughran.com
|
30
|
-
executables:
|
40
|
+
executables:
|
31
41
|
- git-cleanup
|
32
42
|
extensions: []
|
33
|
-
|
34
43
|
extra_rdoc_files: []
|
35
|
-
|
36
|
-
files:
|
44
|
+
files:
|
37
45
|
- .document
|
38
46
|
- .gitignore
|
39
47
|
- Gemfile
|
@@ -46,33 +54,31 @@ files:
|
|
46
54
|
- lib/git-cleanup.rb
|
47
55
|
- lib/git-cleanup/branch.rb
|
48
56
|
- lib/git-cleanup/helper.rb
|
49
|
-
|
57
|
+
- lib/git-cleanup/version.rb
|
50
58
|
homepage: http://github.com/mloughran/git-cleanup
|
51
59
|
licenses: []
|
52
|
-
|
53
60
|
post_install_message:
|
54
61
|
rdoc_options: []
|
55
|
-
|
56
|
-
require_paths:
|
62
|
+
require_paths:
|
57
63
|
- lib
|
58
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
59
65
|
none: false
|
60
|
-
requirements:
|
61
|
-
- -
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version:
|
64
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
71
|
none: false
|
66
|
-
requirements:
|
67
|
-
- -
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version:
|
72
|
+
requirements:
|
73
|
+
- - ! '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
70
76
|
requirements: []
|
71
|
-
|
72
77
|
rubyforge_project:
|
73
|
-
rubygems_version: 1.
|
78
|
+
rubygems_version: 1.8.10
|
74
79
|
signing_key:
|
75
80
|
specification_version: 3
|
76
|
-
summary: Command line tool for interactively cleaning up old git branches (remotely
|
81
|
+
summary: Command line tool for interactively cleaning up old git branches (remotely
|
82
|
+
and locally)
|
77
83
|
test_files: []
|
78
|
-
|
84
|
+
has_rdoc:
|