Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
heptapod
heptapod
Commits
2738afaae7f4
Commit
2738afaa
authored
Jul 20, 2015
by
Jeff Stubler
Browse files
Add graphs showing commits ahead and behind default to branches page
parent
474e0d7092f9
Changes
6
Hide whitespace changes
Inline
Side-by-side
CHANGELOG
View file @
2738afaa
...
...
@@ -16,6 +16,7 @@
- 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)
...
...
app/assets/stylesheets/pages/commits.scss
View file @
2738afaa
...
...
@@ -113,3 +113,62 @@
}
}
}
.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
;
}
}
app/controllers/projects/branches_controller.rb
View file @
2738afaa
...
...
@@ -9,6 +9,12 @@
@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
...
...
app/models/project.rb
View file @
2738afaa
...
...
@@ -714,6 +714,8 @@
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
...
...
app/models/repository.rb
View file @
2738afaa
...
...
@@ -146,5 +146,15 @@
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
...
...
@@ -149,7 +159,14 @@
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,9 +175,15 @@
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
...
...
@@ -161,9 +184,19 @@
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 @@
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
...
...
app/views/projects/branches/_branch.html.haml
View file @
2738afaa
-
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
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment