Files in Nextcloud are licensed under the Affero General Public License version 3, the text of which can be found in COPYING, or any later version of the AGPL, unless otherwise noted. Licensing of components: * jQuery: MIT / GPL * HTTP: 3 clause BSD * MDB2: BSD style custom * User: AGPL * XML/RPC: MIT / PHP * Elementary filetype icons: GPL v3+ All unmodified files from these and other sources retain their original copyright and license notices: see the relevant individual files. Attribution information for Nextcloud is contained in the AUTHORS file. rc='/cgit.png' alt='cgit logo'/></a></td> <td class='main'><a href='/'>index</a> : <a href='/gitea.git/'>gitea.git</a></td><td class='form'><form method='get'> <input type='hidden' name='id' value='5651c650c09accbb01bfe21e268f7d289a3b5d19'/><select name='h' onchange='this.form.submit();'> <option value='main'>main</option> <option value='release/v1.10'>release/v1.10</option> <option value='release/v1.11'>release/v1.11</option> <option value='release/v1.12'>release/v1.12</option> <option value='release/v1.13'>release/v1.13</option> <option value='release/v1.14'>release/v1.14</option> <option value='release/v1.15'>release/v1.15</option> <option value='release/v1.16'>release/v1.16</option> <option value='release/v1.17'>release/v1.17</option> <option value='release/v1.18'>release/v1.18</option> <option value='release/v1.19'>release/v1.19</option> <option value='release/v1.20'>release/v1.20</option> <option value='release/v1.21'>release/v1.21</option> <option value='release/v1.22'>release/v1.22</option> <option value='release/v1.22-legacy' selected='selected'>release/v1.22-legacy</option> <option value='release/v1.23'>release/v1.23</option> <option value='release/v1.8'>release/v1.8</option> <option value='release/v1.9'>release/v1.9</option> </select> <input type='submit' value='switch'/></form></td></tr> <tr><td class='sub'>Git with a cup of tea! Painless self-hosted all-in-one software development service, including Git hosting, code review, team collaboration, package registry and CI/CD: https://github.com/go-gitea/gitea</td><td class='sub right'>www-data</td></tr></table> <table class='tabs'><tr><td> <a href='/gitea.git/about/?h=release/v1.22-legacy'>about</a><a href='/gitea.git/?h=release/v1.22-legacy'>summary</a><a href='/gitea.git/refs/?h=release/v1.22-legacy&id=5651c650c09accbb01bfe21e268f7d289a3b5d19'>refs</a><a href='/gitea.git/log/models/lfs_lock.go?h=release/v1.22-legacy'>log</a><a class='active' href='/gitea.git/tree/models/lfs_lock.go?h=release/v1.22-legacy&id=5651c650c09accbb01bfe21e268f7d289a3b5d19'>tree</a><a href='/gitea.git/commit/models/lfs_lock.go?h=release/v1.22-legacy&id=5651c650c09accbb01bfe21e268f7d289a3b5d19'>commit</a><a href='/gitea.git/diff/models/lfs_lock.go?h=release/v1.22-legacy&id=5651c650c09accbb01bfe21e268f7d289a3b5d19'>diff</a><a href='/gitea.git/stats/models/lfs_lock.go?h=release/v1.22-legacy'>stats</a></td><td class='form'><form class='right' method='get' action='/gitea.git/log/models/lfs_lock.go'> <input type='hidden' name='h' value='release/v1.22-legacy'/><input type='hidden' name='id' value='5651c650c09accbb01bfe21e268f7d289a3b5d19'/><select name='qt'> <option value='grep'>log msg</option> <option value='author'>author</option> <option value='committer'>committer</option> <option value='range'>range</option> </select> <input class='txt' type='search' size='10' name='q' value=''/> <input type='submit' value='search'/> </form> </td></tr></table> <div class='path'>path: <a href='/gitea.git/tree/?h=release/v1.22-legacy&id=5651c650c09accbb01bfe21e268f7d289a3b5d19'>root</a>/<a href='/gitea.git/tree/models?h=release/v1.22-legacy&id=5651c650c09accbb01bfe21e268f7d289a3b5d19'>models</a>/<a href='/gitea.git/tree/models/lfs_lock.go?h=release/v1.22-legacy&id=5651c650c09accbb01bfe21e268f7d289a3b5d19'>lfs_lock.go</a></div><div class='content'>blob: a77dd24e9fa6d8b89aea4817c1e653e6f64ee420 (<a href='/gitea.git/plain/models/lfs_lock.go?h=release/v1.22-legacy&id=5651c650c09accbb01bfe21e268f7d289a3b5d19'>plain</a>) <table summary='blob content' class='blob'> <tr><td class='linenumbers'><pre><a id='n1' href='#n1'>1</a> <a id='n2' href='#n2'>2</a> <a id='n3' href='#n3'>3</a> <a id='n4' href='#n4'>4</a> <a id='n5' href='#n5'>5</a> <a id='n6' href='#n6'>6</a> <a id='n7' href='#n7'>7</a> <a id='n8' href='#n8'>8</a> <a id='n9' href='#n9'>9</a> <a id='n10' href='#n10'>10</a> <a id='n11' href='#n11'>11</a> <a id='n12' href='#n12'>12</a> <a id='n13' href='#n13'>13</a> <a id='n14' href='#n14'>14</a> <a id='n15' href='#n15'>15</a> <a id='n16' href='#n16'>16</a> <a id='n17' href='#n17'>17</a> <a id='n18' href='#n18'>18</a> <a id='n19' href='#n19'>19</a> <a id='n20' href='#n20'>20</a> <a id='n21' href='#n21'>21</a> <a id='n22' href='#n22'>22</a> <a id='n23' href='#n23'>23</a> <a id='n24' href='#n24'>24</a> <a id='n25' href='#n25'>25</a> <a id='n26' href='#n26'>26</a> <a id='n27' href='#n27'>27</a> <a id='n28' href='#n28'>28</a> <a id='n29' href='#n29'>29</a> <a id='n30' href='#n30'>30</a> <a id='n31' href='#n31'>31</a> <a id='n32' href='#n32'>32</a> <a id='n33' href='#n33'>33</a> <a id='n34' href='#n34'>34</a> <a id='n35' href='#n35'>35</a> <a id='n36' href='#n36'>36</a> <a id='n37' href='#n37'>37</a> <a id='n38' href='#n38'>38</a> <a id='n39' href='#n39'>39</a> <a id='n40' href='#n40'>40</a> <a id='n41' href='#n41'>41</a> <a id='n42' href='#n42'>42</a> <a id='n43' href='#n43'>43</a> <a id='n44' href='#n44'>44</a> <a id='n45' href='#n45'>45</a> <a id='n46' href='#n46'>46</a> <a id='n47' href='#n47'>47</a> <a id='n48' href='#n48'>48</a> <a id='n49' href='#n49'>49</a> <a id='n50' href='#n50'>50</a> <a id='n51' href='#n51'>51</a> <a id='n52' href='#n52'>52</a> <a id='n53' href='#n53'>53</a> <a id='n54' href='#n54'>54</a> <a id='n55' href='#n55'>55</a> <a id='n56' href='#n56'>56</a> <a id='n57' href='#n57'>57</a> <a id='n58' href='#n58'>58</a> <a id='n59' href='#n59'>59</a> <a id='n60' href='#n60'>60</a> <a id='n61' href='#n61'>61</a> <a id='n62' href='#n62'>62</a> <a id='n63' href='#n63'>63</a> <a id='n64' href='#n64'>64</a> <a id='n65' href='#n65'>65</a> <a id='n66' href='#n66'>66</a> <a id='n67' href='#n67'>67</a> <a id='n68' href='#n68'>68</a> <a id='n69' href='#n69'>69</a> <a id='n70' href='#n70'>70</a> <a id='n71' href='#n71'>71</a> <a id='n72' href='#n72'>72</a> <a id='n73' href='#n73'>73</a> <a id='n74' href='#n74'>74</a> <a id='n75' href='#n75'>75</a> <a id='n76' href='#n76'>76</a> <a id='n77' href='#n77'>77</a> <a id='n78' href='#n78'>78</a> <a id='n79' href='#n79'>79</a> <a id='n80' href='#n80'>80</a> <a id='n81' href='#n81'>81</a> <a id='n82' href='#n82'>82</a> <a id='n83' href='#n83'>83</a> <a id='n84' href='#n84'>84</a> <a id='n85' href='#n85'>85</a> <a id='n86' href='#n86'>86</a> <a id='n87' href='#n87'>87</a> <a id='n88' href='#n88'>88</a> <a id='n89' href='#n89'>89</a> <a id='n90' href='#n90'>90</a> <a id='n91' href='#n91'>91</a> <a id='n92' href='#n92'>92</a> <a id='n93' href='#n93'>93</a> <a id='n94' href='#n94'>94</a> <a id='n95' href='#n95'>95</a> <a id='n96' href='#n96'>96</a> <a id='n97' href='#n97'>97</a> <a id='n98' href='#n98'>98</a> <a id='n99' href='#n99'>99</a> <a id='n100' href='#n100'>100</a> <a id='n101' href='#n101'>101</a> <a id='n102' href='#n102'>102</a> <a id='n103' href='#n103'>103</a> <a id='n104' href='#n104'>104</a> <a id='n105' href='#n105'>105</a> <a id='n106' href='#n106'>106</a> <a id='n107' href='#n107'>107</a> <a id='n108' href='#n108'>108</a> <a id='n109' href='#n109'>109</a> <a id='n110' href='#n110'>110</a> <a id='n111' href='#n111'>111</a> <a id='n112' href='#n112'>112</a> <a id='n113' href='#n113'>113</a> <a id='n114' href='#n114'>114</a> <a id='n115' href='#n115'>115</a> <a id='n116' href='#n116'>116</a> <a id='n117' href='#n117'>117</a> <a id='n118' href='#n118'>118</a> <a id='n119' href='#n119'>119</a> <a id='n120' href='#n120'>120</a> <a id='n121' href='#n121'>121</a> <a id='n122' href='#n122'>122</a> <a id='n123' href='#n123'>123</a> <a id='n124' href='#n124'>124</a> <a id='n125' href='#n125'>125</a> <a id='n126' href='#n126'>126</a> <a id='n127' href='#n127'>127</a> <a id='n128' href='#n128'>128</a> <a id='n129' href='#n129'>129</a> <a id='n130' href='#n130'>130</a> <a id='n131' href='#n131'>131</a> <a id='n132' href='#n132'>132</a> <a id='n133' href='#n133'>133</a> <a id='n134' href='#n134'>134</a> <a id='n135' href='#n135'>135</a> <a id='n136' href='#n136'>136</a> <a id='n137' href='#n137'>137</a> <a id='n138' href='#n138'>138</a> <a id='n139' href='#n139'>139</a> <a id='n140' href='#n140'>140</a> <a id='n141' href='#n141'>141</a> <a id='n142' href='#n142'>142</a> <a id='n143' href='#n143'>143</a> <a id='n144' href='#n144'>144</a> <a id='n145' href='#n145'>145</a> <a id='n146' href='#n146'>146</a> <a id='n147' href='#n147'>147</a> <a id='n148' href='#n148'>148</a> <a id='n149' href='#n149'>149</a> <a id='n150' href='#n150'>150</a> <a id='n151' href='#n151'>151</a> <a id='n152' href='#n152'>152</a> <a id='n153' href='#n153'>153</a> <a id='n154' href='#n154'>154</a> <a id='n155' href='#n155'>155</a> <a id='n156' href='#n156'>156</a> <a id='n157' href='#n157'>157</a> <a id='n158' href='#n158'>158</a> <a id='n159' href='#n159'>159</a> <a id='n160' href='#n160'>160</a> <a id='n161' href='#n161'>161</a> <a id='n162' href='#n162'>162</a> <a id='n163' href='#n163'>163</a> <a id='n164' href='#n164'>164</a> <a id='n165' href='#n165'>165</a> </pre></td> <td class='lines'><pre><code><style>pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight .hll { background-color: #ffffcc } .highlight .c { color: #888888 } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */</style><div class="highlight"><pre><span></span><span class="c1">// Copyright 2017 The Gitea Authors. All rights reserved.</span> <span class="c1">// Use of this source code is governed by a MIT-style</span> <span class="c1">// license that can be found in the LICENSE file.</span> <span class="kn">package</span><span class="w"> </span><span class="nx">models</span> <span class="kn">import</span><span class="w"> </span><span class="p">(</span> <span class="w"> </span><span class="s">"fmt"</span> <span class="w"> </span><span class="s">"path"</span> <span class="w"> </span><span class="s">"strings"</span> <span class="w"> </span><span class="s">"time"</span> <span class="w"> </span><span class="s">"code.gitea.io/gitea/models/db"</span> <span class="w"> </span><span class="s">"code.gitea.io/gitea/models/perm"</span> <span class="w"> </span><span class="nx">repo_model</span><span class="w"> </span><span class="s">"code.gitea.io/gitea/models/repo"</span> <span class="w"> </span><span class="s">"code.gitea.io/gitea/models/unit"</span> <span class="w"> </span><span class="nx">user_model</span><span class="w"> </span><span class="s">"code.gitea.io/gitea/models/user"</span> <span class="w"> </span><span class="s">"code.gitea.io/gitea/modules/setting"</span> <span class="p">)</span> <span class="c1">// LFSLock represents a git lfs lock of repository.</span> <span class="kd">type</span><span class="w"> </span><span class="nx">LFSLock</span><span class="w"> </span><span class="kd">struct</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nx">ID</span><span class="w"> </span><span class="kt">int64</span><span class="w"> </span><span class="s">`xorm:"pk autoincr"`</span> <span class="w"> </span><span class="nx">RepoID</span><span class="w"> </span><span class="kt">int64</span><span class="w"> </span><span class="s">`xorm:"INDEX NOT NULL"`</span> <span class="w"> </span><span class="nx">OwnerID</span><span class="w"> </span><span class="kt">int64</span><span class="w"> </span><span class="s">`xorm:"INDEX NOT NULL"`</span> <span class="w"> </span><span class="nx">Path</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="s">`xorm:"TEXT"`</span> <span class="w"> </span><span class="nx">Created</span><span class="w"> </span><span class="nx">time</span><span class="p">.</span><span class="nx">Time</span><span class="w"> </span><span class="s">`xorm:"created"`</span> <span class="p">}</span> <span class="kd">func</span><span class="w"> </span><span class="nx">init</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nx">db</span><span class="p">.</span><span class="nx">RegisterModel</span><span class="p">(</span><span class="nb">new</span><span class="p">(</span><span class="nx">LFSLock</span><span class="p">))</span> <span class="p">}</span> <span class="c1">// BeforeInsert is invoked from XORM before inserting an object of this type.</span> <span class="kd">func</span><span class="w"> </span><span class="p">(</span><span class="nx">l</span><span class="w"> </span><span class="o">*</span><span class="nx">LFSLock</span><span class="p">)</span><span class="w"> </span><span class="nx">BeforeInsert</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nx">l</span><span class="p">.</span><span class="nx">Path</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">cleanPath</span><span class="p">(</span><span class="nx">l</span><span class="p">.</span><span class="nx">Path</span><span class="p">)</span> <span class="p">}</span> <span class="kd">func</span><span class="w"> </span><span class="nx">cleanPath</span><span class="p">(</span><span class="nx">p</span><span class="w"> </span><span class="kt">string</span><span class="p">)</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">path</span><span class="p">.</span><span class="nx">Clean</span><span class="p">(</span><span class="s">"/"</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">p</span><span class="p">)[</span><span class="mi">1</span><span class="p">:]</span> <span class="p">}</span> <span class="c1">// CreateLFSLock creates a new lock.</span> <span class="kd">func</span><span class="w"> </span><span class="nx">CreateLFSLock</span><span class="p">(</span><span class="nx">repo</span><span class="w"> </span><span class="o">*</span><span class="nx">repo_model</span><span class="p">.</span><span class="nx">Repository</span><span class="p">,</span><span class="w"> </span><span class="nx">lock</span><span class="w"> </span><span class="o">*</span><span class="nx">LFSLock</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="nx">LFSLock</span><span class="p">,</span><span class="w"> </span><span class="kt">error</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nx">err</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">CheckLFSAccessForRepo</span><span class="p">(</span><span class="nx">lock</span><span class="p">.</span><span class="nx">OwnerID</span><span class="p">,</span><span class="w"> </span><span class="nx">repo</span><span class="p">,</span><span class="w"> </span><span class="nx">perm</span><span class="p">.</span><span class="nx">AccessModeWrite</span><span class="p">)</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">err</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">nil</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">nil</span><span class="p">,</span><span class="w"> </span><span class="nx">err</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="nx">lock</span><span class="p">.</span><span class="nx">Path</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">cleanPath</span><span class="p">(</span><span class="nx">lock</span><span class="p">.</span><span class="nx">Path</span><span class="p">)</span> <span class="w"> </span><span class="nx">lock</span><span class="p">.</span><span class="nx">RepoID</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">repo</span><span class="p">.</span><span class="nx">ID</span> <span class="w"> </span><span class="nx">l</span><span class="p">,</span><span class="w"> </span><span class="nx">err</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">GetLFSLock</span><span class="p">(</span><span class="nx">repo</span><span class="p">,</span><span class="w"> </span><span class="nx">lock</span><span class="p">.</span><span class="nx">Path</span><span class="p">)</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">err</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">nil</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">l</span><span class="p">,</span><span class="w"> </span><span class="nx">ErrLFSLockAlreadyExist</span><span class="p">{</span><span class="nx">lock</span><span class="p">.</span><span class="nx">RepoID</span><span class="p">,</span><span class="w"> </span><span class="nx">lock</span><span class="p">.</span><span class="nx">Path</span><span class="p">}</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">!</span><span class="nx">IsErrLFSLockNotExist</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">nil</span><span class="p">,</span><span class="w"> </span><span class="nx">err</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="nx">err</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">db</span><span class="p">.</span><span class="nx">Insert</span><span class="p">(</span><span class="nx">db</span><span class="p">.</span><span class="nx">DefaultContext</span><span class="p">,</span><span class="w"> </span><span class="nx">lock</span><span class="p">)</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">lock</span><span class="p">,</span><span class="w"> </span><span class="nx">err</span> <span class="p">}</span> <span class="c1">// GetLFSLock returns release by given path.</span> <span class="kd">func</span><span class="w"> </span><span class="nx">GetLFSLock</span><span class="p">(</span><span class="nx">repo</span><span class="w"> </span><span class="o">*</span><span class="nx">repo_model</span><span class="p">.</span><span class="nx">Repository</span><span class="p">,</span><span class="w"> </span><span class="nx">path</span><span class="w"> </span><span class="kt">string</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="nx">LFSLock</span><span class="p">,</span><span class="w"> </span><span class="kt">error</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nx">path</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">cleanPath</span><span class="p">(</span><span class="nx">path</span><span class="p">)</span> <span class="w"> </span><span class="nx">rel</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="o">&</span><span class="nx">LFSLock</span><span class="p">{</span><span class="nx">RepoID</span><span class="p">:</span><span class="w"> </span><span class="nx">repo</span><span class="p">.</span><span class="nx">ID</span><span class="p">}</span> <span class="w"> </span><span class="nx">has</span><span class="p">,</span><span class="w"> </span><span class="nx">err</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">db</span><span class="p">.</span><span class="nx">GetEngine</span><span class="p">(</span><span class="nx">db</span><span class="p">.</span><span class="nx">DefaultContext</span><span class="p">).</span><span class="nx">Where</span><span class="p">(</span><span class="s">"lower(path) = ?"</span><span class="p">,</span><span class="w"> </span><span class="nx">strings</span><span class="p">.</span><span class="nx">ToLower</span><span class="p">(</span><span class="nx">path</span><span class="p">)).</span><span class="nx">Get</span><span class="p">(</span><span class="nx">rel</span><span class="p">)</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">err</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">nil</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">nil</span><span class="p">,</span><span class="w"> </span><span class="nx">err</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">!</span><span class="nx">has</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">nil</span><span class="p">,</span><span class="w"> </span><span class="nx">ErrLFSLockNotExist</span><span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="nx">repo</span><span class="p">.</span><span class="nx">ID</span><span class="p">,</span><span class="w"> </span><span class="nx">path</span><span class="p">}</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">rel</span><span class="p">,</span><span class="w"> </span><span class="kc">nil</span> <span class="p">}</span> <span class="c1">// GetLFSLockByID returns release by given id.</span> <span class="kd">func</span><span class="w"> </span><span class="nx">GetLFSLockByID</span><span class="p">(</span><span class="nx">id</span><span class="w"> </span><span class="kt">int64</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="nx">LFSLock</span><span class="p">,</span><span class="w"> </span><span class="kt">error</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nx">lock</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nb">new</span><span class="p">(</span><span class="nx">LFSLock</span><span class="p">)</span> <span class="w"> </span><span class="nx">has</span><span class="p">,</span><span class="w"> </span><span class="nx">err</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">db</span><span class="p">.</span><span class="nx">GetEngine</span><span class="p">(</span><span class="nx">db</span><span class="p">.</span><span class="nx">DefaultContext</span><span class="p">).</span><span class="nx">ID</span><span class="p">(</span><span class="nx">id</span><span class="p">).</span><span class="nx">Get</span><span class="p">(</span><span class="nx">lock</span><span class="p">)</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">err</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">nil</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">nil</span><span class="p">,</span><span class="w"> </span><span class="nx">err</span> <span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">!</span><span class="nx">has</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">nil</span><span class="p">,</span><span class="w"> </span><span class="nx">ErrLFSLockNotExist</span><span class="p">{</span><span class="nx">id</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="s">""</span><span class="p">}</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">lock</span><span class="p">,</span><span class="w"> </span><span class="kc">nil</span> <span class="p">}</span> <span class="c1">// GetLFSLockByRepoID returns a list of locks of repository.</span> <span class="kd">func</span><span class="w"> </span><span class="nx">GetLFSLockByRepoID</span><span class="p">(</span><span class="nx">repoID</span><span class="w"> </span><span class="kt">int64</span><span class="p">,</span><span class="w"> </span><span class="nx">page</span><span class="p">,</span><span class="w"> </span><span class="nx">pageSize</span><span class="w"> </span><span class="kt">int</span><span class="p">)</span><span class="w"> </span><span class="p">([]</span><span class="o">*</span><span class="nx">LFSLock</span><span class="p">,</span><span class="w"> </span><span class="kt">error</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nx">e</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">db</span><span class="p">.</span><span class="nx">GetEngine</span><span class="p">(</span><span class="nx">db</span><span class="p">.</span><span class="nx">DefaultContext</span><span class="p">)</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">page</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="nx">pageSize</span><span class="w"> </span><span class="p">></span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nx">start</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="mi">0</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">page</span><span class="w"> </span><span class="p">></span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nx">start</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">(</span><span class="nx">page</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="nx">pageSize</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="nx">e</span><span class="p">.</span><span class="nx">Limit</span><span class="p">(</span><span class="nx">pageSize</span><span class="p">,</span><span class="w"> </span><span class="nx">start</span><span class="p">)</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="nx">lfsLocks</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nb">make</span><span class="p">([]</span><span class="o">*</span><span class="nx">LFSLock</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="nx">pageSize</span><span class="p">)</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">lfsLocks</span><span class="p">,</span><span class="w"> </span><span class="nx">e</span><span class="p">.</span><span class="nx">Find</span><span class="p">(</span><span class="o">&</span><span class="nx">lfsLocks</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="nx">LFSLock</span><span class="p">{</span><span class="nx">RepoID</span><span class="p">:</span><span class="w"> </span><span class="nx">repoID</span><span class="p">})</span> <span class="p">}</span> <span class="c1">// GetTreePathLock returns LSF lock for the treePath</span> <span class="kd">func</span><span class="w"> </span><span class="nx">GetTreePathLock</span><span class="p">(</span><span class="nx">repoID</span><span class="w"> </span><span class="kt">int64</span><span class="p">,</span><span class="w"> </span><span class="nx">treePath</span><span class="w"> </span><span class="kt">string</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="nx">LFSLock</span><span class="p">,</span><span class="w"> </span><span class="kt">error</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">!</span><span class="nx">setting</span><span class="p">.</span><span class="nx">LFS</span><span class="p">.</span><span class="nx">StartServer</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">nil</span><span class="p">,</span><span class="w"> </span><span class="kc">nil</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="nx">locks</span><span class="p">,</span><span class="w"> </span><span class="nx">err</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">GetLFSLockByRepoID</span><span class="p">(</span><span class="nx">repoID</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">err</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">nil</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">nil</span><span class="p">,</span><span class="w"> </span><span class="nx">err</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="nx">_</span><span class="p">,</span><span class="w"> </span><span class="nx">lock</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="k">range</span><span class="w"> </span><span class="nx">locks</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">lock</span><span class="p">.</span><span class="nx">Path</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nx">treePath</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">lock</span><span class="p">,</span><span class="w"> </span><span class="kc">nil</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">nil</span><span class="p">,</span><span class="w"> </span><span class="kc">nil</span> <span class="p">}</span> <span class="c1">// CountLFSLockByRepoID returns a count of all LFSLocks associated with a repository.</span> <span class="kd">func</span><span class="w"> </span><span class="nx">CountLFSLockByRepoID</span><span class="p">(</span><span class="nx">repoID</span><span class="w"> </span><span class="kt">int64</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="kt">int64</span><span class="p">,</span><span class="w"> </span><span class="kt">error</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">db</span><span class="p">.</span><span class="nx">GetEngine</span><span class="p">(</span><span class="nx">db</span><span class="p">.</span><span class="nx">DefaultContext</span><span class="p">).</span><span class="nx">Count</span><span class="p">(</span><span class="o">&</span><span class="nx">LFSLock</span><span class="p">{</span><span class="nx">RepoID</span><span class="p">:</span><span class="w"> </span><span class="nx">repoID</span><span class="p">})</span> <span class="p">}</span> <span class="c1">// DeleteLFSLockByID deletes a lock by given ID.</span> <span class="kd">func</span><span class="w"> </span><span class="nx">DeleteLFSLockByID</span><span class="p">(</span><span class="nx">id</span><span class="w"> </span><span class="kt">int64</span><span class="p">,</span><span class="w"> </span><span class="nx">repo</span><span class="w"> </span><span class="o">*</span><span class="nx">repo_model</span><span class="p">.</span><span class="nx">Repository</span><span class="p">,</span><span class="w"> </span><span class="nx">u</span><span class="w"> </span><span class="o">*</span><span class="nx">user_model</span><span class="p">.</span><span class="nx">User</span><span class="p">,</span><span class="w"> </span><span class="nx">force</span><span class="w"> </span><span class="kt">bool</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="nx">LFSLock</span><span class="p">,</span><span class="w"> </span><span class="kt">error</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nx">lock</span><span class="p">,</span><span class="w"> </span><span class="nx">err</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">GetLFSLockByID</span><span class="p">(</span><span class="nx">id</span><span class="p">)</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">err</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">nil</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">nil</span><span class="p">,</span><span class="w"> </span><span class="nx">err</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="nx">err</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">CheckLFSAccessForRepo</span><span class="p">(</span><span class="nx">u</span><span class="p">.</span><span class="nx">ID</span><span class="p">,</span><span class="w"> </span><span class="nx">repo</span><span class="p">,</span><span class="w"> </span><span class="nx">perm</span><span class="p">.</span><span class="nx">AccessModeWrite</span><span class="p">)</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">err</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">nil</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">nil</span><span class="p">,</span><span class="w"> </span><span class="nx">err</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">!</span><span class="nx">force</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="nx">u</span><span class="p">.</span><span class="nx">ID</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nx">lock</span><span class="p">.</span><span class="nx">OwnerID</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">nil</span><span class="p">,</span><span class="w"> </span><span class="nx">fmt</span><span class="p">.</span><span class="nx">Errorf</span><span class="p">(</span><span class="s">"user doesn't own lock and force flag is not set"</span><span class="p">)</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="nx">_</span><span class="p">,</span><span class="w"> </span><span class="nx">err</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">db</span><span class="p">.</span><span class="nx">GetEngine</span><span class="p">(</span><span class="nx">db</span><span class="p">.</span><span class="nx">DefaultContext</span><span class="p">).</span><span class="nx">ID</span><span class="p">(</span><span class="nx">id</span><span class="p">).</span><span class="nx">Delete</span><span class="p">(</span><span class="nb">new</span><span class="p">(</span><span class="nx">LFSLock</span><span class="p">))</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">lock</span><span class="p">,</span><span class="w"> </span><span class="nx">err</span> <span class="p">}</span> <span class="c1">// CheckLFSAccessForRepo check needed access mode base on action</span> <span class="kd">func</span><span class="w"> </span><span class="nx">CheckLFSAccessForRepo</span><span class="p">(</span><span class="nx">ownerID</span><span class="w"> </span><span class="kt">int64</span><span class="p">,</span><span class="w"> </span><span class="nx">repo</span><span class="w"> </span><span class="o">*</span><span class="nx">repo_model</span><span class="p">.</span><span class="nx">Repository</span><span class="p">,</span><span class="w"> </span><span class="nx">mode</span><span class="w"> </span><span class="nx">perm</span><span class="p">.</span><span class="nx">AccessMode</span><span class="p">)</span><span class="w"> </span><span class="kt">error</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">ownerID</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">ErrLFSUnauthorizedAction</span><span class="p">{</span><span class="nx">repo</span><span class="p">.</span><span class="nx">ID</span><span class="p">,</span><span class="w"> </span><span class="s">"undefined"</span><span class="p">,</span><span class="w"> </span><span class="nx">mode</span><span class="p">}</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="nx">u</span><span class="p">,</span><span class="w"> </span><span class="nx">err</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">user_model</span><span class="p">.</span><span class="nx">GetUserByID</span><span class="p">(</span><span class="nx">ownerID</span><span class="p">)</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">err</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">nil</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">err</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="nx">perm</span><span class="p">,</span><span class="w"> </span><span class="nx">err</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">GetUserRepoPermission</span><span class="p">(</span><span class="nx">repo</span><span class="p">,</span><span class="w"> </span><span class="nx">u</span><span class="p">)</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">err</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">nil</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">err</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">!</span><span class="nx">perm</span><span class="p">.</span><span class="nx">CanAccess</span><span class="p">(</span><span class="nx">mode</span><span class="p">,</span><span class="w"> </span><span class="nx">unit</span><span class="p">.</span><span class="nx">TypeCode</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">ErrLFSUnauthorizedAction</span><span class="p">{</span><span class="nx">repo</span><span class="p">.</span><span class="nx">ID</span><span class="p">,</span><span class="w"> </span><span class="nx">u</span><span class="p">.</span><span class="nx">DisplayName</span><span class="p">(),</span><span class="w"> </span><span class="nx">mode</span><span class="p">}</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">nil</span> <span class="p">}</span> </pre></div> </code></pre></td></tr></table> </div> <!-- class=content --> <div class='footer'>generated by <a href='https://git.zx2c4.com/cgit/about/'>cgit v1.2.3</a> (<a href='https://git-scm.com/'>git 2.39.1</a>) at 2025-03-09 15:36:01 +0000</div> </div> <!-- id=cgit --> </body> </html>