Showing 4 changed files with 74 additions and 143 deletions
+64 -40
lib/Gitpub/Git.pm
... ...
@@ -132,27 +132,6 @@ sub fill_from_file_info {
132 132
   return $diff;
133 133
 }
134 134
 
135
-sub fill_projects {
136
-  my ($self, $home, $ps) = @_;
137
-  
138
-  # Fill project info
139
-  my @projects;
140
-  for my $project (@$ps) {
141
-    my (@activity) = $self->last_activity("$home/$project->{path}");
142
-    next unless @activity;
143
-    ($project->{age}, $project->{age_string}) = @activity;
144
-    if (!defined $project->{descr}) {
145
-      my $descr = $self->project_description("$home/$project->{path}") || '';
146
-      $project->{descr_long} = $descr;
147
-      $project->{descr} = $self->_chop_str($descr, 25, 5);
148
-    }
149
-
150
-    push @projects, $project;
151
-  }
152
-
153
-  return \@projects;
154
-}
155
-
156 135
 sub difftree {
157 136
   my ($self, $project, $cid, $parent, $parents) = @_;
158 137
   
... ...
@@ -330,6 +309,16 @@ sub project_description {
330 309
   return $description;
331 310
 }
332 311
 
312
+sub repository_description {
313
+  my ($self, $rep) = @_;
314
+  
315
+  # Description
316
+  my $file = "$rep/description";
317
+  my $description = $self->_slurp($file) || '';
318
+  
319
+  return $description;
320
+}
321
+
333 322
 sub last_activity {
334 323
   my ($self, $project) = @_;
335 324
   
... ...
@@ -387,25 +376,6 @@ sub project_urls {
387 376
   return \@urls;
388 377
 }
389 378
 
390
-sub projects {
391
-  my ($self, $home, %opt) = @_;
392
-  
393
-  my $filter = $opt{filter};
394
-  
395
-  # Projects
396
-  opendir my $dh, $self->enc($home)
397
-    or croak qq/Can't open directory $home: $!/;
398
-  my @projects;
399
-  while (my $project = readdir $dh) {
400
-    next unless $project =~ /\.git$/;
401
-    next unless $self->check_head_link("$home/$project");
402
-    next if defined $filter && $project !~ /\Q$filter\E/;
403
-    push @projects, { path => $project };
404
-  }
405
-
406
-  return \@projects;
407
-}
408
-
409 379
 sub references {
410 380
   my ($self, $project, $type) = @_;
411 381
   
... ...
@@ -430,6 +400,60 @@ sub references {
430 400
   return \%refs;
431 401
 }
432 402
 
403
+sub fill_repositories {
404
+  my ($self, $home, $ps) = @_;
405
+  
406
+  # Fill rep info
407
+  my @resp;
408
+  for my $rep (@$ps) {
409
+    my (@activity) = $self->last_activity("$home/$rep->{path}");
410
+    next unless @activity;
411
+    ($rep->{age}, $rep->{age_string}) = @activity;
412
+    if (!defined $rep->{descr}) {
413
+      my $descr = $self->repository_description("$home/$rep->{path}") || '';
414
+      $rep->{descr_long} = $descr;
415
+      $rep->{descr} = $self->_chop_str($descr, 25, 5);
416
+    }
417
+
418
+    push @resp, $rep;
419
+  }
420
+
421
+  return \@resp;
422
+}
423
+
424
+sub repositories {
425
+  my ($self, $dir, %opt) = @_;
426
+  
427
+  my $filter = $opt{filter};
428
+  
429
+  # Repositories
430
+  opendir my $dh, $self->enc($dir)
431
+    or croak qq/Can't open directory $dir: $!/;
432
+  my @reps;
433
+  while (my $rep = readdir $dh) {
434
+    next unless $rep =~ /\.git$/;
435
+    next unless $self->check_head_link("$dir/$rep");
436
+    next if defined $filter && $rep !~ /\Q$filter\E/;
437
+    my $rep_name = $rep;
438
+    $rep_name =~ s/\.git$//;
439
+    push @reps, { name => $rep_name, path => $rep };
440
+  }
441
+
442
+  # Fill repositroies information
443
+  for my $rep (@reps) {
444
+    my (@activity) = $self->last_activity("$dir/$rep->{path}");
445
+    next unless @activity;
446
+    ($rep->{age}, $rep->{age_string}) = @activity;
447
+    if (!defined $rep->{descr}) {
448
+      my $descr = $self->repository_description("$dir/$rep->{path}") || '';
449
+      $rep->{descr_long} = $descr;
450
+      $rep->{descr} = $self->_chop_str($descr, 25, 5);
451
+    }
452
+  }
453
+
454
+  return \@reps;
455
+}
456
+
433 457
 sub short_id {
434 458
   my ($self, $project) = (shift, shift);
435 459
   
+4 -54
lib/Gitpub/Main.pm
... ...
@@ -401,69 +401,19 @@ sub log {
401 401
   );
402 402
 };
403 403
 
404
-sub projects {
405
-  my $self = shift;
406
-  
407
-  # Parameters
408
-  my $home_ns = $self->param('home');
409
-  my $home = "/$home_ns";
410
-
411
-  # Git
412
-  my $git = $self->app->git;
413
-  
414
-  # Fill project information
415
-  my $projects = $git->projects($home);
416
-  $projects = $git->fill_projects($home, $projects);
417
-  
418
-  # Fill owner and HEAD commit id
419
-  for my $project (@$projects) {
420
-    my $pname = "$home/$project->{path}";
421
-    $project->{path_abs_ns} = "$home_ns/$project->{path}";
422
-    $project->{owner} = $git->project_owner($pname);
423
-    my $head_commit = $git->parse_commit($pname, 'HEAD');
424
-    $project->{head_id} = $head_commit->{id}
425
-  }
426
-  
427
-  # Render
428
-  $self->render(
429
-    home => $home,
430
-    home_ns => $home_ns,
431
-    projects => $projects
432
-  );
433
-}
434
-
435 404
 has 'root' => '/gitpub';
436 405
 
437 406
 sub repositories {
438 407
   my $self = shift;
439 408
 
440 409
   my $root = $self->root;
410
+  my $user = $self->param('user');
441 411
   
442
-  # Parameters
443
-  my $home_ns = 'gitpub/' . $self->param('user');
444
-  my $home = "/$home_ns";
445
-
446
-  # Git
447
-  my $git = $self->app->git;
448
-  
449
-  # Fill project information
450
-  my $projects = $git->projects($home);
451
-  $projects = $git->fill_projects($home, $projects);
452
-  
453
-  # Fill owner and HEAD commit id
454
-  for my $project (@$projects) {
455
-    my $pname = "$home/$project->{path}";
456
-    $project->{path_abs_ns} = "$home_ns/$project->{path}";
457
-    my $head_commit = $git->parse_commit($pname, 'HEAD');
458
-    $project->{head_id} = $head_commit->{id}
459
-  }
412
+  # Repositories
413
+  my $reps = $self->app->git->repositories("/$root/$user");
460 414
   
461 415
   # Render
462
-  $self->render(
463
-    home => $home,
464
-    home_ns => $home_ns,
465
-    projects => $projects
466
-  );
416
+  $self->render(reps => $reps);
467 417
 }
468 418
 
469 419
 sub snapshot {
-42
templates/main/projects.html.ep
... ...
@@ -1,42 +0,0 @@
1
-% layout 'common';
2
-  %= include '/include/header', title => 'Projects';
3
-  <table class="project_list">
4
-    <a href="<%= url_for '/' %>">home</a> &gt;
5
-    <a href="<%= url_for('projects', home => $home_ns) %>"><%= $home %></a>
6
-    <tr>
7
-      <th>Project</th>
8
-      <th>Description</th>
9
-      <th>Owner</th>
10
-      <th>Last Change</th>
11
-      <th></th>
12
-    </tr>
13
-    % my $toggle = 0;
14
-    % for my $project (@$projects) {
15
-      % my $pname = $project->{path};
16
-      % my $pname_ns = $project->{path_abs_ns};
17
-      <tr class="<%= $toggle++ ? 'light' : 'dark' %>">
18
-        <td>
19
-          <a class="list" href="<%= url_for('summary',  project => $pname_ns) %>">
20
-            <%= $project->{path} %>
21
-          </a>
22
-        </td>
23
-        <td>
24
-          <a class="list" title="<%= $project->{descr_long} %>" 
25
-              href="<%= url_for('summary',  project => $pname_ns) %>">
26
-            <%= $project->{descr} %>
27
-          </a>
28
-        </td>
29
-        <td><i><%= $project->{owner} %></i></td>
30
-        <td class="age2"><%= $project->{age_string} %></td>
31
-        <td class="link">
32
-          <a href="<%= url_for('summary',  project => $pname_ns) %>">summary</a> |
33
-          <a href="<%= url_for('shortlog', project => $pname_ns) %>">shortlog</a> |
34
-          <a href="<%= url_for('log', project => $pname_ns) %>">log</a> |
35
-          <a href="<%= url_for('tree', project => $pname_ns) %>">
36
-            tree
37
-          </a>
38
-        </td>
39
-      </tr>
40
-    % }
41
-  </table>
42
-  <div class="page_footer"></div>
+6 -7
templates/main/repositories.html.ep
... ...
@@ -10,19 +10,18 @@
10 10
       <th></th>
11 11
     </tr>
12 12
     % my $toggle = 0;
13
-    % for my $project (@$projects) {
14
-      % my $pname = $project->{path};
15
-      % my $pname_ns = $project->{path_abs_ns};
13
+    % for my $rep (@$reps) {
14
+      % my $pname = $rep->{name};
16 15
       <tr class="<%= $toggle++ ? 'light' : 'dark' %>">
17 16
         <td>
18
-          <a class="list" href="<%= url_for('tree',  project => $pname_ns) %>">
19
-            <%= $project->{path} %>
17
+          <a class="list" href="<%= url_for("/$user/$pname") %>">
18
+            <%= $rep->{name} %>
20 19
           </a>
21 20
         </td>
22 21
         <td>
23
-          <%= $project->{descr} %>
22
+          <%= $rep->{descr} %>
24 23
         </td>
25
-        <td class="age2"><%= $project->{age_string} %></td>
24
+        <td class="age2"><%= $rep->{age_string} %></td>
26 25
       </tr>
27 26
     % }
28 27
   </table>