git-issue 0.8.5 → 0.8.6
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/lib/git_issue.rb +7 -1
- data/lib/git_issue/base.rb +42 -0
- data/lib/git_issue/github.rb +1 -1
- data/lib/git_issue/redmine.rb +37 -12
- data/lib/git_issue/version.rb +1 -1
- metadata +4 -4
data/lib/git_issue.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# -*- coding: utf-8 -*-
|
3
3
|
|
4
|
-
|
4
|
+
if RUBY_VERSION < '1.9.0'
|
5
|
+
$KCODE = "UTF8"
|
6
|
+
else
|
7
|
+
Encoding.default_external = Encoding.find('UTF-8')
|
8
|
+
end
|
5
9
|
|
6
10
|
require 'pp'
|
7
11
|
require 'rubygems'
|
@@ -18,6 +22,8 @@ require 'active_support/all'
|
|
18
22
|
require 'shellwords'
|
19
23
|
require 'term/ansicolor'
|
20
24
|
|
25
|
+
Term::ANSIColor::coloring = STDOUT.isatty && RUBY_PLATFORM.downcase !~ /mswin(?!ce)|mingw|bccwin|cygwin/
|
26
|
+
|
21
27
|
module GitIssue
|
22
28
|
class Command
|
23
29
|
attr_reader :name, :short_name, :description
|
data/lib/git_issue/base.rb
CHANGED
@@ -77,6 +77,33 @@ class GitIssue::Base
|
|
77
77
|
system "git checkout #{cb}"
|
78
78
|
end
|
79
79
|
|
80
|
+
def cherry(option = {})
|
81
|
+
upstream = options[:upstream]
|
82
|
+
head = options[:head]
|
83
|
+
|
84
|
+
commits = %x(git cherry -v #{upstream} #{head}).split(/\n/).map{|s|
|
85
|
+
s.scan(/^([+-])\s(\w+)\s(.*)/).first
|
86
|
+
}.select{|_, _, msg| msg =~ /#[0-9]+/ }.map{|diff, sha1, msg|
|
87
|
+
msg.scan(/#([0-9]+)/).flatten.map{|ticket| [diff, sha1, msg, ticket]}
|
88
|
+
}.flatten(1)
|
89
|
+
|
90
|
+
commits.group_by{|d, _, _, n| [d, n]}.each do |k, records|
|
91
|
+
diff, ticket = k
|
92
|
+
c = case diff
|
93
|
+
when "-" then :red
|
94
|
+
when "+" then :green
|
95
|
+
end
|
96
|
+
|
97
|
+
issue = fetch_issue(ticket, options)
|
98
|
+
|
99
|
+
puts "#{apply_colors(diff, c)} #{oneline_issue(issue, options)}"
|
100
|
+
if options[:verbose]
|
101
|
+
records.each {|_, sha1, msg| puts " #{sha1} #{msg}" }
|
102
|
+
puts ""
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
80
107
|
def commands
|
81
108
|
[
|
82
109
|
GitIssue::Command.new(:show, :s, 'show given issue summary. if given no id, geuss id from current branch name.'),
|
@@ -86,6 +113,7 @@ class GitIssue::Base
|
|
86
113
|
GitIssue::Command.new(:add, :a, 'create issue.'),
|
87
114
|
GitIssue::Command.new(:update, :u, 'update issue properties. if given no id, geuss id from current branch name.'),
|
88
115
|
GitIssue::Command.new(:branch, :b, "checout to branch using specified issue id. if branch dose'nt exisits, create it. (ex ticket/id/<issue_id>)"),
|
116
|
+
GitIssue::Command.new(:cherry, :chr, 'find issue not merged upstream.'),
|
89
117
|
|
90
118
|
GitIssue::Command.new(:publish,:pub, "push branch to remote repository and set upstream "),
|
91
119
|
GitIssue::Command.new(:rebase, :rb, "rebase branch onto specific newbase"),
|
@@ -252,6 +280,9 @@ class GitIssue::Base
|
|
252
280
|
opts.on("--remote=VALUE", 'on publish, remote repository to push branch ') {|v| @options[:remote] = v}
|
253
281
|
opts.on("--onto=VALUE", 'on rebase, start new branch with HEAD equal to "newbase" ') {|v| @options[:onto] = v}
|
254
282
|
|
283
|
+
opts.on("--upstream=VALUE", 'on cherry, upstream branch to compare against. default is tracked remote branch') {|v| @options[:upstream] = v}
|
284
|
+
opts.on("--head=VALUE", 'on cherry, working branch. defaults to HEAD') {|v| @options[:head] = v}
|
285
|
+
|
255
286
|
opts.on("--no-color", "turn off colored output"){@no_color = true }
|
256
287
|
opts.on("--debug", "debug print"){@debug= true }
|
257
288
|
}
|
@@ -269,5 +300,16 @@ class GitIssue::Base
|
|
269
300
|
def apply_colors(str, *colors)
|
270
301
|
@no_color.present? ? str : (colors.map(&method(:send)) + [str, reset]).join
|
271
302
|
end
|
303
|
+
|
304
|
+
def connection(host, port)
|
305
|
+
env = ENV['http_proxy'] || ENV['HTTP_PROXY']
|
306
|
+
if env
|
307
|
+
uri = URI(env)
|
308
|
+
proxy_host, proxy_port = uri.host, uri.port
|
309
|
+
Net::HTTP::Proxy(proxy_host, proxy_port).new(host, port)
|
310
|
+
else
|
311
|
+
Net::HTTP.new(host, port)
|
312
|
+
end
|
313
|
+
end
|
272
314
|
end
|
273
315
|
|
data/lib/git_issue/github.rb
CHANGED
@@ -267,7 +267,7 @@ class GitIssue::Github < GitIssue::Base
|
|
267
267
|
puts '-' * 80
|
268
268
|
end
|
269
269
|
|
270
|
-
https =
|
270
|
+
https = connection(uri.host, uri.port)
|
271
271
|
https.use_ssl = true
|
272
272
|
https.verify_mode = @ssl_options[:ssl_verify_mode] || OpenSSL::SSL::VERIFY_NONE
|
273
273
|
|
data/lib/git_issue/redmine.rb
CHANGED
@@ -39,13 +39,29 @@ class Redmine < GitIssue::Base
|
|
39
39
|
|
40
40
|
def list(options = {})
|
41
41
|
url = to_url('issues')
|
42
|
-
params = {"limit" => options[:max_count] || 100 }
|
42
|
+
params = {"limit" => options[:max_count] || "100" }
|
43
43
|
params.merge!("assigned_to_id" => "me") if options[:mine]
|
44
44
|
params.merge!(Hash[*(options[:query].split("&").map{|s| s.split("=") }.flatten)]) if options[:query]
|
45
45
|
|
46
|
-
|
46
|
+
param_list = Hash[*params.map{|k,v| [k,v.split(/,/)] }.flatten(1)]
|
47
|
+
keys = param_list.keys
|
48
|
+
pl,*pls = param_list.values
|
49
|
+
|
50
|
+
jsons = pl.product(*pls).map{|vs| Hash[*keys.zip(vs).flatten]}.map{|p|
|
51
|
+
fetch_json(url, p)['issues']
|
52
|
+
}.flatten
|
53
|
+
|
54
|
+
known_ids = []
|
55
|
+
issues = jsons.reject{|i|
|
56
|
+
known = known_ids.include?(i["id"])
|
57
|
+
known_ids << i['id'] unless known
|
58
|
+
known
|
59
|
+
}
|
60
|
+
|
61
|
+
# json = fetch_json(url, params)
|
47
62
|
|
48
|
-
output_issues(json['issues'])
|
63
|
+
# output_issues(json['issues'])
|
64
|
+
output_issues(issues)
|
49
65
|
end
|
50
66
|
|
51
67
|
def mine(options = {})
|
@@ -135,12 +151,15 @@ class Redmine < GitIssue::Base
|
|
135
151
|
end
|
136
152
|
|
137
153
|
def local(option = {})
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
154
|
+
branches = %x(git branch).split(/\n/).select{|b| b.scan(/(\d+)_/).present?}.map{|b| b.gsub(/^(\s+|\*\s+)/, "")}
|
155
|
+
branches.each do |b|
|
156
|
+
puts b
|
157
|
+
issues = b.scan(/(\d+)_/).map{|ticket_id| fetch_issue(ticket_id) rescue nil}.compact
|
158
|
+
issues.each do |i|
|
159
|
+
puts " #{oneline_issue(i, options)}"
|
160
|
+
end
|
161
|
+
puts ""
|
162
|
+
end
|
144
163
|
end
|
145
164
|
|
146
165
|
def project(options = {})
|
@@ -203,7 +222,7 @@ class Redmine < GitIssue::Base
|
|
203
222
|
puts '-' * 80
|
204
223
|
end
|
205
224
|
|
206
|
-
http =
|
225
|
+
http = connection(uri.host, uri.port)
|
207
226
|
if uri.scheme == 'https'
|
208
227
|
http.use_ssl = true
|
209
228
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
@@ -262,7 +281,7 @@ class Redmine < GitIssue::Base
|
|
262
281
|
end
|
263
282
|
|
264
283
|
def oneline_issue(issue, options = {})
|
265
|
-
"##{issue['id']} #{issue['subject']}"
|
284
|
+
"#{apply_fmt_colors(:id, "##{issue['id']}")} #{issue['subject']}"
|
266
285
|
end
|
267
286
|
|
268
287
|
def format_issue(issue, options)
|
@@ -471,7 +490,12 @@ class Redmine < GitIssue::Base
|
|
471
490
|
end
|
472
491
|
|
473
492
|
def output_issues(issues)
|
474
|
-
|
493
|
+
|
494
|
+
if options[:oneline]
|
495
|
+
issues.each do |i|
|
496
|
+
puts oneline_issue(i, options)
|
497
|
+
end
|
498
|
+
elsif options[:raw_id]
|
475
499
|
issues.each do |i|
|
476
500
|
puts i['id']
|
477
501
|
end
|
@@ -568,6 +592,7 @@ MSG
|
|
568
592
|
opts.on("--supperss_changesets", "-c", "do not show issue changesets"){|v| @options[:supperss_changesets] = true}
|
569
593
|
opts.on("--query=VALUE",'-q=VALUE', "filter query of listing tickets") {|v| @options[:query] = v}
|
570
594
|
|
595
|
+
opts.on("--mine", "lists issues assigned_to me"){|v| @options[:mine] = true}
|
571
596
|
opts.on("--project_id=VALUE", "use the given value to create subject"){|v| @options[:project_id] = v}
|
572
597
|
opts.on("--description=VALUE", "use the given value to create subject"){|v| @options[:description] = v}
|
573
598
|
opts.on("--subject=VALUE", "use the given value to create/update subject"){|v| @options[:subject] = v}
|
data/lib/git_issue/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git-issue
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 51
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 8
|
9
|
-
-
|
10
|
-
version: 0.8.
|
9
|
+
- 6
|
10
|
+
version: 0.8.6
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tomohito Ozaki
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-10-25 00:00:00 +09:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|