From fe0abbfa543d62f03967b876bb99b687bdab12a9 Mon Sep 17 00:00:00 2001 From: David Pursehouse Date: Wed, 18 Sep 2019 14:28:32 +0900 Subject: [PATCH 1/4] Remove contrib/themes Themes were supported by GWT which has been removed, and are not supported in PolyGerrit. Change-Id: I370d5eff537a42616df7acea12c2028050177ed0 --- contrib/themes/diffy/etc/GerritSite.css | 29 -- .../themes/diffy/etc/GerritSiteHeader.html | 5 - contrib/themes/diffy/static/diffy.svg | 326 ------------------ contrib/themes/diffy/static/diffymute.svg | 198 ----------- contrib/themes/diffy/static/logo.png | Bin 3701 -> 0 bytes contrib/themes/spotify/etc/GerritSite.css | 113 ------ .../themes/spotify/etc/GerritSiteHeader.html | 1 - .../spotify/static/background-gradient.png | Bin 761 -> 0 bytes .../spotify/static/background-spotigreen.jpg | Bin 18718 -> 0 bytes contrib/themes/spotify/static/logo.png | Bin 19543 -> 0 bytes 10 files changed, 672 deletions(-) delete mode 100644 contrib/themes/diffy/etc/GerritSite.css delete mode 100644 contrib/themes/diffy/etc/GerritSiteHeader.html delete mode 100644 contrib/themes/diffy/static/diffy.svg delete mode 100644 contrib/themes/diffy/static/diffymute.svg delete mode 100644 contrib/themes/diffy/static/logo.png delete mode 100644 contrib/themes/spotify/etc/GerritSite.css delete mode 100644 contrib/themes/spotify/etc/GerritSiteHeader.html delete mode 100644 contrib/themes/spotify/static/background-gradient.png delete mode 100644 contrib/themes/spotify/static/background-spotigreen.jpg delete mode 100644 contrib/themes/spotify/static/logo.png diff --git a/contrib/themes/diffy/etc/GerritSite.css b/contrib/themes/diffy/etc/GerritSite.css deleted file mode 100644 index 76c595a2b7..0000000000 --- a/contrib/themes/diffy/etc/GerritSite.css +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#gerrit_topmenu { - left: 60px; - margin-right: 60px; - position: relative; - margin-bottom: 5px; -} - -#diffy_logo { - display: block !important; - margin-bottom: -55px; - padding-left: 10px; - position: relative; - top: -55px; - width: 60px; -} diff --git a/contrib/themes/diffy/etc/GerritSiteHeader.html b/contrib/themes/diffy/etc/GerritSiteHeader.html deleted file mode 100644 index 89b4db5149..0000000000 --- a/contrib/themes/diffy/etc/GerritSiteHeader.html +++ /dev/null @@ -1,5 +0,0 @@ -
- -
diff --git a/contrib/themes/diffy/static/diffy.svg b/contrib/themes/diffy/static/diffy.svg deleted file mode 100644 index 3e6e6c28d5..0000000000 --- a/contrib/themes/diffy/static/diffy.svg +++ /dev/null @@ -1,326 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/contrib/themes/diffy/static/diffymute.svg b/contrib/themes/diffy/static/diffymute.svg deleted file mode 100644 index 6833ba6a9f..0000000000 --- a/contrib/themes/diffy/static/diffymute.svg +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/contrib/themes/diffy/static/logo.png b/contrib/themes/diffy/static/logo.png deleted file mode 100644 index 989c30304c73a23e983c9b3eb922d1068e6c0253..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3701 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 table { - float: left; -} - -#gerrit_topmenu > table > tbody > tr > td:nth-child(3) a { - margin-left: 5px; - background-color: #FFC; - border-radius: 3px; - padding: 5px 5px; - border-right: none !important; -} - -.gwt-TabPanelBottom { - background: #FFC !important; - border-radius: 0 0 3px 3px !important; - padding-bottom: 6px !important; - padding-top: 6px !important; -} - -.gwt-TabBar .gwt-TabBarItem, .gwt-TabBar .gwt-TabBarRest, .gwt-TabBar .gwt-TabPanelBottom { - background: transparent !important; -} - -.gwt-TabBarItem-wrapper { - background: rgba(255, 255, 255, 0.2) !important; -} - -#gerrit_topmenu .gwt-TabBar .gwt-TabBarItem-selected { - background: #FFC !important; - border-radius: 3px 3px 0 0 !important; -} - -#gerrit_topmenu .gwt-TabBar .gwt-TabBarItem-selected:hover { - background: #FFC !important; -} - -#gerrit_topmenu .gwt-TabBar .gwt-TabBarItem-selected:focus { - outline: none !important; -} - -#gerrit_topmenu > table > tbody > tr > td > table { - border: none !important; -} - -.gwt-TabBar { - border-bottom: 1px solid #E2E2AD !important; -} - -.gwt-TabBarItem { - border-right: 1px solid rgba(79, 58, 0, 0.3) !important; - background: rgba(255, 255, 255, 0.2) !important; -} - -.gwt-TabBarItem:hover { - background: rgba(255, 255, 255, 0.1) !important; -} - -a, a:visited { - text-decoration: none !important; - color: #3F4D00 !important; -} - -a:hover { - color: #5d7200 !important; - text-decoration: underline !important; -} - -.gwt-Label { -height: 30px !important; -line-height: 30px !important; -} - -#gerrit_btmmenu > div { - color: rgba(0, 0, 0, 0.3) !important; -} \ No newline at end of file diff --git a/contrib/themes/spotify/etc/GerritSiteHeader.html b/contrib/themes/spotify/etc/GerritSiteHeader.html deleted file mode 100644 index 8af84be723..0000000000 --- a/contrib/themes/spotify/etc/GerritSiteHeader.html +++ /dev/null @@ -1 +0,0 @@ -
\ No newline at end of file diff --git a/contrib/themes/spotify/static/background-gradient.png b/contrib/themes/spotify/static/background-gradient.png deleted file mode 100644 index 3b9422eaec7bb1c8fbfb24cf4612a681ea933ac1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 761 zcmeAS@N?(olHy`uVBq!ia0vp^j6i&XgBeK5=~N#F@@oTpLR|m<|If_K!ph3R#>U3Z z!Op?S$;HLR&BM*h!^6+dFCZWwC@3f_BrGB#Dkdf-At50pDJd;2Eh{T4FE6jCprE9r zq^hE#rlzK$p`opEY?^?d|L9=N}Ld6ciL18WJ8J9vK-K6CD#D7nhijn39~FnwpxCk&%^^otvARpPye; zR8&%0QeIwOSyfq6Q&U%0*Vx#=#Khd%*4o+8(cRtM+uJ)~!h}haCQY3(b^7$_vu4el zGiT1cdGi)7T)24g;$_R0tysBY_3G7Y*REZ^e*LD68@FuPvTfV8ojZ5#-m`n(-o5+x z?>}_t(BUITjvYI8;>5{Qr%#@4+Q=lwJvmJ| zd|nMJm#AjgqL7(IqFSLV!xo3lt>Tq3&AhfKbat7nRq4xXi?6S*V`k%(G)uZNqfl7Q zccxkLwK&5OYdwgwfHNTu~<+n#y jXP3*{)&BhUSpFAtJ-58mQ?=d-kV`#X{an^LB{Ts5c{Lx; diff --git a/contrib/themes/spotify/static/background-spotigreen.jpg b/contrib/themes/spotify/static/background-spotigreen.jpg deleted file mode 100644 index fcc798330947dbc6fac66c8792129a4f2a5382c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18718 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 IQaYFa*}Yy&jQ{`u diff --git a/contrib/themes/spotify/static/logo.png b/contrib/themes/spotify/static/logo.png deleted file mode 100644 index c231031c2971e961d67a45478693b38e18d60179..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19543 zcmV(*K;FNJP)~>^P~o3YSF6 zNhP?-5f!^A{Qo<#uz_-7rz)rlh#%x3;j(dzaq*DBA_$>f2|ZS;ecgTBd(UI0yR-Rz zzh8BE%DY#py#h(z5zWk*)6>)E?tJt8-tF+rHxHox#s4(;@%>j1K6Glm#=@Y6=LinL z133e;4wxHM=%NE0kW)hN9>D=^Oc+!i4gnDfmG_7#qf0;&Je&iLpKNjb_ylKHJ3RT+ z6tk|w(UTn}T|$aL2mk_r4se09;&nL!aC$DwTwDfH0_W(wp6`I{fRq6rxMv>+hZHj$ z_+U#p*a4NC*Own6g<;JY5(s0=|~-Vk_SpJGm@iiyhfe zKJC{9nY^`wB{^5C`&SCrZ zhOFitPz8@jFeQ%dT}GP{g7bh&a0D#KjxlK;?+^)Sk69#`IbR_0yG*1y9Vfxf@<)E= z@1Fgq0H*BpVg=-7K(bHuo?jc@a_uX_r_N3qEH*V9QA0jqrw|-jFoX&YDgx%jqsPCo zj(h)P1*gsm%Bo5M<(0`Y$Qtm4)u62BgMblPz*5yf?urPCK+&xL&>K-I*g60O zOj(}bBim4j_HvuVh$fJ2^(7(qYYBErC1l^FVTVHx;_v*@KUw<|5$KU$ ze1N+;+? z2)IJ6AaMj%0gYF-BjyV$1!rK@f$TeFtC)&d>#Cwxn(pZ<0~62j8f2aqFxNV40@_Yk z$f;;dChz3>?AfQxt>~~iL1prBdCBbE6Yz@b7jWRZ0hX3b_l5#6DX<-!GW@KIXev)u z<>oRXe`AMA7HJiS0I_bi|BaL zWofD7o?|*?IwjLBO<|A zsjlP+4GNBXKfR)Cl@Wr8hzdSqJ+hV@r>G!G!bTpZHx|(|L-j(C^$N!;JEm4a7zh~7 z1r%|0Z~dK$#C1mO98y$0F$ufEj7rLW+>BibNEIJ~u$Pi1lIgQiCF&8;A>e|D+)tl~ z_=9^_@c#erDSYZvD|qD5F-8qVeG~twi+d+B#k5N_o{4_zh25wUIMq`fjcBVAhb#8Q zI{*xdF!EyBE;D5KHy@t=p6t`jgAm|cfP+{FQwC-+ga74XV1ep2XU}w4Ih&B3GLIT& zPy^Y(Xe_tY~&orGZr=rthpx0v~`fZSK#HTFc@OiaUJ)$ zQ&3jIprK-a`Ro;}0ip}qivVgYY8<*K9F_EUC(~=KIR$b6?*GaJ|Mg?1@SDGN6c2uF z9ghEbj*+rMN_^1?7?qXlP^on`p{ZofZA^SYW{;cy)rUsk^P*zO%YZEGxN~p5?&X}oe)Lj zjeLj;`=w;V%eiPkPeA1hcq<*>hx}I!JxQ!NiE|Mkdu8wx9bCu+sLPH(2gTJ)9WO_R z%I0AA?|3AA)urQfuE$p*KK=)1@Ead`3ZMDR8BAsoi9XuIc{-=yR&k=JfKGv0ktt8C zX6(PZdJ(eZWrhsz{=ndMYcby3(E6t*ogO=90ORN60%Br6>O1rEqQKb$n3EIM=*U1k zHfBW;F$p9x5_Lp55AA1co5Z4OB5Yw$vY{TE4%w5ziPyRW1~|xledb=TD*$!goc0CG zwJ-N@L6{RJ!jjd*!Eg8Q6)z(I30nINosR2e9|pjgwTwUhvsL`&hmYZb2UZyfkj!72 zO>A}qYEyaCw7?dfwxX<_ZhrR%Mz4GEu;gVcD=n+<|GnXV9;15e;$UDR6B-(A)X(S) z(T?I<6D0Dc)~EQxzw-oL9ekLYLc7_K9e6&qa*R}57VKY4va(Ocd;pD)yO?#huyZ!qI-1+0SX=?^n~M$%FW1f{ zWLaT*f{H*CX0`i8eM!XPUV-Y(Tjqf`-@1eY*9|#mGPXLKc$A$#Z0#l4A%+hGLvz6l-JJf8mwEW6ByK1XK>F>kgIPw2KMHPEIhJ%5OM&d_v|q zeP)KUXFEK3yu-1Tj8Gc@i^!ZUbT0xC3Zfc_QwQfosf>{^Kk*ys@xu9+w{LQL z{j=!%*$XkG2hhCtw}(GlZ}IR}qcWFA2bp{q7Nb z?MRCNW3j@5?3ZCtC^)b;VE^7Bwrr`fZ}$jS?3v^F$;_b+6@7CdXe?)zxK2R8pR$DS zi1XfvCYL5G*O|rDsm_@Vh_d(g(osuuENq)wQ(pmxqKEEWcKFdB+eV4POK2W{ zLzgU2p!h2@I!ssc&;QFGUHkt5%mAcKU`W3CUx3>(fP=kr_hC~uGTQ|h^4S6MuVYB3 zty$ROe)#0nV`(U~)>{M(nVy@9V3dm8!V;nu1@#QbA;ikW}pt`41 z^&!D~*|*Ulp~Kn?*s<09Fn|wg43hgB%#wElxUF~Y%>?E1Y$G6hExhx+&Gl2nn-)h6 zANZQFm=;wrJMPW)j`vp(7`V%P+NbvS7;00wDk`bAkct>U!b1oCP?H`E;0d63m^cXC<_4LhXYEd>cEKfOJ=~ zHev!8%-+VzsX!qn4!Jt_V*62 zzx!WLzRaQi#%=`OvL4_1Lb9?_f82Ln{(<$@(@3K%#C^^{9TLGPzIZZ{vK7$Kp)J=; z+eiSUBz^B6JL!C8l=e9JnS6O+m4-^m}Dce~s_Cv%w;|0J>*x8$6@FG{uvid8u#aS3?|ATa%$O-UTJ z2Xj(~^Zq*k)I}Y+yuDBWX`h=^fGT+L3 zo*Q^CED2$I+hP*nn(hfrDFgJkIA|`Svk*05V1gF%o1JIhOr$ZkSAHj_;o<8B*IvIJ zZ-4t9yyJ(r;NUBR-WXk&zT!mfZYVJ6#_ta}1SK}U=vvaReDcxC`1 z8<`JMJbP$UhirTaPlJ+uo^>XM%N%Xr#Rw$9+?-og8qF-~1*j7yl$fo~Q=hOOK3Ez{OxSX1m& zleTR<5URar&PsAm6G<*pbNlsWPmi!@21RB1Fy=6Mrw%?~h* zyf;5*$1Av5>}Z<=bZwUuXh~D4$h86@Gumhdv@tv2Xb3WK)Is!AOSWzT!7TUJ%nX82 z$W?!9LgSUq6S(&p3?3CsgW(7VU$+y#@bf$Irdw+ELxS}80#fgao|%#a3HXzpqYUe-?c*`i;K?9h!TQ35LgBKa+fR1x7$I;DmPcXI`NEg|Jhl5`g4>XiZMrZ$Hfuw zV?VNpYEYSUz`nMYlbEW=w!t2;PY^ z0^S%Msz*w?RP7yhY^$+2$3$XA0$sUlB?(c-LQ&74~_BALlH-g0pE55aK+vVueoUprpbw$M#b??*)&@5FA$h& za1#a})j)FT1~cqzqF>J*+BX{zt?B2tX}@<}!Z`P7dl&l_px=3sajxwF_Ar4ZW8eGC zeiyH~$;Ro=N9S;t&g&jIxA}ndKlKa4Yr7m58hF+GL<9^CJ>Z~3S$0LLDrBaDC*Li4=1{QweJ=L|p_3ygBz$I=y@$=3e zhfUgK%t2aaT^fgnVxX+yf zYSG840gzKEzsL-g0A+TEC<)5SL~7}(z@ zCiBRvND5}AkQFInR%#v2kYEavP38sxlbIT^H0LyofLq=0t8aZ9+?^L4#{*Vid7s1 z_dl?LuY7$KgOR3JRl;DwX@RH&1%jVNU`#=YOl&^f2a{^WYz zH=GYN&sTx^o<-pp2-TQjKIS6QIvOsLfKuHhP(NTMLjn&S8sou7)(8j@9i6cno!EiA zLBO#O_0>s6JpgYKTe+WiR0O5BRiaCoBB=9@qFmhwklI)xz7xSI01rVyQ7IT5#X^F| zYM#2pBxC{^DO(*OW?Y1d$Gk4OjK_|T@z{wm+!q}7?HJ)@*DYY%at#L%hyc)%b+i1P zEC$s%`c$Wq_+7*mM}{Ng`b@A=M4q;ic>`qb32<{qMb*t|8P15AdOTV5^m^WBTE#_K z^76J~zD9MOxc+MMc%P6NqPaff7>Ssp@MVvKm;q0>|z zeZ_ME#Hm9V5HJGtEFQnuik=v%B5KB2MqN8g7N&KT;w}Ls08g_l*JMYK`cfW}z?e*d zsut0do)mV-0(1hK*b|^7z(aqtvRO)GbAsFXY|L6BYf{4FC)e@l)9V;E9xp$zfNQRv zM^l>{2pS|W;&Myohk)KPJF+9YXBxcZz7Y;SIq`+I8BGoSTbr*~KBue}@MNKm9>XS~ zjd|ZDG2~%ml+76D8T$14{Z@L%8;`SbpOrqNf74szY+ zwo2#JA8FzVA__azsRlz5gY>mz=f?4SN5akoY!!gI2Am}ya}F#(MNk6v5}=<|3`aCB zDeD7RpCx?$|D44~fA=Z;`4>-PI!(n*#Ndi(epFIdN#(Ndi{CUjG29F*@v2T$S_p;f ztond5YL<|}PMEySSlpzN9>yNa&%)V$>qW*n@C?Vfte&xhy{~0690p z^(mTsDh_p(wh)m7j4=W*77=hdHD;Kzo>kH+ugKz1T8biD7#Om#jMomx%G0LXDHxKX z*+Z+tk-4~a9s7y+)?_$upmvtk!F_h7hZ4Lh4m&bbmlTu~l{Fr8mN~|Bo!yvD)pZ$4 z;A{yFp>Ya&VRI-ub@sbDvKRHz!%wc^W1l>VKmWoC&aAc^s|o>?>XS*WwQ!k0Z7oj> zB|Of$8(_WsNsJ|DpF^3xw8_TFz@KXe7=5@0BQa`sIg{wV}B)evO6we9CLRV z7!UUhH8#%O8;!BS?}E+e8NOuhX5Z&1Qpca0WYlW3fDx!|oUYBG?h8f>DTtDcxMdV@ z)s7nbcQkm(73cSRYFxd$#+BR8?{`$#Iv3bCMPRy?%hCYI96K?7w1fbr1QUn3&ynG1 z#(vb5W1CBOUTdL&j=yC(15hgee^iUe3qZySQmY4m-y|LD_MRjC){BI&6{E|u9|sm? z!!gS>{c+xBAYtD=QN=CrgLh0S4jx!rZ?Qg!ICXkT zW6RecY2h3FeaYfV|$I*%dUJ<=`9Z(;+4?K5aFW1pt-w4z2@g2D3wOafTkLh8E&sN?fRx``Pd_n14Q zfC-0tE`vVs?z^;ccmsMG#sh*61OgDmwZ0z7XBW-j!0Vc~5oDG?h0MlUZ%+eUwTs4m;kFMjy znT~AhYjNaz|_vb`%QDk(&C8Y4d({f?fv<=iQ(p!n_G<66V9BQ;q>|T#E}UeKhYw0 zKr^E5TM~`cH9^=Zv&NYMS$~rcS%M2Hb`sFk>PHR0*B%|?;X@O={^mvOy<(_&kP?mK zEJRMNyR%mE9;a=#7oA$MHRz$s@WE>~je|(dnGsiAkZEpmj^Taw@b+~$1;jljQeMJ1 zhuLT2acF|KvXmWXTiZ^hg&;nd2E(L|3wImRPLBEnE3a45p63nj?C5UeVmuzyu) za6N(SXmE1TAq*U*V-Rqk{_I)2_LVKZ?d4lAi3u(#(#1b3zTru&ikZtDG(RA6WZ_ag(*rh)I^DYg^GnyCiSv=}cT6S6#h?>#kkK zs7X?xJJv{=0NBY|i4@Do#E1lYRJV%-YsVamSO-9PoSy}U)=vr@cP+!s$gH)N2tl^u zP`2Q#!?3Q&vmF5>7UR`%!f1Yoy~6>n+P8#Te8iEbr+E75H9Y)Shsh+v(@jATh|$Qa zZr6d#?CX-XfhhW9HE}QqIudZ_`yLxEu5iwL%B|g}K{?7?3w-yYE|-4@uEb(v~!hh=35_p)41`q~#bhL4!eUiCuoobZ;MpQWVbHI&gD`c>39 zm!vm$3Sg%tKU#u}<7$Gm*M#UOmQF3EmCPMO%W)}RQhA+M3fR4K4zGCmPTcl=d+0^xyB8IS}t3AzO*KGquWUR*Yhd}AGuByi0yWp7@eO7%KaRmtJ> zT3aUrlmI%qo*;3uD9iP|khaSS%4QsJ34rQ$P7+@;&yYhZim-8 zte#+u5YSqHbqE9<*#uBs%xM+{lqr)1Osn;l7$X7^c}=4DrfE;?p8;VE$2pS?d5O;& z7~na!dP&K=<5>&u305m%$?=jhQjCe8gO__mfPJ%7Q0Ovi1ik9jJMiN_xC^(ub^+U# z^k;Om#Bwg`(a!6q|C-mL)GQ)9G$YJNFH8& zo?gbhyuAQgg|abYi^mT<+D3poDt8V)};#^EPBI7qO3sBIN5 zjoN9I$*m+u1;j`uCaakR*+lWmqiosYRRK^3E=!<$A!FUtVAkRC_RVjfy(B<7muVs& z1YoXF9gd=AF94EJC=tUd&_vH5I_}M|q7}p8bj4z?^=;JZYRn3)XOm3Ngs`S2*IF&s zj8d+{<`5&tSMV$FsqdBqF0x8;2}oE*Zj4Et8y=iREN8Lfy)7poG1(v7@iC z3JwVb1(`}sP}sG50o!)YgZF;(BuCMFP&>>bXqo+HZI>H$?MoI}b5wD3P%{Kh-qu!+DakoF z@&^X07X>PH=J!%(eYQeVVAM`hF)z^=k&x7KXgB8r7c4*s1fKa0c><-%T@+o8&69<_ zIQ$bh-lR(kc5%0uFVbbwv)Qf4bXkMnBf-XVtWXdm2*9a`#9Cr9h~b2cm1rPpY6Ss! zA6qNL*qUrRzcj>meCKw&<&9ghYpX}n`<4Z4sY8+_uiRB(-`*j`bg|kxDI?+;Drez} zycQ@DOI>@qe^_6LY_5?*QX-P$`6}UZK>72(Ic+t7<)8gX^Xd8d`uc72p!gVEMUa>t z;|NSoz;@B|JO@ypb55l+zZfx47IU>|6({Ec`+(+!_I`N{V{QXrUa8yp!}=C3-e zXBkWh8LT|ifW+t-f>qEIaqQ?i{`B)}m_}E~EN1NA9q{_sZ9%5^PrX^orDVCk2Hops zWlva9p{DgXp{X4MBpUvXQrdFTo^Rvy&@cb^#JTfJ;((!zoy)$2w+T(A6*?V~R9kwRfx{Uy{5n?A*D4ANsxq zM~+OeJ`on*vulXqs1oH5peP(TZvkCSBAU+HgkeQ-Re}J#GQ3v)ixIZWx#*iN>pv{8 zHqNV?SiRh0LT|IG;Ju{bWwsI=aQOKFM$UW1=JtFBWR@yP-IKGfy0MEHgGNNuahotd z@C0LRnGO)+OYj7a=wnrhd!5WO1{GO_Y}9p0M9oT!6#-E3Ga(4ms5lFZCoRU)gtcjl z@i;;;uL-&yf$Yq%HMU~VaavednT{+9(XX=Cg2Rp>YF!j&ZgZxdwKk5_M~|PIA=6Og zurwFwJN3b1+Y+;u#V4yGZs1GCeq*A(%fDL{G|1kwuiQ(GTn<`Qpu*1G3q*X&4#Lcp z6JQNBs>f+rN6^S4Y~E!_T6XX{t_HPR!A(n8PN3e|C3zVP9G+A_=1pQ6i=bKNv9tn2 zd+mcu+;T#*rLUFh?drDh$m-Hj@s>*?$Q%u5S;blgHFPBxmE=snDUh=0^hwy1 z?AWPZ4J{ct9&aij4S)rpg>eq^vz<2}SS_4y-DdM$HkN!o`ynZ5EoAqVHfEfgD8N+b zo3_F_E=zo6rnu(pN{O@7O65>LSj;6eK0B?DM*T_{?dg>cUweEFM^|RNwr(8Y%Y&RC zU~#l4Di~*x4}V40bp!<&fufp$KAX5nc5}R++~1M$)Tl#I)LH3$8NW@4`a3jxjBGd@ zNZ#eyNry*|P4U&o*75L>2~M5ukew&Hby`h*5X7J)Se5e;&Z?YCPN;?Q<>H=bHQJ`5 zA;}P&$k=U+)D2UzfQSNCBi^=yX5%;kBcNp<9g_r>eDxIoagzYaSW#=nI(mFtulUnS zKY#LD*!aTG`K>%(0h#qUJ@(-2%XO8NJ@kQ!0=%|msFqx$iM=)V(ySDu>56a)7-!D^ zWC7U>p*wPFf}ErRKvsiL9ZY9((9l)0C{iz~8%~!Za8PG@P6iw!dim@F8B;$yEkZ15 zQIY*slvGi7Hq$C_Q^uW|^PT!=Mj~s`H>kOsYqJhdotoi+L+5bh*p%02GqxDYppi#X zV493IWHs@Gsf8UTg3qFwIIkw?at4lbCCIBF(uujEtX^vf&Qh@0e>_XNu1Q84t+r3Z zqhD*w3Rss8N-~V@q0HBBZ!>Tja5qR0CSadq(7sQ_?A!Gin>e4%XULELhj_Sa(`rnB z7zqTjD!svy8+ENFV6(bL=NZ94&VtqA>J)T}#xBrBqo8Z>UTta0r%zsbXl(T3g4{ zU?pyumY-#n<4Jd(HO~>8$Ir}=<#Ogv+Tu7(umE{rR67E*?Q}W4L@0whf;|(kZRg~r zM-kMjy2Hw8!l~+DssRA9xu;Z77B31euio>4+2KuONLna2$kJz?qUo4Dw(JA(E~^x7 ziNE%_Z%oqm(cbs{##~HoB@dF<*>}7rE^$5_Q`;eq+uL-kLl;QWKFD#)T<<7=gv4Oy znSW?~nh{f?`(QeYqVuWYf{yjzL?4q#84GJuFo?L8vREG-wA6l12uMh&Q${5qtW>_l zUe07StlVWy2!>cw+p;79S;!Xlse$ZBeLPRUT_XEgi4Zc)bV^{z_)+WPz*rGHM+d!v zJViMNp40CmnU738Xo8htM7H%skPwk^=*cyF>7jEtc50>>B$**_ZHgFo5m}jc(y5`R zxMz&IXsr!_zmt7I;dYRhyls_K+A1x0I%$I zYPCbkf%}ACKZoahlhX|%z3ijk(CKfoCWr7Yp^(9 zBSW)GR7`GyOk~z}#@MJrvB>6>G#*#WIR+NQ(&Zae_toGD6VILVR4tl{;wp9I^=U+2 z#penjH*LGej5!-DShH*Zy8sh?(7;Eq*x2^47E$*e%Tu&_+SolH6y3E44g-%}y9x6t zNzVnex61vCTc~H*UB18zg4Y*7s!_B%8$Xlh^X+*)F?`IIQW63prX~e_gF~1nMVk99 z(?0?xewCH1%)gj{?JsT)~chQl?Ocaxw#=QKVMOo8!ZHEnX5S7{3s}M z2!OIHqG7a$xr-RpfuDH-h0R~GSD0^Y(!o1$xq=LbGix)fPt}s#Q6!a(*JZLOL8^0{ z%{q8^0jXBVbDl;fik63uPB8EtuG(8;e&|h?v?cQ}Y62w@c`;FEmqc%GQiRr$Rkw)! zPFrDmP&*dSs;UwlHDMXe61Wi0xz7M-H!)J@fC1wowQ82xPr;$bAM681``xW>k+<~< zO)(j`4}c!H-c|I$V%fF(+jl+d?}|2D`h2**%YJ81ayZc6%eCe2VELO0Y*c-b_3k@o zfBet>Q^kj5)JScd5iOM-fEW!NG+z>;8@db{DyraB3^m_j)b%d{Pej;574VWPhIr)Y zSo0r2y{&Q?OCv`yb7`(d(>PS2qV=<`oYskzZ21_;eCm?XhZmVTqpjUIsyrD8AiMLN zEmG5JmAc^|@cP}`C3s=q&W3EWHcl8%6ZONBXEO!^sX7NKkD*oF7#u+GWnWw>K0|@y zrw<> zf4dl^tUTuj-rfH3CX1}auv0{}gFWkIVWXmJ7B(%ca-SJndO3&(du|glkG9)-tk-)9 z6!7)#+3$l*n2&)H2FP-sa@JuG_zWN8t=Y`Tg+S`G1y6j2$oYL&^wAJ$nd z7YGoNG80kFJV^)9%u(_blB{6!?NY>Vkcz?xX>%M&z5jhL+1+vlip!Q{vSoV`rAMHB+2*3QCmIDP0n0X9pytQF~!7O(O=Pl?v9QyQs)0v|xdV1)|% zcF*Be2j+0)jv7mIo*{JhLV_)+7i0>92`d0T4XF4CCsRAf!*21*y$V965XkxQGU`-H_G3RnTtSzWJLA#-gV#$r_ zTQqSrW;ssD5nNVcBLQg0*h!|YD??e9zXc}%K+xPm#gLx2>H-S-m}D5a1TIUfgJX-z zK3f+D=RrBbE3Y15*VY=|ThV8y)?9F0T5Aad*|(j7%=AOA*&hn1XoaFJE+Y|QG=7=> zTfs{QE7a_ur6gmi(;A`v9MkQr9oV3*PtO>%Y4b4ySCJYD^P(7}iY{yS=^Mt}U*ne?0NDO7J~H}msrEPS zT+%LCibqvenGPN?iU{i*A1rlexFSv^jg|qJaggDt*8v0uS+S%psejOWOuNYA%4ra{ zlQD$Hiiqm;?6m9Hr{)-B2dl(J5IbG|t#C-G%C5zYwH9k6aNA@eA%yjWPSw>xi!8^X z50MtyOmX(;i55Aa02Ed}Lti?vWS1fR>;3%TAZ`L_FuiO% zWg=TemlO~68Zg?bUGKj5{-2!weE=r`ObaOG`b)_6xVy&^{aUGa_v1%wob>V<0sZ9 z9oi_}>JStLnk$)|Erlil)anMwT8Rys;hvS{<_Cdg@Uw}vQA61XLMhHP{eNxRA?T}q z+O`DFxa}z3IVToKTie6tQ&$y_y!kX#1OypT6POi_F-11yq$Ni(Dl3?*l?b9f@F~e> zI8zZb>N=oH!m!zAb;5gW+tT3G*Uw?^whEr}vuGd_<3+#TxixUG95e4vSm_+if7?<2 zwtA|%Vsll(6pdwPF>xN_7RIn9a?^U8&fyaT;^vC0eS^h;3q-^e{j1l~b zV)wZ~075_5;9Wftvk$1gi)3Y!=ko>j4_$%j&CAu(TZ!<3gt*UuVg)pw&=xvmj$Z4H~o*W?PC)SE%yjEzH*e z4U0Fa177&+hu}{>{3L=q{m4`P+Ds#K8iRgK07gpn#;ivWIMOic;z)CEYFEfX(D+DVnN%xa{$x4TT4NsbfH#T({Cw`OJq{zi;ftX z{2gi4cJO59TKZ{r3&^@P((0f6&-nWVkej-Zf$aFg!RN*3(iio5ptIqF| z;u|b%b*BNc-?v}JQQP57p3i-KK=&-MMOcySm%Y)!(;ssYVl^ zs{~6(7~nOTI4~4!ZEEEdJ-ja!=PFm3Nr+4`*8~PwR|H#GIm*`IU|(AW3pC{`5Bic@ z$v#pPn47W&OIENsZ zQnW2rXe0u1b(-L({`Y_R9qYFPIMvf3H%nw)F7AMy$XXcdU@uzd&b}kw9@3uq-`EVM zmt7$C^p2js2ktMtBJ)RW-rDc>O`ea5^2U7VRW>IJ_pGk4vHA?z7h5MQkGhYnu5|? z<<(PJ_c77nl*k&5ipX9f82F&mXQ&zXR(z||Waeq7Y%78BS`E)5CSz`4!t8PhbO;WP zx?gAEg6dMCuT(|njA11%pB>9Jwr_2)xKNYPY|9Sz;zCUJ*`sMZDyRNSHO{mx;2^n^ zmU!&E`X66c57{<(KJ06)KM#H;Ap7^-xQep}Faogsr+=gQ_;9|yad}>9*9;p^=lh@z zx;CVUP6H{*OJ*u=2X*=fPvDd+d{2-9mXoM;Pc>;-rAKAaQV`4Kl5wH5Y4u)(1--JV zL-7Y{C4}54+}Iow0M5xm*~nx;?`!w)uEeD_6_nNGd}bmsS&s9z z#c;};BY>h0MqB*HmZny#Gn_6w+hxhSbjflo(Ne6p$RBy}txhuH6kmM*PmJHH#+%xvEaa?!p|E7%=f_sU<3M0+oR#s>UiJx@c!RzSaWkXNCeG)MUNn#{ zU(o-X6vos(_iY47tFyD^9q;vTsrNP?*|}WNLK?g`Mxdc)7K@9b_7xe_L!IpoB9?lq zmKNX?D5)e5bG#k- z=3&ibZ^eWy;3MGfk|GI zF8RUwiM;%apfM4%X&fb0wFBsJEs6lEvJ8FGvOTzj?0uH7}Z zZyR9G-sU`5gD|%RcdL#YNtIyb)aD>G9ek5#bON>v021x5Wr+QEl>qa zW>Jhc6s?^GJ0!^Pq<(%sqt0sA3E0oBN6emZKlLAl9Z&bz@r4h_%YZB_`LiDyeH?Xu z?eao}%AaqctZ*FE8tAp4RUIkXLy53W z9S|(xxYNlR<0b7A1-S6+U!3a+NYGqlg%R@^yc zaRVg50!jqN%%xbgh7M-f`Ai^W2VU1`i4EsUHi^8@^!n(O1;wwL2u3TZlH`R}IRf?M znTSDl_y5XIOvsM^x4pBAv8%f7_lV+e>ngIphW)idh4rq^8$Q7%_l2-qUVbbEMKU_U()t1;nAjc)E;6LgrGkJ3dQ(rS(Og^f#=WD$sI(D@d%9 zj4Jq)Dg+M?RnZ769^E>?kv{CaMR{vqwNi@VN4q@L^1e#R3|`Gy)avD= zDPSQ}Ss{ajI+tAqPI#511~a@!XP45iE`E1`OMkvMHVzSTbyx!^GG8W3aWAJe-661r z%mBsO<534j;^JvZ8As7I@kO9=&VCcfpd^>QLrFEh_&o(KyP}6>Q$87P zLbex{c&+(~LE82?VnkTMuoyKlSz5?di}xwWz)5qTvT%s0a)Km2YYgt<^9t1h_aC{l zy7GyK;tK#~0MrWO=?7#3WFB?a z5`W1SQ8E}rY=2}1cl^yXcJE`L5DBE`CCC)mKn4Vmof8R&i&N6Dd?{+;NPrR0f~lOT zD&9!IOMBCd0&8}LM3KOXPC)bmdK5`)QrdLDU_d|q{eVqheHFW37;4W+c#2ZpJi$hY zaC)w;lO;C98bMOjA_(3?+Lvp=X;FDO?PCH;pOTrimTZ5aMhCR*D2(?5m@}*D={*_= zY4DZ+rr!IDZp{^+D8KDn#j3Y1bK;mz+=l4UpRVxWKh9zA{saJt-x0?cT98>ooj}R* z+{4a)CPj1ih3yB41SEkfJu^#eOzX_HH^Gyss-l*H(Xz*Pd7IJ15+aQ-FN&&KsdPMTC1fKZmrBW}zZ>@sU*=op=PS$&rG%nn-S7O-9Paqq99}*kt_9f{ z1tyg)8ixu8I2KUrG@Zav2Q!RBN|QBh{1bJ8;pgvImPP4XT zDu@byl%8b1|+3x7y^dFfaw=;%TXBjz8R%sBO&d5FTTkYpZTlqA1rj^=T^O?0X7WD^Nmn3 zwr}m@NB_ZkP6K7e63+m<8cEFkzzGZ~`YV5{RD(&qGz4gQ*ZE8hg{&u_(|Tdjm~*Me zSu~GcgG$%zd@1m%AJi3UkySAyaOOi`zWSOL)~xM_#Z~h{DU(v%UXyj%BSXJSpgvZ0O`u82 zlROV9S>-dM?9K9JF1gs_$`4PV4ie2I=RbXgLqw!;V15G8DbGM%rL-(&h`}dir}XD* zOi}T`pWHb28G&&&x2nGRfNX%w&y!~yJx{)K-p70Q9>UskLJ7~{5;&a-o@i<+^U^9? z-p-abI9t=RU?!m`D73PV@;wTS`7i5HE*$~RAckDo8OU|^9u#PWR-`eINo)BX6o3oQ zCw%BvCei6S3j}vk2Z&Wo72{aYFgWR(f`AB0fY!kLFv3;5YwO+BCw}u;X3&VKx z0@(mbSt9fDVv^2oy@T&@6Ik2o0!-%f^UhQ<9nOGJC>2oa?v(i$S@sBorV>Y!Y^<@X z88EB{8B*uIQm^+WsR?GKjZOgeFtLkFawCHr`kDG%Sv7;ys+ELazhM$(+ku0nTY0BU zCcSzT2*fOEyR-^$DXpzPA5cc#we8;U$tNGG_W(GOB_8ve8^{L89Lf%W<*n6pIW6Zq zTNCKH36X-i0fqCJQUlY>l$n7A0*n_hlnctwf*NRJYhWclgCap{XH_=GzgcI^@Raih zXMV~ka6w_s)#oAyUS?r{G68Q}0bFz41bV#!wMfD$Xd0INPo(vINOK-B?z9~1x_@wI zanpT&I(STAT*zTOJ%DV6$7>&PafUt)k;fB}@KNW`@}(F;*dzr6D%oW!C$juS0nKM; zIaW|SWEhl0Y1+L2mqVwYlk0XQ-^F%@B!M2B1s0U%{s0t8LxIdVV?e4E7IyyZ&jb5* zSNPfYwo`aqsyL8TRY_0N>T^-fjX+ANLX7t9U3T+J)4~e26GkO`O^i8lE7JIgOOx#03_*HjQJ5z z4PyV$4&1!?&nkm)sYSH`vQb%=T3*E+az^_scR70Tj&cIMV#3aRjx)K;xjJhAA(K=j z&1;lCG67sRO$Sn95973_u;jSV;jLVxemeDjvus>cP!`Quqs8WnAgH4OvH|i$BxM)C6m@Y{`)vBE>+;3Lqy~MP zW8agtBX>pS!-S<(5u1d);2hwhcQ0o2mnhpFgUX}Gg9Jh%fil=b{V!x|Gw;8%CJH9o@9W?LY^_QL^8@Se{8!2Tz5koQ!D&vGK~XFM zmY~#%crhT=jSUeU>55zjI|mXhLAqVWaT$?^z7sJ$E14aG(a{$o^Lc*>)xfX*S__>sT407Wn@Lv^upAlGM5>;q2$w3TWD|H9+R#)$OV3+n z;-Z#XJl(R!4JEEUAHvKrV_ zROYl!P8-^&lrl)GI#pIDvcUDogreXvfL;UBB@(8{qGt~8pU1cF4>)o}CE5~mt{HS> zMh!ksu$k}E0WQkDP6on2ayp0DwD25m69{MJyjbOS=myBf5BYkJ2%y%+p`*k2zAxx| zV4NF()sSA!zjP&V*#~+U22zQahsIe5okX`dr1FR4Qi5-8`gBsKpGC4&(WGb<7%|Fs z1ZZ;bc#RyR)h)61JjVWg5&by>j!ZhLifZ>3Drc^p99ku;0_u4n&f}?gm_9q&gKq+u z&W$%G4rAkoY$W8#tFWcGMtY0a_Sy8Cw2VJ@)yJu~dQAu27NL;tF(d#+R&YprOJY=| zg2UDLteEb-*BUkHebPFr%sG6j!lG4pfu7;C1G2OFuO5sCzBRz}FWEV8Nw9liDk<{d z1kSLE31}Vxp+et{==O#G;=dPHMqjSg$*ZW1glvF3c_?#(&*b9#g=_FrYd_rn6nEnF z!x4Hbmiw`~>5yQ7c1qR?cXdR&be1v&8oxKHQp-4HN5j#yN;nC0WMO(T7U5PG2}z4_ zNXO<1|Maa9o_ool%Y2M!1YI{+DOh$(7y_|Ezr%iWe^1;L=XpPXIhkg-$zg1OY=Ark z(y{>15iln%+CVGUf2?(L?1bxw74;@39403V6r>f}^z4_A%d5mO5^OB}{=H)WD)pq_ zq$ln4Y?&y4)HY@9LjosU==Ti!HMZPaV|p&j3?U2SgMf!))Yf_d;0pa#pv`l8_zqsc z0g;At;?Ag-NW})o2FOzgWv<3{M3wDcupTQn90jv-@hX&V)#N0h^bX!>5Vl!RLqIB* zSWEL8Cx)Ed_aM-D4-gq>RUiq|v$7haDoVqh$%zEtWXHpMMqLq7 zvtv~^F@CPS7oD6pTP3S|L%SABgIP!<4~Z35lZF$}G4S~FLnQpwPN!ls^g=2A*ctD!24l96=TqVO1!vWZG*ANE} zN??FGCu;1XiXN!;;hS;5hXlk0nZwry#0JO)$Wsrdm%xH{Hd_~5L2p@qZTlmb;7h5D zmqf>_>P0|10GQBiOGWfT$}2+Kmq)Z)4ggD&Q$pbx%w!E%qjn=EKzcmJ8i-(2ff1$y z?)zGN1vQ>5;C`^Mm;WUWSlfmVb;^BseL-x1Y=AuVVCDv(QlXSt0w_NCarcfj7rJ-V zZFga7l7Eg$oaa6FMo}8S62OsAmJF5zNLMD}t4c_TQF>=kg4w4Y8Zl6xf_rW_>z?qV zYUlGi;xpUsiMunu>L`P;$_+Iq3St9fGw2QU8%d^@setM%bPB-k`deD>FB}nd Date: Tue, 27 Aug 2019 08:57:33 +0100 Subject: [PATCH 2/4] Fix issue with querying inactive user changes Introduce the custom account activity predicate to allow customise the way of resolving accounts during the search. Current implementation filters out inactive users during the change data query but changes from inactive user should be visible. Bug: Issue 11367 Change-Id: Ib8cfcf3e7c4f21a0207f801c111c5359716bda9c --- .../server/account/AccountResolver.java | 19 ++++++++--- .../query/change/ChangeQueryBuilder.java | 18 +++++++++-- .../acceptance/api/accounts/AccountIT.java | 18 +++++++++++ .../server/account/AccountResolverTest.java | 32 ++++++++++++++++++- 4 files changed, 80 insertions(+), 7 deletions(-) diff --git a/java/com/google/gerrit/server/account/AccountResolver.java b/java/com/google/gerrit/server/account/AccountResolver.java index 2ac7147dbc..f9945b5046 100644 --- a/java/com/google/gerrit/server/account/AccountResolver.java +++ b/java/com/google/gerrit/server/account/AccountResolver.java @@ -516,7 +516,12 @@ public class AccountResolver { * @throws IOException if an error occurs. */ public Result resolve(String input) throws ConfigInvalidException, IOException { - return searchImpl(input, searchers, visibilitySupplier()); + return searchImpl(input, searchers, visibilitySupplier(), accountActivityPredicate()); + } + + public Result resolve(String input, Predicate accountActivityPredicate) + throws ConfigInvalidException, IOException { + return searchImpl(input, searchers, visibilitySupplier(), accountActivityPredicate); } /** @@ -544,18 +549,24 @@ public class AccountResolver { */ @Deprecated public Result resolveByNameOrEmail(String input) throws ConfigInvalidException, IOException { - return searchImpl(input, nameOrEmailSearchers, visibilitySupplier()); + return searchImpl( + input, nameOrEmailSearchers, visibilitySupplier(), accountActivityPredicate()); } private Supplier> visibilitySupplier() { return () -> accountControlFactory.get()::canSee; } + private Predicate accountActivityPredicate() { + return (AccountState accountState) -> accountState.getAccount().isActive(); + } + @VisibleForTesting Result searchImpl( String input, ImmutableList> searchers, - Supplier> visibilitySupplier) + Supplier> visibilitySupplier, + Predicate accountActivityPredicate) throws ConfigInvalidException, IOException { visibilitySupplier = Suppliers.memoize(visibilitySupplier::get); List inactive = new ArrayList<>(); @@ -576,7 +587,7 @@ public class AccountResolver { // Keep track of all inactive candidates discovered by any searchers. If we end up short- // circuiting, the inactive list will be discarded. List active = new ArrayList<>(); - results.forEach(a -> (a.getAccount().isActive() ? active : inactive).add(a)); + results.forEach(a -> (accountActivityPredicate.test(a) ? active : inactive).add(a)); list = active; } else { list = results.collect(toImmutableList()); diff --git a/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java b/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java index c0fe1e2a98..d306e54a21 100644 --- a/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java +++ b/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java @@ -54,6 +54,7 @@ import com.google.gerrit.server.StarredChangesUtil; import com.google.gerrit.server.account.AccountCache; import com.google.gerrit.server.account.AccountResolver; import com.google.gerrit.server.account.AccountResolver.UnresolvableAccountException; +import com.google.gerrit.server.account.AccountState; import com.google.gerrit.server.account.GroupBackend; import com.google.gerrit.server.account.GroupBackends; import com.google.gerrit.server.account.GroupMembers; @@ -1002,7 +1003,7 @@ public class ChangeQueryBuilder extends QueryBuilder owner(String who) throws QueryParseException, IOException, ConfigInvalidException { - return owner(parseAccount(who)); + return owner(parseAccount(who, (AccountState s) -> true)); } private Predicate owner(Set who) { @@ -1025,7 +1026,7 @@ public class ChangeQueryBuilder extends QueryBuilder assignee(String who) throws QueryParseException, IOException, ConfigInvalidException { - return assignee(parseAccount(who)); + return assignee(parseAccount(who, (AccountState s) -> true)); } private Predicate assignee(Set who) { @@ -1351,6 +1352,19 @@ public class ChangeQueryBuilder extends QueryBuilder parseAccount( + String who, java.util.function.Predicate activityFilter) + throws QueryParseException, IOException, ConfigInvalidException { + try { + return args.accountResolver.resolve(who, activityFilter).asNonEmptyIdSet(); + } catch (UnresolvableAccountException e) { + if (e.isSelf()) { + throw new QueryRequiresAuthException(e.getMessage(), e); + } + throw new QueryParseException(e.getMessage(), e); + } + } + private GroupReference parseGroup(String group) throws QueryParseException { GroupReference g = GroupBackends.findBestSuggestion(args.groupBackend, group); if (g == null) { diff --git a/javatests/com/google/gerrit/acceptance/api/accounts/AccountIT.java b/javatests/com/google/gerrit/acceptance/api/accounts/AccountIT.java index 7f8ed767b4..6247739e50 100644 --- a/javatests/com/google/gerrit/acceptance/api/accounts/AccountIT.java +++ b/javatests/com/google/gerrit/acceptance/api/accounts/AccountIT.java @@ -558,6 +558,24 @@ public class AccountIT extends AbstractDaemonTest { accountIndexedCounter.assertReindexOf(user); } + @Test + public void shouldAllowQueryByEmailForInactiveUser() throws Exception { + Account.Id activatableAccountId = + accountOperations.newAccount().inactive().preferredEmail("foo@activatable.com").create(); + accountIndexedCounter.assertReindexOf(activatableAccountId, 1); + + gApi.changes().query("owner:foo@activatable.com").get(); + } + + @Test + public void shouldAllowQueryByUserNameForInactiveUser() throws Exception { + Account.Id activatableAccountId = + accountOperations.newAccount().inactive().username("foo").create(); + accountIndexedCounter.assertReindexOf(activatableAccountId, 1); + + gApi.changes().query("owner:foo").get(); + } + @Test public void validateAccountActivation() throws Exception { Account.Id activatableAccountId = diff --git a/javatests/com/google/gerrit/server/account/AccountResolverTest.java b/javatests/com/google/gerrit/server/account/AccountResolverTest.java index 5f662e9725..6f074dde02 100644 --- a/javatests/com/google/gerrit/server/account/AccountResolverTest.java +++ b/javatests/com/google/gerrit/server/account/AccountResolverTest.java @@ -162,6 +162,23 @@ public class AccountResolverTest extends GerritBaseTests { assertThat(filteredInactiveIds(result)).isEmpty(); } + @Test + public void shouldUseCustomAccountActivityPredicate() throws Exception { + TestSearcher searcher1 = new TestSearcher("foo", false, newInactiveAccount(1)); + searcher1.setCallerShouldFilterOutInactiveCandidates(); + TestSearcher searcher2 = new TestSearcher("f.*", false, newInactiveAccount(2)); + searcher2.setCallerShouldFilterOutInactiveCandidates(); + ImmutableList> searchers = ImmutableList.of(searcher1, searcher2); + + Result result = search("foo", searchers, allVisible(), (a) -> true); + // Searchers always short-circuit when finding a non-empty result list, + // and this one didn't filter out inactive results, + // so the second searcher never ran. + assertThat(result.asIdSet()).containsExactlyElementsIn(ids(1)); + assertThat(getOnlyElement(result.asList()).getAccount().isActive()).isFalse(); + assertThat(filteredInactiveIds(result)).isEmpty(); + } + @Test public void filterInactiveEventuallyFindingResults() throws Exception { TestSearcher searcher1 = new TestSearcher("foo", false, newInactiveAccount(1)); @@ -324,7 +341,16 @@ public class AccountResolverTest extends GerritBaseTests { ImmutableList> searchers, Supplier> visibilitySupplier) throws Exception { - return newAccountResolver().searchImpl(input, searchers, visibilitySupplier); + return search(input, searchers, visibilitySupplier, activityPrediate()); + } + + private Result search( + String input, + ImmutableList> searchers, + Supplier> visibilitySupplier, + Predicate activityPredicate) + throws Exception { + return newAccountResolver().searchImpl(input, searchers, visibilitySupplier, activityPredicate); } private static AccountResolver newAccountResolver() { @@ -350,6 +376,10 @@ public class AccountResolverTest extends GerritBaseTests { return () -> a -> true; } + private Predicate activityPrediate() { + return (AccountState accountState) -> accountState.getAccount().isActive(); + } + private static Supplier> only(int... ids) { ImmutableSet idSet = Arrays.stream(ids).mapToObj(Account.Id::new).collect(toImmutableSet()); From 499a15ac47e6999180c9b075f7e8bf14cd74e536 Mon Sep 17 00:00:00 2001 From: David Pursehouse Date: Wed, 18 Sep 2019 08:49:54 +0900 Subject: [PATCH 3/4] Remove licenses for unused GWT-related components Since the removal of GWT in change I767118ba4, "clippy", "diffy" and "silk icons" are no longer used, thus the corresponding licenses can be removed. Change-Id: If65550c7811ef1b69d49479e78f9cc6d41660911 --- lib/LICENSE-clippy | 20 --- lib/LICENSE-diffy | 1 - lib/LICENSE-silk_icons | 338 ----------------------------------------- 3 files changed, 359 deletions(-) delete mode 100644 lib/LICENSE-clippy delete mode 100644 lib/LICENSE-diffy delete mode 100644 lib/LICENSE-silk_icons diff --git a/lib/LICENSE-clippy b/lib/LICENSE-clippy deleted file mode 100644 index b0feeaeb65..0000000000 --- a/lib/LICENSE-clippy +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2008 Tom Preston-Werner - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/lib/LICENSE-diffy b/lib/LICENSE-diffy deleted file mode 100644 index e837a1a418..0000000000 --- a/lib/LICENSE-diffy +++ /dev/null @@ -1 +0,0 @@ -link:http://creativecommons.org/licenses/by/3.0/[CC-BY 3.0] (c) Sara Owens, inkylabs.com diff --git a/lib/LICENSE-silk_icons b/lib/LICENSE-silk_icons deleted file mode 100644 index b7417f6521..0000000000 --- a/lib/LICENSE-silk_icons +++ /dev/null @@ -1,338 +0,0 @@ -link:http://creativecommons.org/licenses/by/3.0/[CC-BY 3.0] (c) Mark James, link:http://famfamfam.com/lab/icons/silk/[SILK ICONS] - -As an author, I would appreciate a reference to my authorship of the Silk -icon set contents within a readme file or equivalent documentation for -the software which includes the set or a subset of the icons contained -within. - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS -CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS -PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE -WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS -PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND -AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS -LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU -THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH -TERMS AND CONDITIONS. - -1. Definitions - - a. "Adaptation" means a work based upon the Work, or upon the Work - and other pre-existing works, such as a translation, adaptation, - derivative work, arrangement of music or other alterations of a - literary or artistic work, or phonogram or performance and - includes cinematographic adaptations or any other form in which - the Work may be recast, transformed, or adapted including in any - form recognizably derived from the original, except that a work - that constitutes a Collection will not be considered an - Adaptation for the purpose of this License. For the avoidance - of doubt, where the Work is a musical work, performance or - phonogram, the synchronization of the Work in timed-relation - with a moving image ("synching") will be considered an - Adaptation for the purpose of this License. - - b. "Collection" means a collection of literary or artistic works, - such as encyclopedias and anthologies, or performances, - phonograms or broadcasts, or other works or subject matter other - than works listed in Section 1(f) below, which, by reason of the - selection and arrangement of their contents, constitute - intellectual creations, in which the Work is included in its - entirety in unmodified form along with one or more other - contributions, each constituting separate and independent works - in themselves, which together are assembled into a collective - whole. A work that constitutes a Collection will not be - considered an Adaptation (as defined above) for the purposes of - this License. - - c. "Distribute" means to make available to the public the original - and copies of the Work or Adaptation, as appropriate, through - sale or other transfer of ownership. - - d. "Licensor" means the individual, individuals, entity or entities - that offer(s) the Work under the terms of this License. - - e. "Original Author" means, in the case of a literary or artistic - work, the individual, individuals, entity or entities who - created the Work or if no individual or entity can be - identified, the publisher; and in addition (i) in the case of a - performance the actors, singers, musicians, dancers, and other - persons who act, sing, deliver, declaim, play in, interpret or - otherwise perform literary or artistic works or expressions of - folklore; (ii) in the case of a phonogram the producer being the - person or legal entity who first fixes the sounds of a - performance or other sounds; and, (iii) in the case of - broadcasts, the organization that transmits the broadcast. - - f. "Work" means the literary and/or artistic work offered under the - terms of this License including without limitation any - production in the literary, scientific and artistic domain, - whatever may be the mode or form of its expression including - digital form, such as a book, pamphlet and other writing; a - lecture, address, sermon or other work of the same nature; a - dramatic or dramatico-musical work; a choreographic work or - entertainment in dumb show; a musical composition with or - without words; a cinematographic work to which are assimilated - works expressed by a process analogous to cinematography; a work - of drawing, painting, architecture, sculpture, engraving or - lithography; a photographic work to which are assimilated works - expressed by a process analogous to photography; a work of - applied art; an illustration, map, plan, sketch or - three-dimensional work relative to geography, topography, - architecture or science; a performance; a broadcast; a - phonogram; a compilation of data to the extent it is protected - as a copyrightable work; or a work performed by a variety or - circus performer to the extent it is not otherwise considered a - literary or artistic work. - - g. "You" means an individual or entity exercising rights under this - License who has not previously violated the terms of this - License with respect to the Work, or who has received express - permission from the Licensor to exercise rights under this - License despite a previous violation. - - h. "Publicly Perform" means to perform public recitations of the - Work and to communicate to the public those public recitations, - by any means or process, including by wire or wireless means or - public digital performances; to make available to the public - Works in such a way that members of the public may access these - Works from a place and at a place individually chosen by them; - to perform the Work to the public by any means or process and - the communication to the public of the performances of the Work, - including by public digital performance; to broadcast and - rebroadcast the Work by any means including signs, sounds or - images. - - i. "Reproduce" means to make copies of the Work by any means - including without limitation by sound or visual recordings and - the right of fixation and reproducing fixations of the Work, - including storage of a protected performance or phonogram in - digital form or other electronic medium. - -2. Fair Dealing Rights. Nothing in this License is intended to - reduce, limit, or restrict any uses free from copyright or rights - arising from limitations or exceptions that are provided for in - connection with the copyright protection under copyright law or - other applicable laws. - -3. License Grant. Subject to the terms and conditions of this - License, Licensor hereby grants You a worldwide, royalty-free, - non-exclusive, perpetual (for the duration of the applicable - copyright) license to exercise the rights in the Work as stated - below: - - a. to Reproduce the Work, to incorporate the Work into one or more - Collections, and to Reproduce the Work as incorporated in the - Collections; - - b. to create and Reproduce Adaptations provided that any such - Adaptation, including any translation in any medium, takes - reasonable steps to clearly label, demarcate or otherwise - identify that changes were made to the original Work. For - example, a translation could be marked "The original work was - translated from English to Spanish," or a modification could - indicate "The original work has been modified."; - - c. to Distribute and Publicly Perform the Work including as - incorporated in Collections; and, - - d. to Distribute and Publicly Perform Adaptations. - - e. For the avoidance of doubt: - - i. Non-waivable Compulsory License Schemes. In those - jurisdictions in which the right to collect royalties - through any statutory or compulsory licensing scheme - cannot be waived, the Licensor reserves the exclusive - right to collect such royalties for any exercise by You - of the rights granted under this License; - - ii. Waivable Compulsory License Schemes. In those jurisdictions - in which the right to collect royalties through any - statutory or compulsory licensing scheme can be waived, - the Licensor waives the exclusive right to collect such - royalties for any exercise by You of the rights granted - under this License; and, - - iii. Voluntary License Schemes. The Licensor waives the right to - collect royalties, whether individually or, in the event - that the Licensor is a member of a collecting society - that administers voluntary licensing schemes, via that - society, from any exercise by You of the rights granted - under this License. - -The above rights may be exercised in all media and formats whether now -known or hereafter devised. The above rights include the right to -make such modifications as are technically necessary to exercise the -rights in other media and formats. Subject to Section 8(f), all -rights not expressly granted by Licensor are hereby reserved. - -4. Restrictions. The license granted in Section 3 above is expressly - made subject to and limited by the following restrictions: - - a. You may Distribute or Publicly Perform the Work only under the - terms of this License. You must include a copy of, or the - Uniform Resource Identifier (URI) for, this License with every - copy of the Work You Distribute or Publicly Perform. You may - not offer or impose any terms on the Work that restrict the - terms of this License or the ability of the recipient of the - Work to exercise the rights granted to that recipient under the - terms of the License. You may not sublicense the Work. You - must keep intact all notices that refer to this License and to - the disclaimer of warranties with every copy of the Work You - Distribute or Publicly Perform. When You Distribute or Publicly - Perform the Work, You may not impose any effective technological - measures on the Work that restrict the ability of a recipient of - the Work from You to exercise the rights granted to that - recipient under the terms of the License. This Section 4(a) - applies to the Work as incorporated in a Collection, but this - does not require the Collection apart from the Work itself to be - made subject to the terms of this License. If You create a - Collection, upon notice from any Licensor You must, to the - extent practicable, remove from the Collection any credit as - required by Section 4(b), as requested. If You create an - Adaptation, upon notice from any Licensor You must, to the - extent practicable, remove from the Adaptation any credit as - required by Section 4(b), as requested. - - b. If You Distribute, or Publicly Perform the Work or any - Adaptations or Collections, You must, unless a request has been - made pursuant to Section 4(a), keep intact all copyright notices - for the Work and provide, reasonable to the medium or means You - are utilizing: (i) the name of the Original Author (or - pseudonym, if applicable) if supplied, and/or if the Original - Author and/or Licensor designate another party or parties (e.g., - a sponsor institute, publishing entity, journal) for attribution - ("Attribution Parties") in Licensor's copyright notice, terms of - service or by other reasonable means, the name of such party or - parties; (ii) the title of the Work if supplied; (iii) to the - extent reasonably practicable, the URI, if any, that Licensor - specifies to be associated with the Work, unless such URI does - not refer to the copyright notice or licensing information for - the Work; and (iv) , consistent with Section 3(b), in the case - of an Adaptation, a credit identifying the use of the Work in - the Adaptation (e.g., "French translation of the Work by - Original Author," or "Screenplay based on original Work by - Original Author"). The credit required by this Section 4 (b) - may be implemented in any reasonable manner; provided, however, - that in the case of a Adaptation or Collection, at a minimum - such credit will appear, if a credit for all contributing - authors of the Adaptation or Collection appears, then as part of - these credits and in a manner at least as prominent as the - credits for the other contributing authors. For the avoidance - of doubt, You may only use the credit required by this Section - for the purpose of attribution in the manner set out above and, - by exercising Your rights under this License, You may not - implicitly or explicitly assert or imply any connection with, - sponsorship or endorsement by the Original Author, Licensor - and/or Attribution Parties, as appropriate, of You or Your use - of the Work, without the separate, express prior written - permission of the Original Author, Licensor and/or Attribution - Parties. - - c. Except as otherwise agreed in writing by the Licensor or as may - be otherwise permitted by applicable law, if You Reproduce, - Distribute or Publicly Perform the Work either by itself or as - part of any Adaptations or Collections, You must not distort, - mutilate, modify or take other derogatory action in relation to - the Work which would be prejudicial to the Original Author's - honor or reputation. Licensor agrees that in those - jurisdictions (e.g. Japan), in which any exercise of the right - granted in Section 3(b) of this License (the right to make - Adaptations) would be deemed to be a distortion, mutilation, - modification or other derogatory action prejudicial to the - Original Author's honor and reputation, the Licensor will waive - or not assert, as appropriate, this Section, to the fullest - extent permitted by the applicable national law, to enable You - to reasonably exercise Your right under Section 3(b) of this - License (right to make Adaptations) but not otherwise. - -5. Representations, Warranties and Disclaimer - -UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, -LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR -WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, -STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF -TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, -NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, -OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. -SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, -SO SUCH EXCLUSION MAY NOT APPLY TO YOU. - -6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY - APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY - LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE - OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE - WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH - DAMAGES. - -7. Termination - - a. This License and the rights granted hereunder will terminate - automatically upon any breach by You of the terms of this - License. Individuals or entities who have received Adaptations - or Collections from You under this License, however, will not - have their licenses terminated provided such individuals or - entities remain in full compliance with those licenses. - Sections 1, 2, 5, 6, 7, and 8 will survive any termination of - this License. - - b. Subject to the above terms and conditions, the license granted - here is perpetual (for the duration of the applicable copyright - in the Work). Notwithstanding the above, Licensor reserves the - right to release the Work under different license terms or to - stop distributing the Work at any time; provided, however that - any such election will not serve to withdraw this License (or - any other license that has been, or is required to be, granted - under the terms of this License), and this License will continue - in full force and effect unless terminated as stated above. - -8. Miscellaneous - - a. Each time You Distribute or Publicly Perform the Work or a - Collection, the Licensor offers to the recipient a license to - the Work on the same terms and conditions as the license granted - to You under this License. - - b. Each time You Distribute or Publicly Perform an Adaptation, - Licensor offers to the recipient a license to the original Work - on the same terms and conditions as the license granted to You - under this License. - - c. If any provision of this License is invalid or unenforceable - under applicable law, it shall not affect the validity or - enforceability of the remainder of the terms of this License, - and without further action by the parties to this agreement, - such provision shall be reformed to the minimum extent necessary - to make such provision valid and enforceable. - - d. No term or provision of this License shall be deemed waived and - no breach consented to unless such waiver or consent shall be in - writing and signed by the party to be charged with such waiver - or consent. - - e. This License constitutes the entire agreement between the - parties with respect to the Work licensed here. There are no - understandings, agreements or representations with respect to - the Work not specified here. Licensor shall not be bound by any - additional provisions that may appear in any communication from - You. This License may not be modified without the mutual - written agreement of the Licensor and You. - - f. The rights granted under, and the subject matter referenced, in - this License were drafted utilizing the terminology of the Berne - Convention for the Protection of Literary and Artistic Works (as - amended on September 28, 1979), the Rome Convention of 1961, the - WIPO Copyright Treaty of 1996, the WIPO Performances and - Phonograms Treaty of 1996 and the Universal Copyright Convention - (as revised on July 24, 1971). These rights and subject matter - take effect in the relevant jurisdiction in which the License - terms are sought to be enforced according to the corresponding - provisions of the implementation of those treaty provisions in - the applicable national law. If the standard suite of rights - granted under applicable copyright law includes additional - rights not granted under this License, such additional rights - are deemed to be included in the License; this License is not - intended to restrict the license of any rights under applicable - law. From 93f7fc85e0c808b358a507a8536396e85a8dcdc3 Mon Sep 17 00:00:00 2001 From: David Pursehouse Date: Wed, 18 Sep 2019 08:45:45 +0900 Subject: [PATCH 4/4] Fix the license for mockito Mockito is not licensed under Apache 2, but the MIT license [1]. [1] https://github.com/mockito/mockito/blob/release/2.x/LICENSE Change-Id: I5ed23299c7ef1d67860b84ccfd60751bc2ab15bd --- lib/LICENSE-mockito | 21 +++++++++++++++++++++ lib/mockito/BUILD | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 lib/LICENSE-mockito diff --git a/lib/LICENSE-mockito b/lib/LICENSE-mockito new file mode 100644 index 0000000000..5a311f7c5c --- /dev/null +++ b/lib/LICENSE-mockito @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2007 Mockito contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/lib/mockito/BUILD b/lib/mockito/BUILD index cfec8a0ded..cff36cd019 100644 --- a/lib/mockito/BUILD +++ b/lib/mockito/BUILD @@ -7,7 +7,7 @@ package( java_library( name = "mockito", - data = ["//lib:LICENSE-Apache2.0"], + data = ["//lib:LICENSE-mockito"], # Only exposed for plugin tests; core tests should use Easymock visibility = ["//java/com/google/gerrit/acceptance:__pkg__"], exports = ["@mockito//jar"],