
    6h.                    2   S r SSKJr  SSKrSSKJr  SSKJrJrJ	r	J
r
JrJrJrJrJrJr  SSKJrJrJrJr  Sr0 r\R2                  " \5      r\" S	S
SS9  \R4                  r " S S5      rS r " S S5      rS rS r Sr! " S S5      r"SS jr#S r$S r%S r&g)zgrant Mercurial the ability to operate on Git repositories. (EXPERIMENTAL)

This is currently super experimental. It probably will consume your
firstborn a la Rumpelstiltskin, etc.
    )annotationsN)_)
commandserror
extensions	localrepopycompat	registrarrequirementsscmutilstoreutil   )dirstategitloggitutilindexs   ships-with-hg-core   git   log-index-cache-missF)defaultc                  `    \ rS rSrS r\R                  S 5       rS rS r	S r
S rSS	 jrS
rg)gitstore4   c           	        U" U5      U l         U R                   U l        U R                   R                  U l        [        R
                  " U R                   5      U l        [        R                  " 5       R                  [        R                  R                  [        R                  R                  USS5      5      5      U l        S U l        S U l        g )N   ..   .gitc                     g N )argskwargss     4/usr/lib/python3/dist-packages/hgext/git/__init__.py<lambda>#gitstore.__init__.<locals>.<lambda>@   s        c                    g r   r   )xs    r"   r#   r$   A   s    r%   )vfsopenerbasepathr   	_calcmode
createmoder   
get_pygit2
Repositoryosnormpathjoingit_progress_factory_logfn)selfr+   vfstypes      r"   __init__gitstore.__init__5   s    4=hhHHMM	//$((3 %%'22GGRWW\\$w?@
 ">$r%   c                n    [         R                  " U R                  U R                  U R                  5      $ r   )r   	get_indexr3   r5   r4   r6   s    r"   _dbgitstore._dbC   s%    
 txxd6L6LMMr%   c                B   US;   a*  [         R                  R                  U R                  S5      $ US:X  a*  [         R                  R                  U R                  S5      $ US;   a,  [         R                  R                  U R                  SSU5      $ [        SU-  5      e)	zFake store.join method for git repositories.

For the most part, store.join is used for @storecache
decorators to invalidate caches when various files
change. We'll map the ones we care about, and ignore the rest.
)s   00changelog.is   00manifest.is   HEADs   locks   hgit-bogus-lock)s   obsstores
   phaserootss
   narrowspecs	   bookmarksr      .hgs   Need to pick file for %s.)r0   r+   r2   NotImplementedError)r6   fs     r"   r2   gitstore.joinJ   s     33 77<<		733'\
 77<<		+=>>KK77<<		5&!<<!">"BCCr%   c                X    [         R                  " U R                  U R                  5      $ r   )r   	changelogr3   r=   )r6   
trypendingconcurrencycheckers      r"   rE   gitstore.changelog_   s    $((33r%   c                X    [         R                  " U R                  U R                  5      $ r   )r   manifestlogr3   r=   )r6   repostorenarrowmatchs      r"   rJ   gitstore.manifestlogc   s    !!$((DHH55r%   c                    g r   r   r<   s    r"   invalidatecachesgitstore.invalidatecachesg   s    r%   Nc                    g r   r   )r6   trs     r"   writegitstore.writej   s    r%   )r5   r4   r-   r3   r)   r+   r(   r   )__name__
__module____qualname____firstlineno__r8   r   propertycacher=   r2   rE   rJ   rO   rS   __static_attributes__r   r%   r"   r   r   4   s=    % 
N ND*46r%   r   c                d   SU;   a  [         R                  R                  [         R                  R                  USS5      5      (       d  [        R
                  " [        S5      5      e[        R                  " 5       c  [        R
                  " [        S5      5      e[        X#5      $ U " XU5      $ )Nr   r   r   sI   repository specified git format in .hg/requires but has no .git directorysD   the git extension requires the Python pygit2 library to be installed)
r0   r+   existsr2   r   Abortr   r   r.   r   )origr   storebasepathr7   s       r"   
_makestorer`   o   s    ww~~bggll=%IJJ++>  '++6  //W55r%   c                      \ rS rSrS rSrg)gitfilestorage   c                    USS S:X  a  USS  n[         R                  " U R                  R                  U R                  R                  U5      $ )Nr   r      /)r   filelogr   r3   r=   )r6   r+   s     r"   filegitfilestorage.file   s>    !98D~~djjnndjjnndCCr%   r   N)rU   rV   rW   rX   rg   rZ   r   r%   r"   rb   rb      s    Dr%   rb   c                T    US   n[        U[        5      (       a  [        $ U " X40 UD6$ )Nr   )
isinstancer   rb   )r^   r   featuresr!   r   s        r"   _makefilestoragerl      s.    7OE%""1&11r%   c                   [         R                  R                  US5      n[         R                  R                  U5      (       a  U R	                  [        S5      5        Oz[         R                  " [         R                  R                  US5      5        [        [         R                  R                  USSS5      S5       nUR                  S5        S S S 5        [        [         R                  R                  US5      S	5       nUR                  S
5        S S S 5        g ! , (       d  f       NS= f! , (       d  f       g = f)Nr@   s$   git repo already initialized for hg
r   s   infos   excludeabs   
.hg
s   requireswbs   git
)	r0   r+   r2   r\   warnr   mkdiropenrS   )uir+   dothgexcluderB   s        r"   _setupdothgrv      s    GGLLv&E	ww~~e
:;<
dF+,GGLLw<d
MM*%
 
bggll5+.	5	 
6	5	
 
 
6	5s    DD0
D-0
D>zrefs/heads/c                      \ rS rSrS rS rS rS rSS jr\	S 5       r
\
R                  S	 5       r
S
 rS rS rS rSS jrSrg)
gitbmstore   c                F    Xl         SU l        UR                  S   U l        g )NTHEAD)gitrepo_aclean
references_active)r6   r|   s     r"   r8   gitbmstore.__init__   s     ))&1r%   c                j    [         [        R                  " U5      -   U R                  R                  ;   $ r   )_BMS_PREFIXr	   fsdecoder|   r~   )r6   names     r"   __contains__gitbmstore.__contains__   s,    (++D11\\$$% 	%r%   c              #     #    U R                   R                  5        HG  nUR                  [        5      (       d  M  [        R
                  " U[        [        5      S  5      v   MI     g 7fr   )r|   listall_references
startswithr   r	   fsencodelen)r6   rs     r"   __iter__gitbmstore.__iter__   sI     002A||K((''#k*:*<(=>> 3s
   6A)-A)c                    U R                   R                  [        [        R                  " U5      -      R                  5       R                  R                  $ r   )r|   r~   r   r	   r   peelidraw)r6   ks     r"   __getitem__gitbmstore.__getitem__   s9    LL##K(2C2CA2F$FGTVR	
r%   Nc                p     X;   a  X   $ U$ ! [         R                  " 5       R                   a    Us $ f = fr   )r   r.   InvalidSpecError)r6   r   r   s      r"   getgitbmstore.get   s;    	ywN!!#44 	N	s     %55c                   U R                   R                  S   n[        UR                  [        5      (       a$  UR                  R                  [        5      (       d  g [        R                  " UR                  [        [        5      S  5      $ )Nr{   )
r|   r~   rj   targetstrr   r   r	   r   r   )r6   hs     r"   activegitbmstore.active   sg    LL##F+!((C((0C0C1
 1
   #k*:*<!=>>r%   c                    S nUb  [         [        R                  " U5      -   nUb'  X R                  R                  ;  a  [        SU-  5      eX l        SU l        g )Ns   bookmark %s does not exist!F)r   r	   r   r|   r~   AssertionErrorr   r}   )r6   markgitheads      r"   r   r      sT    !H$5$5d$;;G7,,2I2I#I !?$!FGGr%   c                    U R                   (       a  g U R                  R                  R                  SU R                  S5        SU l         g )Nr{   T)r}   r|   r~   creater   r<   s    r"   _writeactivegitbmstore._writeactive   s3    <<&&vt||TBr%   c           	     p   / nU R                   R                  5        H  nUR                  [        5      (       d  M  U R                   R                  U   R                  5       R                  R                  U:w  a  M`  UR                  [        R                  " U[        [        5      S  5      5        M     U$ r   )r|   r   r   r   r~   r   r   r   appendr	   r   r   )r6   noder   refs       r"   namesgitbmstore.names   s    <<224C>>+..||&&s+0025599TAHHX&&s3{+;+='>?@ 5 r%   c                    US:X  a<  U R                   (       a  U R                   $ [        R                  " [        S5      5      eU$ )N   .s   no active bookmark)r   r   RepoLookupErrorr   )r6   bnames     r"   
expandnamegitbmstore.expandname   s6    D={{{{"''*?(@AAr%   c                L   U H  u  pEUcB  U R                   R                  R                  [        [        R
                  " U5      -   5        MJ  U R                   R                  R                  [        [        R
                  " U5      -   [        R                  " U5      SS9  M     g)z$Apply a list of changes to bookmarksNT)force)	r|   r~   deleter   r	   r   r   r   	togitnode)r6   rK   rR   changesr   r   s         r"   applychangesgitbmstore.applychanges   s     "JD|''..("3"3D"99 ''..("3"3D"99%%d+ /  "r%   c                p   [         [        R                  " U5      -   nU R                  R                  S   nX@R                  R                  ;   aZ  U(       dS  U(       a*  U R                  R                  U   U:X  a  X5:X  a  / $ [
        e[        R                  " [        S5      U-  5      e[        U5      S:  aa  U(       dZ   [        R                  " U R                  U5      nU(       a1  U R                  R                  R                  [        S5      U-  5        / $ ! [        R                   a    Sn NRf = f)Nr{   s.   bookmark '%s' already exists (use -f to force)   Fs[   bookmark %s matches a changeset hash
(did you leave a -r out of an 'hg bookmark' command?)
)r   r	   r   r|   r~   rA   r   r]   r   r   r   isrevsymbol_repoLookupErrorrs   rp   )r6   r   r   r   r   cur
shadowhashs          r"   checkconflictgitbmstore.checkconflict  s    1 1$ 77ll%%f-ll---e<<**73v=&-I))++CDtK  t9q=#$00TB
 

""'
  	 $$ #"
#s   !D D54D5)r}   r   r|   r   )FN)rU   rV   rW   rX   r8   r   r   r   r   propertyr   setterr   r   r   r   r   rZ   r   r%   r"   rx   rx      s`    2
%
?

 ? ? ]] $r%   rx   c                    UR                  SS5      (       a"  [        R                  " U5      n[        X5        gU " U4SU0UD6$ )Nr3   Fr   dest)r   r   abspathrv   )r^   rs   r   optsr+   s        r"   initr   !  sA    xxu||D!B&&&&r%   c                r  ^ UR                  5       (       a  [        UR                  [        5      (       a  UR                  mUR
                  R                  UR                  l        U R                  SS5      (       a%  UR
                  R                  UR                  l
         " U4S jST5      nX!l        U$ )Nr   r   c                  8   > \ rS rSrS rU 4S jr\S 5       rSrg)reposetup.<locals>.gitlocalrepoi1  c                    [         R                  nXR                  ;   n[        R                  " U R
                  U R                  U R                  R                  U5      $ r   )	requirementsmodDIRSTATE_V2_REQUIREMENTr   r   gitdirstaters   r(   r   r3   )r6   v2_requse_dirstate_v2s      r"   _makedirstate-reposetup.<locals>.gitlocalrepo._makedirstate2  sL    (@@"(,=,="=  ++GGHHJJNN#	 r%   c                x  > TR                   " U /UQ70 UD6nUc  g U R                  R                  [        R                  " U5         R
                  R                  nU R                  R                  R                  R                  U5        U R                  R                  R                  R                  5         U$ r   )
commitr   r3   r   r   treer   r   	read_treerS   )r6   r    r!   rettidr^   s        r"   r   &reposetup.<locals>.gitlocalrepo.commit>  s    kk$888;  jjnnW%6%6s%;<AADD 

$$..s3

$$**,
r%   c                @    [        U R                  R                  5      $ r   )rx   r   r3   r<   s    r"   
_bookmarks*reposetup.<locals>.gitlocalrepo._bookmarksL  s    !$**..11r%   r   N)	rU   rV   rW   rX   r   r   r   r   rZ   )r^   s   r"   gitlocalrepor   1  s!    
 2 2r%   r   )localrj   r   r   	__class__rs   makeprogressr4   
configboolrp   r5   )rs   rK   r   r^   s      @r"   	reposetupr   *  s{    zz||
4::x88~~'+ww';';

$==!899 $DJJ	24 	2> &Kr%   c                    US1-  ng )Nr   r   )rs   	supporteds     r"   _featuresetupr   T  s    &Ir%   c                H   [         R                  " [        S[        5        [         R                  " [        S[        5        [         R
                  " [        R                  S[        5      nUS   R                  S/5        [        R                  R                  [        5        g )N	makestoremakefilestorages   initr   )r%   r   Ns'   setup up a git repository instead of hg)r   wrapfunctionr   r`   rl   wrapcommandr   tabler   extendfeaturesetupfuncsaddr   )rs   entrys     r"   extsetupr   Y  sl    I{J?I'8:JK""8>>7DAE	!HOO	HI ##M2r%   )r   )'__doc__
__future__r   r0   mercurial.i18nr   	mercurialr   r   r   r   r	   r
   r   r   r   r   r    r   r   r   r   
testedwithconfigtable
configitempygit2_version
getversionr   r`   rb   rl   rv   r   rx   r   r   r   r   r   r%   r"   <module>r      s    # 	     #
!!+.
 

 ##
8 8v6.D D2 x xv''T
3r%   