git-review 0.4.2 → 0.5.0
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-review.rb +75 -35
- metadata +7 -7
data/lib/git-review.rb
CHANGED
@@ -17,24 +17,27 @@ class GitReview
|
|
17
17
|
puts ' list [--reverse] List all open requests.'
|
18
18
|
puts ' show <number> [--full] Show details of a single request.'
|
19
19
|
puts ' browse <number> Open a browser window and review a specified request.'
|
20
|
+
# puts ' checkout <number> Checkout a specified request\'s changes to your local repository.'
|
21
|
+
puts ' accept <number> Accept a specified request by merging it into master.'
|
22
|
+
puts ' decline <number> Decline and close a specified request.'
|
20
23
|
puts ' create Create a new request.'
|
21
|
-
puts ' merge <number> Sign off a specified request by merging it into master.'
|
22
24
|
end
|
23
25
|
|
24
26
|
# List all open requests.
|
25
27
|
def list
|
26
|
-
puts "Open
|
28
|
+
puts "Open requests for '#{source_repo}/#{source_branch}'"
|
27
29
|
option = @args.shift
|
28
30
|
open_requests = get_pull_info
|
29
31
|
open_requests.reverse! if option == '--reverse'
|
32
|
+
# TODO: Refactor to get rid of unnecessary variables and computation.
|
30
33
|
count = 0
|
34
|
+
puts 'ID Date Comments Title'
|
31
35
|
open_requests.each do |pull|
|
32
36
|
line = []
|
33
|
-
line << format_text(pull['number'],
|
34
|
-
line << format_text(Date.parse(pull['created_at']).strftime(
|
35
|
-
line << format_text(pull['comments'],
|
36
|
-
line << format_text(pull['title'],
|
37
|
-
line << format_text(pull['head']['label'], 20)
|
37
|
+
line << format_text(pull['number'], 6)
|
38
|
+
line << format_text(Date.parse(pull['created_at']).strftime('%d-%b-%y'), 10)
|
39
|
+
line << format_text(pull['comments'], 10)
|
40
|
+
line << format_text(pull['title'], 94)
|
38
41
|
sha = pull['head']['sha']
|
39
42
|
if not_merged?(sha)
|
40
43
|
puts line.join ' '
|
@@ -42,7 +45,7 @@ class GitReview
|
|
42
45
|
end
|
43
46
|
end
|
44
47
|
if count == 0
|
45
|
-
puts ' --
|
48
|
+
puts ' -- No open requests. --'
|
46
49
|
end
|
47
50
|
end
|
48
51
|
|
@@ -76,31 +79,14 @@ class GitReview
|
|
76
79
|
Launchy.open(@review['html_url']) if review_exists?
|
77
80
|
end
|
78
81
|
|
79
|
-
#
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
target_repo = "#{@user}/#{@repo}"
|
84
|
-
target_branch = 'master'
|
85
|
-
source_branch = git('branch', false).match(/\*(.*)/)[0][2..-1]
|
86
|
-
title = "Review request: #{github_login} wants to merge changes from '#{source_branch}' into #{target_repo}'s branch '#{target_branch}'."
|
87
|
-
# TODO: Insert commit messages (that are not yet in master) into body (since this will be displayed inside the mail that is sent out).
|
88
|
-
body = 'my body'
|
89
|
-
# Create the actual pull request.
|
90
|
-
Octokit.create_pull_request(target_repo, target_branch, source_branch, title, body)
|
91
|
-
# Switch back to target_branch and check for success.
|
92
|
-
git "co #{target_branch}"
|
93
|
-
update
|
94
|
-
potential_new_review = get_pull_info.find{ |review| review['title'] == title}
|
95
|
-
if potential_new_review['number'] > last_review_id
|
96
|
-
puts 'Review request successfully created.'
|
97
|
-
else
|
98
|
-
puts 'Creating new review request failed.'
|
99
|
-
end
|
82
|
+
# Checkout a specified request's changes to your local repository.
|
83
|
+
# TODO: Implement this.
|
84
|
+
def checkout
|
85
|
+
puts 'Under construction... ;-)'
|
100
86
|
end
|
101
87
|
|
102
|
-
#
|
103
|
-
def
|
88
|
+
# Accept a specified request by merging it into master.
|
89
|
+
def accept
|
104
90
|
return unless review_exists?
|
105
91
|
option = @args.shift
|
106
92
|
if @review['head']['repository']
|
@@ -118,7 +104,7 @@ class GitReview
|
|
118
104
|
return false
|
119
105
|
end
|
120
106
|
s = @review['head']['sha']
|
121
|
-
message = "
|
107
|
+
message = "Accepting request ##{@review['number']} from #{o}/#{r}\n\n---\n\n"
|
122
108
|
message += @review['body'].gsub("'", '')
|
123
109
|
if option == '--log'
|
124
110
|
message += "\n\n---\n\nMerge Log:\n"
|
@@ -129,6 +115,31 @@ class GitReview
|
|
129
115
|
exec(cmd)
|
130
116
|
end
|
131
117
|
|
118
|
+
# Decline and close a specified request.
|
119
|
+
def decline
|
120
|
+
return unless review_exists?
|
121
|
+
Octokit.post("issues/close/#{source_repo}/#{@review['number']}")
|
122
|
+
puts "Successfully declined request." unless review_exists?(@review['number'])
|
123
|
+
end
|
124
|
+
|
125
|
+
# Create a new request.
|
126
|
+
# TODO: Support creating requests to other repositories and branches (like the original repo, this has been forked from).
|
127
|
+
def create
|
128
|
+
# TODO: Create and push to a remote branch if necessary.
|
129
|
+
# Gather information.
|
130
|
+
last_review_id = get_pull_info.collect{|review| review['number']}.sort.last.to_i
|
131
|
+
title = "[Review] Request from '#{github_login}' @ '#{source_repo}/#{source_branch}'"
|
132
|
+
# TODO: Insert commit messages (that are not yet in master) into body (since this will be displayed inside the mail that is sent out).
|
133
|
+
body = "You are requested to review the following changes:"
|
134
|
+
# Create the actual pull request.
|
135
|
+
Octokit.create_pull_request(target_repo, target_branch, source_branch, title, body)
|
136
|
+
# Switch back to target_branch and check for success.
|
137
|
+
git "co #{target_branch}"
|
138
|
+
update
|
139
|
+
potential_new_review = get_pull_info.find{ |review| review['title'] == title}
|
140
|
+
puts 'Review request successfully created.' if potential_new_review['number'] > last_review_id
|
141
|
+
end
|
142
|
+
|
132
143
|
# Start a console session (used for debugging).
|
133
144
|
def console
|
134
145
|
puts 'Entering debug console.'
|
@@ -165,8 +176,15 @@ class GitReview
|
|
165
176
|
end
|
166
177
|
|
167
178
|
# Check existence of specified review and assign @review.
|
168
|
-
def review_exists?
|
169
|
-
review_id
|
179
|
+
def review_exists?(review_id = nil)
|
180
|
+
# NOTE: If review_id is not set explicitly we might need to update to get the
|
181
|
+
# latest changes from GitHub, as this is called from within another method.
|
182
|
+
update if review_id.nil?
|
183
|
+
review_id ||= @args.shift.to_i
|
184
|
+
if review_id == 0
|
185
|
+
puts "Please specify a valid ID."
|
186
|
+
return false
|
187
|
+
end
|
170
188
|
@review = get_pull_info.find{ |review| review['number'] == review_id}
|
171
189
|
puts "Review '#{review_id}' does not exist." unless @review
|
172
190
|
not @review.nil?
|
@@ -184,6 +202,28 @@ class GitReview
|
|
184
202
|
info.to_s.gsub("\n", ' ')[0, size].ljust(size)
|
185
203
|
end
|
186
204
|
|
205
|
+
# Returns a string that specifies the source repo.
|
206
|
+
def source_repo
|
207
|
+
"#{@user}/#{@repo}"
|
208
|
+
end
|
209
|
+
|
210
|
+
# Returns a string that specifies the source branch.
|
211
|
+
def source_branch
|
212
|
+
git('branch', false).match(/\*(.*)/)[0][2..-1]
|
213
|
+
end
|
214
|
+
|
215
|
+
# Returns a string that specifies the target repo.
|
216
|
+
def target_repo
|
217
|
+
# TODO: Enable possibility to manually override this and set arbitrary repositories.
|
218
|
+
source_repo
|
219
|
+
end
|
220
|
+
|
221
|
+
# Returns a string that specifies the target branch.
|
222
|
+
def target_branch
|
223
|
+
# TODO: Enable possibility to manually override this and set arbitrary branches.
|
224
|
+
'master'
|
225
|
+
end
|
226
|
+
|
187
227
|
def fetch_stale_forks
|
188
228
|
pulls = get_pull_info
|
189
229
|
repos = {}
|
@@ -263,7 +303,7 @@ class GitReview
|
|
263
303
|
end
|
264
304
|
|
265
305
|
def cache_pull_info
|
266
|
-
response = Octokit.pull_requests(
|
306
|
+
response = Octokit.pull_requests(source_repo)
|
267
307
|
save_data({'review' => response}, REVIEW_CACHE_FILE)
|
268
308
|
end
|
269
309
|
|
metadata
CHANGED
@@ -5,17 +5,17 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 5
|
9
|
+
- 0
|
10
|
+
version: 0.5.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
|
-
-
|
13
|
+
- Dominik Bamberger, Cristian Messel
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-07-
|
18
|
+
date: 2011-07-14 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -62,7 +62,7 @@ dependencies:
|
|
62
62
|
version: 0.5.1
|
63
63
|
type: :runtime
|
64
64
|
version_requirements: *id003
|
65
|
-
description:
|
65
|
+
description: Manage review workflow for projects hosted on GitHub (using pull requests).
|
66
66
|
email: bamberger.dominik@gmail.com
|
67
67
|
executables:
|
68
68
|
- git-review
|
@@ -107,6 +107,6 @@ rubyforge_project:
|
|
107
107
|
rubygems_version: 1.5.2
|
108
108
|
signing_key:
|
109
109
|
specification_version: 3
|
110
|
-
summary: facilitates
|
110
|
+
summary: facilitates GitHub code reviews
|
111
111
|
test_files: []
|
112
112
|
|