From e99cf50ad102530e79eb55e8a8f6743cd1faef2b Mon Sep 17 00:00:00 2001
From: Sitaram Chamarty
You do NOT add the repos directly anywhere on the server; you do it by cloning, adding keys, and pushing.
+ + + +This is the overall flow of gitolite, showing how the various parts fit +together. This is particularly useful for an admin to see where his +site-local hooks fit, how they get called, and what stages of the process they +affect.
+ +Legend: diamonds are decision boxes whose results can abort the operation. +Arrows are calls/invocations. Dashed lines just point to sub-parts of the +process on the left side. Blue processes are external to gitolite. Green is +gitolite code. Yellow is site-local code that you (the admin of your site) +can add, to influence gitolite's behaviour.
+ +Authentication (AUTHN) is typically done by sshd, but could also be httpd
+etc. This step invokes gl-auth-command (GLAC), which is the main entry
+point for gitolite, passing it a username and a command. The most common
+commands look like one of these:
git-upload-pack 'repo'
+git-receive-pack 'repo'
+
+
+GLAC first checks the command to see if it is a read or a write (RW) +operation (upload-pack is a read, receive-pack is a write).
+ +At this point, GLAC knows the username, the reponame, and the type of +operation. It executes the first level access check (AC1), +which passes if the user has at least one ref for which the operation is +allowed.
+ +Note that neither "deny" rules nor the rule sequences are +taken into account for this step. For instance, user "alice" will pass this +step even with this configuration:
+ +repo foo
+ - = alice
+ RW = alice
+
+
+although some other user, say "bob", will not.
+ +Once AC1 has passed, GLAC calls the gl-pre-git hook (PGH), if
+it is present. This hook allows the admin to add his own checks at this first
+stage and even abort the operation if needed.
If PGH passes, GLAC now invokes git itself, which runs the command specified.
+If the command is git-upload-pack, nothing else happens and the process
+completes.
However, if it is a push operation (git-receive-pack) then git calls the
+update hook (UP), per man githooks. The update hook executes the second
+level access check (AC2), and depending on its success, the
+operation succeeds or fails.
The update hook calls a secondary hook, update.secondary
+(SEC) if it exists. Similar to PGH, this allows the admin to add
+site-local checks before allowing the update to complete.
(workstation, old server) pull the latest changes to the
+gitolite-admin repo to your workstation, if you don't have them
+already. You'll need them later on.
(old server) disable the old server so your users will not push any
changes to it. There are several ways to do this, but the simplest is to
insert this line at the top of ~/.gitolite.rc on the old server:
set the URL for the new server
-git remote --set-url origin git@newserver:gitolite-admin
+git remote set-url origin git@newserver:gitolite-admin
push the config, including past history
diff --git a/hooks.html b/hooks.html index 46bf2f0..a37a4d4 100644 --- a/hooks.html +++ b/hooks.html @@ -128,7 +128,7 @@ processing you wish to do in your hook code: you need this functionality, just supply a hook called "gl-post-init" with whatever code you want in it. - +K|X`h@0@71<=-b|601neWs zbtSNk0$f1UfpO*2#r*p7F+Y!s;*egfB@7++=-has+5ic0`Vnt}L`*i;3U0DV@+UU7 zBn(npucOU8JUp!b&xjqf4)75sC0Zw1CqA8^h_GVJI8XfEpay$!+;=Q%3^5!cB-78C zZs8!sOHrh<$o>E;MUlhuBlQ<6L7|ih$<|UGEshJE@MJr+<7=ZIxgIxHw+ta}vQQ({HDS(qlyX zHqt_aKg-L@zkiRGJh`Kq^0lBq2yoPuE6Qxq0GQ+K2I1)M@9*mqmXP>0FmUG?V5{}{ zLLdy-m?4#g MKUa$hzCE05)h)fmn f|Fw+2ERJEByyY;hXTs|AWKOA%+a#a+r!;HcQ~3 zE1;9~KY^&(8qZw@Mn+P`YfWxcD0LIHHTZn6e_%i@oW^;vBNkrGZ@Zb=u9fwF->DHW ztCM}u6pBMkXI%Td6jBuQIkJBl9OSE` EKf>k1^#7Y!;nUR6xaP7%G=3E* z7!5S|yE!{MJ6Y|1u^4YQLW1UBP!M-=xA*p3U0stT?8jysLq>c4eZHnj{^JEKN&7o4 z=4;QaVF%pFzV%2Zf+4i|0aN6;0;|fIjvpp#DL+5|H^=EZF70GlKofM7#K42VY6agU z%GOGH8y)@KjR6( Pu6yTBc5fmR6?u!xau{Y)0TuyL!Rf4`o9~1D zXhoJ;y{{dRLT$`wvs=AH5CnP3-;+`82i%viLua wEs0Oc(E^6F$=#0~WGD8x2(G4>SnR zc`Jg$$#cDtD)94_57jE67;@f+xA~}wlhQv0qSEs79eF?MU)sKe_d=?I0Kg-E1NB>} z_Qp6;6F_dV6EKL&$+2YV=IGtT9UUE=B;&5XSITmQjm>U+{Cwr$Vc#j6&Z$~4Ezcut z=K>lfsY`z8u{U|m%*@hme~wBGj50*OGC|>^PAV=gE=kF9X_uvfq(usFepQ|ol@%44 zC0fxfnzKgdcEK8+iZp_JAIwUAI0o5!jfaNfNiVSn4st?Vj~30*y9V?PB>&$G3Lo?) z%YBjJ*m@a&f1@B%1C!!%h6N#N5TpAwyGk-ZH*t#}fsl7MG&JaBTrXr?z7u0Cygf6E znG;!(&dX`@BCm`^ 0LoAqf1q+dX209p0fxGyy-Ana9N0XFNGFo>KvYc>zf(;tZ0DTS^AwGvhJRUh|% zbB+gglPU1P;(w=KrJ}Jj!~XwHa|=VzTDYUmPR`7nQc)pQ_EIlWHvXwDgCYAXGLGvo zb3^(D22#MK@Eet7W@i^CWqp|<)?(*wZBS{p9(h6bNOhhvP*3~$^Q!7 GsurawYSxp%9 &{og omBYqQMXF@!j{n))2qC<=dOa>$gq8h1f&V2juafoFqSAi-rNAaE!neI3` z_!H^o#H{1RejVcFEJNxyJf4{+>1b?lF~{6;n^W^Mx6i5iP9XKQ!2EE_hR~hVy=v?Q zSu=W`NH71}FR%?FV1!|zp#}DiCmGX`s=KdMoC%VsP!b{i?>QYRV9MMy;5KR?S}=Nfc?DYtm{bi`l}==D4N=Ny zO1Jy_G&m{Z(vUJBG^S(buinPv9%3^ <-n(sh z*!?K7GvRvp-xx}Jn}dl9Ot;$lW`+tg8!Af*b9$lAMQ$`KI>=!QeIDj6>To{2Um0qV z4_hOKfTI0HL6)wM2FZx6y*)IW>fupAPDPBUJ6ig9G~H!oDsmd;tuj0pHsG(Wh}SkH zTZgS1Fr#~-h5ZYI*~~wk=zyjdVI_d8)|c&=!YJc*yH8QQ8|~*2QSaWNIg_-s?`~1A z*txj;#FxK5WNoE!zrO#KsI)+Fu3Qn*+&PE87kMX@-igT^ff!XZYd{(xR}hFI|K tT$^>Kbd)(qg@VgR8i^zEnR}$9rDpQ)q6|@hU=jYnL%pRYMz^M&K|L z6A*}mNzRTr%@T4yYdaSzz*om&iXHQy`iT_4Ae>4xA+11IBOTyLj0OaJJa@$=aP=_| z5}4(bw1?mDw#Ig`d|z 5jm z?a{&NCX*(T*mgxFdYvcFFa6*|XUTikPoBW;;%wo#R{rd|f)EqYiiR@l3}GJeF#8lc zH#aw*R5-+K%79fIUFyZf#X?3U5*x1(R6<_^7Heq`d|KXSSp?{E|M!3zI!dU@%gV}b zv`m|b_~B1S_S*I;n;5YOUuGaBG5(qVsJ`h?1zbHpzp7x$4fP~&SUJj>x@br%=`bN> z)x*FPdG83xGgoUt7=KOFP6?ADupnSb^=%c3Em|u< To&(v|1DPOM z{GcDZ%e~BU&;PFUWdJaQdXBrBn;W1KSx=GpPX5~L4pO6^FryuTVBUJVfJf%%=i%SA z)zxcYL1452sp-;DJktNBgqs rD6c{1?n=2zDk9us?|ds<}aG3X@l#^S<4 zqLlNG!NC%va)+mO`q;tz*5)rDLhQ1IRYhxL*{OYwhBE-q(1aEQJuotPw?FT_$M3DG zrdwa-Ld7t_e0-DjJ4a6g;2KLA_0p`&Os%AALtS0D${{4SzjA>p#wQ}u($+rM+q>KJ zJ7)X8(ce{^r&RHosP~(0Z_k0~%5^JINJ8SV%&k3HpW|l@{zyz*l4mY1Yke85xWg*k z5xPYG#{LD$Z0Vd3bB3WrB_~%4;api+xokd0laGpb_M5Ol_1KHN_be(y+)pN>;^N|f zH`=`pv)FEiP-lM&rI3CZTN|6Wu2SH+fBB>U_DD;!XdcdvHrxU(8Q7;>T_D^!$Zt41 zZ-2d)Keh1*Y64*Ki%*G(h@hGUhvs>I?)~Cd*#lhc?0*61!rTITZ#z Ok zSGAL~4>_By4<0#{da&j1-6=ZwpCu7C0ZS(i<$y`yo-u)y68I_RLha3m3DNW zv2m`%F}|LHWEKg~`n0 LfP(TSw6?p}p|=C2A~iS>NX z-Qi8*&qXFyY|~e%d~(YzA5vKL4Z+F?FtpdNUS0D$KdpSd{J^o9>N2G;L-6!lK^xw; z_uI^o28f$TWku%C$Jrey7D9DgCM0P9rBEb|FQ3^nZT5E^Vy 8)vs>8zIiY zhW!aS-OTIUx})9Ye53Ln$o9Jb9iyZ7jf_67-@d!!Hu7S=C;FTxcDVo>J>WS?Q%Orp z%S0LXjX$HsTs?`kNo0bTUQ5$`Fz$3?
p9N_Cz&}gd%RL z-0idH`CoPd3}!f^5O0d DjrupzzOye3lOyB!+?k56@~_^c5uwwM|aWHcOEJRa*-g+>*60Dz}0H eaL;!OOb=IqA&s t9|aev(OGC$JINZxc{oy zMUVeCl>!U*B}1F%AnKp(Zq8o3c;O;qwiVvhoI %@$*PZ!jEe0<6p3xD?{$&9<(kxnqbkN)s|?K=f2dE;g4 zUbkG*CPZt4%nu4Pa(W5z#KY#MoIBZN)_tftF3-a)i}u_gAX=y|U*22kn}>qqj$Dv# z4q$lnYMU P_*h^^Wc-J~N(}#GITkA4*%|FXmg576=iJM 9Xdw*m`cif}U lf|8d;igeE9hIVQ=0H{rcth^yyPbW?fzFr)nyV*?23pY0FXr@KJ-eAp1|d?J?63 zAYPvvS?ioMoS9IO!gcKVBR7j-_v-5x42jZha&`B}y-a&kqYt`hMXh@Dicdu1e}iwF z_CD#Ze79WTX54O!f1URrDN0_S=ntm5+`XrF`m@baT)z&xt`6pKuD_uZ?*LO68XEfk zUFpu9JEp>SRmJ}cE#iA&uF4h`vta6e`=o8^UJ<>x9oM@8k|^|CcJA%T-fZ#vSZPr& zoIVHc;Mn)Vr}%OANKYnNx#P5H$+Ny$KN6Ruinp5_PUbSViIb4-()XTT7x5n4x~q_9 zGg|a^RbTp^l`eVgf1$$W+t@*NlsY?*R%LdN&L(#*)20x|VRLrq<7C{KzNRCF5Gwr9 zWyX%H+k8j=%;(gOckS1-_wLQdk2%K+7jCeVpZy)sUcXjCSWEwEJ}U9{83+cL)o1b7SszH{^V)6>%{Y7tr~^0kmif|$XQ B?VIv7<*Ha7>z>{U z@{ )HD;CDB{^ng>;j;B`z6lj=`#>Ku5}outMsf?Xy%-+E7vc8AQT z8f(1{g2Nf!zK`KPGkt~af9$hBh4h`toq>41)TW^JLDDh#{d*cJDkz5)wza7j8caZK zHvkhif=2j9OH1&2ZifIU4vuyf>klt}{BF2(#y-ce(B{_8z`$5$H-Va#Lk-@&yA})_ zk>|8`vDdJ`t$fzE32PRXX)BgI$_9Zi>z(!m9HCn7HIux*9=ne5(gt1m|6G{y%7~iK zozSA&jV?&T-~6p2@BOv$qiF%dlFzVmz`(k@x~@;x*Z1cwd@doUpvd+S=ikw@d^phZ z(RWnLW{|s#;u4DTvxaLUIQ jkJi5T-&?clNd%@> zyU=s@@#g5%dyL;WIj?T|o{BZk^vreaw|P??=Nc5ITejQmv;%*ECMxqy<;q?H)Af37 zZOv$#Nl8g5Z-dEGKdD(kt)a~5Tc)nk^EX+ToHxEpS9Ne*;r&|w`n63hDK-|CNAG^z zx3}&3?YA{0ogUMZ7Ac9)YP vas9t*i{{24U1-u+Wp5KlmfM-j74?JQT zur$Nwo@9&cxVj_czIccfI3u}mxqbJO3@pk+fL=x7B3)K81iYsWd=K0 >vg4^mAWE*1Nce6LVu-nLBUOD|b)c&|N$1tqth#d-wwMI<9M@H*0Q(FWRYD z^tsPm{D_QrwJ}oouePR=6FVO73pxkEmWX#GDOWDiXRDPwF64(1PA5FRG}vl5Uu&EM zm-bq`gbhS#BZzz%UWVWs2$Nv0Jyi1ZR$z!AqN vCkMwh>iwJ3+Fo04Cyl^dl{1mlg6Ab%HY1tOaDk; zCDV5p9}$w~ltTD4q*|EgdCohFQLgdCjN&B~6&2`mSLij~>iV>bijhwyAt7%J)%^(K zc7G5ZIL`Vp7C2EGbNL+V^ O(EJ*m0Xlq&Sy}@j&@cYv%T1E)}D=!;V z#O&YP^E8lPu#Lo2JXQ4`qEJfse6e($yfT4i0`H?h`ptu3BlZVUyU3Z&A)5K!=MVP@ ziNu=}v@L$BIOK~x YA?sA _5n< zb6*pjD&(lYgEW6k1@<$98 bL7polpHe3iZo@jlz zc9ShyudX Bp{+=JMCOq#JgzBwXD-YnN0|Fk|Y5C3?=2fktu1%?gSl zEx5r$RqG~~DVMICU6PHT=@Dl)&Fg372qFw2L^v!?e5t5ezx=+Iwxzq^DMk|tVJ@|K z9zz`*?OiK;uCJw{5-9ue+ijqnfbIt^h0T*Em3E^=fQ<> x&S0+8 z)JNm$xu nzCV~t#c$;=J=Hhf$Tgmr4 zyN34O>caGjD1py)R5kK^obO`)>#b_}y6KRRu#x$%4aEi{Ti5oditMW~w6~+*R`Wm| z-h6L$2$XBUl>z>*1$v~_i|O=$WguQDgDyoE^ajsk_67@VB=-Ktt;io@M`PeCR!5Tb zAzSo!`4)w-=Gz!f4^k69TnQu-*SkLHbb9D~t5yD|Xv}VorAXpf$W&um&P(5U=VL_C zz@qmn@`x_4$eofufwZ>U@yv4>l;oHQmJQKkki0#uyzl9XAA~}*x3_=Q|5j911{6 !T7#pi2$<8rNEqS+LY^OXwJx5%u1li!j(}W7#$UXh6?a?a7@3pBDkY<)q zO|O4bQAeq?S67uvLN%WNiX4 645fFM z*0phdu+=)#Khjmn$l0=UP2NApEx%k{WAfeY@=FNH`sbUUf7Bc-Nq0~;Hdsl%A}n-G zOTX1OLZs;ABy@+@ZG*3z5(H=u3Jo~lnbdiE0 NQZ#o-18ca!rF$d$--Y+8r zc1Rk3Ptmleyj%O!nMiZvAX_QhHawAp@aAigWT+TpT1~}OdK%fz?zg+1rk_|P$S (eDnJIium8XI2@dxeX1H5xz#l?LL5l`Yi*)oS_BB)_O;45Vxoe-f?cj} zm#=Dcc4Pg7-~kCP_bO$U-FVqL O+A$E#P9X)v!a1qJb4Na?iar-1&$4u4nLx08N zetQzcw?d>cfhrVb|M^J-v% Npbq|k)-e2i)9pAx|8IF^7Lh%t@eoieVD z#^%FmY0G!;Ao%v&5bhjx$0d*~-Jydfdu9K~s>YVfv|h4Pb-{vRDljBW-S4l%e0TBB zex*}YJCm*B2kHolI< |XhEYHAy~$>Jo9I6c4OkmOY^$HDY{ z9ASP^?h%89h}@hLR6vZ>Q@J}L8qN&tjPMYC->#1}y0=DLkT5>)T;GfPQAs&gm%+#@ z`DMmQ3RvpK*}rSUjxZa)fByy^YG-SU`zjrxWbQW|GEJqb%9#t|H1NMEF5G!WJ@4n zTpX)c#baH~3g2T(k@f5!{DC^2OmSl9*5KUJiE3oDDB6xsvFduSBg2&l6g!|8EDR-( z1B2&iK}%l$81V9b6>;C+-8DMi)$Mc9F{wm8&T5*W-@YecDDCGvS@WG5%7J;|ksm*O z`n2&9XZL{bomIT@BxQxMrm_&|LdRsYf%z>jKL8x(FkM&s?05eTM5`;;!=q|qX7b0h zvM0{{+0{h651l}tfC}B=IXS1idiClz`*A!q!5Gi0j|b}oD!g8b&KH|WI)0F_H~f~g zyFK3uN<@ZRch#6{IG?Y})N8-z4z!urHi`};Gazh{elxx|F7OXS?eHAPk3p@?sKUDN z*(0H O zg6asw8d(Kz6mXt+IR=$y#E7N`+cOr8ktxz#rfyq}uj$l1i;{QaNPcx{ys7g@^K_}? zYyIq$(Hed(IcK(wFMO?tG3fGegUjq28lkyOg$uOSD3H7Ql|1pTM@{1e1A~m6P;2Yn z9!Esxg9AtW#}Ms5xF7xSybBxY&uD3D+B?j8LFQr5W}M{tPe*PZCd_Y4yA?AAfyY$j zs9nJbU~%eAW{$sT$W8ffB0(hh BnEhj_ZKjf+Bau$vy0M<1>d- z! 8K<(&~KwEy#JZY>fMhrOx!c?3 `~1(!p)BXx6` zsJW&W(=U68X8 J@Xy2?8=w$Vyj+&=MEba`Paie zK#gu{Ypdz!=NG+_AwGl8x|*Ku8T|-^=bw7ZU;l_?99sFUBkL{jhv9OJ)~KAe#rb#_ z@$pd8h{v8bZ{6V>VQ@}|PoiD}2z|NE9Us^k=RPaclQ82<@p{Y?h9P82(_<51qE>Ap z;|>|y#-u1VHuz2gNa6AEJ&*rBfxOq)*f=pM$;8BDZRl(31Iw(~#6(%E2zP7ik;Cnp zyI-3=eIg6nTFXB?_cEPt;ryz9hNd$9X*l!8T$RHB5BOa)?(ACiZW)b+1@{IFP|x7= zC}_zwsX1TV7kqPC9+oqjj=fudx}zDOIB8mKz_)*JU{?3kvrxZq%Zrs$d67Dp94W(k zsFQj>_jh&E@c8)0PJS;>`y9RJz|~Q3-NM4fRZ~?3W#!*LqXVO(o}ib_ca%3>h6(^b z0L{+0ZV8D*VtSR@>3W5>Vyms~+4Jp?ruH0d#fDE%XfJs8mMonn#XvHq0<@y5; $r-w;aeSEr{kpHO?>YV1 zBjQIt?xVCY|Bm+j#TW6npSkE*wscwQPA+$v{qaRx(Q|vQIYHFw#Y^-7@(&0@larHj zva$>e41@UwxdaJX`ylZaG%QhMe}1&vo4!4-Glju%FRx+T$Z7q9WlQ+|&UnG$p&`)8 z29l}f=uF;bla}^`&Fi&)e$KuZ9am~%F}=OAfh>-D+TL1M6JJ3tAXTi*aG7&vSB;2y zX>oA~xav~c*w2F?As+_rnAhoEVTHjeN9?V4sJjj{o|uXD437mfIDQ^aH(l@>6f}UU zdcg3lIy-RZ0AoS-0y2 iDmA+RB7Go{(2Te}&brair zp;B$`RkT}rkcF&doOY(ojl5 *;!m#x(9FX z?!MWV5mHqr_$fQPH|3%`#qa!yV=o~dnQLy(vH9qzLG6e8^~q0$^Cp9d>-Sgslr4nu zSxc21TpNx4QIR~rbxzOxl-Vw12*7Dw5_Jxdx8C%Zm`uyLGCk1#M(+i#bA@MIrDvSi zTB4MUa(>|~OL+j3gM)y8000JanH1fqc1wtXerJ2bDY)ldzR}&~ORpzXoiP85CL>s} z*aB{EDIca+rw0cUw?;BSkQ@PseRU%dB-GRb#!}96P0?4>-oAZHCvLN_vSJ_-)mP9@ zI?sdRqXHGt=&*ZOUY^tZ^|X*yt}>SsiKVXDkdW6<6fJ+;Z3qo3l`SAXU^*Hm&YA=a z2=30RCt1#O$*yJBiYUHQ((!6h(Yw+DWlb~{tbC<8sg_(7+v9y`wWQM~&czh*lO6sW zeY`jAlYrBg*>_t3Gmm7F>-cz0P2)>rR8*95TF6H8 N9l7!nXxKovrn zuHyMw%O1Vt(;^Y%7M+-7*EiLh_T~=66udNIN>}cz(0966D|4#q(-kEHao>Mun>+f1 zJM3g3V(aKin x1&w*mfu5SG`mI~?P#tUj{MxD~#dCj!77>u3 zIHAM0&aG ?=Slvz`PlX{=C^V}s1&uo+70wwVx$9^9 z&wC(LK)s5FmKMY!AT|S@S}_Qxl1bKMX8r80y88QUuFdR}rlqB)wv`2B^b+RH1j%7x zN5^{~aYz`r%Rj-6Oy6G(Ce8fxX$m6F6pVXgQnSKEa=T|TW<1O>WpQoQh3G@u>hBvR zt{m5@xIG6Q@em9G&!(8g$*9sQ$PljxqEcR-+TBtjIk-!b&7!t1ax*4@^PPr<+n}VF zgT3u|Pt_w3MnET2A5;zXzZq_O)QmmvTipaT5(KSq(6YUGT}$P+e!hOvjNOcoqGL#w zCJiQAd!2QxOM^H@Fq0v&)ba=rtSlHJ0entHQZ;-`{j9exYrf7xh^;*_G&FK^7^pNE zcY|)C^`B`kAs(Keoj_R5)=DS>x-IM2i5U)Za^0tL*@`R$<>gR~gb6|m(MBWm^MLid z%&TuVQZUs)fJCCWxPlTF+bQ@An@;9Q3qOu4`dtv~>+2Ip6SJxy4ZhOLb5arv^!GzM zlktufluvG MS};o)E%K$nw)P0;@+cx 15%D`zlC`CxG|@?sBXo51eUSbP!UeB>?(MX5 z8q}%?2b5rQ!U_rsKvYIbFTp1ybo ug~ z!{i4!FMZ2}p!>z|H|yi+XxhHcYQz|SmG+ZQ>2<8I88Xz?*3McLW($l_x*l2ueC+$U zxL;6&3qrAu-{(01>KG(S;G*KZd& `I{RXrh0l!ZgF3D z`1ry@L$|iK0sAA(&CP{CO9T%E!NLy7Xod5`_T?QIaXoas4fGfleW p;;@>w3a7ULvs^a)$~N(yzE^Dsy8Gk= z?nef?@`O zEl83eIr8 6+@~*uO8V3Qe=`ZHdg4>1Wt?S?`s%0+X%~bef z9aRtS (HNBR@4z@5Z?W<(2h3W*XL!5uc4^L4=k7}-R!HA1k! N})e3wod_8Z#N2Qa1r4mm#VqzsAAw_pcwznrhBTte^$cq=R;|1D5 zqgk7dL_~&+7Dp%YF-iPsUTCLaWb|roX(?iS6;<^b EH*dyKuxU`!axCI z_NNE{mcRM+RM`4JgaHjlH?_hcELOQ>FU+Z04Cj?n+}0r?A|qpY6A>4t(wB5?6rTTW z?idmy7EqS$Sy@;(18&dJvvG8Uo y=hfdc@YzDUcxVKYSR2wI3Uku)fV4 z1*`hEQ}72qMXH3YklSitoBFJo-;D^S$%pp#m*FYV>LVno>XWEldUccS(<2uvtL2)S z8t6)a!sCl|sT6B)K|o8|{!CSZ?ji`e_v(FpKn?-4Y5X%32r|59e_;EaZZG>IYxck` z{<3Sm`~C$+u1ROEX*XKUUNCzP^djgPzXy8G)hL(+w3eZw;t=qfjT>pp+}s?5owL*8 zl(aN47R8m>?{2Av&IbZZ-SZ)Vp%Wk=ovO(K>4O~?o5~qT8FQ4iZr%h1<=3xY*JftO zn3;Rs7%K4z32lda9#2-K#0l`fij3FpBcpifd)6RCBaD%u_Hah=be~@SFy_*wfW8c2 zYcfvlmd`qetGs`I?;hu@SXWf|TL`)F&CMZL1V|pX_*?v}S4huTj3QI)jKd?LQdMD* zJ_>w;mW56OUw9-2jc24rgm=k*#GRgc19X7-09|E4Qr0H`OUoPbQ5G}5+r3T=dNk$L zu4DMCU?dQYj;>5G*41q$n^cnfoUn=S?Zsnbzn3apsE-+rB&0^Li0)3ty$uVe7VPkI zwMip8KeztrKb#)a3`Mq)^Frti0ws+rpvgYyvvz&<>_=ncXwOdAQx_MgULScooa~>9 zT2Vgz8rsx!u EiGVY`Bm6PMq|A^+A$R$q@(&fEIp1Xlaq~ul|a7) zvp;fv=~8;Kb>fRbRnS!6k}@#}KY$L1*7}R{PPfF>=yprM9QKn{&C`C4qm_4_&If;X z-yD<5FBB#qFum~kt$TQ=sJ2|o=poB@Uzh$y$3Q0j{zj~ET{swun;Rn(ACf+P?0n3E z8oV?_oEb6qv=Y2RvhYJ#f(#5yOi+8?g_g;UU*Fcig4Dv>DtwH@EHI=>_aYBFE za8jyp$%gh!e$fAes6HMvL?LV{K3nJ>L|dBR?Sq5i zfq{==PjsQ#vb-31Yu zS*%>R%oFOOJOtUdSOrP1Uw yrz8PV&JO{+_Cp zA=JUsQLrP8A^TBh@#ZG98vUmQ08@#dxb$kB E^XGefd{|0KuRbu`o;t-r z7#dnnGr{XT_tK|AfS!ByJo^^1q1Y<7+mU-WIwlZ_c}Udg@jL=_B+}ywS|~jx=*PkU zpcJ6E)h#þp&m-!|g# zg4S&KNRm3ft~Ii=?)<}7cFE-rlB5c!{-kjp`aMIrs%%(T=0{KKf`ZzC4SDkD2FfNB zL}RAtxrfd^Ak0EYnN5w2yWA4p?d %P-mpN zbSc_Q<|1=3XgvUQ`<;-if`AGN&0rc}A!%>JNUEx?J$`)JpxAtiF!Xif)+|EEktxrF z*DFOiMCd7dFwyrw{P*&VyGyhC>+T_5p2&u-gnTZsiOQEjgh=xRb>sTHttZ6J&MV{b zowGt_zS2h^QnR~Q!Mm!ALZJk+O%Ze-C8p~A6vmzZ{j`ESB{j8`jm;Q@Z)k7^uRugg zOFK1X=3JR5@8ePKFto~`9P43e)i_S?EuU>vehbw3b{7?JJ5$rC8tmN)Zvl{L&o)pB zF?_l=Z3;w S9ot%m!-_(pb-IMJRM!|vulv2fv69DykVqAR{}U0_(1{}mn%L#$@L0N z5B3$-iVrKCkV!JTSQyEXy+6Q|i_RKZGl|eP{WA*_fG4pfX3+t&E(@9LmE^pDy!!fj z6*dbQ$5FJD*;vr5uB5ztczC$pW1DUKen)IdO1<6a0Ue#JjEt!z`^n~X>4nEWQF1a- zW5dwU{U@(wbz2` uCJf}0Al1fkH6o9F+2BTaW;`@m?7#LvcY^4pFDxYhxe3i97BZR~APRurM<^++ z?2Jn*h&nrP4U$JG_Z4w~O5moS-vvN`vigI-nAx4h&h_dNL3i`?xsW0fBZ!IWi$LlE zf#M-M1wRNd+M|n~c6()Wb2>GkEcWt619E?Q^73|tJL$#-LvTR$@_R_}i_iGEGKm~< zIV<)jG@w7imwUPZ8~skP_4NuNjobVC`pG})WdYdi{blGB(weTDsF2!+&fC4VZXcgF zk52X_K<{92GOndgEAMQMat-E3&lnvElkDf59BJQEkJuHO$cPAV$`mQR+xyquBu+Mu z#XZ%t@Q4D#@bjG?);2UKE(%VnPwHg^;9myW56H_`L2-}?Gyd+~om;m^AVuJcRtE?F zCY+9rez(m2rOFRq>@ECA&G@ZRD`SE9c}Rfu^{K|E^-vwaoP_a^8Woi0(xQi91XEdA z=?R-w?~&6Pn6$h+AvT8Ta!(B*^+-PEmveQ^m)Ts6vqB^!la3P=-}fcoMu~7+nxn!( z_^oTzQD1=dF9S{FoRbuwmMWhUiE(EhAdAYMmrj2(a(+X9P*&a=h~KrlY-jZ)+#uW^ zVPLe|lO%e+S%1Z<*A(;=SH{!uj&47DRx-Kl=Ca(|O`pP5$KQgLO68FB3pwZVVANss zeE#HH?l%k!j7;5}x!&XJ{KHoRKfi(01b`&u2`LJG$?JSWWR#SHHI+FLB<`akl$Q&q zGj1= Z_=_p`kWPjzerzp=;w97M1AMH1$pYS^y_Zm+wm&i z%4y#FkG_ply_$Gkx>gm<@n@{G`P?AR#L&HyyoeixqSU0WRI!UujhoO=y>V02>anli zLO-WgVuGls+~#o2ezWxSk#9 vvj5>SO z^jKOr1oY=#k>)fNmG}-5GYSs@V7M$bG^vbyxw{Lxp}Kn6z!>e9GMw@YS -FeZzLso4j9bTvtP1yiC)x5r0_m3|~MX{jFSFjbsUH zrt!6V?>$a58y^wE$Y-^H?S`BQ)W$w1`}TDYa|%GJ`((g72&EJ+@S{n^-jXPi2~vbm z6|HiIByf6%=NM$V@{IgiHD_7vMc9kPflj{x{G!|J?_@_LpR?3JsiKuxh5#$PT=HE) zPEL5hqrwN+U+z&ukAN+pXN|14o4q&HrT?a)NAUQ+5fuLUV+X*|#l_`p%u;6zKpvgg zXZt5t4GS@zO1Iu<%(-JdZE9)BPJnlq20LW4R|9U43pb$tznZ%0xT?0TdjJV(B?Re4 zL;-0~T1pA&<^TdpC?JS5C|w32lG3Skx0JM$2ugQ%*Ef&%z5BlNk3a4`vG>|*tvTnI zV~jQY&wUuRpFd1ig(97!&dfyxwrM;Z9Bu*f-y=cc)Kjcx6&@!?v=0Q!#ek1MG(q?N z-S(2X$@ChRawlp4Q?4kc-=U{RcpKdn-%&zsi);7Lz2o90e||aWr3eltCPt{MC)aum z0E2AntPtl$()cyj@$=~{8%Y-ohU+EvGqNB^oSI4=Rw4qmjb5qMGgHQRUTl>lEup8s zYN?cB18;FY)Xvjkh-g1N=ktwh`ix8R+>1r}m(q8fn7;AUiTuCc6iY@+`wSu_fLd~I zX}4%PPa-ipT-ji za0{T^`3+t$k&&czW=HgZps={{8yd)b 4R{oIq3Em#QKR^Kn2uOoKI0Ab26B6Ke}}oxAD+{-Yu9*ri|@JZZ_;!I zC@Lz#j}^-|KaBB~d)r}wkBj*;KOihDOY2rA%*s(S1;>beT#}CngjdbffhQM|gWk)2 z76*xDgRUWgJBb#5>HN}lbVGg;qn3Xj1xrgyi?RC_W)n9W8rt#sfJU|k7$H@Ap6Lzc zhG^v>I>l73PtWufrphy3>Hfrf0xe7T00sG@61|uhbUrkZ=#R0hXjSzu?d}!es-jI` zRB{m}UP3&!V*Q32eTyA56}dn2jk(A}ph287?5r65y}NsF?@W>Ts)$IinJKq9E)(gU zu_~vbfkf@JJ3scrgEGCT3MdhF$EC$IKAXdY };X|wz4*jz53#-$K zcCXxwtO7(
?^kY?G% MG%E+(j}R9MsLv&GWaijH1^az?{v_Ss=Oa`d(_a4rhpuY zz t(qP9({LY*3*IYUH5 zW$I#LVgT5<%gF>LgYu!~)s*Q+3&R)z{Fx?tIek1!^g{2v!7msS2ucZ=Y@QjPbnorb z1B=?jH`F?~r-(pM4PAeGEX+cD$sWUgZ)XTbd}ew&M M7LtM}B@l7dJ7x5h7a%u{^zy~y27?&FEOwJkl@p?-kSvOZ( z-WwqMLqdoZ8;G6|of0skw|SSw5>Yki%2z4+o_}jkWt*sZIndS?U=q{6aN{|>uNSDG zP>=$|Z0MQouZ}c13;9x9_csBLm}hBYF?Xzje;BjBB%X<99md1fLd$MQP{US1w~#>R z#(Rf`$U)okzPw4fd3h463!@Ix6@i#XxAu|rW}3v=#TtEj#{wZte27CKmyv4UmbRk+ zgiX!d=oh>=YvAsrUBG#Ab}#|kWiL!OqYArZRrXm?Mk)LsP!6$r@GpV-p8|8pfy`=? z=G|>o^qUMu^ku~Qr^h?_ j9i zVhi#h7aLm9w=IJm9$ROe%*G0&?ZNpO?xo1a*ADqSky@YXHGCIS0MUfxK@2t>=tzJj zdQOyD3jbYMC%MRj+HW$Hs15uDNF;#m3he$rpp^lH= FL{a1p;pmuc zWAz6blJ1shxm)En<5#^n>fkc0>Y`wZI==VwyAKvhNaQ3av{{wo* h!{U+_BRx z3lqEFQuWKCj;H?lRWJ9P-@kv+6@x*fyQzr@z)p~XK{)a6dml?Y_IT1fgoyoNBr2R# zeTDS_g%UNaL;#lq@F{_XPg2Lk*o@TG(Fvs%aM+=XBgnDYGVu$#lcg*fI4)#2*#Nse z*gK)vc5-rG?#=lVH#q~63^5%xBraiLlw1Vd4WKX3+eyB5X`A0wzicvv`w^BQ?1;~y z2{Q>|PEhO6d7auLk)PF`BI>cPe9MGRB6M&Cp7y6fw-fM>>WGK|xOouj#PM72=h&E} zC7I)` o1c2r#lEP@>XYVK}w|%nxdg7tYSkFJ4%W6q#3= z?G`C$VCoBN;=syUOo!Czm780LObT@EtE;NEVRvv1GS_`CpVsqTyZV-6jZLx-Jn5<= z{wq=)Q_IV-k&%M{N2`b(HTU-B7Zhyn@qkzgq+6qJ!-&To>F89T%(EUuN4jZsr=g`g z>o3}jNSVQSp#p&MP>$wJP(%Px2p+@!{yqpw*m)=8p4U-wBPC>IvACwLd`kt?4^|&O z?cHA;9adl=1y#nvtS9}L?bVj0@E~W^D^k0Ez^Uxd*che%CvFodm}l*cp!xMT0j3WG zmo&8-^;fQ@@IxCp$z%T$=$&*p*9S6t{RybRI7rBN4gwdHktD&s)5@mtm>Q?GMGTwd z+~}=+BRs;wpLSG^MXEqciBagZq6L~fFnogkh~w(7zVUG}Fgi$94U|bSY4W$7s7u&D zT<-ISl<5vWxOOb9uRnYGG`p|#l_#_FeOk|M21xUGsKJBEtTj|YS^4~M<}F|ju$+w& z^`PegsH01081b95Y3p)7R_BK`H1I?yNTbcc-~!MJ?Tpx)q_{A>M?fWekaz@F4deDe zNl8gX#cLBh)&f2q&{|k5%(9aPzs@{T&2He9ZG{&r ofP@W%#P9+P ze7J{8Ix0djy$T4O;uoh8(1!pULkn~BF^^XV<4tamdiOIvEi9qn@b; NBQcST$FRGZ}HWeO|QY@ zZvI@riSmyqDdCGYe?WIFNCp-GltS 6?YJ&8ty|1w`8DJuS z;Nv~!J8}Tch1CYZqA=6UY{qn_Xa^CP6Ld-GQXWBWiB`&OBq0R`E7y1gQGo>cJIp?e z_nSVdp6XvCZ=ms6^<`O>Cn|?4gJ&en%~OxO?Hf@YhlhudaIKD23o a%s2$Tfx31bx3dHu_bY2mN-_8Y9Mvh1XF z=2%gRWPr5O($;MtXWxX1GVbIQI3x9iKD)^AJwc1}C(fyMTC4mMP!Zw3+u1cFqp-X* zeR2^S^XXt|;P)4=3z&DG;^MSz$`m&M`hj96JTNp+ zb|T~zm}%(O=tXXQqbzW-Nx*W#@(}nw03MIMi8aP79i5$VKn#M%16#`4+8ThZt6=K! z)lk$k)s=)G`c{wBX_U^Vyg^Ts6#T#Q7#?+Daq&$K4%Y#&8uUDz3V`;PLof7#ML}=c zM5n(#R>$%T$>zN8U5srb`g*Da85iYqc$QLO*OIOdQ?n_6;B0!Qx7ul?^`w`LCKGDa z>1l!ULVM?5>!wc&3j*HlA$f?i+LrDpPTnOZRH%@7siak}aJFUE`j(P+KJ~5GwBsjS zRd!O~G`#?=;_hxqaq-N}P~52so2?Y?zM)2 i_3d;d~;n)7{FL?cPTs{< vhkP~~#fX7{6OSsFROe)#ml z!ot$rOek`KBl(PqC{jYG8LwqK#Nnfgf!0@@5!i5_X;(l32oNZ&R7jzgr=}X$W>1el z7y0#&vUYr~@gaWW1YJLf@GWg^ZOzST>FH?PJUlnr86b$0QBoe&-xs$XJ*;jR_t{Gf z=<#?(crZ?2vCu2DD|gak`18`OjnUGZy<3~NczEnPhSfjxvd!RSS>*nR8GfSCa3zpD zFmfTvIQ(MUYv)2cnaZXUyz{=G$O9wA3$Rq@=jUOU1~-`jNVJ54v@=gLZ3^|mZ*RE1 z2`Bq|dG8dbfB*m?1`H4ZpoAVWXQyIlSd^w!0m;Xd1-r$bje{jGJZ%+i){8mu7xQ4g zs3Tl%D4*UByW9EjTs^J webcCsnQmVmuuOslQNfOcvr@5Gf_ z+4OI9L*EEq*u?RN-7TnxB?>8sCd7jzg40#kW2Y81OjZn$19gn=ev>zS95NmHXBFx( z&$JxGmHeRj%V|(y2irMJkBzODXM5pAeqYJ|bKfAixBM~55VXKma85Nf-Qq0tJj!0F z#xBieeJpUZmahM+VtsRKYn5A-xb IPx)uH0g zmS}E@3lUg|riRwyprs(fF&f%?t{TVqokh^Sg`JSjW48~COb&5XEu-#!5M>ZcCeynd zkNJ8FJ+(|$lQB2Xuvp+cEdvz`tHved)4@()pu1&nenv`Qk<@B%N|d@ZTcc~5XIkCl zQ2-J2rZ;KAu
GP^2IO0vyPP@wP(T=-8 zS_)u3iroF=$LH3tqcOA;L7ix_AdX*eqO>6uHa%p07+WIzn5}xBdU@%5ZeyEWr!P-s zWqv|Q%uCsrwmz*6J`c7^k4G#D19UxZ(Oh7d$eA4Uj5)9UfdswVnNOy8ch?I%+p1Dh zQap|86B8;WjbZquuACTtKWkI5>`v@ 4OBSAD*2`RO-wjo YtN1_YCLuEd?q z8x06)ZxabGBuPUb*V~SyNXl|v;F>jdJIZMHK^}`At(ab9JF+ZmCKq)f+rvt5borX; zW;eOc5Qg`(RNf)3T-juE$OiMaDYZ^OqbJv!$s$T~Q)b@bd%z_5`7^p$SU6pk9jMPb z< _p+vEPvJ>Xnc#z&|Flmhd_&dF&EHa6&CkBhy6s%sj{ba(pM5eMQtjt^0A z3Bl*SHT =n18yb&c zR(wHC8a#RCA^e7`ZF+&LVU0}5M|FLb(q1R?x5N$7VE8rV81BZ7j*hW04?z8(E}shz z4Gexq6m5O_+pc{sQP6gy1TE3NJerr;i5Y%i?wM@L3sk~}JR_rGd%n~>;>bbvl{Mwh z%N&sz$f z6sw^eP(w~sIjt01=6lKjH`ee$CDyp;lOzlgJ7Kz&=EP9Z_PJ1*HdLn6SoQMEKgXV` zC&Mj1$kN4J@P(0Z*cx8p6qWDofEo&PhFGVD?gxm;J$?lKr*N+GHeGzg^>VF(RY-~} z;?>PaaY1_wy*3C8P}7x`mBG|@1WlE}ZJ-Qkb3{(APh^_v&|mw7d5Y+ob}%)!HecS; zxNXTSBAeu@aYc%QS@7gaj-I_h!Y>>|S}#&7$8)^@%AFe)yUmH%z1T5YQ#LIQx b2aFNz9ru8)f<{VC4u~Z$GjsFkXcdejqG7DQmnusC##Ibf30``f#kM7f z(sv0_-Akb|<$rJX13B5ZUy;R2IXWp-1kVgOPF{s93*?{YVzOEwwDNS4)8{HORM`=a z&CUJ%{m~m3ke8f`KmOU#0kM#!7jDgYg<`jD8t rgi!%0(psy$eOQsJb^(PNszv5~;Fb&>~3Oz_p*-4N=F)!i^lk zbRqjOPeNY&s8n{ynTW|X1eG{xb;oLb@1AvNWf*vri-sP+xX_sUMwsY4LZqNb`=T_@ z&ny4)y8$ o>?C zpJnr4A`sC7P7mC0R`iZ{^QAe0mq~poI2XPqJZDLYej$`9AL?xwI2NMmiJapu^)9>- z`mm6H?FjLS^pQRqviCW~E}20M5KjlRn_P%3c?^UNTZ&wZEnGMA2*4vtgX0z_C%`lQ zgfz>uv&_Ub$C};1r>lu|X -#M=>Kjr?(1SPqElWj0Lxykj3 zWV;O3&z%Sai5lvR0GWQx>AqiP3rV6!guYLR0fcCN*S&x6@gl+77sDO (V12r zGi0oNa&z`)*otQE^&WwGsNA8ABebz|cc|C({EH5*!h?3=HU@^@(uah8PsmX}-f+vX zNamC|LYF^bLqe>pl702ecH~2ge B_*dWeZ7Zdf%Bq~L`*TP?`9RrFG^xIBm!F> z!Pen(vY7f-stk+C^d6z@v}p8!(}w@6DS0sF1|WBf2KNA^_c1-h*}~!3o%uvHr%N;> ztGUzKO++Ua|Ec|HCvl1!fH?B$n@zwXc;3f2bl~-^C1gW~gMFv$)p6Ucl_5nTr~c+< z-;F1HDFp>TlB=ahXZVg3gqL?{l Lf-<|DT zC!t%7vWIdUCWISJQ_}&5d~Nj%9P)6fKVs1C36yhg;T3;srFrZ4yNR^Ybp+6*TB(Dc zJ|30-^C0xZT~3|BjehgWq0$cC_*H6h^5~=_FTkUqq~S8GDuKFQDVA?*X9q~Jsm7|E zPEZt$*8(A7-S+te-`%_M8+L>D0n>_Vc`hj#!5Vt)5}}FI#~qpw*Zv;G49BNNW2^a# zW?&RDDSEvdDsmA@kD~0f>_^v_n73%cTw~Jlc_X(HrcYM5>Z7T_RSzuP0A~Rz{5^2K zfyxT*8LH3m0uyOK(-s$>L=PFfvG!n$Qe5aIdNPn ael%z zkz7kPbOR^b0CqZ_fr+H0_3W5BEKTcenjWgGNF05J)0vaHTGz8mrZhz|0`WL~%h`nm zA{rjPW0?}u_vizThl15|#LDER;#!=>Q!6Vc`-R$H4K5Q9+ylX?nwlDzFdQFjY=HJ4 zQ-v-_CM5ysq@<(sYj;UKt-r1Qyu;N^+^ee74=;vKAu>KMmdDHjIq7a@Hnz5 a;7~Do1>HX5 z35ECX zW3^FP&wn)RC>#f&YVdtkkM+;di#Nx6Wws-$i;Lf#C2HVMhRyRoCq1>I!NRyv^|&Gq z)@=lV7D2x}R)3gC59b-}jJKo$%@-oIoQw>$u!9WqRiM&!LZ$$;y5qf=0bC$ip*Yx8 zyP5t3QPw{T?zz_3&%VKq;gu_}jqC6JvJuNqwLCmrNo5W=dD^y!=jq|#lCg31OQpS~ zCv%&^S#1;2tawS&4SMb4^g(%ck_|*qD3}(;lp`JAJY?0cbTDsti{|j6a@CrW75(nG zy%)i27Ifc+@o~?&?I@^%;=5uaB2Y#0_3Ll~2T!y)4K+1Dg7AVaKvVmv2&0&o=k~1q z(vsk{+Zqo)p*x)qi+NJ3X9TW~ll8<2PE1S~vy)nhJ#>OiLOvbhDM~NAnb`s#!2Bvr zwjR+pdgRigDN1`D(iGQnqOA~_w-MP6yeNL_ Tb?hws@EjhC6l&gFB=1$bqi_bpf zAGOg6iN9Xqkd9J{75sFt2K-Oir_+`?&|P`>@FB1s0Z0L3qn~viZs0NlOk_C2A%3T{ zWC?r(c`cQpYausL_f0dGH0-8>VSX0QgJ|TIsbmQGOY7lh4t91wbYjS)VG>?~ZYUq0 z<5KYFwB~{7QG&Uo(AO)fe9uxFS&|+z2pEvoCY*_mS1B7#1d+IVcmS%vUy&l#+1+gj zcC*V9+Tv9g^0S<#a>bj7Jif|V7NlS^gXxj2i)Cg{aYpa;yRQn!*ZINb3Ls%oAgjVf z!_r?}TZ737a4NvwSxf1a=^7lcu7thL59a6lhjMif4m|u#O+ZWp9zJ}`CoDyd zx?he )=4$}Sk&UiZJ8d7KPqhre18;3(v8(J64X1)`K?BFHwJzW zG^N6B2*|76k%WH+z~aCPn>zVML?;@*!!3toCUzt*u+=F+*!Zw|6KwWy*%EFdDzFSN z)EI=>-Wx{nptqK#e+h^S2ndh^h{kb>twb#w+WDq3GR<&p`G(b6^`2+YZUX~@y|v%k z*w0_zU}uLTCMu!8T_02^cm`&@w=8+ZU0!=5fbI%BXb`>@0xd6I$xsq%Q>k%QE-o$} zo-IIJ6xu)DHab5UuU}I1L-&?2WiBc)&C!)+SBuq)#J6~SKlEX63i^KEz56DT?UD~x z^uFkot`C+uK_dx}%j^Sg2y|6W&<6w*IpN~Oy<_5rN>O4Y^|e^M`%d?{13Gll@3@?M zB(|GTV5WAc73$`xWn7{s#$6Wp`a4-EfY4S%2pZsPqnaO+sI{Km3 AOtG&55NLJu@wm(4IXfPg_G zWcN9Z%r_`V0q6^`7NEv|Y+{l;j}OB=lv}?N`)PE1JjO@ArrZSumq`WIxsKq18J;3L zY0d<$DO@H*g|*RAIvq~+dLE4OS2lld!k4)AV_cjY3abZrRm4%ABPzP&HN~CB@-TqL zbX`R@z} H3l=pFrq) zz#%4&( Z?UB2UyLe&_9mF3u%A3 z{`$4ueqK(&CfE&psXwyl=`^e`NEX3_gQyhKU@gId_2~5e5PKiQP*9wgj=&R+wf^VH zz3X6PVMzz1a)Y{+JM{hgN3i^Wa9#Qb^&Xg_PPkx~90i}O5NXojh|=H~E9a`Q)*h*R zaU9Es$TFnTFXu2bwL5cl3?c81=G0A5Wf!wk1`G@=nTrC$!aNQ)8H{#iuHjr_>7B_^ zOAnT3zH{deXiVY-pRccvnbZhcOp*uK(xNsfVkyTG7-gZS|NU7*pnkliRpzzyya(Mc zs~i(n0z|C9eT_)d1?8c>)M~xbBA8$+ZU&;CS5Q9D9Qkk@&qiHbwMF-`a>AvRpY~;K z+goOb$J0yde` Sm{bjdX@e5@VFu z`JVRA-&EB5+NaZaCDsAi>d9(TCmUC;1w^nVC5gPmuXU5ob}u#1q1fKxc}9)M(x4E) z7Z5ny(+-qD5R>^OOBcEy?VwRt*`Y o?N*;G zUF*8vRp;Qhw>5R=DZ*|NQS}lN;otaH96EN|nae|No~P+`9*;76cEke$W~QW1_kZuC zp-Ci(=~R*4zi;5Log$6R%vzMIb>rvPvvkeec__vnEg1fDM>1gc0WI2EkDcA!MH03G zr(D@8;Txpz(UukjJ#oXp&QSI+328Pd*Y7*G^n59KI|wQGaigREVC!D}?R#1Nfx3|J z7>J6J;7TD0bFR71^!GTlDmF2(I`zz-ozZ7dhUhvJVNvlO9x-s@k5x?_J0U293QkQp zLk?f%8J(TxE3$kwYFP=(?&{)pNXwAAkNNv9Knpkw&6}|MeQ&eWI9Tu5TOO-%*PU9x zF4TF`iFpaRqLr4OY^$HA=Qq5;{Fs6pzu8nsv|hyRLM%AgXo#~U&r-#p=KJx ~bwYHC{9^mpo+PJ%vsr0mPsd#36#8_CCM(N)4OZZjM8Q_I2G>V=OLMv6JeG&o4f zr+dYXX-WzZ-sNKVq>CRuB&G-~wv5WicnWT9I|moX(5*6W{o#pPHvX$n$3A -=&V{|%j|ggwvpPA6R#_u}AXHWirSh}O4l{pqS4orIko{W=vFnyLtK@eK0^aDEQW zZG#FO)~5)_!ilBujY_SCU>SjORa@s*j;(&9-~_i?Hr7Wt%Zh|;x+h`5OG#OFp{JnG z<$U zsi-Vukug|acn z+v*!paRNdB<_esEVS`zmWp}KJIg4?r;=aQHQ+eWDpLCY4?yV6^ZXQWVG|wYUI*&_W zh@(@0n3_5~G>iOW@%~d#1l!b7knQipdP9zu*O>D1-l{kxBz#Z2M~eGC`^ZXpEbZGK z9tSfrkpW3SuL|-i!RN~9e>d2 J|HcF;3d>e#H`D(#ObY$N_Em zEy(*_Yph>zKnVx_7`K5_K3?VI_V8iX-U@+U3Gpr6*MiPBx$U;L76;p(jNF;I9}>;N zmRZC5p8@2^g#6g3=CHi}!Wj*1S~-FF`JxuGfcD<&w{HvFoCkA AUs!(ZVJ65YN*xDwiT9n;ba3cx?ZeP9}=GW&PY>3+}s%p#xJC^*7%<}0! z0dURAS_BA+=AP9^PSmTFpAMs<*Fz&ocNZBFh1I!DzJ(4Bu0Xm-mf!<$7Y@TE$Qz$N z74#=exce-=VMvq8mbN4>jYs-qA3fSOF4EBi)bs%NZ152Moe4Of_XLPW)0EAy_@Tgn zv8d^Xa|fE6cR;afSpBm^^JaTz&s*2!ecOua5Pw2**L`Z&xek7yU(N5axoBVd`z7DK za4x+DvP)XJp|ivG@-R@UQ$q3U%yNW2;rsX$lwV8F6chv5HLwZC`@0o9{%$}Fb3axD zh&K9SB$fX8`+1tPE$w(U&zsnP;>5VD@#tN5 tI*f8q22wI#;_dU2Kl73={`Yrs z$&Y!-fq(!0hSpu`^5cI4W9PpkK%{5g^_dk_D) =>O;lGI5e)})A`lAqm1Vw4Az%L=-N&}F literal 0 HcmV?d00001 diff --git a/master-toc.html b/master-toc.html index ca35b0b..6c31d02 100644 --- a/master-toc.html +++ b/master-toc.html @@ -22,6 +22,7 @@ - installation and setup
- adding users to gitolite
- adding repos to gitolite
+- gitolite flow
(workstation, old server) pull the latest changes to the
+gitolite-admin repo to your workstation, if you don't have them
+already. You'll need them later on.
(old server) disable the old server so your users will not push any
changes to it. There are several ways to do this, but the simplest is to
insert this line at the top of ~/.gitolite.rc on the old server:
set the URL for the new server
-git remote --set-url origin git@newserver:gitolite-admin
+git remote set-url origin git@newserver:gitolite-admin
push the config, including past history
diff --git a/pictures.html b/pictures.html index ef3b7c2..287a80f 100644 --- a/pictures.html +++ b/pictures.html @@ -104,3 +104,65 @@ paragraphs, maybe like this, and save the file:You do NOT add the repos directly anywhere on the server; you do it by cloning, adding keys, and pushing.
+ + + +This is the overall flow of gitolite, showing how the various parts fit +together. This is particularly useful for an admin to see where his +site-local hooks fit, how they get called, and what stages of the process they +affect.
+ +Legend: diamonds are decision boxes whose results can abort the operation. +Arrows are calls/invocations. Dashed lines just point to sub-parts of the +process on the left side. Blue processes are external to gitolite. Green is +gitolite code. Yellow is site-local code that you (the admin of your site) +can add, to influence gitolite's behaviour.
+ +Authentication (AUTHN) is typically done by sshd, but could also be httpd
+etc. This step invokes gl-auth-command (GLAC), which is the main entry
+point for gitolite, passing it a username and a command. The most common
+commands look like one of these:
git-upload-pack 'repo'
+git-receive-pack 'repo'
+
+
+GLAC first checks the command to see if it is a read or a write (RW) +operation (upload-pack is a read, receive-pack is a write).
+ +At this point, GLAC knows the username, the reponame, and the type of +operation. It executes the first level access check (AC1), +which passes if the user has at least one ref for which the operation is +allowed.
+ +Note that neither "deny" rules nor the rule sequences are +taken into account for this step. For instance, user "alice" will pass this +step even with this configuration:
+ +repo foo
+ - = alice
+ RW = alice
+
+
+although some other user, say "bob", will not.
+ +Once AC1 has passed, GLAC calls the gl-pre-git hook (PGH), if
+it is present. This hook allows the admin to add his own checks at this first
+stage and even abort the operation if needed.
If PGH passes, GLAC now invokes git itself, which runs the command specified.
+If the command is git-upload-pack, nothing else happens and the process
+completes.
However, if it is a push operation (git-receive-pack) then git calls the
+update hook (UP), per man githooks. The update hook executes the second
+level access check (AC2), and depending on its success, the
+operation succeeds or fails.
The update hook calls a secondary hook, update.secondary
+(SEC) if it exists. Similar to PGH, this allows the admin to add
+site-local checks before allowing the update to complete.