
    q&f)                     X   d Z ddlZddlmZ ddlmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZ ddlmZ  G d dej                        Z G d	 d
eej
                        Z G d deej.                        Z G d de	j                        Z G d de
j4                        Z G d d      ZddZd Zy)z~Repository class for "in-memory pull" of one local repository to another,
allowing operations like diff and log with revsets.
    N   )_)	changelogcmdutilencodingerrorfilelog	localrepomanifestmdiffpathutilrevlogutilvfs)	constantsc                        e Zd Zd Zej
                   fd       Zd Z fdZd fd	Z	dde
j                  ddfdZ	 	 	 	 	 ddZd	 Zd
 Z xZS )unionrevlogc                    t        j                  |      }t        |dd       }||j                  j                  }t
        j
                  j                  | |||       || _        t        |       }|dz
  | _	        t               | _        | j                  D ]B  }| j                  j                  |   }|\  }	}
}}}}}}}}}}}|	dz  }|
||k(  sJ |}n ||      }| ||      }| j                  j                  |      }|| j                  j                  |       | j                  j                  |      }| j                  j                  |      }|d|||| j!                  |      | j!                  |      |ddt"        j$                  t"        j$                  |f}| j                  j'                  |       | j                  j                  |       |dz  }E y )Ntarget)r   radixr   i  r   )vfsmodreadonlyvfsgetattr_revlogr   r   __init__revlog2len
repotiprevset
bundlerevsindexget_revaddnoderevrevlog_constantsCOMP_MODE_INLINEappend)selfopenerr   r   
linkmapperr   nrev2r&   _start_csizersizebaselinkrevp1revp2revr%   _sdo_sds_dcm_sdcmrankflagslinkthis_revp1nodep2nodees                               5/usr/lib/python3/dist-packages/mercurial/unionrepo.pyr   zunionrevlog.__init__(   s    ##F+(D1>__++FtVF%HIa%%LL 9	D,,$$T*C  VOE!$&!'*%!$'zz))$/H###H-\\&&u-F\\&&u-F
    11 11A JJa OO"FAs9	    c              #     K   dt        | j                        cxk  rt        | j                        k  rn nt        |   }nt
        j                  }dt        | j                        k  r| j                  j                  }nt
        j                  } |       5   |       5  d  d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY ww)Nr   )r   r!   r"   superreadingr   nullcontextmanagerr   )r*   read_1read_2	__class__s      rA   rE   zunionrevlog.readingu   s     DOO$6s4::6W_F,,Fs4??##\\))F,,FX 	vx 		 	 	 	 	 	s6   BCC!B7&C.	C7C 	<CCCc                     || j                   k  r t        j                  j                  | |      S | j                  j                  | j	                  |            S N)r   r   _chunkr   r%   )r*   r&   s     rA   rL   zunionrevlog._chunk   sB    $//!==''c22||""499S>22rB   c                    || j                   kD  r{|| j                   kD  rl| j                  j                  | j                  j                  | j	                  |            | j                  j                  | j	                  |                  S || j                   k  r#|| j                   k  rt
        t        |   ||      S t        j                  | j                  |      | j                  |            S )z1return or calculate a delta between two revisions)
r   r   revdiffr&   r%   rD   r   r   textdiffrawdata)r*   rev1r.   rI   s      rA   rN   zunionrevlog.revdiff   s    $//!dT__&<<<''  41  41  T__$)@d3D$??~~dll40$,,t2DEErB   c                    t        |t              r|}| j                  |      }n|}| j                  |      }|| j                  kD  r.t        | j                  d| j                        }|j                  }nt        t        |   } |||      S )Nr   )raw)

isinstanceintr%   r&   r   r   r   _revisiondatarD   r   )r*   	nodeorrevrS   r&   r%   r   funcrI   s          rA   rV   zunionrevlog._revisiondata   sw    i%C99S>DD((4.C dllIt||DG((Dd9DDc""rB   Nc                     t         rK   NotImplementedError)r*   texttransactionr<   p1p2
cachedeltar%   r;   deltacomputersidedatas              rA   addrevisionzunionrevlog.addrevision   s
     "!rB   c	                     t         rK   rZ   )	r*   deltasr,   r]   alwayscacheaddrevisioncbduplicaterevisioncb
debug_infodelta_base_reuse_policys	            rA   addgroupzunionrevlog.addgroup   s
     "!rB   c                     t         rK   rZ   )r*   minlinkr]   s      rA   stripzunionrevlog.strip       !!rB   c                     t         rK   rZ   r*   s    rA   	checksizezunionrevlog.checksize   ro   rB   )F)FNNNN)__name__
__module____qualname__r   
contextlibcontextmanagerrE   rL   rN   rV   r   REVIDX_DEFAULT_FLAGSrc   rk   rn   rr   __classcell__)rI   s   @rA   r   r   '   sp    KZ 
 
3

F#. ))"(   $"""rB   r   c                       e Zd Zd Zy)unionchangelogc                     t         j                   j                  | |       d }t        j                   |      }t        j                  | || j                  ||       y rK   )r   r   r   r   )r*   r+   opener2r,   
changelog2s        rA   r   zunionchangelog.__init__   sG    $$T62
((1
T64::z:NrB   Nrs   rt   ru   r    rB   rA   r{   r{      s    OrB   r{   c                       e Zd Zd Zy)unionmanifestc                     t         j                  j                  | ||       t        j                  ||      }t        j                  | || j                  j
                  ||       y rK   )r   manifestrevlogr   r   r   r   )r*   nodeconstantsr+   r}   r,   	manifest2s         rA   r   zunionmanifest.__init__   sQ     	((}fE++M7C	&$,,,,i	
rB   Nr   r   rB   rA   r   r      s    
rB   r   c                       e Zd Zd Zd Zy)unionfilelogc                 N   t         j                   j                  | ||       t        j                   ||      }t        || j                  j                  |j                  |      | _        || _        | j                  j                  | _        | j                  j                  | _        y rK   )r	   r   r   r   r   _repor   r   )r*   r+   pathr}   r,   repofilelog2s          rA   r   zunionfilelog.__init__   sx      vt4??7D1"DLL&&(8(8*
 
,,11||++rB   c                     || j                   k  r t        j                  j                  | |      S | j                  |      }| j                  j                  | j                  j                  |            S )z Check if a revision is censored.)r   r	   
iscensoredr%   r   r&   )r*   r&   r%   s      rA   r   zunionfilelog.iscensored   sV    $//!??--dC88yy~||&&t||'7'7'=>>rB   N)rs   rt   ru   r   r   r   rB   rA   r   r      s    ,?rB   r   c                       e Zd Zd Zy)	unionpeerc                      yNFr   rq   s    rA   canpushzunionpeer.canpush       rB   N)rs   rt   ru   r   r   rB   rA   r   r      s    rB   r   c                       e Zd ZdZd Zej                  d        Zej                  d        Zd Z	d Z
d Zd Zd	 ZddZd Zy
)unionrepositoryzRepresents the union of data in 2 repositories.

    Instances are not usable if constructed directly. Use ``instance()``
    or ``makeunionrepository()`` to create a usable instance.
    c                 \    || _         || _        | j                  j                  dddd       y )Ns   phasess   publishFs	   unionrepo)repo2_urlui	setconfig)r*   r   urls      rA   r   zunionrepository.__init__   s(    
	)ZErB   c                 V    t        | j                  | j                  j                        S rK   )r{   svfsr   rq   s    rA   r   zunionrepository.changelog   s    dii99rB   c                     t        | j                  | j                  | j                  j                  | j	                         j
                        }t        j                  | j                  | || j                               S rK   )	r   r   r   r   
unfiltered_clrevr   manifestlognarrowmatch)r*   	rootstores     rA   r   zunionrepository.manifestlog  sb    !IIJJOOOO$$	
	 ##IItY(8(8(:
 	
rB   c                     | j                   j                  j                  |      }| j                  j                  |      S )z?map from repo2 changelog rev to temporary rev in self.changelog)r   r   r%   r&   )r*   r.   r%   s      rA   r   zunionrepository._clrev  s1    zz##((.~~!!$''rB   c                     | j                   S rK   )r   rq   s    rA   r   zunionrepository.url  s    yyrB   c                     t        | j                  || j                  j                  | j                         j                  |       S rK   )r   r   r   r   r   )r*   fs     rA   filezunionrepository.file  s3    IIq$**//4??+<+C+CT
 	
rB   c                 8    | j                   j                          y rK   )r   closerq   s    rA   r   zunionrepository.close  s    

rB   c                      yr   r   rq   s    rA   cancopyzunionrepository.cancopy  r   rB   Nc                     t        | d |      S )N)r   remotehidden)r   )r*   r   r   s      rA   peerzunionrepository.peer!  s    D|DDrB   c                 *    t        j                         S rK   )r   getcwdrq   s    rA   r   zunionrepository.getcwd$  s      rB   r   )rs   rt   ru   __doc__r   r
   unfilteredpropertycacher   r   r   r   r   r   r   r   r   r   rB   rA   r   r      se    F &&: ': &&	
 '	
(


E!rB   r   c                 *   |rt        j                  t        d            | j                  dd      }|s+t	        j
                  t        j                               }|d}|rPt        j                         }||k(  rd}n4t        j                  |      }|j                  |      r|t        |      d  }|j                  d      rA|j                  dd      d   j                  dd      }t        |      dk(  r||d	   }	}n
|\  }}	n||}	}t        | ||	      S )
Ns"   cannot create new union repositorys   bundles   mainreporootrB   s   union:   :r      +r   )r   Abortr   configr   findrepor   r   r   normasprefix
startswithr   splitmakeunionrepository)
r   r   createintents
createopts
parentpathcwdsrepopath	repopath2s
             rA   instancer   (  s   kk!ABCC9o6J%%hoo&78
J ooJ'',C$$S)'C
3
y!JJtQ"((q1q6Q;",adiH"#Hi($)r8Y77rB   c                 4   t        j                  | |d      }t        j                  | |d      }dt        j                  |      t        j                  |      fz  } G d dt        |j
                        }|}||_        t        j                  |||       |S )z7Make a union repository object from 2 local repo paths.F)r   s   union:%s+%sc                       e Zd Zy)3makeunionrepository.<locals>.derivedunionrepositoryN)rs   rt   ru   r   rB   rA   derivedunionrepositoryr   Q  s    rB   r   )r
   r   r   
expandpathr   rI   r   )r   	repopath1r   repo1r   r   r   r   s           rA   r   r   G  s    r9U;Er9U;E
	"	" C
%//  D+DNUE3/KrB   )NN)r   rv   i18nr    r   r   r   r   r	   r
   r   r   r   r   r   r   r   revlogutilsr   r'   r   r{   r   r   r   	localpeerr   r   r   r   r   rB   rA   <module>r      s        
\"&-- \"~O[)"5"5 O
K!8!8 
?7?? ?&	## 
4! 4!n8>rB   