^cIddlZddlmZddlmZmZddlmZmZm Z m Z m Z m Z m Z mZmZmZmZmZddlmZmZmZ ddZd Zd Zd Zdd ZddZdZdZdZGddZ ddZ!dZ"dZ#ddZ$dZ%dS)N)_)hexshort) bundle2 changegroup discoveryerrorexchangeobsoleteobsutilpathutilphases requirementsscmutilutil)hashutil stringutilurlutilTc bd}|j}||s|||d||} t d| D} t jd| } d|t|t| dd|fz} tj |} d}| dkrd }|rd }n|rd }nd }tj||| }| |dd}tj|j|d| ||||| S)z8create a bundle with the specified revisions as a backups strip-backups%ln::%lnc3>K|]}|VdSN)r.0cs 2/usr/lib/python3/dist-packages/mercurial/repair.py zbackupbundle..2s*331quuww333333rs%s/%s-%s-%s.hgNs01sHG20sBZsHG10BZsHG10UN) missingroots ancestorsofT)s cg.versions obsolescencesphasesstrip) compression)vfsisdirmkdirsetsortedrsha1joindigestrrr localversionr outgoingrwritenewbundleui)repobasesheadsnodesuffixcompress obsolescence backupdirr$ allcommits allhashes totalhashname cgversioncomp bundletyper- contentoptss r backupbundler@&so  I (C 99Y   )+ue44J33 33333I chhy112299;;I  d  IbqbM   D(..I DE  D   !$UNNNH %K  !        rct}t|t|D]/}|||0t |S)z+find out the filelogs affected by the strip)r'rangelenupdatefilesr()r0striprevrExs r _collectfilesrHYsW EEE 8SYY ' '&& T!W]]__%%%% %==rcP|\}}fd|DS)Nc:g|]}|S)linkrev)rrrevlogs r z"_collectrevlog..es% 1 1 1!FNN1   1 1 1r) getstrippoint)rNrFr brokensets` r_collectrevlogrRcs4''11LAy 1 1 1 1y 1 1 11rct}t|D]%}|t||&|D]8}|t|||9|S)z|z}|5}twj?||d|dddn #1swxYwYdddn #1swxYwY|@d5}%fd|D} jA|| dddn #1swxYwYBD]\}!}" |!C|"#t$rk}#|#jEtjFkrL|Gted|!:|"tjI|#fzYd}#~#d}#~#wwxYw |r|C|n#|r8|Gted|:|z|rp|Gted |:|z|Gted!|:|zxYwdddn #1swxYwYJ|S)"Ns&cannot strip from inside a transaction)snoner"Fc:g|]}|SrK)rev)rr3cls rrOzstrip..s#333$333rr)startc3 K|]}|vV dSrrK)rptostrips rrzstrip..s'66qG|666666rc:g|]}|SrKr3rrMr]s rrOzstrip..s#//////rc:g|]}|SrKrcrds rrOzstrip..s#......rc:g|]}|SrKrcrds rrOzstrip..s#..."''!**...rrKsdevelsstrip-obsmarkersc"g|] \}}|v | SrKrK)rim obsmarkerss rrOzstrip..s)   !Qa:ooAooorstemp)r5r6r"aT) checkambigrsadding branch srbsbundle:sstrip %s)sourceurlsrepaircHg|]}|fSrKrcrri newbmtargetr0s rrOzstrip..s/MMMqak!2!7!7!9!9:MMMrserror removing %s: %s s+strip failed, backup bundle stored in '%s' s1strip failed, unrecovered changes stored in '%s' sG(fix the problem, then recover the changesets with "hg unbundle '%s'") )Kcurrenttransactionr ProgrammingError unfiltered destroyingr$ _bookmarks changelog isinstancebytesminrHrXr'revsany parentrevsadddifference_update descendantsr/ configboolr exclusivemarkers enumerateobsstore_bookmarkmovements_createstripbackupr@uninterruptible transaction _offsetmapkeysrD _newfiles startgroupstrip stripmanifestrUendgroup readjournalsvfstruncatestore markremoveddeleteobsmarkersinvalidatevolatilesets _phasecache filterunknownnoteropenr readbundleverbosesilentrnullcontextmanagerr*r unbundle20r hidepassword applybundleclose applychanges undofilesunlinkOSErrorerrnoENOENTwarnr forcebytestr destroyed)(r/r0nodelistbackuptopicr$ striplistrFrEsaverevs saveheadsrMr savebases stripbases stripobsidxupdatebm backupfiler3 tmpbundlefiletroldfilesfnentriesrUtroffsetfpfgen maybe_silent tmpbundleurltxnname bmchangesundovfsundofileer]rrrjras( ` @@@@rrrts    ,$%NOOO$$$ ??  DOO (C OO B(E"":3333(333I9~~H $ ) )E"499H)nnGH I WW8a ,--...HH]E22)"aDD 7?3DGNN$$$022 "  #-0G0G#GL&G%c7+=>>".1E(22#))'22b+ #r(                 !!),, BMMMMMHMMM ,,T2yAAA B B B B B B B B B B B B B B B &*^^%5%5  ! NN8,,,,w%,..899 ' X 6 6 * 7 : : B * =)))-  EFFhhz**+ KLLhh}--.3hh}-- . y`*`*`*`*`*`*`*`*`*`*`*`*`*`*`*D NN s2^ 4[  C7QO"  Q"O& &Q)O& *A)Q [ Q# #[ &Q# 'B[ 6A!VU=1 V=V VV V [ V [ V ,[ ,X4 [ X [ X [ %X;:[ ; Z0A!Z+&[ +Z00[ 4^  B/];;^  ^^c dd|D}|sdSd}|r|d}t|||}t|\ }d5} t j| tj| fd|D} j| | dddn #1swxYwY|S)z/perform a "soft" strip using the archived phasec6g|]}|SrKrcrs rrOzsoftstrip..6s DDDAqvvxxDDDrs sort(%ln::)Nrr"cHg|]}|fSrKrcrqs rrOzsoftstrip..Bs/EEEqak*//112EEEr) r'rrrrretractboundaryarchivedrwr) r/r0rrrrarr3rrrrrs ` @r softstripr4s-DD.(!C!CDDDG tJ Dqz'gtUCC .tW==K  ( # #:rtR'BBBEEEEEHEEE  $$T2y999::::::::::::::: s-A CC  C c0|j}g}|D];}|||}||vr||> OOA   Kii z!safestriproots..ls! $ $ $EE!HH $ $ $rs5%ld - ( ::( (roots(%ld):: and not _phase(%s)) -%ld) )s, c3fK|]+}t|V,dSr)rr3)rrr0s rrz!safestriproots..us7#L#LaE$q',,..$9$9#L#L#L#L#L#Lrs9warning: orphaned descendants detected, not stripping %s c6g|]}|SrKrcrs rrOz"safestriproots..zs ? ? ?AFFHH ? ? ?rs roots(%ld)) rurxr\r'r|rinternalr*r(rr) r/r0nodesr|revsetranotstripnodestrrs ` @rsafestriprootsris OO   ' +E $ $ $ $e $ $ $D FF$))FD$FFGGGg~H **V#L#L#L#L8#L#L#LLLMM  K L L     @ ?dhh}g>> ? ? ??rc$eZdZdZdZdZdZdS) stripcallbackz(used as a transaction postclose callbackcP||_||_||_|pd|_g|_dS)NrY)r/r0rrr)selfr/r0rrs r__init__zstripcallback.__init__s.  'i  rc:|j|dSr)rextend)rrs raddnodeszstripcallback.addnodess U#####rct|j|j|j}|r)t |j|j||j|jdSdSr)rr/r0rrrr)rrrootss r__call__zstripcallback.__call__sRtw 4=AA  F $'49eT[$* E E E E E F FrN)__name__ __module__ __qualname____doc__rrrrKrrrr}sL22$$$FFFFFrrc8|}|s%t|||}t|||||S|d}|)t ||||}|d||r||_||dS)ailike 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". )rrsstripN)rsrr getpostcloser addpostcloserr)r/r0rrrrrcallbacks r delayedstriprs  " "B Br422RuV5AAAA|,,H T&FFF  h///  hrcVt|D]}|||dSr)rTr)r0rFrrErNs rrrs:!$''## Xr""""##rc#NK|jdVtj|rp|jD]X\}}}|dr;|dr&|dd}|j|VWdSdS)Nrsmeta/s 00manifest.ii) manifestlog getstorageristreemanifestr datafiles startswithendswith)r0t unencodedsizedirs rrTrTs   % %c * ****d##7#'*"6"6"8"8 7 7 Ay$##H-- 7)2D2D33 7 #&&11#6666677 7 7rFcv|}tj|jvr$|t ddS|5|jj}||jt|j }t}t}|r|D]}|dddkr||dddkrn| |dd| ||dddz}|j |r| |n| t d t d t| } |D]} | | || } | D]}||vr| |d |z} d |z} |j | r| | |j | r| | | tj|jvrt'j|D]j}d|z} d|z} |j | r| | |j | r| | kt||z }t||z }t+||z D]'}|t d|z(t+||z D]'}|t d|z(|s|rx|t d||fz||_ d|_|d5}||dddn #1swxYwYn"|t dddddS#1swxYwYdS)ztRebuilds 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)rrsdata/s.is.ds rebuildings changesets)unittotals data/%s.is data/%s.dsmeta/%s/00manifest.ismeta/%s/00manifest.ds removing %s s adding %s s(%d items added, %d removed from fncache Tsfncachesfncache already up to date )rurFNCACHE_REQUIREMENTrrlockrfncache ensureloadedr'rr_exists makeprogressrCrDrEcompleteTREEMANIFEST_REQUIREMENTrdirsr(write_dirtyr)r/r0 only_datafnc oldentries newentries seenfilesrdatafprogressr\ctxrhdraddcount removecountr`rs rrebuildfncachers ??  D't/@@@  &      I9I9j  bg&&&%% UU EE !  . .RaR5H$$2335MM!AbD'***NN1%%%crcFUNEz))%00."u---  .-  q'7'7s4yy'H * *$$$3i * *AI~~ MM!$$$$q(A$q(Az))!,,*"q)))z))!,,*"q))) *        0D4E E E }Y// & &+c1+c1:%%a((&NN1%%%:%%a((&NN1%%%zJ.//*z122  Z/00 . .A HHQ'((1, - - - - Z/00 , ,A HHQ~&&* + + + +  9{ 9 HH>??[)*   %CKCJ!!*--  "                 HHQ677 8 8 8SI9I9I9I9I9I9I9I9I9I9I9I9I9I9I9I9I9I9s7 M1P.O3' P.3O7 7P.:O7 ;&P..P25P2cJ|sdSg}|j}d}t|D]$\}}||vr|dz }||%|ddd}t j|d|jD]}||||S)aDelete 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.NrrsobsstorewT) atomictemp) _allrrrr encodemarkers_versionrr) rindicesleftcurrentrrhrinewobsstorefilerzs rrrs  DmG A'""1 << FA  AmmK$mGGO'dH4EFF%%e$$$$ Hr)TT)TrY)NT)F)&ri18nrr3rrrrr r r r r rrrrrutilsrrrr@rHrRrXrrrrrrrrrTrrrKrrr,sB                             CG0000f222    }}}}@&!!!,   @@@(FFFFFFFF&    0### 7 7 7Y9Y9Y9Y9x     r