
    	^c5                         d dl Z d dlZd dlmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZmZmZmZmZ d dlmZ ddlmZmZmZmZmZmZ d	 Zd
 ZddZd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'dS )    N)binhexsha1nodeconstantsshort)_)open)errorfileloglockpycompatrevlog)hashutil   )	constantsdatapackfileserverclienthistorypackrepackshallowutilc           	         |                     d          }t          ||          \  }}}|                     t          d          |z             |                     t          d          |z             |                     t          d          t	          |          z             |                     t          d                     |                     t          d          dz             |g}|r|                    d          }||         \  }	}
}}|                     t          d	          t	          |          t	          |	          t	          |
          t	          |          |fz             |	t          j        k    r|                    |	           |
t          j        k    r|                    |
           |d S d S )
N
decompresss   size: %d bytes
s
   path: %s 
s	   key: %s 
   
s   %12s => %12s %13s %13s %12s
)s   nodes   p1s   p2s   linknodes   copyfromr   s   %s => %s  %s  %s  %s
)	getparsefileblobstatusr   r   popr   nullidappend)uipathoptsr   size	firstnodemappingqueuenodep1p2linknodecopyfroms                C/usr/lib/python3/dist-packages/hgext/remotefilelog/debugcommands.pydebugremotefilelogr,   %   s   ,''J,T:>>D)WIIa#$$t+,,,IIa$&'''IIa%	"2"23444IIahhII	
*++
;	<  
 KE
 
yy||%,T]"B(
		'((T{{E"IIuRyy%//8LM	
 	
 	
 ")))LL")))LL  
 
 
 
 
    c           
      n   t          t          j        |                                                    }t          j                            | j        d|          }g }t	          j        |          D ]=}d|vr7|                    | 	                    |t          |                               >t          |d           }|                     d          }t          j                            |          rt	          j        |           t          j        | j        d          } G d d	          } |            }	|D ]}
|
                                | vr|
                                                    |
                                          }i }|
                                rG|
                                d
         |d<   t          |
                                d                   |d<   |                    |
                                ||	|
                                |d
         |d                    |S )Ns
   store/datas   _old)fileidc                 *    |                                  S N)linkrev)xs    r+   <lambda>z!buildtemprevlog.<locals>.<lambda>L   s    		 r-   )keys   data/temprevlog.is
   temprevlogc                       e Zd Zd ZdS )buildtemprevlog.<locals>.faketc                     d S r1    )selfabcs       r+   addz"buildtemprevlog.<locals>.faket.addU   s    Dr-   N)__name__
__module____qualname__r>   r9   r-   r+   faketr7   T   s#        	 	 	 	 	r-   rB   r   s   copyr   s   copyrev)r   r   sha1digestosr    joinlistdirr   filectxr   sortedsjoinexistsremover
   svfsr&   parentsfilenoderenamedr>   datar2   )repofilefilekeyfiledirfctxsrO   temppathrrB   tfctxpmetas                r+   buildtemprevlogr]   A   s   (-%%,,..//Ggll49mW==G EJw'' C C(""LLd3x==AABBB533444E zz.//H	w~~h 
	(	=11A        	A 
@ 
@99;;d""LLNN""4==??33<<>> 	6 LLNN1-DM"4<<>>!#455D	diikk4DLLNNAaD!A$????Hr-   c                    |                     d          sS|                     d          s>|                     d          s)t          j        |          r|                    |          s | |||fi |S t	          ||          }|                     dd          }|dvr$t          j        t          d          |z            |j        t          j
        z  }|rd}nd	}|dk    r|                    d
|z   dz              n!|dk    r|                    d|z   dz              |D ]}	|                    |	          }
|r|                    |	          }n|                    |	          }|dk    r	 |                    |
          }n# t           $ r |j        |j        g}Y nw xY w|                    d|	|                    |	          |                    |	          ||                    |	          t+          |
          t+          |d                   t+          |d                   fz             |dk    r|                    |	          }|                    d|	|                    |	          |                    |	          |                    |	          |                    |	          ||                    |	          |d         |d         t+          |
          f
z             dS )z"dump the contents of an index file	changelogmanifestdirs   formatr   )r   r   s   unknown format %ds    deltas     bases      rev    offset  length s&    linkrev nodeid       p1           p2
r   s'      rev flag   offset   length     size s#      link     p1     p2       nodeid
s"   % 6d % 9d % 7d % 6d % 7d %s %s %s
s0   % 6d %04x % 8d % 8d % 8d % 6d % 6d % 6d % 6d %s
N)r   r   	isenabledshallowmatchr]   r	   Abortr   versionr   FLAG_GENERALDELTAwriter&   deltaparent	chainbaserN   	Exceptionr   startlengthr2   r   
parentrevsflagsrawsize)origr   rR   file_r!   rX   formatgeneraldeltabasehdrir&   baseppprs                 r+   
debugindexry   h   s    	-88J- 88E??- $T**	-
   ''- tBe,,t,,,e$$A XXi##FVk!011F:;;;9v77L {{
,w6 :3 3	
 	
 	
 	
 
1
 '(+##	
 	
 	
  ( (vvayy 	"==##DD;;q>>DQ;;0YYt__ 0 0 0k4;/0HH6GGAJJHHQKKIIaLL$KK"Q%LL"Q%LL	
    q[[aBHHDGGAJJGGAJJHHQKKIIaLLIIaLLqEqE$KK  5( (s   .FFFc                 R   t          j        |          s | |||          S t          |t          j                            |          dd                   }|                    d           |D ]}|                    |          }|                    |          }|	                    d|
                    |d                   |fz             |d         |j        k    r3|	                    d|
                    |d                   |fz             |	                    d           dS )z(dump an index DAG as a graphviz dot fileNs   digraph G {
s
   	%d -> %d
r   r   s   }
)r   rb   r]   rE   r    basenamewritenoi18nr&   rN   rg   revr   )rp   r   rR   rq   rX   ru   r&   rw   s           r+   debugindexdotr      s    && %tBe$$$bg..u55crc:;;ANN#$$$ : :vvayyYYt__
AEE"Q%LL!#44555a5DKHH_bea'88999HHVr-   c                    |                     d          }t          j        |          D ]\  }}}|D ]}|dk    r	t          j                            ||          }t          ||          \  }	}
}|                                D ]\  }}}}|t          j        k    rnt          j        	                    ||          }t          j        d||          }|                     d|t          j        	                    ||          fz             ،d S )Nr   s   reposs   reponames   %s %s
)r   rE   walkr    rF   r   valuesr   r   relpathr   getcachekeyr   )r   r    r!   r   rootdirsfilesrS   filepathr"   r#   r$   r'   r(   r)   r*   
actualpathr5   s                     r+   verifyremotefilelogr      s"   ,''JWT]]  dE 	 	Dxw||D$//H'4Xz'J'J$D)W.5nn.>.>  *B(0777!#t!<!<J*6#Z C II"c27??8T+J+J%KK  	 r-   c                 *    t          j        |           S r1   )zlibr   )raws    r+   _decompressblobr      s    ?3r-   c                 L   t          | d          }	 |                                }|                                 n# |                                 w xY w|rt          |          }t	          j        |          \  }}}||z   }d }i }	|t          |          k     r|                    d|dz             }
|||dz            }|s|}||dz   |dz            }||dz   |dz            }||dz   |dz            }||dz   |
         }||||f|	|<   |
dz   }|t          |          k     |||	fS )Ns   rb    P      (   <   r   )r   readcloser   r   parsesizeflagslenindex)r    r   fr   offsetr"   rn   rk   r#   r$   dividercurrentnoder'   r(   r)   r*   s                   r+   r   r      sa   T5Affhh									 #c""%4S99FD%TMEIG
#c((

))E52:..%52:./ 	$#I%"*,-%"*,-
urz23
g-. "B(;! #c((

 G##s	   ; Ac                     |D ]}d|v r|d |                     d                   }                     d|z             t          j        |          }|                    d          }|r4|                    dt          |                    }t           |fi |  d S |                    d          r
t          }dn	t          }dd dd fd	}i }	t                      }
d}|
                                D ]\  }}}}||	|<   ||
v r*                     d
t          |          z             |dz  }|
                    |           |k    r |             |dk    rdn|}                     d|z                                  dd                              d                              d                    d          d                    d          fz             |dd|                    ||          }t          j        |v r|t          j                 }|z  |z  nd}                     d ||           ||          d|z                      d          t!          j        |          fz             |
 |             |t%           t          |
          |	          z  }|dk    r                     d|z              dS d S )Ns   .datas   %s:
r&   r-   long*      r   c            	      l                        d           rsd S z
  } ddt          |           z  z  | dk    rdndfz  }                    dd                    d	z  t	          d
          z
            dz                      d          dz                      d          |fz             d S )Nr   s
   %0.1f%% %sg      Y@r   s   smallers   biggers   Total:%s%s  %s (%s)
r-      s   Total:   %d   	   )rg   absr}   ljustr   )
differencedeltastrhashlenlastfilenametotalblobsizetotaldeltasizer   s     r+   printtotalsz"debugdatapack.<locals>.printtotals  s    '!  &7J$Z(=8)A~~9( H
 NN(IIa'kC	NN:;;^+22266]*11!44	    r-   s   Bad entry: %s appears twice
r   s   (empty name)s	   %s%s%s%s
   Node
   Delta Base   Delta Lengths	   Blob Sizer   s	   (missing)s   %s  %s  %s%s
r   s   %d failures
)r   rg   r   r   getdeltachainr   dumpdeltachainr   r   setiterentriesr>   r   getmetar   METAKEYSIZEr   bytestr_sanitycheckwarn)r   pathsr!   r    dpackr&   
deltachainhashformatterr   basesnodesfailuresfilename	deltabasedeltalennamer\   blobsizer   r   r   r   s   `                 @@@@r+   debugdatapackr     sl    ] ]t.$**X.../D
D!!!!$''xx 	,,S#d))<<J2z22T222FF88F 	MGG!MG	 	 	 	 	 	 	 	 	* 383D3D3F3F '	 '	/HdIx#E$Ku}}:U4[[HJJJAIIdOOO<''*2c//xD)))!g..%++G44'--b11$**1--	    ( !!" ==400D$,,	 56(*)'HH!!M$''!M),,X%,,R00$X..	    KMMMLSZZ777a<<GG%022211 w] ]r-   c                    d}|D ]}t                      }|}||         }|t          j        k    r||vr:|                     dt	          |          t	          |          fz             |dz  }nm||v r:|                     dt	          |          t	          |          fz             |dz  }n/|}|                    |           ||         }|t          j        k    t          j        ||<   |S )z
    Does some basic sanity checking on a packfiles with ``nodes`` ``bases`` (a
    mapping of node->base):

    - Each deltabase must itself be a node elsewhere in the pack
    - There must be no cycles
    r   s,   Bad entry: %s has an unknown deltabase (%s)
r   s"   Bad entry: %s has a cycle (at %s)
)r   r   r   r   r   r>   )r   r   r   r   r&   seencurrentr   s           r+   r   r   g  s    H / /uu'N	,333%%H ;;i(8(89:   AD  > ;;i(8(89:   AGHHWgI/ ,3334 (.dOr-   c                    t           }d}d }|D ]\  }}}}}	||k    r|                     d|z             |}|                     dd                    |          d                    |          d                    |          d                    d          fz             |                     d	 ||           ||          t          t          j        |	                                                    t          |	          fz             d S )
Nr      
%s
s   %s  %s  %s  %s
r   r   s
   Delta SHA1r      s   %s  %s  %s  %d
)r   rg   r   r   rC   rD   r   )
r   r   r!   r   r   r   r   r&   deltabasenodedeltas
             r+   r   r     s/   MGL:D 
 
6$-|##HHY)***#L
g&&##G,,##G,,%%a((		
 	
 	
 	d##m,,HM%((//1122E

		
 	
 	
 	

 
r-   c           
      h   d|v r|d |                     d                   }t          j        |          }d }|                                D ]}|\  }}}}}	}
||k    r|                     d|z             |                     dd                    d          d                    d          d                    d          d                    d          d	fz             |}|                     d
t          |          t          |          t          |          t          |	          |
fz             d S )Ns   .histr   s   %s%s%s%s%s
r   r   s   P1 Nodes   P2 Nodes	   Link Nodes	   Copy Froms   %s  %s  %s  %s  %s
)r   r   r   rg   r   r   )r   r    hpackr   entryr   r&   p1nodep2noder)   r*   s              r+   debughistorypackr     sU   4*djj***+#D))EL""$$ 
 
=B:$(|##HHY)***HHMM"%%$$R(($$R(( &&r** 	 	 	 $L
#dffh		
 		
 		
 		

 
r-   c                     t          j        t          j        |           dd          5  	 d d d            d S # 1 swxY w Y   d S )Ns
   repacklock)timeout)lockmodr   r   repacklockvfsrR   s    r+   debugwaitonrepackr     s    	f*400-	L	L	L                   s   9= =c           
          |                      | j        ddd d t          d          | j        z            5  	 d d d            d S # 1 swxY w Y   d S )Ns   prefetchlockTs   prefetching in %s)_lockrM   r   origrootr   s    r+   debugwaitonprefetchr     s    			
$-/
 
   	                 s   AAAr1   )(rE   r   mercurial.noder   r   r   r   mercurial.i18nr   mercurial.pycompatr   	mercurialr	   r
   r   r   r   r   mercurial.utilsr    r   r   r   r   r   r   r,   r]   ry   r   r   r   r   r   r   r   r   r   r   r9   r-   r+   <module>r      s   
			                   # # # # # #              % $ $ $ $ $                 8$ $ $NP P P Pf  "  (     $ $ $D^ ^ ^B) ) )X
 
 
<
 
 
B  
	 	 	 	 	r-   