
    q&fy                         d dl mZmZ ddlmZmZ  G d dej                        Z G d dej                        Z G d d	      Z	y
)    )hexsha1nodeconstants   )	basestoreshallowutilc                        e Zd Z fdZd	dZej                  j                  d	d       Zej                  j                  d        Z	d Z
d Zd	dZd Z xZS )
unionmetadatastorec                     t        t        | 
  |i | || _        |j	                  d      | _        |j	                  dd      | _        y )N
writestoreallowincompleteF)superr	   __init__storesgetr   r   )selfargskwargs	__class__s      C/usr/lib/python3/dist-packages/hgext/remotefilelog/metadatastore.pyr   zunionmetadatastore.__init__   sE     $0$A&A **\2
  &zz*;UC    c                 @  	 
t               |v rg S i 		fd}||fg}|rT|j                         \  }}	 	j                  | j                  ||              |||      }|j	                  |       |rT	S # t
        $ r | j                  s ||f||fk(  r Y 'w xY w)Returns as many ancestors as we're aware of.

        return value: {
           node: (p1, p2, linknode, copyfrom),
           ...
        }
        c                    | |fg}g }t               }|r|j                         \  }}||f|v r|j                  ||f       j                  |      }|s|j	                  ||f       V|\  }}	}
}|t
        j                  k7  r|vr|j	                  |xs | |f       |	t
        j                  k7  r|	vr|j	                  | |	f       |r|S N)setpopaddr   appendr   nullid)curnamecurnodequeuemissingseennamenodevaluep1p2linknodecopyfrom	ancestorsknowns               r   traversez1unionmetadatastore.getancestors.<locals>.traverse&   s     w'(EG5D"YY[
d$<4'$&!d+NND$<0-2*B(*111boLL("5gr!:;*111boLL'2/  Nr   r-   )r   r   update_getpartialancestorsextendKeyErrorr   )
r   r%   r&   r-   r.   r#   r    r!   
newmissingr,   s
      `     @r   getancestorszunionmetadatastore.getancestors   s     =EE5=I		. $<.&{{}GW  --gwe-L &gw7
z* "   ++W%$5 6s   =A: : BBc                     | j                   D ]  }	 |j                  |||      c S  t        |t        |      f      # t        $ r Y <w xY w)Nr/   )r   r5   r3   r   )r   r%   r&   r-   stores        r   r1   z'unionmetadatastore._getpartialancestorsQ   s\    [[ 	E))$E)BB	 c$i())  s   >	A
	A
c                     | j                   D ]  }	 |j                  ||      c S  t        |t        |      f      # t        $ r Y :w xY wr   )r   getnodeinfor3   r   )r   r%   r&   r7   s       r   r9   zunionmetadatastore.getnodeinfo[   sW    [[ 	E((t44	 c$i())  s   <	AAc                     t        d      )Ns5   cannot add content only to remotefilelog contentstoreRuntimeErrorr   r%   r&   datas       r   r   zunionmetadatastore.adde   s    D
 	
r   c                 T    |}| j                   D ]  }|s|j                  |      } |S r   )r   
getmissing)r   keysr#   r7   s       r   r@   zunionmetadatastore.getmissingj   s4    [[ 	4E**73	4 r   c                 J    | j                   D ]  }|j                  ||        y r   )r   
markledger)r   ledgeroptionsr7   s       r   rC   zunionmetadatastore.markledgerq   s%    [[ 	.EVW-	.r   c                 ~    | j                   D cg c]  }|j                          }}t        j                  | S c c}w r   )r   
getmetricsr   sumdicts)r   smetricss      r   rG   zunionmetadatastore.getmetricsu   s5    +/;;7a1<<>77##W-- 8s   :r   )__name__
__module____qualname__r   r5   r   baseunionstore	retriabler1   r9   r   r@   rC   rG   __classcell__)r   s   @r   r	   r	      sc    	D8t ''* (* ''* (*

..r   r	   c                        e Zd ZddZd Zd Zy)remotefilelogmetadatastoreNc                 T    | j                  ||      }t        j                  |      }|S )r   )_getdatar   ancestormap)r   r%   r&   r-   r>   r,   s         r   r5   z'remotefilelogmetadatastore.getancestors{   s*     }}T4(++D1	r   c                 ,    | j                  ||      |   S r   r5   r   r%   r&   s      r   r9   z&remotefilelogmetadatastore.getnodeinfo         t,T22r   c                     t        d      )Ns7   cannot add metadata only to remotefilelog metadatastorer;   )r   r%   r&   parentsr*   s        r   r   zremotefilelogmetadatastore.add   s    F
 	
r   r   )rK   rL   rM   r5   r9   r    r   r   rR   rR   z   s    
3
r   rR   c                   4    e Zd Zd ZddZd Zd Zd ZddZy)	remotemetadatastorec                      || _         || _        y r   )_fileservice_shared)r   uifileserviceshareds       r   r   zremotemetadatastore.__init__   s    'r   Nc                     | j                   j                  |t        |      fgddd       | j                  j	                  |||      S )NTF)force	fetchdatafetchhistoryr/   )r`   prefetchr   ra   r5   )r   r%   r&   r-   s       r   r5   z remotemetadatastore.getancestors   sN    ""CItu4 	# 	
 ||((t5(AAr   c                 ,    | j                  ||      |   S r   rW   rX   s      r   r9   zremotemetadatastore.getnodeinfo   rY   r   c                     t        d      )Ns   cannot add to a remote storer;   r=   s       r   r   zremotemetadatastore.add   s    :;;r   c                     |S r   r\   )r   rA   s     r   r@   zremotemetadatastore.getmissing   s    r   c                      y r   r\   )r   rD   rE   s      r   rC   zremotemetadatastore.markledger   s    r   r   )	rK   rL   rM   r   r5   r9   r   r@   rC   r\   r   r   r^   r^      s!    B3<r   r^   N)
mercurial.noder   r    r   r   rN   r	   rR   r^   r\   r   r   <module>rp      s@   l.11 l.^
!4!4 
, r   