<% # API my $api = gitprep_api; my $manager = app->manager; # Parameters my $op = param('op') || ''; my $user = param('user') || ''; # Authentication unless ($api->logined($user)) { $self->redirect_to('/'); return; } # Rename project my $git = app->git; my $errors; my $post = lc $self->req->method eq 'post'; if ($op eq 'rename-project' && $post) { # Validation my $params = $api->params; my $rule = [ 'to-project' => [ ['not_blank' => 'Repository name is empty.'], ['project_name' => 'Repository name contains invalid charactor.'] ] ]; my $vresult = app->vc->validate($params, $rule); if ($vresult->is_ok) { # Valida parameters my $data = $vresult->data; my $to_project = $data->{'to-project'}; # Rename if (app->manager->exists_project($user, $to_project)) { $errors = ["$to_project is already exists"]; } else { eval { app->manager->rename_project($user, $project, $to_project) }; if (my $e = $@) { app->log->error($e); $errors = ['Internal Error']; } else { flash(message => "Repository name is renamed to $to_project"); $self->redirect_to("/$user/$to_project/settings"); return; } } } else { $errors = $vresult->messages } } # Change description elsif ($op eq 'change-description' && $post) { my $description = param('description'); $description = '' unless defined $description; eval { $git->description($user, $project, $description) }; if (my $e = $@) { app->log->error("/$user/$project/settings?op=description: $e"); $errors = ['Internal Error']; } else { flash(message => 'Description is saved.'); $self->redirect_to('current'); return; } } # Change default branch elsif ($op eq 'default-branch' && $post) { my $default_branch = param('default-branch'); eval { app->manager->default_branch($user, $project, $default_branch) }; if (my $e = $@) { app->log->error("/$user/$project/settings?op=default-branch: $e"); $errors = ['Internal Error']; } else { flash(message => "Default branch is changed to $default_branch."); $self->redirect_to('current'); return; } } # Private repository elsif ($op eq 'private' && $post) { my $private = param('private') ? 1 : 0; eval { app->dbi->model('project')->update( {private => $private}, id => [$user, $project] ); }; if (my $e = $@) { app->log->error("/$user/$project/settings?op=private: $e"); $errors = ['Internal Error']; } else { my $message = 'Private status is saved. Repository is ' . ($private ? 'private' : 'public'); flash(message => $message); $self->redirect_to('current'); return; } } # Delete project elsif ($op eq 'delete-project' && $post) { my $user = param('user'); my $project = param('project'); eval { app->manager->delete_project($user, $project) }; if (my $e = $@) { app->log->error("/$user/$project/settings: $e"); $errors = ['Internal Error']; } else { flash(message => "Repository $project is deleted."); $self->redirect_to("/$user"); return; } } %> % layout 'common', title => 'Options'; %= javascript begin $(document).ready(function () { // Rename project $('#rename').on('click', function () { $('#form-rename-project').submit(); }); // Select default branch $('[name=default-branch]').on('change', function () { $('#form-default-branch').submit(); }); // Check matching deleted project $('input[name="deleted-project"]').on('keyup', function () { var deleted_project = $(this).val(); var project = "<%= $project %>"; if (deleted_project == project) { $('#delete').attr('class', 'btn btn-danger') .removeAttr('disabled'); } else { $('#delete').attr('class', 'btn btn-danger disabled') .attr('disabled', 'disabled'); } }); // Delete project $('#delete').on('click', function () { $('#form-delete-project').submit(); }); }); % end %= include '/include/header';
%= include '/include/errors', errors => $errors; %= include '/include/message', message => flash('message'); %= include '/include/project_header';

Settings

Repository Name
%= text_field 'to-project' => $project, style => 'margin-top:9px'; Rename
Description
% my $description = $git->description($user, $project); % $description = '' unless defined $description; %= text_field 'description' => $description, class => 'span8', style => 'margin-top:9px';
Default Branch % my $branches = $git->branches($user, $project); % my $branch_names = [map { $_->{name} } @$branches]; % my $default_branch = app->manager->default_branch($user, $project); % push @$branch_names, $default_branch unless @$branch_names; % param('default-branch', $default_branch); %= select_field 'default-branch' => $branch_names, style => 'margin-top:5px';
Make this repository private % my $private = app->manager->is_private_project($user, $project); % if ($private) { % param('private', 1); % } %= check_box 'private' => 1, style => 'margin-top:0px;margin-left:5px;margin-right:10px';

Danger Zone

Delete this repository
Once you delete a repository, there is no going back. Delete this repository %= hidden_field user => $user; %= hidden_field project => $project;
%= include '/include/footer';