git-pulls 0.4.11 → 0.4.12

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.
Files changed (3) hide show
  1. checksums.yaml +6 -14
  2. data/lib/git-pulls.rb +94 -72
  3. metadata +39 -11
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MjMwOTk4MWI4MTFlNzc5NzIwMDgxM2QxMzM1MGJjYzYwYmNhMjFhMA==
5
- data.tar.gz: !binary |-
6
- ZmFmNWE4YmMwZDZlMDZjNzFlZjUzNzRhOTMyZjQ1YTcwZDQ2MDc3Yg==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- NWI0NmNmYzJhMzI3ZTAxNzI3ZjBlN2U2ZDRmNzYxNjgzZGE5MGZjNjRlNTIy
10
- MTgyMzYxNTNiOTAwOTFlNTBjZTI3ZWE0Mjg2YWM5YzIxMjQzZTZjYzBmNTZk
11
- MmM1ODA4N2MxOTQxNDhhY2MzMWMxMTY4ZDJkYjZiNTRkZWY3OWU=
12
- data.tar.gz: !binary |-
13
- ZjQxNmM4YjM2MmEwN2Y5OGYxNTNlZGFlMDgwZWU0MDg1NTZhOTRlOTQzZWRm
14
- MWNkODI2NTA1ZWE5ODk1NzExOWY1ZDcwODQ2MTk3ZWExM2Y2OWI0ZTZjZGI4
15
- MTRhMzJjNTBkN2E5NTdmNWM3NWE5ZTc3ZGIxMDUyZGY3ZmExMDM=
2
+ SHA1:
3
+ metadata.gz: f35d8b240687ef48fd376f27c17aa41c29c72b41
4
+ data.tar.gz: 3f53f4db3eed289af7aaebbf13a8c4ffd240bb2f
5
+ SHA512:
6
+ metadata.gz: 9d85547f20bd78a3cf3b2ed674296a9610cae1e0181f8e9be3ab88ff0da72821cd85b1651df1d8cd162e4659e7492e581280d773c094da7417e5c175ea55052c
7
+ data.tar.gz: 1149f22240e3e3df7954a18a4dc347dca2cd6112f314380206754e5d0d3b948c7e921c9ea01fee96fd87cb12fee8c9ff2b087d8fb08aceea2202e477dad3af66
data/lib/git-pulls.rb CHANGED
@@ -3,11 +3,13 @@ require 'json'
3
3
  require 'date'
4
4
  require 'launchy'
5
5
  require 'octokit'
6
+ require 'psych'
6
7
 
7
8
  class GitPulls
8
9
 
10
+ GIT_REMOTE = ENV['GIT_REMOTE'] || 'origin'
9
11
  GIT_PATH = lambda { return `git rev-parse --git-dir`.chomp }
10
- PULLS_CACHE_FILE = "#{GIT_PATH.call}/pulls_cache.json"
12
+ PULLS_CACHE_FILE = "#{GIT_PATH.call}/pulls_cache.yml"
11
13
 
12
14
  def initialize(args)
13
15
  @command = args.shift
@@ -63,33 +65,39 @@ Usage: git pulls update
63
65
  def merge
64
66
  num = @args.shift
65
67
  option = @args.shift
66
- if p = pull_num(num)
67
- if p['head']['repository']
68
- o = p['head']['repository']['owner']
69
- r = p['head']['repository']['name']
68
+ if pull = pull_num(num)
69
+ head = pull[:head].to_hash
70
+ user = pull[:user].to_hash
71
+
72
+ if repo = head[:repo] && head[:repo].to_hash
73
+ owner = repo[:owner].to_hash
74
+ repo_name = repo[:name]
75
+
76
+ sha = head[:sha]
77
+
78
+ message = "Merge pull request ##{num} from #{owner[:login]}/#{repo_name}\n\n---\n\n"
79
+ message += pull[:body].gsub("'", '')
80
+ cmd = ''
81
+ if option == '--log'
82
+ message += "\n\n---\n\nMerge Log:\n"
83
+ puts cmd = "git merge --no-ff --log -m '#{message}' #{sha}"
84
+ else
85
+ puts cmd = "git merge --no-ff -m '#{message}' #{sha}"
86
+ end
87
+ exec(cmd)
88
+
70
89
  else # they deleted the source repo
71
- o = p['head']['user']['login']
72
- purl = p['patch_url']
73
- puts "Sorry, #{o} deleted the source repository, git-pulls doesn't support this."
90
+ owner = head[:user].to_hash[:login]
91
+ patch_url = "#{pull[:_links].to_hash[:html].to_hash[:href]}.patch"
92
+
93
+ puts "Sorry, #{owner} deleted the source repository, git-pulls doesn't support this."
74
94
  puts "You can manually patch your repo by running:"
75
95
  puts
76
- puts " curl #{purl} | git am"
96
+ puts " curl #{patch_url} | git am"
77
97
  puts
78
98
  puts "Tell the contributor not to do this."
79
99
  return false
80
100
  end
81
- s = p['head']['sha']
82
-
83
- message = "Merge pull request ##{num} from #{o}/#{r}\n\n---\n\n"
84
- message += p['body'].gsub("'", '')
85
- cmd = ''
86
- if option == '--log'
87
- message += "\n\n---\n\nMerge Log:\n"
88
- puts cmd = "git merge --no-ff --log -m '#{message}' #{s}"
89
- else
90
- puts cmd = "git merge --no-ff -m '#{message}' #{s}"
91
- end
92
- exec(cmd)
93
101
  else
94
102
  puts "No such number"
95
103
  end
@@ -99,40 +107,47 @@ Usage: git pulls update
99
107
  num = @args.shift
100
108
  optiona = @args.shift
101
109
  optionb = @args.shift
102
- if p = pull_num(num)
110
+
111
+ if pull = pull_num(num)
112
+ head = pull[:head].to_hash
113
+ repo = head[:repo].to_hash
114
+ user = pull[:user].to_hash
115
+
103
116
  comments = []
104
117
  if optiona == '--comments' || optionb == '--comments'
105
- i_comments = Octokit.issue_comments("#{@user}/#{@repo}", num)
106
- p_comments = Octokit.pull_request_comments("#{@user}/#{@repo}", num)
107
- c_comments = Octokit.commit_comments(p['head']['repo']['full_name'], p['head']['sha'])
108
- comments = (i_comments | p_comments | c_comments).sort_by {|i| i['created_at']}
118
+ i_comments = Octokit.issue_comments("#{@user}/#{@repo}", num).map(&:to_hash)
119
+ p_comments = Octokit.pull_request_comments("#{@user}/#{@repo}", num).map(&:to_hash)
120
+ c_comments = Octokit.commit_comments(repo[:full_name], head[:sha])
121
+ comments = (i_comments | p_comments | c_comments).sort_by {|i| i[:created_at]}
109
122
  end
110
- puts "Number : #{p['number']}"
111
- puts "Label : #{p['head']['label']}"
112
- puts "Creator : #{p['user']['login']}"
113
- puts "Created : #{p['created_at']}"
123
+ puts "Number : #{pull[:number]}"
124
+ puts "Label : #{head[:label]}"
125
+ puts "Creator : #{user[:login]}"
126
+ puts "Created : #{pull[:created_at]}"
114
127
  puts
115
- puts "Title : #{p['title']}"
128
+ puts "Title : #{pull[:title]}"
116
129
  puts
117
- puts p['body']
130
+ puts pull[:body]
118
131
  puts
119
132
  puts '------------'
120
133
  puts
121
- comments.each do |c|
122
- puts "Comment : #{c['user']['login']}"
123
- puts "Created : #{c['created_at']}"
124
- puts "File : #{c['path']}:L#{c['line'] || c['position'] || c['original_position']}" unless c['path'].nil?
134
+ comments.each do |comment|
135
+ user = comment[:user]
136
+
137
+ puts "Comment : #{user[:login]}"
138
+ puts "Created : #{comment[:created_at]}"
139
+ puts "File : #{comment[:path]}:L#{comment[:line] || comment[:position] || comment[:original_position]}" unless comment[:path].nil?
125
140
  puts
126
- puts c['body']
141
+ puts comment[:body]
127
142
  puts
128
143
  puts '------------'
129
144
  puts
130
145
  end
131
146
  if optiona == '--full' || optionb == '--full'
132
- exec "git diff --color=always HEAD...#{p['head']['sha']}"
147
+ exec "git diff --color=always HEAD...#{head[:sha]}"
133
148
  else
134
- puts "cmd: git diff HEAD...#{p['head']['sha']}"
135
- puts git("diff --stat --color=always HEAD...#{p['head']['sha']}")
149
+ puts "cmd: git diff HEAD...#{head[:sha]}"
150
+ puts git("diff --stat --color=always HEAD...#{head[:sha]}")
136
151
  end
137
152
  else
138
153
  puts "No such number"
@@ -141,8 +156,8 @@ Usage: git pulls update
141
156
 
142
157
  def browse
143
158
  num = @args.shift
144
- if p = pull_num(num)
145
- Launchy.open(p['html_url'])
159
+ if pull = pull_num(num)
160
+ Launchy.open(pull[:_links].to_hash[:html].to_hash[:href])
146
161
  else
147
162
  puts "No such number"
148
163
  end
@@ -162,21 +177,19 @@ Usage: git pulls update
162
177
  pulls = state == 'open' ? get_open_pull_info : get_closed_pull_info
163
178
  pulls.reverse! if option == '--reverse'
164
179
 
165
- count = 0
166
180
  pulls.each do |pull|
181
+ pull = pull.to_hash
182
+ head = pull[:head].to_hash
183
+
167
184
  line = []
168
- line << l(pull['number'], 4)
169
- line << l(Date.parse(pull['created_at']).strftime("%m/%d"), 5)
170
- line << l(pull['comments'], 2)
171
- line << l(pull['title'], 35)
172
- line << l(pull['head']['label'], 50)
173
- sha = pull['head']['sha']
174
- if not_merged?(sha)
175
- puts line.join ' '
176
- count += 1
177
- end
185
+ line << l(pull[:number], 4)
186
+ line << l(Date.parse(pull[:created_at].to_s).strftime("%m/%d"), 5)
187
+ line << l(pull[:title], 35)
188
+ line << l(head[:label], 50)
189
+
190
+ puts line.join ' '
178
191
  end
179
- if count == 0
192
+ if pulls.count == 0
180
193
  puts ' -- no ' + state + ' pull requests --'
181
194
  end
182
195
  end
@@ -185,9 +198,11 @@ Usage: git pulls update
185
198
  puts "Checking out all open pull requests for #{@user}/#{@repo}"
186
199
  pulls = get_open_pull_info
187
200
  pulls.each do |pull|
188
- branch_ref = pull['head']['ref']
201
+ head = pull[:head].to_hash
202
+ branch_ref = head[:ref]
203
+
189
204
  puts "> #{branch_ref} into pull-#{branch_ref}"
190
- git("branch --track #{@args.join(' ')} pull-#{branch_ref} origin/#{branch_ref}")
205
+ git("branch --track #{@args.join(' ')} pull-#{branch_ref} #{GIT_REMOTE}/#{branch_ref}")
191
206
  end
192
207
  end
193
208
 
@@ -200,15 +215,22 @@ Usage: git pulls update
200
215
 
201
216
  def fetch_stale_forks
202
217
  puts "Checking for forks in need of fetching"
218
+
203
219
  pulls = get_open_pull_info | get_closed_pull_info
204
220
  repos = {}
205
221
  pulls.each do |pull|
206
- next if pull['head']['repository'].nil? # Fork has been deleted
207
- o = pull['head']['repository']['owner']
208
- r = pull['head']['repository']['name']
209
- s = pull['head']['sha']
210
- if !has_sha(s)
211
- repo = "#{o}/#{r}"
222
+ head = pull[:head].to_hash
223
+
224
+ unless repo = head[:repo] && head[:repo].to_hash
225
+ next # Fork has been deleted
226
+ end
227
+
228
+ owner = repo[:owner].to_hash
229
+ repo_name = repo[:name]
230
+ sha = head[:sha]
231
+
232
+ unless has_sha?(sha)
233
+ repo = "#{owner[:login]}/#{repo_name}"
212
234
  repos[repo] = true
213
235
  end
214
236
  end
@@ -223,7 +245,7 @@ Usage: git pulls update
223
245
  end
224
246
  end
225
247
 
226
- def has_sha(sha)
248
+ def has_sha?(sha)
227
249
  git("show #{sha} 2>&1")
228
250
  $?.exitstatus == 0
229
251
  end
@@ -254,7 +276,7 @@ Usage: git pulls update
254
276
 
255
277
  config.login = github_login if github_login and not github_login.empty?
256
278
  config.web_endpoint = github_endpoint
257
- config.oauth_token = github_token if github_token and not github_token.empty?
279
+ config.access_token = github_token if github_token and not github_token.empty?
258
280
  config.proxy = github_proxy if github_proxy and not github_proxy.empty?
259
281
  config.api_endpoint = github_api_endpoint if (github_api_endpoint and \
260
282
  not github_api_endpoint.empty?)
@@ -301,32 +323,32 @@ Usage: git pulls update
301
323
  end
302
324
 
303
325
  def get_closed_pull_info
304
- get_data(PULLS_CACHE_FILE)['closed']
326
+ get_data(PULLS_CACHE_FILE)['closed'].map(&:to_hash)
305
327
  end
306
328
 
307
329
  def get_open_pull_info
308
- get_data(PULLS_CACHE_FILE)['open']
330
+ get_data(PULLS_CACHE_FILE)['open'].map(&:to_hash)
309
331
  end
310
332
 
311
333
  def get_data(file)
312
- data = JSON.parse(File.read(file))
334
+ ::Psych.load_file(file)
313
335
  end
314
336
 
315
337
  def cache_pull_info
316
- response_o = Octokit.pull_requests("#{@user}/#{@repo}")
338
+ response_o = Octokit.pull_requests("#{@user}/#{@repo}", 'open')
317
339
  response_c = Octokit.pull_requests("#{@user}/#{@repo}", 'closed')
318
340
  save_data({'open' => response_o, 'closed' => response_c}, PULLS_CACHE_FILE)
319
341
  end
320
342
 
321
343
  def save_data(data, file)
322
344
  File.open(file, "w+") do |f|
323
- f.puts data.to_json
345
+ f.puts Psych.dump(data)
324
346
  end
325
347
  end
326
348
 
327
349
  def pull_num(num)
328
- pull = get_open_pull_info.select { |p| p['number'].to_s == num.to_s }.first
329
- pull ||= get_closed_pull_info.select { |p| p['number'].to_s == num.to_s }.first
350
+ pull = get_open_pull_info.select { |p| p[:number].to_s == num.to_s }.first
351
+ pull ||= get_closed_pull_info.select { |p| p[:number].to_s == num.to_s }.first
330
352
  pull
331
353
  end
332
354
 
@@ -370,7 +392,7 @@ Usage: git pulls update
370
392
  k, v = line.split('=')
371
393
  c[k] = v
372
394
  end
373
- u = c['remote.origin.url']
395
+ u = c["remote.#{GIT_REMOTE}.url"]
374
396
 
375
397
  user, proj = github_user_and_proj(u)
376
398
  if !(user and proj)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-pulls
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.11
4
+ version: 0.4.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrien Giboire
@@ -9,48 +9,76 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-26 00:00:00.000000000 Z
12
+ date: 2013-11-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ! '>='
18
+ - - '>='
19
19
  - !ruby/object:Gem::Version
20
20
  version: '0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ! '>='
25
+ - - '>='
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: launchy
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - ! '>='
32
+ - - '>='
33
33
  - !ruby/object:Gem::Version
34
34
  version: '0'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ! '>='
39
+ - - '>='
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: octokit
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ! '>='
46
+ - - ~>
47
47
  - !ruby/object:Gem::Version
48
- version: '0'
48
+ version: 2.6.1
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ! '>='
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: 2.6.1
56
+ - !ruby/object:Gem::Dependency
57
+ name: minitest
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rake
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>='
54
82
  - !ruby/object:Gem::Version
55
83
  version: '0'
56
84
  description: git-pulls facilitates github pull requests.
@@ -72,12 +100,12 @@ require_paths:
72
100
  - lib
73
101
  required_ruby_version: !ruby/object:Gem::Requirement
74
102
  requirements:
75
- - - ! '>='
103
+ - - '>='
76
104
  - !ruby/object:Gem::Version
77
105
  version: '0'
78
106
  required_rubygems_version: !ruby/object:Gem::Requirement
79
107
  requirements:
80
- - - ! '>='
108
+ - - '>='
81
109
  - !ruby/object:Gem::Version
82
110
  version: '0'
83
111
  requirements: []