... | ... |
@@ -32,3 +32,4 @@ xt/admin.db |
32 | 32 |
xt/admin |
33 | 33 |
xt/user.db |
34 | 34 |
xt/user |
35 |
+xt/log |
... | ... |
@@ -225,7 +225,7 @@ sub startup { |
225 | 225 |
$r->get('/network/graph/(*rev1)...(*rev2_abs)' => template '/network/graph'); |
226 | 226 |
|
227 | 227 |
# Import branch |
228 |
- $r->any('/import-branch/(*remote_branch_abs)' => template '/import-branch'); |
|
228 |
+ $r->any('/import-branch/:remote_user/:remote_project' => template '/import-branch'); |
|
229 | 229 |
|
230 | 230 |
# Get branches and tags |
231 | 231 |
$r->get('/api/revs' => template '/api/revs'); |
... | ... |
@@ -200,7 +200,7 @@ sub original_project { |
200 | 200 |
id => [$user, $project] |
201 | 201 |
)->one; |
202 | 202 |
|
203 |
- croak "No original project" unless $row; |
|
203 |
+ croak "Original project don't eixsts." unless $row; |
|
204 | 204 |
|
205 | 205 |
# Original project |
206 | 206 |
my $original_project = $dbi->model('project')->select( |
... | ... |
@@ -13,6 +13,7 @@ |
13 | 13 |
% layout 'common'; |
14 | 14 |
|
15 | 15 |
%= include '/include/header', title => 'Gitprep'; |
16 |
+ <!-- Index page --> |
|
16 | 17 |
<div class="container" style="min-heigth:500px"> |
17 | 18 |
<h3>Users</h3> |
18 | 19 |
<ul class="nav nav-tabs nav-stacked"> |
... | ... |
@@ -4,15 +4,15 @@ |
4 | 4 |
|
5 | 5 |
my $user = param('user'); |
6 | 6 |
my $project = param('project'); |
7 |
+ my $remote_user = param('remote_user'); |
|
8 |
+ my $remote_project = param('remote_project'); |
|
9 |
+ my $remote_branch = param('remote-branch'); |
|
7 | 10 |
|
8 | 11 |
# Authentication |
9 | 12 |
unless ($api->logined($user)) { |
10 | 13 |
$self->redirect_to('/'); |
11 | 14 |
return; |
12 | 15 |
} |
13 |
- |
|
14 |
- my $remote_branch_abs = param('remote_branch_abs'); |
|
15 |
- my ($remote_user, $remote_project, $remote_branch) = split /\//, $remote_branch_abs, 3; |
|
16 | 16 |
|
17 | 17 |
# Branches |
18 | 18 |
my $git = app->git; |
... | ... |
@@ -42,7 +42,7 @@ |
42 | 42 |
remote_project => [ |
43 | 43 |
['project_name' => 'Remote repository is invalid.'] |
44 | 44 |
], |
45 |
- remote_branch => [ |
|
45 |
+ 'remote-branch' => [ |
|
46 | 46 |
['not_blank' => 'Remote branch name is empty.'] |
47 | 47 |
], |
48 | 48 |
force => {require => 0} => [ |
... | ... |
@@ -60,7 +60,7 @@ |
60 | 60 |
my $branch = $safe_params->{branch}; |
61 | 61 |
my $remote_user = $safe_params->{remote_user}; |
62 | 62 |
my $remote_project = $safe_params->{remote_project}; |
63 |
- my $remote_branch = $safe_params->{remote_branch}; |
|
63 |
+ my $remote_branch = $safe_params->{'remote-branch'}; |
|
64 | 64 |
my $force = $safe_params->{force}; |
65 | 65 |
|
66 | 66 |
# Check branch name |
... | ... |
@@ -129,7 +129,7 @@ |
129 | 129 |
</div> |
130 | 130 |
% } |
131 | 131 |
<h3>Import branch</h3> |
132 |
- <form action="<%= url_for->query(op => 'import') %>" method="post"> |
|
132 |
+ <form action="<%= url_for("/$user/$project/import-branch/$remote_user/$remote_project")->query(op => 'import') %>" method="post"> |
|
133 | 133 |
<div class="row" style="font-size:22px"> |
134 | 134 |
<div class="span6"> |
135 | 135 |
<div class="well" style="text-align:center"> |
... | ... |
@@ -166,14 +166,10 @@ |
166 | 166 |
%= "$remote_user / $remote_project"; |
167 | 167 |
</div> |
168 | 168 |
% param(remote_branch => $remote_branch); |
169 |
- %= select_field 'remote_branch' => $remote_branch_names, style => "width:250px"; |
|
169 |
+ %= select_field 'remote-branch' => $remote_branch_names, style => "width:250px"; |
|
170 | 170 |
</div> |
171 | 171 |
</div> |
172 | 172 |
</div> |
173 |
- %= hidden_field user => $user; |
|
174 |
- %= hidden_field project => $user; |
|
175 |
- %= hidden_field remote_user => $remote_user; |
|
176 |
- %= hidden_field remote_project => $remote_project; |
|
177 | 173 |
</form> |
178 | 174 |
</div> |
179 | 175 |
|
... | ... |
@@ -12,6 +12,8 @@ |
12 | 12 |
<div style="margin-top:5px"> |
13 | 13 |
<div> |
14 | 14 |
% my $user = session('user') || ''; |
15 |
+ <!-- Logined as <%= $user %> --> |
|
16 |
+ |
|
15 | 17 |
<i class="icon-user"></i><a href="<%= url_for("/$user") %>"><%= $user %></a> |
16 | 18 |
</div> |
17 | 19 |
% unless ($user eq 'admin') { |
... | ... |
@@ -45,7 +45,7 @@ |
45 | 45 |
var remote_branch = remote.find('[name=remote-branch]').val(); |
46 | 46 |
|
47 | 47 |
location.href = '<%= url_for("/$user/$project/import-branch/") %>' |
48 |
- + remote_member + '/' + remote_project + '/' + remote_branch; |
|
48 |
+ + remote_member + '/' + remote_project + '?remote-branch=' + remote_branch; |
|
49 | 49 |
}); |
50 | 50 |
}); |
51 | 51 |
% end |
... | ... |
@@ -35,7 +35,7 @@ note 'Start page'; |
35 | 35 |
my $app = Gitprep->new; |
36 | 36 |
my $t = Test::Mojo->new($app); |
37 | 37 |
$t->ua->max_redirects(3); |
38 |
- |
|
38 |
+ |
|
39 | 39 |
# Redirect to _start page |
40 | 40 |
$t->get_ok('/'); |
41 | 41 |
$t->content_like(qr/Create Admin User/); |
... | ... |
@@ -461,21 +461,68 @@ note 'Delete branch'; |
461 | 461 |
$t->content_unlike(qr/tmp_branch/); |
462 | 462 |
} |
463 | 463 |
|
464 |
-=pod |
|
465 | 464 |
note 'import-branch'; |
466 | 465 |
{ |
467 | 466 |
my $app = Gitprep->new; |
468 | 467 |
my $t = Test::Mojo->new($app); |
469 | 468 |
$t->ua->max_redirects(3); |
470 | 469 |
|
471 |
- # Login as kimoto |
|
472 |
- $t->post_ok('/_login?op=login', form => {id => 'kimoto', password => 'a'}); |
|
470 |
+ # Login as kimoto1 |
|
471 |
+ $t->post_ok('/_login?op=login', form => {id => 'kimoto1', password => 'a'}); |
|
472 |
+ $t->get_ok('/')->content_like(qr/Logined as kimoto1 /); |
|
473 | 473 |
|
474 | 474 |
# Create project |
475 |
- $t->post_ok('/_new?op=create', form => {project => 'import-branch1', readme => 1}); |
|
476 |
- $t->content_like(qr/import-branch1\.git/); |
|
475 |
+ $t->post_ok('/_new?op=create', form => {project => 'import-branch1', description => '', readme => 1}); |
|
476 |
+ $t->get_ok('/kimoto1')->content_like(qr/import-branch1/); |
|
477 | 477 |
|
478 |
+ # Login as kimoto2 |
|
479 |
+ $t->post_ok('/_login?op=login', form => {id => 'kimoto2', password => 'a'}); |
|
480 |
+ $t->get_ok('/')->content_like(qr/Logined as kimoto2 /); |
|
481 |
+ |
|
482 |
+ # Fork kimoto1/import-branch1 |
|
483 |
+ $t->get_ok("/kimoto1/import-branch1/fork"); |
|
484 |
+ $t->content_like(qr#Repository is forked from /kimoto1/import-branch1#); |
|
485 |
+ |
|
486 |
+ # Access not valid user |
|
487 |
+ $t->get_ok('/kimoto1/import-branch1/network'); |
|
488 |
+ $t->content_like(qr/Network/); |
|
489 |
+ $t->content_unlike(qr/Import/); |
|
490 |
+ $t->get_ok('/kimoto1/import-branch1/import-branch/kimoto2/import-branch1?remote-branch=master'); |
|
491 |
+ $t->content_like(qr/ Index page /); |
|
492 |
+ |
|
493 |
+ # Show network page import button |
|
494 |
+ $t->get_ok('/kimoto2/import-branch1/network'); |
|
495 |
+ $t->content_like(qr/Network/); |
|
496 |
+ $t->content_like(qr/Import/); |
|
497 |
+ |
|
498 |
+ # Import branch page access |
|
499 |
+ $t->get_ok('/kimoto2/import-branch1/import-branch/kimoto1/import-branch1?remote-branch=master'); |
|
500 |
+ $t->content_like(qr/Import branch/); |
|
501 |
+ |
|
502 |
+ # Invalid parameters |
|
503 |
+ $t->post_ok('/kimoto2/import-branch1/import-branch/kimoto1/import-branch1?remote-branch=master&op=import'); |
|
504 |
+ $t->content_like(qr/Branch name is empty/); |
|
478 | 505 |
|
479 |
- $t->get_ok('/kimoto/gitprep_t/import-branch/kimoto1/gitprep_t/master'); |
|
506 |
+ # Import branch |
|
507 |
+ $t->post_ok('/kimoto2/import-branch1/import-branch/kimoto1/import-branch1?op=import', form => { |
|
508 |
+ branch => 'new1', |
|
509 |
+ 'remote-branch' => 'master' |
|
510 |
+ }); |
|
511 |
+ $t->content_like(qr#Success: import#); |
|
512 |
+ $t->get_ok('/kimoto2/import-branch1/branches')->content_like(qr/new1/); |
|
513 |
+ |
|
514 |
+ # Import same name branch fail |
|
515 |
+ $t->post_ok('/kimoto2/import-branch1/import-branch/kimoto1/import-branch1?op=import', form => { |
|
516 |
+ branch => 'new1', |
|
517 |
+ 'remote-branch' => 'master' |
|
518 |
+ }); |
|
519 |
+ $t->content_like(qr#already exists#); |
|
520 |
+ |
|
521 |
+ # Import force |
|
522 |
+ $t->post_ok('/kimoto2/import-branch1/import-branch/kimoto1/import-branch1?op=import', form => { |
|
523 |
+ branch => 'new1', |
|
524 |
+ 'remote-branch' => 'master', |
|
525 |
+ force => 1 |
|
526 |
+ }); |
|
527 |
+ $t->content_like(qr#Success: force import#); |
|
480 | 528 |
} |
481 |
-=cut |