From f4e75e5b6f388bc4463c6890e520aed7d45e32e5 Mon Sep 17 00:00:00 2001 From: Julien Miotte Date: Thu, 21 Jul 2011 11:43:16 +0200 Subject: [PATCH 1/3] New Repository method: status(). Using git2's status methods to be able to read the status of a repository. The returned status is a dictionnary with file paths as keys and status flags as values. --- pygit2.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/pygit2.c b/pygit2.c index d489c45..98af20a 100644 --- a/pygit2.c +++ b/pygit2.c @@ -736,6 +736,30 @@ Repository_packall_references(Repository *self, PyObject *args) { Py_RETURN_NONE; } +static int read_status_cb(const char *path, unsigned int status_flags, + void *payload_dict) +{ + /* This is the callback that will be called in git_status_foreach. It + * will be called for every path.*/ + PyObject *flags; + + flags = PyInt_FromLong((long) status_flags); + PyDict_SetItemString(payload_dict, path, flags); + + return GIT_SUCCESS; +} + +static PyObject * +Repository_status(Repository *self, PyObject *args) +{ + PyObject *payload_dict; + + payload_dict = PyDict_New(); + git_status_foreach(self->repo, read_status_cb, payload_dict); + + return payload_dict; +} + static PyMethodDef Repository_methods[] = { {"create_commit", (PyCFunction)Repository_create_commit, METH_VARARGS, "Create a new commit object, return its SHA."}, @@ -764,6 +788,9 @@ static PyMethodDef Repository_methods[] = { "\"target\"."}, {"packall_references", (PyCFunction)Repository_packall_references, METH_NOARGS, "Pack all the loose references in the repository."}, + {"status", (PyCFunction)Repository_status, METH_NOARGS, "Reads the " + "status of the repository and returns a dictionnary with file paths " + "as keys and status flags as values.\nSee pygit2.GIT_STATUS_*."}, {NULL} }; @@ -2443,4 +2470,23 @@ initpygit2(void) PyModule_AddIntConstant(m,"GIT_REF_OID", GIT_REF_OID); PyModule_AddIntConstant(m,"GIT_REF_SYMBOLIC", GIT_REF_SYMBOLIC); PyModule_AddIntConstant(m,"GIT_REF_PACKED", GIT_REF_PACKED); + + /** Git status flags **/ + PyModule_AddIntConstant(m,"GIT_STATUS_CURRENT", GIT_STATUS_CURRENT); + + /* Flags for index status */ + PyModule_AddIntConstant(m,"GIT_STATUS_INDEX_NEW", GIT_STATUS_INDEX_NEW); + PyModule_AddIntConstant(m,"GIT_STATUS_INDEX_MODIFIED", + GIT_STATUS_INDEX_MODIFIED); + PyModule_AddIntConstant(m,"GIT_STATUS_INDEX_DELETED" , + GIT_STATUS_INDEX_DELETED); + + /* Flags for worktree status */ + PyModule_AddIntConstant(m,"GIT_STATUS_WT_NEW", GIT_STATUS_WT_NEW); + PyModule_AddIntConstant(m,"GIT_STATUS_WT_MODIFIED" , + GIT_STATUS_WT_MODIFIED); + PyModule_AddIntConstant(m,"GIT_STATUS_WT_DELETED", GIT_STATUS_WT_DELETED); + + /* Flags for ignored files */ + PyModule_AddIntConstant(m,"GIT_STATUS_IGNORED", GIT_STATUS_IGNORED); } From d313af21a0f9507590befbafaceac1c3987e6d7c Mon Sep 17 00:00:00 2001 From: Julien Miotte Date: Thu, 21 Jul 2011 12:03:15 +0200 Subject: [PATCH 2/3] Adding a DirtyRepoTestCase to be able to test Repository.status(). Also, adding a dirty repository in the data directory. --- test/data/dirtyrepo.tar | Bin 0 -> 61440 bytes test/utils.py | 8 +++++++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 test/data/dirtyrepo.tar diff --git a/test/data/dirtyrepo.tar b/test/data/dirtyrepo.tar new file mode 100644 index 0000000000000000000000000000000000000000..d9ac4425a040fbc3956ab5d17078f2ef2a891246 GIT binary patch literal 61440 zcmeHQd5k1ic^?}>=;n|eKtLemxo6lpcKW_%W<6_mXKnA=dw_R0PS|6%x~h7nJl$Qr zRn@yYcnt{=QbLFz2uLh&5=bBf#Gyzb1O<^e1c}2$Bv!CQ{s0n1#zBc45J{9o%J2K$ ztM2N%o9WrLO^v+n?y7px2x8TE*4XTVqq$kPUmyQDUsi`5d{D@Tu*a^n5tS^X5ezy*J1a&8ay*D7)|;E4;!Yj zUNbMRm#vDqUbPLYY?;Q+=RpK61??EPnHOMptb1l8-9Hr+`;8B z=$}s&iT>G4E*t9q9iV*VrY-s_``<7tre{ua`6s)7$oijd+W)y?hSvXdDj(8+WFqe1 z!DDKd7h3*1K;kpFX_x#f`+t&C8cY7Os|5>GjP%~ zA1eO=`#+y1`OoHyq5Myp3_alm=-(*e$8LlHi2kGc|BD&6|5Mpi=>P9YunAx6qW>0CY&`hRF|8L^7?gcQk|9fHOC+AvA{&zv}6&lBp{~R3u(Ek~-|HAnH?(<i(~gr~Q8>mxBEl=6~%z=XB8DG0X16nSk{FX!J++ zUxD}k*?c;r|L#+NYN{9gH%-l$Bo~ZB|03lH!vCMe{y&ue-RFS*^sj2JXF8J@!BG1T z!Y=cF3q?u)e1YVFLT&tLy@*;JVSe@$4bgZ{|>E?XND?s=I0PiJ#Y{jco5 z0z!hJ{+}=%dVxEm+m3lI8le&(*Ya#2UvlP3TXw8Rbum>L?I*H7b@_6UQvu^GtCo)lDbrrej!!`MQm&W>pfpUEMFz*)+NN zQR*x9rZTBi1Xrt;C+4i06uXe`(f~zeZ52e?b3aw?oD_LNc=Ne{I8hG z!xx13Pm1b4L;HXCd8-fowc-S$z@yXOkN+V27t(+CiH{!o(|@$M&?ti>`sW6m|B}i0 z=l>}BXK(-n_J3jgZxrnA?3pV!JoL!j(T7tv{j&DW<-hs<+unWW4{mzv+&zw6lPR612oVb`5azu|BqzHrwgdw>1JSHE_| zyi)kjZ+!pQ%RjYz|K+Vu?tSOyExaK~_lfwIHfBC{*QfvLi=Tb&`wPGGufO)`7k~HO554T*2j2G0 zt1o$uc>P@B*j-;o(?4C*3)x&@+0?acKD(rAOUnfi4#X8I!?rvFnp-~X@ZpGk-3zxl}9<OGE!uansVT?ZX zHwzP^{y6nNpns9h|IK9!;rS2Onf}X$nOQECGDh0Kv5dLWQYo{nnZ;sWGnVv>nOoBH z+2!;ogB-g4BiQfn|Cs)nbRiX<|2GP1cl?aM{$H4yihTNpCwB}l1n|tlKp*{Y)yk85 zBfyWd{^KoTmzJ*6`mgH$vU&Lb!uap*GeCd(=Z$<;U(RF;=F+l;60lMs zlg}?{hNdko<;!Fhl*?&-lo1YF|FQNr*MFuz;(rJihVj2qkh{ZYeE)AQV~pYd{oH#V z{lKH|e)OepeZu*{$;{tpo|=E|)F*CTe(Meg6E?r*80e6H!*q4Ws(UE?ncPrF{s-m% zrPIFuuetv(Q2l=x|DPNU`awEft7%o!5Uu*JeZn-5hwE)xE~nax*#J|_3eOhQ0{6{8 zqePgG+YiG}@9Q1%zjor-u_LF}Z$EV8)UlIyPH5=El9nH1g$DCHmT|KszYvV8taxc*O?65a3)9l2)>S8v3> z7apH|{9E*d|2Z}F{O3*G@S0zon);PLoSJ&h;N!FZ&S#1Hp9410h!!Q3*&ieizoP5Ve-}mA5SHA0Ke)e6z_q$UsR_{v*ye|Rp_9%G# zso=eDBzUiChbLda(l&k2<*B_2K7T6s=SG76>R#}DoDfu^`}d9qKNb879q@b8KdRsd z&W{H?(1zjir-G-A1n=c7c%8Ta+>(OJp9(I%kHDv|=!DzC!SUHAULoPiPX!m;Hv-(3 zxbpn;ZZQB}pZGZimp>I;*`u%-u(fU7L{6Cw`h4ueF`gZlR7yZpE zdZl5El-f1Y*oN4DDGK)c`#*X958eV6p8qovZg=|7w7{{iqTuAS2;PHgM#XEbXpv>YB=l1+tfUPHP!LNWy{+Xv(vMJP6wi*ZM;s>P2kBpY)5FK z?$}gZh?fn!US(TYHLwMSq`E7=WRXt7pHPVr2GmijfE1c-1_X{|Ryrel+3;Wf}-8OuI8b{k|SXf>hLVNTQ?3+D}rs_DAg zh6x)0FbD#S02n6J*simMp_rNHc*+)LO)FK%K)_6B1dE7dsi2l0^g`=cOAKO(XcQI( z&B!q?#p{{_`yw7!NTKsm#QvmVUP{&)m5Rvh-;<8QDyc;y+JgiJE*`;&jKk zHY>ug%4MORq`8^Zy0?v!7EM#gdb}1Kq+w?AhF-{J^ishrEo-Sl%FO3V6fKx_}&1XF(qTC2=xXJ3w zoFpq96Uw-A6KxO7Q@3l5?Yg2~(L6d#(l`7-60>FyU9?NKW%L@yK0Iq)g4qZlY}S$S z344%c9H20 z7T(kxGy{ui7$HXKN;dSYieV;*^k+nDrfs4zam%WR(Q%kDaZc>n6OBxZ<2Ja_@0x8; zoLK~uO5ZZUkeXvR09^xKg&Yc)4MGNc+g!xCN8YSUKxqD$-^GUIn8u<221VU=FaxV% z5nI^eq+J1(T#-)Ax+2+d9Ts8FnO_vHRnu`ICu2{z7aL@Ws{ueJ>1@tTNDevx7@Xc& zAuF7ah7hl{QG+lc5=>Z1L?e9GQcTjDIW!*EHQ0s*7@wFXZr5PN$K!O5b`QYb>H!gd zlbG>Y`D!#G#L>0&14oapuFky#G(;uB>yjBr$~%-$c?U%*$=${{;j&5TY}5Bv!z;!7%Q2&X=7~@IOUW# zJxzvnyLzx`Pa>&+24FPws2P_m*B6zh{s8~scq)-dbiz=gxK)D$vKFQ73X#XKiM#0+ z&B5?tVp7e~0_*w~_z4fLbWC2bQj*8^_L4^y;#M0{uxVBf<`q-twoE^c`+%6TrzWMF zq>RVIozreCztArvBJ8E#tgGWedo) zC}5N>qA5M722M*t2@5sb!MJs596Pf^+{oSp1m8ZzD$O2QLKRts%0_q9G|QHQV-aZ> z?(O02{H=%Y^i}@x`uJbW-^O2 z*%&Yq6%x^l^Y|uOb{fvYtcbXkC}~?FjseWN$@9r+k%aM4Zy)i<;#D%3U}>A^XS#1cz~C(3#uE%g#Lm`YA|Wo2Ip5Q~YZCZE zbUGqOgpuvpBW9T2_U;v{I2=AO7$FwsX;h}G=`^&HCl0FZ0yY)mPNbC`IDP8yiF?+M z9J>AZDRC7X2V1hn2sk^JSlEAdKCv*9Y@^YNIGaw^XK891&_E)7(G{`tGXNcvSh#vs zNCQ${+rOVLhsMgNi$~A(A6taVHeBuc=8o5X8pn|JKUKs#e>?m?R0bI4|Bgz;9XvPc z`Y$&If#oi+`U_9n!j`hM4JmE0j^MpJxijK)>aV{>w-%g$?`I6pkL;s|?`NRrr)3Yw z1&6otP(N6|oYEQ?(__?{JqZr2;tASg#of&~LRpP^lsDD!D^OCT50QM8BrLc| zxfpXJ_9gJ{Y|uk9_ow&9W?mP2AiA<6W!F>w$??^i%8qRRQRKf6sQ;1iUzCA|_Wur~ zdi18F%Ks?-Ux+5Gsutrstu(-xlH4u=V@NVJl+qmQFUi4&CMC(E(>(ZOPx+Vc@!7H5 z`~3`A|BI9~#55B`D_(lMn~GAyK&HnX&EvNrG~&VTsA zYpje@1SWtRYDZVH?TQIY1#2`m`2@oyzNC@}<*gw>tHKa2^&4QR0m;ld$gR4~vM3I9cs$^u9HvLh^2m)mIo{2>v zCh~hW<~Ka4l}*Hm*jSfQE5u`(W+Vbt`)EXnOUga-A?8b`LF2?&RJ51vcHh$XhmnYh z{d+QgLqw}uk;O$Byx`O=w?SJ+-t5D;<<11)w>K6uDRC>NwO`yS=YubDGW+NKCtHCE z^n{oZO+#TKCgQfdAX~S7OCVj-JWbKzl>xnWck0uDH3<_apg7utpz%1Vk3KqPUWQMl zq)T2I);jp?e6*862ej^dw5@Ll?|`N}!=^e?4V#)_Si|On9Q>6#MG9LY-XAC(jjH@V zx&(;q{DD_0eUV&9{%$Dnd~DwLs0A9bV=dNQv>IE0KPiSLinA9M7R2jSzF`2SbUef7 zEcG!qtx);x)Q z<+Jo9YcZx~$50vBcrzqk2~R6ea$!*#w!ktX%nf7_1Z@FabT{GuURS_YXYN8NP(JGuC5UaL`y054r0fL@_v%Ry|MKROXE9l^Y@jTJCHsD%I3oCjDA)kilc9uM$ zw8lZ(XyB%}E6&Yw_?;%-mR$;ltRu+nnZ8y8EUB;}cvmK72p(#~n$9?LdXR zf$KvNamcKg9vK93Q66K)14oIjQIIXwGz(D{=ZzRYU-nH|%G76e3>n}JhX#}gp zW;!)*3~xa7Q$u<&@*3MqOh4JfI7~Zu^gTGOa}oh%FK@L`ve$S6{5GlaN=vF!r+Abr zLqu(kxhYAl20fbzXmK*3;;Y$z)Na=}obT|!fOCK{6Bd8OZfh`Ns)LUoYDM0D(hFr z(gDYhOvcrO+raxFT({h)z%rJmA?e7fMmdw5Rxo-BM2q9d*SbQfl%yv^B{YzFJHOdm z{^7%R%o6e$CgKAgEdS|rKHug4#WAyC{CDTn9S)&g{@3jKwqtE<;x(-Lyue#o3ybvs zCA`$NX4zs*9M<5NvZZiiH^wRQl2c+bVTyKI@FxY+e>nBWe@JCtbJ8pAr{QqD&n_); z-ZkaFA~Hhx-|RRel|ud}c1QtgjV(jo74Ytda)1D%qgFtv9zTN%15#>>Q-;W|)v7l{ zP82eV;JkKGCkRk8Y53o`??&B40=`z|A1=JxNS(fnTs8PLwx9xONaW3($@mSFVJvgi zuH5_CO!!67uck}+RFop;?rBFY7QJ(#bS7YoS zkQ*@aY|26jd5;s6-0f<~Mj{)uQdv+f#RYK{+2ztu75gw?%A@9eKfLm$<1~;%-W;@H zdNOgHt1zfCLb*M-2ljFV25{SLNix=99Mi|(E@ZJRlH~)Y^l?h?20=g+M}}PgP7*fFU<`$ngjNB>d_b zf9_C8PGIW9;J0y}sB5!d2-v2&WpXfpM^RB5(l$Cmk{h{Y>wU-jH*rm`GCaLX^CCU6hm0 zpmv0V3~~?KK{{W9H0p8BjvH{IN%4?yQK_Kzr{fVUB2|VG*C=`6U{{*EtOY0c^VddCr z$q|#>*XS!q%2Z(HUK<$tJOEa;I*D&2k~}|mCKX@S;^lLD=S7m9kIZ4^TE$D%=jqo2 z!mXoLXfAoShOAOKy!1J~MQ(W-I~<5rG1mmy0TaoX^D`1~H&)f`f<^PVzywsDY4&8pwJ%aA=%pwsKO_6J( zd4XKWk@lx!az^MNeNLe;LXY7eMHdw7HWdsFiSkF)2%D_O%HA)Jffh|gqqp9A_Rxv7 z_1ljhicatFFB;|aVYRx;>^H>gHc+I6c{~IerQhb!Xtk{(!-oOhN zc!@a^%Ni6Twh%bh0gD583w1>57Yv$y{WcZ2j@&oePr}9v_TUd;k-A2AcwV~jCBS`X(}e{KMV##+%l2Q zjH)lkx1dnFN2S&hZTCWf@~T61Vg6iM-2%yKm5{B~`C|lSZ*N5cxdTL<30pOAw$9LYYKf6LVaP$KvNAZ4{CaSRJ;Kw!8;=Q4w^ z$_VW=!02sXB6!8wAnkZq_I zR5b%`Dn)|Wr-r~CDm7%flB`gXdKP@a`R!nBzgiU|mBjRCfr1R1c#5XLB3N!XL~*JX zMu{w>OJY_Tou18|lk#A3ksZy!YCy@YUr!7L0{t(Gq2}R8!xn2(?r#B^+bdP$4+4ZZ zYEopmLiPAuvy00D#K3C!)uJJSelj^zPW4%Bo z8S7|26oLLT%_SfjjUHIU6lncg;|*W?A`aSN+L`VBLBP(9e{_!KSBRTP#X z0+z-JP0@%SI_6!YzcD&5u}LddpC=Sg@Dp-Ff}@L&oko=_I9iIg+l02j1mVn}$6M12 z4kpt*7>U?Kf`MVA&YmZy2vrGBJ*aL+Bq4CsH2NS1VtqrTJvAn|A@cE2v|uLv8&-Wn{)Bj@j5C zzp(2Wkam@XiDkKpYuy=#oQX)b?0($70~2kot$13~a``OYMrWi;S)8k47R!b5@=`9B zE^GP1a;{()x>3+FDN$G|7qwD3XX1V)vy>_>EiISxnUbE$Wli14rc1@;@=`iSTGCBQ zPp4EZj6N4dy|98|HJ4OD5GNiX#Kwp5EYjAh?Z7*!#Mq|>gkj{J2T+hAZ=)78`829X z>9i0eSvzLZu=OPLF55$)NgA3WNOeRk1$eSz*!$?>H$8P-Nf1KCy(c%_}`lldKnQ2^wWROpDXO zLrr1rlRFQ{$LR%FAlnM#dmUatbU4JP2}u(bt8OzWtBI0^y#OLov?6Z6yX0tKP*ouZNj|9l6XOnz+UjRrj5_+j?I7LKBo z^|vt@0h!|y1!m8;;dMo*6AkF_DvH4%6oc6JMG@C2C<7LVBLa{-e?~;kEu`uHNdsqD zAspEjTRSv(94f|v5Zkqo@j-p`)c?HxOJi#S=KnDLpUNQFqoe*m6YBp#RGZwrQT4x4 z5Xw%67zFHd*w*r}JBk)eLk6oQ96P4fT=MYI0nj9^ZsK$n z^>r7X$&ul@LF$ly%8;1&Sjhex^!`66fDZZ3(ksEj^FJm|iEe<{k8&Aq$ELLV!SG6m xfe-^B20{#k7zi;CVj#poh=C9TAqGMWgct}h5Mm(2K!|}510e=N3_PPS@c#yZon-(3 literal 0 HcmV?d00001 diff --git a/test/utils.py b/test/utils.py index 3245694..0fcfc1c 100644 --- a/test/utils.py +++ b/test/utils.py @@ -66,8 +66,10 @@ class BareRepoTestCase(BaseTestCase): class RepoTestCase(BaseTestCase): + repo_dir = 'testrepo' + def setUp(self): - repo_dir = 'testrepo' + repo_dir = self.repo_dir repo_path = os.path.join(os.path.dirname(__file__), 'data', repo_dir) temp_dir = tempfile.mkdtemp() tar = tarfile.open(repo_path + '.tar') @@ -76,3 +78,7 @@ class RepoTestCase(BaseTestCase): self._temp_dir = temp_dir temp_repo_path = os.path.join(temp_dir, repo_dir, '.git') self.repo = pygit2.Repository(temp_repo_path) + +class DirtyRepoTestCase(RepoTestCase): + + repo_dir = 'dirtyrepo' From 561a01d5fcd695fed25724bd11aec466a19a037a Mon Sep 17 00:00:00 2001 From: Julien Miotte Date: Thu, 21 Jul 2011 12:07:10 +0200 Subject: [PATCH 3/3] New test for Repository.status(). --- test/__init__.py | 2 +- test/test_status.py | 79 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 test/test_status.py diff --git a/test/__init__.py b/test/__init__.py index cebf864..ac53525 100644 --- a/test/__init__.py +++ b/test/__init__.py @@ -36,7 +36,7 @@ import unittest names = ['blob', 'commit', 'index', 'refs', 'repository', 'revwalk', 'tag', - 'tree'] + 'tree', 'status'] def test_suite(): modules = ['test.test_%s' % n for n in names] return unittest.defaultTestLoader.loadTestsFromNames(modules) diff --git a/test/test_status.py b/test/test_status.py new file mode 100644 index 0000000..41dc4db --- /dev/null +++ b/test/test_status.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python +# -*- coding: UTF-8 -*- +# +# Copyright 2011 Julien Miotte +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License, version 2, +# as published by the Free Software Foundation. +# +# In addition to the permissions in the GNU General Public License, +# the authors give you unlimited permission to link the compiled +# version of this file into combinations with other programs, +# and to distribute those combinations without any restriction +# coming from the use of this file. (The General Public License +# restrictions do apply in other respects; for example, they cover +# modification of the file, and distribution when not linked into +# a combined executable.) +# +# This file is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING. If not, write to +# the Free Software Foundation, 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. + +"""Tests for revision walk.""" + +__author__ = 'mike.perdide@gmail.com (Julien Miotte)' + +import unittest + +import pygit2 +import utils + +EXPECTED = { + "current_file": pygit2.GIT_STATUS_CURRENT, + "file_deleted": pygit2.GIT_STATUS_WT_DELETED, + "modified_file": pygit2.GIT_STATUS_WT_MODIFIED, + "new_file": pygit2.GIT_STATUS_WT_NEW, + + "staged_changes": pygit2.GIT_STATUS_INDEX_MODIFIED, + "staged_changes_file_deleted": pygit2.GIT_STATUS_INDEX_MODIFIED | + pygit2.GIT_STATUS_WT_DELETED, + "staged_changes_file_modified": pygit2.GIT_STATUS_INDEX_MODIFIED | + pygit2.GIT_STATUS_WT_MODIFIED, + + "staged_delete": pygit2.GIT_STATUS_INDEX_DELETED, + "staged_delete_file_modified": pygit2.GIT_STATUS_INDEX_DELETED | + pygit2.GIT_STATUS_WT_NEW, + "staged_new": pygit2.GIT_STATUS_INDEX_NEW, + + "staged_new_file_deleted": pygit2.GIT_STATUS_INDEX_NEW | + pygit2.GIT_STATUS_WT_DELETED, + "staged_new_file_modified": pygit2.GIT_STATUS_INDEX_NEW | + pygit2.GIT_STATUS_WT_MODIFIED, + + "subdir/current_file": pygit2.GIT_STATUS_CURRENT, + "subdir/deleted_file": pygit2.GIT_STATUS_WT_DELETED, + "subdir/modified_file": pygit2.GIT_STATUS_WT_MODIFIED, + "subdir/new_file": pygit2.GIT_STATUS_WT_NEW, +} + +class StatusTest(utils.DirtyRepoTestCase): + + def test_status(self): + """ + For every file in the status, check that the flags are correct. + """ + git_status = self.repo.status() + for filepath, status in git_status.items(): + self.assertTrue(filepath in git_status) + self.assertEqual(status, git_status[filepath]) + + +if __name__ == '__main__': + unittest.main()