<% # API my $api = gitprep_api; # Parameters my $user = param('user'); my $project = param('project'); my $op = param('op') || ''; my $display = param('display') || 'overview'; my $page = param('page') || 1; # Git my $git = $self->app->git; # Delete my $errors; if ($op eq 'delete' && lc $self->req->method eq 'post') { # Forbbiden unless ($api->logined($user)) { $self->redirect_to('/'); return; } # Parameters my $branch = param('branch'); # Validator my $vc = app->vc; # Validation result my $validation = $vc->validation; # "branch" if (!(defined $branch && length $branch)) { $validation->add_failed(branch => 'Branch name is empty'); } if ($validation->is_valid) { # Delete branch eval { $git->delete_branch(app->rep_info($user, $project), $branch) }; if (my $e = $@) { app->log->error(url_with . ": $e"); $errors = ['Internal Error']; } else { $self->flash(message => "Branch $branch is deleted."); $self->redirect_to; return; } } else { $errors = $validation->messages } } # Default branch my $default_branch_name = app->manager->default_branch($user, $project); my $default_branch = $git->branch($self->app->rep_info($user, $project), $default_branch_name); # Branches my $branch_types; my $branches_h = { default => [], active => [], stale => [], all => [] }; # Pagenation my $page_count = 20; my $skip = $page_count * ($page - 1); my $branches = $git->branches($self->app->rep_info($user, $project)); my $max = 0; my $active_count = 0; my $stale_count = 0; my $all_count = 0; for my $branch (@$branches) { $branch->{status} = $git->branch_status( $self->app->rep_info($user, $project), $default_branch->{name}, $branch->{name} ); $max = $branch->{status}{ahead} if $max < $branch->{status}{ahead}; $max = $branch->{status}{behind} if $max < $branch->{status}{behind}; if ($branch->{status}{ahead} > 100) { $branch->{status}{ahead_bar} = 100; } else { $branch->{status}{ahead_bar} = $branch->{status}{ahead}; } if ($branch->{status}{behind} > 100) { $branch->{status}{behind_bar} = 100; } else { $branch->{status}{behind_bar} = $branch->{status}{behind}; } $max = 100 if $max > 100; my $branch_type; if ($branch->{name} eq $default_branch_name) { $branch_type = 'default'; } elsif ($branch->{commit}{age} < 60 * 60 * 24 * (365 * 3)) { $branch_type = 'active'; } else { $branch_type = 'stale'; } if ($display eq 'overview') { if ($branch_type eq 'default') { push @{$branches_h->{default}}, $branch; } elsif ($branch_type eq 'active') { push @{$branches_h->{active}}, $branch; } elsif ($branch_type eq 'stale') { push @{$branches_h->{stale}}, $branch; } } elsif ($display eq 'active') { if ($branch_type eq 'active') { if ($active_count >= $skip && $active_count < $skip + $page_count) { push @{$branches_h->{active}}, $branch; } $active_count++; } } elsif ($display eq 'stale') { if ($branch_type eq 'stale') { if ($stale_count >= $skip && $stale_count < $skip + $page_count) { push @{$branches_h->{stale}}, $branch; } $stale_count++; } } elsif ($display eq 'all') { if ($all_count >= $skip && $all_count < $skip + $page_count) { push @{$branches_h->{all}}, $branch; } $all_count++; } } %> % layout 'common', title => "branches \x{30fb} $user/$project"; %= include '/include/header';
%= include '/include/errors', errors => $errors; %= include '/include/message', message => flash('message'); <% if ($display eq 'overview') { $branch_types = ['default', 'active', 'stale']; } elsif ($display eq 'active') { $branch_types = ['active']; } elsif ($display eq 'stale') { $branch_types = ['stale']; } elsif ($display eq 'all') { $branch_types = ['all']; } %> % for my $branch_type (@$branch_types) { % my $branches = $branches_h->{$branch_type}; % if (@$branches || $display ne 'overview') { % } % }
%= include '/include/footer';