Showing 6 changed files with 66 additions and 57 deletions
+8
lib/Gitprep.pm
... ...
@@ -11,10 +11,13 @@ use Encode qw/encode decode/;
11 11
 use Mojo::JSON;
12 12
 use Gitprep::API;
13 13
 use Carp 'croak';
14
+use Gitprep::RepManager;
15
+use Scalar::Util 'weaken';
14 16
 
15 17
 has 'git';
16 18
 has 'dbi';
17 19
 has 'validator';
20
+has 'manager';
18 21
 
19 22
 sub startup {
20 23
   my $self = shift;
... ...
@@ -144,6 +147,11 @@ EOS
144 147
       );
145 148
     };
146 149
   }
150
+  
151
+  # Repository Manager
152
+  my $manager = Gitprep::RepManager->new(app => $self);
153
+  weaken $manager->{app};
154
+  $self->manager($manager);
147 155
 
148 156
   # Home
149 157
   $r->get('/')->to('#home');
-22
lib/Gitprep/API.pm
... ...
@@ -102,27 +102,5 @@ sub delete_project {
102 102
   $dbi->model('project')->delete(id => [$user, $project]);
103 103
 }
104 104
 
105
-sub exists_project {
106
-  my ($self, $user, $project) = @_;
107
-
108
-  my $c = $self->cntl;
109
-  my $dbi = $c->app->dbi;
110
-  my $row = $dbi->model('project')->select(id => [$user, $project])->one;
111
-  
112
-  return $row ? 1 : 0;
113
-}
114
-
115
-sub rename_project {
116
-  my ($self, $user, $project, $renamed_project) = @_;
117
-  
118
-  my $c = $self->cntl;
119
-  my $dbi = $c->app->dbi;
120
-  
121
-  croak "Invalid parameters"
122
-    unless defined $user && defined $project && defined $renamed_project;
123
-  
124
-  $dbi->model('project')->update({name => $renamed_project}, id => [$user, $project]);
125
-}
126
-
127 105
 1;
128 106
 
-20
lib/Gitprep/Git.pm
... ...
@@ -735,26 +735,6 @@ sub references {
735 735
   return \%refs;
736 736
 }
737 737
 
738
-sub rename_project {
739
-  my ($self, $user, $project, $renamed_project) = @_;
740
-  
741
-  croak "Invalid user name or project"
742
-    unless defined $user && defined $project && defined $renamed_project;
743
-  my $rep = $self->rep($user, $project);
744
-  my $renamed_rep = $self->rep($user, $renamed_project);
745
-  
746
-  move($rep, $renamed_rep)
747
-    or croak "Can't move $rep to $renamed_rep: $!";
748
-}
749
-
750
-sub exists_project {
751
-  my ($self, $user, $project) = @_;
752
-  
753
-  my $rep = $self->rep($user, $project);
754
-  
755
-  return -e $rep;
756
-}
757
-
758 738
 sub rep {
759 739
   my ($self, $user, $project) = @_;
760 740
   
+52 -11
lib/Gitprep/RepManager.pm
... ...
@@ -1,29 +1,30 @@
1 1
 package Gitprep::RepManager;
2 2
 use Mojo::Base -base;
3 3
 
4
-has 'c';
4
+use Carp 'croak';
5
+use File::Copy 'move';
6
+
7
+has 'app';
5 8
 
6 9
 sub rename_project {
7 10
   my ($self, $user, $project, $renamed_project) = @_;
8 11
   
9
-  my $c = $self->c;
10
-  my $api = $c->gitprep_api($c);
11
-  my $git = $c->app->git;
12
-  my $dbi = $c->app->dbi;
12
+  my $git = $self->app->git;
13
+  my $dbi = $self->app->dbi;
13 14
   
14 15
   my $error = {};
15 16
   
16
-  if ($api->exists_project($user, $renamed_project)
17
-    || $git->exists_project($user, $renamed_project))
17
+  if ($self->_exists_project($user, $renamed_project)
18
+    || $self->_exists_rep($user, $renamed_project))
18 19
   {
19 20
     $error->{message} = 'Already exists';
20 21
     return $error;
21 22
   }
22 23
   else {
23
-      $dbi->connector->txn(sub {
24
-        $api->rename_project($user, $project, $renamed_project);
25
-        $git->rename_project($user, $project, $renamed_project);
26
-      });
24
+    $dbi->connector->txn(sub {
25
+      $self->_rename_project($user, $project, $renamed_project);
26
+      $self->_rename_rep($user, $project, $renamed_project);
27
+    });
27 28
     if ($@) {
28 29
       $error->{message} = 'Rename failed';
29 30
       return $error;
... ...
@@ -33,4 +34,44 @@ sub rename_project {
33 34
   return 1;
34 35
 }
35 36
 
37
+sub _exists_project {
38
+  my ($self, $user, $project) = @_;
39
+
40
+  my $dbi = $self->app->dbi;
41
+  my $row = $dbi->model('project')->select(id => [$user, $project])->one;
42
+  
43
+  return $row ? 1 : 0;
44
+}
45
+
46
+sub _exists_rep {
47
+  my ($self, $user, $project) = @_;
48
+  
49
+  my $rep = $self->app->git->rep($user, $project);
50
+  
51
+  return -e $rep;
52
+}
53
+
54
+sub _rename_project {
55
+  my ($self, $user, $project, $renamed_project) = @_;
56
+  
57
+  my $dbi = $self->app->dbi;
58
+  
59
+  croak "Invalid parameters"
60
+    unless defined $user && defined $project && defined $renamed_project;
61
+  
62
+  $dbi->model('project')->update({name => $renamed_project}, id => [$user, $project]);
63
+}
64
+
65
+sub _rename_rep {
66
+  my ($self, $user, $project, $renamed_project) = @_;
67
+  
68
+  croak "Invalid user name or project"
69
+    unless defined $user && defined $project && defined $renamed_project;
70
+  my $rep = $self->app->git->rep($user, $project);
71
+  my $renamed_rep = $self->app->git->rep($user, $renamed_project);
72
+  
73
+  move($rep, $renamed_rep)
74
+    or croak "Can't move $rep to $renamed_rep: $!";
75
+}
76
+
36 77
 1;
+5 -1
templates/main/project.html.ep
... ...
@@ -153,7 +153,7 @@
153 153
         <h3>README</h3>
154 154
         <pre><%= $readme %></pre>
155 155
       </div>
156
-    % } elsif ($state eq 'init') {
156
+    % } elsif ($state eq 'init' && $logined) {
157 157
     
158 158
       <div class="text-center" style="margin-bottom:10px">
159 159
         <b>Create a new repository on the command line</b>
... ...
@@ -180,6 +180,10 @@ git push -u origin master</pre>
180 180
       <pre style="margin-bottom:30px">
181 181
 git remote add origin <%= $ssh_url %>
182 182
 git push -u origin master</pre>
183
+    % } else {
184
+      <div class="well text-center muted" style="margin-bottom:30px">
185
+        <b>Repositry is not yet created.</b>
186
+      </div>
183 187
     % }
184 188
   </div>
185 189
   
+1 -3
templates/main/settings.html.ep
... ...
@@ -1,6 +1,4 @@
1 1
 <%
2
-  use Gitprep::RepManager;
3
-
4 2
   my $api = gitprep_api;
5 3
   my $logined = $api->logined;
6 4
   my $user_is_valid = $logined && $user eq session('user_id');
... ...
@@ -36,7 +34,7 @@
36 34
       my $renamed_project = $data->{'renamed-project'};
37 35
       
38 36
       # Rename
39
-      my $manager = Gitprep::RepManager->new(c => $self);
37
+      my $manager = app->manager;
40 38
       my $error = $manager->rename_project($user, $project, $renamed_project);
41 39
       if (ref $error) {
42 40
         $self->render(json => {ok => 0, message => $error->{message}});