
    6hK                        S SK Jr  SSKJr  SSKJrJr  SSKJrJ	r	J
r
JrJrJrJrJrJrJrJrJrJr  SSKJrJr     SS jrS rS	 rS
 rSS jrSS jrS rS rS r  " S S5      r!SS jr"S r#S r$SS jr%S r&g)    )annotations   )_)hexshort)bundle2changegroup	discoveryerrorexchangeobsoleteobsutilpathutilphasesrequirementsscmutiltransactionutil)hashutilurlutilc                F   SnU R                   n	U	R                  U5      (       d  U	R                  U5        U R                  SX5      n
[	        S U
 5       5      n[
        R                  " SR                  U5      5      R                  5       nSU[        U5      [        USS 5      U4-  n[        R                  " U 5      nSnUS:w  a  S	nU(       a  S
nOU(       a  SnOSn[        R                  " XUS9nUUSS.n[        R                   " U R"                  U SUUUUU	UUS9
$ )z8create a bundle with the specified revisions as a backups   strip-backups   %ln::%lnc              3  @   #    U  H  oR                  5       v   M     g 7fN)r   ).0cs     2/usr/lib/python3/dist-packages/mercurial/repair.py	<genexpr>backupbundle.<locals>.<genexpr>8   s     3
1uuww
s       s   %s/%s-%s-%s.hgN   s   01s   HG20s   BZs   HG10BZs   HG10UN)missingrootsancestorsofT)s
   cg.versions   obsolescences   phases   strip)compressionallow_internal)vfsisdirmkdirsetsortedr   sha1joindigestr   r   r	   localversionr
   outgoingr   writenewbundleui)repobasesheadsnodesuffixcompressobsolescence
tmp_backup	backupdirr&   
allcommits	allhashes	totalhashname	cgversioncomp
bundletyper/   contentoptss                      r   backupbundlerC   %   s,     I
((C99Y		) +u4J3
33Ichhy1299;IdIbqM	  D ((.IDE
D	

!!$NH %K
 !!! r   c                    [        5       n[        U[        U 5      5       H$  nUR                  X   R	                  5       5        M&     [        U5      $ )z+find out the filelogs affected by the strip)r)   rangelenupdatefilesr*   )r2   striprevrH   xs       r   _collectfilesrK   `   s>    EE8SY'TW]]_% ( %=r   c                t    U R                  U5      u  p#U Vs/ s H  o@R                  U5      PM     sn$ s  snf r   )getstrippointlinkrev)revlogrI   r   	brokensetrs        r   _collectrevlogrR   j   s3    ''1LA'01y!NN1y111s   5c                    [        5       n[        U 5       H  nUR                  [        XB5      5        M     U H-  nUR                  [        U R	                  U5      U5      5        M/     U$ )z<return the changesets which will be broken by the truncation)r)   manifestrevlogsrG   rR   file)r2   rH   rI   srO   fnames         r   _collectbrokencsetsrX   o   sV    A!$'	12 (			% 0(;<  Hr   c                  ^& UR                  5       b  [        R                  " S5      eUS;   a  SnUR                  5       nUR	                  5         UR
                  nUR                    UR                  n[        U[        5      (       a  U/nU Vs/ s H  ovR                  U5      PM     nn[        U5      n	[        X5      n
[        XU	5      n[        U5      m&[        U5      nUR                  U	S-   S9 H  n[!        U&4S jUR#                  U5       5       5      (       a  T&R%                  U5        UT&;  d  ME  UR%                  U5        UR'                  UR#                  U5      5        UR%                  U5        M     U Vs/ s H  oR)                  U5      PM     nnU(       a+  [        UR+                  U5      5      nUR'                  U5        U Vs/ s H  oR)                  U5      PM     nnT& Vs/ s H  oR)                  U5      PM     nnS=nnUR,                  R/                  SS	5      (       a  [0        R2                  " UU5      nU(       a2  [5        UR6                  5       VVs/ s H  u  nnUU;   d  M  UPM     nnn[9        UT&5      u  nnS nUS
   nU(       a  [;        UUXt5      nS nU(       a  [=        UUUUSSSSS9nU R?                  5           URA                  S5       n[        URB                  RE                  5       5      nURG                  URH                  5        URJ                  RM                  UUU	5        URO                  5         URQ                  U	U5        [S        XUU
5        U
 H$  nURU                  U5      RQ                  U	U5        M&     URW                  5         URY                  5       nU H\  u  nnUU;   a  M  UR[                  USSS9 nUR]                  U5        S S S 5        US:X  d  MA  UR^                  Ra                  U5        M^     [c        UR6                  U5        U?URe                  5         S S S 5        URg                  5       Ri                  U	5        U(       Ga*  U Rk                  [m        S5      5        URo                  US5      n [p        Rr                  " U U UU5      n!UR,                  Rt                  (       d  UR,                  Rw                  5       O[x        Rz                  " 5       n"U"   SUR}                  U5      -   n#Sn$[        U![~        R                  5      (       d  S[        R                  " U#5      -  n$URA                  U$5       n[~        R                  " UU!USU#S9  S S S 5        S S S 5        U R                  5         URA                  S5       nU Vs/ s H  nUUU   R)                  5       4PM     n%nUR                  R                  UUU%5        S S S 5        [@        R                  " UR,                  R                  UR                  5        U(       a  UR                  U5        S S S 5        UR                  5         U$ s  snf s  snf s  snf s  snf s  snnf ! , (       d  f       GN= f! , (       d  f       GNO= f! , (       d  f       GN(= f! , (       d  f       GN2= fs  snf ! , (       d  f       N= f!   U(       a,  U R                  [m        S5      UR}                  U5      -  5        U(       aX  U R                  [m        S5      UR}                  U5      -  5        U R                  [m        S5      UR}                  U5      -  5        e = f! , (       d  f       GN1= f)Ns&   cannot strip from inside a transaction)s   noner#   Fr   )startc              3  ,   >#    U  H	  oT;   v   M     g 7fr    )r   ptostrips     r   r   strip.<locals>.<genexpr>   s     6%5G|%5s   r\   s   devels   strip-obsmarkerss   tempT)r7   r8   r9   r#      a)
checkambigr   s   adding branch
s   rbs   bundle:s   strip
%s)sourceurls   repairs+   strip failed, backup bundle stored in '%s'
s1   strip failed, unrecovered changes stored in '%s'
sG   (fix the problem, then recover the changesets with "hg unbundle '%s'")
)Kcurrenttransactionr   ProgrammingError
unfiltered
destroyingr&   
_bookmarks	changelog
isinstancebytesrevminrK   rX   r)   revsany
parentrevsadddifference_updater5   descendantsr1   
configboolr   exclusivemarkers	enumerateobsstore_bookmarkmovements_createstripbackuprC   uninterruptibler   
_offsetmapkeysrG   	_newfiles_phasecacheregister_strip
startgroupstripstripmanifestrU   endgroupreadjournalsvfstruncatestoremarkremoveddeleteobsmarkersinvalidatevolatilesetsrevbranchcache
invalidatenoter   openr   
readbundleverbosesilentr   nullcontextmanagerr,   r   
unbundle20r   hidepasswordapplybundlecloseapplychangescleanup_undo_fileswarnvfs_mapunlink	destroyed)'r1   r2   nodelistbackuptopicr&   clr5   	striplistrI   rH   saverevs	saveheadsrQ   rt   	savebases
stripbasesstripobsidx
obsmarkersimnewbmtargetupdatebm
backupfiletmpbundlefiletroldfilesfnentriesrU   troffsetfpfgenmaybe_silenttmpbundleurltxnname	bmchangesr^   s'                                         @r   r   r   {   sB     ,$$%NOO $$??DOO
((C 	OO	B (E"":*23($(I39~H$)E"49H )nGHIWW8a<W(6R]]1%5666KKNGLLO''a(89MM! ) &//YYI/ "..23"";/%-.XXI.&-.g''!*gJ.!!K*ww($788--dJ?
#DMM2
2$!Qa:oA2 	 
 /tW=KJB<D'j$F
M %	
 
			W	*!!(+r
 r}}1134-  //b(C2&db%8BIIbM''"5  ..*&-ND(x' 4$?2H- @1}

..t4 '. !<M++-; ,B !,,X6,-.HH]E2))"aD  77?? GGNN$002 
 "#-0G#GL&G%c7+=+=>>".1E1E(2 # ))'2b++ #r( 3 " 	!!),DLMHqak!2!7!7!9:H	M,,T2yA - **477<<F, 

=)q 
t 	NN  4. 0 /.
l @?- ,+h 32 "\ N -,	EFhhz*+ KLhh}-. 3 hh}-	. i 
	s   Y*Y/Y48Y9/Y> Y>]:["/C6Z%Z	7ZAZC ["A Z:.Z(Z:)["8[=[[;=["8]:
ZZ
Z%	 ["(
Z72Z::
[		["[
[	[""B]77]::
^	c                   UR                  SU5       Vs/ s H  oUR                  5       PM     nnU(       d  gSnU(       a  US   n[        XX5      n[        X5      u  pUR	                  S5       n[
        R                  " X[
        R                  U5        U
 Vs/ s H  oX   R                  5       4PM     nnUR                  R                  XU5        SSS5        U$ s  snf s  snf ! , (       d  f       U$ = f)z/perform a "soft" strip using the archived phases   sort(%ln::)Nr   r#   )
r)   r5   rz   ry   r   r   retractboundaryarchivedri   r   )r1   r2   r   r   r   r   r^   r   r5   r   r   r   r   r   s                 r   	softstripr   4  s    !%.(!CD!CAvvx!CGDJqz'tC
.t=K			(	#rt'B<DEHq*//12H	E$$Ty9 
$  E F 
$	# s#   C 0+C*C%8C*%C**
C9c                   U R                   n/ nU H0  nXU      R                  5       nXQ;   d  M  UR                  U5        M2     S nU(       a>  U R                  SX5      nU(       a#  XR	                  5          R                  5       nXc4$ SnXc4$ )Ns   max(parents(%ld) - (%ld))   .)ri   rm   appendro   firstr5   )r2   r^   bmr   r   rm   r   s          r   ry   ry   G  s    	BHa5koo>OOA  K  ii <gO002388:K    K  r   c                  ^ U R                   nU R                  5       nUR                  R                  mUR	                  SUUR                  R                  5       5      nU(       d  g U4S jnU" UR	                  SU5      5      nU" UR	                  SU5      5      n	[        XXU5      n
U R                  R                  [        S5      UR                  U
5      -  5        U R                  R                  SSUR                  U
5      5        U
$ )Ns    (%ln)::(%ld) and not _internal()c                @   > U  Vs/ s H  nT" U5      PM     sn$ s  snf r   r\   )ro   rQ   to_nodes     r   to_nodes$_createstripbackup.<locals>.to_nodesn  s    $()Dq
D)))s   z
roots(%ld)z
heads(%ld)s   saved backup bundle to %s
s   backupbundle)r&   rg   rj   r5   ro   headrevsrC   r1   statusr   r,   log)r2   r   r5   r   r&   unfi
all_backupr   r3   r4   r   r   s              @r   rz   rz   ]  s    
((C??Dnn!!G
 +!J
 * TYY|Z89ETYY|Z89Ed5>JGGNN134sxx
7KKLGGKK7*9M r   c           	       ^ TR                  5       R                  R                  nU Vs1 s H
  oC" U5      iM     nnSn[        TR	                  XeU[
        R                  U5      5      nXW-
  nU(       aA  SR                  [        U4S jU 5       5      5      n	U R                  [        S5      U	-  5        TR                  SU5       V
s/ s H  oR                  5       PM     sn
$ s  snf s  sn
f )zDreturn list of roots of nodes where descendants are covered by nodess5   %ld - ( ::( (roots(%ld):: and not _phase(%s)) -%ld) )s   , c              3  \   >#    U  H!  n[        TU   R                  5       5      v   M#     g 7fr   )r   r5   )r   nr2   s     r   r   !safestriproots.<locals>.<genexpr>  s#     #L8aE$q',,.$9$98s   ),s9   warning: orphaned descendants detected, not stripping %s
s
   roots(%ld))rg   rj   rm   r)   ro   r   internalr,   r*   r   r   r5   )r1   r2   nodestorevr   ro   revsetr^   notstripnodestrr   s    `         r   safestriprootsr   {  s    OO''++E#$eE!HeD$
 FF$))F$FGG~H**V#L8#LLM
KL	
 #hh}g>?>FFH>?? % @s   C&
C+c                  *    \ rS rSrSrS rS rS rSrg)stripcallbacki  z(used as a transaction postclose callbackc                V    Xl         X l        X0l        U=(       d    SU l        / U l        g )N   backup)r1   r2   r   r   r   )selfr1   r2   r   r   s        r   __init__stripcallback.__init__  s$    	'i
r   c                :    U R                   R                  U5        g r   )r   extend)r   r   s     r   addnodesstripcallback.addnodes  s    U#r   c                    [        U R                  U R                  U R                  5      nU(       a7  [	        U R                  U R                  X R
                  U R                  5        g g r   )r   r1   r2   r   r   r   r   )r   r   rootss      r   __call__stripcallback.__call__  sB    tww		4==A$''499e[[$**E r   )r   r   r2   r   r1   N)	__name__
__module____qualname____firstlineno____doc__r   r   r   __static_attributes__r\   r   r   r   r     s    2$Fr   r   Nc                    UR                  5       nU(       d  [        XU5      n[        XXdUS9$ UR                  S5      nUc  [	        XXCS9nUR                  SU5        U(       a  X7l        UR                  U5        g)aU  like strip, but works inside transaction and won't strip irreverent revs

nodelist must explicitly contain all descendants. Otherwise a warning will
be printed that some nodes are not stripped.

Will do a backup if `backup` is True. The last non-None "topic" will be
used as the backup topic name. The default backup topic name is "backup".
)r   r   s   stripN)re   r   r   getpostcloser   addpostcloser   r   )r1   r2   r   r   r   r   r   callbacks           r   delayedstripr     sv     
	 	 	"Br2Ru5AA |,H &F
h/hr   c                J    [        U 5       H  nUR                  X5        M     g r   )rT   r   )r2   rI   r   rH   rO   s        r   r   r     s    !$'X" (r   c              #  Z  #    U R                   R                  S5      v   [        R                  " U 5      (       ao  U R                  R                  5        HP  nUR                  (       d  M  UR                  (       d  M)  U R                   R                  UR                  5      v   MR     g g 7f)Nr   )	manifestlog
getstorager   istreemanifestr   data_entries	is_revlogis_manifestlog	target_id)r2   entrys     r   rT   rT     sz     



%
%c
**d## ZZ,,.E5#7#7#7&&11%//BB / $s   A%B++B+>-B+c                   UR                  5       n[        R                  UR                  ;  a  U R                  [	        S5      5        gUR                  5          UR                  R                  nUR                  U R                  S9  [        UR                  5      n[        5       n[        5       nU(       a  U Hy  nUSS S:X  d  M  USS S:X  d  M  UR                  USS 5        UR                  U5        USS S-   nUR                  R                  U5      (       d  Mh  UR                  U5        M{     OU R                  [	        S	5      [	        S
5      [        U5      S9n	U H  n
U	R                  U
5        X   nUR!                  5        H  nXv;   a  M
  UR                  U5        SU-  nSU-  nUR                  R                  U5      (       a  UR                  U5        UR                  R                  U5      (       d  Mx  UR                  U5        M     M     U	R#                  5         [        R$                  UR                  ;   a  [&        R(                  " U5       Hq  nSU-  nSU-  nUR                  R                  U5      (       a  UR                  U5        UR                  R                  U5      (       d  M`  UR                  U5        Ms     [        XT-
  5      n[        XE-
  5      n[+        XE-
  5       H   nU R-                  [	        S5      U-  5        M"     [+        XT-
  5       H   nU R-                  [	        S5      U-  5        M"     U(       d  U(       aX  U R-                  [	        S5      UU4-  5        XSl
        SUl        UR1                  S5       nUR-                  U5        SSS5        OU R-                  [	        S5      5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)zlRebuilds the fncache file from repo history.

Missing entries will be added. Extra entries will be removed.
sE   (not rebuilding fncache because repository does not support fncache)
N)r      s   data/s   .is   .ds
   rebuildings
   changesets)unittotals	   data/%s.is	   data/%s.ds   meta/%s/00manifest.is   meta/%s/00manifest.ds   removing %s
s
   adding %s
s(   %d items added, %d removed from fncache
Ts   fncaches   fncache already up to date
)rg   r   FNCACHE_REQUIREMENTr   r   lockr   fncacheensureloadedr)   r   rr   _existsmakeprogressrF   rG   rH   completeTREEMANIFEST_REQUIREMENTr   dirsr*   write_dirtyr   )r1   r2   	only_datafnc
oldentries
newentries	seenfilesr   datafprogressrm   ctxr   ddiraddcountremovecountr]   r   s                      r   rebuildfncacher    sH   
 ??D''t/@/@@
&	
 		jj  bgg&%
U
E	 Ra5H$235MM!Ab'*NN1%crFUNEzz))%00"u-  - q'7s4y ' H $iA~ MM!$$q(A$q(Azz))!,,"q)zz))!,,"q) %	 $ 00D4E4EE  }}Y/+c1+c1::%%a((NN1%::%%a((NN1% 0 z./*12
/0AHHQ'(1,- 1
/0AHHQ~&*+ 1 {HH>?[)* %KCJ!!*-		" .- HHQ678S 
L .-M 
sG   A,O0
O0AO0$C O0B9O0CO0!O3#O0
O-	)O00
O>c                N   U(       d  g/ nU R                   nSn[        U5       H"  u  pVXQ;   a  US-  nM  UR                  U5        M$     U R                  SSSS9n[        R
                  " USU R                  5       H  nUR                  U5        M     UR                  5         U$ )a  Delete some obsmarkers from obsstore and return how many were deleted

'indices' is a list of ints which are the indices
of the markers to be deleted.

Every invocation of this function completely rewrites the obsstore file,
skipping the markers we want to be removed. The new temporary file is
created, remaining markers are written there and on .close() this file
gets atomically renamed to obsstore, thus guaranteeing consistency.Nr   r   s   obsstore   wT)
atomictemp)	_allrw   r   r   r   encodemarkers_versionr  r   )	rx   indicesleftcurrentr   r   r   newobsstorefilerl   s	            r   r   r   %  s     DmmG	A'"<FAA	 # mmK$mGO''dH4E4EFe$ GHr   )TTF)Tr   )NT)F)'
__future__r   i18nr   r5   r   r    r   r	   r
   r   r   r   r   r   r   r   r   r   r   utilsr   r   rC   rK   rR   rX   r   r   ry   rz   r   r   r   r   rT   r  r   r\   r   r   <module>r(     s    #     8v2
	vr&!,<@(F F& 0#
CY9xr   