gitprep / templates / main / project.html.ep /
3d8f311 11 years ago
1 contributor
179 lines | 4.928kb
<%
  my $state;

  # API
  my $api = gitprep_api;
  
  # Default revision
  my $rev = 'master';
  
  # Parameters
  my $user = param('user');
  my $project = param('project');
  my $object ||= param('object') || 'master/';

  # Git
  my $git = app->git;
  
  # Check exsitence
  my $desc;
  my $commits_number;
  my $readme;
  if ($git->branch_exists($user, $project)) {
    # Id and directory
    my ($id, $dir) = @{$git->parse_object($user, $project, $object)};
    
    # Tree id
    my $tid;
    my $commit = $git->parse_commit($user, $project, $id);
    if (defined $dir && $dir ne '') {
      $tid = $git->id_by_path($user, $project, $id, $dir, 'tree');
    }
    else { $tid = $commit->{tree} }
    $self->render_not_found unless defined $tid;

    # Commit log
    my $latest_commit_log = $git->latest_commit_log($user, $project, $rev);
    
    # Tree
    my $trees = $git->trees($user, $project, $tid, $rev);
    
    # Repository description
    $desc = $git->description($user, $project);
    
    # Commits number
    $commits_number = $git->commits_number($user, $project, $rev);
    
    # README
    $readme = $git->blob_plain($user, $project, $rev, 'README');
    
    # Variable for included template
    stash(
      commit => $commit,
      latest_commit_log => $latest_commit_log,
      trees => $trees,
      dir => $dir,
      rev => $rev,
      title => "$user/$project"
    );
    
    $state = 'display';
  }
  else { $state = 'init' }
%>

% layout 'common';

  % my $logined = $api->logined;

  %= javascript begin
    $(document).ready(function () {
      var http_rep_url = '<%= url_for("$user/$project.git")->to_abs %>';
      % my $execute_user = getpwuid($>);
      % my $rep = $git->rep($user, $project);
      % my $ssh_port = config->{basic}{ssh_port} || '';
      
      var logined = <%= $logined ? 'true' : 'false' %>;
      var ssh_rep_url = '';
      if (logined) {
        ssh_rep_url = '<%= url_for($rep)->to_abs->scheme('ssh')->userinfo($execute_user)->port($ssh_port) %>';
      }
      
      // Click HTTP button
      $('#btn_http').on('click', function () {
        $('#rep_url').val(http_rep_url);
        $('#access').text('Read-only');
      });
      
      // Click SSH button
      $('#btn_ssh').on('click', function () {
        $('#rep_url').val(ssh_rep_url);
        $('#access').text('Read-write');
      });

      // Initialize
      if (logined) {
        $('#btn_ssh').trigger('click');
      }
      else {
        $('#btn_http').trigger('click');
      }
    });
  % end
  
  %= include '/include/header';
  
  <div class="container">
    %= include '/include/project_header';
    
    % if ($state eq 'display') {
      <h4 style="margin-top:0px">
        <%= $desc %>
      </h4>
      
      <div class="border-gray" style="padding:0 5px;margin-bottom:10px">
        <a class="btn" href="<%= url_for("/$user/$project/archive/master.zip") %>">
          <i class="icon-arrow-down"></i>ZIP
        </a>
        <div class="input-append" style="margin-top:10px">
          <div class="btn-group" data-toggle="buttons-radio">
            <button class="btn" id="btn_http" style="border-radius:0">HTTP</button>
            % if ($logined) {
              <button class="btn" id="btn_ssh" style="border-radius:0">SSH</button>
            % }
          </div>
          <input class="span8" id="rep_url" type="text" style="border-radius:0;">
        </div>
        <b><span id="access"></span></b> access
      </div>
      
      %= include '/include/code_menu', display => 'files';
      
      <div class="row">
        <div class="span6">
          <a href="<%= url_for %>"><%= $project %></a>
        </div>
        <div class="span6 text-right">
          <a href="<%= url_for("/$user/$project/commits/master") %>">
            <%= $commits_number %> commits
          </a>
        </div>
      </div>
      
      %= include '/include/tree';
      
      <div>
        <h3>README</h3>
        <pre><%= $readme %></pre>
      </div>
    % } elsif ($state eq 'init') {
    
      <div class="text-center" style="margin-bottom:10px">
        <b>Create a new repository on the command line</b>
      </div>
      
      % my $url = url_for->to_abs;
      % my $ssh_port = config->{basic}{ssh_port};
      % my $rep_home = app->git->rep_home;
      % my $ssh_url = 'ssh://kimoto@' . $url->host
      %   . ($ssh_port ? ":$ssh_port" : '') . "$rep_home/$user/$project.git";
      
      <pre style="margin-bottom:30px">
touch README
git init
git add README
git commit -m "first commit"
git remote add origin <%= $ssh_url %>
git push -u origin master</pre>
      
      <div class="text-center" style="margin-bottom:10px">
        <b>Push an existing repository from the command line</b>
      </div>
      
      <pre style="margin-bottom:30px">
git remote add origin <%= $ssh_url %>
git push -u origin master</pre>
    % }
  </div>
  
  %= include '/include/footer';