
    6h8                    J   S SK Jr  S SKrS SKJrJrJrJrJr  S SKJ	r	  S SK
Jr  S SKJrJrJrJr  S SKJr  SS	KJr  \R,                  (       a  S S
KJr  \R0                  " 5       r " S S\R4                  5      r " S S\R8                  5      r " S S\R<                  5      rg)    )annotationsN)Any
CollectionIterableIteratorSet)sha1nodeconstants)MatcherT)matchpathutilpycompatutil)
repository   )gitutil)
ByteStringc                     \ rS rSrSrS rS$S jrS%S jrS&S jrS'S jr	S(S jr
\
rS)S	 jrS*S
 jrS+S jrS*S jrS,S jrS-S jrS.S jrS/S0S jjr\R*                  S 5       rS1S jrS2S jrS S4       S3S jjrS4S jrS/S5S jjrS%S jrS6S jrS7S jrS7S jrS8S jr S9S jr!      S:S  jr"S*S! jr#S;S" jr$S#r%g)<gittreemanifest$   z{Expose git trees (and optionally a builder's overlay) as a manifestdict.

Very similar to mercurial.manifest.treemanifest.
c                2    Xl         X l        Uc  0 nX0l        g)aq  Initializer.

Args:
  git_repo: The git_repo we're walking (required to look up child
      trees).
  root_tree: The root Git tree object for this manifest.
  pending_changes: A dict in which pending changes will be
      tracked. The enclosing memgittreemanifestctx will use this to
      construct any required Tree objects in Git during it's
      `write()` method.
N)	_git_repo_tree_pending_changes)selfgit_repo	root_treepending_changess       4/usr/lib/python3/dist-packages/hgext/git/manifest.py__init__gittreemanifest.__init__*   s     "
" O /    c                n   [         R                  " U5      nSnXR                  ;   a  U R                  U   nUc  [        eU$ U R                  nUR                  S5      nU R                  nUSS  H   nXx   nU R                  UR                     nM"     XVS      nUR                  [        R                  :X  a  Sn	OcUR                  [        R                  :X  a  Sn	OBUR                  [        R                  :X  a  Sn	O![        S[        UR                  5      -  5      eUR                  R                  U	4$ )zGiven a path, load its node and flags, or raise KeyError if missing.

This takes into account any pending writes in the builder.
N/r!      x   lzunsupported mode %s)r   fsdecoder   KeyErrorr   splitr   idfilemodepygit2GIT_FILEMODE_BLOBGIT_FILEMODE_BLOB_EXECUTABLEGIT_FILEMODE_LINK
ValueErroroctraw)
r   pathupathentvaltcompstecompflagss
             r   _resolve_entrygittreemanifest._resolve_entry=   s   
 !!$'(((''-C{JJJC ZZ#2JDBruu%A  b	l<<6333E\\V@@@E\\V555E2S5FFGGvvzz5  r!   c                *    U R                  U5      S   $ Nr   r<   r   r3   s     r   __getitem__gittreemanifest.__getitem__Z   s    ""4(++r!   c                $    U R                  U5      $ Nr@   rA   s     r   findgittreemanifest.find]   s    ""4((r!   c                n    [        [        U R                  [        R                  " 5       5      5      5      $ rE   )lenlistwalkmatchmodalwaysr   s    r   __len__gittreemanifest.__len__`   s"    4		(//"34566r!   c                N     [        [        U 5      5        g! [         a     gf = fNTF)nextiterStopIterationrN   s    r   __nonzero__gittreemanifest.__nonzero__c   s(    	d 		s    
$$c                H     U R                  U5        g! [         a     gf = frR   r<   r(   rA   s     r   __contains__gittreemanifest.__contains__l   s*    	% 		s    
!!c                J    U R                  [        R                  " 5       5      $ rE   )rK   rL   rM   rN   s    r   iterkeysgittreemanifest.iterkeyss   s    yy*++r!   c                4    [        U R                  5       5      $ rE   )rJ   r]   rN   s    r   keysgittreemanifest.keysv   s    DMMO$$r!   c                "    U R                  5       $ rE   )r]   rN   s    r   __iter__gittreemanifest.__iter__y   s    }}r!   c                    [         erE   NotImplementedError)r   r3   noder;   s       r   setgittreemanifest.set|       !!r!   c                B    X R                  U5      4U R                  U'   g rE   )r;   r   )r   r3   rh   s      r   __setitem__gittreemanifest.__setitem__   s    &*JJt,<&<d#r!   c                "    S U R                   U'   g rE   )r   rA   s     r   __delitem__gittreemanifest.__delitem__   s    &*d#r!   Nc                   Ub[  [         R                  " US 5      n[        UR                  U5      5      nU R                  U5       Vs1 s H  oDU;  d  M
  UiM     sn$ U  Vs1 s H  oDU;  d  M
  UiM     sn$ s  snf s  snf )Nc                    g rE    )r3   msgs     r   <lambda>,gittreemanifest.filesnotin.<locals>.<lambda>   s    tr!   )rL   badmatchri   rK   )r   otherr   sm2fs        r   
filesnotingittreemanifest.filesnotin   st    %%e-CDEejj'(C#yy/@/!C<A/@@24aE>422 A2s   		A9A9#	A>0A>c                .    [         R                  " U 5      $ rE   )r   dirsrN   s    r   _dirsgittreemanifest._dirs   s    }}T""r!   c                    U R                   $ rE   r   rN   s    r   r   gittreemanifest.dirs   s    zzr!   c                    XR                   ;   $ rE   r   )r   dirs     r   hasdirgittreemanifest.hasdir   s    jj  r!   c                    g)NTrt   xs    r   rv   gittreemanifest.<lambda>   s    tr!   Fc                   ^ ^^^^^	 0 mUUUUU U	4S jn/ m	U" T R                   TR                   S5        T	(       a%  T	R                  5       u  pVnU" XgU5        T	(       a  M%  T$ )ad  Finds changes between the current manifest and m2.

The result is returned as a dict with filename as key and
values of the form ((n1,fl1),(n2,fl2)), where n1/n2 is the
nodeid in the current/other manifest and fl1/fl2 is the flag
in the current/other manifest. Where the file does not exist,
the nodeid will be None and the flags will be the empty
string.
c                "  > X:X  a  gU c  0 n Uc  0 nU  GH.  nU[         R                  " UR                  5      -   nUR                  [        R
                  :X  aG   XR                     nUR                  [        R
                  :w  a  SnTR                  US-   X545        M  TR                  U5      u  pg XR                     nTR                  U5      u  pUb5  UR                  [        R
                  :X  a  TR                  US-   SU45        T" U5      (       d  GM	  Xh:w  d  Xy:w  a  Xg4X44TU'   GM  T
(       d  GM)  STU'   GM1     U H  nUR                  U ;   a  M  U[         R                  " UR                  5      -   nUR                  [        R
                  :X  a  TR                  US-   SU45        Mo  T" U5      (       d  M~  TR                  U5      u  pSX44TU'   M     g! [         a    Sn GNnf = f! [         a
    SnSu  p GN8f = f)zEcompares two trees and appends new tree nodes to examine to
the stackN   /Nr!   )	r   fsencodenametyper,   GIT_OBJ_TREEr(   appendrF   )t1t2subdire1realnamee2n1fl1n2fl2cleanr   ry   resultr   stacks             r   _iterativediff,gittreemanifest.diff.<locals>._iterativediff   s    x zz!H$5$5bgg$>>77f111"[77f&9&99!%B LL(T/2!:;"ii1GB.["'**X"6
 ~"''V5H5H*HhotR%@A ?? x3:-/Iy+Ax(+/x(? B 77b=!H$5$5bgg$>>77f111LL(T/4!<=8__#jj2GB(3bY'?F8$ 3 $ "!" $ .!"-C.s$   .G'4!G:'G76G7:HHr!   )r   pop)
r   ry   r   r   r   r   r   r   r   r   s
   ````    @@r   diffgittreemanifest.diff   s\    $ 8	@ 8	@t tzz5;;4"YY[NF26* e
 r!   c                J    U R                  U5      u  p4X24U R                  U'   g rE   )r<   r   )r   r3   flagrh   unused_flags        r   setflaggittreemanifest.setflag   s'     //5&*jd#r!   c                P     U R                  U5      S   $ ! [         a    Us $ f = fr?   rY   )r   r3   defaults      r   getgittreemanifest.get   s1    	&&t,Q// 	N	s    %%c                L     U R                  U5      S   $ ! [         a     gf = f)Nr   r!   rY   rA   s     r   r;   gittreemanifest.flags   s/    	&&t,Q// 		s    
##c                j    [        U R                  U R                  [        U R                  5      5      $ rE   )r   r   r   dictr   rN   s    r   copygittreemanifest.copy   s)    NNDJJT-B-B(C
 	
r!   c              #  .   #    U  H  nXU   4v   M     g 7frE   rt   r   r{   s     r   itemsgittreemanifest.items  s     A!W* s   c                "    U R                  5       $ rE   )r   rN   s    r   	iteritemsgittreemanifest.iteritems  s    zz|r!   c              #  L   #    U  H  nU/U R                  U5      Q7v   M     g 7frE   r@   r   s     r   iterentriesgittreemanifest.iterentries  s(     A,d))!,,, s   "$c                    [         erE   rf   rN   s    r   textgittreemanifest.text  s    !!r!   c                    [         erE   rf   )r   basechangess      r   	fastdeltagittreemanifest.fastdelta  s
     "!r!   c              #  ^  #    U H  nU[         R                  " UR                  5      -   nUR                  [        R
                  :X  a6  U R                  U R                  UR                     X%S-   5       S h  vN   Mz  U" U5      (       d  M  [         R                  " U5      v   M     g  N27f)Nr   )	r   r   r   r   r,   r   _walkonetreer   r*   )r   treer   r   r9   r   s         r   r   gittreemanifest._walkonetree  s     B 1 1"'' ::Hww&---,,NN255)5T/   x''11 s   A6B-8B+9B-B-c                P   [        U R                  U R                  US5      5      nU R                  R	                  5        VVs1 s H  u  p4Ub  M
  UiM     nnnU R                   Vs1 s H  o1" U5      (       d  M  UiM     nn[        [        X&-  U-
  5      5      $ s  snnf s  snf r   )ri   r   r   r   r   rT   sorted)r   r   baselinepvdeletedpends          r   rK   gittreemanifest.walk$  s     t((UC@A!%!6!6!<!<!>L!>!1!>L00=0aE!H0=FHOw6788 M=s   	BB(B#<B#)r   r   r   )returntuple[bytes, bytes])r3   bytesr   r   r3   r   r   r   )r   int)r   bool)r3   r   r   r   )r   Iterator[bytes])r   zlist[bytes])r3   r   rh   r   r;   r   r   None)r3   r   rh   r   r   r   )r3   r   r   r   rE   )r   z
Set[bytes])r   zpathutil.dirs)r   r   r   r   )ry   r   r   r   r   r   r   zQdict[bytes, tuple[tuple[bytes | None, bytes], tuple[bytes | None, bytes]] | None])r3   r   r   r   r   r   )r3   r   r   zbytes | None)r   r   )r   zIterator[tuple[bytes, bytes]])r   z$Iterator[tuple[bytes, bytes, bytes]])r   r   )r   r   r   zIterable[tuple[bytes, bool]]r   ztuple[ByteString, ByteString])r   r
   r   r   )&__name__
__module____qualname____firstlineno____doc__r   r<   rB   rF   rO   rV   __bool__rZ   r]   r`   rc   ri   rm   rp   r|   r   propertycacher   r   r   r   r   r   r;   r   r   r   r   r   r   r   rK   __static_attributes__rt   r!   r   r   r   $   s    
0&!:,)7 H,%"=+3 
# #! $	UU U 	U

Un1


-
""")E"	&"
	29r!   r   c                      \ rS rSrS rS rSSS jjrS rSS jrSS jr	SSS	 jjr
 SSS.   SS jjjrSSS.SS jjrSS.SS jjr\S 5       rSrg
)gittreemanifestctxi.  c                    Xl         X l        g rE   _repor   )r   repogittrees      r   r   gittreemanifestctx.__init__/  s    

r!   c                D    [        U R                  U R                  S 5      $ rE   )r   r   r   rN   s    r   readgittreemanifestctx.read3  s    tzz4::t<<r!   Fc                "    U R                  5       $ rE   )r   r   shallows     r   readfastgittreemanifestctx.readfast6  s    yy{r!   c                B    [        U R                  U R                  5      $ rE   memgittreemanifestctxr   r   rN   s    r   r   gittreemanifestctx.copy9       %TZZ<<r!   c                @    U R                  5       R                  U5      $ rE   )r   rF   rA   s     r   rF   gittreemanifestctx.find>  s    yy{%%r!   c                    [         erE   rf   rN   s    r   rh   gittreemanifestctx.nodeA  rk   r!   c                    [         erE   rf   r   s     r   	readdeltagittreemanifestctx.readdeltaD  rk   r!   N)r   c                   [         erE   rf   )r   valid_basesr   s      r   read_any_fast_delta&gittreemanifestctx.read_any_fast_deltaG  s
     "!r!   T)r   exactc                   [         erE   rf   )r   r   r  s      r   read_delta_parents%gittreemanifestctx.read_delta_parentsO  rk   r!   c                   [         erE   rf   r   s     r   read_delta_new_entries)gittreemanifestctx.read_delta_new_entriesR  rk   r!   c                B    [         R                  [         R                  4$ rE   )r	   nullidrN   s    r   parentsgittreemanifestctx.parentsU  s     !''):)A)AAAr!   r   )F)r   r   r   )r   r   rE   )r  zCollection[int] | Noner   r   )r   r   r  r   )r   r   r   r   r   r   r   r   rF   rh   r   r  r  r
  propertyr  r   rt   r!   r   r   r   .  sw    ==
&""
 /3" 	"+" 	" 5: " 9> " B Br!   r   c                  0    \ rS rSrS rS rS rSS jrSrg)	r   i[  c                *    Xl         X l        0 U l        g rE   )r   r   r   )r   r   r   s      r   r   memgittreemanifestctx.__init__\  s    

 "r!   c                X    [        U R                  U R                  U R                  5      $ rE   )r   r   r   r   rN   s    r   r   memgittreemanifestctx.readb  s    tzz4::t7L7LMMr!   c                B    [        U R                  U R                  5      $ rE   r   rN   s    r   r   memgittreemanifestctx.copye  r   r!   Nc                   U(       a!  [        U[        R                  5      (       d   e[        R                  " [        U R                  5      5      nSU R                  0n	SU R                  R                  U R                  5      0n
[        US S9 H  nUS:X  a  M  UR                  S5      nSnU H  nX   n U[        R                  " U5         R                  nU R                  U   nUSU-   -  nUb#  UX'   U R                  R                  U5      X'   Mh  0 X'   U R                  R                  5       X'   M     M     U R                  R!                  5        H  u  nnSU;  a  SnUnOUR#                  SS5      u  nnSU-   nUc*  U
U   R%                  [        R                  " U5      5        MX  Uu  nn[&        R(                  [&        R*                  [&        R,                  S.U   nU
U   R/                  [        R                  " U5      [0        R2                  " U5      U5        M     [        U
[4        SS9 Hk  nUS:X  a    OdU
U   nUR#                  SS5      u  nnU
U   R/                  [        R                  " U5      UR7                  5       [&        R8                  5        Mm     U
S   R7                  5       R:                  $ ! [         a    S n GNf = f)	Nr!   c                    [        U 5      U 4$ rE   )rI   r   s    r   rv   -memgittreemanifestctx.write.<locals>.<lambda>{  s    SVQKr!   )keyr   r   )r!   r%   r&   T)r  reverse)
isinstancerL   alwaysmatcherr   r   rJ   r   r   r   TreeBuilderr   r)   r   r'   r*   r(   r   rsplitremover,   r-   r.   r/   insertr   	togitnoderI   writeGIT_FILEMODE_TREEr2   )r   transactionlinkp1p2addedremovedr   touched_dirstreesbuildersdr8   fullpartparentparent_tree_idnewr{   infodirnamebasenamenflmodebcbdnbns                                r   r$  memgittreemanifestctx.writej  s    Juh.D.DEEEE}}T$*?*?%@A

 ''

3
 *?@ACxGGDMED%+H,=,=d,C%D%G%GN**^4C t#?"%EK%)ZZ%;%;C%@HN
 #%EK%)ZZ%;%;%=HN%  A2 ,,224GAt1}$%HHT1$5!.|!(():):8)DE211 == 22 	
 !((%%h/1B1B11Et! 5* c48ACx!BXXdA&FBRL!!"%rxxz63K3K 9 }""$(((W   Cs   :2K		KK)r   r   r   rE   )	r   r   r   r   r   r   r   r$  r   rt   r!   r   r   r   [  s    #N=
G)r!   r   ) 
__future__r   typingr   r   r   r   r   mercurial.noder	   mercurial.interfaces.typesr
   	mercurialr   rL   r   r   r   mercurial.interfacesr    r   TYPE_CHECKINGr   
get_pygit2r,   imanifestdictr   imanifestrevisionstoredr   imanifestrevisionwritabler   rt   r!   r   <module>rL     s    "   - /  	 
			G9j.. G9T*B;; *BZV)J@@ V)r!   