Showing 8 changed files with 69 additions and 22 deletions
+1
.gitignore
... ...
@@ -32,3 +32,4 @@ xt/admin.db
32 32
 xt/admin
33 33
 xt/user.db
34 34
 xt/user
35
+xt/log
+1 -1
lib/Gitprep.pm
... ...
@@ -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');
+1 -1
lib/Gitprep/Manager.pm
... ...
@@ -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(
+1
templates/auto/index.html.ep
... ...
@@ -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">
+7 -11
templates/import-branch.html.ep
... ...
@@ -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
   
+2
templates/include/header.html.ep
... ...
@@ -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') {
+1 -1
templates/network.html.ep
... ...
@@ -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
+55 -8
xt/user.t
... ...
@@ -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