git-dd 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 18a12242e43da137f3b7f46d5fbb61da544f9bd3
4
- data.tar.gz: d0e18114fc7615f5b0ec9cd9165f5d583444f510
3
+ metadata.gz: 5115a3ac2184af4b5c7b5da6918b945649bc968c
4
+ data.tar.gz: d38a39047fbd1d13eda7692e420b6a760201f137
5
5
  SHA512:
6
- metadata.gz: 80db41e5854589d321d3a52bb7891d1bf8fcb6a0d9826767c61a164e12724613f43d74990b9060d3881f1affaae275830da6da05df38a26342b9e4caf8c47f90
7
- data.tar.gz: be30606ceaf468593cc221eb22c57a52646a7d8a0b05225e02d5c2e283c092d47a8fdabbd3a4cbfc0075b14baaa462f284669bce8716233cefbe0d0621928d59
6
+ metadata.gz: f3043e7132eb2d38aec46a3fede7905365ec33b45e81bc79ced688061ea8a3bf2f285fbeb0a121bd32abedb7dd88d8b5623255e7d6df051bfa6a7bfff7c41edb
7
+ data.tar.gz: 6966dd36a6793924dbd97ec28c052f20f3a35aa8c0747c1656ebb8bca706987e7941bb80e3f7f50aff7676dafabc513f03ff53fb3f1742fc31eb96aebbfac695
data/bin/git-dd CHANGED
@@ -1,5 +1,25 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'git-dd'
4
+ require 'git-dd/version'
5
+ require 'slop'
4
6
 
5
- GitDD.new.run
7
+ opts = Slop::Options.new
8
+ opts.banner = "usage: git dd [options] ..."
9
+ opts.null '[no options]', 'select branches to delete'
10
+ opts.bool '-m', '--merged', 'delete branches have been merged into current branch'
11
+ opts.bool '-v', '--version', 'print the version'
12
+ opts.bool '-h', '--help', 'print help'
13
+
14
+ parser = Slop::Parser.new(opts)
15
+ result = parser.parse(ARGV).to_hash
16
+
17
+ if result[:version]
18
+ puts GitDD::VERSION
19
+ elsif result[:merged]
20
+ GitDD.new.delete_merged_branches
21
+ elsif result[:help]
22
+ puts opts
23
+ else
24
+ GitDD.new.select_branches_to_delete
25
+ end
data/lib/git-dd.rb CHANGED
@@ -2,76 +2,57 @@
2
2
 
3
3
  require 'tty-prompt'
4
4
  require 'rainbow/ext/string'
5
- require 'const.rb'
5
+ require_relative './git-dd/const.rb'
6
6
 
7
7
  class GitDD
8
8
  attr_accessor :prompt
9
9
  MERGED = "merged"
10
10
  UNMERGE = "unmerge"
11
+ DETACHED = "* (HEAD detached at"
11
12
 
12
- def run(test_prompt = nil)
13
- branch_names = `git branch`
14
- return if $?.exitstatus != 0
13
+ def initialize(test_prompt = nil)
14
+ if test_prompt
15
+ @prompt = test_prompt
16
+ else
17
+ @prompt = TTY::Prompt.new(interrupt: :exit)
18
+ end
15
19
 
16
- branch_names = branch_names.split("\n")
20
+ @prompt.on(:keypress) { |event| exit 1 if event.value == 'q' }
21
+ end
17
22
 
18
- branches_vv =
19
- begin
20
- str = `git branch -vv`
21
- str.split("\n")
22
- rescue
23
- str = `git branch`
24
- str.split("\n")
25
- end
23
+ def delete_merged_branches()
24
+ return print(NO_MERGED_BRANCH) if merged_branches.size == 0
26
25
 
27
- return if branch_names.size != branches_vv.size
26
+ puts "Branches have been merged into: #{current_branch.color(:green)}"
28
27
 
29
- branches_for_select = {}
30
- branch_names.each_with_index { |b, i| branches_for_select[b] = branches_vv[i] }
28
+ merged_branches.each { |b| puts " "*4 + branches_for_select[b] }
31
29
 
32
- if branches_for_select.size == 1
33
- return print(ONLY_ONE_BRANCH)
34
- end
30
+ ensure_delete = !prompt.no?('Are you sure?')
35
31
 
36
- branches_for_select = branches_for_select.select { |k, v| k != current_branch_with_mark && !k.include?("* (HEAD detached at") }
32
+ merged_branches.each { |b| delete(b) } if ensure_delete
37
33
 
38
- puts "Current branch is: #{current_branch.color(:green)}"
34
+ return merged_branches
35
+ end
39
36
 
40
- if test_prompt
41
- prompt = test_prompt
42
- else
43
- prompt = TTY::Prompt.new(interrupt: :exit)
44
- end
45
- prompt.on(:keypress) { |event| return if event.value == 'q' }
37
+ def select_branches_to_delete()
38
+ return if branches.size != branches_vv.size
39
+ return print(ONLY_ONE_BRANCH) if branches_for_select.size == 0
46
40
 
47
- branches_for_select.each do |k, v|
48
- branches_for_select[k] =
49
- if merged?(k)
50
- MERGED.color(:green) + " " + v
51
- else
52
- UNMERGE.color(:red) + v
53
- end
54
- end
41
+ puts "Current branch is: #{current_branch.color(:green)}"
55
42
 
56
- branches_to_delete = prompt.multi_select("Choose branches to delete:", per_page: 20, help: '',echo: false) do |menu|
43
+ prompt_options = { per_page: 20, help: '', echo: false }
44
+ prompt_help = "Choose branches to delete:"
45
+ branches_to_delete = @prompt.multi_select(prompt_help, prompt_options) do |menu|
57
46
  branches_for_select.each { |k, v| menu.choice(v, k) }
58
47
  end
59
48
 
60
- if branches_to_delete.size == 0
61
- return print(NO_BRANCH_SELECTED)
62
- end
49
+ return print(NO_BRANCH_SELECTED) if branches_to_delete.size == 0
63
50
 
64
- branches_to_delete.each do |b|
65
- puts " "*4 + branches_for_select[b]
66
- end
51
+ branches_to_delete.each { |b| puts " "*4 + branches_for_select[b] }
67
52
 
68
53
  ensure_delete = !prompt.no?('Are you sure?')
69
54
 
70
- if ensure_delete
71
- branches_to_delete.each do |b|
72
- puts `git branch -D #{b}`.chomp.color(:yellow)
73
- end
74
- end
55
+ branches_to_delete.each { |b| delete(b) } if ensure_delete
75
56
 
76
57
  return branches_to_delete
77
58
  end
@@ -86,7 +67,7 @@ class GitDD
86
67
  @current_branch ||= `git rev-parse --abbrev-ref HEAD`.chomp
87
68
  end
88
69
 
89
- def merged_branch_names
70
+ def merged_branches
90
71
  return @merged_branches if @merged_branches
91
72
 
92
73
  @merged_branches = `git branch --merged`
@@ -95,12 +76,53 @@ class GitDD
95
76
  @merged_branches = @merged_branches.select { |b| b != current_branch_with_mark }
96
77
  end
97
78
 
98
- def merged?(branch_name)
99
- merged_branch_names.include? branch_name
79
+ def branches
80
+ return @branches if @branches
81
+
82
+ @branches = `git branch`
83
+ @branches = @branches.split("\n")
84
+ end
85
+
86
+ def branches_vv
87
+ @branches_vv ||=
88
+ begin
89
+ str = `git branch -vv`
90
+ str.split("\n")
91
+ rescue
92
+ str = `git branch`
93
+ str.split("\n")
94
+ end
95
+ end
96
+
97
+ def branches_for_select
98
+ return @branches_for_select if @branches_for_select
99
+
100
+ @branches_for_select = {}
101
+ branches.each_with_index { |b, i| @branches_for_select[b] = branches_vv[i] }
102
+
103
+ @branches_for_select = @branches_for_select.select \
104
+ { |k, v| k != current_branch_with_mark && !k.include?(DETACHED) }
105
+
106
+ @branches_for_select.each do |k, v|
107
+ @branches_for_select[k] =
108
+ if merged?(k)
109
+ MERGED.color(:green) + " " + v
110
+ else
111
+ UNMERGE.color(:red) + v
112
+ end
113
+ end
114
+ end
115
+
116
+ def merged?(branch)
117
+ merged_branches.include? branch
100
118
  end
101
119
 
102
120
  def print(return_message)
103
121
  puts return_message
104
122
  return_message
105
123
  end
124
+
125
+ def delete(branch)
126
+ puts `git branch -D #{branch}`.chomp.color(:yellow)
127
+ end
106
128
  end
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+
3
+ NO_BRANCH_SELECTED = "No branch selected"
4
+ ONLY_ONE_BRANCH = "You only have one branch"
5
+ NO_MERGED_BRANCH = "No merged branch"
@@ -0,0 +1,3 @@
1
+ class GitDD
2
+ VERSION = "0.4.0".freeze
3
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-dd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Weiqing Chu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-22 00:00:00.000000000 Z
11
+ date: 2017-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tty-prompt
@@ -28,16 +28,30 @@ dependencies:
28
28
  name: rainbow
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '2.2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '2.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: slop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '4.5'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '4.5'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rspec
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -56,14 +70,14 @@ dependencies:
56
70
  name: rake
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - ">="
73
+ - - "~>"
60
74
  - !ruby/object:Gem::Version
61
75
  version: '0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - ">="
80
+ - - "~>"
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
83
  description:
@@ -74,8 +88,9 @@ extensions: []
74
88
  extra_rdoc_files: []
75
89
  files:
76
90
  - bin/git-dd
77
- - lib/const.rb
78
91
  - lib/git-dd.rb
92
+ - lib/git-dd/const.rb
93
+ - lib/git-dd/version.rb
79
94
  homepage: https://github.com/Sanster/git-dd
80
95
  licenses:
81
96
  - MIT
data/lib/const.rb DELETED
@@ -1,4 +0,0 @@
1
- # encoding: utf-8
2
-
3
- NO_BRANCH_SELECTED = "No branch selected"
4
- ONLY_ONE_BRANCH = "You only have one branch"