Showing 3 changed files with 34 additions and 11 deletions
+3 -2
lib/Gitprep.pm
... ...
@@ -71,7 +71,7 @@ sub startup {
71 71
   my $dbi = DBIx::Custom->connect(
72 72
     dsn => "dbi:SQLite:database=$db_file",
73 73
     connector => 1,
74
-    option => {sqlite_unicode => 1}
74
+    option => {sqlite_unicode => 1, sqlite_use_immediate_transaction => 1}
75 75
   );
76 76
   $self->dbi($dbi);
77 77
   
... ...
@@ -81,7 +81,8 @@ sub startup {
81 81
   # Model
82 82
   my $models = [
83 83
     {table => 'user', primary_key => 'id'},
84
-    {table => 'project', primary_key => ['user_id', 'name']}
84
+    {table => 'project', primary_key => ['user_id', 'name']},
85
+    {table => 'number', primary_key => 'key'}
85 86
   ];
86 87
   $dbi->create_model($_) for @$models;
87 88
 
+30 -8
lib/Gitprep/RepManager.pm
... ...
@@ -181,22 +181,32 @@ sub _create_user_dir {
181 181
 sub exists_project { shift->_exists_project(@_) }
182 182
 
183 183
 sub fork_project {
184
-  my ($self, $login_user, $user, $project) = @_;
184
+  my ($self, $user, $original_user, $project) = @_;
185 185
   
186
+  # DBI
186 187
   my $dbi = $self->app->dbi;
187 188
   
189
+  # Fork project
188 190
   my $error;
189 191
   eval {
190 192
     $dbi->connector->txn(sub {
191 193
       
194
+      # Original project id
195
+      my $original_pid = $dbi->model('project')
196
+        ->select('original_pid', id => [$original_user, $project])->value;
197
+      
198
+      croak "Can't get original project id"
199
+        unless defined $original_pid && $original_pid > 0;
200
+      
192 201
       # Create project
193 202
       eval {
194 203
         $self->_create_project(
195
-          $login_user,
204
+          $user,
196 205
           $project,
197 206
           {
198
-            original_user => $user,
199
-            original_project => $project
207
+            original_user => $original_user,
208
+            original_project => $project,
209
+            original_pid => $original_pid
200 210
           }
201 211
         );
202 212
       };
... ...
@@ -204,7 +214,7 @@ sub fork_project {
204 214
       
205 215
       # Create repository
206 216
       eval {
207
-        $self->_fork_rep($user, $project, $login_user, $project);
217
+        $self->_fork_rep($original_user, $project, $user, $project);
208 218
       };
209 219
       croak $error = $@ if $@;
210 220
     });
... ...
@@ -318,14 +328,15 @@ EOS
318 328
   my $project_columns = [
319 329
     "default_branch not null default 'master'",
320 330
     "original_user not null default ''",
321
-    "original_project not null default ''"
331
+    "original_project not null default ''",
332
+    "original_pid integer not null default 0"
322 333
   ];
323 334
   for my $column (@$project_columns) {
324 335
     eval { $dbi->execute("alter table project add column $column") };
325 336
   }
326 337
 
327 338
   # Check project table
328
-  eval { $dbi->select([qw/default_branch original_user original_project/], table => 'project') };
339
+  eval { $dbi->select([qw/default_branch original_user original_project original_pid/], table => 'project') };
329 340
   if ($@) {
330 341
     my $error = "Can't create project table properly: $@";
331 342
     $self->app->log->error($error);
... ...
@@ -377,8 +388,19 @@ sub _create_project {
377 388
   my ($self, $user, $project, $params) = @_;
378 389
   $params ||= {};
379 390
   
391
+  # DBI
392
+  my $dbi = $self->app->dbi;
393
+  
380 394
   # Create project
381
-  $self->app->dbi->model('project')->insert($params, id => [$user, $project]);
395
+  $dbi->connector->txn(sub {
396
+    unless (defined $params->{original_pid}) {
397
+      my $number = $dbi->model('number')->select('value', where => {key => 'original_pid'})->value;
398
+      $number++;
399
+      $dbi->model('number')->update({value => $number}, where => {key => 'original_pid'});
400
+      $params->{original_pid} = $number;
401
+    }
402
+    $dbi->model('project')->insert($params, id => [$user, $project]);
403
+  });
382 404
 }
383 405
 
384 406
 sub _create_rep {
+1 -1
templates/user.html.ep
... ...
@@ -25,7 +25,7 @@
25 25
       % }
26 26
     
27 27
       <ul class="breadcrumb" style="margin-top:10px">
28
-        <li><a href="<%= url_for('/') %>">Home</a></li>
28
+        <li><a href="<%= url_for('/') %>"><i class="icon-home"></i></a></li>
29 29
         /
30 30
         <li><a href="<%= url_for("/$user") %>"><%= $user %></a></li>
31 31
       </ul>