
    6hS                        S SK Jr  S SKrSSKJr  SSKJrJrJrJ	r	J
r
JrJrJr  SSKJrJrJrJr  SSKJr  S	 rS
 rSrSrSr\" \\\/5      rS rS r S r!S r"S r#S r$S r%S r&S r'g)    )annotationsN   )_)errormetadatapycompatrequirementsscmutilstoreutilvfs)	constantsflagutilnodemapsidedata   )actionsc           	        U R                   R                  SS5      nU(       a2  [        R                  (       a  SnU R                   R	                  S5        [        R
                  =(       d    U(       + nU(       da  U R                  [        R                  [        R                  [        R                  4[        R                  " X5      [        R                  SS9  [        R                  " XR                   5      $ )Ns   experimentals   worker.repository-upgradeFs>   ignoring experimental.worker.repository-upgrade=True on darwinT)replace)ui
configboolr   isdarwindebug	iswindowsregister_sidedata_computerrevlogconstKIND_CHANGELOGsidedatamodSD_FILESr   _get_worker_sidedata_adderr   REVIDX_HASCOPIESINFOget_sidedata_helpers_wanted_sidedata)srcrepodstrepouse_w
sequentials       @/usr/lib/python3/dist-packages/mercurial/upgrade_utils/engine.pyr"   r"       s    JJ!!/3OPE""

M	
 ##05yJ**&&  !!#//A)) 	+ 	
 ++G5M5MNN    c                b   [        USU5      nUR                  U5      n[        USU5      nUR                  nUR                  nUR                  UR                  5      nUR                  UR                  5      nUR                  UR
                  5      n	UR                  UR
                  5      n
U" UR                  S5          SSS5        [        R                  " Xx5        UR                  R                  UR
                  5      nU(       a  [        R                  " X5        UR                  (       ai  UR                  5       nUR                  R                  R                  U5        U(       a,  UR                  R                  R                  USS S-   5        ggg! , (       d  f       N= f)a  copy all relevant files for `oldrl` into `destrepo` store

Files are copied "as is" without any transformation. The copy is performed
without extra checks. Callers are responsible for making sure the copied
content is compatible with format of the destination repository.
_revlog   wNs   .d)getattrget_revlog_instanceopenerjoin
_indexfile	_datafiler   copyfileexists
is_filelogmain_file_pathsvfsfncacheadd)trdestrepooldrlentrynewrloldvfsnewvfsoldindexnewindexolddatanewdatacopydataunencodednames                r(   _copyrevlogrH   7   sD    E9e,E%%h/EE9e,E\\F\\F{{5++,H{{5++,Hkk%//*Gkk%//*G	  $	' 
( 	MM(%||""5??3Hg',,.!!-0MM!!%%mCR&85&@A   
(	's   F  
F.s	   changelogs   manifests   all-filelogsc                    UR                   (       a	  [        U ;   $ UR                  (       a	  [        U ;   $ UR                  (       d   e[
        U ;   $ )zcheck if a revlog is selected for cloning.

In other words, are there any updates which need to be done on revlog
or it can be blindly copied.

The store entry is checked against the passed filter)is_changelogUPGRADE_CHANGELOGis_manifestlogUPGRADE_MANIFESTr6   UPGRADE_FILELOGS)revlogfilterr>   s     r(   matchrevlogrP   a   sF      L00			<//|++r)   c           	        SnUR                  5       n	[        UR                  U5      (       ac  U R                  [	        S5      [        U5      U	4-  5        UR                  U5      nUR                  UUUUR                  UR                  US9  U$ [	        S5      n
U R                  X[        U5      4-  5        [        X!X45        UR                  U5      nU$ )z%returns the new revlog object createdNs   cloning %d revisions from %s
)addrevisioncb
deltareuseforcedeltabothparentssidedata_helperss+   blindly copying %s containing %i revisions
)r7   rP   revlogs_to_processnoter   lenr/   clonedelta_reuse_modeforce_re_delta_both_parentsrH   )r   r%   r;   
old_revlogr>   
upgrade_oprU   oncopiedrevisionr?   revlog_pathmsgs              r(   _perform_clonera   p   s     E&&(K:00%88
/0:,-	
 ))'2*!22","H"H- 	 	
 L ?@
C
O445B3))'2Lr)   c                T  ^% SnSnSnSnSn	Sn
SnSnSnSnSnSnSnSnSnSnSnSn[        UR                  R                  5       5      n0 n0 n0 nU GH@  nUR                  (       d  M  UR	                  U5      nUR                  SSSSS9nUUS   =(       d    S-  nUS   =(       d    SnUS   =(       d    SnUU-  nUU-  nUR                  (       a)  UUUR                  '   U[        U5      -  nUU-  nUU-  nM  UR                  (       a.  UUUR                  '   US-  nU[        U5      -  nUU-  nUU-  nM  UR                  (       a/  UUUR                  '   U	S-  n	U
[        U5      -  n
UU-  nUU-  nGM*  [        R                  " S5        GMC     U(       d  g	U R                  [        S
5      XZUU4-  5        U R                  [        S5      [        R                   " U5      [        R                   " U5      4-  5        S	m%U%4S jn [#        X5      n!U R                  [        S5      U	U
[        R                   " U5      [        R                   " U5      4-  5        UR$                  R'                  [        S5      U
S9m%[)        UR+                  5       5       HI  u  n"nUR	                  U5      n#[-        U UUU#UUU!U 5      n$U$R                  SS9nUUS   =(       d    S-  nMK     U R                  [        S5      X[        R                   " X-
  5      4-  5        U R                  [        S5      UU[        R                   " U5      [        R                   " U5      4-  5        T%(       a  T%R/                  5         UR$                  R'                  [        S5      US9m%[)        UR+                  5       5       HI  u  n"nUR	                  U5      n#[-        U UUU#UUU!U 5      n$U$R                  SS9nUUS   =(       d    S-  nMK     U R                  [        S5      X[        R                   " UU-
  5      4-  5        U R                  [        S5      U[        R                   " U5      [        R                   " U5      4-  5        T%(       a  T%R/                  5         UR$                  R'                  [        S5      US9m%[)        UR+                  5       5       HI  u  n"nUR	                  U5      n#[-        U UUU#UUU!U 5      n$U$R                  SS9nUUS   =(       d    S-  nMK     T%R/                  5         U R                  [        S5      U[        R                   " UU-
  5      4-  5        UU-   U-   nU R                  [        S5      U[        R                   " X-
  5      4-  5        g	)zCopy revlogs between 2 repos.r   T)exclusivefilesrevisionscounttrackedsize
storedsizes   revisionscounts
   storedsizes   trackedsizer   s   unknown revlog typeNsP   migrating %d total revisions (%d in filelogs, %d in manifests, %d in changelog)
s'   migrating %s in store; %s tracked data
c                &   > TR                  5         g )N)	increment)rlrevnodeprogresss      r(   r^   '_clonerevlogs.<locals>.oncopiedrevision   s    r)   sM   migrating %d filelogs containing %d revisions (%s in store; %s tracked data)
s   file revisions)total)rf   sO   finished migrating %d filelog revisions across %d filelogs; change in size: %s
sN   migrating %d manifests containing %d revisions (%s in store; %s tracked data)
s   manifest revisionssQ   finished migrating %d manifest revisions across %d manifests; change in size: %s
sK   migrating changelog containing %d revisions (%s in store; %s tracked data)
s   changelog revisionss>   finished migrating %d changelog revisions; change in size: %s
sF   finished migrating %d total revisions; total change in store size: %s
)listr   walk	is_revlogr/   storageinforJ   	target_idrX   rL   r6   r   ProgrammingErrorstatusr   r   	bytecountr"   r   makeprogresssorteditemsra   complete)&r   r$   r%   r;   r]   revcountsrcsize
srcrawsizedstsizefcount	frevcountfsrcsizefrawsizefdstsizemcount	mrevcountmsrcsizemrawsizemdstsize	crevcountcsrcsizecrawsizecdstsizealldatafiles	manifests
changelogsfilelogsr>   ri   infodatasizerawsizer^   rU   rs   r=   r?   rl   s&                                        @r(   _clonerevlogsr      s    HGJGFIHHHFIHHHIHHH**,-L IJH &&w/~~	  
 	D*+0q0&+!~&+!8g
 */Ju'R I HH!!).Ieoo&aKFR I HH(-HU__%aKFR I HH""#9:O R II	"	
 	9
5		6 II	
56NN7#T^^J%?@	B H ,G= II	0	

 NN8$NN8$	
			
 zz&&q):';9&MH"8>>#34	5))'2	
   D 1D',1, 5 II	.	
 dnnX-@A
B		C II	0	

 NN8$NN8$	
			
 zz&&	
 	 ' H #9??#45	5))'2	
   D 1D',1, 6 II	/	
 dnnX-@A
B		C II	0	

 NN8$NN8$
		

 zz&&	
 ! ' H #:#3#3#56	5))'2	
   D 1D',1, 7 II		
 dnnX%89
:		; !H,GII		
 T^^G$56
7		8r)   c              #  (  #    [        U R                  R                  R                  SSS95       H]  u  pn[        R                  " U5      (       a  M#  UR                  S5      (       a  M;  U[        R                  :w  a  MQ  US;   a  MY  Uv   M_     g7f)zKyields files which should be copied to destination after revlogs
are clonedr)   T)stats   undo)s   locks   fncacheN)rx   r   r   readdiris_revlog_file
startswithr   S_IFREG)r$   pathkindsts       r(    _files_to_copy_post_revlog_cloner   x  s}      !!2!2!:!:3T!:!JKB%%??7##4<<(( 
 Ls   BBc                   UR                   (       a1  [        R                  " U R                  UR	                  S5      5        OU R
                  R                  SSS9  [        R                  " UR                  U R                  5        g)a  Replace the stores after current repository is upgraded

Creates a backup of current repository store at backup path
Replaces upgraded store files in current repo from upgraded one

Arguments:
  currentrepo: repo object of current repository
  upgradedrepo: repo object of the upgraded data
  backupvfs: vfs object for the backup path
  upgrade_op: upgrade operation object
              to be used to decide what all is upgraded
s   storeT)forciblyN)backup_storer   renamespathr1   r   rmtree)currentrepoupgradedrepo	backupvfsr]   s       r(   _replacestoresr     s[     K%%y~~h'?@x$7KK""K$5$56r)   c                    g)zHook point for extensions to perform additional actions during upgrade.

This function is called after revlogs and store files have been copied but
before the new store is swapped into the original location.
N )r   r$   r%   r	   s       r(   finishdatamigrationr     s    r)   c                   UR                  5       (       d   eUR                  5       (       d   eSnSnU R                  [        S5      5        [        R                  UR                  ;   aQ  U R                  [        S5      5        [        XUSS5        UR                  R                  [        R                  5        [        R                  UR                  ;   aQ  U R                  [        S5      5        [        XUSS5        UR                  R                  [        R                  5        [        R                  UR                  ;   aO  U R                  [        S5      5        [        XUSS	9  UR                  R                  [        R                  5        Ol[        R                  UR                  ;   aN  U R                  [        S
5      5        [        XUSS	9  UR                  R                  [        R                  5        UR                  (       d  UR                  (       d  gUR                  (       a<  U R                  [        S5      5        [        R                  " XR                  5        U$ [        UR                  5      S:X  a  SUR                  ;   a  UR                  (       d  U R                  [        S5      5        UR!                  S5       nUR#                  5       nUR$                  n[&        R(                  " XhSS9  [&        R(                  " XgR*                  R,                  R.                  SS9  SSS5        [        R                  " XR                  5        U$ [        UR                  5      S:X  Ga  UR                   V	s/ s H  n	U	R0                  S:X  d  M  U	PM     sn	(       a  UR                  (       d  U R                  [        S5      5        UR!                  S5       nUR#                  5       nUR$                  n[&        R2                  " XaU5        [&        R2                  " XaUR*                  R,                  R.                  5        SSS5        [        R                  " XR                  5        U$ UR!                  S5       n[5        U UUUU5        SSS5        [7        U5       H  n
UR8                  R                  [        S5      U
-  5        UR:                  R<                  R?                  U
5      nUR:                  R<                  R?                  U
5      n[@        RB                  " XSS9  M     [E        XU[F        5        U R                  [        S5      5        URH                  (       at  [J        RL                  " SURN                  S9n[P        RR                  " U5      n[@        RB                  " URR                  R?                  S5      UR?                  S5      5        U R                  [        S5      5        [        R                  " XRF                  S1-  5        U R                  [        S5      5        URH                  (       a  U R                  [        S5      U-  5        U R                  [        S5      5        [@        RT                  " 5       n[W        XXS5        [@        RT                  " 5       U-
  nU R                  [        S5      U-  5        U R                  [        S5      5        [        R                  " XR                  5        URH                  (       a  Uc   eURY                  S 5        U$ ! , (       d  f       GN= fs  sn	f ! , (       d  f       GN= f! , (       d  f       GN= f)!aa  Do the low-level work of upgrading a repository.

The upgrade is effectively performed as a copy between a source
repository and a temporary destination repository.

The source repository is unmodified for as long as possible so the
upgrade can abort at any time without causing loss of service for
readers and without corrupting the source repository.
NsP   (it is safe to interrupt this process any time before data migration completes)
s!   upgrading to dirstate-v2 from v1
s   v1   v2s#   downgrading from dirstate-v2 to v1
s"   create dirstate-tracked-hint file
T)r:   s"   remove dirstate-tracked-hint file
Fs"   upgrading repository requirements
r   s   persistent-nodemaps7   upgrading repository to use persistent nodemap feature
s   upgrade)forces=   downgrading repository to not use persistent nodemap feature
s   copying %s
)copystats.   data fully upgraded in a temporary repository
   upgradebackup.prefixdir   requiress\   marking source repository as being upgraded; clients will be unable to read from repository
s   upgradeinprogresss*   starting in-place swap of repository data
'   replaced files will be backed up at %s
s   replacing store...
sC   store replacement complete; repository was inconsistent for %0.1fs
sB   finalizing requirements file and making repository readable again
s
   store/lock)-currentwlockru   r   upgrade_actions
dirstatev2upgrade_dirstateremoveremoved_actionsdirstatetrackedkeyupgrade_tracked_hintrequirements_onlyr
   writereporequirementsnew_requirementsrX   upgrade_actions_namestransaction
unfiltered	changelogr   persist_nodemapmanifestlog
_rootstorer+   namedelete_nodemapr   r   r   r   rawvfsr1   r   r4   r   r	   r   r   mkdtempr   vfsmodr   timerr   unlink)r   r$   r%   r]   
backuppathr   r;   unficlxpsrcdsttstartelapseds                  r(   upgrader     s    !!!!!!!!JIII	+	
 !!Z%?%??
		!9:;j%?""))/*D*DE!!Z%?%??
		!;<=j%?""))/*D*DE))Z-G-GG
		!:;<R*$?""))/*L*LM		+	+z/I/I	I
		!:;<R*%@""))/*L*LM&&**D*D##
		!:;<%%g/J/JKD { 	J&&'1,!Z%E%EE**
		IJ	
   ,%%'DB##B$7
 ##$$//77t - 	%%g/J/JKV S 	J&&'1,  //
/vv.. /

 **
		OP	
   ,%%'DB""23""T--88@@ - 	%%g/J/JKl i   , - 2':AJJa0145--&&++A.C--&&++A.CMM#T2	 ; 	B,?
		!FGH""!))(gllJ 

:.I MM  -y~~k/J 			4	
 	%%))-A,BB	
 			!BCD""II=>K 			!+,-w?**,'
		 		
 				
 	%%g/J/JK""
 (((]+m -,
 -, -,s2   A%]]!(]!2A)]&]8
]&
]58
^c                   UR                   (       a  [        R                  " SUR                  S9nU R	                  [        S5      U-  5        [        R                  " U5      n[        R                  " UR                  R                  S5      UR                  S5      5         [        R                  " UR                  R                  S5      UR                  S5      5        UR                  R                  US:H  :X  d   eUS:H  nU(       a   [        R                  " XR                   5        UR                  R"                  R%                  5         XqR                  l        XqR                  R"                  l        SUR                  l         UR                  R)                  S5        UR                  R+                  S 5        U(       d!  [        R                  " XR                   5        g g ! [         a     GNf = f! [         a     Naf = f)Nr   r   r   r   s   dirstater   T)r   r   r   r   ru   r   r   r   r   r4   r1   FileNotFoundErrordirstate_use_dirstate_v2r
   r   r   _mappreload_dirtyr   write)r   r$   r]   oldnewr   r   use_v2s           r(   r   r   ^  s   %%$',,

 			!?@:MNJJz*	KK[)9>>++F	
	MM  -y~~k/J ,,>>>E\F%%g/J/JK!!#(.%-3*"G;' 4 %%g/J/JK / ! 	 	"   	s$   $?G- G> -
G;:G;>
H
Hc                0   U(       aN  SUR                   l        SUR                   l        SUR                   l        UR                   R	                  S 5        U(       d  UR                   R                  5         [        R                  " XR                  5        g )NT)	r   _use_tracked_hintr   _dirty_tracked_setr   delete_tracked_hintr
   r   r   )r   r$   r]   r:   s       r(   r   r     sl    
-1*"&.2+t$,,.!!'+F+FGr)   )(
__future__r   r   i18nr    r   r   r   r	   r
   r   r   r   r   revlogutilsr   r   r   r   r   r   r   r   r"   rH   rK   rM   rN   	frozensetUPGRADE_ALL_REVLOGSrP   ra   r   r   r   r   r   r   r   r   r)   r(   <module>r      s    #  	 	 	  )O.BB !  " (*:; 
,!HaH*7,pf'LT	Hr)   