
    q&f
R                         d dl Z ddlmZ ddlmZmZmZmZmZm	Z	m
Z
mZ ddlmZmZmZmZ ddlmZ d Zd	 Zd
ZdZdZ eeeeg      Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%y)    N   )_)errormetadatapycompatrequirementsscmutilstoreutilvfs)	constantsflagutilnodemapsidedata   )actionsc           	      p   | j                   j                  dd      }t        j                  xs | }|sd| j	                  t
        j                  t        j                  t        j                  ft        j                  | |      t        j                  d       t        j                  | |j                        S )Ns   experimentals   worker.repository-upgradeT)replace)ui
configboolr   	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##05yJ**&&  !!#//A)) 	+ 	
 ++GW5M5MNN    c                 :   t        |d|      }|j                  |      }t        |d|      }|j                  }|j                  }|j                  |j                        }|j                  |j                        }|j                  |j
                        }	|j                  |j
                        }
 ||j                  d      5  	 ddd       t        j                  ||       |j                  j                  |j
                        }|rt        j                  |	|
       |j                  rd|j                         }|j                  j                  j                  |       |r,|j                  j                  j                  |dd dz          yyy# 1 sw Y   xY w)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%   _copyrevlogrE   .   sO    E9e,E%%h/EE9e,E\\F\\F{{5++,H{{5++,Hkk%//*Gkk%//*G	  $	'  	MM(H%||""5??3Hgw',,.!!-0MM!!%%mCR&85&@A   s   FFs	   changelogs   manifests   all-filelogsc                 ~    |j                   rt        | v S |j                  rt        | v S |j                  sJ t
        | v S )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_MANIFESTr3   UPGRADE_FILELOGS)revlogfilterr;   s     r%   matchrevlogrM   X   sF      L00			<//|++r&   c                    d}|j                         }	t        |j                  |      rf| j                  t	        d      t        |      |	fz         |j                  |      }|j                  ||||j                  |j                  |       |S t	        d      }
| j                  |
|	t        |      fz         t        ||||       |j                  |      }|S )z%returns the new revlog object createdNs   cloning %d revisions from %s
)addrevisioncb
deltareuseforcedeltabothparentssidedata_helperss+   blindly copying %s containing %i revisions
)r4   rM   revlogs_to_processnoter   lenr,   clonedelta_reuse_modeforce_re_delta_both_parentsrE   )r   r"   r8   
old_revlogr;   
upgrade_oprR   oncopiedrevisionr<   revlog_pathmsgs              r%   _perform_cloner^   g   s     E&&(K:00%8
/0:,-	
 ))'2*!22","H"H- 	 	
 L ?@
{C
O445BU3))'2Lr&   c                 
  % d}d}d}d}d}	d}
d}d}d}d}d}d}d}d}d}d}d}d}t        |j                  j                               }i }i }i }|D ]  }|j                  s|j	                  |      }|j                  dddd      }||d   xs dz  }|d   xs d}|d   xs d}||z  }||z  }|j                  r(|||j                  <   |t        |      z  }||z  }||z  }|j                  r-|||j                  <   |dz  }|t        |      z  }||z  }||z  }|j                  r.|||j                  <   |	dz  }	|
t        |      z  }
||z  }||z  }t        j                  d        |sy	| j                  t        d
      ||
||fz         | j                  t        d      t        j                   |      t        j                   |      fz         d	%%fd} t#        ||      }!| j                  t        d      |	|
t        j                   |      t        j                   |      fz         |j$                  j'                  t        d      |
      %t)        |j+                               D ]F  \  }"}|j	                  |      }#t-        | |||#|||!|       }$|$j                  d      }||d   xs dz  }H | j                  t        d      |
|	t        j                   ||z
        fz         | j                  t        d      ||t        j                   |      t        j                   |      fz         %r%j/                          |j$                  j'                  t        d      |      %t)        |j+                               D ]F  \  }"}|j	                  |      }#t-        | |||#|||!|       }$|$j                  d      }||d   xs dz  }H | j                  t        d      ||t        j                   ||z
        fz         | j                  t        d      |t        j                   |      t        j                   |      fz         %r%j/                          |j$                  j'                  t        d      |      %t)        |j+                               D ]F  \  }"}|j	                  |      }#t-        | |||#|||!|       }$|$j                  d      }||d   xs dz  }H %j/                          | j                  t        d      |t        j                   ||z
        fz         ||z   |z   }| j                  t        d      |t        j                   ||z
        fz         y	)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                 &    j                          y )N)	increment)rlrevnodeprogresss      r%   r[   z'_clonerevlogs.<locals>.oncopiedrevision   s    r&   sM   migrating %d filelogs containing %d revisions (%s in store; %s tracked data)
s   file revisions)total)rc   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,   storageinforG   	target_idrU   rI   r3   r   ProgrammingErrorstatusr   r   	bytecountr   r   makeprogresssorteditemsr^   complete)&r   r!   r"   r8   rZ   revcountsrcsize
srcrawsizedstsizefcount	frevcountfsrcsizefrawsizefdstsizemcount	mrevcountmsrcsizemrawsizemdstsize	crevcountcsrcsizecrawsizecdstsizealldatafiles	manifests
changelogsfilelogsr;   rf   infodatasizerawsizer[   rR   ro   r:   r<   ri   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	"	
 Y	9
5		6 II	
56NN7#T^^J%?@	B H ,GW= II	0	

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

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

 NN8$NN8$
		

 zz&&	
 ! ' H #:#3#3#56 -	5))'2	
   D 1D',1,- II		
 dnnX%89
:		; !H,GII		
 T^^Gg$56
7		8r&   c              #     K   t        | j                  j                  j                  dd            D ]K  \  }}}t        j                  |      r|j                  d      r/|t        j                  k7  rC|dv rH| M yw)zOyields files which should be copied to destination after revlogs
    are clonedr&   T)stats   undo)s   locks   fncacheN)rt   r
   r   readdiris_revlog_file
startswithr   S_IFREG)r!   pathkindsts       r%    _files_to_copy_post_revlog_cloner   o  s~      !!2!2!:!:3T!:!JK dB%??7#4<<(( 
s   B Bc                 
   |j                   r0t        j                  | j                  |j	                  d             n| j
                  j                  dd       t        j                  |j                  | j                         y)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spathr.   r   rmtree)currentrepoupgradedrepo	backupvfsrZ   s       r%   _replacestoresr     s[     K%%y~~h'?@x$7KK""K$5$56r&   c                      y)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                    |j                         sJ |j                         sJ d}d}| j                  t        d             t        j                  |j                  v rR| j                  t        d             t        | ||dd       |j                  j                  t        j                         t        j                  |j                  v rR| j                  t        d             t        | ||dd       |j                  j                  t        j                         t        j                  |j                  v rS| j                  t        d             t        | ||d	       |j                  j                  t        j                         nnt        j                  |j                  v rR| j                  t        d
             t        | ||d	       |j                  j                  t        j                         |j                  s|j                  sy|j                  r<| j                  t        d             t        j                  ||j                         |S t        |j                        dk(  rd|j                  v r|j                  s| j                  t        d             |j!                  d      5 }|j#                         }|j$                  }t'        j(                  ||d       t'        j(                  ||j*                  j,                  j.                  d       ddd       t        j                  ||j                         |S t        |j                        dk(  r|j                  D 	cg c]  }	|	j0                  dk(  r|	 c}	r|j                  s| j                  t        d             |j!                  d      5 }|j#                         }|j$                  }t'        j2                  |||       t'        j2                  |||j*                  j,                  j.                         ddd       t        j                  ||j                         |S |j!                  d      5 }t5        | ||||       ddd       t7        |      D ]  }
|j8                  j                  t        d      |
z         |j:                  j<                  j?                  |
      }|j:                  j<                  j?                  |
      }tA        jB                  ||d        tE        | ||tF               | j                  t        d             |jH                  rttK        jL                  d|jN                        }tQ        jR                  |      }tA        jB                  |jR                  j?                  d      |j?                  d             | j                  t        d             t        j                  ||jF                  dhz         | j                  t        d             |jH                  r| j                  t        d      |z         | j                  t        d             tA        jT                         }tW        ||||       tA        jT                         |z
  }| j                  t        d      |z         | j                  t        d             t        j                  ||j                         |jH                  r|J |jY                  d        |S # 1 sw Y   xY wc c}	w # 1 sw Y   xY w# 1 sw Y   xY w)!ay  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)r7   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)-currentwlockrq   r   upgrade_actions
dirstatev2upgrade_dirstateremoveremoved_actionsdirstatetrackedkeyupgrade_tracked_hintrequirements_onlyr	   writereporequirementsnew_requirementsrU   upgrade_actions_namestransaction
unfiltered	changelogr   persist_nodemapmanifestlog
_rootstorer(   namedelete_nodemapr   r   r   r
   rawvfsr.   r   r1   r   r   r   r   mkdtempr   vfsmodr   timerr   unlink)r   r!   r"   rZ   
backuppathr   r8   unficlxpsrcdsttstartelapseds                  r%   upgrader     s    !!!!!!JIII	+	
 !!Z%?%??
		!9:;Wj%?""))/*D*DE!!Z%?%??
		!;<=Wj%?""))/*D*DE))Z-G-GG
		!:;<R*$?""))/*L*LM		+	+z/I/I	I
		!:;<R*%@""))/*L*LM&&**D*D##
		!:;<%%gz/J/JKD { 	J&&'1,!Z%E%EE**
		IJ	
   , 
	%%'DB##B$7
 ##D$$//77t
	 	%%gz/J/JKV S 	J&&'1,  //
vv.. 

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

:.I MM  -y~~k/J 			4	
 	%%W))-A,BB	
 			!BCD""II=>K 			!+,-wJ?**,'
		 		
 				
 	%%gz/J/JK""
 (((]+m
	 
	
	 		 	s,   :A+\5\#A)\(+\5\ (\25\?c                    |j                   rt        j                  d|j                        }| j	                  t        d      |z         t        j                  |      }t        j                  |j                  j                  d      |j                  d             	 t        j                  |j                  j                  d      |j                  d             |j                  j                  |dk(  k(  sJ |dk(  }|r t        j                  ||j                          |j                  j"                  j%                          ||j                  _        ||j                  j"                  _        d|j                  _        	 |j                  j)                  d       |j                  j+                  d        |s!t        j                  ||j                          y y # t        $ r Y w xY w# t        $ r Y Zw xY w)Nr   r   r   r   s   dirstater   T)r   r   r   r   rq   r   r   r   r   r1   r.   FileNotFoundErrordirstate_use_dirstate_v2r	   r   r   _mappreload_dirtyr   write)r   r!   rZ   oldnewr   r   use_v2s           r%   r   r   U  s   %%$',,

 			!?@:MNJJz*	KK[)9>>++F	
	MM  -y~~k/J ,,>>>E\F%%gz/J/JK!!#(.G%-3G*"G;' 4 %%gz/J/JK / ! 	 	"   	s$   >G G. 	G+*G+.	G:9G:c                    |rNd|j                   _        d|j                   _        d|j                   _        |j                   j	                  d        |s|j                   j                          t        j                  ||j                         y )NT)	r   _use_tracked_hintr   _dirty_tracked_setr   delete_tracked_hintr	   r   r   )r   r!   rZ   r7   s       r%   r   r     sn    
-1*"&.2+t$,,.!!':+F+FGr&   )&r   i18nr    r   r   r   r   r	   r
   r   r   r   revlogutilsr   r   r   r   r   r   r   r   r   rE   rH   rJ   rK   	frozensetUPGRADE_ALL_REVLOGSrM   r^   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&   