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
1
Merge Requests
1
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
nexedi
gitlab-ce
Commits
59b6de93
Commit
59b6de93
authored
Jan 30, 2013
by
Sato Hiroyuki
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improve overlap of lines in network graph
parent
7ba4f2dc
Changes
3
Hide 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 @
59b6de93
...
...
@@ -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 @
59b6de93
...
...
@@ -16,7 +16,6 @@ module Gitlab
@commits
=
collect_commits
@days
=
index_commits
@space
=
0
end
def
to_json
(
*
args
)
...
...
@@ -53,7 +52,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
|
...
...
@@ -61,6 +60,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
}
...
...
@@ -86,9 +86,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.
...
...
@@ -98,8 +151,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
...
...
@@ -116,7 +170,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
|
...
...
@@ -133,28 +187,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
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?
}
space
=
space_base
while
reserved
.
include?
(
space
)
do
space
+=
space_step
if
space
<=
0
then
space_step
*=
-
1
space
=
space_base
+
space_step
end
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 @
59b6de93
...
...
@@ -103,8 +103,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
({
...
...
@@ -115,9 +116,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
,
...
...
@@ -128,13 +131,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