The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
<!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">
<!--
This file was generated by Devel::Cover Version 1.26
Devel::Cover is copyright 2001-2012, Paul Johnson (paul@pjcj.net)
Devel::Cover is free. It is licensed under the same terms as Perl itself.
The latest version of Devel::Cover should be available from my homepage:
http://www.pjcj.net
-->
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
    <meta http-equiv="Content-Language" content="en-us"></meta>
    <link rel="stylesheet" type="text/css" href="cover.css"></link>
    <link rel="stylesheet" type="text/css" href="cover.css"></link>
    <title>File Coverage: lib/Yukki/Model/Repository.pm</title>
</head>
<body>
<h1>File Coverage</h1>
<table>
<tr><td class="h" align="right">File:</td><td align="left">lib/Yukki/Model/Repository.pm</td></tr>
<tr><td class="h" align="right">Coverage:</td><td align="left" class="c0">29.6%</td></tr>
</table>
<div><br/></div>
<table>
<tr><th>line</th><th>stmt</th><th>bran</th><th>cond</th><th>sub</th><th>pod</th><th>time</th><th>code</th></tr>
<tr><td class="h">1</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">package Yukki::Model::Repository;</td></tr>
<tr><td class="h">2</td><td colspan="7"></td></tr><tr><td class="h">3</td><td><div class="c3">2</div><div class="c3">2</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L3">2</a></div></td><td></td><td><div>937</div><div>7</div></td><td class="s">use v5.24;</td></tr>
<tr><td class="h">4</td><td><div class="c3">2</div><div class="c3">2</div><div class="c3">2</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L4">2</a></div></td><td></td><td><div>7</div><div>4</div><div>13</div></td><td class="s">use utf8;</td></tr>
<tr><td class="h">5</td><td><div class="c3">2</div><div class="c3">2</div><div class="c3">2</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L5">2</a></div></td><td></td><td><div>23</div><div>2</div><div>15</div></td><td class="s">use Moo;</td></tr>
<tr><td class="h">6</td><td colspan="7"></td></tr><tr><td class="h">7</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">extends &#39;Yukki::Model&#39;;</td></tr>
<tr><td class="h">8</td><td colspan="7"></td></tr><tr><td class="h">9</td><td><div class="c3">2</div><div class="c3">2</div><div class="c3">2</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L9">2</a></div></td><td></td><td><div>467</div><div>4</div><div>18</div></td><td class="s">use Yukki::Error qw( http_throw );</td></tr>
<tr><td class="h">10</td><td><div class="c3">2</div><div class="c3">2</div><div class="c3">2</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L10">2</a></div></td><td></td><td><div>874</div><div>3</div><div>34</div></td><td class="s">use Yukki::Model::File;</td></tr>
<tr><td class="h">11</td><td colspan="7"></td></tr><tr><td class="h">12</td><td><div class="c3">2</div><div class="c3">2</div><div class="c3">2</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L12">2</a></div></td><td></td><td><div>688</div><div>612031</div><div>45</div></td><td class="s">use DateTime::Format::Mail;</td></tr>
<tr><td class="h">13</td><td><div class="c3">2</div><div class="c3">2</div><div class="c3">2</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L13">2</a></div></td><td></td><td><div>510</div><div>14526</div><div>8</div></td><td class="s">use Git::Repository v1.18;</td></tr>
<tr><td class="h">14</td><td><div class="c3">2</div><div class="c3">2</div><div class="c3">2</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L14">2</a></div></td><td></td><td><div>40</div><div>4</div><div>13</div></td><td class="s">use Type::Utils;</td></tr>
<tr><td class="h">15</td><td><div class="c3">2</div><div class="c3">2</div><div class="c3">2</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L15">2</a></div></td><td></td><td><div>1942</div><div>3</div><div>22</div></td><td class="s">use Types::Path::Tiny qw( Path );</td></tr>
<tr><td class="h">16</td><td><div class="c3">2</div><div class="c3">2</div><div class="c3">2</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L16">2</a></div></td><td></td><td><div>497</div><div>4</div><div>7</div></td><td class="s">use Types::Standard qw( Str );</td></tr>
<tr><td class="h">17</td><td><div class="c3">2</div><div class="c3">2</div><div class="c3">2</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L17">2</a></div></td><td></td><td><div>846</div><div>2</div><div>55</div></td><td class="s">use Try::Tiny;</td></tr>
<tr><td class="h">18</td><td colspan="7"></td></tr><tr><td class="h">19</td><td><div class="c3">2</div><div class="c3">2</div><div class="c3">2</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L19">2</a></div></td><td></td><td><div>6</div><div>2</div><div>6</div></td><td class="s">use namespace::clean;</td></tr>
<tr><td class="h">20</td><td colspan="7"></td></tr><tr><td class="h">21</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"># ABSTRACT: model for accessing objects in a git repository</td></tr>
<tr><td class="h">22</td><td colspan="7"></td></tr><tr><td class="h">23 - 46</td><td colspan="6"></td><td class="s"><pre>=head1 SYNOPSIS

&nbsp;&nbsp;my $repository = $app-&gt;model(&#39;Repository&#39;, { name =&gt; &#39;main&#39; });
&nbsp;&nbsp;my $file = $repository-&gt;file({ path =&gt; &#39;foo.yukki&#39; });

=head1 DESCRIPTION

This model contains methods for performing all the individual operations
required to store files into and fetch files from the git repository. It
includes tools for building trees, commiting, creating blobs, fetching file
lists, etc.

=head1 EXTENDS

L&lt;Yukki::Model&gt;

=head1 ATTRIBUTES

=head2 name

This is the name of the repository. This is used to lookup the configuration for
the repository from the F&lt;yukki.conf&gt;.

=cut</pre></td></tr>
<tr><td class="h">47</td><td colspan="7"></td></tr><tr><td class="h">48</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">has name =&gt; (</td></tr>
<tr><td class="h">49</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; &#39;ro&#39;,</td></tr>
<tr><td class="h">50</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;isa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; Str,</td></tr>
<tr><td class="h">51</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;required&nbsp;&nbsp;&nbsp;&nbsp;=&gt; 1,</td></tr>
<tr><td class="h">52</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">);</td></tr>
<tr><td class="h">53</td><td colspan="7"></td></tr><tr><td class="h">54 - 60</td><td colspan="6"></td><td class="s"><pre>=head2 repository_settings

These are the settings telling this model where to find the git repository and
how to access it. It is loaded automatically using the L&lt;/name&gt; to look up
information in the F&lt;yukki.conf&gt;.

=cut</pre></td></tr>
<tr><td class="h">61</td><td colspan="7"></td></tr><tr><td class="h">62</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">has repository_settings =&gt; (</td></tr>
<tr><td class="h">63</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; &#39;ro&#39;,</td></tr>
<tr><td class="h">64</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;isa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; class_type(&#39;Yukki::Settings::Repository&#39;),</td></tr>
<tr><td class="h">65</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;required&nbsp;&nbsp;&nbsp;&nbsp;=&gt; 1,</td></tr>
<tr><td class="h">66</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;lazy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; 1,</td></tr>
<tr><td class="h">67</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; sub {</td></tr>
<tr><td class="h">68</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $self = shift;</td></tr>
<tr><td class="h">69</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $repo_config = $self-&gt;app-&gt;settings-&gt;repositories-&gt;{$self-&gt;name};</td></tr>
<tr><td class="h">70</td><td colspan="7"></td></tr><tr><td class="h">71</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!$repo_config) {</td></tr>
<tr><td class="h">72</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $file = $self-&gt;app-&gt;locate(&#39;repo_path&#39;, $self-&gt;name);</td></tr>
<tr><td class="h">73</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$repo_config = Yukki::Settings::Repository-&gt;load_yaml(</td></tr>
<tr><td class="h">74</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$file-&gt;slurp_utf8</td></tr>
<tr><td class="h">75</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);</td></tr>
<tr><td class="h">76</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">77</td><td colspan="7"></td></tr><tr><td class="h">78</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $repo_config;</td></tr>
<tr><td class="h">79</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;},</td></tr>
<tr><td class="h">80</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;handles&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; {</td></tr>
<tr><td class="h">81</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;title&#39;&nbsp;&nbsp;=&gt; &#39;name&#39;,</td></tr>
<tr><td class="h">82</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;branch&#39; =&gt; &#39;site_branch&#39;,</td></tr>
<tr><td class="h">83</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;},</td></tr>
<tr><td class="h">84</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">);</td></tr>
<tr><td class="h">85</td><td colspan="7"></td></tr><tr><td class="h">86 - 91</td><td colspan="6"></td><td class="s"><pre>=head2 repository_path

This is the path to the repository. It is located using the C&lt;repository_path&gt;
and C&lt;repository&gt; keys in the configuration.

=cut</pre></td></tr>
<tr><td class="h">92</td><td colspan="7"></td></tr><tr><td class="h">93</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">has repository_path =&gt; (</td></tr>
<tr><td class="h">94</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; &#39;ro&#39;,</td></tr>
<tr><td class="h">95</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;isa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; Path,</td></tr>
<tr><td class="h">96</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;coerce&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; 1,</td></tr>
<tr><td class="h">97</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;required&nbsp;&nbsp;&nbsp;&nbsp;=&gt; 1,</td></tr>
<tr><td class="h">98</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;lazy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; 1,</td></tr>
<tr><td class="h">99</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;builder&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; &#39;_build_repository_path&#39;,</td></tr>
<tr><td class="h">100</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">);</td></tr>
<tr><td class="h">101</td><td colspan="7"></td></tr><tr><td class="h">102</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub _build_repository_path {</td></tr>
<tr><td class="h">103</td><td><div class="c3">2</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L103">2</a></div></td><td></td><td><div>29</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $self = shift;</td></tr>
<tr><td class="h">104</td><td colspan="7"></td></tr><tr><td class="h">105</td><td><div class="c3">2</div></td><td></td><td></td><td></td><td></td><td><div>26</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $repo_settings = $self-&gt;repository_settings;</td></tr>
<tr><td class="h">106</td><td><div class="c3">2</div></td><td></td><td></td><td></td><td></td><td><div>44</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return $self-&gt;locate_dir(&#39;repository_path&#39;, $repo_settings-&gt;repository);</td></tr>
<tr><td class="h">107</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">108</td><td colspan="7"></td></tr><tr><td class="h">109 - 113</td><td colspan="6"></td><td class="s"><pre>=head2 git

This is a L&lt;Git::Repository&gt; object which helps us do the real work.

=cut</pre></td></tr>
<tr><td class="h">114</td><td colspan="7"></td></tr><tr><td class="h">115</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">has git =&gt; (</td></tr>
<tr><td class="h">116</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; &#39;ro&#39;,</td></tr>
<tr><td class="h">117</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;isa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; class_type(&#39;Git::Repository&#39;),</td></tr>
<tr><td class="h">118</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;required&nbsp;&nbsp;&nbsp;&nbsp;=&gt; 1,</td></tr>
<tr><td class="h">119</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;lazy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; 1,</td></tr>
<tr><td class="h">120</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;builder&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; &#39;_build_git&#39;,</td></tr>
<tr><td class="h">121</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">);</td></tr>
<tr><td class="h">122</td><td colspan="7"></td></tr><tr><td class="h">123</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub _build_git {</td></tr>
<tr><td class="h">124</td><td><div class="c3">2</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L124">2</a></div></td><td></td><td><div>15</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $self = shift;</td></tr>
<tr><td class="h">125</td><td><div class="c3">2</div></td><td></td><td></td><td></td><td></td><td><div>25</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return Git::Repository-&gt;new( git_dir =&gt; $self-&gt;repository_path );</td></tr>
<tr><td class="h">126</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">127</td><td colspan="7"></td></tr><tr><td class="h">128 - 137</td><td colspan="6"></td><td class="s"><pre>=head1 METHODS

=head2 author_name

This is the author name to use when making changes to the repository.

This is taken from the C&lt;author_name&gt; of the C&lt;anonymous&gt; key in the
configuration or defaults to &quot;Anonymous&quot;.

=cut</pre></td></tr>
<tr><td class="h">138</td><td colspan="7"></td></tr><tr><td class="h">139</td><td><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L139">1</a></div></td><td><div class="c3">1</div></td><td><div>54</div></td><td class="s">sub author_name { shift-&gt;app-&gt;settings-&gt;anonymous-&gt;author_name }</td></tr>
<tr><td class="h">140</td><td colspan="7"></td></tr><tr><td class="h">141 - 148</td><td colspan="6"></td><td class="s"><pre>=head2 author_email

This is the author email to use when making changes to the repository.

This is taken from teh C&lt;author_email&gt; of the C&lt;anonymous&gt; key in the
configuration or defaults to &quot;anonymous@localhost&quot;.

=cut</pre></td></tr>
<tr><td class="h">149</td><td colspan="7"></td></tr><tr><td class="h">150</td><td><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L150">1</a></div></td><td><div class="c3">1</div></td><td><div>49</div></td><td class="s">sub author_email { shift-&gt;app-&gt;settings-&gt;anonymous-&gt;author_email }</td></tr>
<tr><td class="h">151</td><td colspan="7"></td></tr><tr><td class="h">152 - 189</td><td colspan="6"></td><td class="s"><pre>=head2 make_tree

&nbsp;&nbsp;my $tree_id = $repository-&gt;make_tree($old_tree_id, \@parts, $object_id);
&nbsp;&nbsp;my $tree_id = $repository-&gt;make_tree($old_tree_id, \@parts);
&nbsp;&nbsp;my $tree_id = $repository-&gt;make_tree(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$old_tree_id, \@old_parts, \@new_parts, $object_id);

In any case described here, the method returns the object ID of the top level
tree created.

=head3 Insert/Update

When C&lt;$object_id&gt; is given, this will construct one or more trees in the git
repository to place the C&lt;$object_id&gt; into the deepest tree. This starts by
reading the tree found using the object ID in C&lt;$old_tree_id&gt;. The first path
part in C&lt;@parts&gt; is shifted off. If an existing path is found there, that
path will be replaced. If not, a new path will be added. A tree object will be
constructed for all byt he final path part in C&lt;@parts&gt;.

When the final part is reached, that path will be placed into the final tree
as a blob using the given C&lt;$object_id&gt;.

This method will fail if it runs into a situation where a blob would be
replaced by a tree or a tree would be replaced by a blob.

=head3 Remove

When C&lt;$object_id&gt; is not passed or C&lt;undef&gt;, this will cause the final tree or blob found to be removed. This works essentially the same as the case for storing a blob, but when it gets to the last tree or blob found, it will elide that name from the final tree constructed.

This method will fail if you attempt to remove something that does not exist.

=head3 Rename

When a second array reference is passed with the C&lt;$object_id&gt;, this method will perform a rename. In this case, the method will remove the path named in the L&lt;@old_parts&gt; and add the path named in &lt;@new_parts&gt; using the given C&lt;$object_id&gt; at that new location.

This method will fail if a failure condition that would occur during either the insert/update or remove operation that is being performed simultaneously.

=cut</pre></td></tr>
<tr><td class="h">190</td><td colspan="7"></td></tr><tr><td class="h">191</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub make_tree {</td></tr>
<tr><td class="h">192</td><td><div class="c0">0</div></td><td></td><td></td><td><div class="c0"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L192">0</a></div></td><td><div class="c3">1</div></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $self = shift;</td></tr>
<tr><td class="h">193</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $base = shift;</td></tr>
<tr><td class="h">194</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $path = shift;</td></tr>
<tr><td class="h">195</td><td colspan="7"></td></tr><tr><td class="h">196</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my (@new_path, @old_path, $blob);</td></tr>
<tr><td class="h">197</td><td colspan="7"></td></tr><tr><td class="h">198</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# This is a rename</td></tr>
<tr><td class="h">199</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L199">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;if (ref $_[0]) {</td></tr>
<tr><td class="h">200</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $new_path = shift;</td></tr>
<tr><td class="h">201</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$blob&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= shift;</td></tr>
<tr><td class="h">202</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@new_path&nbsp;&nbsp;&nbsp;&nbsp;= @$new_path;</td></tr>
<tr><td class="h">203</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@old_path&nbsp;&nbsp;&nbsp;&nbsp;= @$path;</td></tr>
<tr><td class="h">204</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">205</td><td colspan="7"></td></tr><tr><td class="h">206</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# Otherwise it&#39;s a store or delete</td></tr>
<tr><td class="h">207</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;else {</td></tr>
<tr><td class="h">208</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$blob = shift;</td></tr>
<tr><td class="h">209</td><td colspan="7"></td></tr><tr><td class="h">210</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Defined $blob -&gt; Store</td></tr>
<tr><td class="h">211</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L211">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (defined $blob) {</td></tr>
<tr><td class="h">212</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@new_path = @$path;</td></tr>
<tr><td class="h">213</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">214</td><td colspan="7"></td></tr><tr><td class="h">215</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Undefined $blob -&gt; delete</td></tr>
<tr><td class="h">216</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else {</td></tr>
<tr><td class="h">217</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@old_path = @$path;</td></tr>
<tr><td class="h">218</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">219</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">220</td><td colspan="7"></td></tr><tr><td class="h">221</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ($new_mode, $new_type, $new_name, $old_name, $remove_here);</td></tr>
<tr><td class="h">222</td><td colspan="7"></td></tr><tr><td class="h">223</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# Parts to add or update</td></tr>
<tr><td class="h">224</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L224">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;if (@new_path) {</td></tr>
<tr><td class="h">225</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$new_name = shift @new_path;</td></tr>
<tr><td class="h">226</td><td colspan="7"></td></tr><tr><td class="h">227</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Create the file here?</td></tr>
<tr><td class="h">228</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L228">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (@new_path == 0) {</td></tr>
<tr><td class="h">229</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$new_mode = &#39;100644&#39;;</td></tr>
<tr><td class="h">230</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$new_type = &#39;blob&#39;;</td></tr>
<tr><td class="h">231</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">232</td><td colspan="7"></td></tr><tr><td class="h">233</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Or we&#39;re still hunting down the tree</td></tr>
<tr><td class="h">234</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else {</td></tr>
<tr><td class="h">235</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$new_mode = &#39;040000&#39;;</td></tr>
<tr><td class="h">236</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$new_type = &#39;tree&#39;;</td></tr>
<tr><td class="h">237</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">238</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">239</td><td colspan="7"></td></tr><tr><td class="h">240</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# Parts to remove</td></tr>
<tr><td class="h">241</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L241">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;if (@old_path) {</td></tr>
<tr><td class="h">242</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$old_name&nbsp;&nbsp;&nbsp;&nbsp;= shift @old_path;</td></tr>
<tr><td class="h">243</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$remove_here = (@old_path == 0);</td></tr>
<tr><td class="h">244</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">245</td><td colspan="7"></td></tr><tr><td class="h">246</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $git = $self-&gt;git;</td></tr>
<tr><td class="h">247</td><td colspan="7"></td></tr><tr><td class="h">248</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $overwrite;</td></tr>
<tr><td class="h">249</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my @new_tree;</td></tr>
<tr><td class="h">250</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L250">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;if (defined $base) {</td></tr>
<tr><td class="h">251</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my @old_tree = $git-&gt;run(&#39;ls-tree&#39;, $base);</td></tr>
<tr><td class="h">252</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for my $line (@old_tree) {</td></tr>
<tr><td class="h">253</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my ($old_mode, $old_type, $old_object_id, $old_file) = split /\s+/, $line, 4;</td></tr>
<tr><td class="h">254</td><td colspan="7"></td></tr><tr><td class="h">255</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L255">0</a></div><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L255">0</a></div></td><td><div class="c0"><a href="lib-Yukki-Model-Repository-pm--condition.html#L255">0</a></div><div class="c0"><a href="lib-Yukki-Model-Repository-pm--condition.html#L255">0</a></div></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (defined $new_name and $old_file eq $new_name) {</td></tr>
<tr><td class="h">256</td><td colspan="7"></td></tr><tr><td class="h">257</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# The file already exists, we are doing an update</td></tr>
<tr><td class="h">258</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$overwrite++;</td></tr>
<tr><td class="h">259</td><td colspan="7"></td></tr><tr><td class="h">260</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Cannot overwrite a file with a dir or a dir with a file</td></tr>
<tr><td class="h">261</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L261">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http_throw(&quot;cannot replace $old_type $new_name with $new_type&quot;)</td></tr>
<tr><td class="h">262</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if $old_type ne $new_type;</td></tr>
<tr><td class="h">263</td><td colspan="7"></td></tr><tr><td class="h">264</td><td colspan="7"></td></tr><tr><td class="h">265</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Add the updated file to the tree</td></tr>
<tr><td class="h">266</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L266">0</a></div><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L266">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($new_type eq &#39;blob&#39;) {</td></tr>
<tr><td class="h">267</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push @new_tree, &quot;$new_mode $new_type $blob\t$new_name&quot;;</td></tr>
<tr><td class="h">268</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">269</td><td colspan="7"></td></tr><tr><td class="h">270</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# The child tree contains both sides of the rename</td></tr>
<tr><td class="h">271</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elsif ($old_name eq $new_name) {</td></tr>
<tr><td class="h">272</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $tree_id = $self-&gt;make_tree($old_object_id, \@old_path, \@new_path, $blob);</td></tr>
<tr><td class="h">273</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push @new_tree, &quot;$new_mode $new_type $tree_id\t$new_name&quot;;</td></tr>
<tr><td class="h">274</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">275</td><td colspan="7"></td></tr><tr><td class="h">276</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Add the updated tree contains only the rename/add</td></tr>
<tr><td class="h">277</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else {</td></tr>
<tr><td class="h">278</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $tree_id = $self-&gt;make_tree($old_object_id, \@new_path, $blob);</td></tr>
<tr><td class="h">279</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push @new_tree, &quot;$new_mode $new_type $tree_id\t$new_name&quot;;</td></tr>
<tr><td class="h">280</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">281</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">282</td><td colspan="7"></td></tr><tr><td class="h">283</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# If $old_name != $new_name and it matches this file</td></tr>
<tr><td class="h">284</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elsif (defined $old_name and $old_file eq $old_name) {</td></tr>
<tr><td class="h">285</td><td colspan="7"></td></tr><tr><td class="h">286</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# if ($remove_here) { ... do nothing ... }. The file will be</td></tr>
<tr><td class="h">287</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# omitted. \o/</td></tr>
<tr><td class="h">288</td><td colspan="7"></td></tr><tr><td class="h">289</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Not yet removed, but we need to hunt it down and remove it</td></tr>
<tr><td class="h">290</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L290">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unless ($remove_here) {</td></tr>
<tr><td class="h">291</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $tree_id = $self-&gt;make_tree($old_object_id, \@old_path);</td></tr>
<tr><td class="h">292</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push @new_tree, &quot;040000 tree $tree_id\t$old_name&quot;;</td></tr>
<tr><td class="h">293</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">294</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">295</td><td colspan="7"></td></tr><tr><td class="h">296</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# It&#39;s something else, leave it be.</td></tr>
<tr><td class="h">297</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else {</td></tr>
<tr><td class="h">298</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push @new_tree, $line;</td></tr>
<tr><td class="h">299</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">300</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">301</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">302</td><td colspan="7"></td></tr><tr><td class="h">303</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# If the file or tree we want to create was never encountered, add it</td></tr>
<tr><td class="h">304</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L304">0</a></div></td><td><div class="c0"><a href="lib-Yukki-Model-Repository-pm--condition.html#L304">0</a></div></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;if ($new_name and not $overwrite) {</td></tr>
<tr><td class="h">305</td><td colspan="7"></td></tr><tr><td class="h">306</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# ...as a file</td></tr>
<tr><td class="h">307</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L307">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($new_type eq &#39;blob&#39;) {</td></tr>
<tr><td class="h">308</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push @new_tree, &quot;$new_mode $new_type $blob\t$new_name&quot;;</td></tr>
<tr><td class="h">309</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">310</td><td colspan="7"></td></tr><tr><td class="h">311</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# ...as a tree</td></tr>
<tr><td class="h">312</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else {</td></tr>
<tr><td class="h">313</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $tree_id = $self-&gt;make_tree(undef, \@new_path, $blob);</td></tr>
<tr><td class="h">314</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push @new_tree, &quot;$new_mode $new_type $tree_id\t$new_name&quot;;</td></tr>
<tr><td class="h">315</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">316</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">317</td><td colspan="7"></td></tr><tr><td class="h">318</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# Now, build this new tree from the input we&#39;ve generated</td></tr>
<tr><td class="h">319</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return $git-&gt;run(&#39;mktree&#39;, { input =&gt; join &quot;\n&quot;, @new_tree });</td></tr>
<tr><td class="h">320</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">321</td><td colspan="7"></td></tr><tr><td class="h">322 - 329</td><td colspan="6"></td><td class="s"><pre>=head2 make_blob

&nbsp;&nbsp;my $object_id = $repository-&gt;make_blob($name, $content);

This creates a new file blob in the git repository with the given name and the
file contents.

=cut</pre></td></tr>
<tr><td class="h">330</td><td colspan="7"></td></tr><tr><td class="h">331</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub make_blob {</td></tr>
<tr><td class="h">332</td><td><div class="c0">0</div></td><td></td><td></td><td><div class="c0"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L332">0</a></div></td><td><div class="c3">1</div></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ($self, $name, $content) = @_;</td></tr>
<tr><td class="h">333</td><td colspan="7"></td></tr><tr><td class="h">334</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return $self-&gt;git-&gt;run(&#39;hash-object&#39;, &#39;-t&#39;, &#39;blob&#39;, &#39;-w&#39;, &#39;--stdin&#39;, &#39;--path&#39;, $name,</td></tr>
<tr><td class="h">335</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ input =&gt; $content });</td></tr>
<tr><td class="h">336</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">337</td><td colspan="7"></td></tr><tr><td class="h">338 - 345</td><td colspan="6"></td><td class="s"><pre>=head2 make_blob_from_file

&nbsp;&nbsp;my $object_id = $repository-&gt;make_blob_from_file($name, $filename);

This is identical to L&lt;/make_blob&gt;, except that the contents are read from the
given filename on the local disk.

=cut</pre></td></tr>
<tr><td class="h">346</td><td colspan="7"></td></tr><tr><td class="h">347</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub make_blob_from_file {</td></tr>
<tr><td class="h">348</td><td><div class="c0">0</div></td><td></td><td></td><td><div class="c0"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L348">0</a></div></td><td><div class="c3">1</div></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ($self, $name, $filename) = @_;</td></tr>
<tr><td class="h">349</td><td colspan="7"></td></tr><tr><td class="h">350</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return $self-&gt;git-&gt;run(&#39;hash-object&#39;, &#39;-t&#39;, &#39;blob&#39;, &#39;-w&#39;, &#39;--path&#39;, $name, $filename);</td></tr>
<tr><td class="h">351</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">352</td><td colspan="7"></td></tr><tr><td class="h">353 - 359</td><td colspan="6"></td><td class="s"><pre>=head2 find_root

&nbsp;&nbsp;my $tree_id = $repository-&gt;find_root;

This returns the object ID for the tree at the root of the L&lt;/branch&gt;.

=cut</pre></td></tr>
<tr><td class="h">360</td><td colspan="7"></td></tr><tr><td class="h">361</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub find_root {</td></tr>
<tr><td class="h">362</td><td><div class="c0">0</div></td><td></td><td></td><td><div class="c0"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L362">0</a></div></td><td><div class="c3">1</div></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ($self) = @_;</td></tr>
<tr><td class="h">363</td><td colspan="7"></td></tr><tr><td class="h">364</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $old_tree_id;</td></tr>
<tr><td class="h">365</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my @ref_info = $self-&gt;git-&gt;run(&#39;show-ref&#39;, $self-&gt;branch);</td></tr>
<tr><td class="h">366</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;REF: for my $line (@ref_info) {</td></tr>
<tr><td class="h">367</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my ($object_id, $name) = split /\s+/, $line, 2;</td></tr>
<tr><td class="h">368</td><td colspan="7"></td></tr><tr><td class="h">369</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L369">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($name eq $self-&gt;branch) {</td></tr>
<tr><td class="h">370</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$old_tree_id = $object_id;</td></tr>
<tr><td class="h">371</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last REF;</td></tr>
<tr><td class="h">372</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">373</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">374</td><td colspan="7"></td></tr><tr><td class="h">375</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return $old_tree_id;</td></tr>
<tr><td class="h">376</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">377</td><td colspan="7"></td></tr><tr><td class="h">378 - 388</td><td colspan="6"></td><td class="s"><pre>=head2 commit_tree

&nbsp;&nbsp;my $commit_id = $self-&gt;commit_tree($old_tree_id, $new_tree_id, $comment);

This takes an existing tree commit (generally found with L&lt;/find_root&gt;), a new
tree to replace it (generally constructed by L&lt;/make_tree&gt;) and creates a
commit using the given comment.

The object ID of the committed ID is returned.

=cut</pre></td></tr>
<tr><td class="h">389</td><td colspan="7"></td></tr><tr><td class="h">390</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub commit_tree {</td></tr>
<tr><td class="h">391</td><td><div class="c0">0</div></td><td></td><td></td><td><div class="c0"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L391">0</a></div></td><td><div class="c3">1</div></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ($self, $old_tree_id, $new_tree_id, $comment) = @_;</td></tr>
<tr><td class="h">392</td><td colspan="7"></td></tr><tr><td class="h">393</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return $self-&gt;git-&gt;run(</td></tr>
<tr><td class="h">394</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;commit-tree&#39;, $new_tree_id, &#39;-p&#39;, $old_tree_id, {</td></tr>
<tr><td class="h">395</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input =&gt; $comment,</td></tr>
<tr><td class="h">396</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;env&nbsp;&nbsp;&nbsp;=&gt; {</td></tr>
<tr><td class="h">397</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GIT_AUTHOR_NAME&nbsp;&nbsp;=&gt; $self-&gt;author_name,</td></tr>
<tr><td class="h">398</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GIT_AUTHOR_EMAIL =&gt; $self-&gt;author_email,</td></tr>
<tr><td class="h">399</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},</td></tr>
<tr><td class="h">400</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},</td></tr>
<tr><td class="h">401</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;);</td></tr>
<tr><td class="h">402</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">403</td><td colspan="7"></td></tr><tr><td class="h">404 - 412</td><td colspan="6"></td><td class="s"><pre>=head2 update_root

&nbsp;&nbsp;$self-&gt;update_root($old_tree_id, $new_tree_id);

Given an old commit ID and a new commit ID, this moves the HEAD of the
L&lt;/branch&gt; so that it points to the new commit. This is called after
L&lt;/commit_tree&gt; has setup the commit.

=cut</pre></td></tr>
<tr><td class="h">413</td><td colspan="7"></td></tr><tr><td class="h">414</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub update_root {</td></tr>
<tr><td class="h">415</td><td><div class="c0">0</div></td><td></td><td></td><td><div class="c0"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L415">0</a></div></td><td><div class="c3">1</div></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ($self, $old_commit_id, $new_commit_id) = @_;</td></tr>
<tr><td class="h">416</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;git-&gt;command(&#39;update-ref&#39;, $self-&gt;branch, $new_commit_id, $old_commit_id);</td></tr>
<tr><td class="h">417</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">418</td><td colspan="7"></td></tr><tr><td class="h">419 - 426</td><td colspan="6"></td><td class="s"><pre>=head2 find_path

&nbsp;&nbsp;my $object_id = $self-&gt;find_path($path);

Given a path within the repository, this will find the object ID of that tree or
blob at that path for the L&lt;/branch&gt;.

=cut</pre></td></tr>
<tr><td class="h">427</td><td colspan="7"></td></tr><tr><td class="h">428</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub find_path {</td></tr>
<tr><td class="h">429</td><td><div class="c3">3</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L429">3</a></div></td><td><div class="c3">1</div></td><td><div>65</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ($self, $path) = @_;</td></tr>
<tr><td class="h">430</td><td colspan="7"></td></tr><tr><td class="h">431</td><td><div class="c3">3</div></td><td></td><td></td><td></td><td></td><td><div>4</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $object_id;</td></tr>
<tr><td class="h">432</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my @files;</td></tr>
<tr><td class="h">433</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;try {</td></tr>
<tr><td class="h">434</td><td><div class="c3">3</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L434">3</a></div></td><td></td><td><div>157</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@files = $self-&gt;git-&gt;run(&#39;ls-tree&#39;, $self-&gt;branch, $path);</td></tr>
<tr><td class="h">435</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">436</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;catch {</td></tr>
<tr><td class="h">437</td><td colspan="7"></td></tr><tr><td class="h">438</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Looks like an empty repo, try initializing it</td></tr>
<tr><td class="h">439</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L439">0</a></div></td><td></td><td><div class="c0"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L439">0</a></div></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($_ =~ /Not a valid object name/) {</td></tr>
<tr><td class="h">440</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;initialize_repository;</td></tr>
<tr><td class="h">441</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@files = $self-&gt;git-&gt;run(&#39;ls-tree&#39;, $self-&gt;branch, $path);</td></tr>
<tr><td class="h">442</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">443</td><td colspan="7"></td></tr><tr><td class="h">444</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# I don&#39;t know what this is, die die die!</td></tr>
<tr><td class="h">445</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else {</td></tr>
<tr><td class="h">446</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;die $_;</td></tr>
<tr><td class="h">447</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">448</td><td><div class="c3">3</div></td><td></td><td></td><td></td><td></td><td><div>22</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;};</td></tr>
<tr><td class="h">449</td><td colspan="7"></td></tr><tr><td class="h">450</td><td><div class="c3">3</div></td><td></td><td></td><td></td><td></td><td><div>87972</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;FILE: for my $line (@files) {</td></tr>
<tr><td class="h">451</td><td><div class="c3">3</div></td><td></td><td></td><td></td><td></td><td><div>34</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my ($mode, $type, $id, $name) = split /\s+/, $line, 4;</td></tr>
<tr><td class="h">452</td><td colspan="7"></td></tr><tr><td class="h">453</td><td><div class="c3">3</div></td><td><div class="c0" title="T/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L453">50</a></div></td><td></td><td></td><td></td><td><div>21</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($name eq $path) {</td></tr>
<tr><td class="h">454</td><td><div class="c3">3</div></td><td></td><td></td><td></td><td></td><td><div>9</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$object_id = $id;</td></tr>
<tr><td class="h">455</td><td><div class="c3">3</div></td><td></td><td></td><td></td><td></td><td><div>9</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last FILE;</td></tr>
<tr><td class="h">456</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">457</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">458</td><td colspan="7"></td></tr><tr><td class="h">459</td><td><div class="c3">3</div></td><td></td><td></td><td></td><td></td><td><div>41</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return $object_id;</td></tr>
<tr><td class="h">460</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">461</td><td colspan="7"></td></tr><tr><td class="h">462 - 468</td><td colspan="6"></td><td class="s"><pre>=head2 show

&nbsp;&nbsp;my $content = $repository-&gt;show($object_id);

Returns the contents of the blob for the given object ID.

=cut</pre></td></tr>
<tr><td class="h">469</td><td colspan="7"></td></tr><tr><td class="h">470</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub show {</td></tr>
<tr><td class="h">471</td><td><div class="c3">2</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L471">2</a></div></td><td><div class="c3">1</div></td><td><div>62</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ($self, $object_id) = @_;</td></tr>
<tr><td class="h">472</td><td><div class="c3">2</div></td><td></td><td></td><td></td><td></td><td><div>40</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return $self-&gt;git-&gt;run(&#39;show&#39;, $object_id);</td></tr>
<tr><td class="h">473</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">474</td><td colspan="7"></td></tr><tr><td class="h">475 - 481</td><td colspan="6"></td><td class="s"><pre>=head2 fetch_size

&nbsp;&nbsp;my $bytes = $repository-&gt;fetch_size($path);

Returns the size, in bites, of the blob at the given path.

=cut</pre></td></tr>
<tr><td class="h">482</td><td colspan="7"></td></tr><tr><td class="h">483</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub fetch_size {</td></tr>
<tr><td class="h">484</td><td><div class="c0">0</div></td><td></td><td></td><td><div class="c0"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L484">0</a></div></td><td><div class="c3">1</div></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ($self, $path) = @_;</td></tr>
<tr><td class="h">485</td><td colspan="7"></td></tr><tr><td class="h">486</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my @files = $self-&gt;git-&gt;run(&#39;ls-tree&#39;, &#39;-l&#39;, $self-&gt;branch, $path);</td></tr>
<tr><td class="h">487</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;FILE: for my $line (@files) {</td></tr>
<tr><td class="h">488</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my ($mode, $type, $id, $size, $name) = split /\s+/, $line, 5;</td></tr>
<tr><td class="h">489</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L489">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $size if $name eq $path;</td></tr>
<tr><td class="h">490</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">491</td><td colspan="7"></td></tr><tr><td class="h">492</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return;</td></tr>
<tr><td class="h">493</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">494</td><td colspan="7"></td></tr><tr><td class="h">495 - 502</td><td colspan="6"></td><td class="s"><pre>=head2 list_files

&nbsp;&nbsp;my @files = $repository-&gt;list_files($path);

Returns a list of L&lt;Yukki::Model::File&gt; objects for all the files found at
C&lt;$path&gt; in the repository.

=cut</pre></td></tr>
<tr><td class="h">503</td><td colspan="7"></td></tr><tr><td class="h">504</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub list_files {</td></tr>
<tr><td class="h">505</td><td><div class="c0">0</div></td><td></td><td></td><td><div class="c0"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L505">0</a></div></td><td><div class="c3">1</div></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ($self, $path) = @_;</td></tr>
<tr><td class="h">506</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my @files;</td></tr>
<tr><td class="h">507</td><td colspan="7"></td></tr><tr><td class="h">508</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my @tree_files = $self-&gt;git-&gt;run(&#39;ls-tree&#39;, $self-&gt;branch, $path . &#39;/&#39;);</td></tr>
<tr><td class="h">509</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;FILE: for my $line (@tree_files) {</td></tr>
<tr><td class="h">510</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my ($mode, $type, $id, $name) = split /\s+/, $line, 4;</td></tr>
<tr><td class="h">511</td><td colspan="7"></td></tr><tr><td class="h">512</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L512">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next unless $type eq &#39;blob&#39;;</td></tr>
<tr><td class="h">513</td><td colspan="7"></td></tr><tr><td class="h">514</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $filetype;</td></tr>
<tr><td class="h">515</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L515">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($name =~ s/\.(?&lt;filetype&gt;[a-z0-9]+)$//) {</td></tr>
<tr><td class="h">516</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$filetype = $+{filetype};</td></tr>
<tr><td class="h">517</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">518</td><td colspan="7"></td></tr><tr><td class="h">519</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push @files, $self-&gt;file({ path =&gt; $name, filetype =&gt; $filetype });</td></tr>
<tr><td class="h">520</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">521</td><td colspan="7"></td></tr><tr><td class="h">522</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return @files;</td></tr>
<tr><td class="h">523</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">524</td><td colspan="7"></td></tr><tr><td class="h">525 - 531</td><td colspan="6"></td><td class="s"><pre>=head2 file

&nbsp;&nbsp;my $file = $repository-&gt;file({ path =&gt; &#39;foo&#39;, filetype =&gt; &#39;yukki&#39; });

Returns a single L&lt;Yukki::Model::File&gt; object for the given path and filetype.

=cut</pre></td></tr>
<tr><td class="h">532</td><td colspan="7"></td></tr><tr><td class="h">533</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub file {</td></tr>
<tr><td class="h">534</td><td><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L534">1</a></div></td><td><div class="c3">1</div></td><td><div>2</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ($self, $params) = @_;</td></tr>
<tr><td class="h">535</td><td colspan="7"></td></tr><tr><td class="h">536</td><td><div class="c3">1</div></td><td></td><td></td><td></td><td></td><td><div>9</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;Yukki::Model::File-&gt;new(</td></tr>
<tr><td class="h">537</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%$params,</td></tr>
<tr><td class="h">538</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;app&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; $self-&gt;app,</td></tr>
<tr><td class="h">539</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;repository =&gt; $self,</td></tr>
<tr><td class="h">540</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;);</td></tr>
<tr><td class="h">541</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">542</td><td colspan="7"></td></tr><tr><td class="h">543 - 549</td><td colspan="6"></td><td class="s"><pre>=head2 default_file

&nbsp;&nbsp;my $file = $repository-&gt;default_file;

Return the default L&lt;Yukki::Model::File&gt; configured for this repository.

=cut</pre></td></tr>
<tr><td class="h">550</td><td colspan="7"></td></tr><tr><td class="h">551</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub default_file {</td></tr>
<tr><td class="h">552</td><td><div class="c0">0</div></td><td></td><td></td><td><div class="c0"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L552">0</a></div></td><td><div class="c3">1</div></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $self = shift;</td></tr>
<tr><td class="h">553</td><td colspan="7"></td></tr><tr><td class="h">554</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return Yukki::Model::File-&gt;new(</td></tr>
<tr><td class="h">555</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;full_path&nbsp;&nbsp;=&gt; $self-&gt;repository_settings-&gt;default_page,</td></tr>
<tr><td class="h">556</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;app&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; $self-&gt;app,</td></tr>
<tr><td class="h">557</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;repository =&gt; $self,</td></tr>
<tr><td class="h">558</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;);</td></tr>
<tr><td class="h">559</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">560</td><td colspan="7"></td></tr><tr><td class="h">561 - 599</td><td colspan="6"></td><td class="s"><pre>=head2 log

&nbsp;&nbsp;my @log = $repository-&gt;log( full_path =&gt; &#39;foo.yukk&#39; );

Returns a list of revisions. Each revision is a hash with the following keys:

=over

=item object_id

The object ID of the commit.

=item author_name

The name of the commti author.

=item date

The date the commit was made.

=item time_ago

A string showing how long ago the edit took place.

=item comment

The comment the author made about the comment.

=item lines_added

Number of lines added.

=item lines_removed

Number of lines removed.

=back

=cut</pre></td></tr>
<tr><td class="h">600</td><td colspan="7"></td></tr><tr><td class="h">601</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub log {</td></tr>
<tr><td class="h">602</td><td><div class="c0">0</div></td><td></td><td></td><td><div class="c0"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L602">0</a></div></td><td><div class="c3">1</div></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ($self, $full_path) = @_;</td></tr>
<tr><td class="h">603</td><td colspan="7"></td></tr><tr><td class="h">604</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my @lines = $self-&gt;git-&gt;run(</td></tr>
<tr><td class="h">605</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;log&#39;, $self-&gt;branch, &#39;--pretty=format:%H~%an~%aD~%ar~%s&#39;, &#39;--numstat&#39;,</td></tr>
<tr><td class="h">606</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;--&#39;, $full_path</td></tr>
<tr><td class="h">607</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;);</td></tr>
<tr><td class="h">608</td><td colspan="7"></td></tr><tr><td class="h">609</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my @revisions;</td></tr>
<tr><td class="h">610</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $current_revision;</td></tr>
<tr><td class="h">611</td><td colspan="7"></td></tr><tr><td class="h">612</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $mode = &#39;log&#39;;</td></tr>
<tr><td class="h">613</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;for my $line (@lines) {</td></tr>
<tr><td class="h">614</td><td colspan="7"></td></tr><tr><td class="h">615</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# First line is the log line</td></tr>
<tr><td class="h">616</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L616">0</a></div><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L616">0</a></div><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L616">0</a></div></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($mode eq &#39;log&#39;) {</td></tr>
<tr><td class="h">617</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$current_revision = {};</td></tr>
<tr><td class="h">618</td><td colspan="7"></td></tr><tr><td class="h">619</td><td><div class="c0">0</div><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@{ $current_revision }{qw( object_id author_name date time_ago comment )}</td></tr>
<tr><td class="h">620</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= split /~/, $line, 5;</td></tr>
<tr><td class="h">621</td><td colspan="7"></td></tr><tr><td class="h">622</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$current_revision-&gt;{date} = DateTime::Format::Mail-&gt;parse_datetime(</td></tr>
<tr><td class="h">623</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$current_revision-&gt;{date}</td></tr>
<tr><td class="h">624</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);</td></tr>
<tr><td class="h">625</td><td colspan="7"></td></tr><tr><td class="h">626</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mode = &#39;stat&#39;;</td></tr>
<tr><td class="h">627</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">628</td><td colspan="7"></td></tr><tr><td class="h">629</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Remaining lines are the numstat</td></tr>
<tr><td class="h">630</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elsif ($mode eq &#39;stat&#39;) {</td></tr>
<tr><td class="h">631</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my ($added, $removed, $path) = split /\s+/, $line, 3;</td></tr>
<tr><td class="h">632</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L632">0</a></div></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($path eq $full_path) {</td></tr>
<tr><td class="h">633</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$current_revision-&gt;{lines_added}&nbsp;&nbsp;&nbsp;= $added;</td></tr>
<tr><td class="h">634</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$current_revision-&gt;{lines_removed} = $removed;</td></tr>
<tr><td class="h">635</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">636</td><td colspan="7"></td></tr><tr><td class="h">637</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mode = &#39;skip&#39;;</td></tr>
<tr><td class="h">638</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">639</td><td colspan="7"></td></tr><tr><td class="h">640</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Once we know the numstat, search for the blank and start over</td></tr>
<tr><td class="h">641</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elsif ($mode eq &#39;skip&#39;) {</td></tr>
<tr><td class="h">642</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push @revisions, $current_revision;</td></tr>
<tr><td class="h">643</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L643">0</a></div></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mode = &#39;log&#39; if $line !~ /\S/;</td></tr>
<tr><td class="h">644</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">645</td><td colspan="7"></td></tr><tr><td class="h">646</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else {</td></tr>
<tr><td class="h">647</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http_throw(&quot;invalid parse mode &#39;$mode&#39;&quot;);</td></tr>
<tr><td class="h">648</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">649</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">650</td><td colspan="7"></td></tr><tr><td class="h">651</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return @revisions;</td></tr>
<tr><td class="h">652</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">653</td><td colspan="7"></td></tr><tr><td class="h">654 - 666</td><td colspan="6"></td><td class="s"><pre>=head2 diff_blobs

&nbsp;&nbsp;my @chunks = $self-&gt;diff_blobs(&#39;file.yukki&#39;, &#39;a939fe...&#39;, &#39;b7763d...&#39;);

Given a file path and two object IDs, returns a list of chunks showing the difference between to revisions of that path. Each chunk is a two element array. The first element is the type of chunk and the second is any detail for that chunk.

The types are:

&nbsp;&nbsp;&nbsp;&nbsp;&quot;+&quot;&nbsp;&nbsp;&nbsp;&nbsp;This chunk was added to the second revision.
&nbsp;&nbsp;&nbsp;&nbsp;&quot;-&quot;&nbsp;&nbsp;&nbsp;&nbsp;This chunk was removed in the second revision.
&nbsp;&nbsp;&nbsp;&nbsp;&quot; &quot;&nbsp;&nbsp;&nbsp;&nbsp;This chunk is the same in both revisions.

=cut</pre></td></tr>
<tr><td class="h">667</td><td colspan="7"></td></tr><tr><td class="h">668</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub diff_blobs {</td></tr>
<tr><td class="h">669</td><td><div class="c0">0</div></td><td></td><td></td><td><div class="c0"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L669">0</a></div></td><td><div class="c3">1</div></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ($self, $path, $object_id_1, $object_id_2) = @_;</td></tr>
<tr><td class="h">670</td><td colspan="7"></td></tr><tr><td class="h">671</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my @lines = $self-&gt;git-&gt;run(</td></tr>
<tr><td class="h">672</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;diff&#39;, &#39;--word-diff=porcelain&#39;, &#39;--unified=10000000&#39;, &#39;--patience&#39;,</td></tr>
<tr><td class="h">673</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$object_id_1, $object_id_2, &#39;--&#39;, $path,</td></tr>
<tr><td class="h">674</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;);</td></tr>
<tr><td class="h">675</td><td colspan="7"></td></tr><tr><td class="h">676</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my @chunks;</td></tr>
<tr><td class="h">677</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $last_chunk_type = &#39;&#39;;</td></tr>
<tr><td class="h">678</td><td colspan="7"></td></tr><tr><td class="h">679</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $i = 0;</td></tr>
<tr><td class="h">680</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;LINE: for my $line (@lines) {</td></tr>
<tr><td class="h">681</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L681">0</a></div></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next if $i++ &lt; 5;</td></tr>
<tr><td class="h">682</td><td colspan="7"></td></tr><tr><td class="h">683</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my ($type, $detail) = $line =~ /^(.)(.*)$/;</td></tr>
<tr><td class="h">684</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L684">0</a></div><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L684">0</a></div></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($type =~ /^(?:~| |\+|-)$/) {</td></tr>
<tr><td class="h">685</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L685">0</a></div><div class="c0" title="-/-"><a href="lib-Yukki-Model-Repository-pm--branch.html#L685">0</a></div></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($last_chunk_type eq $type) {</td></tr>
<tr><td class="h">686</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$chunks[-1][1] .= $detail;</td></tr>
<tr><td class="h">687</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">688</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elsif ($type eq &#39;~&#39;) {</td></tr>
<tr><td class="h">689</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$chunks[-1][1] .= &quot;\n&quot;;</td></tr>
<tr><td class="h">690</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">691</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else {</td></tr>
<tr><td class="h">692</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push @chunks, [ $type, $detail ];</td></tr>
<tr><td class="h">693</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$last_chunk_type = $type;</td></tr>
<tr><td class="h">694</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">695</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">696</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elsif ($type eq &#39;\\&#39;) { }</td></tr>
<tr><td class="h">697</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else { warn &quot;unknown diff line type $type&quot; }</td></tr>
<tr><td class="h">698</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">699</td><td colspan="7"></td></tr><tr><td class="h">700</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return @chunks;</td></tr>
<tr><td class="h">701</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">702</td><td colspan="7"></td></tr><tr><td class="h">703 - 709</td><td colspan="6"></td><td class="s"><pre>=head2 initialize_repository

&nbsp;&nbsp;$self-&gt;initialize_repository;

Run on an empty repository to create an empty one.

=cut</pre></td></tr>
<tr><td class="h">710</td><td colspan="7"></td></tr><tr><td class="h">711</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub initialize_repository {</td></tr>
<tr><td class="h">712</td><td><div class="c0">0</div></td><td></td><td></td><td><div class="c0"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L712">0</a></div></td><td><div class="c3">1</div></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $self = shift;</td></tr>
<tr><td class="h">713</td><td colspan="7"></td></tr><tr><td class="h">714</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $repository_path = &#39;&#39;.$self-&gt;repository_path;</td></tr>
<tr><td class="h">715</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;Git::Repository-&gt;run(&#39;init&#39;, &#39;--bare&#39;, $repository_path);</td></tr>
<tr><td class="h">716</td><td colspan="7"></td></tr><tr><td class="h">717</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# TODO This would be nice to have as a config.</td></tr>
<tr><td class="h">718</td><td><div class="c0">0</div></td><td></td><td><div class="c0"><a href="lib-Yukki-Model-Repository-pm--condition.html#L718">0</a></div></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $title&nbsp;&nbsp;= $self-&gt;repository_settings-&gt;name // &#39;Untitled&#39;;</td></tr>
<tr><td class="h">719</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $stub_main = &lt;&lt;END_OF_STUB_MAIN;</td></tr>
<tr><td class="h">720</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"># $title</td></tr>
<tr><td class="h">721</td><td colspan="7"></td></tr><tr><td class="h">722</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">Welcome to your new wiki repository. The first thing you will probably</td></tr>
<tr><td class="h">723</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">want to do is edit this page.</td></tr>
<tr><td class="h">724</td><td colspan="7"></td></tr><tr><td class="h">725</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">Cheers.</td></tr>
<tr><td class="h">726</td><td colspan="7"></td></tr><tr><td class="h">727</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">END_OF_STUB_MAIN</td></tr>
<tr><td class="h">728</td><td colspan="7"></td></tr><tr><td class="h">729</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $page = $self-&gt;repository_settings-&gt;default_page;</td></tr>
<tr><td class="h">730</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $object_id = $self-&gt;git-&gt;run(&#39;hash-object&#39;, &#39;-t&#39;, &#39;blob&#39;, &#39;-w&#39;, &#39;--stdin&#39;, &quot;--path=$page&quot;, { input =&gt; $stub_main });</td></tr>
<tr><td class="h">731</td><td colspan="7"></td></tr><tr><td class="h">732</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $stub_tree = &quot;100655 blob $object_id\t$page\n&quot;;</td></tr>
<tr><td class="h">733</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $tree_id&nbsp;&nbsp;&nbsp;= $self-&gt;git-&gt;run(&#39;mktree&#39;, { input =&gt; $stub_tree });</td></tr>
<tr><td class="h">734</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $commit_id = $self-&gt;git-&gt;run(&#39;commit-tree&#39;, $tree_id, {</td></tr>
<tr><td class="h">735</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input =&gt; &#39;Initializing empty Yukki repository.&#39;,</td></tr>
<tr><td class="h">736</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;env&nbsp;&nbsp;&nbsp;=&gt; {</td></tr>
<tr><td class="h">737</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GIT_AUTHOR_NAME&nbsp;&nbsp;=&gt; &#39;Yukki::Model::Repository&#39;,</td></tr>
<tr><td class="h">738</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GIT_AUTHOR_EMAIL =&gt; &#39;hanenkamp@cpan.org&#39;,</td></tr>
<tr><td class="h">739</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},</td></tr>
<tr><td class="h">740</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;});</td></tr>
<tr><td class="h">741</td><td colspan="7"></td></tr><tr><td class="h">742</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $branch = $self-&gt;branch;</td></tr>
<tr><td class="h">743</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;git-&gt;run(&#39;update-ref&#39;, $branch, $commit_id, &#39;0&#39; x 40);</td></tr>
<tr><td class="h">744</td><td colspan="7"></td></tr><tr><td class="h">745</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return;</td></tr>
<tr><td class="h">746</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">747</td><td colspan="7"></td></tr><tr><td class="h">748 - 754</td><td colspan="6"></td><td class="s"><pre>=head2 clone_repository

&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;clone_repository($origin);

Given a remote repository URI to clone from in C&lt;$origin&gt;, initialize the local repository from a clone of the remote one.

=cut</pre></td></tr>
<tr><td class="h">755</td><td colspan="7"></td></tr><tr><td class="h">756</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub clone_repository {</td></tr>
<tr><td class="h">757</td><td><div class="c0">0</div></td><td></td><td></td><td><div class="c0"><a href="lib-Yukki-Model-Repository-pm--subroutine.html#L757">0</a></div></td><td><div class="c3">1</div></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my ($self, $origin) = @_;</td></tr>
<tr><td class="h">758</td><td colspan="7"></td></tr><tr><td class="h">759</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $repository_path = &#39;&#39;.$self-&gt;repository_path;</td></tr>
<tr><td class="h">760</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;Git::Repository-&gt;run(&#39;clone&#39;, &#39;--bare&#39;, $origin, $repository_path);</td></tr>
<tr><td class="h">761</td><td colspan="7"></td></tr><tr><td class="h">762</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return;</td></tr>
<tr><td class="h">763</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">764</td><td colspan="7"></td></tr><tr><td class="h">765</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">1;</td></tr>
</table>
</body>
</html>