gitprep / templates / include / commit_body.html.ep /
97bccf3 7 years ago
1 contributor
100 lines | 2.591kb
<%
  # Parameters
  my $rep_info = stash('rep_info') // app->rep_info($user, $project);
  my $rev = stash('rev');
  my $from_rev = stash('from_rev');

  my $param_ignore_space_change = param('w');
  my $ignore_space_change;
  if ($param_ignore_space_change) {
    $ignore_space_change = 1;
  }
  else {
    $ignore_space_change = app->dbi->model('project')->select(
      'ignore_space_change',
      where => {user_id => $user, name => $project}
    )->value;
  }
  
  # Git
  my $git = app->git;
  
  # Diff tree
  my $diff_trees = $git->diff_tree(
    $rep_info,
    $rev,
    $from_rev,
    {ignore_space_change => $ignore_space_change}
  );

  my $diff_trees_h = {};
  for my $diff_tree (@$diff_trees) {
    my $file = $diff_tree->{to_file};
    $file = $diff_tree->{from_file} unless defined $file;
    $diff_trees_h->{$file} = $diff_tree if defined $file;
  }
  
  # Get blob diffs
  my $blob_diffs = $git->blob_diffs(
    $rep_info,
    $from_rev,
    $rev,
    $diff_trees,
    {ignore_space_change => $ignore_space_change}
  ) || [];
  
  my $blob_diffs_h = {};
  my $total_add_line_count = 0;
  my $total_delete_line_count = 0;
  for my $blob_diff (@$blob_diffs) {
    my $file = $blob_diff->{file};
    $blob_diffs_h->{$file} = $blob_diff;
    $total_add_line_count += $blob_diff->{add_line_count};
    $total_delete_line_count += $blob_diff->{delete_line_count};
  }
%>

%= javascript begin
  $(document).ready(function () {
  
    // Diff Stats Button
    var diff_tree_show = false;
    var original_diff_stats_btn_text = $('#diff-stats-btn').text();
    
    $('#diff-stats-btn').on('click', function () {
      if (diff_tree_show) {
        $(this).text(original_diff_stats_btn_text);
        $('#diff_tree').css('display', 'none');
      }
      else {
        $('#diff_tree').css('display', 'block');
      }
      diff_tree_show = !diff_tree_show;
    });
  });
% end

<div class="commit-changes">
  <div>
    Showing <b><a id="diff-stats-btn" href="javascript:void;"><%= @$diff_trees %> changed files</a></b>
    with
    <b><%= $total_add_line_count %> additions</b>
    and
    <b><%= $total_delete_line_count %> deletions</b>
  </div>
</div>

<div id="diff_tree" style="display:none">
  <%= include '/include/diff_tree', id => $rev, from_id => $from_rev,
    diff_trees => $diff_trees %>
</div>

% my $num = 0;
% for my $file (sort keys %$diff_trees_h) {
  <div id="diff-<%= $num %>">
    % my $blob_diff = $blob_diffs_h->{$file};
    %= include '/include/blob_diff_body', blob_diff => $blob_diff, diff_tree => $diff_trees_h->{$file};
  </div>
  % $num++;
% }
</div>