
    	^c&                     P   d Z ddlm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j                  Z G d d          ZddZd ZdS )z~Repository class for "in-memory pull" of one local repository to another,
allowing operations like diff and log with revsets.
   )_)getattr)	changelogcmdutilencodingerrorfilelog	localrepomanifestmdiffpathutilrevlogutilvfs)	constantsc                   Z     e Zd Zd Zd Z fdZd fd	ZddZ	 	 	 	 ddZd	 Z	d
 Z
 xZS )unionrevlogc                    t          j        |          }t          |dd           }||j        j        }t
          j                            | |||           || _        t          |           }|dz
  | _	        t                      | _        | j        D ]<}| j        j        |         }|\  }	}
}}}}}}}}}}}|	dz  }|||k    sJ |}n ||          }| ||          }| j                            |          }|| j                            |           | j                            |          }| j                            |          }|d||||                     |          |                     |          |ddt"          j        t"          j        |f}| j                            |           | j                            |           |dz  }>d S )Ntarget)r   radixr   i      )vfsmodreadonlyvfsr   _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1>_+FtVF%HHHIIa%%%L 9	 9	D,$T*C  VOE!$!z'**%!z$''z))$//H###H---\&&u--F\&&u--F
      1 1A Ja   O"""FAAs9	 9	    c                     || j         k    r t          j                            | |          S | j                            |                     |                    S N)r   r   _chunkr   r%   )r*   r&   s     rA   rE   zunionrevlog._chunkt   sG    $/!!=''c222|""499S>>222rB   c                    || j         k    r||| j         k    rq| j                            | j                            |                     |                    | j                            |                     |                              S || j         k    r4|| j         k    r)t          t          |                               ||          S t          j        | 	                    |          | 	                    |                    S )z1return or calculate a delta between two revisions)
r   r   revdiffr&   r%   superr   r   textdiffrawdata)r*   rev1r.   	__class__s      rA   rG   zunionrevlog.revdiffy   s    $/!!dT_&<&<<''  411  411   T_$$)@)@d++33D$???~dll400$,,t2D2DEEErB   NFc                 8   t          |t                    r|}|                     |          }n|}|                     |          }|| j        k    r#t          | j        d| j                  }|j        }nt          t          |           j        } ||||          S )Nr   )_dfraw)

isinstanceintr%   r&   r   r   r   _revisiondatarH   r   )	r*   	nodeorrevrN   rO   r&   r%   r   funcrL   s	           rA   rR   zunionrevlog._revisiondata   s    i%% 	!C99S>>DDD((4..C  dlIt|DDG(DDd++9DtDcs++++rB   c                     t           rD   NotImplementedError)r*   texttransactionr<   p1p2ds          rA   addrevisionzunionrevlog.addrevision       !!rB   c                     t           rD   rV   )r*   deltasr,   rY   alwayscacheaddrevisioncbduplicaterevisioncbmaybemissingparentss           rA   addgroupzunionrevlog.addgroup   s
     "!rB   c                     t           rD   rV   )r*   minlinkrY   s      rA   stripzunionrevlog.strip   r^   rB   c                     t           rD   rV   r*   s    rA   	checksizezunionrevlog.checksize   r^   rB   NF)NNN)FNNF)__name__
__module____qualname__r   rE   rG   rR   r]   re   rh   rk   __classcell__)rL   s   @rA   r   r   &   s        K K KZ3 3 3

F 
F 
F 
F 
F, , , , , , " " " "  !
" 
" 
" 
"" " "" " " " " " "rB   r   c                       e Zd Zd ZdS )unionchangelogc                     t           j                             | |           d }t          j         |          }t                              | || j        ||           d S rD   )r   r   r   r   )r*   r+   opener2r,   
changelog2s        rA   r   zunionchangelog.__init__   sT    $$T6222
(11
T64:z:NNNNNrB   Nrm   rn   ro   r    rB   rA   rr   rr      s(        O O O O OrB   rr   c                       e Zd Zd ZdS )unionmanifestc                     t           j                            | ||           t          j        ||          }t                              | || j        j        ||           d S rD   )r   manifestrevlogr   r   r   r   )r*   nodeconstantsr+   rt   r,   	manifest2s         rA   r   zunionmanifest.__init__   sa    ((}fEEE+M7CC	&$,,i	
 	
 	
 	
 	
rB   Nrv   rw   rB   rA   ry   ry      s#        
 
 
 
 
rB   ry   c                       e Zd Zd Zd ZdS )unionfilelogc                    t           j                             | ||           t          j         ||          }t          || j        j        |j        |          | _        || _        | j        j        | _        | j        j        | _        d S rD   )r	   r   r   r   r   _repor   r   )r*   r+   pathrt   r,   repofilelog2s          rA   r   zunionfilelog.__init__   st      vt444?7D11"DL&(8*
 
 
,1|+rB   c                     || j         k    r t          j                            | |          S |                     |          }| j                            | j                            |                    S )z Check if a revision is censored.)r   r	   
iscensoredr%   r   r&   )r*   r&   r%   s      rA   r   zunionfilelog.iscensored   s\    $/!!?--dC888yy~~|&&t|'7'7'='=>>>rB   N)rm   rn   ro   r   r   rw   rB   rA   r   r      s2        , , ,? ? ? ? ?rB   r   c                       e Zd Zd ZdS )	unionpeerc                     dS rl   rw   rj   s    rA   canpushzunionpeer.canpush       urB   N)rm   rn   ro   r   rw   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
 Zd ZdS )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                            dddd           d S )Ns   phasess   publishFs	   unionrepo)repo2_urlui	setconfig)r*   r   urls      rA   r   zunionrepository.__init__   s2    
	)ZEEEEErB   c                 @    t          | j        | j        j                  S rD   )rr   svfsr   rj   s    rA   r   zunionrepository.changelog   s    di999rB   c                     t          | j        | j        | j        j        |                                 j                  }t          j        | j        | ||                                           S rD   )	ry   r|   r   r   
unfiltered_clrevr   manifestlognarrowmatch)r*   	rootstores     rA   r   zunionrepository.manifestlog   sa    !IJOOO$	
 
	 #ItY(8(8(:(:
 
 	
rB   c                 t    | 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   s0    z#((..~!!$'''rB   c                     | j         S rD   )r   rj   s    rA   r   zunionrepository.url   s
    yrB   c                 t    t          | j        || j        j        |                                 j        |           S rD   )r   r   r   r   r   )r*   fs     rA   filezunionrepository.file   s2    Iq$*/4??+<+<+CT
 
 	
rB   c                 8    | j                                          d S rD   )r   closerj   s    rA   r   zunionrepository.close   s    
rB   c                     dS rl   rw   rj   s    rA   cancopyzunionrepository.cancopy  r   rB   c                      t          |           S rD   )r   rj   s    rA   peerzunionrepository.peer  s    rB   c                 (    t          j                    S rD   )r   getcwdrj   s    rA   r   zunionrepository.getcwd  s       rB   N)rm   rn   ro   __doc__r   r
   unfilteredpropertycacher   r   r   r   r   r   r   r   r   rw   rB   rA   r   r      s         F F F &: : '&: &	
 	
 '&	
( ( (
  
 
 

      ! ! ! ! !rB   r   Nc                    |r!t          j        t          d                    |                     dd          }|s)t	          j        t          j                              }|d}|r\t          j                    }||k    rd}n@t          j	        |          }|
                    |          r|t          |          d          }|
                    d          rT|                    dd          d                             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     sF    Dk!ABBCCC9o66J %ho&7&788
J 	4 oJJ',,C$$S)) 4'C

3
y!! /JJtQ"((q11q66Q;;",adiHH"#Hii($)r8Y777rB   c                 4   t          j        | |d          }t          j        | |d          }dt          j        |          t          j        |          fz  } G d dt          |j                  }|}||_        t                              |||           |S )z7Make a union repository object from 2 local repo paths.F)r   s   union:%s+%sc                       e Zd ZdS )3makeunionrepository.<locals>.derivedunionrepositoryN)rm   rn   ro   rw   rB   rA   derivedunionrepositoryr   4  s        rB   r   )r
   r   r   
expandpathr   rL   r   )r   	repopath1r   repo1r   r   r   r   s           rA   r   r   *  s    r9U;;;Er9U;;;E
	""	"" C
    %/    D+DNUE3///KrB   )NN) r   i18nr   pycompatr    r   r   r   r   r	   r
   r   r   r   r   r   r   r   revlogutilsr   r'   r   rr   r{   ry   r   	localpeerr   r   r   r   rw   rB   rA   <module>r      s)   
                                            
B" B" B" B" B"&- B" B" B"JO O O O O[)"5 O O O
 
 
 
 
K!8 
 
 
? ? ? ? ?7? ? ? ?&    	#   
4! 4! 4! 4! 4! 4! 4! 4!n8 8 8 8>    rB   