git-review 0.6.1 → 0.6.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/git-review.rb +38 -37
  2. metadata +4 -4
data/lib/git-review.rb CHANGED
@@ -11,14 +11,14 @@ class GitReview
11
11
  def help
12
12
  puts 'Usage: git review <command>'
13
13
  puts 'Manage review workflow for projects hosted on GitHub (using pull requests).'
14
- puts ''
14
+ puts
15
15
  puts 'Available commands:'
16
16
  puts ' list [--reverse] List all pending requests.'
17
17
  puts ' show <number> [--full] Show details of a single request.'
18
18
  puts ' browse <number> Open a browser window and review a specified request.'
19
19
  puts ' checkout <number> Checkout a specified request\'s changes to your local repository.'
20
- puts ' accept <number> Accept a specified request by merging it into master.'
21
- puts ' decline <number> Decline and close a specified request.'
20
+ puts ' merge <number> Accept a specified request by merging it into master.'
21
+ puts ' close <number> Close a specified request.'
22
22
  puts ' create Create a new request.'
23
23
  end
24
24
 
@@ -41,7 +41,7 @@ class GitReview
41
41
  return
42
42
  end
43
43
  puts "Pending requests for '#{source}'"
44
- puts 'ID Date Comments Title'
44
+ puts 'ID Updated Comments Title'
45
45
  puts output.compact
46
46
  end
47
47
 
@@ -55,15 +55,14 @@ class GitReview
55
55
  puts "Created : #{@pending_request['created_at']}"
56
56
  puts "Votes : #{@pending_request['votes']}"
57
57
  puts "Comments : #{@pending_request['comments']}"
58
- puts ''
58
+ puts
59
59
  puts "Title : #{@pending_request['title']}"
60
- puts "Body :"
61
- puts ''
60
+ puts 'Body :'
61
+ puts
62
62
  puts @pending_request['body']
63
- puts ''
63
+ puts
64
64
  puts '------------'
65
- puts ''
66
- puts "cmd: git diff #{option}HEAD...#{sha}"
65
+ puts
67
66
  puts git("diff --color=always #{option}HEAD...#{sha}")
68
67
  end
69
68
 
@@ -74,11 +73,17 @@ class GitReview
74
73
 
75
74
  # Checkout a specified request's changes to your local repository.
76
75
  def checkout
77
- git "co origin/#{@pending_request['head']['ref']}" if request_exists?
76
+ return unless request_exists?
77
+ puts 'Checking out changes to your local repository.'
78
+ puts 'To get back to your original state, just run:'
79
+ puts
80
+ puts ' git checkout master'
81
+ puts
82
+ git "checkout origin/#{@pending_request['head']['ref']}"
78
83
  end
79
84
 
80
85
  # Accept a specified request by merging it into master.
81
- def accept
86
+ def merge
82
87
  return unless request_exists?
83
88
  option = @args.shift
84
89
  unless @pending_request['head']['repository']
@@ -86,25 +91,28 @@ class GitReview
86
91
  user = @pending_request['head']['user']['login']
87
92
  url = @pending_request['patch_url']
88
93
  puts "Sorry, #{user} deleted the source repository, git-review doesn't support this."
89
- puts "You can manually patch your repo by running:"
94
+ puts 'You can manually patch your repo by running:'
90
95
  puts
91
96
  puts " curl #{url} | git am"
92
97
  puts
93
- puts "Tell the contributor not to do this."
98
+ puts 'Tell the contributor not to do this.'
94
99
  return false
95
100
  end
96
101
  message = "Accepting request and merging into '#{target}':\n\n"
97
102
  message += "#{@pending_request['title']}\n\n"
98
103
  message += "#{@pending_request['body']}\n\n"
99
- puts cmd = "git merge --no-ff #{option} -m '#{message}' #{@pending_request['head']['sha']}"
100
- exec(cmd)
104
+ exec_cmd = "merge --no-ff #{option} -m '#{message}' #{@pending_request['head']['sha']}"
105
+ puts
106
+ puts " git #{exec_cmd}"
107
+ puts
108
+ git(exec_cmd)
101
109
  end
102
110
 
103
- # Decline and close a specified request.
104
- def decline
111
+ # Close a specified request.
112
+ def close
105
113
  return unless request_exists?
106
114
  Octokit.post("issues/close/#{source_repo}/#{@pending_request['number']}")
107
- puts "Successfully declined request." unless request_exists?(@pending_request['number'])
115
+ puts 'Successfully closed request.' unless request_exists?(@pending_request['number'])
108
116
  end
109
117
 
110
118
  # Create a new request.
@@ -115,11 +123,11 @@ class GitReview
115
123
  last_request_id = @pending_requests.collect{|req| req['number'] }.sort.last.to_i
116
124
  title = "[Review] Request from '#{github_login}' @ '#{source}'"
117
125
  # TODO: Insert commit messages (that are not yet in master) into body (since this will be displayed inside the mail that is sent out).
118
- body = "You are requested to review the following changes:"
126
+ body = 'Please review the following changes:'
119
127
  # Create the actual pull request.
120
128
  Octokit.create_pull_request(target_repo, target_branch, source_branch, title, body)
121
129
  # Switch back to target_branch and check for success.
122
- git "co #{target_branch}"
130
+ git "commit #{target_branch}"
123
131
  update
124
132
  potential_new_request = @pending_requests.find{ |req| req['title'] == title }
125
133
  puts 'Successfully created new request.' if potential_new_request['number'] > last_request_id
@@ -161,7 +169,7 @@ class GitReview
161
169
  update unless request_id.nil?
162
170
  request_id ||= @args.shift.to_i
163
171
  if request_id == 0
164
- puts "Please specify a valid ID."
172
+ puts 'Please specify a valid ID.'
165
173
  return false
166
174
  end
167
175
  @pending_request = @pending_requests.find{ |req| req['number'] == request_id }
@@ -174,9 +182,7 @@ class GitReview
174
182
  @pending_requests = Octokit.pull_requests(source_repo)
175
183
  repos = @pending_requests.collect do |req|
176
184
  repo = req['head']['repository']
177
- # Check if fork and commits still exist.
178
- next if repo.nil? or not has_sha?(req['head']['sha'])
179
- "#{repo['owner']}/#{repo['name']}"
185
+ "#{repo['owner']}/#{repo['name']}" unless repo.nil?
180
186
  end
181
187
  host = URI.parse(github_endpoint).host
182
188
  repos.uniq.compact.each do |repo|
@@ -185,7 +191,7 @@ class GitReview
185
191
  end
186
192
 
187
193
  # System call to 'git'.
188
- def git(command, chomp=true)
194
+ def git(command, chomp = true)
189
195
  s = `git #{command}`
190
196
  s.chomp! if chomp
191
197
  s
@@ -228,13 +234,6 @@ class GitReview
228
234
  "#{target_repo}/#{target_branch}"
229
235
  end
230
236
 
231
- # Returns a boolean stating whether a specified commit exists.
232
- # TODO: Check if this is still necessary, since we don't cache anymore.
233
- def has_sha?(sha)
234
- git("show #{sha} 2>&1")
235
- $?.exitstatus == 0
236
- end
237
-
238
237
  # Returns a boolean stating whether a specified commit has already been merged.
239
238
  def merged?(sha)
240
239
  not git("rev-list #{sha} ^HEAD 2>&1").split("\n").size > 0
@@ -256,20 +255,21 @@ class GitReview
256
255
 
257
256
  # Get GitHub user name.
258
257
  def github_login
259
- git("config --get-all github.user")
258
+ git('config --get-all github.user')
260
259
  end
261
260
 
262
261
  # Get GitHub token.
263
262
  def github_token
264
- git("config --get-all github.token")
263
+ git('config --get-all github.token')
265
264
  end
266
265
 
267
266
  # Determine GitHub endpoint (defaults to 'https://github.com/').
268
267
  def github_endpoint
269
- host = git("config --get-all github.host")
268
+ host = git('config --get-all github.host')
270
269
  host.empty? ? 'https://github.com/' : host
271
270
  end
272
271
 
272
+ # Returns an array consisting of information on the user and the project.
273
273
  def repo_info
274
274
  # Read config_hash from local git config.
275
275
  config_hash = {}
@@ -281,7 +281,7 @@ class GitReview
281
281
  # Extract user and project name from GitHub URL.
282
282
  url = config_hash['remote.origin.url']
283
283
  user, project = github_user_and_project(url)
284
- # If there are no results yet, look for 'insteadof' substitutions in URL and try again.
284
+ # If there are no results yet, look for 'insteadof' substitutions in URL and try again.
285
285
  unless (user and project)
286
286
  short, base = github_insteadof_matching(config_hash, url)
287
287
  if short and base
@@ -292,6 +292,7 @@ class GitReview
292
292
  [user, project]
293
293
  end
294
294
 
295
+ # Looks for 'insteadof' substitutions in URL.
295
296
  def github_insteadof_matching(config_hash, url)
296
297
  first = config_hash.collect { |key,value|
297
298
  [value, /url\.(.*github\.com.*)\.insteadof/.match(key)]
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-review
3
3
  version: !ruby/object:Gem::Version
4
- hash: 5
4
+ hash: 1
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 6
9
- - 1
10
- version: 0.6.1
9
+ - 3
10
+ version: 0.6.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Dominik Bamberger, Cristian Messel
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-18 00:00:00 +02:00
18
+ date: 2011-11-09 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency