GitLab wurde erfolgreich aktualisiert. Dank regelmäßiger Updates bleibt das THM GitLab sicher und Sie profitieren von den neuesten Funktionen. Danke für Ihre Geduld.

Commit c843722d authored by Jeff Stubler's avatar Jeff Stubler

Add graphs showing commits ahead and behind default to branches page

parent 8f75200d
......@@ -16,6 +16,7 @@ v 8.2.0 (unreleased)
- Fix: 500 error returned if destroy request without HTTP referer (Kazuki Shimizu)
- Remove deprecated CI events from project settings page
- Use issue editor as cross reference comment author when issue is edited with a new mention.
- Add graphs of commits ahead and behind default branch (Jeff Stubler)
v 8.1.1
- Fix cloning Wiki repositories via HTTP (Stan Hu)
......
......@@ -113,3 +113,62 @@ li.commit {
}
}
}
.divergence-graph {
padding: 12px 12px 0 0;
float: right;
.graph-side {
position: relative;
width: 80px;
height: 22px;
padding: 5px 0 13px;
float: left;
.bar {
position: absolute;
height: 4px;
background-color: #ccc;
}
.bar-behind {
right: 0;
border-radius: 3px 0 0 3px;
}
.bar-ahead {
left: 0;
border-radius: 0 3px 3px 0;
}
.count {
padding-top: 6px;
padding-bottom: 0px;
font-size: 12px;
color: #333;
display: block;
}
.count-behind {
padding-right: 4px;
text-align: right;
}
.count-ahead {
padding-left: 4px;
text-align: left;
}
}
.graph-separator {
position: relative;
width: 1px;
height: 18px;
margin: 5px 0 0;
float: left;
background-color: #ccc;
}
}
......@@ -9,6 +9,12 @@ def index
@sort = params[:sort] || 'name'
@branches = @repository.branches_sorted_by(@sort)
@branches = Kaminari.paginate_array(@branches).page(params[:page]).per(PER_PAGE)
@max_commits = @branches.reduce(0) do
|memo, branch|
diverging_commit_counts = repository.diverging_commit_counts(branch)
[memo, diverging_commit_counts[:behind], diverging_commit_counts[:ahead]].max
end
end
def recent
......
......@@ -714,6 +714,8 @@ def unarchive!
end
def change_head(branch)
# Cached divergent commit counts are based on repository head
repository.expire_branch_cache
gitlab_shell.update_repository_head(self.path_with_namespace, branch)
reload_default_branch
end
......
......@@ -146,10 +146,27 @@ def commit_count
def size
cache.fetch(:size) { raw_repository.size }
end
def diverging_commit_counts(branch)
branch_cache_key = ('diverging_commit_counts_' + branch.name).to_sym
cache.fetch(branch_cache_key) do
number_commits_behind = commits_between(branch.name, root_ref).size
number_commits_ahead = commits_between(root_ref, branch.name).size
{ behind: number_commits_behind, ahead: number_commits_ahead }
end
end
def cache_keys
%i(size branch_names tag_names commit_count
readme version contribution_guide changelog license)
%i(size branch_names tag_names commit_count readme
contribution_guide changelog license)
end
def branch_cache_keys
branches.map do
|branch|
('diverging_commit_counts_' + branch.name).to_sym
end
end
def build_cache
......@@ -158,12 +175,28 @@ def build_cache
send(key)
end
end
branches.each do |branch|
unless cache.exist?(('diverging_commit_counts_' + branch.name).to_sym)
send(:diverging_commit_counts, branch)
end
end
end
def expire_cache
cache_keys.each do |key|
cache.expire(key)
end
branches.each do |branch|
cache.expire(('diverging_commit_counts_' + branch.name).to_sym)
end
end
def expire_branch_cache
branches.each do |branch|
cache.expire(('diverging_commit_counts_' + branch.name).to_sym)
end
end
def rebuild_cache
......@@ -171,6 +204,11 @@ def rebuild_cache
cache.expire(key)
send(key)
end
branches.each do |branch|
cache.expire(('diverging_commit_counts_' + branch.name).to_sym)
send(:diverging_commit_counts, branch)
end
end
def lookup_cache
......
- commit = @repository.commit(branch.target)
- bar_graph_width_factor = @max_commits > 0 ? 100.0/@max_commits : 0
- number_commits_behind = @repository.diverging_commit_counts(branch)[:behind]
- number_commits_ahead = @repository.diverging_commit_counts(branch)[:ahead]
%li(class="js-branch-#{branch.name}")
%div
= link_to namespace_project_tree_path(@project.namespace, @project, branch.name) do
......@@ -29,6 +32,17 @@
= link_to namespace_project_branch_path(@project.namespace, @project, branch.name), class: 'btn btn-grouped btn-xs btn-remove remove-row', method: :delete, data: { confirm: 'Removed branch cannot be restored. Are you sure?'}, remote: true do
= icon("trash-o")
- if branch.name != @repository.root_ref
.divergence-graph{ :title => "#{number_commits_ahead} commits ahead, #{number_commits_behind} commits behind #{@repository.root_ref}" }
.graph-side
.bar.bar-behind{ :style => "width: #{number_commits_behind * bar_graph_width_factor}%" }
%span.count.count-behind= number_commits_behind
.graph-separator
.graph-side
.bar.bar-ahead{ :style => "width: #{number_commits_ahead * bar_graph_width_factor}%" }
%span.count.count-ahead= number_commits_ahead
- if commit
= render 'projects/branches/commit', commit: commit, project: @project
- else
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment