Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Tatuya Kamada
gitlab-ce
Commits
d46cb3fd
Commit
d46cb3fd
authored
Jan 30, 2013
by
Dmitriy Zaporozhets
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2847 from hiroponz/improve-overlap-lines
Improve overlap of lines in network graph
parents
8c50707d
59b6de93
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
91 additions
and
26 deletions
+91
-26
lib/gitlab/graph/commit.rb
lib/gitlab/graph/commit.rb
+3
-1
lib/gitlab/graph/json_builder.rb
lib/gitlab/graph/json_builder.rb
+68
-20
vendor/assets/javascripts/branch-graph.js
vendor/assets/javascripts/branch-graph.js
+20
-5
No files found.
lib/gitlab/graph/commit.rb
View file @
d46cb3fd
...
...
@@ -5,12 +5,13 @@ module Gitlab
class
Commit
include
ActionView
::
Helpers
::
TagHelper
attr_accessor
:time
,
:space
,
:refs
attr_accessor
:time
,
:space
,
:refs
,
:parent_spaces
def
initialize
(
commit
)
@_commit
=
commit
@time
=
-
1
@space
=
0
@parent_spaces
=
[]
end
def
method_missing
(
m
,
*
args
,
&
block
)
...
...
@@ -28,6 +29,7 @@ module Gitlab
}
h
[
:time
]
=
time
h
[
:space
]
=
space
h
[
:parent_spaces
]
=
parent_spaces
h
[
:refs
]
=
refs
.
collect
{
|
r
|
r
.
name
}.
join
(
" "
)
unless
refs
.
nil?
h
[
:id
]
=
sha
h
[
:date
]
=
date
...
...
lib/gitlab/graph/json_builder.rb
View file @
d46cb3fd
...
...
@@ -17,7 +17,6 @@ module Gitlab
@commits
=
collect_commits
@days
=
index_commits
@space
=
0
end
def
to_json
(
*
args
)
...
...
@@ -54,7 +53,7 @@ module Gitlab
#
# @return [Array<TimeDate>] list of commit dates corelated with time on commits
def
index_commits
days
,
heads
=
[],
[]
days
,
heads
,
times
=
[],
[],
[]
map
=
{}
commits
.
reverse
.
each_with_index
do
|
c
,
i
|
...
...
@@ -62,6 +61,7 @@ module Gitlab
days
[
i
]
=
c
.
committed_date
map
[
c
.
id
]
=
c
heads
+=
c
.
refs
unless
c
.
refs
.
nil?
times
[
i
]
=
c
end
heads
.
select!
{
|
h
|
h
.
is_a?
Grit
::
Head
or
h
.
is_a?
Grit
::
Remote
}
...
...
@@ -87,9 +87,62 @@ module Gitlab
end
end
# find parent spaces for not overlap lines
times
.
each
do
|
c
|
c
.
parent_spaces
.
concat
(
find_free_parent_spaces
(
c
,
map
,
times
))
end
days
end
def
find_free_parent_spaces
(
commit
,
map
,
times
)
spaces
=
[]
commit
.
parents
.
each
do
|
p
|
if
map
.
include?
(
p
.
id
)
then
parent
=
map
[
p
.
id
]
range
=
if
commit
.
time
<
parent
.
time
then
commit
.
time
..
parent
.
time
else
parent
.
time
..
commit
.
time
end
space
=
if
commit
.
space
>=
parent
.
space
then
find_free_parent_space
(
range
,
map
,
parent
.
space
,
1
,
commit
.
space
,
times
)
else
find_free_parent_space
(
range
,
map
,
parent
.
space
,
-
1
,
parent
.
space
,
times
)
end
mark_reserved
(
range
,
space
)
spaces
<<
space
end
end
spaces
end
def
find_free_parent_space
(
range
,
map
,
space_base
,
space_step
,
space_default
,
times
)
if
is_overlap?
(
range
,
times
,
space_default
)
then
find_free_space
(
range
,
map
,
space_base
,
space_step
)
else
space_default
end
end
def
is_overlap?
(
range
,
times
,
overlap_space
)
range
.
each
do
|
i
|
if
i
!=
range
.
first
&&
i
!=
range
.
last
&&
times
[
i
].
space
==
overlap_space
then
return
true
;
end
end
false
end
# Add space mark on commit and its parents
#
# @param [Graph::Commit] the commit object.
...
...
@@ -99,8 +152,9 @@ module Gitlab
if
leaves
.
empty?
return
end
@space
=
find_free_space
(
leaves
,
map
)
leaves
.
each
{
|
l
|
l
.
space
=
@space
}
time_range
=
leaves
.
last
.
time
..
leaves
.
first
.
time
space
=
find_free_space
(
time_range
,
map
,
1
,
2
)
leaves
.
each
{
|
l
|
l
.
space
=
space
}
# and mark it as reserved
min_time
=
leaves
.
last
.
time
parents
=
leaves
.
last
.
parents
.
collect
...
...
@@ -117,7 +171,7 @@ module Gitlab
else
max_time
=
parent_time
-
1
end
mark_reserved
(
min_time
..
max_time
,
@
space
)
mark_reserved
(
min_time
..
max_time
,
space
)
# Visit branching chains
leaves
.
each
do
|
l
|
...
...
@@ -134,28 +188,22 @@ module Gitlab
end
end
def
find_free_space
(
leaves
,
map
)
time_range
=
leaves
.
last
.
time
..
leaves
.
first
.
time
def
find_free_space
(
time_range
,
map
,
space_base
,
space_step
)
reserved
=
[]
for
day
in
time_range
reserved
+=
@_reserved
[
day
]
end
space
=
base_space
(
leaves
,
map
)
while
(
reserved
.
include?
space
)
||
(
space
==
@space
)
do
space
+=
1
end
space
space
=
space_base
while
reserved
.
include?
(
space
)
do
space
+=
space_step
if
space
<=
0
then
space_step
*=
-
1
space
=
space_base
+
space_step
end
def
base_space
(
leaves
,
map
)
parents
=
[]
leaves
.
each
do
|
l
|
parents
.
concat
l
.
parents
.
collect
.
select
{
|
p
|
map
.
include?
p
.
id
and
map
[
p
.
id
].
space
.
nonzero?
}
end
space
=
parents
.
map
{
|
p
|
map
[
p
.
id
].
space
}.
max
||
0
space
+=
1
space
end
# Takes most left subtree branch of commits
...
...
vendor/assets/javascripts/branch-graph.js
View file @
d46cb3fd
...
...
@@ -104,8 +104,9 @@
for
(
i
=
0
;
i
<
this
.
commitCount
;
i
++
)
{
var
x
=
offsetX
+
20
*
this
.
commits
[
i
].
time
,
y
=
offsetY
+
20
*
this
.
commits
[
i
].
space
,
c
;
,
y
=
offsetY
+
10
*
this
.
commits
[
i
].
space
,
c
,
ps
;
// Draw dot
r
.
circle
(
x
,
y
,
3
).
attr
({
...
...
@@ -116,9 +117,11 @@
// Draw lines
for
(
var
j
=
0
,
jj
=
this
.
commits
[
i
].
parents
.
length
;
j
<
jj
;
j
++
)
{
c
=
this
.
preparedCommits
[
this
.
commits
[
i
].
parents
[
j
][
0
]];
ps
=
this
.
commits
[
i
].
parent_spaces
[
j
];
if
(
c
)
{
var
cx
=
offsetX
+
20
*
c
.
time
,
cy
=
offsetY
+
20
*
c
.
space
;
,
cy
=
offsetY
+
10
*
c
.
space
,
psy
=
offsetY
+
10
*
ps
;
if
(
c
.
space
==
this
.
commits
[
i
].
space
)
{
r
.
path
([
"
M
"
,
x
,
y
,
...
...
@@ -129,13 +132,25 @@
});
}
else
if
(
c
.
space
<
this
.
commits
[
i
].
space
)
{
r
.
path
([
"
M
"
,
x
-
5
,
y
+
.
0001
,
"
l-5-2,0,4,5,-2C
"
,
x
-
5
,
y
,
x
-
17
,
y
+
2
,
x
-
20
,
y
-
5
,
"
L
"
,
cx
,
y
-
5
,
cx
,
cy
])
r
.
path
([
"
M
"
,
x
-
5
,
y
,
"
l-5-2,0,4,5,-2
"
,
"
L
"
,
x
-
10
,
y
,
"
L
"
,
x
-
15
,
psy
,
"
L
"
,
cx
+
5
,
psy
,
"
L
"
,
cx
,
cy
])
.
attr
({
stroke
:
this
.
colors
[
this
.
commits
[
i
].
space
],
"
stroke-width
"
:
2
});
}
else
{
r
.
path
([
"
M
"
,
x
-
3
,
y
+
6
,
"
l-4,3,4,2,0,-5L
"
,
x
-
10
,
y
+
20
,
"
L
"
,
x
-
10
,
cy
,
cx
,
cy
])
r
.
path
([
"
M
"
,
x
-
3
,
y
+
6
,
"
l-4,3,4,2,0,-5
"
,
"
L
"
,
x
-
5
,
y
+
10
,
"
L
"
,
x
-
10
,
psy
,
"
L
"
,
cx
+
5
,
psy
,
"
L
"
,
cx
,
cy
])
.
attr
({
stroke
:
this
.
colors
[
c
.
space
],
"
stroke-width
"
:
2
...
...
Write
Preview
Markdown
is supported
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