improve pull page design
|
1 |
<% |
2 |
# API |
|
3 |
my $api = gitprep_api; |
|
4 | ||
5 |
# Parameters |
|
fix pull_request table bug
|
6 |
my $base_user_id = param('user'); |
7 |
my $base_project_id = param('project'); |
|
improve pull page design
|
8 |
my $row_id = param('row_id'); |
fix pull page
|
9 |
|
10 |
# Issue |
|
11 |
my $issue = app->dbi->model('issue')->select( |
|
implement pull request
|
12 |
[ |
13 |
{__MY__ => '*'}, |
|
remove table __ prefix
|
14 |
{open_user => ['id']} |
implement pull request
|
15 |
], |
fix pull page
|
16 |
where => {'issue.row_id' => $row_id} |
17 |
)->one; |
|
18 |
|
|
19 |
# Pull requests |
|
20 |
my $pull_request = app->dbi->model('pull_request')->select( |
|
21 |
where => {row_id => $issue->{pull_request}} |
|
implement pull request
|
22 |
)->one; |
23 |
|
|
fix pull_request table bug
|
24 |
# Base information |
25 |
my $base_project_row_id = $pull_request->{base_project}; |
|
26 |
my $base_project = app->dbi->model('project')->select( |
|
27 |
[ |
|
28 |
{__MY__ => '*'}, |
|
remove table __ prefix
|
29 |
{user => ['id']} |
fix pull_request table bug
|
30 |
], |
31 |
where => {'project.row_id' => $base_project_row_id} |
|
32 |
)->one; |
|
33 |
my $base_branch = $pull_request->{base_branch}; |
|
34 |
|
|
35 |
Carp::croak "pull_request invalid user id" |
|
remove table __ prefix
|
36 |
if $base_user_id ne $base_project->{'user.id'}; |
fix pull_request table bug
|
37 |
Carp::croak "pull_request invalid project id" |
38 |
if $base_project_id ne $base_project->{id}; |
|
39 |
|
|
40 |
# Target information |
|
41 |
my $target_project_row_id = $pull_request->{target_project}; |
|
42 |
my $target_project = app->dbi->model('project')->select( |
|
43 |
[ |
|
44 |
{__MY__ => '*'}, |
|
remove table __ prefix
|
45 |
{user => ['id']} |
fix pull_request table bug
|
46 |
], |
47 |
where => {'project.row_id' => $target_project_row_id} |
|
48 |
)->one; |
|
49 |
my $target_branch = $pull_request->{target_branch}; |
|
remove table __ prefix
|
50 |
my $target_user_id = $target_project->{'user.id'}; |
add http command
|
51 |
my $target_project_id = $target_project->{id}; |
fix pull_request table bug
|
52 |
|
53 |
# Session |
|
complete pull request logic
|
54 |
my $session_user_row_id = $api->session_user_row_id; |
fix pull_request table bug
|
55 |
my $session_user_id = $api->session_user_id; |
56 |
|
|
57 |
# Base repository information |
|
58 |
my $base_rep_info = app->rep_info($base_user_id, $base_project_id); |
|
59 |
|
|
60 |
# Target repository information |
|
61 |
my $target_rep_info = app->rep_info($target_user_id, $base_project_id); |
|
62 |
|
|
63 |
# Working repository information |
|
64 |
my $work_rep_info = app->work_rep_info($base_user_id, $base_project_id); |
|
add patch feature
|
65 | |
66 |
# Display patch |
|
67 |
if (stash('patch')) { |
|
68 |
# Lock working repository |
|
69 |
my $lock_fh = $self->app->manager->lock_rep($work_rep_info); |
|
70 |
|
|
71 |
# Prepare merge |
|
72 |
$self->app->manager->prepare_merge( |
|
73 |
$work_rep_info, |
|
74 |
$base_rep_info, |
|
75 |
$base_branch, |
|
76 |
$target_rep_info, |
|
77 |
$target_branch |
|
78 |
); |
|
79 |
|
|
80 |
# Create patch |
|
81 |
my $patch = $self->app->manager->get_patch( |
|
82 |
$work_rep_info, |
|
83 |
$target_rep_info, |
|
84 |
$target_branch |
|
85 |
); |
|
86 |
|
|
87 |
$self->res->headers->content_type('text/plain; charset=utf-8'); |
|
88 |
$self->render(text => $patch); |
|
89 |
return; |
|
90 |
} |
|
91 | ||
fix pull_request table bug
|
92 |
# Git |
93 |
my $git = $self->app->git; |
|
improve pull page design
|
94 |
|
change is_collaborator argum...
|
95 |
if (lc $self->req->method eq 'post') { |
96 |
|
|
97 |
# Access controll |
|
fix pull_request table bug
|
98 |
unless ($api->can_write_access($session_user_id, $base_user_id, $base_project_id)) { |
implement close and reopen
|
99 |
$self->reply->exception('Forbbiden'); |
100 |
return; |
|
101 |
} |
|
102 |
|
|
103 |
# Close pull request |
|
104 |
my $op = param('op'); |
|
change is_collaborator argum...
|
105 |
if ($op eq 'close') { |
fix pull page
|
106 |
app->dbi->model('issue')->update( |
complete pull request logic
|
107 |
{ |
108 |
open => 0, |
|
109 |
open_user => $session_user_row_id |
|
110 |
}, |
|
implement close and reopen
|
111 |
where => {row_id => $row_id} |
112 |
); |
|
113 |
$self->redirect_to('current'); |
|
114 |
return; |
|
115 |
} |
|
116 |
elsif ($op eq 'reopen') { |
|
117 |
my $open_time = time; |
|
fix pull page
|
118 |
app->dbi->model('issue')->update( |
implement close and reopen
|
119 |
{ |
120 |
open => 1, |
|
complete pull request logic
|
121 |
open_time => $open_time, |
122 |
open_user => $session_user_row_id |
|
implement close and reopen
|
123 |
}, |
124 |
where => {row_id => $row_id} |
|
125 |
); |
|
126 |
$self->redirect_to('current'); |
|
127 |
return; |
|
change is_collaborator argum...
|
128 |
} |
implement pull request
|
129 |
elsif ($op eq 'merge') { |
130 |
|
|
131 |
# Lock working repository |
|
132 |
my $lock_fh = $self->app->manager->lock_rep($work_rep_info); |
|
133 | ||
134 |
# Prepare merge |
|
135 |
$self->app->manager->prepare_merge( |
|
136 |
$work_rep_info, |
|
fix pull_request table bug
|
137 |
$base_rep_info, |
138 |
$base_branch, |
|
139 |
$target_rep_info, |
|
140 |
$target_branch |
|
implement pull request
|
141 |
); |
142 |
|
|
cleanup merge and push logic
|
143 |
# Merge |
144 |
my $merge_success = $self->app->manager->merge( |
|
implement pull request
|
145 |
$work_rep_info, |
fix pull_request table bug
|
146 |
$target_rep_info, |
147 |
$target_branch |
|
implement pull request
|
148 |
); |
149 |
|
|
fix merge pull request bug
|
150 |
|
cleanup merge and push logic
|
151 |
if ($merge_success) { |
152 |
# Push |
|
fix pull_request table bug
|
153 |
app->manager->push($work_rep_info, $base_branch); |
implement pull request
|
154 |
|
fix pull page
|
155 |
app->dbi->model('issue')->update( |
complete pull request logic
|
156 |
{ |
fix pull page
|
157 |
open => 0 |
complete pull request logic
|
158 |
}, |
implement pull request
|
159 |
where => {row_id => $row_id} |
160 |
); |
|
161 |
|
|
fix pull_request table bug
|
162 |
$self->redirect_to("/$base_user_id/$base_project_id/tree/$base_branch"); |
implement pull request
|
163 |
} |
164 |
} |
|
change is_collaborator argum...
|
165 |
} |
166 |
|
|
improve pull page design
|
167 |
# Commits |
fix pull_request table bug
|
168 |
my $commits = $git->forward_commits($base_rep_info, $base_branch, $target_branch); |
improve pull page design
|
169 |
my $commits_count = @$commits; |
170 |
my $commits_date = {}; |
|
171 |
my $authors = {}; |
|
172 |
for my $commit (@$commits) { |
|
173 |
my $date = $commit->{age_string_date_local}; |
|
174 |
$commits_date->{$date} ||= []; |
|
175 |
$authors->{$commit->{author}} = 1; |
|
176 |
push @{$commits_date->{$date}}, $commit; |
|
177 |
} |
|
178 |
my $authors_count = keys %$authors; |
|
179 | ||
180 |
# Start commit |
|
fix pull_request table bug
|
181 |
my $start_commit = $git->separated_commit($base_rep_info, $base_branch, $target_branch); |
improve pull page design
|
182 | |
183 |
# End commit |
|
fix pull_request table bug
|
184 |
my $end_commit = $git->get_commit($target_rep_info, $target_branch); |
user can only merge pull req...
|
185 |
|
fix pull page
|
186 |
# Issue first message |
fix pulls page
|
187 |
my $issue_message_first = app->dbi->model('issue_message')->select( |
add pull request message
|
188 |
[ |
189 |
{__MY__ => '*'}, |
|
remove table __ prefix
|
190 |
{user => ['id']} |
add pull request message
|
191 |
], |
fix pull page
|
192 |
where => {issue => $row_id, number => 1} |
add pull request message
|
193 |
)->one; |
cleanup
|
194 |
|
cleanup prepare merge
|
195 |
# Check merge automatically |
cleanup merge and push logic
|
196 |
my $merge_success; |
fix pull page
|
197 |
if ($api->can_write_access($session_user_id, $base_user_id, $base_project_id) && $issue->{open}) { |
fix pull_request table bug
|
198 |
|
implement pull request
|
199 |
my $lock_fh = $self->app->manager->lock_rep($work_rep_info); |
200 |
|
|
201 |
# Prepare merge |
|
202 |
$self->app->manager->prepare_merge( |
|
203 |
$work_rep_info, |
|
fix pull_request table bug
|
204 |
$base_rep_info, |
205 |
$base_branch, |
|
206 |
$target_rep_info, |
|
207 |
$target_branch |
|
implement pull request
|
208 |
); |
209 |
|
|
210 |
# Check merge automatical |
|
cleanup merge and push logic
|
211 |
$merge_success = $self->app->manager->merge( |
implement pull request
|
212 |
$work_rep_info, |
fix pull_request table bug
|
213 |
$target_rep_info, |
214 |
$target_branch |
|
cleanup prepare merge
|
215 |
); |
216 |
} |
|
complete command line merge
|
217 |
|
218 |
# HTTP repository URL |
|
219 |
my $http_rep_url = url_for("$target_user_id/$target_project_id.git")->to_abs; |
|
220 |
|
|
221 |
# SSH repository URL |
|
222 |
my $url = url_for->to_abs; |
|
223 |
$url->base(undef); |
|
224 |
my $ssh_port = config->{basic}{ssh_port}; |
|
225 |
my $rep_home = app->rep_home; |
|
226 |
my $execute_user = getpwuid($>); |
|
227 |
my $ssh_rep_url_base = defined app->config->{basic}{'ssh_rep_url_base'} |
|
228 |
? app->config->{basic}{'ssh_rep_url_base'} : $rep_home; |
|
229 |
my $ssh_rep_url = "ssh://$execute_user\@" . $url->host |
|
230 |
. ($ssh_port ? ":$ssh_port" : '') . "$ssh_rep_url_base/$user/$project.git"; |
|
cleanup prepare merge
|
231 | |
fix pull page
|
232 |
my $patch_url = url_for("/$base_user_id/$base_project_id/pull/$issue->{row_id}.patch")->to_abs; |
complete command line merge
|
233 | |
234 |
my $pre_content_base = "git checkout -b $target_user_id-$target_branch $base_branch"; |
|
235 |
my $pre_content_http = "git pull $http_rep_url $target_branch"; |
|
236 |
my $pre_content_ssh = "git pull $ssh_rep_url $target_branch"; |
|
237 |
|
|
cleanup
|
238 |
# Commit body arguments |
239 |
my %commit_body_args = ( |
|
240 |
id => $end_commit->{id}, |
|
241 |
from_id => $start_commit->{id}, |
|
242 |
rev => $end_commit->{id}, |
|
243 |
from_rev => $start_commit->{id} |
|
244 |
); |
|
improve pull page design
|
245 |
%> |
246 | ||
fix pull_request table bug
|
247 |
% layout 'common', title => "Pull Requests Tags \x{30fb} $base_user_id/$base_project_id"; |
improve pull page design
|
248 |
|
249 |
%= include '/include/header'; |
|
250 |
|
|
251 |
<div class="container"> |
|
252 |
<div style="font-size:23px;margin-top:20px;margin-bottom:9px;"> |
|
253 |
<% |
|
cleanup join table
|
254 |
my $pull_title = $pull_request->{target_branch}; |
improve pull page design
|
255 |
$pull_title =~ s/_/ /g; |
256 |
$pull_title = ucfirst $pull_title; |
|
257 |
%> |
|
258 |
|
|
fix pull page
|
259 |
<%= $pull_title %> <span style="color:#767676;">#<%= $issue->{row_id} %></span> |
improve pull page design
|
260 |
</div> |
261 |
<div> |
|
262 |
<div style="display:inline-block;color:white;margin-right:4px;"> |
|
fix pull page
|
263 |
% if ($issue->{open}) { |
improve pull page design
|
264 |
<div style="background:#6cc644;padding:4px 8px;border-radius:3px;"> |
265 |
Open |
|
266 |
</div> |
|
267 |
% } else { |
|
implement close and reopen
|
268 |
<div style="background:#bd2c00;padding:4px 8px;border-radius:3px;"> |
improve pull page design
|
269 |
Closed |
270 |
</div> |
|
271 |
% } |
|
272 |
</div> |
|
remove table __ prefix
|
273 |
% my $open_user_id = $issue->{'open_user.id'}; |
improve pull page design
|
274 |
<a style="color:#333333;font-weight:bold" href="<%= url_for("/$open_user_id") %>"><%= $open_user_id %></a> |
275 |
<span style="color:#767676"> |
|
276 |
wants to merge <%= $commits_count %> commits |
|
improve pull page design
|
277 |
into |
278 |
<span style="display:inline-block;padding:2px 4px;background:#e8f0f8;color:#336479;border-radius:3px;"> |
|
fix pull_request table bug
|
279 |
<%= $pull_request->{base_branch} %> |
improve pull page design
|
280 |
</span> |
281 |
from |
|
282 |
<span style="display:inline-block;padding:2px 4px;background:#e8f0f8;color:#336479;border-radius:3px;"> |
|
fix pull_request table bug
|
283 |
% if ($base_user_id ne $target_user_id) { |
284 |
<%= $target_user_id %> |
|
285 |
/ |
|
286 |
% } |
|
287 |
<%= $pull_request->{target_branch} %> |
|
improve pull page design
|
288 |
</span> |
improve pull page design
|
289 |
</span> |
290 |
</div> |
|
don't show pull request on n...
|
291 |
% if (!$commits_count) { |
292 |
<div class="compare-nothing" style="margin-top:10px"> |
|
293 |
<div> |
|
294 |
<b><big>There isn't anything to compare.</big></b> |
|
add pull request message
|
295 |
</div> |
296 |
</div> |
|
don't show pull request on n...
|
297 |
% } else { |
298 |
<div> |
|
299 |
<ul class="compare-header"> |
|
300 |
<li> |
|
301 |
<b><%= @$commits %></b> <span>commit</span> |
|
302 |
</li> |
|
303 |
<li> |
|
304 |
<b><%= $authors_count %></b> <span>contributor</span> |
|
305 |
</li> |
|
306 |
<li> |
|
307 |
|
|
308 |
</li> |
|
309 |
<li> |
|
310 |
|
|
311 |
</li> |
|
312 |
</ul> |
|
313 |
<div class="pull-comment"> |
|
314 |
<div class="pull-comment-header"> |
|
remove table __ prefix
|
315 |
<b><%= $issue_message_first->{'user.id'} %></b> |
don't show pull request on n...
|
316 |
<span style="color:#767676"> |
317 |
commented |
|
fix pulls page
|
318 |
<%= $api->age_string($issue_message_first->{update_time}) %> |
don't show pull request on n...
|
319 |
</span> |
improve pull page design
|
320 |
</div> |
don't show pull request on n...
|
321 |
<div class="pull-comment-body"> |
fix pulls page
|
322 |
<%= $issue_message_first->{message} %> |
don't show pull request on n...
|
323 |
</div> |
324 |
</div> |
|
325 |
|
|
326 |
<div class="commits"> |
|
327 |
% for my $date (reverse sort keys %$commits_date) { |
|
328 |
% my $commits = $commits_date->{$date}; |
|
329 |
|
|
330 |
<div class="commit-date"> |
|
331 |
<i class="icon-off"></i><span>Commits on <%= $date %></span> |
|
332 |
</div> |
|
333 |
|
|
334 |
<ul class="compare-commits-date-container"> |
|
335 |
% for my $commit (sort {$b->{author_epoch} <=> $a->{author_epoch}} @$commits) { |
|
336 |
<% |
|
337 |
my $commit_author_email = $commit->{author_email}; |
|
338 |
my $commit_author_id = app->dbi->model('user')->select( |
|
339 |
'id', |
|
340 |
where => {email => $commit_author_email} |
|
341 |
)->value; |
|
342 |
%> |
|
343 |
<li> |
|
344 |
<div class="compare-commits-author"> |
|
345 |
<span title="<%= $commit->{author_email} %>"> |
|
346 |
% if (defined $commit_author_id) { |
|
347 |
<a href="<%= url_for("/$commit_author_id") %>"><%= $commit_author_id %></a> |
|
348 |
% } else { |
|
349 |
<%= $commit->{author_name} %> |
|
350 |
% } |
|
351 |
</span> |
|
352 |
</div> |
|
353 |
<div class="compare-commits-commit-title"> |
|
fix pull_request table bug
|
354 |
<a style="color:#333" href="<%= url_for("/$base_user_id/$base_project_id/commit/$commit->{id}") %>"> |
don't show pull request on n...
|
355 |
<%= $commit->{title_short} %> |
356 |
</a> |
|
357 |
</div> |
|
358 |
<div class="compare-commits-commit-id"> |
|
fix pull_request table bug
|
359 |
<a href="<%= url_for("/$base_user_id/$base_project_id/commit/$commit->{id}") %>"> |
don't show pull request on n...
|
360 |
<%= substr($commit->{id}, 0, 7) %> |
361 |
</a> |
|
362 |
</div> |
|
363 |
</li> |
|
364 |
% } |
|
365 |
</ul> |
|
366 |
% } |
|
367 |
</div> |
|
cleanup
|
368 | |
369 |
|
|
don't show pull request on n...
|
370 |
%= include '/include/commit_body', %commit_body_args; |
371 |
% } |
|
improve pull page design
|
372 |
|
fix pull_request table bug
|
373 |
% if ($api->can_write_access($session_user_id, $base_user_id, $base_project_id)) { |
fix pull page
|
374 |
% if ($commits_count && $merge_success && $issue->{open}) { |
add pull request command lin...
|
375 |
<div class="pull-request-form"> |
complete command line merge
|
376 |
<div style="overflow:hidden"> |
377 |
<div style="float:left;padding:10px;padding-right:0"> |
|
378 |
<div style="width:30px;height:30px;text-align:center;border-radius:15px;background:#95c97e;color:white;padding-top:5px;"><%= "\x{2714}" %></div> |
|
improve pull page design
|
379 |
</div> |
complete command line merge
|
380 |
<div style="float:left"> |
381 |
<div class="pull-request-form-title"> |
|
add pull request command lin...
|
382 |
<div> |
complete command line merge
|
383 |
<b>This branch has no conflicts with the base branch</b> |
add pull request command lin...
|
384 |
</div> |
complete command line merge
|
385 |
<div> |
386 |
<span style="color:#767676">Merging can be performed automatically.</span> |
|
add pull request command lin...
|
387 |
</div> |
complete command line merge
|
388 |
</div> |
389 |
</div> |
|
390 |
</div> |
|
391 |
<div class="pull-request-form-button"> |
|
392 |
<form action="<%= url_for %>" method="post"> |
|
393 |
<%= hidden_field op => 'merge' %> |
|
394 |
<%= submit_button 'Merge pull request', class => "btn btn-success" %> |
|
395 |
<span style="margin-left:5px"> |
|
396 |
You can also view <a href="javascript:void(0)" onclick="$('#command-line-instructions').toggle()" >command line instructions</a>. |
|
397 |
</span> |
|
398 |
</form> |
|
399 |
|
|
400 |
<div id="command-line-instructions" style="display:none"> |
|
401 |
<div style="font-size:18px;padding:10px 0"> |
|
402 |
Merging via command line |
|
403 |
</div> |
|
add pull request command lin...
|
404 | |
complete command line merge
|
405 |
<div> |
406 |
If you do not want to use the merge button or an automatic merge cannot be performed, you can perform a manual merge on the command line. |
|
407 |
</div> |
|
408 |
%= javascript begin |
|
409 |
$(document).ready(function () { |
|
410 |
var http_rep_url = "<%= $http_rep_url %>"; |
|
411 |
|
|
412 |
var ssh_rep_url = "<%= $ssh_rep_url %>"; |
|
413 |
var patch_url = "<%= $patch_url %>"; |
|
414 |
|
|
415 |
var pre_content_base = "<%= $pre_content_base %>"; |
|
416 |
var pre_content_http = "<%= $pre_content_http %>"; |
|
417 |
var pre_content_ssh = "<%= $pre_content_ssh %>"; |
|
418 |
|
|
419 |
var pre_content_http_all = pre_content_base + "\n" + pre_content_http; |
|
420 |
var pre_content_ssh_all = pre_content_base + "\n" + pre_content_ssh; |
|
421 |
|
|
422 |
$('#http-btn').on('click', function () { |
|
423 |
$('[name=clone_url]').val(http_rep_url); |
|
424 |
$('#step1').text(pre_content_http_all); |
|
425 |
}); |
|
426 |
$('#ssh-btn').on('click', function () { |
|
427 |
$('[name=clone_url]').val(ssh_rep_url); |
|
428 |
$('#step1').text(pre_content_ssh_all); |
|
429 |
}); |
|
430 |
$('#patch-btn').on('click', function () { |
|
431 |
$('[name=clone_url]').val(patch_url); |
|
432 |
}); |
|
433 |
}); |
|
434 |
% end |
|
435 |
|
|
436 |
<div style="margin-top:10px"> |
|
437 |
<button id="http-btn" class="btn btn-small" style="border-radius:3px 0 0 3px">HTTPS</button><button id="ssh-btn" class="btn btn-small" style="border-radius:0">SSH</button><button id="patch-btn" class="btn btn-small" style="border-radius:0">Patch</button><%= text_field clone_url => $http_rep_url, style => "width:600px;padding:4px 7px 5px 7px;border-radius:0 3px 3px 0" %> |
|
438 |
</div> |
|
add pull request command lin...
|
439 | |
complete command line merge
|
440 |
<div style="margin-top:15px;margin-bottom:5px;"> |
441 |
<b>Step 1:</b> From your project repository, check out a new branch and test the changes. |
|
442 |
</div> |
|
443 | ||
444 |
<pre id="step1" style="background:#f2f2f2; padding:10px; border-radius:3px"> |
|
add http command
|
445 |
git checkout -b <%= $target_user_id %>-<%= $target_branch %> <%= $base_branch %> |
446 |
git pull <%= url_for("$target_user_id/$target_project_id.git")->to_abs %> <%= $target_branch %> |
|
add pull request command lin...
|
447 |
</pre> |
448 | ||
complete command line merge
|
449 |
<div style="margin-top:15px;margin-bottom:5px;"> |
450 |
<b>Step 2:</b> Merge the changes and update on GitPrep. |
|
451 |
</div> |
|
add pull request command lin...
|
452 | |
453 |
<pre style="background:#f2f2f2; padding:10px; border-radius:3px"> |
|
add http command
|
454 |
git checkout <%= $base_branch %> |
455 |
git merge --no-ff <%= $target_user_id %>-<%= $target_branch %> |
|
456 |
git push origin <%= $base_branch %> |
|
add pull request command lin...
|
457 |
</pre> |
implement close and reopen
|
458 |
</div> |
improve pull page design
|
459 |
</div> |
add pull request command lin...
|
460 |
</div> |
implement close and reopen
|
461 |
% } |
462 |
|
|
fix pull page
|
463 |
% if ($issue->{open}) { |
implement close and reopen
|
464 |
<div style="text-align:right;margin-top:10px;"> |
465 |
<form action="<%= url_for %>" method="post"> |
|
466 |
<%= hidden_field op => 'close' %> |
|
467 |
<%= submit_button 'Close pull request', class => 'btn' %> |
|
468 |
</form> |
|
469 |
</div> |
|
470 |
% } else { |
|
471 |
<div style="text-align:right;margin-top:10px;"> |
|
472 |
<form action="<%= url_for %>" method="post"> |
|
473 |
<%= hidden_field op => 'reopen' %> |
|
474 |
<%= submit_button 'Reopen pull request', class => 'btn' %> |
|
475 |
</form> |
|
476 |
</div> |
|
477 |
% } |
|
user can only merge pull req...
|
478 |
% } |
improve pull page design
|
479 |
</div> |
480 |
</div> |
|
481 | ||
482 |
%= include '/include/footer'; |