ghi 0.9.0.20120731 → 0.9.0.20121114

Sign up to get free protection for your applications and to get access to all the features.
data/lib/ghi.rb CHANGED
@@ -105,9 +105,9 @@ EOF
105
105
  exit 1
106
106
  end
107
107
 
108
- def config key
109
- var = key.gsub('core', 'git').gsub('.', '_').upcase
110
- value = ENV[var] || `git config #{key}`.chomp
108
+ def config key, upcase = true
109
+ var = key.gsub('core', 'git').gsub '.', '_'
110
+ value = ENV[upcase ? var.upcase : var] || `git config #{key}`.chomp
111
111
  value unless value.empty?
112
112
  end
113
113
 
@@ -54,6 +54,8 @@ module GHI
54
54
  :patch => Net::HTTP::Patch,
55
55
  :delete => Net::HTTP::Delete
56
56
  }
57
+ HOST = 'api.github.com'
58
+ PORT = 443
57
59
 
58
60
  attr_reader :username, :password
59
61
  def initialize username = nil, password = nil
@@ -102,7 +104,15 @@ module GHI
102
104
  end
103
105
  req.basic_auth username, password if username && password
104
106
 
105
- http = Net::HTTP.new 'api.github.com', 443
107
+ proxy = GHI.config 'https.proxy', false
108
+ proxy ||= GHI.config 'http.proxy', false
109
+ if proxy
110
+ proxy = URI.parse proxy
111
+ http = Net::HTTP::Proxy(proxy.host, proxy.port).new HOST, PORT
112
+ else
113
+ http = Net::HTTP.new HOST, PORT
114
+ end
115
+
106
116
  http.use_ssl = true
107
117
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE # FIXME 1.8.7
108
118
 
@@ -36,6 +36,7 @@ EOF
36
36
  assigns[:assignee] = args.pop || Authorization.username
37
37
  end
38
38
  if assigns.key? :assignee
39
+ assigns[:assignee].sub! /^@/, ''
39
40
  assigns[:args].concat(
40
41
  assigns[:assignee] ? %W(-u #{assigns[:assignee]}) : %w(--no-assign)
41
42
  )
@@ -22,7 +22,7 @@ EOF
22
22
  global = true
23
23
  options.parse! args.empty? ? %w(-h) : args
24
24
 
25
- if self.action == 'auth'
25
+ if action == 'auth'
26
26
  assigns[:password] = Authorization.password || get_password
27
27
  Authorization.authorize!(
28
28
  assigns[:username], assigns[:password], assigns[:local]
@@ -6,6 +6,7 @@ module GHI
6
6
  attr_accessor :web
7
7
  attr_accessor :reverse
8
8
  attr_accessor :quiet
9
+ attr_accessor :exclude_pull_requests
9
10
 
10
11
  def options
11
12
  OptionParser.new do |opts|
@@ -35,6 +36,7 @@ module GHI
35
36
  opts.on '--reverse', 'reverse (ascending) sort order' do
36
37
  self.reverse = !reverse
37
38
  end
39
+ opts.on('-p', '--no-pulls','exclude pull requests') { self.exclude_pull_requests = true }
38
40
  opts.on(
39
41
  '--since <date>', 'issues more recent than',
40
42
  "e.g., '2011-04-30'"
@@ -68,7 +70,7 @@ module GHI
68
70
  opts.on(
69
71
  '-u', '--[no-]assignee [<user>]', 'assigned to specified user'
70
72
  ) do |assignee|
71
- assignee = assignee.sub /^@/, ''
73
+ assignee = assignee.sub /^@/, '' if assignee
72
74
  assigns[:assignee] = any_or_none_or assignee
73
75
  end
74
76
  opts.on '--mine', 'assigned to you' do
@@ -113,6 +115,9 @@ module GHI
113
115
  print "\r#{CURSOR[:up][1]}" if header && paginate?
114
116
  page header do
115
117
  issues = res.body
118
+ if exclude_pull_requests
119
+ issues = issues.reject {|i| i["pull_request"].any? {|k,v| !v.nil? } }
120
+ end
116
121
  if verbose
117
122
  puts issues.map { |i| format_issue i }
118
123
  else
@@ -1,12 +1,13 @@
1
1
  module GHI
2
2
  module Commands
3
3
  class Show < Command
4
- attr_accessor :web
4
+ attr_accessor :patch, :web
5
5
 
6
6
  def options
7
7
  OptionParser.new do |opts|
8
8
  opts.banner = 'usage: ghi show <issueno>'
9
9
  opts.separator ''
10
+ opts.on('-p', '--patch') { self.patch = true }
10
11
  opts.on('-w', '--web') { self.web = true }
11
12
  end
12
13
  end
@@ -15,18 +16,27 @@ module GHI
15
16
  require_issue
16
17
  require_repo
17
18
  options.parse! args
19
+ patch_path = "pull/#{issue}.patch" if patch # URI also in API...
18
20
  if web
19
- Web.new(repo).open "issues/#{issue}"
21
+ Web.new(repo).open patch_path || "issues/#{issue}"
20
22
  else
21
- i = throb { api.get "/repos/#{repo}/issues/#{issue}" }.body
22
- page do
23
- puts format_issue(i)
24
- n = i['comments']
25
- if n > 0
26
- puts "#{n} comment#{'s' unless n == 1}:\n\n"
27
- Comment.execute %W(-l #{issue} -- #{repo})
23
+ if patch_path
24
+ i = throb { Web.new(repo).curl patch_path }
25
+ page do
26
+ puts i
27
+ break
28
+ end
29
+ else
30
+ i = throb { api.get "/repos/#{repo}/issues/#{issue}" }.body
31
+ page do
32
+ puts format_issue(i)
33
+ n = i['comments']
34
+ if n > 0
35
+ puts "#{n} comment#{'s' unless n == 1}:\n\n"
36
+ Comment.execute %W(-l #{issue} -- #{repo})
37
+ end
38
+ break
28
39
  end
29
- break
30
40
  end
31
41
  end
32
42
  end
@@ -4,7 +4,7 @@ module GHI
4
4
  MAJOR = 0
5
5
  MINOR = 9
6
6
  PATCH = 0
7
- PRE = 20120731
7
+ PRE = 20121114
8
8
 
9
9
  VERSION = [MAJOR, MINOR, PATCH, PRE].compact.join '.'
10
10
 
@@ -31,11 +31,11 @@ module GHI
31
31
 
32
32
  def puts *strings
33
33
  strings = strings.flatten.map { |s|
34
- s.gsub(/@([^@\s]+)/) {
35
- if $1 == Authorization.username
36
- bright { fg(:yellow) { "@#$1" } }
34
+ s.gsub(/(^| )*@([^@\s]+)/) {
35
+ if $2 == Authorization.username
36
+ bright { fg(:yellow) { "#$1@#$2" } }
37
37
  else
38
- bright { "@#$1" }
38
+ bright { "#$1@#$2" }
39
39
  end
40
40
  }
41
41
  }
@@ -1,3 +1,4 @@
1
+ require 'open-uri'
1
2
  require 'uri'
2
3
 
3
4
  module GHI
@@ -10,17 +11,21 @@ module GHI
10
11
  end
11
12
 
12
13
  def open path = '', params = {}
13
- unless params.empty?
14
- q = params.map { |k, v| "#{CGI.escape k.to_s}=#{CGI.escape v.to_s}" }
15
- path += "?#{q.join '&'}"
16
- end
17
- system "open '#{uri + path}'"
14
+ system "open '#{uri_for path, params}'"
15
+ end
16
+
17
+ def curl path = '', params = {}
18
+ uri_for(path, params).open.read
18
19
  end
19
20
 
20
21
  private
21
22
 
22
- def uri
23
- URI(BASE_URI) + "#{base}/"
23
+ def uri_for path, params
24
+ unless params.empty?
25
+ q = params.map { |k, v| "#{CGI.escape k.to_s}=#{CGI.escape v.to_s}" }
26
+ path += "?#{q.join '&'}"
27
+ end
28
+ URI(BASE_URI) + "#{base}/" + path
24
29
  end
25
30
  end
26
31
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ghi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0.20120731
4
+ version: 0.9.0.20121114
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-31 00:00:00.000000000 Z
12
+ date: 2012-11-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake