From 8917d66571a95f3da232a0c27bc1300210d10fde Mon Sep 17 00:00:00 2001 From: zeripath Date: Mon, 28 Jan 2019 16:18:52 +0000 Subject: [PATCH] Add migration test (#5773) * Add migration test This commit adds a simple migration test for v1.5.3, v1.6.4 and v1.7.0-rc3 Signed-off-by: Andrew Thornton * Automigrate based on available dbs * remove old ini file * Standardise the dialect names --- .drone.yml | 5 + Makefile | 28 +- .../migration-test/gitea-v1.5.3.mysql.sql.gz | Bin 0 -> 9030 bytes .../gitea-v1.5.3.postgres.sql.gz | Bin 0 -> 16612 bytes .../gitea-v1.5.3.sqlite3.sql.gz | Bin 0 -> 3849 bytes .../migration-test/gitea-v1.6.4.mysql.sql.gz | Bin 0 -> 9423 bytes .../gitea-v1.6.4.postgres.sql.gz | Bin 0 -> 17346 bytes .../gitea-v1.6.4.sqlite3.sql.gz | Bin 0 -> 3995 bytes .../migration-test/gitea-v1.7.0.mysql.sql.gz | Bin 0 -> 9682 bytes .../gitea-v1.7.0.postgres.sql.gz | Bin 0 -> 17659 bytes .../gitea-v1.7.0.sqlite3.sql.gz | Bin 0 -> 8165 bytes integrations/migration-test/migration_test.go | 245 ++++++++++++++++++ 12 files changed, 277 insertions(+), 1 deletion(-) create mode 100644 integrations/migration-test/gitea-v1.5.3.mysql.sql.gz create mode 100644 integrations/migration-test/gitea-v1.5.3.postgres.sql.gz create mode 100644 integrations/migration-test/gitea-v1.5.3.sqlite3.sql.gz create mode 100644 integrations/migration-test/gitea-v1.6.4.mysql.sql.gz create mode 100644 integrations/migration-test/gitea-v1.6.4.postgres.sql.gz create mode 100644 integrations/migration-test/gitea-v1.6.4.sqlite3.sql.gz create mode 100644 integrations/migration-test/gitea-v1.7.0.mysql.sql.gz create mode 100644 integrations/migration-test/gitea-v1.7.0.postgres.sql.gz create mode 100644 integrations/migration-test/gitea-v1.7.0.sqlite3.sql.gz create mode 100644 integrations/migration-test/migration_test.go diff --git a/.drone.yml b/.drone.yml index 68d7198365..560df26606 100644 --- a/.drone.yml +++ b/.drone.yml @@ -127,6 +127,7 @@ pipeline: - curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash - apt-get install -y git-lfs - (sleep 1200 && (echo 'kill -ABRT $(pidof gitea) $(pidof integrations.sqlite.test)' | sh)) & + - make test-sqlite-migration - make test-sqlite when: event: [ push, tag, pull_request ] @@ -141,6 +142,7 @@ pipeline: commands: - curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash - apt-get install -y git-lfs + - make test-mysql-migration - make integration-test-coverage when: event: [ push, pull_request ] @@ -157,6 +159,7 @@ pipeline: - curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash - apt-get install -y git-lfs - (sleep 1200 && (echo 'kill -ABRT $(pidof gitea) $(pidof integrations.test)' | sh)) & + - make test-mysql-migration - make test-mysql when: event: [ tag ] @@ -172,6 +175,7 @@ pipeline: - curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash - apt-get install -y git-lfs - (sleep 1200 && (echo 'kill -ABRT $(pidof gitea) $(pidof integrations.test)' | sh)) & + - make test-pgsql-migration - make test-pgsql when: event: [ push, tag, pull_request ] @@ -186,6 +190,7 @@ pipeline: commands: - curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash - apt-get install -y git-lfs + - make test-mssql-migration - make test-mssql when: event: [ push, tag, pull_request ] diff --git a/Makefile b/Makefile index b27937b0c7..5201e99b04 100644 --- a/Makefile +++ b/Makefile @@ -35,7 +35,7 @@ endif LDFLAGS := -X "main.Version=$(GITEA_VERSION)" -X "main.Tags=$(TAGS)" -PACKAGES ?= $(filter-out code.gitea.io/gitea/integrations,$(shell $(GO) list ./... | grep -v /vendor/)) +PACKAGES ?= $(filter-out code.gitea.io/gitea/integrations/migration-test,$(filter-out code.gitea.io/gitea/integrations,$(shell $(GO) list ./... | grep -v /vendor/))) SOURCES ?= $(shell find . -name "*.go" -type f) TAGS ?= @@ -197,6 +197,10 @@ test-vendor: vendor test-sqlite: integrations.sqlite.test GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/sqlite.ini ./integrations.sqlite.test +.PHONY: test-sqlite-migration +test-sqlite-migration: migrations.sqlite.test + GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/sqlite.ini ./migrations.sqlite.test + generate-ini: sed -e 's|{{TEST_MYSQL_HOST}}|${TEST_MYSQL_HOST}|g' \ -e 's|{{TEST_MYSQL_DBNAME}}|${TEST_MYSQL_DBNAME}|g' \ @@ -218,14 +222,28 @@ generate-ini: test-mysql: integrations.test generate-ini GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/mysql.ini ./integrations.test +.PHONY: test-mysql-migration +test-mysql-migration: migrations.test generate-ini + GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/mysql.ini ./migrations.test + .PHONY: test-pgsql test-pgsql: integrations.test generate-ini GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/pgsql.ini ./integrations.test +.PHONY: test-pgsql-migration +test-pgsql-migration: migrations.test generate-ini + GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/pgsql.ini ./migrations.test + + .PHONY: test-mssql test-mssql: integrations.test generate-ini GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/mssql.ini ./integrations.test +.PHONY: test-mssql-migration +test-mssql-migration: migrations.test generate-ini + GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/mssql.ini ./migrations.test + + .PHONY: bench-sqlite bench-sqlite: integrations.sqlite.test GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/sqlite.ini ./integrations.sqlite.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench . @@ -252,6 +270,14 @@ integrations.sqlite.test: $(SOURCES) integrations.cover.test: $(SOURCES) $(GO) test -c code.gitea.io/gitea/integrations -coverpkg $(shell echo $(PACKAGES) | tr ' ' ',') -o integrations.cover.test +.PHONY: migrations.test +migrations.test: $(SOURCES) + $(GO) test -c code.gitea.io/gitea/integrations/migration-test -o migrations.test + +.PHONY: migrations.sqlite.test +migrations.sqlite.test: $(SOURCES) + $(GO) test -c code.gitea.io/gitea/integrations/migration-test -o migrations.sqlite.test -tags 'sqlite sqlite_unlock_notify' + .PHONY: check check: test diff --git a/integrations/migration-test/gitea-v1.5.3.mysql.sql.gz b/integrations/migration-test/gitea-v1.5.3.mysql.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..643b6bab9cad3aa3a5660729e17cb56d10857e21 GIT binary patch literal 9030 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 literal 0 HcmV?d00001 diff --git a/integrations/migration-test/gitea-v1.5.3.postgres.sql.gz b/integrations/migration-test/gitea-v1.5.3.postgres.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..2fcad82111cf00a0fe6368e0bd714c9d5114c043 GIT binary patch literal 16612 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 VZ~8I}UJi%f{Xd(@tyStP0RW?ziRl0U literal 0 HcmV?d00001 diff --git a/integrations/migration-test/gitea-v1.6.4.postgres.sql.gz b/integrations/migration-test/gitea-v1.6.4.postgres.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..8db9022d1c0f7ca4e0d860edcbedea4ba4ec2969 GIT binary patch literal 17346 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 literal 0 HcmV?d00001 diff --git a/integrations/migration-test/gitea-v1.6.4.sqlite3.sql.gz b/integrations/migration-test/gitea-v1.6.4.sqlite3.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..a777c530253f57a9db008652042d4027f13d5bea GIT binary patch literal 3995 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 Bz0Uvu literal 0 HcmV?d00001 diff --git a/integrations/migration-test/gitea-v1.7.0.mysql.sql.gz b/integrations/migration-test/gitea-v1.7.0.mysql.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..d0ab10891c08923b4f02f0f092a5cd51fb24ac13 GIT binary patch literal 9682 zcmV;@B`w+?iwFoeX-ixH17~S;WnnFLF)lYQFfMI*b8&1gb8&0{-CgT*+cviUeEU~u z_kN(dS5ElSD|b56G*Ndwb?mL}+}-VThM^?d;zklxlCtC7+5i3GO#lP|$f8X*O%w6) z18{I~&cOk20G^!mK0I9geAZj;H@lwazVb%B-utvD^K_1GUj^aGhd58;_dg7JH(B0W zCi67jo~+aD{>#bjcHirNnT(=Q`0Y0*C*c3yU$UZn(_3eYc)bFbJ@DWAxQypi)Qz5ZWg4wtj5k7w6cwJgZ< zraUgr&fZ?1UYvug^Yhs|cnPymJg(<({`SM{s<$t1CYyQ4zYeMbu1`PAqF*k~XCPO0 zUB^~1=YL%Hjq5rU#`VG~zmMmqKYyHoy3gMI1S>1t4|?Kjw;_`sFD_@Ne?E_Xn*F27 zss3=#QvlrtP68Q@K3u$q^`w`B9((AVUqo*|USCB2_x23X2N?Uy?DB%Eq~}R_onKtf zu1IF+8s~-|VM;gkJxfUhh-7{M4JLx9PU*`|h_rP~G17$Fs8@V&3UFNcjP1!~jC~1t>tm zzn}g17Kl4agFtz*%Z#8+woE?t;A_vTzy9mx>4&$M|L6fB==C9i-@>O@($K?CAAg=j zxE2wt2cvAjivRYTZ+o-zKc4~tKizJ#_diG#`VNREEf?x9;No|XU3QGEH5Vrx?}1%S zx3|3|uz^jYadz?UC)^s9MD+f4d3rsg+T*&tw`ahl$Zhui^a?!yY``Yw^!#dedEGlb zzrLtYNa(M6eQ)3of`R|-pzjYt@CRN6;1@p&2i|bt`{;Uzu03=;Le~HXuE*#)MAwsn zH=)m`=o&xwTy%po@;r2dbMnA5ci@jPEI>CCaAT_F>|Ctm$8(Nj_IenV+2>?y)<%Ns zUMC45hij%u;kNMxDBN9~L#q1zaHzl(tJteBp(>k2p2Q{K$$p!D(HFSiE$xs8DLZ0M zgbD3qf)O0yPT&7s#38Qq5py&su}*!lj=J218urB+8_iEQ)`wRJg$<(OXJLsb)W#lB zY-N?afpZO?_1-!IXB8JK&lya^(P%QBPTcAW*)4|sfnfb6EU+(fzJVHRSGN|dPzk(M zz5PLmZY>WY;c2{qY!{UeJ565?i;voKEEd^j18Qr;rA4$%)(OzpPrWkTJ|ObA`qBiB z>yW~4A{!eD^4;a>9WVrT`7W|;3FrmjV=bN<&&6=mrH`WWZ*OlpzEHzeFgN?=@lXb=@-dlto z8~B5S%*8(*`5A(W2GijPyOROJ1rpN9*2_!Ky5~Sw9P|*`W#|;bf2IPQ{2-L6Cdb?2 zvWyoiC`(#$`;=7O>|iT2d9RJfKEs^W6L;&>yP=XRgxz0ovHpW8G^nk1ShPIC1o ziUS(V6o;%#l@q&3GG9!mC)0&HKM9kY$;o^^TAqyN^XYsUOx)N5UZqD(jf1lRkK6%q z1;dGpT}+$2{CZyKk(gItl^5_zeP%Hm=?bm#3LR>MJq=w$tGtHJAT;x9WR=&*84Ph= zz9z4+RbFGOye3w8O`O5VR7V?`J-S0$Wb1W2&+^zbMi7Brc1t292lq@W51!&1hZF)p zoHwj{)xKkI&xOk1X+%okpuzJMlNcRZ5w7y9O{P6~X49^aNx`~H0-!bU5>{{HC2(ct zk(d5MNm`7SF;i!r&KBMBNNS(~Q{*2`#?A2!JSd|&g8u6 z0WSrpg9SC7#@pGnHVVPUwT#QXHf})#cJ1?2lpO5&q@a&A^f*>a4X}K!PajJ|6`{Kt zh0@zH&Tm0g_xYOZJeNta$kQG6V5=?_cDi3`O9YwOJL_zbyA&Zqk}93nr-N%B0)pNJYTlv`&H9Ef zQ^HGC?n^wdN=rLM;r_+VimH@G=oMuF)pm39;jW8Y z>v`XE;{s>EdR_F=ufIg$%J8N1&chR|Y0oNo=b{%J^8gIPmZ?% zUqG{O<8`#ofL5SYaIGa!z&o`E3VN_rU~l+vySh#rV;XSAMYhiuwKYE;DC#_4`k#{_y1xrnM}?pIB& zhStZP9rvw*3JT_iNxjzIFqCD#$?!)Tk5!g^j>@?BtTP`Ks7nJMRbj2Y_ZKmcU>3luojSq8X|biX#(t?hn8BQy(5k$G}sjuVcTFsRoiboMF2aS=z_n%~C}vskofj8CWJwEQyA*4EU=_2B3-P9I6+PtP_#u=@peUqV zrTJ1-k)~pNR?Nh$LV<8?a515ZU)eq{SM_qdK`qjnloKd;1_OLTR?bk_E;ol26Do=s zA)ZmLjjCcsa$CFg42QK04U*Z8Yr?j-Xcy#UXy@(^HpI)Li5(@7N zwCEG6_m#Y~*chcu)om}|d}b@mqb=+)4;L&mv7RHnX7R~e(lNS~YoVR=tYN#?GLD#5 zCjO=6ZH0PCVRW>3Ev&O>6q!l22ZFK=r22F{38iG)JdNeftrIYHWVNCYZ(MsWQNcS=Le zx|@(iOKM>XyWmjWD+L#1aYX3VBR8w3a0gLrp7DVbIVl*sAGL?Ls_#KDSKa7QLqG=K zW)@o15PqRhB8-%W+AiCLT+T2iNbwC&xfPZ-v{LSZ_(aOi-dpu&Mv zDGx-{yK`b7Rg){%93-Xh%@ARXH(b=nOCN1<(x=cwQXvafBuE=wB+yD3r$_<0X)EDC zE%?V(zO|z0Xe~8*f!+ImkM#Un+an-sHa4xYtg~F$>8xDcKuxGy+dxYocn;fyHT0X< z<$TPd>2qsrlk;igc3L@{3RlxX&*&Pd^WX7&u}p5@hC>#Uj1WFUxadCzxv2(fj@Qkb zB3fq)Z9E6VbgH40i1s%enj^;WaXj+5I-j6?C1tuv4%Qe_8S^3$L#pGQI-bK2rAJgL z)?Rw8Vld0OiYh@XvcE~nILhY#OcvVH#bjvLn!wX?c!Z=rM!t5GtMC?zX_1y$-qNI? zosTHh8P9rTZ0lJ?P+fcYWEs&PBT%YkUoPbZ=v_^6Yw9NmiBSs$^a08!q&r?GxxEuw zh2(LaY9mib+Xw$y9&(Siso5T$4m)LXKM|THM?|?YVN6W`N&WgPGIEOp?@D z*nz__sL!)YpGIU-zs5IB>I33jgmedw*r>2>r!4dR8Z*2sqt*H?b9c^b=w2#in zRG=;`OhrX^r8v`=#;yjMu2&_mOD~j@14`GX8!Pq3AwhGbp;DSo92*SQAlU( zbpwwAvNaY`ZJ09OS|dr}s5W>>l|`HZG`vDC7)nQ!oHS5>sOU+SUE&-XV+k<;n+* zTNH-=K|*%fLrA1leFU|oo?8oe2EzEnpU=R@JrqZ~VPfqfG26aaOxHsQmG}r+EjN`` zuVt|1&_Ygjyi(-1#z0Pn=~NLY5$y+Y!mKSqICuN`I$gAIh90d7UjN&p^*=&`q#hJV zDeN0?9F={J1bc`N5M<(1}qjfx6jiOSoMv+REZ8pNh`QS=X+L+9n7_w61+xV_Jt> zIxO{s$6GwqshLiH<4~Pixr&S@I0Me~k%8tzyQL|b#v|bDzK$wQ<~A;Y*qlq+oys#0 zscN*B8L%j8fT-D=#OZaK1KMgcm!t(fUc-26bOM%MlQ~?sy37&M_Id}M{L>s9WVO}I zd{)vbiI?udYYu`n$eGEA2p5F_G| zosaG-5jM+s@XSqje4`T4R7A-P!_7!_&-~AxFPh zS-3N0d~4FNSZSY?)80<;iag5+W%(I=~X z^lt#;J8-}U_zCqwOmb>Rf`PAV?nV%(bNNM7JdL+xSQ%Ml+ne-J8@FxTD_F0?#v(M4 ztYB!;$T-jZ+!M``oYl1rH>_FNFwR2PFpv*F4hPP^|Kn6=#gpA5!}?<~Z7e?y@d@w$ z{`HSD6bo~mZjusk=yQ_)`o}jwy^_JNe|!r+EqAe9KfKGfWuDIWWtJD$*)_z$1OzE% zJw&0*FzeIXZI&m0gJCPhE?y)co11mIC<~DACSDh;j1O>OK`Qq$fombkhbs8hZ~M4d zsVTxIz}I*%9t0X52n6bxfS^+56EtOS;sRd-EfWN4EV!T|X*vj0g5$Y^KqWaIXhtSG z-p~&NHw=Ia3f}mGAgJDehtt3hPzMmeH!TX5n0p9we=6CMB}goK2#XF?RUW}NL)Dux zNT6c)WDqJDK1HWw)-~J3pGkNMW%WH2koi0u6$*x{V=6NS#Ye#$A8&oAKL-utE2Y#Q z!8g9@&3NF4>NJyqAF9(#2cV@@X##iP2kJM##*Wo*0AUlw8;ky;6+a0dS!8mQ2&!vO ziICChNZa)OfP)(ElR2o7#nF#9@qS%ehHAhGcXTeN@j#8DjB^tPNXusvrq$CsAQrAc zTjpm2Wk)y^x-dF2)z9U9P&%{%k>16n;UlL2H;;2Oh;DQ@z+n5>tzkfSNI|p`H>IYAv;@9*1p4jr6S1oRPy7I4{V9K>54#(KFm6B z*sqkkE0p9OTmCk)H2UzMs*AU6^DdB!3>^8kWw8V0NkxW^eA{*{hs-=v zo8Z-rg2g|q7*zHZ;(b-|2i4xLcn?mD)Yu#-SbvcITCv{urNT)y16AGI zHy?1`XI!smsHl7Uh6GMwjTO}lRdqk8c)Pj};il|bJ;@n%Lj?<}SBI&--UISS5*?(* zN;Eb-C3^pM1sY~cLxP)BA#D|JIby+?gaQM_U^c%XI#i~v+u9Q^*k)<0;M=;DiNg+SlSmjti(U= z3)!Cg>=SpDmPnI!STYS0b{J%utiverAUR-0-zS@_cZuF|tDE)kjvyR{0sV1Kw|DV6 zU6O>o|Mr^F;uw%142I#bp3HAb7UEuQ;QTe&E+NnK6b{KDcFsA-6<4*_NYZG4cQx|h zpb0!iu@oXWYywXPWJ#L?51YVK6apfV0WSWDPS{YVGReTv1{>C82H-=(oe1hju@ zSbIUtkU;({uorvMe$~{1&A|-TS{w|~+Z&AGmj!$>ci$Y6iPN+o!`aUG{nZN8tu#|A zp6CnTstvr4_ZbYH0IQ98?`s8pTp#`X$|A^=q%o`!4Qj)1Cf#8`>DrN+=p-Xki z=O0;=d$exB)4z0Th2D3mQHX%U!*whUjcg3odDPcy4hY(Tr-WuXij&YrouHAMDKaJ5 z%oAM2LJ|EMJ^UUCF7Ss#rR-T8bfh1;v<3H-Qs}!Z`{sV80+2h@l}ndNP1Z zJMqSI*e?R01#sjhkDBvv$x)SK69gS#*@(ei@CeP(HDf&D^x~B$NUI}UGqOGG@Q&?} zQ-mbrGJ+NE$i$xR1GAXzt=KT6EG9#SL0wxjOvRI!G<=rhv$@8sHsp8@Qaa}&*KG}Y z^$3IW+?)9%p{iLO(uzjYLvUvMLx8*y!keFbJgy{REMVl0w_J<|V2~V8BLS{MY79mL ze~d#d(Dj7uAON}fWSBa}moUI!Jec65FcM%qn8F*2`n038rX5xlsB@)#+zzYOlvY1C zd4RfBo1-dqRh+0(VGq~U@VNu!Bw4EKs>LoU4rigO@-8ac*&%f$H`omzHvv*wauXu0 zB{xH)w&Z4n^p@O=k>b)`7pX3}A<9ec0<68{F2n&hddKtM3@QN0>3-PiOxf|j&A#yju>o(*LmJkqH z@EPO5nBJihCiD)KFr{~}gwUmT$Y^`?4wex5^bVE~5?aP6&ydhE!FPlf-I?W_RJLTA z4WAvTK;4_>M}2spHPdXGi#)_Qv+oX6#(A&yqZ+QqrD+(m$o6mvwRv}XSGz;-fexB23>a|0A}daC;ODzL{?b;{K@v7+ zNLU>oQ9C(;g>v{p7=}M^AZ>78sl$g(AY6_ufzh>pvwYQTqvnN zOc%1R;Z&{$*mQ?ba=s$vnZt+A`PFz#_)$M_RD%V-xD#R7dtqxxvyi}EB`BM6@a6D1vRh~IQfoLcqEmB$NjThLK)sv(Byh7G zvFlSYjnSTVsOpbwKC?1#jVr1EVW?j43COZ%qwwQJ(lAZj`3&*nCWqTO$ma%r3B{)K zOEz)3*5&j$Np=xJ*_{yso!a}QF2~ItIKbfD_BKH-@O_q>j$m>5&%_xvOYq;4vpWt3 zr?C3`fT?KuQSw&KPRipg{5Ga`a3GFOln^*8wU2MP;+|=@2OjER?plJ;)aqSYr1Ny0 zmJf#SaK&G60z^CFd-G98CmuWd2YwRd&U}hdyxgQ)Jt~Ih!$r4g8LhJHvkf-g?6Mp( zWf8A!@VHsva!b5T|3zx4NJdX7+U3~_Fpsd^POV~~)i7L|NuwK1B%Q^O$Y?G0@BJJy3d_-9lb@F9%}s>D*^2U^ z_8pUYot*=`4>%6cpP-~nqFGHq?++O`pf8NuPZeO2Wkb@h*%n1APSyLI-kS#_&psMa zFH%~pPueU^%Bzy><7@QyBlzuIY!mwE`{YZ!*{zdTi;PB7I^*RuSjMrt^peqyAGpKC zVsaCQQ!o@6FGt>TF%EopKKDlc$iJB`hQsA@JPhCrr#tq8aIsuYNAWc9rePAglOXh_ zV{aV#H{saz#$!Kr{bB4>drbMC>L2Hq?DnU-zbzkTUo`u4Pw>QT^#JbicCb0}GnAmr!U&OoX`;0#N8h9rkNJV((YwCzk-x?{o7T{!oQ~hGDt@4D*T<}u(CU0)G z=Ua{K9P0v2HTiS_3xdL|3vsg0seTdbegxhvefCl~_XH9bYU;?hmRehfIPuV_elhbv zCqSQlZOn5k<_$G<)JwdBLQzoSkyHI5=3S*<=%bgyyQfjvk*1o8mP1F3J1A}kB^x`{ zFJ@eFmu%_7ubXvaO*M6_o8V*fj!I%?#Amk}ow>GmwlsJnDXXY~;Z` z`kEQ2ttDTouVx?_e|Xdh_t*%8d-PHm`1tWhGXu4?R4|ZDws>Ux;ZZ-_VMzCIa(_|y^i*${+#^io*&6qC!^ zTADi!pNv3!>V*4j1j0S~ni;6ArK#i4uP?O{s}p6rWDA234KX_m*LCa;Bjo4^ba9D1 zPjxHk#VWg3ukgEvF7y)mBUEA^6|7h#WhgGh+qloZg9TDiergM)Rcjd+Oe?5);k3f? z+d`aGS?-EAuU{i$|7w|S;&ki1D%Z=`K-I}Pmk1pq(;Qg*a@ z-X(cqhzqBXE|rqfaIikIga<`ezqFWTp_K&rXZ6#HK11oHp1~@CACDU)k)e+kLgP7$ z-Jh}e$nzC(Fv_!?jf4+Fq_ncq4>&*cxy^giafmiYAzB@Ss5$}>S?Q2iV%-53Z5?=c zpUhE|piaaIq*Ea$G(62W-EGdk*yn5hGmH4Na#PqZ-PFg@!DWY%|6XHSL`7i;y0nZA zg$#PM*<33E6TXs>jD6ufA0`!^N2NJzu_P?3alUhp@cO>;3>fe1QF6C z$89=#b~DEt0MXDO2%{63Vk=6R;o7i=PN}Hh*#7oc)2ywG?P)14V@~{!~kjH_34LM z^veZM=kG7h-bd^ftDc~=S3jRcA1>Y#B)#KyC3zvj{djRXJN@%{1j>)z{blyL4PIfYzY$lT|VKfv} zkeaLx5U9DOi>V=<8xuVTJtMt?xwE4Uy|beY(2cKlGA>8sX_r5^`dOfpsLW{#gPYCp z!Z@EfnuOhklJ!^*@$0e8KIx|miC{|V{)p+-NX8g#J%34zF%4XvglpgJljdI{H1OU)2&^H z`^VAjQ3j}xOO*B61oHt)0B6gGG~$lLAEiEG_D#ivWM-D}gg zRkB&Q@16fEgg`_7>c&^{w@a_y!t#Y%9-Z12+55lWhmX3m@BBa8Zi&ay8@yY)X76Fe z8R(xmU&;w78)>Cp-tQk-D0#_BbxkKzBs)#VRVPn=iRABJcC9i1_wQuA{I6ejP0Wi| zVSuhQ06}?Q+0%?$Wb~9xXnT$jJvG!mf#YEGmX5uX3yVb9t)XwhD z^NzbfpZ}}%-OS2ddf)5rSBv}mXEx#*p;y`dZ~+LHnIC+o(& z5!%5-Ta~ZqBkzu>;Y8#i#A89mNYwJAh=-RV%fZEyOT*-nr-9~^OK#GwaVxw`j>8jl z(C*1b-n}GdQ#S7g3M|xQ>d90@8d)w7(;5lS@e`|t_i7t>!@V!_l-&=uj$&0IXK_R6 zG)se-rY+`0`aSQ}F}dy-qjquem_|bH%YYXWh*NfrR6NlS^hAPP(u!9aEe6*G&3jvd zO~?wjcZRPtsGNb&GmBd2>4uqzZEklyLMY>L*Pm|i(_)mQY+8juSH6wA@Yy$ zgpa(nUA`{~AKw8-%=q!i^Xb{1`Rm1uZkjKNF9-IY1nNKd1#NGPgzDP%ng$qF-Hu#p zBQXG~{GKpamKiAtG-Z<2{9(1=9~=Z4bpIyu5j_`K#m2(Qpp%H&@C7={m6IsAs&+f) z4nwh~$I;a?Xrw6u1Zon~;OYgXCzGGZ;S$en>o%v1ZmW$T;%s{;k_QmQ+x@5P#dXUZ#v%Jf}J&Z&TL{IGA; z*{MIB8#d=LJhEL)`yA!&X={37;^fEDHHn%>|7E7rkCC#(HulEnW6|e@!sLm+>v&%$ z?R*z&jrc(0YQ0GBNx&esk?V}K!CjHEm~w0wSz<=jrYC59((IJ8TQ%It&dgURJ!%?l zE$zsGlJGNJgb$$Q#oe-qv?R);C`CN8PDEB}KN)rTB#|f{?LS$8Vk-6o41}I(N?S)v zjOa;P-*uL!8TQUbF_xrGbx#=eY=+^o&tX&@lVFl!W>OK`ub;4!F|1_}>`c=LfSZ|L zg?tuAG{&9SVe|DTdY=CdIVH?;&a_Qv)gm*qKobg`!`=k~z|(d}FF}uC81fp72+8E9 zsQSXJw8a3~e-A%eg>3YT&**QH-ei$gOU&UmH|m>40KiU4fQ-t2?}Z<_Y@jjcEGBtx zK?CslP}<8Z;?0EX3`tAB=P^udsC`OAPQxiu^k~Dhlc|{@J>n)&wx<#`bP=-0`R$va z+1?F+LUX?m!6GBQo}ONxy)M6(^tN=O*RHCz-vlHhzgOBej4)ry@j)PXx z9e*SQU70q;br^5TuxAlw#o;G|9P{RmJWa-GWD%x)f&yGAJ0u8FW(geJ=+8Bk>B#tLWx^D2NjQ(w*!mKZkQ}?TN&D< z3hR#n5x5Grd7_4wTjX{o#@1wb`LQ~98Ahaku)_OH@C6TVaHGJ~+v!+s-+Ay9>AiXG zm!muwvkp+qjkEZj|BX8#Zwsqb9Suls4z|aZ)n$hl4zj7iDr*PC3gv7~Qly!PD89i| zgpy#$4=D~mCV)!PaHtPx4_xGsL%|8=8-l^Ts6`Kv+v}{fTmt^sTpzN zrB9ir(cYAB9Hd8y;GWrH5F%nr8D*?EALK%Z2XQo{DuS!2tqeCpn+{1QSnq@t2a$e< z7qNM%M_Ji=Xc~BVWyq9qv3e`9!mZATpuy)O6>!9$&c`+O`~Fy0$KTrn5US^p0|n}sUjP!;&bJ64U6sya zJh;M9GhJTBXebDhH1qC30!qL<^x)WCgQK>eI=z083)6ly4wf zfD)n;XBD;FuKu_bQ6@5;_=k+AZ)gEVtY-wz*lZdq&S}N;4?3zNVjf6_4wtomz7zoO zcpAH@C3}iXJRa!-iewA12R4?`#t~wq{6dapbGQKnG&_$w#JZxznP~?HdO9E5FsbRR zTuu&jBHINVkz>RWfYfva0rfH628@((%Pzc7+5w;NTwyCh#BFE;23*z%AJG5R0xf-{ z-pg)o8*?ONu*a|S19*76bbT>NwPV4&ASChp9$t-~Q0NIIT1?U7?cgB{qFnT1YJmqJ z8DtQ{@qwi(#C?1CzzRfA$XrUWay$gr$I9wa8E6ZD^~v5!tj6_+83e=mxwM`Ug2^a< zJS^|}BbCbHM|7E*!w5S{T{7w%BMCxP$`XX&)hbZC3N|wGEchY^agE~{zJ*B$*Q4?22hd)4V+YMGLKsNrj}raO zTaT_JWQP+B!v>i@85AXImA#c<$Hxh}|Bu@VazBtu=6bU9lk+|Eyh1H_eE@dQ{F$NE zWU?1>Xs`$ri2_c520v7f7N1 zG&v_l4uV;PG=kK&$mB)h>ZTX`5VV0`NyidDfH6}xgGm9AR{@7r^aMfiwoKW@AO=&h zVyJ!Yff7Qu?8z8JCIw5Ps8Kj_7`#`S-=PuCu;A)`>)#>)>y{-5sP@zi`8PzX2R$lP z3IwbbN95zTNeY))4BsD8i)}bg6pl$q@CXgWko=iA6kZw#syyRQ3fDG`6h#n6v#9gq z=j-`$Fw;eoVb`OL;a_g|`?5#x?`b;lB^rF)>#@)!&3+O8sCoBcDAD^sEAYZUeHY>T zv+n(%e233RCB66%(E}bm|M~HKQgtOmB{=9uu?pQX*5mHqS7;r6hc>9NX9?zlG;s9N zrSI3#-3dTFxbP~*aH+88fBs}F2z1kvllff~}oMt<{I830p+U4G$N1R|bO%)vareEAT zuHQ{|UxUZ4xlQtvHpW=WKd5`H`o`yLLL7v)4n>Nh%3!&n^PEbnQT$VT_u=*Ubmw*4 zw^HcdL}LGsuj-&G-hMBy{>-R=%;@LYdKwQZ6PX^rZ-Mvmx7@UGe6d~^iEez6na9bNe!F9`!7bP7 z#FE$-2xsN##q)%t?`g*a<(!wuoG87X46Rt=x{5_yrPwz(a6nyq0DL?vi!g4Z=Jtn$ z<^3E&+}|}*jcZ4cxz1^B&)DcWR`@pwXKKwHjwVUwgE;KCB}&Y#&-AnN>00m&N^6l3 z;;^UXLtX1ZIYlw$WnUG+IxNBpkK9Wg!f4V~50NwM@VEp!TKa$y%l9$fn5A<_u4m(% zA#HOl?SV9hh;oLYLNqn2y6K6n(3uNdIbRoqTgfurA_YcB@mkvLZ(EC~{L3y;FI+K; zR*&>n5jDEbI2I+B9idpLqPTG?xfevLV)9Du&?}Ny$ry;rSY0+FOKVJH4d1@+yY04`K2oRoeC1Z z$F(g#`6UW?3a0iViCxHE&A11v4R_P!SAHdwot9sz%$RAhD_icw8;$?N9# zhRSOv)FQ2AA=p;0GyoxX8ZB0d*aG6r#5^lk`k0a5SQ~Nd1J3*nVrV@pGN;8s2o@(z zEtnSyduX$Da%I&adF-YOn{N@e*X*^A{s z4`_ES#r@6pC^@=vzo!{Uut zsl$5I?RAhb{YORJyf5_;Bm@eeG~wYi_>_d3OCOiJC!BF*gRFow)-6)J0tv0B)&x>j zTjqGtE_?_pDUQbo!ck7W4`~KLX>U_ia0qlwR;A_?!LPR!o!)~J{SQL?=-n1ozR(_x zlq3|5DsF2PvAaog*0hZa z82fOHd2KO(ME9IBX3y{VEzre!_PKeEW}jI^m^)&{sjAL-vFySvPv9Crd+Db5?c6Z; zXp*@JeQMdOzr*jbSJC+6duh>*WxQF4u#?DiDU6FjID&^CQ@|IMj}M{w5qXqhf;~iJ zW*8`d3R(NoG5PP&RjY;OAH(KN5@bWV&Aa?P1%iFzbCcKY!!Bi1iyi;AjL8ev%oJ0F zR!>5_YhBVIV}6;LmFM+zshpL6y6weI=zf_rD&5vlS;^`p;PL3B@#by#)tHhNIOtDy6 zM=Zem6dhiL*58kMoUnQdmL$~|^LtK$(w`tKMJ7}w>s+ZNBkMj8JOLL9A7o{mUubExRoyCXMXf1yb}*s!=ykJ) z4{yA-Xh3{w8O4FoV5J_En4> z4LnffEi<&qY`Oe{$C!Vqhd0sr-c?`;tTGVYB2+J#;G4W0FpPLPjHq#a#>Q%Y66Z9q zvk5YDsYl8f%yVS5{)MJ_$C5~sPLAPUG*NjiQi`$qF=oD0xe*|Y^?|xrg12b@8UZ;#<~(+E$M|l z7kLRr)z+T6k~|U)MFA(WYOELOJql3A6R;eRt0ZnAH7EF zJM2pYX9Jl4L3_&<8K1i6zctOv76kpXgeJV$l8ti!>c%}A^ATIo{zM{ASCcC*%38qZX`Z$9v9KDeXsmmAbDhs6OW$iH-c0} zA2T8~gA%Tj{--Xnc)r;fh=6Viw?Q)5LPm!^$thEN)wXT^OBh z8OIzuL>U{6<}j@UNe92Q`gmYqkb5Z)kSfX``)U_Oe&%P&_`p%ql@C-=c=VfVpK;2X z*`+?q*rjtMV`;9o&1eeTNu17iJ;(+=@$>@7$Tj2Bem8jdYdH8&4Y>s@OChZN{mq5xz%)3d)2j87T0Lh zNA9NHWI1K8fyVW4ds?PdDskGP>F|e}mXMh|Hzs5l;EuKEApBdkZ0usyoX!zJ!ZBU< zbV)fis8hSU4-wf@| zXfad8(~r(}k21RK4ctlG{Xa_gc5w>nruXr@ariQ#PiDCeG{n*X&%Md2r5!AQp^J~rc@R<4Kwck) zqU13@2ORo(iJX5T@H}prgQ|gFutwouyS%d{r~BS|_++2tg}v}y?W$6H)kW^=pH}|!63w@3r>1~D-q0q{(l(lZuDxiqUeRIZ zu-yYPb`h(ce)|@@G%PBItbk$i5^*NrWY}fD5AD#yCJc#Xzc5UDkf3kl zFp!ev0&=AC8w*09J0K0L*U{w!JE9f(W7isL~^-87I(v%&B z)+{4jb&x!zRl3$nuvFrvKes(bQ@#(_)l%6%@xl zc)J!c?@NEg-LD@4pNNq(G+&&uL7Bb^yh&X_n!%_-XvE#*~FMAgm zAEDNLCJLidWV2-C;3~r*=2K2h7}^9k?SZb+vVB-Bs^7gM(-xT+Q`uOVPWUJj2eKfz z=Zhqn?MSKYb1m&;%2qdlL-oXjOcPn^prKUw0$t_@ojP~}=dcI@`L(eG3w3Askz69h zYfm;LGiCCpB_s}HW#~biDwh6KHuh$HFbp=nrby_2cB3JNJ8qtT+J&BGV}S>;!6rEH zeV64~Oyu_wN3vzpiEEeKa6(H_F=9K_NH}w5GOj2DgHY~ey^cO~NPF8uydlqXxrWcb zLEEc+cB`-Kpl#V-dTA#{U*q=Kr%8qgQ2Dnfx z?xkJyq4`Hy8iAN(S4H`^i+6)Qs`H=mNP_BjFFBigfjYsKCBe}kh zrN&P6>NAAQH;}_)D1||gC0!=H%QxoGPrSfnSz0zuyt<9&I9c?}WIGPGp}HG``X_de z!Sc(NRnwG{R)%Mz+xIMudD_X8N!JHv+0|nVYF4hfd+~IkQ_wRjF(9%1HWCY-{H&Di zez*xrn|I#YITGG9J2Sy#r0_&Nz0B@c_5-!&lx&!zad2X(K?lC^Jj47Y0T8Vm%N2eOCbnxwDDeFJ@ z=y+pwcG8)~w>g9@=~HJn#R#0cC_`g7Y(0*<+Ffc-kksF=kDaafJ{?7wPY2JMu##uy zu(^p3PyHzp7(sF!&(0jw8@gV1mb{xLg^O1FU64=YYt7LD=6i5>8vq>(IO@^TSd4^v$7PNI*SVwKh;$_W z7Zl!BAZl|#CJd?`RVi>uQTp&e0%asV>%UTNSJ#0fTw)BN!f`Z#(-{4E_E>+S#dZh1 zWgz3Jg40+EuzV)avik&MiD#R@81-(`Y|mptVh?B^!4lL&Ol>yF9N-?Dj&I9m@owrZ zo#(M87xx$0{ ze5m$w*MC451wPf@SdKkD4AKYY^6L0ng!4tlp2DY?T){2GoDW^eRkW8!4%TDH?9eQ~ zH*E;*J&0XkpNV~JsIIf)tzkj=DC=cF8j7L}_t>@7!yXHjk3mxUnXYGe_^&FO-UQFP zv90hd9RiKsO>T;=n$tiM&V$IBvOS;VT};!{|cTV)*ne5=wkm>hd>7+%nmB=9~-3u3A9~w`Nul|U}Sg~1{ z&yCSO%&@#<76jQ~$*e#zWx(@GtMlH0o83ABUu>5@PFFkZk%-X^TKbss=M;FI8?dS< zf6T1$#za=ZS+Ai@;5Ulcg@(r##lw51Hq{;)CytjHafrJ*VBvSW-U8Q9)Nz%!<7%2v zyEy(#W&`KEquw6pLQ_=pmZ)}4DbvYngo;tGn8KFN&vB8T>?I!&wCLo?`8bRLA;I> z4J5Zt2v*GmI(Q%!5T+c&DlC)@(@YGrSs_?-VjJg1K2J_*aRzpS7rPZIICQ{{2gR8q zj*kG2Ctrm?MKkE&5~jS~5WsWh(1H*BYA$vsAL37UCi7b;QKqmC9z&63{1JH?Tl>O# ztni!Fbpe==z_B!!!yIS=mNYeC^U-}qlwt9Jm^uGKaq=*wZTzIm)@-;Jr?{@o#qqtN2xjfc z)Ys{5&p@=(lU>|;!sOs6i^eSD;K1aFet0LsUPQ2`q%jeEVhnqJ2>3P}<>w+)dEv=L zw?I=XNbC|kd{CyI=d2cNep3COxuJkJSp}miXn<2x=geK~hn}jq&sDC{;S?m>0b<8)(0W!~He8!uaye}df zOI{y~T&{QLq!SP8QIdN%OI>`@7X{Tnc^Dfv7szTmD+Zz4gFlPAsiRYDKe;sPG=yt( z=ib_}yHf~X-Tl|o2}A9cxY~GJQ&I4@%>H4I2W09Fg(1&0O*e|&@lOeSGgReLgX3*c z737Xq=ay>RG)vv-_4-)0ES#^4!*5y)reB5`6cc=M;PdwN`Mf+aq%&|t`#Ffn4d(#X zWr1f{ZFglE2sY#m-VfGQfaP2_#g%IS-+l`+t06~+z>~fkq`^}wZrIxiF1FQvIu)~_ zr1A7q$(M7UCv=Mp2CTCFM>M@5CP@rS-`5Fs3Iy$A5RR3J;(fXjdGjb->2Z%>;8H( z7nR2Ty&pnf^>WdL_7-9-V!kVzI1~TufB7fcBwNJRedM1^GPTgt9?tkQY&XsX40~cv z>YMfP)>}s#c7rZs=iDuOcF3z=r~^ ziF$Qn?ukE0VD-ljZQYcdJPZUT>t^9sw`h-4dGO*TcNPSUKRk(kj;eYw&CiYoHp;EO z;j^>P)9g`Jua}lCT%5QwlLVHa-}itVy4vR_R9mCq1RmEhDu7mvf{0pM2}+8$8O`Pt zRF*ldxx&?ObscdLeo-y_`rIr&DK$xntd|>U8?NL`GYf|W5oH#^B(1t2%2d2J{DlkO zR_&lGAQuGLxBF?0zuPmPk1TuTR+;y^Jnw{@oevYOkZvSJrxx6MRC)1cTq^k%goPq5 zb2uOlCjInwU`Ut|oMx)(*&jSaG?plOP*VNp+zG+h0 ze`DA0+WbtMJvh|T|))DNo_ zAt(#Va5`6=DoW*Zw?7wMu_RiIsBu)4#VSmAt2R8hP9s-tm5#bjG2r^9wM3yQ)8@Jc zZMjFkK)v=_=C0|i^r*&bncZv5Y0%jV^^K|%yN+gK%o5dU_&3AW;#3b-b;InTe*v;g zgr~B`bJ{W}{{9y2Ra>B}c(bkx$@tfJVo3v1-<->Tub~k0aA$1K;485uX{>&V%Hmfb zDf^wI=cH-@U3C{GA9);&gDy8jEz|w$OM$@v&F$_!X7fA zC8EcMbBQi9BU>SR44n5!uV|(dZ>cF$ndYC`T}wb?YYL0M36G{FIPR_0Gis1J$&~LW zqMr%B-_pIOyBgh>!1{z8%K%P^7bir&4=(wlu(5pD0HpP@z&+_<{xAUJ3GXj+le)Bs zuz%MyveYsNpIr;pM858zMU^0!z|zRJs^HRe=ICFAObsZ)s9Zs`D)!$az;PxnAz2j) zc!wEsItmYz@>u)WBx1-Oh8|%Ok16>dghq?JN9Hf#n7uRVEW5Ogt539aHnf9KH4)?` zVlm(hjvJ1F?_~OQ-J~MjnU{NZ=Z^JGB1u1^+(P_$CVQT2(Z!Eb#ETz57!3C77M1B-=2ytok{uBp~0B__=k~YDwAPpu_ZF@ltO(*wHbZ z<%s`w)Nl~~Hdx^yFxr7J5^&HBdFbHgiHCxY+7V#nE9;Bx^ATr`?$xHfBx`t?9qj!s zL2ezgx!y}kec3YJ2r6yFw$fP^wub$FUpr-QS1(Q2d)Ir)iY^lI8Q@qT~qSmk4MndG79wSoET^L{4wiF2Ol zpI=GS41cEdKH$Y)7Zd(){u$Aw5L4zUs^NIe5gvHtq*ctu!Mg%JfZiZ^D^*+`>Z)|VZ}xyKe}iJH+1ReS`9(w!aQ1NzrA_Y zFf^uztI4-Xy$(qpxuc$;Z&*>1^`s)tZN8(zWWNzz&xC7O=oQOj;mXDO4doVF`QWrE z&}qo~C@^JBk@2C+Hp({Lhb7L9srMw@3hj+sE_DAav`}ZiJn!M;J{c6xh2l9%H0Ywr zgyPwfn<&?xv6LVys%BAP_UQe z2RyTLRliz+r*bneLQ-8!2;L1K6G|EKqwDEIenim!UiJl1Oy&wH022-g<{v-FB|RZ- z+Xng;o17<><`CW<7%rbb8U0wMHNKYVKv4&^WmTY0uJFDL0BW$V^jA)A1%GZd04oIW zmEEsZsW0o(k~6&2*`CXggp~-|@B`uhV#+znEryI~1QOLSl*P2lj`-gU+V1+TZU-7t zfB)3bmIgMZ+5_XT;aIn~jj6IYX)A;wOr44{sl;i;h z!V^drUg&D_ySUk3*6c1>=9kTV?+@0O_q3GrgG>4Ef)V4bt=7O1##;SIY~|9^!wMrA zKK6$iYWg}_&C+!$UXp|e{VMG(yu(~=t|)d_T`ol8`om8SH7vTb%1;T@W;)|zcjSzh zPGmb7TFaPX)(1JeB*wn{u9y0HN(r~*1a7zX;)|Z`YfmWLrW8H^uSE;~-f{xqpL$lF zw&!~Ku)p3w7)N+%{x+|5ySHTpJ1bsW^F8|*Ewx@Y=VdGNho>h$Gge&2-yNKOV+zb% z1pI~H@w#8is{v0i@K_zJ`<(5+?5X>MN+7cX*O2{7M}oiFOCWAvTNU7>Wf;7@ESy#Y zsH;K5?qDq+KMhx*_it3c525!dsRkxgfs7vwO*EXfUp~oNjHgWEv{m`-ok2%9^KBJi zs4~zY3ko^914k?S>*&0ObQzELf@v$x6-^aY5*MzvW zqy#SqmKQ_V@px)0;5n-e%$uqwuoh znN`|<`}XC?J)V~2FUw)|AGTKttmgNXAf70ixkCSjJryzgsG0&vSV>HZxu~3xRN}N; zQoJ2=2KpG?@KGaL#inGRm)lWHZ0(M@7L{%98#{*H{G{dHApM599KFCe^2WZ0;O2(W z{2Sv<+u+`y|GZyXnC_dv$e+ZROWxTbyy^u!Ts3=|W~9zlp*_i)BS0BzJW;I9D4oy^ zGOcON?>?QmB){yks9-fw5&0Yy>E-R)p`bzsK&O|Kd++;VFzR zO)L*MJ%ee;XOKj<{;=)Pt8JYuS>95$9~b$H-G^qB&G(j7pNeC&J)rKpk%M;NY?CVl zY<0vC*g9nM1KVLTYt(I&9uEm@q@u3;q51InAQ8WQpu%gH7YTu2ITBSB6@4|uFoe8< zNxrGCvsB4AUCFzo&g-N+ex7q-Z08inN1&GZ<^(Q4Cnh{0y$?{B5s{pFoSNkt~(F+#54C3-)Bde8VfT;ZWpl0|JAJm|Anwy-98v|(tSVL_ps|CMt={)2%22SGq`Y?j!VMw9X$1r3N`*~k80Lp%^k z6d+~{2wBW~6g42Ckne~}P;?=$p)pgL_WuE%fe;m1%$WfFHcBqG&gnl-XP& zR#%aYna;GLrYx90EmWP3f&7lDug%)Bh_kL0n?{g96>L;+^$lQEY^j3v&>Y6`sbE2J znWyi1uYm?-R#Mgx!0u{;D>ZzfgSqK4n&>=jiVju_&?VIl1JIxd)od%*K*oF3bhpW+ zF2`*9T{i4<2*^KtCCWLMwpBYTIIzXNWXGPucgt77(ezqqQm;zbA>%kr)ksAxP%7(MEr&XEmWD!H=(o$uho^znF zvcZg%mb2y8T&YZ}yBPz~j zZDk2>N7=2waKsXCxA7O}hxJ|G5~Rf_=nT^G*d;aJ^{QrLf35ts&>lbXwu_L9smlb~rB1iv3MfPb1cLh6um6)tSAB#2%l0`y#KuVO zq&6D{Q_JsQacW$zJ_oS$09;#jZp_^^0aAYYwr-m8Bh$$(KBH1I;||0dwLfHx?w)QE zCNScEs4ANOr2o!}_9U5Q%t(EkW@pOw=eDj@tHQjww&-f@?ieZSY;ly$T_lL@(NaXJ zwY9Od66;+Pu6~%QrBs$77fhI+`G7NclKl`ltqthxX6B%3~X5NW-?%4mQ9R! zcrZy(1V25PcsR22X2;l3mtX>XK=*-)nD^KudqVn^aXa~7-1N{$wisZ7k5=Pw9f%SC@$g6yJ;N2 zCm#|d_i+!}G}f2IuB?z>z~%Pqm9wlKz954aUM*4NlcOjfnkDyn56U5}M0I)b>n>hF zNQj}vRZ|yVkp8wn9j|uLG^za0tjzZHvl|FID9=Ea0@+YKko;M1#3bN7CEgWfcLWtn*T zxWpnTOO!~qu}Q)d9;5%b2W6S4QtiO?e5lbXrdd~Mk}#`4m#dRimzL`$6qypxvCJ~3zRF)@D}CJQ)E+cDy~Tdshv1yeD-(~c ztQ9#PVwF7~VN+A28eU9*5)!~CB(DR9$)G*WLdhHJt87d7utBx-) z#)m~3XDqgvmw%~+mAE7Nc(BS^Wh8SB@y@cuhrLSxwC)VjA zL;hLDlIXd=?{#o86oha078%QozUW3sxcKl-78&s@vKKcjDsi+!i+hm#K0#rThc~F^ z8NDzS%+p5$iA7RjS;a1I*wp%Ih8K^Zg#1FuUodyl`k`Pl1kw~Q9{#TcL6|;P!p<{|x}CW-1o$sg=qGUfLDruL?@{X;x^DIm*H?QtuU&^@ zgnkA?LFv&k<=1X+PJMb`MA}0;9U-tdsX=gDq*URpg33%r!VFWOGJ{#j;}sT3bHhOn z#CS_Q zoJ=B>FekoaYgejrk1cd6PvV3&4A+!x%oNM_AN)Tm#d8@GSAXBuxl4mRSejlI>1w?<;_rwIY>$1ji961z)$ z*{DIsGs7|kd6RX&exnl=gp{=*#p*uEYm0>8&Fj%%zfS_bJpwgX2{b837wm)MOHf6Z z;z%oNUNrOO1;}`J9Rj{IF)QE0apYJ69pq4rpc^9(d32d`ONB&id^C#!Ccl7#$F}%% z^*V-$@T+=)+o6-KskOD99VhY8ZD{PAUfRX)Gn4Ob1{}>~5gI#2EV$~|qEX9yUnBbi zy9^;qJwF%8ZEzN%u`$a&g;RH2t3NkS%%-00GZUhu9TOgC+klIXVNYzk&I)ebzd%)~ z*Y%wTW>HU!I>lEhfGiFZBfdWC{6git^dq}mzG?mvMBRH96VLXCmUxqfah{71-9uiu zcM_q`WmYZ%c^Qx;Dd)=|-s(wWiK}i|MFKNkPH!c&suOlOo_UtGexkJDpz#8#omn1> zU6@EAULF$6fr##>MOXFif_fr1qsJX+E+U!;Ty4_xC_J=N!!^Zd@#d3{)`I9|d>6;C zVjw-2D2^$+pUhbvtg#O84~-!BXavg5Mcyy=Dz;2jvn_=2%);*JN8YP~-}z$?PTQvM z%4oOcV=#wK-5H)N3$9|%w*|3WyIrubKZtd@c{h>R?wrXL3Fk)>%awD3C4w^z9d`ZBPSf5B;Rmn4P+GZP7jBs&?SQ? z3BN_am(oiDD-ut4Uf|0r3QcokH)a<4OrQH^;Mao~`NZ_MMBpPemAt=I$e{5Um`^@B zurSEj->&8wIyhzd{VP71HfW z3!{7I2DQO;{sv$8Er?UOAlDjkN`j?`d`Jnt#<;!7cyPGOwWqh83L1LYHxK9~?^6fJ z4d{n4e6sG5TYHv==8Zb=T9@&*;+a=apP!p5SExm!I@{L_#*1|}H7l|s+)yJRUE1Ow zI2HQnY#LD4>#F?IU{F5^1M$({+^?F~jd5Mjn+>y$I>B9n@D~ZILZinCG^P4hx53N; zNGros(8me=spp->7kaX^tV4tA>jWx!W4tBNw)UyY6klezx(_Up^={E#>A@WY^?XX^ zosTT#JB91Z@}k!gKE}+{0UOhvlwp9ZU-D#-suQ`UcIxyx+Bopd5Hx3M=N#rF{117H$PX z8RnX#0u1887{R=Ms)nuiW1s^n(k;o_!~=7JXDOAh}(te@_3sONgUOt)0e$!dbUHz3l?roaeAb z5kfhl>W@6h&m&_W*G1_Xj61}Qi4M%mQ;6XxD`u-2Cn&J|DS05#PtU5C0D)v+-H-xf2>16G)O_R&kRa4KG(~G8NL*$;W>`j9Fv2aDYEj zeH|a~kFSiqb$j}~oxR6gUUOCp`H3JMIgeh10^J=Sb-OeC3QN1r8AEeFf5mNvN#z8G z+6jcIu}0^t0%-&h|G*!4c5F1I!@Nu6aS0aM4qp0f@TeKXB&{OTkwO|i(klA0PNlTa zKHN+XzA(RRVZ6RFm<_taCtF5d9%+_7*P}HgCThYg1ErCe;>$QLLnjvoJU=84@LG?z z80-bM>RPW6MP)_21P#rPu2`hqE{gL!HS^b=P#M{@k~u-`F}EZ)+)l?-vZs#@mf0A(FGAsov3GNddd zBU>9Rm_d4k;}hF)G_G<_sYy^Fw5)}X!kju5F8rcOVyZ&V&If%-Mv2Nzl?Lga(ene?px9@jj95%9I1rv!T7luiTdlA=15PES?zPR#K6j#%JO<93~r=`Zo^)j&P8QcbS@1@Egw;9UAe@ zG=dghCz+CWvV6^wNS&_IjHa3mdf=-?=QgSTDeU~HP}-#i>>kK$n^G#Ci#0r?h z4eN>77wPWMkSD)n>)31u#gme#9gH!#59_?HUHZ8m#6#cXqyVx>x%n^g)?>AuLmOpW zmE979lR89Q7)`zF=yh?e_?oQ#7;c*tadEt4S+fUXAj<%SuMPPZmvSLTbzw&0klFwmFv(^+q}|EP6wrJz(f< z^#vV=+J9lc>7?Dz#B&p<)+V_gycUilfkx))jM{r38`7tj%nj>|*_ZRqtuwmvH6q_z z!#%Jg@dyOrSf|O=7|c+z?^-PcM9+0?U*u8T2PT$(`iMTb6DqtG%*hRFnNB0NAx6}& zPHb`SD)KQq-%-;^RzNJTHji-i0}bq%rAjONF!P?{0k1v5UyiCh{s zwFQ2cst8UnifaN@9Jij|UO;N04xpxfgLy>8hNLg9Dx4k0OQvFKF!z!_2I}p_*7MB7 zF1^t#_bY8-FS`eX;L?jkotsN2udoc^-DVZ|`MD11c%~GB=QanrR`Mb#Rf|WxiJ=v@ z4^^w;uFGJO*Oo-TFS0TA{JGMrN3qVQHP?PbODzC~qSYCl0!q>Y{F2en_@Mf@Zb-paZVeA`$U!IFQKh!XN96fVGhQ(3>+EW`XwUf1l&RmpjkHsXA%7nH$DI!WX7UchHiM2 z(Hyaf0Z@}2k6{@_kqyeRDFRT7qCMRAQbgX@GC^&MF*{p4Oe6Zc#)j2svY?c4ZyJt> z-ap!~9-`jfQNNoRvx9UZYjj~C&G2qg!^P|=UBF>{Yx~PG%q70wy0JCVWwg&o4KA_q z)!2<4!rQCRRxnQVTCbG=%V0$;jcWl*4thJ(N(e7We4AjJZ54O~{~GgUzu~Kpi3-W` zkfO25B0OBUH$5In1?gj`5?0e&C&gYKOh>Ir1K3B^NM21?#+k+PqcK4>6@_7TgZyc@ zM-Fl*B_Es_T$mel^2%iG;cH zWng;g)$MReEOg^>0ehL&8qmkzE@gn(2D?KauipIjQ89&>c8pr*yYZw~Ri6NiN5C!a zl3@!>OK_XAE37U}=_XsoaXd8Y*d0`L=#b!$2UqV-vGh=gsBLdR$3=uZ=~WGvIJ6b| zj5I{kNN}zqRLhBp45#$^r00rfMnxHcqEK7H#EuLX$_n->9uqS25;r^& zRed+2$7EvPFey9W1A{)XpPZD%h3WhsOtKmK?zHqTYdxb)b;CtYHP#pgKbxua&5h`m~ngX7MvY>KCji=ftV zi5heS<)l|JL7`aIt*NL?ZFJ3f+`LQHZGs|eWhE=eT2$&KYM3K&X>@!P!X3)%$B5G7 za*In`fQEXQp7bgmIXNEmQ$(&~4LZ>CQ65(!Z#3|~mZwq~ zRM&^jR^o>Exdc})yF3z=Do50}(1uAY|KXvtUT>;QJ)CQiO`GHq!lRWXOE zn>|(a*&km2?edpbiU#NS>h;@_;R`pp|9b!G>bm#p?ORGfL+M?=>;3xiFK^$xE`|Nd lvwryPZEun66MDwEw>WHebXd8gD`5=t{{d#gglbm?0|4{_$+G|e literal 0 HcmV?d00001 diff --git a/integrations/migration-test/gitea-v1.7.0.sqlite3.sql.gz b/integrations/migration-test/gitea-v1.7.0.sqlite3.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..3155249b07eb08684d2513fa5348e500615fd56d GIT binary patch literal 8165 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.+)\\." + regexp.QuoteMeta(models.DbCfg.Type) + "\\.sql.gz") + if err != nil { + return nil, err + } + + filenames, err := migrationsDir.Readdirnames(-1) + if err != nil { + return nil, err + } + versions := []string{} + for _, filename := range filenames { + if versionRE.MatchString(filename) { + substrings := versionRE.FindStringSubmatch(filename) + versions = append(versions, substrings[1]) + } + } + sort.Strings(versions) + return versions, nil +} + +func readSQLFromFile(version string) (string, error) { + filename := fmt.Sprintf("integrations/migration-test/gitea-v%s.%s.sql.gz", version, models.DbCfg.Type) + + if _, err := os.Stat(filename); os.IsNotExist(err) { + return "", nil + } + + file, err := os.Open(filename) + if err != nil { + return "", err + } + defer file.Close() + + gr, err := gzip.NewReader(file) + if err != nil { + return "", err + } + defer gr.Close() + + bytes, err := ioutil.ReadAll(gr) + if err != nil { + return "", err + } + + return string(bytes), nil +} + +func restoreOldDB(t *testing.T, version string) bool { + data, err := readSQLFromFile(version) + assert.NoError(t, err) + if len(data) == 0 { + log.Printf("No db found to restore for %s version: %s\n", models.DbCfg.Type, version) + return false + } + + switch { + case setting.UseSQLite3: + os.Remove(models.DbCfg.Path) + err := os.MkdirAll(path.Dir(models.DbCfg.Path), os.ModePerm) + assert.NoError(t, err) + + db, err := sql.Open("sqlite3", fmt.Sprintf("file:%s?cache=shared&mode=rwc&_busy_timeout=%d", models.DbCfg.Path, models.DbCfg.Timeout)) + assert.NoError(t, err) + defer db.Close() + + _, err = db.Exec(data) + assert.NoError(t, err) + db.Close() + + case setting.UseMySQL: + db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/", + models.DbCfg.User, models.DbCfg.Passwd, models.DbCfg.Host)) + assert.NoError(t, err) + defer db.Close() + + _, err = db.Exec(fmt.Sprintf("DROP DATABASE IF EXISTS %s", models.DbCfg.Name)) + assert.NoError(t, err) + + _, err = db.Exec(fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s", models.DbCfg.Name)) + assert.NoError(t, err) + + db, err = sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/%s?multiStatements=true", + models.DbCfg.User, models.DbCfg.Passwd, models.DbCfg.Host, models.DbCfg.Name)) + assert.NoError(t, err) + defer db.Close() + + _, err = db.Exec(data) + assert.NoError(t, err) + db.Close() + + case setting.UsePostgreSQL: + db, err := sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/?sslmode=%s", + models.DbCfg.User, models.DbCfg.Passwd, models.DbCfg.Host, models.DbCfg.SSLMode)) + assert.NoError(t, err) + defer db.Close() + + _, err = db.Exec(fmt.Sprintf("DROP DATABASE IF EXISTS %s", models.DbCfg.Name)) + assert.NoError(t, err) + + _, err = db.Exec(fmt.Sprintf("CREATE DATABASE %s", models.DbCfg.Name)) + assert.NoError(t, err) + db.Close() + + db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=%s", + models.DbCfg.User, models.DbCfg.Passwd, models.DbCfg.Host, models.DbCfg.Name, models.DbCfg.SSLMode)) + assert.NoError(t, err) + defer db.Close() + + _, err = db.Exec(data) + assert.NoError(t, err) + db.Close() + + case setting.UseMSSQL: + host, port := models.ParseMSSQLHostPort(models.DbCfg.Host) + db, err := sql.Open("mssql", fmt.Sprintf("server=%s; port=%s; database=%s; user id=%s; password=%s;", + host, port, "master", models.DbCfg.User, models.DbCfg.Passwd)) + assert.NoError(t, err) + defer db.Close() + + _, err = db.Exec("DROP DATABASE IF EXISTS gitea") + assert.NoError(t, err) + + _, err = db.Exec("CREATE DATABASE gitea") + assert.NoError(t, err) + + _, err = db.Exec(data) + assert.NoError(t, err) + db.Close() + } + return true +} + +func wrappedMigrate(x *xorm.Engine) error { + currentEngine = x + return migrations.Migrate(x) +} + +func doMigrationTest(t *testing.T, version string) { + log.Printf("Performing migration test for %s version: %s", models.DbCfg.Type, version) + if !restoreOldDB(t, version) { + return + } + + setting.NewXORMLogService(false) + err := models.SetEngine() + assert.NoError(t, err) + + err = models.NewEngine(wrappedMigrate) + assert.NoError(t, err) + currentEngine.Close() +} + +func TestMigrations(t *testing.T) { + initMigrationTest() + + dialect := models.DbCfg.Type + versions, err := availableVersions() + assert.NoError(t, err) + + if len(versions) == 0 { + log.Printf("No old database versions available to migration test for %s\n", dialect) + return + } + + log.Printf("Preparing to test %d migrations for %s\n", len(versions), dialect) + for _, version := range versions { + doMigrationTest(t, version) + } +}