Showing 3 changed files with 19 additions and 18 deletions
+2
CHANGES
... ...
@@ -1,3 +1,5 @@
1
+1.7
2
+  - allow . as project name.
1 3
 1.6
2 4
   - fix bug that can't create collaborator more than one.
3 5
   - support time zone.
+11 -18
lib/Gitprep.pm
... ...
@@ -9,6 +9,7 @@ use Gitprep::Git;
9 9
 use Gitprep::Manager;
10 10
 use Scalar::Util 'weaken';
11 11
 use Validator::Custom;
12
+use Mojolicious::Plugin::AutoRoute::Util 'template';
12 13
 
13 14
 # Digest::SHA loading to Mojo::Util if not loaded
14 15
 {
... ...
@@ -131,25 +132,20 @@ sub startup {
131 132
     user_name => sub {
132 133
       my $value = shift;
133 134
       
134
-      return ($value || '') =~ /^[a-zA-Z0-9_\-]+$/
135
+      return ($value || '') =~ /^[a-zA-Z0-9_\-]+$/;
135 136
     },
136 137
     project_name => sub {
137 138
       my $value = shift;
138
-      
139
-      return ($value || '') =~ /^[a-zA-Z0-9_\-]+$/
139
+      return 0 unless defined $value;
140
+      return 0 if $value eq '.' || $value eq '..';
141
+
142
+      return ($value || '') =~ /[a-zA-Z0-9_\-\.]+$/;
140 143
     }
141 144
   );
142 145
   
143 146
   # Basic auth plugin
144 147
   $self->plugin('BasicAuth');
145 148
 
146
-  # Routes
147
-  sub template {
148
-    my $template = shift;
149
-    
150
-    return sub { shift->render($template, , 'mojo.maybe' => 1) };
151
-  }
152
-  
153 149
   {
154 150
     my $r = $self->routes;
155 151
 
... ...
@@ -186,16 +182,14 @@ sub startup {
186 182
       
187 183
       # Auto routes
188 184
       $self->plugin('AutoRoute', route => $r);
189
-
185
+      
190 186
       # Custom routes
191 187
       {
192
-        my $id_re = qr/[a-zA-Z0-9_-]+/;
193
-        
194 188
         # User
195
-        my $r = $r->route('/:user', user => $id_re);
189
+        my $r = $r->route('/:user');
196 190
         {
197 191
           # Home
198
-          $r->get('/' => template '/user');
192
+          $r->get('/' => [format => 0] => template '/user');
199 193
           
200 194
           # Settings
201 195
           $r->get('/_settings' => template '/user-settings');
... ...
@@ -203,8 +197,7 @@ sub startup {
203 197
 
204 198
         # Smart HTTP
205 199
         {
206
-          
207
-          my $r = $r->route('/(:project).git', project => $id_re);
200
+          my $r = $r->route('/(#project).git');
208 201
           
209 202
           {
210 203
             my $r = $r->under(sub {
... ...
@@ -267,7 +260,7 @@ sub startup {
267 260
                 
268 261
         # Project
269 262
         {
270
-          my $r = $r->route('/:project', project => $id_re);
263
+          my $r = $r->route('/#project');
271 264
           
272 265
           {
273 266
             my $r = $r->under(sub {
+6
xt/user.t
... ...
@@ -314,6 +314,12 @@ note 'Profile';
314 314
     ok(-f "$rep_home/kimoto1/t1.git/git-daemon-export-ok");
315 315
     ok(-f "$rep_home/kimoto1/t1.git/hooks/post-update");
316 316
 
317
+    # Create repository(first character is .)
318
+    $t->post_ok('/_new?op=create', form => {project => '.dot', description => 'Dot'});
319
+    $t->content_like(qr/Create a new repository on the command line/);
320
+    $t->content_like(qr/\.dot\.git/);
321
+    $t->content_like(qr/Dot/);
322
+
317 323
     # Create repository(with readme)
318 324
     $t->post_ok('/_new?op=create', form => {project => 't2', description => 'Hello', readme => 1});
319 325
     $t->content_like(qr/first commit/);