
    q&f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'y)    N)binhexsha1nodeconstantsshort)_)open)errorfileloglockpycompatrevlog)hashutil   )	constantsdatapackfileserverclienthistorypackrepackshallowutilc           	         |j                  d      }t        ||      \  }}}| j                  t        d      |z         | j                  t        d      |z         | j                  t        d      t	        |      z         | j                  t        d             | j                  t        d      dz         |g}|r|j                  d      }||   \  }	}
}}| j                  t        d	      t	        |      t	        |	      t	        |
      t	        |      |fz         |	t        j                  k7  r|j                  |	       |
t        j                  k7  r|j                  |
       |ry y )
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,   %   s9   ,'J,T:>D)WIIa#$t+,IIa$&'IIa%	"234IIahII	
*+
;	<
 KE
yy|%,T]"B(
		'(T{E"IuRy%/8LM	
 ")))LL")))LL     c           
         t        t        j                  |      j                               }t        j
                  j                  | j
                  d|      }g }t	        j                  |      D ]2  }d|vs|j                  | j                  |t        |                   4 t        |d       }| j                  d      }t        j
                  j                  |      rt	        j                  |       t        j                  | j                   d      } G d d	      } |       }	|D ]  }
|
j#                         | vr|
j                         j%                  |
j'                               }i }|
j)                         r5|
j)                         d
   |d<   t        |
j)                         d         |d<   |j+                  |
j-                         ||	|
j/                         |d
   |d           |S )Ns
   store/datas   _old)fileidc                 "    | j                         S N)linkrev)xs    r+   <lambda>z!buildtemprevlog.<locals>.<lambda>L   s    		 r-   )keys   data/temprevlog.is
   temprevlogc                       e Zd Zd Zy)buildtemprevlog.<locals>.faketc                      y r1    )selfabcs       r+   addz"buildtemprevlog.<locals>.faket.addU   s    r-   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ggll499mW=G EJJw' C("LLd3x=ABC 534E zz./H	ww~~h
		(		=1A  	A 
@99;d"LLN""4==?3<<> LLN1-DM"4<<>!#45D	diik4DLLNAaD!A$?
@ Hr-   c                    |j                  d      sH|j                  d      s7|j                  d      s&t        j                  |      r|j                  |      s | |||fi |S t	        ||      }|j                  dd      }|dvr!t        j                  t        d      |z        |j                  t        j                  z  }|rd}nd	}|dk(  r|j                  d
|z   dz          n|dk(  r|j                  d|z   dz          |D ]J  }	|j                  |	      }
|r|j                  |	      }n|j                  |	      }|dk(  r}	 |j                  |
      }|j                  d|	|j%                  |	      |j'                  |	      ||j)                  |	      t+        |
      t+        |d         t+        |d         fz         |dk(  s|j-                  |	      }|j                  d|	|j/                  |	      |j%                  |	      |j'                  |	      |j1                  |	      ||j)                  |	      |d   |d   t+        |
      f
z         M y# t         $ r |j"                  |j"                  g}Y "w xY w)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   sa    	88J88E?$$T*  'Be,t,,e$A XXi#FVkk!01F:;;99v777L{
,w6 :3 3	
 
1
 '(+##	
  (vvay==#D;;q>DQ;0YYt_ HH6GGAJHHQKIIaL$K"Q%L"Q%L	
 q[aBHHDGGAJGGAJHHQKIIaLIIaLqEqE$K5(  0kk4;;/0s   I!I;:I;c                    t        j                  |      s
 | |||      S t        |t        j                  j                  |      dd       }|j                  d       |D ]  }|j                  |      }|j                  |      }|j                  d|j                  |d         |fz         |d   |j                  k7  s`|j                  d|j                  |d         |fz          |j                  d       y)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      &Be$$bgg..u5cr:;ANN#$ :vvayYYt_
AEE"Q%L!#445a5DKKHH_bea'889: HHVr-   c                    |j                  d      }t        j                  |      D ]  \  }}}|D ]  }|dk(  r	t        j                  j	                  ||      }t        ||      \  }	}
}|j                         D ]  \  }}}}|t        j                  k(  st        j                  j                  ||      }t        j                  d||      }| j                  d|t        j                  j                  ||      fz            y )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WWT] dE 	Dxww||D$/H'4Xz'J$D)W.5nn.> *B(0777!#t!<J*66#ZC II"c277??8T+J%KK	r-   c                 ,    t        j                  |       S r1   )zlibr   )raws    r+   _decompressblobr      s    ??3r-   c                    t        | d      }	 |j                         }|j                          |rt        |      }t	        j
                  |      \  }}}||z   }d }i }	|t        |      k  rg|j                  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  rg|||	fS # |j                          w xY w)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      s(   T5Affh		c"%44S9FD%TMEIG
#c(
))E52:.%52:/#I%"*-%"*-
urz3
g. "B(;! #c(
 G##5 	
	s   C C)c                     |D ]e  }d|v r|d |j                  d       } j                  d|z         t        j                  |      }|j                  d      }|r*|j	                  dt        |            }t         |fi |  y |j                  d      r	t        }dnt        }dd dd fd	}i }	t               }
d}|j                         D ]T  \  }}}}||	|<   ||
v r" j                  d
t        |      z         |dz  }|
j                  |       |k7  r~ |        |dk(  rdn|} j                  d|z          j                  ddj                        dj                        dj                  d      dj                  d      fz         |dd|j                  ||      }t        j                  |v r|t        j                     }|z  |z  nd} j                  d ||       ||      d|z  j                  d      t!        j"                  |      fz         W  |        |t%         t        |
      |	      z  }|dkD  sR j'                  d|z          y y )Ns   .datas   %s:
r&   r-   long*      r   c            	      .   j                  d       rsy z
  } ddt        |       z  z  | dkD  rdndfz  }j                  ddj                  d	z  t	        d
      z
        dz  j                  d      dz  j                  d      |fz         y )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	N:;^+2226]*11!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     s    ]t.$**X./D
D!!!$'xx,,S#d)<J2z2T288FMG!MG	 	* 383D3D3F '	/HdIx#E$Ku}:U4[HJAIIdO<'*2c/xD)!g.%++G4'--b1$**1-	  ( !!" ==40D$$,	 5 56(*)'HH!!$'!),X%,,R0$$X.	?'	R MLSZ77a<GG%02{]r-   c                    d}|D ]  }t               }|}||   }|t        j                  k7  r||vr.| j                  dt	        |      t	        |      fz         |dz  }n^||v r.| j                  dt	        |      t	        |      fz         |dz  }n,|}|j                  |       ||   }|t        j                  k7  r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 /u'N	,333%H ;i(89: AD > ;i(89: AGHHWgI/ ,3334 (..d?/@ Or-   c                    t         }d}d }|D ]  \  }}}}}	||k7  r| j                  d|z         |}| j                  ddj                  |      dj                  |      dj                  |      dj                  d      fz         | j                  d	 ||       ||      t        t        j                  |	      j                               t        |	      fz          y )
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,HMM%(//12E
		

r-   c           
         d|v r|d |j                  d       }t        j                  |      }d }|j                         D ]  }|\  }}}}}	}
||k7  rk| j                  d|z         | j                  ddj	                  d      dj	                  d      dj	                  d      dj	                  d      d	fz         |}| j                  d
t        |      t        |      t        |      t        |	      |
fz          y )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     s	   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        y # 1 sw Y   y xY w)Ns
   repacklock)timeout)lockmodr   r   repacklockvfsrR   s    r+   debugwaitonrepackr     s5    	f**40-	L   s	   7A c           
          | j                  | j                  ddd d t        d      | j                  z        5  	 d d d        y # 1 sw Y   y xY w)Ns   prefetchlockTs   prefetching in %s)_lockrM   r   origrootr   s    r+   debugwaitonprefetchr     sM    				
$--/
  	  s   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f"( $D^B)X
<
B
	r-   