707 lines
No EOL
36 KiB
HTML
707 lines
No EOL
36 KiB
HTML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||
<head>
|
||
<title>Gitlab::Graph::JsonBuilder</title>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||
<link rel="stylesheet" href="../../../css/reset.css" type="text/css" media="screen" />
|
||
<link rel="stylesheet" href="../../../css/main.css" type="text/css" media="screen" />
|
||
<link rel="stylesheet" href="../../../css/github.css" type="text/css" media="screen" />
|
||
<script src="../../../js/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
|
||
<script src="../../../js/jquery-effect.js" type="text/javascript" charset="utf-8"></script>
|
||
<script src="../../../js/main.js" type="text/javascript" charset="utf-8"></script>
|
||
<script src="../../../js/highlight.pack.js" type="text/javascript" charset="utf-8"></script>
|
||
|
||
</head>
|
||
|
||
<body>
|
||
<div class="banner">
|
||
|
||
<h1>
|
||
<span class="type">Class</span>
|
||
Gitlab::Graph::JsonBuilder
|
||
|
||
<span class="parent"><
|
||
|
||
Object
|
||
|
||
</span>
|
||
|
||
</h1>
|
||
<ul class="files">
|
||
|
||
<li><a href="../../../files/lib/gitlab/graph/json_builder_rb.html">lib/gitlab/graph/json_builder.rb</a></li>
|
||
|
||
</ul>
|
||
</div>
|
||
<div id="bodyContent">
|
||
<div id="content">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Method ref -->
|
||
<div class="sectiontitle">Methods</div>
|
||
<dl class="methods">
|
||
|
||
<dt>B</dt>
|
||
<dd>
|
||
<ul>
|
||
|
||
|
||
<li>
|
||
<a href="#method-i-base_space">base_space</a>
|
||
</li>
|
||
|
||
</ul>
|
||
</dd>
|
||
|
||
<dt>C</dt>
|
||
<dd>
|
||
<ul>
|
||
|
||
|
||
<li>
|
||
<a href="#method-i-collect_commits">collect_commits</a>
|
||
</li>
|
||
|
||
</ul>
|
||
</dd>
|
||
|
||
<dt>F</dt>
|
||
<dd>
|
||
<ul>
|
||
|
||
|
||
<li>
|
||
<a href="#method-i-find_free_space">find_free_space</a>
|
||
</li>
|
||
|
||
</ul>
|
||
</dd>
|
||
|
||
<dt>I</dt>
|
||
<dd>
|
||
<ul>
|
||
|
||
|
||
<li>
|
||
<a href="#method-i-index_commits">index_commits</a>
|
||
</li>
|
||
|
||
</ul>
|
||
</dd>
|
||
|
||
<dt>M</dt>
|
||
<dd>
|
||
<ul>
|
||
|
||
|
||
<li>
|
||
<a href="#method-i-mark_reserved">mark_reserved</a>,
|
||
</li>
|
||
|
||
|
||
<li>
|
||
<a href="#method-c-max_count">max_count</a>
|
||
</li>
|
||
|
||
</ul>
|
||
</dd>
|
||
|
||
<dt>N</dt>
|
||
<dd>
|
||
<ul>
|
||
|
||
|
||
<li>
|
||
<a href="#method-c-new">new</a>
|
||
</li>
|
||
|
||
</ul>
|
||
</dd>
|
||
|
||
<dt>P</dt>
|
||
<dd>
|
||
<ul>
|
||
|
||
|
||
<li>
|
||
<a href="#method-i-place_chain">place_chain</a>
|
||
</li>
|
||
|
||
</ul>
|
||
</dd>
|
||
|
||
<dt>T</dt>
|
||
<dd>
|
||
<ul>
|
||
|
||
|
||
<li>
|
||
<a href="#method-i-take_left_leaves">take_left_leaves</a>,
|
||
</li>
|
||
|
||
|
||
<li>
|
||
<a href="#method-i-to_json">to_json</a>
|
||
</li>
|
||
|
||
</ul>
|
||
</dd>
|
||
|
||
</dl>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Section attributes -->
|
||
<div class="sectiontitle">Attributes</div>
|
||
<table border='0' cellpadding='5'>
|
||
|
||
<tr valign='top'>
|
||
<td class='attr-rw'>
|
||
[RW]
|
||
</td>
|
||
<td class='attr-name'>commits</td>
|
||
<td class='attr-desc'></td>
|
||
</tr>
|
||
|
||
<tr valign='top'>
|
||
<td class='attr-rw'>
|
||
[RW]
|
||
</td>
|
||
<td class='attr-name'>days</td>
|
||
<td class='attr-desc'></td>
|
||
</tr>
|
||
|
||
<tr valign='top'>
|
||
<td class='attr-rw'>
|
||
[RW]
|
||
</td>
|
||
<td class='attr-name'>ref_cache</td>
|
||
<td class='attr-desc'></td>
|
||
</tr>
|
||
|
||
<tr valign='top'>
|
||
<td class='attr-rw'>
|
||
[RW]
|
||
</td>
|
||
<td class='attr-name'>repo</td>
|
||
<td class='attr-desc'></td>
|
||
</tr>
|
||
|
||
</table>
|
||
|
||
|
||
|
||
<!-- Methods -->
|
||
|
||
<div class="sectiontitle">Class Public methods</div>
|
||
|
||
<div class="method">
|
||
<div class="title method-title" id="method-c-max_count">
|
||
|
||
<b>max_count</b>()
|
||
|
||
<a href="../../../classes/Gitlab/Graph/JsonBuilder.html#method-c-max_count" name="method-c-max_count" class="permalink">Link</a>
|
||
</div>
|
||
|
||
|
||
<div class="description">
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="sourcecode">
|
||
|
||
<p class="source-link">
|
||
Source:
|
||
<a href="javascript:toggleSource('method-c-max_count_source')" id="l_method-c-max_count_source">show</a>
|
||
|
||
</p>
|
||
<div id="method-c-max_count_source" class="dyn-source">
|
||
<pre><span class="ruby-comment"># File lib/gitlab/graph/json_builder.rb, line 8</span>
|
||
<span class="ruby-keyword">def</span> <span class="ruby-keyword ruby-title">self</span>.<span class="ruby-identifier">max_count</span>
|
||
<span class="ruby-ivar">@max_count</span> <span class="ruby-operator">||=</span> <span class="ruby-number">650</span>
|
||
<span class="ruby-keyword">end</span></pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="method">
|
||
<div class="title method-title" id="method-c-new">
|
||
|
||
<b>new</b>(project)
|
||
|
||
<a href="../../../classes/Gitlab/Graph/JsonBuilder.html#method-c-new" name="method-c-new" class="permalink">Link</a>
|
||
</div>
|
||
|
||
|
||
<div class="description">
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="sourcecode">
|
||
|
||
<p class="source-link">
|
||
Source:
|
||
<a href="javascript:toggleSource('method-c-new_source')" id="l_method-c-new_source">show</a>
|
||
|
||
</p>
|
||
<div id="method-c-new_source" class="dyn-source">
|
||
<pre><span class="ruby-comment"># File lib/gitlab/graph/json_builder.rb, line 12</span>
|
||
<span class="ruby-keyword">def</span> <span class="ruby-keyword ruby-title">initialize</span> <span class="ruby-identifier">project</span>
|
||
<span class="ruby-ivar">@project</span> = <span class="ruby-identifier">project</span>
|
||
<span class="ruby-ivar">@repo</span> = <span class="ruby-identifier">project</span>.<span class="ruby-identifier">repo</span>
|
||
<span class="ruby-ivar">@ref_cache</span> = {}
|
||
|
||
<span class="ruby-ivar">@commits</span> = <span class="ruby-identifier">collect_commits</span>
|
||
<span class="ruby-ivar">@days</span> = <span class="ruby-identifier">index_commits</span>
|
||
<span class="ruby-keyword">end</span></pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="sectiontitle">Instance Public methods</div>
|
||
|
||
<div class="method">
|
||
<div class="title method-title" id="method-i-to_json">
|
||
|
||
<b>to_json</b>(*args)
|
||
|
||
<a href="../../../classes/Gitlab/Graph/JsonBuilder.html#method-i-to_json" name="method-i-to_json" class="permalink">Link</a>
|
||
</div>
|
||
|
||
|
||
<div class="description">
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="sourcecode">
|
||
|
||
<p class="source-link">
|
||
Source:
|
||
<a href="javascript:toggleSource('method-i-to_json_source')" id="l_method-i-to_json_source">show</a>
|
||
|
||
</p>
|
||
<div id="method-i-to_json_source" class="dyn-source">
|
||
<pre><span class="ruby-comment"># File lib/gitlab/graph/json_builder.rb, line 21</span>
|
||
<span class="ruby-keyword">def</span> <span class="ruby-keyword ruby-title">to_json</span>(*<span class="ruby-identifier">args</span>)
|
||
{
|
||
<span class="ruby-identifier">days</span><span class="ruby-operator">:</span> <span class="ruby-ivar">@days</span>.<span class="ruby-identifier">compact</span>.<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span> [<span class="ruby-identifier">d</span>.<span class="ruby-identifier">day</span>, <span class="ruby-identifier">d</span>.<span class="ruby-identifier">strftime</span>(<span class="ruby-string">"%b"</span>)] },
|
||
<span class="ruby-identifier">commits</span><span class="ruby-operator">:</span> <span class="ruby-ivar">@commits</span>.<span class="ruby-identifier">map</span>(&<span class="ruby-value">:to_graph_hash</span>)
|
||
}.<span class="ruby-identifier">to_json</span>(*<span class="ruby-identifier">args</span>)
|
||
<span class="ruby-keyword">end</span></pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="sectiontitle">Instance Protected methods</div>
|
||
|
||
<div class="method">
|
||
<div class="title method-title" id="method-i-base_space">
|
||
|
||
<b>base_space</b>(leaves, map)
|
||
|
||
<a href="../../../classes/Gitlab/Graph/JsonBuilder.html#method-i-base_space" name="method-i-base_space" class="permalink">Link</a>
|
||
</div>
|
||
|
||
|
||
<div class="description">
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="sourcecode">
|
||
|
||
<p class="source-link">
|
||
Source:
|
||
<a href="javascript:toggleSource('method-i-base_space_source')" id="l_method-i-base_space_source">show</a>
|
||
|
||
</p>
|
||
<div id="method-i-base_space_source" class="dyn-source">
|
||
<pre><span class="ruby-comment"># File lib/gitlab/graph/json_builder.rb, line 148</span>
|
||
<span class="ruby-keyword">def</span> <span class="ruby-keyword ruby-title">base_space</span>(<span class="ruby-identifier">leaves</span>, <span class="ruby-identifier">map</span>)
|
||
<span class="ruby-identifier">parents</span> = []
|
||
<span class="ruby-identifier">leaves</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span>
|
||
<span class="ruby-identifier">parents</span>.<span class="ruby-identifier">concat</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">parents</span>.<span class="ruby-identifier">collect</span>.<span class="ruby-identifier">select</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-identifier">map</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">id</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">map</span>[<span class="ruby-identifier">p</span>.<span class="ruby-identifier">id</span>].<span class="ruby-identifier">space</span>.<span class="ruby-identifier">nonzero?</span>}
|
||
<span class="ruby-keyword">end</span>
|
||
|
||
<span class="ruby-identifier">space</span> = <span class="ruby-identifier">parents</span>.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-identifier">map</span>[<span class="ruby-identifier">p</span>.<span class="ruby-identifier">id</span>].<span class="ruby-identifier">space</span>}.<span class="ruby-identifier">max</span> <span class="ruby-operator">||</span> <span class="ruby-number">0</span>
|
||
<span class="ruby-identifier">space</span> <span class="ruby-operator">+=</span> <span class="ruby-number">1</span>
|
||
<span class="ruby-keyword">end</span></pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="method">
|
||
<div class="title method-title" id="method-i-collect_commits">
|
||
|
||
<b>collect_commits</b>()
|
||
|
||
<a href="../../../classes/Gitlab/Graph/JsonBuilder.html#method-i-collect_commits" name="method-i-collect_commits" class="permalink">Link</a>
|
||
</div>
|
||
|
||
|
||
<div class="description">
|
||
<p>Get commits from repository</p>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="sourcecode">
|
||
|
||
<p class="source-link">
|
||
Source:
|
||
<a href="javascript:toggleSource('method-i-collect_commits_source')" id="l_method-i-collect_commits_source">show</a>
|
||
|
||
</p>
|
||
<div id="method-i-collect_commits_source" class="dyn-source">
|
||
<pre><span class="ruby-comment"># File lib/gitlab/graph/json_builder.rb, line 32</span>
|
||
<span class="ruby-keyword">def</span> <span class="ruby-keyword ruby-title">collect_commits</span>
|
||
<span class="ruby-ivar">@commits</span> = <span class="ruby-constant">Grit</span><span class="ruby-operator">::</span><span class="ruby-constant">Commit</span>.<span class="ruby-identifier">find_all</span>(<span class="ruby-identifier">repo</span>, <span class="ruby-keyword">nil</span>, {<span class="ruby-identifier">max_count</span><span class="ruby-operator">:</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">max_count</span>}).<span class="ruby-identifier">dup</span>
|
||
|
||
<span class="ruby-comment"># Decorate with app/models/commit.rb</span>
|
||
<span class="ruby-ivar">@commits</span>.<span class="ruby-identifier">map!</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">commit</span><span class="ruby-operator">|</span> <span class="ruby-operator">::</span><span class="ruby-constant">Commit</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">commit</span>) }
|
||
|
||
<span class="ruby-comment"># Decorate with lib/gitlab/graph/commit.rb</span>
|
||
<span class="ruby-ivar">@commits</span>.<span class="ruby-identifier">map!</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">commit</span><span class="ruby-operator">|</span> <span class="ruby-constant">Gitlab</span><span class="ruby-operator">::</span><span class="ruby-constant">Graph</span><span class="ruby-operator">::</span><span class="ruby-constant">Commit</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">commit</span>) }
|
||
|
||
<span class="ruby-comment"># add refs to each commit</span>
|
||
<span class="ruby-ivar">@commits</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">commit</span><span class="ruby-operator">|</span> <span class="ruby-identifier">commit</span>.<span class="ruby-identifier">add_refs</span>(<span class="ruby-identifier">ref_cache</span>, <span class="ruby-identifier">repo</span>) }
|
||
|
||
<span class="ruby-ivar">@commits</span>
|
||
<span class="ruby-keyword">end</span></pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="method">
|
||
<div class="title method-title" id="method-i-find_free_space">
|
||
|
||
<b>find_free_space</b>(leaves, map)
|
||
|
||
<a href="../../../classes/Gitlab/Graph/JsonBuilder.html#method-i-find_free_space" name="method-i-find_free_space" class="permalink">Link</a>
|
||
</div>
|
||
|
||
|
||
<div class="description">
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="sourcecode">
|
||
|
||
<p class="source-link">
|
||
Source:
|
||
<a href="javascript:toggleSource('method-i-find_free_space_source')" id="l_method-i-find_free_space_source">show</a>
|
||
|
||
</p>
|
||
<div id="method-i-find_free_space_source" class="dyn-source">
|
||
<pre><span class="ruby-comment"># File lib/gitlab/graph/json_builder.rb, line 135</span>
|
||
<span class="ruby-keyword">def</span> <span class="ruby-keyword ruby-title">find_free_space</span>(<span class="ruby-identifier">leaves</span>, <span class="ruby-identifier">map</span>)
|
||
<span class="ruby-identifier">time_range</span> = <span class="ruby-identifier">leaves</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">time</span><span class="ruby-operator">..</span><span class="ruby-identifier">leaves</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">time</span>
|
||
<span class="ruby-identifier">reserved</span> = []
|
||
<span class="ruby-keyword">for</span> <span class="ruby-identifier">day</span> <span class="ruby-keyword">in</span> <span class="ruby-identifier">time_range</span>
|
||
<span class="ruby-identifier">reserved</span> <span class="ruby-operator">+=</span> <span class="ruby-ivar">@_reserved</span>[<span class="ruby-identifier">day</span>]
|
||
<span class="ruby-keyword">end</span>
|
||
<span class="ruby-identifier">space</span> = <span class="ruby-identifier">base_space</span>(<span class="ruby-identifier">leaves</span>, <span class="ruby-identifier">map</span>)
|
||
<span class="ruby-keyword">while</span> <span class="ruby-identifier">reserved</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">space</span> <span class="ruby-keyword">do</span>
|
||
<span class="ruby-identifier">space</span> <span class="ruby-operator">+=</span> <span class="ruby-number">1</span>
|
||
<span class="ruby-keyword">end</span>
|
||
<span class="ruby-identifier">space</span>
|
||
<span class="ruby-keyword">end</span></pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="method">
|
||
<div class="title method-title" id="method-i-index_commits">
|
||
|
||
<b>index_commits</b>()
|
||
|
||
<a href="../../../classes/Gitlab/Graph/JsonBuilder.html#method-i-index_commits" name="method-i-index_commits" class="permalink">Link</a>
|
||
</div>
|
||
|
||
|
||
<div class="description">
|
||
<p>Method is adding time and space on the list of commits. As well as returns
|
||
date list corelated with time set on commits.</p>
|
||
|
||
<p>@param [Array<Graph::Commit>] comits to index</p>
|
||
|
||
<p>@return [Array<TimeDate>] list of commit dates corelated with time on
|
||
commits</p>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="sourcecode">
|
||
|
||
<p class="source-link">
|
||
Source:
|
||
<a href="javascript:toggleSource('method-i-index_commits_source')" id="l_method-i-index_commits_source">show</a>
|
||
|
||
</p>
|
||
<div id="method-i-index_commits_source" class="dyn-source">
|
||
<pre><span class="ruby-comment"># File lib/gitlab/graph/json_builder.rb, line 54</span>
|
||
<span class="ruby-keyword">def</span> <span class="ruby-keyword ruby-title">index_commits</span>
|
||
<span class="ruby-identifier">days</span>, <span class="ruby-identifier">heads</span> = [], []
|
||
<span class="ruby-identifier">map</span> = {}
|
||
|
||
<span class="ruby-identifier">commits</span>.<span class="ruby-identifier">reverse</span>.<span class="ruby-identifier">each_with_index</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span>,<span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
|
||
<span class="ruby-identifier">c</span>.<span class="ruby-identifier">time</span> = <span class="ruby-identifier">i</span>
|
||
<span class="ruby-identifier">days</span>[<span class="ruby-identifier">i</span>] = <span class="ruby-identifier">c</span>.<span class="ruby-identifier">committed_date</span>
|
||
<span class="ruby-identifier">map</span>[<span class="ruby-identifier">c</span>.<span class="ruby-identifier">id</span>] = <span class="ruby-identifier">c</span>
|
||
<span class="ruby-identifier">heads</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">refs</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">refs</span>.<span class="ruby-identifier">nil?</span>
|
||
<span class="ruby-keyword">end</span>
|
||
|
||
<span class="ruby-identifier">heads</span>.<span class="ruby-identifier">select!</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span> <span class="ruby-identifier">h</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Grit</span><span class="ruby-operator">::</span><span class="ruby-constant">Head</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">h</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Grit</span><span class="ruby-operator">::</span><span class="ruby-constant">Remote</span>}
|
||
<span class="ruby-comment"># sort heads so the master is top and current branches are closer</span>
|
||
<span class="ruby-identifier">heads</span>.<span class="ruby-identifier">sort!</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">a</span>,<span class="ruby-identifier">b</span><span class="ruby-operator">|</span>
|
||
<span class="ruby-keyword">if</span> <span class="ruby-identifier">a</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-string">"master"</span>
|
||
<span class="ruby-number">-1</span>
|
||
<span class="ruby-keyword">elsif</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-string">"master"</span>
|
||
<span class="ruby-number">1</span>
|
||
<span class="ruby-keyword">else</span>
|
||
<span class="ruby-identifier">b</span>.<span class="ruby-identifier">commit</span>.<span class="ruby-identifier">committed_date</span> <span class="ruby-operator"><=></span> <span class="ruby-identifier">a</span>.<span class="ruby-identifier">commit</span>.<span class="ruby-identifier">committed_date</span>
|
||
<span class="ruby-keyword">end</span>
|
||
<span class="ruby-keyword">end</span>
|
||
|
||
<span class="ruby-ivar">@_reserved</span> = {}
|
||
<span class="ruby-identifier">days</span>.<span class="ruby-identifier">each_index</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
|
||
<span class="ruby-ivar">@_reserved</span>[<span class="ruby-identifier">i</span>] = []
|
||
<span class="ruby-keyword">end</span>
|
||
|
||
<span class="ruby-identifier">heads</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span>
|
||
<span class="ruby-keyword">if</span> <span class="ruby-identifier">map</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">h</span>.<span class="ruby-identifier">commit</span>.<span class="ruby-identifier">id</span> <span class="ruby-keyword">then</span>
|
||
<span class="ruby-identifier">place_chain</span>(<span class="ruby-identifier">map</span>[<span class="ruby-identifier">h</span>.<span class="ruby-identifier">commit</span>.<span class="ruby-identifier">id</span>], <span class="ruby-identifier">map</span>)
|
||
<span class="ruby-keyword">end</span>
|
||
<span class="ruby-keyword">end</span>
|
||
|
||
<span class="ruby-identifier">days</span>
|
||
<span class="ruby-keyword">end</span></pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="method">
|
||
<div class="title method-title" id="method-i-mark_reserved">
|
||
|
||
<b>mark_reserved</b>(time_range, space)
|
||
|
||
<a href="../../../classes/Gitlab/Graph/JsonBuilder.html#method-i-mark_reserved" name="method-i-mark_reserved" class="permalink">Link</a>
|
||
</div>
|
||
|
||
|
||
<div class="description">
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="sourcecode">
|
||
|
||
<p class="source-link">
|
||
Source:
|
||
<a href="javascript:toggleSource('method-i-mark_reserved_source')" id="l_method-i-mark_reserved_source">show</a>
|
||
|
||
</p>
|
||
<div id="method-i-mark_reserved_source" class="dyn-source">
|
||
<pre><span class="ruby-comment"># File lib/gitlab/graph/json_builder.rb, line 129</span>
|
||
<span class="ruby-keyword">def</span> <span class="ruby-keyword ruby-title">mark_reserved</span>(<span class="ruby-identifier">time_range</span>, <span class="ruby-identifier">space</span>)
|
||
<span class="ruby-keyword">for</span> <span class="ruby-identifier">day</span> <span class="ruby-keyword">in</span> <span class="ruby-identifier">time_range</span>
|
||
<span class="ruby-ivar">@_reserved</span>[<span class="ruby-identifier">day</span>].<span class="ruby-identifier">push</span>(<span class="ruby-identifier">space</span>)
|
||
<span class="ruby-keyword">end</span>
|
||
<span class="ruby-keyword">end</span></pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="method">
|
||
<div class="title method-title" id="method-i-place_chain">
|
||
|
||
<b>place_chain</b>(commit, map, parent_time = nil)
|
||
|
||
<a href="../../../classes/Gitlab/Graph/JsonBuilder.html#method-i-place_chain" name="method-i-place_chain" class="permalink">Link</a>
|
||
</div>
|
||
|
||
|
||
<div class="description">
|
||
<p>Add space mark on commit and its parents</p>
|
||
|
||
<p>@param [Graph::Commit] the commit object. @param
|
||
[Hash<String,Graph::Commit>] map of commits</p>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="sourcecode">
|
||
|
||
<p class="source-link">
|
||
Source:
|
||
<a href="javascript:toggleSource('method-i-place_chain_source')" id="l_method-i-place_chain_source">show</a>
|
||
|
||
</p>
|
||
<div id="method-i-place_chain_source" class="dyn-source">
|
||
<pre><span class="ruby-comment"># File lib/gitlab/graph/json_builder.rb, line 95</span>
|
||
<span class="ruby-keyword">def</span> <span class="ruby-keyword ruby-title">place_chain</span>(<span class="ruby-identifier">commit</span>, <span class="ruby-identifier">map</span>, <span class="ruby-identifier">parent_time</span> = <span class="ruby-keyword">nil</span>)
|
||
<span class="ruby-identifier">leaves</span> = <span class="ruby-identifier">take_left_leaves</span>(<span class="ruby-identifier">commit</span>, <span class="ruby-identifier">map</span>)
|
||
<span class="ruby-keyword">if</span> <span class="ruby-identifier">leaves</span>.<span class="ruby-identifier">empty?</span>
|
||
<span class="ruby-keyword">return</span>
|
||
<span class="ruby-keyword">end</span>
|
||
<span class="ruby-identifier">space</span> = <span class="ruby-identifier">find_free_space</span>(<span class="ruby-identifier">leaves</span>, <span class="ruby-identifier">map</span>)
|
||
<span class="ruby-identifier">leaves</span>.<span class="ruby-identifier">each</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">space</span> = <span class="ruby-identifier">space</span>}
|
||
<span class="ruby-comment"># and mark it as reserved</span>
|
||
<span class="ruby-identifier">min_time</span> = <span class="ruby-identifier">leaves</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">time</span>
|
||
<span class="ruby-identifier">parents</span> = <span class="ruby-identifier">leaves</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">parents</span>.<span class="ruby-identifier">collect</span>
|
||
<span class="ruby-identifier">parents</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
|
||
<span class="ruby-keyword">if</span> <span class="ruby-identifier">map</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">id</span>
|
||
<span class="ruby-identifier">parent</span> = <span class="ruby-identifier">map</span>[<span class="ruby-identifier">p</span>.<span class="ruby-identifier">id</span>]
|
||
<span class="ruby-keyword">if</span> <span class="ruby-identifier">parent</span>.<span class="ruby-identifier">time</span> <span class="ruby-operator"><</span> <span class="ruby-identifier">min_time</span>
|
||
<span class="ruby-identifier">min_time</span> = <span class="ruby-identifier">parent</span>.<span class="ruby-identifier">time</span>
|
||
<span class="ruby-keyword">end</span>
|
||
<span class="ruby-keyword">end</span>
|
||
<span class="ruby-keyword">end</span>
|
||
<span class="ruby-keyword">if</span> <span class="ruby-identifier">parent_time</span>.<span class="ruby-identifier">nil?</span>
|
||
<span class="ruby-identifier">max_time</span> = <span class="ruby-identifier">leaves</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">time</span>
|
||
<span class="ruby-keyword">else</span>
|
||
<span class="ruby-identifier">max_time</span> = <span class="ruby-identifier">parent_time</span> <span class="ruby-operator">-</span> <span class="ruby-number">1</span>
|
||
<span class="ruby-keyword">end</span>
|
||
<span class="ruby-identifier">mark_reserved</span>(<span class="ruby-identifier">min_time</span><span class="ruby-operator">..</span><span class="ruby-identifier">max_time</span>, <span class="ruby-identifier">space</span>)
|
||
|
||
<span class="ruby-comment"># Visit branching chains</span>
|
||
<span class="ruby-identifier">leaves</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span>
|
||
<span class="ruby-identifier">parents</span> = <span class="ruby-identifier">l</span>.<span class="ruby-identifier">parents</span>.<span class="ruby-identifier">collect</span>.<span class="ruby-identifier">select</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-identifier">map</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">id</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">map</span>[<span class="ruby-identifier">p</span>.<span class="ruby-identifier">id</span>].<span class="ruby-identifier">space</span>.<span class="ruby-identifier">zero?</span>}
|
||
<span class="ruby-keyword">for</span> <span class="ruby-identifier">p</span> <span class="ruby-keyword">in</span> <span class="ruby-identifier">parents</span>
|
||
<span class="ruby-identifier">place_chain</span>(<span class="ruby-identifier">map</span>[<span class="ruby-identifier">p</span>.<span class="ruby-identifier">id</span>], <span class="ruby-identifier">map</span>, <span class="ruby-identifier">l</span>.<span class="ruby-identifier">time</span>)
|
||
<span class="ruby-keyword">end</span>
|
||
<span class="ruby-keyword">end</span>
|
||
<span class="ruby-keyword">end</span></pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="method">
|
||
<div class="title method-title" id="method-i-take_left_leaves">
|
||
|
||
<b>take_left_leaves</b>(commit, map)
|
||
|
||
<a href="../../../classes/Gitlab/Graph/JsonBuilder.html#method-i-take_left_leaves" name="method-i-take_left_leaves" class="permalink">Link</a>
|
||
</div>
|
||
|
||
|
||
<div class="description">
|
||
<p>Takes most left subtree branch of commits which don’t have space mark yet.</p>
|
||
|
||
<p>@param [Graph::Commit] the commit object. @param
|
||
[Hash<String,Graph::Commit>] map of commits</p>
|
||
|
||
<p>@return [Array<Graph::Commit>] list of branch commits</p>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="sourcecode">
|
||
|
||
<p class="source-link">
|
||
Source:
|
||
<a href="javascript:toggleSource('method-i-take_left_leaves_source')" id="l_method-i-take_left_leaves_source">show</a>
|
||
|
||
</p>
|
||
<div id="method-i-take_left_leaves_source" class="dyn-source">
|
||
<pre><span class="ruby-comment"># File lib/gitlab/graph/json_builder.rb, line 165</span>
|
||
<span class="ruby-keyword">def</span> <span class="ruby-keyword ruby-title">take_left_leaves</span>(<span class="ruby-identifier">commit</span>, <span class="ruby-identifier">map</span>)
|
||
<span class="ruby-identifier">leaves</span> = []
|
||
<span class="ruby-identifier">leaves</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">commit</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">commit</span>.<span class="ruby-identifier">space</span>.<span class="ruby-identifier">zero?</span>
|
||
|
||
<span class="ruby-keyword">while</span> <span class="ruby-keyword">true</span>
|
||
<span class="ruby-keyword">return</span> <span class="ruby-identifier">leaves</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">commit</span>.<span class="ruby-identifier">parents</span>.<span class="ruby-identifier">count</span>.<span class="ruby-identifier">zero?</span>
|
||
<span class="ruby-keyword">return</span> <span class="ruby-identifier">leaves</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">map</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">commit</span>.<span class="ruby-identifier">parents</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">id</span>
|
||
|
||
<span class="ruby-identifier">commit</span> = <span class="ruby-identifier">map</span>[<span class="ruby-identifier">commit</span>.<span class="ruby-identifier">parents</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">id</span>]
|
||
|
||
<span class="ruby-keyword">return</span> <span class="ruby-identifier">leaves</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">commit</span>.<span class="ruby-identifier">space</span>.<span class="ruby-identifier">zero?</span>
|
||
|
||
<span class="ruby-identifier">leaves</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">commit</span>)
|
||
<span class="ruby-keyword">end</span>
|
||
<span class="ruby-keyword">end</span></pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</body>
|
||
</html> |