<% my $user = param('user'); my $project = param('project'); my $branch = param('rev1'); my $rev2_abs = param('rev2_abs'); my ($remote_user, $remote_project, $remote_branch) = split /\//, $rev2_abs, 3; my $commits = app->git->get_commits($user, $project, $branch, 100); my $remote_commits = app->git->get_commits( $remote_user, $remote_project, $remote_branch, 100 ); my $merged_commits_h = {}; for my $commit (@$commits) { my $id = $commit->{id}; $merged_commits_h->{$id} ||= {}; $merged_commits_h->{$id}{age} = $commit->{age}; $merged_commits_h->{$id}{age_string_date} = $commit->{age_string_date}; $merged_commits_h->{$id}{title} = $commit->{title}; $merged_commits_h->{$id}{type} = 'local'; } for my $commit (@$remote_commits) { my $id = $commit->{id}; if ($merged_commits_h->{$id}) { $merged_commits_h->{$id}{type} = 'same'; } else { $merged_commits_h->{$id} ||= {}; $merged_commits_h->{$id}{age} = $commit->{age}; $merged_commits_h->{$id}{age_string_date} = $commit->{age_string_date}; $merged_commits_h->{$id}{title} = $commit->{title}; $merged_commits_h->{$id}{type} = 'remote'; } } my $merged_commits = []; for my $id ( sort { $merged_commits_h->{$b}{age} <=> $merged_commits_h->{$a}{age}} keys %$merged_commits_h) { my $commit = {%{$merged_commits_h->{$id}}}; $commit->{id} = $id; push @$merged_commits, $commit; } %> % layout 'common'; %= include 'include/header'; %= javascript begin $('document').ready(function () { // Scroll to right $('#graph').scrollLeft(1000); }); % end

Graph

Compare 100 commits.
<%= "$user / $project / $branch" %>
% for my $type (qw/local same remote/) { % for (my $i = 0; $i < @$merged_commits; $i++) { % my $commit = $merged_commits->[$i]; % my $color % = $type eq 'local' ? 'blue' % : $type eq 'same' ? 'gray' % : 'green'; % if ($commit->{type} eq $type) { % } else { % } % } % }
{id}") %>" title="<%= "$commit->{title}($commit->{age_string_date})" %>">● -
<%= "$remote_user / $remote_project / $remote_branch" %>
%= include '/include/footer';