... | ... |
@@ -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'); |
... | ... |
@@ -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 |
|
... | ... |
@@ -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 |
|
... | ... |
@@ -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; |
... | ... |
@@ -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,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}}); |