From d61383c3cbeebbc88695c71b158de85860160b44 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Mon, 22 Aug 2022 13:10:35 +0200 Subject: [PATCH 001/263] change startup wmclass --- rsrc/linux/com.github.Murmele.Gittyup.desktop | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rsrc/linux/com.github.Murmele.Gittyup.desktop b/rsrc/linux/com.github.Murmele.Gittyup.desktop index bf2e3e71..ef945525 100644 --- a/rsrc/linux/com.github.Murmele.Gittyup.desktop +++ b/rsrc/linux/com.github.Murmele.Gittyup.desktop @@ -3,10 +3,10 @@ Encoding=UTF-8 Name=Gittyup Comment=Graphical Git client for Windows, Linux and macOS Exec=Gittyup -StartupWMClass=gittyup +StartupWMClass=com.github.Murmele.Gittyup Icon=gittyup Terminal=false Type=Application Categories=Development; X-Desktop-File-Install-Version=0.1 -Name[de_DE]=com.github.Murmele.Gittyup.desktop +Name[de_DE]=Gittyup From fad1f4525261dd6b04dacd4ae6d3a3496697ee42 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Thu, 29 Dec 2022 16:40:40 +0100 Subject: [PATCH 002/263] add test --- test/TreeView.cpp | 39 ++++++++++++++++++ test/testRepos/DirtySubmoduleUnstagedTree.zip | Bin 0 -> 91669 bytes 2 files changed, 39 insertions(+) create mode 100644 test/testRepos/DirtySubmoduleUnstagedTree.zip diff --git a/test/TreeView.cpp b/test/TreeView.cpp index 68a8ea06..3492db73 100644 --- a/test/TreeView.cpp +++ b/test/TreeView.cpp @@ -29,6 +29,7 @@ private slots: void restoreStagedFileAfterCommit(); void discardFiles(); void fileMergeCrash(); + void dirtySubmoduleAndStagedSubmodule(); private: }; @@ -261,6 +262,44 @@ void TestTreeView::fileMergeCrash() { // should not crash } +void TestTreeView::dirtySubmoduleAndStagedSubmodule() { + INIT_REPO("DirtySubmoduleUnstagedTree.zip", false); + + auto doubleTree = repoView->findChild(); + QVERIFY(doubleTree); + doubleTree->fileCountExpansionThreshold = 5; + auto stagedTree = doubleTree->findChild("Staged"); + QVERIFY(stagedTree); + auto unstagedTree = doubleTree->findChild("Unstaged"); + QVERIFY(unstagedTree); + + { + QAbstractItemModel *stagedModel = stagedTree->model(); + QCOMPARE(stagedModel->rowCount(), 1); + QModelIndex index = stagedModel->index(0, 0); // submodules folder + QVERIFY(index.isValid()); + QCOMPARE(index.data(), "submodules"); + + QCOMPARE(stagedModel->rowCount(index), 1); + index = stagedModel->index(0, 0, index); // submodule1 + QVERIFY(index.isValid()); + QCOMPARE(index.data(), "submodule1"); + } + + { + QAbstractItemModel *unstagedModel = unstagedTree->model(); + QCOMPARE(unstagedModel->rowCount(), 1); + QModelIndex index = unstagedModel->index(0, 0); // submodules folder + QVERIFY(index.isValid()); + QCOMPARE(index.data(), "submodules"); + + QCOMPARE(unstagedModel->rowCount(index), 1); + index = unstagedModel->index(0, 0, index); // submodule2 + QVERIFY(index.isValid()); + QCOMPARE(index.data(), "submodule2"); + } +} + TEST_MAIN(TestTreeView) #include "TreeView.moc" diff --git a/test/testRepos/DirtySubmoduleUnstagedTree.zip b/test/testRepos/DirtySubmoduleUnstagedTree.zip new file mode 100644 index 0000000000000000000000000000000000000000..3fbb821bfa004d1d4be70b4df72612d4e3266ae8 GIT binary patch literal 91669 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

mBAF&gjK(NW!l1FL#)Kn5O}NNR^m`LHvG)4c&LX zD*{8OQbGa+(S1MB)Go^Q!i8@lg?@zDEflCJJM z(Z!hR%P`EI( z>}H-R(1>|fZn+ILPnipiXaG=oVM6p@U-bwqo?%q~mGd>sVP)2op;MJj-X5JfIdbtB zkMtU?cgr^(@pYbm<9%|;+-)cJEZ%UeaO!~)!EN4$ZX;YS)R98{*TS#0Y*gxiO?g%B`g_Pc=N0cho%BRCHThA@foo4ns>37zCnmOgMg3Qzzc5b% z=rvcV^_3xKVXCjkch#d{o(W(oacl?;qjUgtXQmRzB%uD`F3wcq7-f!0-VpX8^CXkr z(FqdAB&(GFq48c!5Cwoiu(8#S3 zj?bD*9I_z$t$q6XI;pbM;d0@_jdhMB1f)OoQH}jB|Fyqg$5M|=o`pN|<>|BQq)J-^N2*tlp~jf}oQ4 zwEe!;_a`{n6bNk!ejTsw>RtN#&2E9m4<(gk6|`Ud!0GE(3rM`;SZc{VK)Qxroir{= z{9@Q845e|2E~!)WB_SRv`qtGc`tIjQ+BqyO(qNu(?lXan!OVH5~3e@#>!^7&>^(`D+#@syBON zxp_&E-Ok725Ju=O$74VM4MDt?q*UtfpVnwfJaI*l27 z`Do&sPHVDu?YFvPE8$-FG^u`xcJ z{`6w%(Z)ZIj!A6g+C^o5)-K6@ed3;-7gi+Q+}C?T-!Dxf;$QjRTs`Yrc*^s4PYR;0 z@clb|8Pat|PVV4^`zO4go16On=z|06bEJ3MZ4EBlb#ly{@q;dn9w}TjKgK2LFRs-o z$KV;?=ap&5h$ap9jzPi#vn4P1CK z!%~v`6GAe`Xk;ZG-&ed)}c=Qsh$J;sf`+h!`*}`o=pUE?CslK-wS-xpHwR_ks#|T%=ki4-ZCi);lC=Cj=b_-TqLK5jfFUS(HOF8(=r*OoZZS(n5*k;#!;wru(C zaLcoYT}FotTu}8v+U&zej~1tOY5TNAZLid;9=@V<#ZHG#5%=!5Ja}&V-pOBYb$QZ7 z+9lsUx4{Xg)dMa&$!|v<7@e^CWOP4n+NLqT4~X^4s(K~x&O>#rKljJ>@MwQ$RM;$w z53L8j*^#g>`|IzqEuzQo+hHeOUhFD;H?L^Wnx@&-f4)53%J0J1!~8hG+V75qCGTob zb3u94;Cfj;&1OvWA2a-Y&n|C@ICTdE^r_b((ejl1N#_wV;j($%YFd2>O|iDgEpC$^ zaA@_?kqfHqUF4N$^Y-h+wLYO`SuM7N{$c&y^R?5P%(HkZYCNF4{Q%!;{mCeU~TI*nfKcA5pGw z1^4)234b1F5^R>X!Qcm6D2Bgxq}pJ8=?+PYjoabUvV**7o3uupU|@Sim9XY74GdDw zGUYn|AN!P;)@w)J`ao<92Wk%$fVqPg;D%4a?4|F|j>r@a{l>%;j@Z!s$kUpe1SUy% zm?(T2GzU8rHP;N7>qNOph`C|CCA|jrcJWteIu+W(Zi3z6BLl8Eb=dFZT+_?hrB*-Z z-=A6XPJlsEqvqQe`<}w31H_<@8t74gJn$zb!lMpSpsVgjo+fB&fWf1wAR+Kc0M`GS zlhj&6cCBN!|a)N*tbI` zya930H{g?iPfrQzgO#L&ucw40okdPb11%-~3qm&GDS=LfQc_8$;=AIV3UY$o1a7E0 zm4#*FDsW|5v3RK^aC+=gOW;o=bFjvhAaBROZEz@S4M8GcXB|jPv7Q9}N+?JU0|s`* zt44z#NescsUb_a+9wJ53S3~;i8#jdDkG6dv=OPW_RZ4!TU00nm8Ur#iPwp1-yOu?*vE0uyt%y(yZ z&20TEFb_wk6VlRn)g!7V(c=LqST@vH)Rokd+BHmbjA-gpu!*(yuab=VAAuV|Reg7) zwQALL$~FzF=+gkPY;Z}fW&i{fQ16Tb@uC*hhU>o}CCd5J0HSUr;ywq%7HWZa#{pSY zhbjiVz$>66Mps;)l(wUT!k7dG4Jh^M)&7(M z$bhO3@Pz=o)T(6;bf6Gb9%w+gc6NYeEx-i)G#($qE;!PGpbul{r|>j@ygACZiU7eJ ze)Elw8s5%yfK>d(n+AxS>NVd!1>+TdNs9N4$>0rzV$>k{a+CrT=mX>{h&v+FQ1q!6 ziYAGPGj#QgTKPUg_?!gePb0*40+G;NjuasaP*)oyx*sU>8v zWhpd4q#7o-uuCl&Ag0)E{YOoe18xb(^?(FR-?HW_&eUW-_kJ6lWAWmVcrG1Nqid`e*7USXc{o;3+|x^ z-FB+cov70d49odkg+eUykjh13u|nt}^xz77cyc#)u^V5`6N-FL&A1y1R+^LZQ2l&_f_|bC>FJ9T-F--3ECekA?YNsPm!}YyE{ZBdt%eK*M|AmT&b0 zAOHyjUix*VWthho$b@3CTqzaF6heVi=)(m}NJUDyk4&!M`Y2^$B~Pr29vH+*^U|Rk zb$H@$;|McKVUFl180s|+aN=Eoml%46rCh$qohy~fg>r#dAma<9?g}MWDCSAs+(dGr zW=zRE*yAMCUaF7uA; zdO!dqsZ!7h94;Yk2@i6{F14hjasYH#zC~Jpu&RPs;L`{hFw(*)C?tFtCtP4+O#IAT%zn)BCA?ZnM9)wR5h}^|(@-qMo>_A^V zqW!&?B7*BB^mtzyu+Wodd*Fzw-G?bG-JUc>Jg&gEcaIJ#JPo+P&b!sqbc8V;!s)kD zfp=p!N$0^4w1iRD{3$VRl zYDT~!pW$JL&r4GnbkH~v6v~oXvYas}{koh2AS^hcS?hiXOYy22{g|?(0fgqXDc~|h z6dIktJ7IsOxR8uD1wV! zR{4!*2V=!7Jq>thmLBhrTV(9OBhTT}fQshu@x47^3Oi7ZWcX=dL^J&GGdS#0tNMdX z3@aWvOX+MZ|4#!bn*Se;16mB0GHd}Q?heoZi0%&H1NzXJ>;cpVb#(85226DC03RhS z0@;IEac6-BM095X?~~lwEI}mMcc1{&(8345LOip8DNy~c1bp3qph(`zARr#$RT_PL zRZBcWSpkIXSxo=-Rt=vms+xsU0~=p-4yU)3;$l~ z9!iJ`6M4h%#j83lW|g>a_~_&WAQs{v?Std+HDioea#WLgq%cAuCgL!_JKQW4Q{FI4 z`fV@@5e@6m{~Qbx`hjh3Oyms$hL@eHlwDwzlzgM%n}TkiJNSYM226WL+Ys0k*Ojbt zOs^@J5)XxzK*Z$UG6|&DnXSbzZ=sbTfxw8VWc>X17i+*oB5jHtOKq9RDnnTOT8EFf z2N3PRJp&o>cB+6#w)g_Dz`mYPz!kd-e8fDk!Kn~P5sn8(UMvzVW*ScK$&v5Rub+Y{GKq3Y2_-+(Ri) z@_gj(GNn?)<%7LtF;~e|c(}Q_`^bF0?SN4LZ<^EVYuMsc=0=;-!lmQi9|0JDslcgs zG>fp@#eA@v$n{Xjq(1IGe3^%vOb)ggWn6_jkIR?I6iTs3sMJki7_UYg0&+?WO8CY2 zg`b#$*MIg#AxdH%8uw5X0=Gy)EVP125GcIjRefSu0i;`eK!zYNl3@c46IsHqcXzL4 z1r+|h1*3~b-$Bs>>{3e{W7$K+#-i67hc5YVKv&6?@0Q**dILY_Tm?7!(j2cE6vsY= zm0bQ3JrK$VVV7F60(@h^Z1F%8@X^E&%m?Aqh#wjnvgqqgysGhfwz1*fRw<0$Muhi! z{Hw#lpPAyrX&ktNh=SclID`F0TpvI+AM8>~EH|))2~k9VF%BXliFH_S?ufGL0;*&= z7T`uxhViNhmXV>KW77a=>Dhl79J63;s*xW856u;?;%;P@I!xdJg2Qej{fem zQUK>Bpbw47@u~@%*afE(dccsurwMc+nLmX$2k1ZmCZPMcnPqgCKm!eQj~|7U?g6}o zg4aDfcL`hAMW@qZpnwkg7Eyl-UvN{jjTyRcpR_{VEm-(tP=8Bb!UwVZmfK7?72v8^ ziZFdUQ!M&Y1PBDXNgNB7Lm96CnzDl_AYug&R$oa{Bn3w!gyq$;O}60*AkUplVIdVj zG!PlD0NS>TDI#J85Di$yD}Xq=nZnX7xGCa+dS1pWfc7%RL#O~EQA9$^_=!b-_=1~H zdzi9>FSwyV6^u(nQ1~~vg?pKT(x;Os0Kx{H@q(Ljb^xITHxzIgA_`w{(`!FdqL6|c z3WzYKj2GNoWC@Ysf*TqTjThWZ0{IRm?;Y4Vc>29rV!;g!n8pikzE5BWCV9aP4XDNo zZjOK~5*v(a>lyU)^aRO5wg!!{f*Tq@jThX!yuuz(V!;g!fW`}M zysohaP#@IMf*TqzjThW}y3QWViUl_`AQ~^Yak$A6M3RCV3P24leDEv8-|jL6s!v>3 z5)giKOni?OKuEz21z6a$haOUhFSt3wCM;bFlL9nDU5MX+2+L)KF@3>JB~jt)A8O^X zf(p0yP)T5DMp`Y2VHX&>?LYw^=4r+YZra>ul{n�|ktRTn?W#f65pmR<5AgX{aP7 zyu(d-z?3%(lfK}F0x+yYjThV$vkQz~l?wd7sd9`p#dyI@`)90jOs^?e!3~8@G33E` zZyEK1t(MTrkQf4npOEtz1JiH1Q(y|~bM#~$G_e)0lD%Zglm-x;9H1eV@N?dZSFC_y zymmo1Db$j>YW7gEG4bIy-8cUY=qfq;q27kybmzThpF)Vir)Hmz_t=wW2B@tcX z#H&8Cj*ae$6+Mvyj%NJw!J&{TceqV=iurru79M`n{TJ3SA)D@S?+l_dv7raqLXVUg z%&~=}X|8ycsE94Lw8*eMZ3?u(*#UyX9lL@9H>8+daJoHh8t8Bbtl-dHe#bI8Y)_j8 zI^2mLICP=!*+r+@)24yWc&*2(kL;pDYdt6cgwAj1$Pw+R;BeFumlD$eadE-{j701< zvYQS6c0)&y=&i=mu!=+i(gR8KTl-L*2R#>rhjSRtC+aQ6k98U%IOu^Le4P0>+U9km znTCDz^bNfI`Jd@FUw3d54g2WP6L|YBrF8AfX;^=#DHhuQDw~Q7@(MNfeaXT mhVUwtU;yt7*x3*8Sz)D94SW{J;T!<}+?4{2{Hhk Date: Thu, 29 Dec 2022 16:59:31 +0100 Subject: [PATCH 003/263] add test for conflicted files --- test/TreeView.cpp | 39 ++++++++++++++++++++- test/testRepos/ConflictedAndStagedFile.zip | Bin 0 -> 42801 bytes 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 test/testRepos/ConflictedAndStagedFile.zip diff --git a/test/TreeView.cpp b/test/TreeView.cpp index 3492db73..246e8efb 100644 --- a/test/TreeView.cpp +++ b/test/TreeView.cpp @@ -30,6 +30,7 @@ private slots: void discardFiles(); void fileMergeCrash(); void dirtySubmoduleAndStagedSubmodule(); + void conflictedAndStagedFile(); private: }; @@ -267,7 +268,6 @@ void TestTreeView::dirtySubmoduleAndStagedSubmodule() { auto doubleTree = repoView->findChild(); QVERIFY(doubleTree); - doubleTree->fileCountExpansionThreshold = 5; auto stagedTree = doubleTree->findChild("Staged"); QVERIFY(stagedTree); auto unstagedTree = doubleTree->findChild("Unstaged"); @@ -300,6 +300,43 @@ void TestTreeView::dirtySubmoduleAndStagedSubmodule() { } } +void TestTreeView::conflictedAndStagedFile() { + INIT_REPO("ConflictedAndStagedFile.zip", false); + + auto doubleTree = repoView->findChild(); + QVERIFY(doubleTree); + auto stagedTree = doubleTree->findChild("Staged"); + QVERIFY(stagedTree); + auto unstagedTree = doubleTree->findChild("Unstaged"); + QVERIFY(unstagedTree); + + { + QAbstractItemModel *stagedModel = stagedTree->model(); + QCOMPARE(stagedModel->rowCount(), 1); + QModelIndex index = stagedModel->index(0, 0); // "folder" folder + QVERIFY(index.isValid()); + QCOMPARE(index.data(), "folder"); + + QCOMPARE(stagedModel->rowCount(index), 1); + index = stagedModel->index(0, 0, index); + QVERIFY(index.isValid()); + QCOMPARE(index.data(), "NotConflictedFile.txt"); + } + + { + QAbstractItemModel *unstagedModel = unstagedTree->model(); + QCOMPARE(unstagedModel->rowCount(), 1); + QModelIndex index = unstagedModel->index(0, 0); // "folder" folder + QVERIFY(index.isValid()); + QCOMPARE(index.data(), "folder"); + + QCOMPARE(unstagedModel->rowCount(index), 1); + index = unstagedModel->index(0, 0, index); + QVERIFY(index.isValid()); + QCOMPARE(index.data(), "conflictedFile.txt"); + } +} + TEST_MAIN(TestTreeView) #include "TreeView.moc" diff --git a/test/testRepos/ConflictedAndStagedFile.zip b/test/testRepos/ConflictedAndStagedFile.zip new file mode 100644 index 0000000000000000000000000000000000000000..e4d748c3720cf0f8e94916eb6742290aba0ae8e8 GIT binary patch literal 42801 zcmb?^2RN1e|NpU-9ff2>WIM}oj+vDevXhK6k)55E%&cUUM0O%O*?VPgDG8BTXb~Cz z`_$97zCC@P^!$Haecb0<_jTRx*XQ+~pLL&;T4dxbAmYCRfr&<6KK%8E4a5Udc5)=x z+hX1DI7LUCfg9Qyk2`K_kC!kqqytesf0T>u2O9C}?nMJ4A)g}yfxi4X`Jboe{q$7M ze|W06wXNINM}I2K#SR0HC0>8|Xlf8Oi1~*{YXG1HfA?q{-W7Y!*4fS0$?;1Eh!VcF zpQO-qb!c^JYwHPWianO-7HyNrerT+&-6pCh*!Eb|SiPfD!|0^0hM10cyQpAWXODr2 zV4DeO9@Ku1*S3F(6m(LHidrg^idzAIMTGX1kDo!G0q*eq4m1`}fvxrL@JhDV(_P`A zrRas7n4}h;IMSjVYpJX+YFpp*rrEFcX4S`&jR*WvvS%|_3r?qaG|DbYiVYkhvsUc$ zPa$wZUgNlLH3g~Y?t?hzUpu(zB=H5mB&c2&KuARS9lzoaq%#0_M1F@~Syx+I!_ZPy zMZ-|rKhu@ z-yzXf)mKxsR9970`GR5@K=G~pgo2`8g9!wtCNH==R6rARpHqBi-|gN9?}t9B=%V8n zllG*jc_7g4ZRK}~Iu z;U0DE6GFoh8e-yqab!PsmW36NLzML$#gE>{MhXJ){tkt$BM$HNg&v~oeQQ6#aD7XA zj$mbFMT&`=E*Tvc8KN|9u%QIsdfZsoTjuZUyG}t4v$@!dbR98)v~2c8O(|U!wWD$B zI=70B)adBZ&=Bii>yU8i?$PRKJ0Y&2?E<*dkjQ;OG!N+54BxT*6P`1Z3O#FL*Mu%z zK3u&1mZ>dvgEZ>o`)Ccwp`kOrez2?On{_j)kkGDU({IuAEsYy@_h(tp89m5;{uuNOdxrA1!>71$lO6;wsVSuz9W=p6!TJ&M;I;<1-C8tfjo)#8wO;-(H(y~A5QxbCcg_54 zy#l|}jIO?h+AfV(kp#p;O;%TH>zo>foSU<(mpO3Y!BcZvLob0Pfir9VZ`V%*X-<(5 zjdyuqqT}zz`y)6Cz@T>NTH3lQs=srsj*chVT4VqbRMZLNfk&u-rxPXonix6Y&TonN z>ek<4%QufEUVk#%_u68bx<=~4nw?tRCr|chi;8QA>Ce7A_m>?CJ$m`_#8>Oo4cwcN zS%#lUUx+n~aVGhK7Nk{UFAd-!V)}{}`0!sji1_`tXffx|j#wMK>(@N@E&C9!KcW5K zGIrs_1gBj-|L2sn0`x)Xccy6T2s|I}g|&Cb;lJqnAG#qHuDG`W%%ZZEgh>v~9`TSU z+jqvB%!O(6E+T6B=5)|VxV2R5QebOU{N6OCkr5lLP^#@IfxULgx=sVf!s%a&JJ`Cn z*exNda-5}V*q}m+Ec?lyKK8H3P9aUPo_(xkul2r#WUuRl)JM`*z1O5uE^_-5lb@dM zZn^&W&g(0zv8#_|d7`ekn~qpOM40x912!?^$pL?-^X4t|@qZJeC!cB|x{m2d?pqu{?&!dC%UCkF>xH!%lSYjIb! zgR}i_^>H!E(rEz9(tI~T*F{~V-&i~CUGPIqKi(0V=u>Md^V0%S*GihY?StOlyWp9} znY~}&?LO5fYunv&tz5N_>GkoCB3k;`Ztne{{m@)FtE48VEBy7LJI5^yE-{!epBsDB zpVGJgbdj;)!|ArtRNJh&Ntu@+xUDo!fAl42!ocp*ov znT*%LVZQ`lQk79n1BAkttT1btS(U_>!&FFE-#kvJ^||_fwwkxExe(71=!K&a71-+( zSt2R+SmvwWVCo_bx)ixU>)vp3;~`_QPH`@RTxWoe#2HyX)AcbSv~6&F)dan=eb&d* zyK>8UYkukM`=zM^YNwWT_wP%1<2mr^LUn@JZ1ighj{HJ1yg3wmrdfpNVnOg4^YPZ; zqd9D?e1iF??370qK}9`h7v+*H?8Fb%o(xT0J{bQw^iopXt6)ykAY=;#Hd7Jubf@^_ zJ2m9N`m<9bYWdS-{hQOlk+{!2Y!~D6H>E_POh?{Z!}sRoS=Kbn?D&K=d^T6DO&up% z_WY-I#x)=j5zXs+y#29?egWJ??#}Sg&d&DU&S*ER%^w(_QKY#J8HCn<+;wkso-kwj z{(N^ES~2|$>+A+4>(=tLn=FRiu7uSH`Snt zB^y$CxnP_`#$Ud5j$MiCFz*dcrjaFZ{fr>FnI`f;N3~zd47G8vz-ey6`vsN{lQZNu z?-j%vDlW;%sH5T~95_X`J(##AaQAq9BJ8aAkXefsg~Bnuk*2|geY58VJSd*1 z=+ZGMy_kAr>LL;<71Y&KA5{L}R@B&IgAs3Oy`qi=*asqTe?O_GzC#vAr${7Umr0njL<9rV9j6R1K`{U>kVA!WW3TC|ESo6{u z>L2-7{Eb<>TcExs%s?|J-HH7w<}P->**Sjpy^XDFM^LuO@rYIx*}~`)Ly@drwwi`p1^22%A%3sO zR75H`xI!i@MjFzNuuIQmTcObV$pkcxF@KXexSrjn&}OzJ<>b1eIPf znczf;*hjaTUv#jCM_rg_&G3nEBtKY9w|(SRGSAs+yl=1(VSh7cYe9=|r0vs467s>| z#jq2vOFIJ)2Vzt(`GcH!bm0{%xhguLX%DkXOY*RxQ`CD!7jqA7ogw$TAN6$AYHxm_ zJ2r7$e)7aL3OsWFQ_o~2&07`uFqX`|XtOV}fqy33A+nX~#9+VlRN^%U<~z6$E`t|k z(>Ax2_&(>ENCqBbOKVHln_n5-v@a6^kGi#Ong-E6d73#Y+aV}=DUGgwUH4&VEvBOxI!P~6=7;lf+ncdzW9 z%be!cmZ-H%?5|Jg{_wu7uWaqnfX2bJt(}77=A_JTqsB@3bKk5z z5sl1jt*FNJ24$@&sZO7bmHsqid=j>R5@S+TW2l>J<7ICai=bSRs&n*>QBin)Pxs`( zE<8Epx&8hluY@w*nHV@yukTf%Pe=G}U7TCzWe5UuH7=UJocuJREpy191}^LV`GkZ* zm=BfX1m_cHonX+NL~}6#?w*?NiE9fdNRNEbJ}0LT%rM?V^%gDRZG6QOtf0A2V>aTl zXI5ehCRTjgf;3A5#vFA+OsF64qY1UW^sr+g&#aqQ@~&LX2bsOg^vkOXon!A}%2ux` z(>xiRbhfTCKhNQI=}YPRh8Y2#18Q=jU;WzSc$s&dhXIchJBP=hUGclj!-=QtoJNly z*b?0iF;mUWc);~Yo@KNwVsb<=;f*6HF8n}fQ=!`QNsRWnGFYSF+1EQST&)9n#YE;Y z6pv@7YL?5d_eDDqLLc0TH~MhoywYs;vpM_nB6ye@TtRm8Qs?Czot>)vb(`~6<>@eu zm_5y@N2oUiwX_cOV~togWrwn@?(=)u6dqm|D!x$OE!vr>9~-TZZY(-FOsFWyg9sk* z7H3vln$8sN8M@7Hs1&Mn`hFLzRT7!n*3>r`TX;I8VT|oQ%+^MX*6U;L2LbJP^b4@) zL&2&27YOAqM*RadqeX=)Q$A|OZ9{53UksftzL(@Oc#F;_Trm64X_K=K6HT`toSjO| z7NwU3x8?cs`|^Yy8W!LP7EHHLlJuh2TyNuo$CV3;XOwV~wH8PnC_!&CMs+H+oF4Kf zTI0OBs{u`gK>0zzR?+O|6&Y$zBBVwmTahRNzA27-X1Q>o}PNweUAmX(faZ8 zP#h^JQNNcbGI}skT?F$e7L^7MO=TOdXStWc5SN9mo1cF@FSx+Tt+u(mD9lpTd+d;b z7T-(iLZ5Jd-?-=~^&3*h_}}t)GWe1rjNbX^3+-<>wjDDUtB9EElDMO#8~oW|*d^u6 z5}xteo$2x%8oxDht1IC&!_&37cRf8nuyZwwsP@z*80<)DW)cjlRDDH1U0@k278sdu zPnXQGsehF#8_pQH_@HXFRNm~$0=asDAYI+?v#x8x{G^BH{f>^_b_3$YG=uB~o*ZtT z{%4EvWvOc%u3^ci59H%hG+?e9SM^c=t z>#QTAJzT4g7Nk9#x7@iq6V!uNJQo~uawYq7s;`~@41L1$xMMV-BGYehe-M<(c;lT- z)Qiux`-b0(@x|B;DwA$STd~P(+?;q#UO-{vWX$n~fa7=9Vb-APHLzDI=ZW(xE>+mt zSXx;?%1U%b@ohd#Ifb@g5u7r8;x&G??Y@0QL-873A(;KrDC8o!Z$MVr1)u7tL6en@ zZ48(wi!BEgSmrVvq+BOypf7lNsm;)v5LCSO%KlKNOvSl;a80m7Ou48{+5U1qSL8+M zgI@L3o)+({mNrL4d@e~I^hVV+t#CXEq@|Nyz3j2~Xb)4y=VJ>tDC4e+`TgqrTc6*( zd^K7s9`fRfg}HzY?v3B)IVShJ2PxD{4*N&Yj{7~@`B*9Nk$Wv6^R3IroljGrL#1Y) zNLX5`=y?iOCN=~cirb|y7khH$li%)9N+o{=na^|@cn`7Yz_ni`xg^RWlxD_ez$$xE zuI#QVlU#-rUexm_RX$G(&1mI+vB`Q? z?RynPl2)blpir@IBq;WcxRQ+=MotkFan0S>Ma?a_VL?;@6&&HKkk}-=M?@(N(e$9H zfy0Fo7rEe*-NTyt7Q$T4eZN#z@kTVXE3V`KO)|GcTD@+*c)o;1b>g~ILF~mg+SSQ9 zsalM(KG|X+O~ClkCkSzZ)hC%5DvF2%9w(xzDDmA`wa3JTwa{dc%`=Oq#@Alli0@i($d2RO;lW zot`_%*jUn|l1XyQcNziih0HZqOrd?XNEMI_f@ZEuYASK8)n!@8{!nCvJgI5In?tl* zpX|$`Y_8_vm-Z&m;40@D{4`IoVxDxKJatApqWVq1NPCe^rH0*`!JsIPpvQsc5W(4* zK0SC-f#tRKhe5|bT%HfH_J2N!W1%7o??>rT)eXbE?dRBYglHN%LK74c2LN@b`d(E5KExrcv zv4(iB?JLmUuDL~CYw?90EzsyOgsXf=cZ;*H$ma9J0WJj7cze&8YAdO9_-B6sZq2C6 zWYn=!QX{?5hk9sQqX`)~r;^UE(ipLNC8Ts^`a5=BdMmaQ`BJlKZGjLaEjOzp?0IGE z#p9EWMV+~)mfXy1mG4q{k8*>Y)u-R@#4mdlH8tcm>mQfk5~`UdF*lUlAUQ4N=e6uR z?RP!%^L{G@)lbO1mm`i1mP;fTwGN7RaZ(kQg1r|lp4?i;VjI}cFId~1eA!y_SuWF- z)Y36PuXuZF53!{8e|<`C9GKuDmJz=$Fsgw$2FYEP^iHmBV(!j3wA*eg46!b~eOJM> z`U`k__KeASs;!Nm$W+pC;qeU3+&S5N4bo$dw+owzen5*2?7%T&p5 zz*zq%D05hh%K4ZZ_T!0IVPtfAdEdkC@;2}C<%QEM6xt}1+z89QOqZc~p>=&*w4o`# zO06+`irs8~OOnY$VhkE(CRTXuUQkROc9Q{?(#fMh0C2#!6 z!-{F+?>(IEq~?!~)4NAc?$x_y+lITXFm&;9LM?%saK@N^Yalu1LJF-!_OmJFTgiHZ z&)*erT_J~k%Be1x{+LeT$4Vn$ZAjhbS8-gtv0j5M`MBn#>mO~|l22@I+$&((48=bO znRgFV9>aZzf9b?Rf9bQA>*wvMyN55LN`rB|Q??OB-peob^3q%NSt~_sX=EMh)s-rw zr5(uU#bQj(s@e&3jpXW=6n(5bEzXqmEEz`lxV(2@;+FWt@P2cz%LOalXXp|VEEN-@ zd6*SD!lm~eZfvBQ4par7knqa;j*KPM0bTLZn8-#@vreS7P#dlwwET zp}*B-fGtfnPD{q>^tCDU#Z^QPZ#lE2pKv|&h+NswjPX)b98a-vTL9mN&S90a;$g@6 zHX1`qAfNQ2U~f3cJ>6@yLSL+V*GXzgO*=20s+IJp>%V>JQTp|_8c|K#9BF%w3!XF4 zZV1=sHnjH**H{U^nH?eUdbaSkw6n{DE?UlM(!6oq>AhpGWa6Vzds^T2h<4YguyCp= zTXLB#SYjL`ABEI$k5$lm50FT}$K|pH+D^RYWlCsCOvwq7p3tU<;PBHKX|4%^$rUo6 zg&y>=Wcpyi?FxUvo<1^IF5KlXFhaRAoO9`N&XmHL9P`CE19hi~3?Y-MSGfGxagGmp zc|#C7j|UMBx1DQblnb7uM(AEPdw*2raFK6OF{Aml!$%7RrW^X7h0kV+JX7(ztA(KQ z$K~V*7%=F)G1Yw2)OD}5HJ5Ph`Y9QfgxeS3jLQja^FeDc*-MNWA~rOI2~QC1+HaPV z)6@9g^)&d%?$Pouo@6oai<`e^qBgwYJJ=AO#dK|A@4@E}8WN0b(xS=OKabUW9jE2e zHlhzTk9cxDNSpk2{lnbjC;1P#nH5#89NW%IFrmy5tC9_%+aNo!C|xM!m(*DLq+!wW z%$QfgK82%?dh#1dgFLp8frx?c*CEkk->#>82(AuJj<#-2=fpgTlX4Dd$6XFYf$-?cECqzeosd^6VGb>; z6dM`X=!cwhG>P;$FQLT46E~J|X49hPN6f>HO4e3aiX>XTWK=SfC%^l!^8D%>)A{Y{ zhvyK9f{Ahc2f7Hajv$?kX4E!)gdP~5pJ{kfJaDveGE{#-EsgMAeluP1(!S85NU+q* zp)&-d`Ff6%&pP7wTQrzW7OyMWuq=00ON@cF@9{=68?trA+%<{zh0a4mGR#lCXH$IGUT7`@95;)_b~0%KL2hs`kbUunSxP(o8QdE=RR`RPsRA@BZDeQ#WUR7ZRT*X zCHkK+6xS>4QyII{*6&1~cNO0=GdL2kk_6`zHh_N!%g}z+(Jn(d!I`g#djLUf&Af14_GN%l?)8em@i_lCC@xLj4DB0o{|86;> zaF)E=Oo%-tIwQGY7HrDo@w{nT_VRnRun3a-&FRUmkYg-aTwKY`ym^c`X~FWWbn}mk z503O970()+g{Iv*8@OYNx>XU-*Umu`(-RX`;bvJIeow-<*S7h@hh)_o+*CcSuf16# zCR^`XY;PRBIn0q5-%RSNI$!r%H~Xn5uC~d|%j@IDe2;{sQor=oXLEFj9=C?!q)xm? zHxo^X?~v_%>cw`O?D+$SGGp4OvY$SV^`8#+Ffu);rATMtz)7$xIbDh9<(eo5+aN$Y z{Iym>CnE%|@>spXDH&+dQIZ9gI_le;W~+c?xOSGy2FBBl3!=JX-?*tMc56DBlh6)`vJBR=e(#cq3!KZ|bH?mwhyP&mwet?0H;#l;23VBmE-UKJB*x93J8&@NO^b0w z_Db1vh4S{j(TVv!D^vR~pSzd)1m~zt!q4J!no0RybBM5-_V8pX2j5Z)tCpi5>huvk zKNf1vb7!TO70*RYaEouBe#DKV`edn;RS+H9GJI1Hdun}tZI6@x`4+tBOz_ePDz`J- zf>%2tB=^`jP|Hj-Cp@Wql$v3KD~`Ow*(aWdx%lvW%;SQ6j~eyTr0o-E3*)6d*_!)p z)B?QU+D`G4$Kz_fqTN``W?6kRU4_p-m=SysdHlY~sv&}N;FD%0$XIKUs?3vCjfKWO zuzkUS`Gam`#OI?dk=q*LurLE_ziOX3J`?mC?6uwqRLON|YlfuF)z$$B6>|I1Y8BO+ z@Y${Fy~}n35=>VuODel4hiFlpv~KA3ZiWJG}IHNmM4iNTe zJ#ATKiO{&49dm264?fa;Q2bVTZ*f-`YFhQy#Or>fTIR6mr(@X`4^K_^^A3K-kp~4l zF5quhDo0%pvLHW+;*!paTiLT`#zgCmOfdCUY67Wa6rBj{e(`>&qqst0Pf;C;e$G43 zYr(ej#?;%WiBqEIZbqI;Ip9V@eOyVR4|@IHT(P(@*}=69#zBOm&56?=dLt8U@h+qN zD-9{)hScsn)K&7%Os@m?MypcXJ#r(X!0lwdD_b|$p^p=2)@h0(ru)G#0Yo48(RQpA_ZN++Xk2j74WFv;f4Pv9|)i#3`k#$zEJZ*1FD&84nf-539HS@OiMTwDb8%bE&T9i^`sdyFG7< z&Ruj_c`=z+A$5VtY5LVvMA6y{`z>mQh;cwp%6D`x36lGDY@6RVjJ3Rx60s zkL)nFCgrs&tZU|<1Q=2$gE%%SRyT6;vt+a+As4+ApAT4+#o9HFUskS;%q3`LjNUly z;lSBwmQm{iKeR2p6^-YLE;;&^y-K^MyT3Tb3r|;6r&;@w+Mktof%9zNg7Yoa=ta(V zFB+>Ix4-UF*yxZ~HmkDAl-qvHc<2Uz{9XgF*M%h+NNEy?` zV`l9)gw=z|KJ**&Rv$KUthk}gEE6(DrL-yI(Vj-_@^t9Dbqj1%njvY@c2LUp4 z(!oW-)cv>U?2U8U>)B&4$|I+*w&^+K`rp3;eMT=U68k~BxV_ZmqyU|1aO$Uk!03j0 zX+4?OvC%eE6Pmb$^fv+i7HOHR?avv8a$fV>_8eK6in@DN>FI=>oDFF@WqNZvhfBYN zQm~f9ebx2#sGI`Wgpu~vZK%G?OR^S2dbQz{{Q9XNjfy)GNnAIJy`|%|Z>|+L!(Vlp z^@{4Z?GIfo>f1xhB@%IIa(h#@xdOlilw|F9!E=II`bU4SMSnpAB>JI%Vhuq;sTa9bDLx~b+ zv1jMnL(H3x*g=&^*YIy5sKL z7_H`P7|a&CS{A}jatRkXD6sV;-sdXXF&EaNeMeed!YBPegSVzxqLOKY*m_;b=ZldC zqx;>vXO+Ut4rAfnyueDz!dQ^!&h-qNg=i<}R@SK%$jY^6=?h)1=C4RKW-1HS64D=6 zzr3z@`}smRzo`#IYN>F1evudXqiv3wg}C@t1BN5^g*z*wbx zGsjQdDOcG1Bj=*}08QcHE1^@A+!1fom3FSqp|{r4FYtG)b{rf&x~P0uUB8jDol<{x zJnQMxRGry2{#pAd6S$5jJeMVqx_JRraYaiSng$rFuE>E<{wn_U`zn5c9?`P17+-;c z62B4jj&C8w;TW?!$?y7y7X+&>+=ldOjf8Y4x{Vgf%g9eBYB4p8^**lJ{J^L@y|vEK ztAFD%XlcX&aXGd0bUIi5I<{Vh0$$60RlEptJ?K#?+>lL^W)o^#K=z7tuw2?L1k4TkUfH1~G7cz=8Bktc&-6;;ylFmLBX}oEybXBgv zw{vhn<%EFV>v^)K7jHk1yj*)G-@5wJajeCqt6sE|)QN9y&VZfz@GOI~36@E{CF$&I zT_m|gFzxuv{GC#N@p~+)HaS;T$t~NRg)J(s)Xb3QpSXG9P-O7aWgBYxO^Y1@%( zslD`iq%E=)y4mca76R@cm5efEn_cc9IgQo2GLB2QrSY!b+H;8|i51&MvCnbQJcAv+ zVcZj)Y|^=X)G)kXa(?PeM?pr^=gOwMFjF*Zvy1Zy=>9Z1)_0)}OC_ndszqv`_2uOT zREXPn4{gh2RU!Q>SfP>y4?N zJ(0cTexYgbT-fg()%7j( zy2zL%#|!hy8r!+Ct!4+`qP$yk;g7^K1N>Q@tB4C&f0(l`s$ka}yHRMQicNQ(dZb0A z=^MYf!7V;;U3S)qLOB@r`veBX8Pn+>(CUIAasXM zRfp_tVqnsu?}fc`J)xV_PHv*PoS`>g7ytx=H8TQ_!-h^~g7lEKwzm>tU zxi5N>afYJSS)+7~b@_ar-WMhoZ2`?`|ad)lx%> z@rLN9M_QaOiBVENU$=>72tsW&gHJ#4N_c0Kp|#$-?k@|D)iMoC<~&0|MQO#pB;--y zfA=is3T@orG3pqX0*9h-U;Bdgqqmc4_u(|14#4-D-un%Qwu^Sov5!P*3T*POw*(%tJNzO)^}v^ig*pkW<`$PeN;tZ9bkPzd@N8?&jml zK3{SD@bwFOO<*Czu}`DpN1s?w$&=R69xY32NlyXw8%`(>zdG62=XfZvhqia7nY{iQ zWhhQr#Au=D_!a$rkyqxfb*0aR;EXTD;?isS*8A4SL-+IzEG)ko7{KtS$EI}Xrf+Y( zTc3%l8K^m8WN|G_YRWD4-k z2UDeKgD#aaaZC?&zP>m@AO2>fL;pjBtY%QON!pPPGw0qz5RX%l1nVi6TRNiwu)S66 zL9UD7XzzRN8ck9bRU$`yts_v-7q>ga&Ro4xnaZ;<4&KIr-jlQPb{)wd8s)ZAWOL4Y zlrQ!yPOOX9>JHs%&&i8M^-oD>kC=B}%75t4vPa&-%+&gm>iHzar1O{0=IJ+onao=* zhSG)s8|#QZ|LbTlzIXQpCQ#LgxjBge8-=lUPVR2Ij0xe!+O9xMkW;HAy&;!726^QY zp%Wc3RS|t?1ClG_pnH(-0Sh5-_Ozv9uGpfnh0W4#E2oeE}j8t+@=gPWo-{h)xlzw`tVYt5B9rMIcbG73&Ac;CNR`s z=or@RMQ?{<;raU=|O zhZTD~2@U%&^C6`5J(*#gY$}z#P?+S9<+La(7iOR6sLeq#7Z0|=mME%_Qr1noV0oVE z$Y(tjc4J4k6fDIKYQKDaX0zH$F}wKX8`k`$cOP>2FP%e~gkCOd;O10zz2SEu8K**q zuDTgPb>g;mQtQ-q5q{C3H^uQ_)XR?8ed)_-?4`Ct)m~}i}`ORMKZtCRR zrau>xajP?Nw2MV9;jF|Nxa|(wPtu6jKvj?K<&^ewT$v0Ws^{-vv-zc&!QEl(Xf%+W0wS$an1fu@=o~2;o1XhRIbl6b3wNr z-P(*+jeK#;PvT-!`QAsj2h|hR0ufai+NM_yJ)-v*>m3=DJDwgcP!gt^m9|uun>7*9jY_s!5`mRTQ0U)nr}X|3#evQYE%diuNa z=;w3x&)s@xZAKRd?G8(aO&oy*#m?%L%C%a>~^&34{x&z#-b zUhdx`}JpiIJS1ulV(9KcKn|8op9#L_TkG{gRni;KM zL0ro}dgnb~YHY-bRH6Hy`sFiU2yuU^h0A76xV^qyI{XgqH2><*+Hgya#v=)C_a4tM z?NPb5_K6)*V(m3RNxd=yES(Tz>epxs3@ZP27~{7GCC=dqyWOKte16ssXS#^re|zBY z%kypUXxv{?UIT|xh-W2;*Iyp@Af5z>|3M1zXpZ>rM#DcyaX`De;m>_JlhF^z_||@s z^?z`@?MEtzAVvQGq#NGV?F&RA4d2?|ApU($Ac5*EFSCjmk8n^C89n2;;_>Hwrb(sif~3_?RI$#hzR{>zIH9=%W{N zjDR7)B@u8O5`)Defzl95KtrVnU>pwlg_M85LZSvL+wme15z^E)DuCm`a4;AK(OdcD zY0$aY`EJ?G+4UNJNb|A;4xu2=TdvQYeK;OD1fn=Bl1F5-C37{v$-uxf13IFS8 z`#<#H*KC6SgiSz-Buom0#YjRBNF?wFfr29uk_a#qNx-2{l5jj0hr>gpB!9~$7}WEP zO)!E0hJZ)|9&X-=8RQLQhwYFXYS?dY@pqPfKB3mXuKKY`3M96`1R>IPI%e^VBmkKR z`~QG8Jmg;*VbGt@21voe!B9y!6pRK-5-=DfK?;L~;;~2w3MYjF=p%r^Xuu4AOIr}g z3!p6{Tx%~Wgi*zOmZh3CP)ER$ttpp=fhpRUEP7AV>h|$jYR83oziiFi;fCbiLuJgq z0HK~ENiF{l)uubvX7{ZM>#TmVE_|EHoj}a=-9P41iGZt^LoC@S~Iif20kx1QHFwBM~qJ0*{x1!eK}R0S`q^0W{=sK_nV8*iwMvMT48-6 z#RXk_jcA~I-(T|pd;$H~dE)n7Cuu3Eug3Qe-TF1fe-uFhDUw(O0*r$YpimebOTfUT z5Clme4`HEjJRCtlqKTiSz8c>@V9Bu>9RBc*P7aqF-(nK4$Y6ts_fS$HqvV>NuM1jb*Xe%9xGcrX?Y#Xx`}0*Qs<2nZbh>*4QjIEdGuu>7Ya9a3(USRrBdYZ9Ju z{$kLErR@sDAWOvcf58j%U-H87N4!9RKns_Yf}mgoAP@lgp8$sg;S~+XpinR<42nWZ z0cHE{d8s=hR@XS-vvn<$R5j|H1Kh zyZMtuRM36;aS_4g#_(pstk)fcV=U55VU5#J8Jc-E?S5WBw8ACK#&XnFhfn5>zOW6N zWl*%ckQ~u9U2QuI|DK3`>^#8z?h_Fb_Ae=h08)1Cnt&83ECh;@L?a0RrC2lp2_$(K z7#JCWrI27LELc(shr+?X#?*hJ7y|14mg|2iLxvRs9KXfE2)6(ReT#fd{&agks<@ES>-Z zBcvcW6bz3CMne!d1PT6~?2y9EaMid+`!|9o*L#?rCX(t~QL1QP1%)m#EbN9le?_w z+|IMCCD@t=72&-{Ayajb89aF4{;av2&(5LS7J2c86XlD_3hfrA{0hV7ge}8lKC+!j ziSlNvbfOAbrYrn#6bOk3MuN#=|DV;b>M{) zH<*x@hEtAXcIZDp_k6(5eyRY|7(sSa{5c!DeAIDDCL(7fN0nxv0A3>I@0^AITh1_l zMdS(q-?#P?&hMQ4DCLhLG9U#A3X%jQ0!#qI@i3$$0pJV=MZ%>B7!(=`3}-PII57Y8 zg|lxsh}WO6{7FRqG?ysqL1=ZXr1SKsz-=XRyt`Clwucyz7cAnJIvX!1Et~B#*xXhk zyr1HW68T87k}qOGq*zI}eEaVa`Nz%!-0waj?WJQOYohQbgS^lvHt-;*nHbQuc!d{3n9G+9^U-zQi8HEr0xhVy?++ao|ZyG~?)6f_!+z)NCa5CXsx5S+0HDHsZd z!9Y;J#2*YuXIKapiv2BZk3bq<1_$+;&0t1V^EHv8%O?c}aJR1puhb)l$d_!**}y3`TQOCJlUG2^ifOMI{o~g(>zzeNZfb1N)owCz7VnC;k;>sC z)1Yc)s}=s1lf$=8>KB+5()$A5-1j!=?4}7;Ha-t{r`aF8*Myt#~OPKMwbsW z`!(!2VDN<*6YKP?zfWQPxX1@U-hB{-BEA~bx1~Me^(Q5MXXZyKf0U;HDPSlV0V5Dl z5Ih!-#{eZQ41&jl@hBLaAO*xyI4};yfV)S1= z`w!jvHN}6FrvNE%V5$@tz!K0fFhmjpluE#A3L1lk;}9so5P|YQ5=DT09Xb31mS0a{ z*=L?5)XuWXUB^nvJDA;AZ!@;N-|8bzY0O>2|HUr#nibgpK85wKNrS@wrCt8fumO+) z%u=DS2uTbChX=A06hk0Ru}Vn+`3VYv09J~Jz=2ukFM;kKNc+#Qp^KQMD6F1b40%e! zKd>q3%%tdiPlnqHnrM@3EAB$hJ)W&~Gmrj)GkuVcoe|m;*!IMf{4(m~ySzxrxxRqM zRr&&@0Y{oqh4T9o?upQ$SZ)QMVZ19A*LiBMOEBW;9Y~?na8v9J*58a8*j{38`uEl4 zDq=GYdVph<+bDST87Y0=**u0VK_7hVo5CgN;yqGMjuq~0((G&KKw{7}IXO}F_hG}m zf19fae-#>wKuG!4{%2_UQOY0XDnJSj0wLfL1Yq1Oi6c%xN@9U^8w@b>2th$`2q~aC zMxiBPUsU)F2l4t777{3^3n({ev5inq&a+QJ-B!O|(*M({b7X5W-^$%D`%t5JuUF~X#`jflf_EYYZk+obqkz{wxNq&IoK-GK~!<^ebx)TCgk0=zzv(&B+ zzpD2W);yi7TJN~60V%X2=9E1l*YZ^O^q`7Ai+DG<0mNnUq~?U2{XVYuR0f|EN> zwMH2pAIRzH{(+daEcooM-pst|FWY8iF>HNwVyJ@cNP99g;@OTKDvMWwyRApKe`sho?X1)`pfhG^D=v)F%#twuRm#}D`qTY5LiCU zPrNs$rOK9_y~E0+$XL}Y!<}4Fd7f@Yjd1$y+cz#}RG!CnTH#!yPul8RCQ2U#EsFEs zqKlLyr+t*klC2wmget6=mCBH$Oi6F~Q*Yq9TS7#KAk|0AhTc{qOx2v&_d=pIw&dji34 zdM#!kwy9DSYybvtg-%ZXVAts4(D zLhoO@o_jf4EW7P3X-e+B)23GvujKef^_gZ<&K9bOVK|fPK_>b>muq{MZ?0}IeurM&+%|t-63(p!V(hXUb9>ion^&B}rA5g&wPSXSK$vP02$#ga zrtIuq%ra=WC1$g77@K+Fm0*iGW7ybPHt0omh)hC(x`O)s(+THkKQk!}CR1qNeXDtv zVTY$Xhh54e`kwZ776(UbWe~LB(cAM<6iZ@?SE<#gn-kcCo^q{6-3f}MJFXm%Z+@)m z2pL29ybRH0U-n;T1y&qDL<9KWruW+omS0Tc%Pz|=`Qf+rN3`ctKUE!Kp#S}=Bwv0% zecpLX98`$rst{3Ng>s!LND!Wi&mRjA0& z9~wQLps&J6&RX%FL?BvY&vR~DzfYema>bj(^C*hroe4bSDCR48wLL`?Zyr#Rn&>ZR zsso3+!%#Se3eZX42VAz}3!n4?8wWcq9D;Q5au-BOD}B$_&e)de&G{juNp0NesGT7> z$_@)f5hX?o`G|!{FN4q7WP9rC+Y2e0f#sgMEWLH_{@9j99fr+e7O%1@j*jy_dGF&Z7ji`X{s`)Vr?ErTmf2x}Q+H*{_f?ourlBf=1T2+10 zZGw}48+ltZGEqLC?`Fs{6viswGdq9q?Ry9OnQOhYItbt5@-=4~t5Jii_KGq&zI8)) zuypYy&P|3&Z<9qpMuH31W-_>IYdmgK#t)f)7BK&On4$IfR`1)vrTrVp;W}1n6%^!U zZLsjo3X>pHn;WSMvL#)Um0e=yy(Li~ZxYM2?%@JMGI=YF<4xYjLYc$|_e?%0?jM%$ z`S{M*nDe8oSdi@l<(`~Ttb%&!1<{a})K9E09G1Ms92nn+T@Sn zLfaOUZstX8D%=@4O7wpNN++!YfKrImfA@clpIq~|d!K=y_i^)fcm6t9k^z+Pt^MR7 z-$neGuZhv%x4$;?O~jYqG5IQpn1qRfevyoSZD2r0e}4r1zXf^V&$)j4RUx8f$pY;c z7KZ)$iy$cxw6Xw`AfljOL+}Fbi2u&U{~LlW&h@udw-+dAXR?XZkSE!)^14sMYv06+ zRuZ6mx>zrk4N8mE1);ok)Lhn)rcsNi4ikxuiOdP7s}E(D!PcD7OU5LMSK70WzbfXg z;@)U+jjm*GCZh^FBzi=m0Z<+t@9&cK@yf7f&V$VoL7J;rA1neH9?-zMVR0Nd- z@&U?21Of&hp`(_{F;He`nk=MH43S$1GgGJ~n)qM@bxg$xoW>ammbAufdBPDP{rlUGv(GvE`~I%;Ti*DoX8Z^BpZq*V|M}9OK7Sgqveeh{!@;qxRnga@pH6p;Ek9y>bN`?BZF6coups5s z@#a21jXyY~)#y4nFstrDz$?StcLrt^Iyq0cT4Zpq32)u@_P6%mjhoowcjMi2?U%Yr zM{P{HTHYsU{~fm-$12P2#N1fk?sc=)r^M@Ky-!PhX5;^B0L?7&t>o4-Y;J{ z_k21rJUsktyu;KJx!sR*+kK~}zMv!m$@H9NrJ{ltOfyNTVrFZUtlD}cbD+`v)L8E+ z_O7naJ>K`Fp-x|QtT|e-tK3v}^Xxwp5;_gBo?BCPok@={hMXFC!=c92<72Pj;GB#1 zeK&SZdgjf|2?u|deQ?adlasC=dp7H{ZLx3rf4XAyrjQ!{zGb<2C+AmXcs)M+?w*dI z-7WzU@hfwMu`EBsd754}2|G^DjIe9+u{L&}Jt($yaQ=C1Oan9)@5 z<<5p6zqTCjHHF7>istV-S3D!XvT*JB`T6_iM9+J@F{~u+qw?mrDkell{ww|1l2wZ< zGH+$yPrH4lZ01x$mH$6x{JkPKEpN=f=Z1gwOxEqFS@o6I_k6Xux?_?dZReiMZ{=y9 z?loLaDqffWMCIX))8~D?;A%s3^>(k4S<71TW;Qq6bI7Q4y!8v|c-Zryi4~_u7hO(t z+x08w{y#Xbk8b`@Zdy})^ovttFP>;Qo_sj=OxF)#PmOI0{KoX3hNGsU)g9MXUupie zSM0UOwD>_|f1LbUd+m2I_ewt=+%RhPi;Hsm`xhMSm@{%#O=I1W|6RV)TITopqMDou zB|qqqjkjHIP2)e8gE zuCsb!z#k5GU)FXW4?Y|!wwa6OL9IMP)*AD`0~q$DnIHT2+B-TuF>m^lhTOU<1z!}n zH|~xy#JIH1wfp_R^5vI|*}<8KD?-!yJ*l+X*~PtmLJZ6gNJpI?I8pdlYXxK;BszOp zmRjKNkz89JRuBWilLlOg5B6d#Op>26 zC9N_lRtFFR!^p-(_TWB~g-NQi1xzpdhe4r!AFiqA!-39Lwr^Hj`|trslQN6gmu4nm zI2f+DP#j2CS(v0ITX3YZeHafo#kJp{ZW#-cl&Lt(SZyA;7@Zaq*L>sq(M>TKLL{W#ik43unP)m4z&ApaBZk zVPZ{Y3q7t51qM$nWU14Q)MVA_NuXSpHVa%a2P#pqkfj0-QWlEoRPX9iX*0pr`h1T( zrs!%3LjdfrgzEKZGr)fKU;)WOmQn`MG7vWO*QS8|qro_zg)C(~O-ez?Mqi8Gj@&W% z!LVfr3BA{j)!Iz3w4^v(f_#dH0;u{pr{IyU zJ>S4HvVJnLCrCCaDkFf3twnf7+5}Mbu}z^f@^uiA5t7vj&j@x6;TZ{dnU1QD^$DF3 zhbhF|NG>KkBiOlvXCzesRUcOq%m{Y%P?izRI`W>8$_T|tL}dg}v113%$ZY{seVj!w zBRzRD05cG>u`-y*2+2W2Wdu;M!3NJr-&g3U`Z$Wv8S$7(%#CFD!83y0Gk8Yc5J1(( z0EEs+a0rnRlA8z52)3o*8QCL%s*k$|W+YV^zvek&{++-2-knBdgk+PUG6JaBkb-9< zVLBaEAKMH%BLikobE6n!@Qh#!3Z9X*0;u{JX3!ZK8A@b?WQoBuf*m7xMv4Sb^|8pH zGg3H{$Oy^7f@cJKLGX-p383oZXhCP>d>D}tk~am<2)0(>85yPc23oy8XLoVBc~xLW zuf{aCNe@Ya!?roRP1xW zGxFjbI;uX#4s=F_M-X!(`7ZE`U<(7Dk#_}9_3>e#GZObIkr9%m0?!Ec1>hN}7eLj= zVgWOPJp&$HN4z45jF5Z^R7Sc{k>sCeWRn1@KE4HXMk1q#jF2n{ct)_)pJ(Kd0IEKg z1eg&lYj9M!K*h>@o{>fYRDG-n=!{%Yj)##LAvp!`j9}S4&&Zg0 zbX0wu1L%x6%_rtYvH{>3!76s1k#qr6eQW_RBUq^Y=&U)tfXE0*Rj)Dvs92uPGh$ds zN7YAVPiMqFhL{^kF3&T973n-9DFUea$mcO5*57%0#}XM)wClFcrZZGH5d^4MKh86< zSpZcZ#XQRmW{Gu1aum5cX=Nqp+0`)us8|}#GxDPVsy_O5IwOY{6B!{%)p{eyfZCD%Mc*jC?PEs*e&JGopRV$)D9YkYIxmqNZEr z0_F=A_2Lt%Cdo6Ag7@%O9U)mU6<;JP~dbt2d1h7**eT5PN=1YsTvle9KX2%942)PiHZAP@fE zbTM#(lu-+gC22f(Nrn(OMWD#QfnM!c2h|%3*?1_^GB{ZSr;cv`!?H7eDe+up6KsjF sCXTfghBv@tIT=3GX_AiFhVPZqEh5ZGk%!pXWhlSCRK#}4%i*X01Mdq~T>t<8 literal 0 HcmV?d00001 From dcf9b33473f07b23aa1f37f53e4dee05a0e28778 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Thu, 29 Dec 2022 16:59:41 +0100 Subject: [PATCH 004/263] fix problem --- src/ui/DiffTreeModel.cpp | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/ui/DiffTreeModel.cpp b/src/ui/DiffTreeModel.cpp index 577786a0..8fe10965 100644 --- a/src/ui/DiffTreeModel.cpp +++ b/src/ui/DiffTreeModel.cpp @@ -423,18 +423,34 @@ Node::stageState(const git::Index &idx, ParentStageState searchingState) const { for (auto child : mChildren) { childState = child->stageState(idx, searchingState); + + // determine new searching state + // conflicted and disabled files/submodules are in the unstaged treeview, if ((childState == git::Index::StagedState::Staged && searchingState == ParentStageState::Unstaged) || - (childState == git::Index::StagedState::Unstaged && + ((childState == git::Index::StagedState::Unstaged || + childState == git::Index::StagedState::Conflicted || + childState == git::Index::StagedState::Disabled) && searchingState == ParentStageState::Staged) || childState == git::Index::PartiallyStaged) return git::Index::PartiallyStaged; if (searchingState == ParentStageState::Any) { - if (childState == git::Index::Unstaged) - searchingState = ParentStageState::Unstaged; - else if (childState == git::Index::Staged) - searchingState = ParentStageState::Staged; + switch (childState) { + case git::Index::Unstaged: + searchingState = ParentStageState::Unstaged; + break; + case git::Index::Staged: + searchingState = ParentStageState::Staged; + break; + case git::Index::PartiallyStaged: + break; // does not change searchingState + case git::Index::Conflicted: + // fall through + case git::Index::Disabled: + searchingState = ParentStageState::Unstaged; + break; + } } } From 9b54ba3282204d5fabeaa6a35e49f1967762ee0f Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Fri, 30 Dec 2022 10:13:04 +0100 Subject: [PATCH 005/263] return if initializing a rebase fails. --- src/git/Repository.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/git/Repository.cpp b/src/git/Repository.cpp index cd0d9692..956f8f6b 100644 --- a/src/git/Repository.cpp +++ b/src/git/Repository.cpp @@ -889,8 +889,10 @@ void Repository::rebase(const AnnotatedCommit &mergeHead, git_rebase_init(&r, d->repo, nullptr, mergeHead, nullptr, &opts); auto rebase = git::Rebase(d->repo, r, overrideUser, overrideEmail); - if (!rebase.isValid()) + if (!rebase.isValid()) { emit d->notifier->rebaseInitError(); + return; + } // start rebasing rebaseContinue(QStringLiteral("")); From 0636e05c254ea7318ae3c14f24773df56dde1335 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Fri, 30 Dec 2022 10:51:54 +0100 Subject: [PATCH 006/263] show logentry if a conflict happens, so the user knows what to do --- src/ui/RepoView.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ui/RepoView.cpp b/src/ui/RepoView.cpp index 075f5d65..e409b640 100644 --- a/src/ui/RepoView.cpp +++ b/src/ui/RepoView.cpp @@ -1456,7 +1456,13 @@ void RepoView::rebaseAboutToRebase(const git::Rebase rebase, LogEntry *entry = mRebase->addEntry(text, tr("Apply")); } -void RepoView::rebaseConflict(const git::Rebase rebase) { refresh(); } +void RepoView::rebaseConflict(const git::Rebase rebase) { + if (mRebase) { + mRebase->addEntry(tr("Please resolve conflicts before continue"), + tr("Conflict")); + } + refresh(); +} void RepoView::rebaseCommitSuccess(const git::Rebase rebase, const git::Commit before, From 6cc7ad43e1b69b7483deade03bdf9cf882a44c1b Mon Sep 17 00:00:00 2001 From: Murmele Date: Mon, 2 Jan 2023 16:50:51 +0100 Subject: [PATCH 007/263] Update rsrc/linux/com.github.Murmele.Gittyup.desktop --- rsrc/linux/com.github.Murmele.Gittyup.desktop | 1 - 1 file changed, 1 deletion(-) diff --git a/rsrc/linux/com.github.Murmele.Gittyup.desktop b/rsrc/linux/com.github.Murmele.Gittyup.desktop index ef945525..d413905e 100644 --- a/rsrc/linux/com.github.Murmele.Gittyup.desktop +++ b/rsrc/linux/com.github.Murmele.Gittyup.desktop @@ -9,4 +9,3 @@ Terminal=false Type=Application Categories=Development; X-Desktop-File-Install-Version=0.1 -Name[de_DE]=Gittyup From d7b73b853c3cc8ba6bc5f7cf4a268b48e55603ce Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Wed, 11 Jan 2023 19:15:54 +0100 Subject: [PATCH 008/263] do not crash if objects are invalid --- src/git/Diff.cpp | 3 +++ src/git/Index.cpp | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/git/Diff.cpp b/src/git/Diff.cpp index 5a6b167a..94a8e66f 100644 --- a/src/git/Diff.cpp +++ b/src/git/Diff.cpp @@ -173,6 +173,9 @@ void Diff::findSimilar(bool untracked) { if (untracked) opts.flags = GIT_DIFF_FIND_FOR_UNTRACKED; + if (!isValid()) + return; + git_diff_find_similar(d->diff, &opts); d->resetMap(); } diff --git a/src/git/Index.cpp b/src/git/Index.cpp index 0e07af4c..b80b8187 100644 --- a/src/git/Index.cpp +++ b/src/git/Index.cpp @@ -363,7 +363,10 @@ Id Index::headId(const QString &path, uint32_t *mode) const { return Id(); git_tree_entry *entry = nullptr; - if (git_tree_entry_bypath(&entry, commit.tree(), path.toUtf8())) + const auto tree = commit.tree(); + if (!tree.isValid()) + return Id(); // broken repository? + if (git_tree_entry_bypath(&entry, tree, path.toUtf8())) return Id(); if (mode) From 94a5f6d3e8aec26700980efbe551c5dd0832de75 Mon Sep 17 00:00:00 2001 From: 0verEngineer Date: Tue, 17 Jan 2023 20:04:14 +0100 Subject: [PATCH 009/263] Fixes SingleInstance checkbox on macOS --- src/dialogs/SettingsDialog.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/dialogs/SettingsDialog.cpp b/src/dialogs/SettingsDialog.cpp index 6fe3eb8f..d2c8ced5 100644 --- a/src/dialogs/SettingsDialog.cpp +++ b/src/dialogs/SettingsDialog.cpp @@ -113,9 +113,6 @@ public: connect(privacy, &QLabel::linkActivated, [] { AboutDialog::openSharedInstance(AboutDialog::Privacy); }); - mSingleInstance = - new QCheckBox(tr("Only allow a single running instance"), this); - QFormLayout *form = new QFormLayout; form->addRow(tr("User name:"), mName); form->addRow(tr("User email:"), mEmail); @@ -127,8 +124,13 @@ public: form->addRow(tr("Credentials:"), mStoreCredentials); form->addRow(QString(), privacy); + mSingleInstance = + new QCheckBox(tr("Only allow a single running instance"), this); + #if defined(Q_OS_LINUX) || defined(Q_OS_WIN) form->addRow(tr("Single instance:"), mSingleInstance); +#elif defined(Q_OS_MACX) + mSingleInstance->setVisible(false); #endif QVBoxLayout *layout = new QVBoxLayout(this); From 42d89fc8eddbb7147a61454c6714a577b9ce0e15 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Fri, 16 Dec 2022 14:27:38 +0100 Subject: [PATCH 010/263] Add changelogs --- docs/changelog.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/changelog.md b/docs/changelog.md index 8b2a46d9..bc31df4a 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -2,10 +2,16 @@ Bug fix release +### Added +* Possibility to hide avatar (Settings - Window - View - Show Avatars) + #### Changed * Fix download url for flatpak and macos * Fix Segmentation fault when ignoring files +* Fix discard of complete files and submodules +* Fix bytesize overflow + ---- ### v1.2.0 - 2022-10-28 From e51b8afcd150282372f376b6be06445a8c435a9d Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Fri, 16 Dec 2022 14:33:20 +0100 Subject: [PATCH 011/263] change date to today --- docs/changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog.md b/docs/changelog.md index bc31df4a..7a1c4ce0 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,4 +1,4 @@ -### v1.2.1 - 2022-11-10 +### v1.2.1 - 2022-12-16 Bug fix release From 87f2f88e6abe3a3046cbab5f245fa2345af8c7bd Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Fri, 16 Dec 2022 17:35:51 +0100 Subject: [PATCH 012/263] add missing hash --- docs/changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog.md b/docs/changelog.md index 7a1c4ce0..01c65a8b 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -2,7 +2,7 @@ Bug fix release -### Added +#### Added * Possibility to hide avatar (Settings - Window - View - Show Avatars) #### Changed From 5109ad9d9663bf9eab7128b269939d3d34b6d861 Mon Sep 17 00:00:00 2001 From: Murmele Date: Thu, 29 Dec 2022 14:35:02 +0100 Subject: [PATCH 013/263] Update docs/changelog.md --- docs/changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog.md b/docs/changelog.md index 01c65a8b..595a668b 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,4 +1,4 @@ -### v1.2.1 - 2022-12-16 +### v1.2.1 - 2022-12-29 Bug fix release From 17198263a2fb4a20f273e74151dcc3a5dc534a88 Mon Sep 17 00:00:00 2001 From: Murmele Date: Thu, 29 Dec 2022 17:21:24 +0100 Subject: [PATCH 014/263] Update docs/changelog.md --- docs/changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog.md b/docs/changelog.md index 595a668b..fe20215b 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -11,6 +11,7 @@ Bug fix release * Fix Segmentation fault when ignoring files * Fix discard of complete files and submodules * Fix bytesize overflow +* Fix focus loose during scrolling in the Commitlist with the keyboard ---- From 590d15ecd3672209a1922e1db9d64fa6834dc4cc Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Wed, 4 Jan 2023 08:50:14 +0100 Subject: [PATCH 015/263] Add changelog entry --- docs/changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog.md b/docs/changelog.md index fe20215b..36e505ab 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -10,6 +10,7 @@ Bug fix release * Fix download url for flatpak and macos * Fix Segmentation fault when ignoring files * Fix discard of complete files and submodules +* Fix context menu entries * Fix bytesize overflow * Fix focus loose during scrolling in the Commitlist with the keyboard From be9d173624c4b9c5f8c1d8ff21c9f6473be3aec3 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Sun, 22 Jan 2023 11:58:23 +0100 Subject: [PATCH 016/263] set release date and add changelogs --- docs/changelog.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/changelog.md b/docs/changelog.md index 36e505ab..aee7fd05 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,9 +1,10 @@ -### v1.2.1 - 2022-12-29 +### v1.2.1 - 2023-01-22 Bug fix release #### Added * Possibility to hide avatar (Settings - Window - View - Show Avatars) +* Show log entry when a conflict during rebase happens #### Changed @@ -13,6 +14,8 @@ Bug fix release * Fix context menu entries * Fix bytesize overflow * Fix focus loose during scrolling in the Commitlist with the keyboard +* Do not crash when the repository is for some reason broken +* Fix crash if rebasing is not possible ---- From fc0f53482ecd49e9e2855e6c71959cf669fd99c6 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Sun, 22 Jan 2023 17:51:21 +0100 Subject: [PATCH 017/263] uninstall Gittyup versions before installing a new one --- src/update/Updater.cpp | 29 +++++++++++++++++++++++++++++ src/update/Updater.h | 4 ++++ 2 files changed, 33 insertions(+) diff --git a/src/update/Updater.cpp b/src/update/Updater.cpp index ef454de5..bbe5d88a 100644 --- a/src/update/Updater.cpp +++ b/src/update/Updater.cpp @@ -271,9 +271,37 @@ Updater *Updater::instance() { } #if defined(FLATPAK) || defined(DEBUG_FLATPAK) +bool Updater::uninstallGittyup(bool system) { + QString bash = git::Command::bashPath(); + QString loc = system ? "--system" : "--user"; + + QStringList args; + args.append("-c"); + args.append( + QString( + "flatpak-spawn --host flatpak remove %1 com.github.Murmele.Gittyup") + .arg(loc)); + auto *p = new QProcess(this); + + p->start(bash, args); + if (!p->waitForFinished()) { + const QString es = p->errorString(); + qDebug() << "Uninstalling Gittyup failed: " + es; + return false; + } else { + qDebug() << "Uninstall: " + p->readAll(); + } + p->deleteLater(); + return true; +} + bool Updater::install(const DownloadRef &download, QString &error) { QString path = download->file()->fileName(); + // Ignore return value + uninstallGittyup(true); + uninstallGittyup(false); + QDir dir(QCoreApplication::applicationDirPath()); QStringList args; args.append("-c"); @@ -294,6 +322,7 @@ bool Updater::install(const DownloadRef &download, QString &error) { } else { qDebug() << "Successfully installed bundle: " + p->readAll(); } + p->deleteLater(); auto relauncher_cmd = dir.filePath("relauncher"); qDebug() << "Relauncher command: " << relauncher_cmd; diff --git a/src/update/Updater.h b/src/update/Updater.h index 29c33cb3..bd767c07 100644 --- a/src/update/Updater.h +++ b/src/update/Updater.h @@ -62,6 +62,10 @@ private: bool install(const DownloadRef &download, QString &error); +#if defined(FLATPAK) || defined(DEBUG_FLATPAK) + bool uninstallGittyup(bool system); +#endif + QNetworkAccessManager mMgr; }; From e1f8ec18dfdcd8b8e4032bd96d8cb171ad2a345b Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Sun, 22 Jan 2023 17:52:51 +0100 Subject: [PATCH 018/263] increase version --- CMakeLists.txt | 2 +- docs/changelog.md | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a1ca20d2..8f58abfa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ project(Gittyup) set(GITTYUP_NAME "Gittyup") set(GITTYUP_VERSION_MAJOR 1) set(GITTYUP_VERSION_MINOR 2) -set(GITTYUP_VERSION_PATCH 1) +set(GITTYUP_VERSION_PATCH 2) set(GITTYUP_VERSION "${GITTYUP_VERSION_MAJOR}.${GITTYUP_VERSION_MINOR}.${GITTYUP_VERSION_PATCH}" ) diff --git a/docs/changelog.md b/docs/changelog.md index aee7fd05..110b1d10 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,3 +1,11 @@ +### v1.2.2 - 2023-01-22 + +Bug fix release + +#### Changed + +* Fix flatpak install process + ### v1.2.1 - 2023-01-22 Bug fix release From 3d0ede46d69f53432f8b88161fd6ecc7a0c275b2 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Sun, 22 Jan 2023 17:54:25 +0100 Subject: [PATCH 019/263] decrease version for testing --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8f58abfa..ba5f60d6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ project(Gittyup) set(GITTYUP_NAME "Gittyup") set(GITTYUP_VERSION_MAJOR 1) set(GITTYUP_VERSION_MINOR 2) -set(GITTYUP_VERSION_PATCH 2) +set(GITTYUP_VERSION_PATCH 0) set(GITTYUP_VERSION "${GITTYUP_VERSION_MAJOR}.${GITTYUP_VERSION_MINOR}.${GITTYUP_VERSION_PATCH}" ) From 4fc5eca08fb562d24b0107c54d0a55438dc08e23 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Sun, 22 Jan 2023 18:10:40 +0100 Subject: [PATCH 020/263] missing version separator --- docs/changelog.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/changelog.md b/docs/changelog.md index 110b1d10..5bace189 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -6,6 +6,8 @@ Bug fix release * Fix flatpak install process +---- + ### v1.2.1 - 2023-01-22 Bug fix release From 1ffcdced3472988b0b1d883a3f6aaa83c8bd81b2 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Sun, 22 Jan 2023 18:30:51 +0100 Subject: [PATCH 021/263] set correct version --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ba5f60d6..8f58abfa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ project(Gittyup) set(GITTYUP_NAME "Gittyup") set(GITTYUP_VERSION_MAJOR 1) set(GITTYUP_VERSION_MINOR 2) -set(GITTYUP_VERSION_PATCH 0) +set(GITTYUP_VERSION_PATCH 2) set(GITTYUP_VERSION "${GITTYUP_VERSION_MAJOR}.${GITTYUP_VERSION_MINOR}.${GITTYUP_VERSION_PATCH}" ) From 25f40e4612d0eb7e5a757afdcf57ab6931cc161a Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Sun, 22 Jan 2023 18:30:51 +0100 Subject: [PATCH 022/263] Revert "set correct version" This reverts commit 1ffcdced3472988b0b1d883a3f6aaa83c8bd81b2. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8f58abfa..ba5f60d6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ project(Gittyup) set(GITTYUP_NAME "Gittyup") set(GITTYUP_VERSION_MAJOR 1) set(GITTYUP_VERSION_MINOR 2) -set(GITTYUP_VERSION_PATCH 2) +set(GITTYUP_VERSION_PATCH 0) set(GITTYUP_VERSION "${GITTYUP_VERSION_MAJOR}.${GITTYUP_VERSION_MINOR}.${GITTYUP_VERSION_PATCH}" ) From 8b66d81c04b247d08e8a41f5f2cf417289beed07 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Sun, 22 Jan 2023 18:32:07 +0100 Subject: [PATCH 023/263] assume yes otherwise the application will not be deleted --- src/update/Updater.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/update/Updater.cpp b/src/update/Updater.cpp index bbe5d88a..dc94e725 100644 --- a/src/update/Updater.cpp +++ b/src/update/Updater.cpp @@ -279,7 +279,7 @@ bool Updater::uninstallGittyup(bool system) { args.append("-c"); args.append( QString( - "flatpak-spawn --host flatpak remove %1 com.github.Murmele.Gittyup") + "flatpak-spawn --host flatpak remove -y %1 com.github.Murmele.Gittyup") .arg(loc)); auto *p = new QProcess(this); From a29ad94a7390b87ee2171d077e742f0a32317d67 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Sun, 22 Jan 2023 18:42:56 +0100 Subject: [PATCH 024/263] format --- src/update/Updater.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/update/Updater.cpp b/src/update/Updater.cpp index dc94e725..d6d23a11 100644 --- a/src/update/Updater.cpp +++ b/src/update/Updater.cpp @@ -277,10 +277,9 @@ bool Updater::uninstallGittyup(bool system) { QStringList args; args.append("-c"); - args.append( - QString( - "flatpak-spawn --host flatpak remove -y %1 com.github.Murmele.Gittyup") - .arg(loc)); + args.append(QString("flatpak-spawn --host flatpak remove -y %1 " + "com.github.Murmele.Gittyup") + .arg(loc)); auto *p = new QProcess(this); p->start(bash, args); From 196b8c643de7eb101a9a8705817b04fa0e2dd646 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Sun, 22 Jan 2023 19:02:10 +0100 Subject: [PATCH 025/263] increase version again --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ba5f60d6..8f58abfa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ project(Gittyup) set(GITTYUP_NAME "Gittyup") set(GITTYUP_VERSION_MAJOR 1) set(GITTYUP_VERSION_MINOR 2) -set(GITTYUP_VERSION_PATCH 0) +set(GITTYUP_VERSION_PATCH 2) set(GITTYUP_VERSION "${GITTYUP_VERSION_MAJOR}.${GITTYUP_VERSION_MINOR}.${GITTYUP_VERSION_PATCH}" ) From 56a62f6a71831d6a6df6e7628be8c19aea45e257 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Fri, 30 Dec 2022 16:28:50 +0100 Subject: [PATCH 026/263] Implement automatic usage of template in commit message --- src/ui/DetailView.cpp | 118 +++++++++++++++++++++++++++----------- src/ui/TemplateButton.cpp | 9 +++ src/ui/TemplateButton.h | 2 + src/ui/TemplateDialog.cpp | 9 ++- 4 files changed, 101 insertions(+), 37 deletions(-) diff --git a/src/ui/DetailView.cpp b/src/ui/DetailView.cpp index 130ad669..0b231123 100644 --- a/src/ui/DetailView.cpp +++ b/src/ui/DetailView.cpp @@ -727,10 +727,10 @@ public: : QFrame(parent), mRepo(repo) { git::Config config = repo.appConfig(); - TemplateButton *templateButton = new TemplateButton(config, this); - templateButton->setText(tr("T")); - connect(templateButton, &TemplateButton::templateChanged, this, - &CommitEditor::applyTemplate); + mTemplate = new TemplateButton(config, this); + mTemplate->setText(tr("T")); + connect(mTemplate, &TemplateButton::templateChanged, this, + QOverload::of(&CommitEditor::applyTemplate)); QLabel *label = new QLabel(tr("Commit Message:"), this); @@ -882,7 +882,7 @@ public: }); QHBoxLayout *labelLayout = new QHBoxLayout; - labelLayout->addWidget(templateButton); + labelLayout->addWidget(mTemplate); labelLayout->addWidget(label); labelLayout->addStretch(); labelLayout->addWidget(mStatus); @@ -1020,6 +1020,49 @@ public: bool isUnstageEnabled() const { return mUnstage->isEnabled(); } + QString createFileList(const QStringList &list, int maxFiles) { + QString msg; + + const int numberFiles = list.size(); + + if (numberFiles == 0 || maxFiles == 0) + return QStringLiteral(""); + + if (numberFiles == 1) { + return tr("%1").arg(list.first()); + } else if (numberFiles == 2 && maxFiles >= 2) { + return tr("%1 and %2").arg(list.first(), list.last()); + } else if (numberFiles == 3 && maxFiles >= 3) { + return tr("%1, %2, and %3").arg(list.at(0), list.at(1), list.at(2)); + } + + // numberFiles > 3 || maxFiles < numberFiles + const int s = qMin(numberFiles, maxFiles) - 1; + + for (int i = 0; i < s; i++) { + msg += list.at(i) + QStringLiteral(", "); + } + + if (numberFiles > s + 1) { + msg += list.at(s) + QStringLiteral(", "); + msg += QStringLiteral("and %1 more files").arg(numberFiles - s - 1); + } else { + msg += QStringLiteral("and %1").arg(list.at(s)); + } + return msg; + } + + void setMessage(const QStringList &list) { + if (mTemplate->templates().count() > 0) { + applyTemplate(mTemplate->templates().first().value, list); + } else { + QString msg = createFileList(list, 3); + if (!msg.isEmpty()) + msg = QStringLiteral("Update ") + msg; + setMessage(msg); + } + } + void setMessage(const QString &message) { mMessage->setPlainText(message); mMessage->selectAll(); @@ -1038,18 +1081,49 @@ public: } public slots: - void applyTemplate(QString &templ) { - auto index = templ.indexOf(TemplateButton::cursorPositionString); + void applyTemplate(const QString &t, const QStringList &files) { + + QString templ = t; + + QString pattern = TemplateButton::filesPosition; + pattern.replace("{", "\\{"); + pattern.replace("}", "\\}"); + pattern.replace("$", "\\$"); + QRegularExpression re(pattern); + QRegularExpressionMatch match = re.match(templ); + int start = -1; + int offset = 0; + if (match.hasMatch()) { + start = match.capturedStart(0); + int origLength = match.capturedLength(0); + const auto matchComplete = match.captured(0); + bool ok; + const auto number = match.captured(1).toInt(&ok); + + if (ok) { + const QString filesStr = createFileList(files, number); + templ.replace(matchComplete, filesStr); + offset = filesStr.length() - origLength; + } + } + + auto index = t.indexOf(TemplateButton::cursorPositionString); if (index < 0) index = templ.length(); + else if (start > 0 && index > start) { + // offset, because fileStr has different length than matchComplete + index += offset; + } - templ.replace("%|", ""); + templ.replace(TemplateButton::cursorPositionString, ""); mMessage->setText(templ); auto cursor = mMessage->textCursor(); cursor.setPosition(index); mMessage->setTextCursor(cursor); } + void applyTemplate(const QString &t) { applyTemplate(t, {}); } + private: void updateButtons(bool yieldFocus = true) { RepoView *view = RepoView::parentView(this); @@ -1137,32 +1211,7 @@ private: QSignalBlocker blocker(mMessage); (void)blocker; - QString msg; - switch (list.size()) { - case 0: - break; - - case 1: - msg = tr("Update %1").arg(list.first()); - break; - - case 2: - msg = tr("Update %1 and %2").arg(list.first(), list.last()); - break; - - case 3: - msg = tr("Update %1, %2, and %3") - .arg(list.at(0), list.at(1), list.at(2)); - break; - - default: - msg = tr("Update %1, %2, and %3 more files...") - .arg(list.at(0), list.at(1), - QString::number(list.size() - 2)); - break; - } - - setMessage(msg); + setMessage(list); if (yieldFocus && !mMessage->toPlainText().isEmpty()) mMessage->setFocus(); } @@ -1234,6 +1283,7 @@ private: QPushButton *mRebaseAbort; QPushButton *mRebaseContinue; QPushButton *mMergeAbort; + TemplateButton *mTemplate; bool mEditorEmpty = true; bool mPopulate = true; diff --git a/src/ui/TemplateButton.cpp b/src/ui/TemplateButton.cpp index 54a0491a..7b79e2fe 100644 --- a/src/ui/TemplateButton.cpp +++ b/src/ui/TemplateButton.cpp @@ -13,6 +13,11 @@ const QString separator = ":"; } // namespace const QString TemplateButton::cursorPositionString = QStringLiteral("%|"); +// Showing the position where the files shall be placed +// The number regex dertermines how many filenames shall be shown and if +// there are more it will be replaced by ... +const QString TemplateButton::filesPosition = + QStringLiteral("${files:([0-9]*)}"); TemplateButton::TemplateButton(git::Config config, QWidget *parent) : QToolButton(parent), mConfig(config) { @@ -58,6 +63,10 @@ void TemplateButton::updateMenu() { setMenu(mMenu); } +const QList &TemplateButton::templates() { + return mTemplates; +} + void TemplateButton::storeTemplates() { /* * Workaround, because reading all variables in one backend is not possible diff --git a/src/ui/TemplateButton.h b/src/ui/TemplateButton.h index 5ac64e68..e640e9ab 100644 --- a/src/ui/TemplateButton.h +++ b/src/ui/TemplateButton.h @@ -13,6 +13,7 @@ public: QString value{""}; }; static const QString cursorPositionString; + static const QString filesPosition; TemplateButton(git::Config config, QWidget *parent = nullptr); QMenu *menu() const; @@ -20,6 +21,7 @@ public: void storeTemplates(); QList