diff --git a/src/repository/api/ArcanistGitAPI.php b/src/repository/api/ArcanistGitAPI.php --- a/src/repository/api/ArcanistGitAPI.php +++ b/src/repository/api/ArcanistGitAPI.php @@ -660,14 +660,18 @@ $parts = explode("\0", $stdout); while (count($parts) > 1) { $entry = array_shift($parts); - $entry_parts = explode(' ', $entry); + $entry_parts = explode(' ', $entry, 2); if ($entry_parts[0] == '1') { + $entry_parts = explode(' ', $entry, 9); $path = $entry_parts[8]; } else if ($entry_parts[0] == '2') { + $entry_parts = explode(' ', $entry, 10); $path = $entry_parts[9]; } else if ($entry_parts[0] == 'u') { + $entry_parts = explode(' ', $entry, 11); $path = $entry_parts[10]; } else if ($entry_parts[0] == '?') { + $entry_parts = explode(' ', $entry, 2); $result[$entry_parts[1]] = self::FLAG_UNTRACKED; continue; } diff --git a/src/repository/api/__tests__/ArcanistRepositoryAPIStateTestCase.php b/src/repository/api/__tests__/ArcanistRepositoryAPIStateTestCase.php --- a/src/repository/api/__tests__/ArcanistRepositoryAPIStateTestCase.php +++ b/src/repository/api/__tests__/ArcanistRepositoryAPIStateTestCase.php @@ -7,6 +7,7 @@ $this->parseState('git_basic.git.tgz'); $this->parseState('git_submodules_dirty.git.tgz'); $this->parseState('git_submodules_staged.git.tgz'); + $this->parseState('git_spaces.git.tgz'); } else { $this->assertSkipped(pht('Git is not installed')); } @@ -156,6 +157,17 @@ ); $this->assertEqual($expect_uncommitted, $api->getUncommittedStatus()); break; + case 'git_spaces.git.tgz': + $expect_working = array( + 'SPACES ADDED' => $f_add, + 'SPACES DELETED' => $f_del, + 'SPACES MODIFIED' => $f_mod, + 'SPACES UNCOMMITTED' => $f_add | $f_unc, + 'SPACES UNSTAGED' => $f_add | $f_mod | $f_uns | $f_unc, + 'SPACES UNTRACKED' => $f_unt, + ); + $this->assertEqual($expect_working, $api->getWorkingCopyStatus()); + break; case 'hg_basic.hg.tgz': $expect_uncommitted = array( 'UNCOMMITTED' => $f_mod | $f_unc, diff --git a/src/repository/api/__tests__/state/git_spaces.git.tgz b/src/repository/api/__tests__/state/git_spaces.git.tgz new file mode 100644 index 0000000000000000000000000000000000000000..056fe0d50c69c11c23bf933f945c783ccd8e92e5 GIT binary patch literal 10708 zc${5&Wmwc-&^C=U(kUniiXb4JOLs_1cStvqOCybhh;&JVbhDJCba%USEzR!!UjEPX ze0sl}>wKB(oO|ZJXXd(Q7-FBHc#AC=prD@w;(0RbdF6@zE8$O~BmK)_E7b8h`Wvrq z^C2*m$6d$Uggub6lu?Uw6JTVl!;w~^Gp98t#?$M~MHeK*{5#Y)RZdq)jRw~8Bz@8NG>*(`>yf>kxLj?+gA*5t(aYj_$ z(ruDFc2wfLe@d4q=f|D0obUIynDiKs*QBHCKet+T2fA;(MMQEaSz37URUdG9M#f2u(V_cpkKc3DCdE>>~IqmR?M0tw_ooJ%bmjkRTZ&UBhm8(~4<=I{O@> zi*abma`2jhmwI{h?RiPJ!xUcgzZP4HhF-PAiwT}osGO<14B*pqOPPb19lO)}qV5W! zlomlSHK8Cz3tg6F)q%ZMCJr3e85X;>G+5`q;BftBQJ@Yx#oqUwojU)iiJ{0gk zy98%IJ&?JWSO0*}^&UXBta2pzjcd$L8{oLO(!Ncto`%-uB&^0Ei@D@ZI2U&PQo`3t zn?d^N@pz{YfC&LBXD+o2rw!7YcKtR3rbI$oIz)}w_s4*=c{nU49L~T91@t9=2MD8` zwImw7>7=B{85v4h^9h;+$!JHVn<%TD1&BmqPlqENg(>)Qs8l?19d2r00+zrG8NCNn zY%W7R*xJ74$HF1V^UEFwLc(vvTZByZh3VLN_xoJTtzkRIo$Mn0EVIwVCsWhs5_9WVuo^`C@vZ^@HVS@^z;43eUmCO zO!MP+uMAQQRm!Gqfa$7HInS=#X!DwoLvl=ib>QPKZIA&gV>KthPy~*Ermh04c>8Tg z5$}MDW&9IJLDnar%oD+SAp}fdU~K}S2D)T9PpoUJ1QrdS|4L4oJ_1R;J3?c{%X)Q* z`I!{CVWX;xk)!py&Z&jz_nOGGK;ZfzZkm^Go3A_udcK_ndn-8!8fd92!&jvelQNjJRzq1_rW?Y+2S9 z1#IW!OS^w?&m*#(?FgAdQsDw(&4-ovjR`rIrrXbml%?|gGbnuzf!Djpjg0Q^yWsZl zD01P5_|^nt30mhtB}kjyFJo*ssTE zRNQ+v>Nm$l(l;avy?dYPOe6UYs^%jQMW`?gu5r(F;tyRHY9{Qw1@FKZ?C`o_5Q{G4 z1jd6Y5StZDVxsl3^ZPWRrc3*0>`+{WK)gpt!8#OKlhZ`9tDHW@SOg>;%GVREP9Qmp z!7q&QV2BNN#y>zH#ERx$xmdrj-vv+vxby=$Z=Y1u9Sk?s(@`TKD-!|KyG{lGS$g{5 zhdRLCU>VRG5_)WUSp~B)jZmoe)OSl!$OGKjmQKHlY0+c_4EEx)L21YRg+J)6ObIqK|@4#HmHW&me z6T_z#Pr>n7Ef?4o_FD$}!vThgsXO)1|NLtfe4UF+^5PR;$*7-!h#mNy=L7KUkfJgu zbiU?aQUXDmA)*QEC4y-#@t9ZvbOcfYg2gTVdqxuu`B#PS1+%S$AacI~vA*yp!Ehlb z96tO_XDglniq~nfUC865VF`a-6iMC$Dup(raiwEqN-6*f*C0K(DT(`2`YO7ESY!V> zoBc)-r6aHYn49N$2V9V(A3cHYz5$s`pGQVH(*%L(3`eShM4mmt4L-Eow+426#ZQ2W z-5Ut|rrZMGykl%X68!kpNr+(jlNVZO0@#Wzgifny>-k^QvlE$L?rL?AA4$nTMUIcn z5MH;*(SP3J>;^x{hm=YMIhxfUT@d~Px$+%Q61Gr2UHnEJex+U(q>b0jQ3VLYf%^bN zI!+M+I6h2R1{M+Oc_{zjAUvvm!zQ9a@Qit}BTGIO>-4yrt zD*Pcs0FfAqoQ}Nd4agfHZ3Lij@YSR>uu&KF_ly5BK!V)JL)m=*M{-HPIpen2%W;WB z+mzv)H@Z7tWcAuNfb!9g&pB_%0qGqw@n+Hl6oW@Vy5xb%Zwas}4nz8;rC;8eW^`Zn z6e^$FQU>IB!zfLrznl)LWyc{+KJedM)uyk))@o}P0*IjmQ2dz_mz?&4npD;^@<2wa z=tlX#U(p%a8+um(LH=Qwga{blTj;JoREcNbs-NG-bn<3{hgWwYa z)1c9e+`z3~kGYMBFUbN=1g^P@bf{kLGeW;<0*141KuKh+@CmdgPrya*F}HGuUTuXR zDE{N;j2I=BdPpn{f{ue5R{%005RisbbO&DJnpo8R{KKX@Xde6*NTjsl`yXv0!R2i4 zggHyj0KAQIHg@2y`UsRW!<(U%+9mp^ZLE2Dz47cx@6SI5;&;x21Ly$mOMtuu4%cJh zl5{;h=ud&ES$gHnIB@Jaj&{K0a8u=pu)g0_ISm$QHt@#Q1KhmepR&mg7+P&?_RCtuB?MPod%Dgg?^$d*m zIph)q0XUiV!3fT;0s8-}bwc!&9I&5C_;SdbbZdPbUya#*j#Xebr;DLeO3&TDNB945 zitU0X+g2q3Ix!%76qrI+FY47j3ud&K(~O8Iqi%9K{Qg#3XKt1)^tBPpW|I%{+4q$dE+E000I3YlH7JR)6`78Sp9j1(&`nt2&2L@NfWY#HB(0cUWf z2>r7+wrfmL%>Sj@UeqtjaL5{Is*!&9|Cfnp?UGhD5a-zx(Rel4+EImFE0@gb~B4xqd#uY z(79e2^HBD-{w@jI97Z`}idzE9u8fK%-$<-LO9d(WbzJ@WuXPI|7ATeS3-E(F$`ipcdP#4xL+nc+mPJp1i0 z*;ipX_7S&2M85>xdftBBcb|copm4{FKl!FmMgBsN**#uq%trF+cbxwAiuq#4o5~kt zI&nDFpWaK1(;5e$^~t;|UHtg=7Y}M5(N+~)zw7`&YbycY;SZu*MLT~9ZAotP^&6xRC!!T^<;r zzCA07)MDW(MY2k;lKVbh0G==DYsD6Tx-k9+2DZ7uNo8PXR}G=Q8*cPe?wg7L9kE<{ zoIlK=WYK|yylEfz6d?q#(4?D8=hD;&PUSEE;@JEnKQDXDzQgw;BvATbRKe85rTVGX zDV_I-;;S~EXMI@1X4~^TnFLSe@=IRbz?#-Nr8!Bwpc#37Z*zj2Z|Pt7Mw=&2SUKHJ zV8^j8dK!EyL^U-b36bbriDd-R$+97O>|L*xlbtJcipw36`}GL)r(XZ5Q&Hv)#%43n z;bYSoj=bIf9eg{dYkkF;BD2yU(^YV&6MyE-MHt2TTO-?(wo3~~@moTxB-QhAlDjF# z83N-+sj!1!F0+qP%AF0CCv{HZA0g~1tu~u|R$=7=w!SQFfuSSVpyhY!Htb8mXN_4* zAX#%J1kpTNmoay!`A~@DF*u+autq~a0_U~h)cp=bsH>bULLW@MC#wO1ltar!BVY&B zL--bqN!S}kY2{5_y$b730aQF$QzLjTnQwL|35Ywa$I0W!mX zue5KS!^|+4gI$ zxa%h*&wh3#idj?J7T8GpQ=jCQ!9)#+%5Z-3y*F9oRwS#A)>oCxWRfE=aHx`g?$8A3 z#rM)GWmc2rC@gHT5TJ?18kh1{Eu>!j+a2wag_Y`-L!%!kVmD7yD%ni)LRb25Olb^9 zH~)nlS361(vAAKk0p2IkiZ3BF$60LVP0hnN4P7{xRA|jyYVGwORqXzxNY$Dxpo#eT zyt7dM-KBeBpAhZF_H11z@LlUp!eq?Ax4=m=+K;$gsD^km2Lea&EmPmux>Hms#`H^t zBSLYi!hTKC#3U6b*>&sajh$q_jXPV>>jq`&ZAo$lG(aWoMYvQNl-E&6z1M%GSS-nL zNNIokm*TOI@Fr=@<3fz)&r%x-r4Z_JDG`JYn*2I^Lyx>PZNVneU6=W^9xt<;6T}Y4&{W0*>LB-l_*vYX0Ejgl= ze@7vuk)R1~iXV6gg)VzmxyQVA;5(S7FiADRBw86^i+n@UoNg@@bGrT`kgJrS>8}xN ze9J7&uoK62vgoVoH+qxi;|(sokL7q)SOGZS8@@6{ccCBLM=uli)Px?CC3iC&neZ&9 zO01SHauykYlnLE59P0~iHI+nB1!uQR1k;PM8jfvDRoGOFLZN*~qo-^zRkE#hzDo+t)DOqvA-t-fK~&M7!xh?4Q5g20lo+ zbHw#w)UlfP{Vo*y#={-V9hxxnnrCFF?PQ_!n&D92kZ2flz}@{~zfoYVH+z**+!RmO zHT+iY?PNgDjn4M^;E+s3TuUz;rWbaMG2e$Zwz|T<2bb#^in`}_ z9F@C@AvZNoUFdKIwJzai|CRGdB-)1zJK&_DcRGlwSfsCrmm@*v%D>~ZPdnLiFrA1_ zOiBJ5pIOI&LHE!$whx77SuAsTFo>G)r7Bi#*$;p`MV0N>y=wnm(u1@Nn~EbTZbXrS ztsGyWeGM3?ADm=E zChm)TCu*%>xGLSa?2+`jPJx9o5v$cGaOQpuDw|ap(*W*a=S)-Bt~~o-^B5MFxx|~n z_@EGqdW}wwYNuYRyeUGmb}NFa0kb(mzB7HUlKj>hrTa<;o}XpB^k%rV{ho^yjZn*X zTo9)_K5SopvjVpPLJ3ItU#J#GfjHE0g=R3qUa$d$%`n@qL7tv3;S_gg-d-X@tn@1( zJ;nmR8{WKW2|n9#56yg>sUtD=B$eGZ^-8s+I$Xi&RY=&^p2!pOZoaZo#hbLtPgJ|a z)SsL^=3Mn0+dNd;!};Vs@s384uXIuna`gFpXOy9{$<8MDHe$CFXp0I2j9yiK?D<+w zFo+)?hna;c!k*@4#c#?*1Enh*z__GNh1ktj3cpj$J&o)e?PWeC?JT*c)_kAt#sop1N!pk;FXG?%F;j=tN7hC1 z%nmcEG6m_1DmBb$$9t48CzUJnE&zQh*M{GrDTM#PE}N8)JPzt;_b0MOvB2g5m6-n^ z?|r#klK?sv)fATNI|Jps)GI3Y=YaIPJ^DXZi41CD3Qf|n7ci;GgDi~p zGX6k=Kn3^ut)a-DHlKt(B+AInUInYW`g*NUPd&aBwL7@mqA!1Pa%cVdoLea`LepE}j*Q*FwB@!|aZ zuXhI)IpNVZR7$Vn^yHIM=j&yZWeF#TX`jzY%*p9G`nVeZ3gL{{Yy6A-yIyce7wS{mykzHJWJzCPxa?$sy(_dxekXYgX?S+E8SUz zpZVdfaXNT$E>XQ)`{9adVpGRg86F*IKNkI?d!W*_WX#VnatscZQg3m}48>jqG+w{o z0EW@9Zh%PYxzrO=lsr6xE}%Xv=?0*tc7K{CWrCl5&2)Ksfp+AC4L&uNc z#Bk8%-Gm6vTOe^O7BIOq-L-ldh*Tcg15^B-gPB4dH_8fV(PuE?Vip|39Reb`J<}lf zLR<^6#$GeFZHyid+IqRRZKd*xPZ!T$6{f{SvV^56f;uGBIERr8i$&VF*qCd$Lr5Vr zZx82sU8Y{7SU^iL%`!D*DHL_(TNWd>aY=}`yY7u>ZI*qb^*0$U(QB&DcTK7tBTg;F zQ*83(cA<_LG0Z>6|5Wc|eT?T&PAj+B(p0L@b)?nzZ3r8~&p45zqcddUqK~>Ed!$e5 zCXA1R;#1Aw(gsIvV8|xego^Sif7yJ;yRKEO;jGLRHuwJCggD7>%r0+*FC?Saq&s!- zePaq0RCMrgJ|Xa1E}j^%UCnEOF8t9Lg0@nFBFc&o?w11bX$mWES=Nj`A(kUoK16B$93JDv~6W5A8U1s_I8_?d|0v0mPn2L zO_g_reP|?iO-!UDEH0k!p~WrA+Y97~8z+zla$Xus{#?RMZuW8!yuY#ZYo{=Rz{jy{ zs$+XL3yW``9%j#_jJnlY7TnNOLW}&%Ue9asw!y_V(=HdE7KL{yIKu>Uq;{&C5FN9H zrftyBd$Y1-)=Di?_kCPc0=j3{+sN-qEFOh#(_HJ6_9am^E{t((h}S?AQ?zCuq^w1y zxO1Iimqr`)m^oCoRIW?(7Vp=VOG!YhG=#Kk0&ifl0T9PdmRR= zXy~>vMXeD0O~Lt1z~ayGwes%ykGUgP$4#e`PIM|PQI$E2q_hx!95im zbz+uKZRRzYKpeDoY9w*4cJ9jy<3eAv=Y`SGDK&`}d-lQv9b8@I-@W$p`tay!%*hHS zQ0e%Ph-};UyyYdEXciY}4ZB)b!xvlgAj4I6%SRV^(Ih9=u=Ps_4C#}h2fI7V=8 zYELKyJ&!+i_GhkJYC_MO4a><K5nS5xm8l%7NB6-M(IuLAmZtQP zr(p`VJ#+DYh`PHGo^*5^4l zpWjVBVW}}UQY9VHdt9V2K^7^#Ue7bT)UZSKO{<#9Rsn}5cx&n(%g`!&2q&qPg|h`= z<5H_u)o>=$-iMIE#~&Ob_#c~G7`BIw>Fu~=ZK3-31x*@aUZPFBJ)*2j!x`H+%?cyC z^8{n0*>6|Fu#M8*!zJdoTzXx!6_7PZecn7dSM;rp|YP8Oz zgBMG#u|J)?cY3C9Ech1KineH-gGGMzNL1(H<7f~#pJ>&|zozmj{k7Yo!)Z&p5~T_U zSz7)Zx&?#}Op`AkA$1{=Ctx(I&4!m>!Qzy_e~Ek|U*n1GyO7?JE3n4+2{@yh3jxXx z9(kBJBHTpj%5_tJSR7UsjCbxxNmt>m%j%1QuFze}4nLfWE+RRgj(EGqN^ z_e4T^PY{;(!FS4FT(MoqNVEku0>;Mr-~8u^qBXOkFcpcP)mv>QVSjYFb$cZ=TfBC{ zTusH5B{6NbtSxyf@OLsftP1$^cavk-DdsXOj2cvnx-rDO*rLJc+gZd z;Ut2%tx)SilxCDwLI44);J?OF_qq;fp(VQ~l+840$l49TaK9F=JuVOF;n@5^KCEGs3uZ#%o4u+Dfs~ z5svj;^?7d%PlDb_OrJ+~*R6R`U^ptP_H-u`tlnFSozAnonZj{+rK_zlG(Cf2zzyBu{QwN88Oc-Hk|897Zhx3+lf?yh*U zsAsLpAo|YrbdyZ8SopVSgA1Qp>b+N3?vB~QKh)@|&Aw%Q${Waw7UscuSCnRcf08lG zEbn5xnA;U^&Z0!kp#8P|d4kNhRMDH@y##Q*l;&E;^95{J=IqaE-k;bbio(?Lk1tC# zaWt&aU+`!tnEThP4ma>bs9~%z``Au5wS|0X*5zi#=V=m@u8FG(zdEOck;!KMK6;(a zkGsXq6@c+tPVe)DZ3)R}q0Ga!N<(4Jkb=N`tU%jWY(-j6H_p~DvRIy})U&nrbUO2; zWjguN{!e^p1K5sA>nHWO_l8-`nW{$rQ=jK35k%bb+iDIBkAXyzr$txn3>TgF54dih$D$sSPo zK$e`?mM)IOpbKNB?fogvDWUDzkx&=ROBtuj! zJuj_^)JubPkd!orC2ZWlcG$|Ws$Ro!fPYD%&%Dt!V$7$`YVzL@86nw-;3hwonbuoI z){@0Jfj8bM^23vNW|ev6bm`<4L~=Rw@^tpJ0{mi*t5OYSOyB8ZC=l0lU-uMVeaK&x zPZV%^U2NuP0qtNhTzYjgj-EtcV#$>C>QQlUc=6)my%yfukC-}@Ml^Ws$GW}uJlzWf^uh`jG2Y(e1`GB^QAO=6aiUaz#Mcjs zKNC_**a2m}?-XI2k?*KX=v)3UDP}H$bt3+EKSDuNUN9sDb_ZVS{(cN`P{gY#WwSO( zA=6p#60)YZak0))H6Co1gBoh2$?DH(=QD`ZmMi;ab!$i@BcqhBxn-`v3!iQgrbX%e z4^W-A8^9P=8w@<#5~(L&g8)5GD&zyQg5jn*Fc^^0%?QtZ_b&Ob$CuI1l*o;Xrg%X4 zrzVAG0_7Lf;xIWv`VPN~H|JNGgsDtSACx&ql35hc9vH64RT=43)&3Uuvm_OP+s0`m z>BVk<<$F*e_#^J%SJBX>qRm$&z$|=FD)=W^q=vjHJogYlE7`pO@q|cTgZ0USLCUlT zz{N@`vc`^)&XYj-1uCGv!IB9B#u#ORze$3#!VlX(D$-Z&+kcx8j$A-3nVFt}V?_e; z1XS<_iu`Y=2shob>Z(98T!2mV1nPjzGLX*U1d<5~#gIp(odk$W#Ur~;K%tDgP@pcv z6?q|O9D1-qX-E9^<=j*XP;v@vzUICK#xbz2fq$M6QPC?yy-Y{tdFO$Lr>(4CZjy?C zt^b;rJ4mVLGzeQsY8*y}eHF`c zp0m@k=(jZU!npF`T}=yL_Ca)Q7vK0eyG1FK%<6c*3Ti2Cb4+Wcie5q?Q41Ud*ly#((+f)J-b zg;E!C6a&i;z@g(DEvWV~1$qqAW~{k8fxdNjHtZCRn^vT<;f?!=+2j8~5nBM4FSY_T zmlp4VdX$`*FY!Doiq$l@H4e$c8E7t-y0WQOYE?8HZ?$=)Y1FB)-M9VOBou(-ocyL| zT#>#u3SL(bU{LuU@kGtw8&hLSURfyrZ-8aPyO!`=)RjVZZ5nBs%a8H?YdetJ zebH7vY+;%cSpFVL`6mvoZ3=LGB0vvKdMVN>EndhDpw-(6?d$lFg zK)mc=Gu0`geXsuC-T*t$J@Dx>6$g)yV}uTHQ;Mg zkmdbWdM7jt2FQy%^p|v9_0L_iB0q1*ZwOyrjB;|k$QHfKh6KTwfQt>B383l`>^cMP z8uQ(V4a5H4F%fulLUf@HtcNux8ec%V?jCxbucsi|KETM5A%r&TA#msMv8Dya8FZVX z9(1w=xm!gC1>9LKm^3}km~AC3H(;9XU3z%`C-5CCO|j!gC>ulnoKqjTpqaF19j}ka{5j!_AG4N!kfi3{C6B& zzC*+c#l-_TZ%xnIZ}D=0Spmp>-#<>sE&4wY2=*>MDpL<}tYaDo&m6S{ZhI(!f8?eC zAHVFN??L>xDnMYUAe8^wL#>I$i2u~eMIk?p17a& z{bqjO0@!I`ac=|C;0N$H>#IEuBz|%7`k@kDb+;b2_su;0CKb$vAcHWx4Y7g+&2dM3`^%4!w19|g4W;N zcI-%-g5e?QCv9gF8!n)SPI*F*+Zm*D{L7u`dx5nQj&*L4pi7t3Ly?UeF!-|2Rvb`Y z*f^iY7Qe_ygeN9~k8)}tPzdPeZhCY>)C0KB1Oa6bpvuzaagz1L!y4sRpTKJ(@pfp; zW6on214qz7eJ*g3QXg-2&y(vp5kDrukVC+}Eq>R%QR}~X#vBktE{+?}wc<1dOWF9x vAb7v54z|ASKLy(FO8Cfit_&eGCs)H literal 0 Hc$@