
    6hB                    @   S SK Jr  S SKrS SKJr  S SKJr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  S SKJrJr  S SKJr  S SKJrJ r   S	S
K!J"r"  SSK#J$r$J%r%  \R                   " 5       r&\&RO                  \S5      S 5       r(\&RO                  \S5      S 5       r)\&RO                  \S5      S 5       r*S r+S r,S r-S9S jr.SS\R^                  4S jr0S r1S r2\&RO                  \S5      S 5       r3\&RO                  \Rh                  S5      S 5       r5\&RO                  \Rh                  S5      S 5       r6S  r7\&RO                  \S!5      S" 5       r8\&RO                  \S#5      S$ 5       r9\&RO                  \Rt                  S%5      S& 5       r;S' r<S( r=S) r>S* r?S+ r@\&RO                  \S,5      S- 5       rA\&RO                  \
S.5      S/ 5       rBS0 rCS:S1 jrDS:S2 jrES3 rF\&RO                  \S45      S5 5       rG\&RO                  \S65      \&RO                  \S75      S8 5       5       rHg);    )annotationsN)_)binhexshort)bundle2changegroupcmdutilcontexterrorexchange	exthelper	localreporevlogscmutilvfswireprotov1server)actionsengine)
repository)storageutil
stringutil   )lfutil   )	blobstorepointermakefilestoragec                `    SU;   a  UR                  [        R                  5        U " SXS.UD6$ )N   lfs)requirementsfeatures )addr   REPO_FEATURE_LFS)origr!   r"   kwargss       3/usr/lib/python3/dist-packages/hgext/lfs/wrapper.pylocalrepomakefilestorager)   4   s/    Z001G\GGG    allsupportedversionsc                8    U " U5      nUR                  S5        U$ )Ns   03)r$   )r&   uiversionss      r(   r+   r+   <   s    BxHLLOr*   _capabilitiesc                    U " X5      n[        UR                  S5      (       a2  SUR                  ;   a  UR                  S5        UR                  S5        U$ )z5Wrap server command to announce lfs server capabilitylfslocalblobstorer    s	   lfs-serve)hasattrsvfsr!   append)r&   repoprotocapss       r(   r/   r/   C   sM     Dtyy-..
 T&&&KK%FKr*   c                    gNFr#   )selftexts     r(   bypasscheckhashr<   S   s    r*   c                .   [         R                  " U5      nUR                  5       nU R                  R                  nUR                  U5      (       d8  U R                  Ul        U R                  R                  R                  U/U5        UR                  USS9n0 nUR                  5        H/  nUR                  S5      (       d  M  U[        S5      S nX&   XW'   M1     U(       d  UR                  S5      (       a  [        R                  " XQ5      nUS4$ )a  Read filelog content from local blobstore transform for flagprocessor.

Default tranform for flagprocessor, returning contents from blobstore.
Returns a 2-typle (text, validatehash) where validatehash is True as the
contents of the blobstore should be checked using checkhash.
F)verifys   x-hg-Ns   
T)r   deserializeoidopenerr1   hasfilenamelfsremoteblobstore	readbatchreadkeys
startswithlenr   packmeta)r:   r;   pr@   storehgmetaknames           r(   readfromstorerP   W   s     	D!A
%%'CKK))E99S>>]]
&&00!e< ::c%:(D FVVX<<!!S]_%D4FL  ))##F1$<r*   c                   [         R                  " U5      u  p#U(       a
  US:  a  XS  n[        [        R                  " U5      R                  5       5      nU R                  R                  R                  XA5        SU-  n[        R                  " US[        U5      -  S9n[        R                  " U5      (       d  SUS'   Ub   UR                  5        H  u  pxXSU-  '   M     UR                  5       n	U	S4$ )	Nr   s	   sha256:%ss   %d)r@   size   0   x-is-binarys   x-hg-%sF)r   	parsemetar   hashlibsha256digestrA   r1   writer   gitlfspointerrI   r   binaryitems	serialize)
r:   r;   rM   offsetr@   longoidmetadatarN   vrawtexts
             r(   writetostorerc   t   s     **40NF&1*G} gnnT"))+
,CKK!!''2 S G$$us4y7HIH
 T""#'  LLNDA'(Z!^$ #   "GUr*   c                    Uc  Uc  gU R                  U5      nOU R                  U5      nXR                  :X  a  gU R                  U5      n[	        U[
        R                  -  5      $ r9   )revnodenullidflagsboolr   REVIDX_EXTSTORED)rlogrf   re   rh   s       r(   _islfsrl      sY    
{<hhtnyy~{{JJsOE///00r*   c
                X   UR                   R                  R                  R                  S5      nU(       ac  [	        U5      n[
        R                  " U5      u  pU(       a  X-  nU" UR                   R                  U5      (       a  U	[        R                  -  n	U " UUUUUU4UUU	S.U
D6$ )Ns   lfstrack)
cachedeltarf   rh   )
_revlogrA   optionsgetrI   r   rU   rC   r   rj   )r&   r:   r;   transactionlinkp1p2rn   rf   rh   kwdslfstracktextlenmetar^   s                  r(   filelogaddrevisionrz      s     ||""**..{;Hd)",,T2GDLL))733V,,,E

   r*   c                    [        UR                  U5      (       aY  UR                  R                  U5      nU(       d  g[        R                  " U5      nSU;   a  SU;   a  US   [        US   5      4$ gU " X5      $ )NFs	   x-hg-copys   x-hg-copyrev)rl   ro   rawdatar   r?   r   )r&   r:   rf   rb   r`   s        r(   filelogrenamedr}      st    dllD!!,,&&t,&&w/8#8(CL)3x/H+IIIr*   c                    [        UR                  US9(       a?  UR                  R                  U5      n[        R                  " U5      n[        US   5      $ U " X5      $ )N)re   s   size)rl   ro   r|   r   r?   int)r&   r:   re   rb   r`   s        r(   filelogsizer      sN    dll$,,&&s+&&w/8G$%%?r*   _verify_revisionc                r   [        XS9(       a  UR                  U5      n[        R                  " U5      nUR                  R
                  R                  UR                  5       5      (       a  U[        R                  ) -  nO,U[        R                  -  (       a  US   R                  U5        U " XX45        g )N)rf   s   safe_renamed)rl   r|   r   r?   rA   r1   rB   r@   r   rj   r$   )r&   rl	skipflagsstaterf   rb   r`   s          r(   r   r      s    b**T"&&w/
 99&&**8<<>::&1111I000 /"&&t,$r*   cmpc                >   UR                  5       (       a  [        USS 5      " 5       (       ai  [        R                  " UR	                  5       5      n[        R                  " UR	                  5       5      nUR                  5       UR                  5       :g  $ U " X5      $ )z+returns True if text is different than fctxislfsc                     gr9   r#   r#   r*   r(   <lambda>filectxcmp.<locals>.<lambda>   s    ur*   )r   getattrr   r?   r|   r@   )r&   r:   fctxrt   ru   s        r(   
filectxcmpr      sn     zz||g}=??  0  0vvx2668##r*   isbinaryc                    UR                  5       (       aH  [        R                  " UR                  5       5      n[	        [        UR                  SS5      5      5      $ U " U5      $ )NrT   r   )r   r   r?   r|   ri   r   rq   )r&   r:   r`   s      r(   filectxisbinaryr     sH    zz||&&t||~6C^Q7899:r*   c                f    [        U R                  5       R                  U R                  5       5      $ N)rl   filelogro   filenode)r:   s    r(   filectxislfsr     s!    $,,.(($--/::r*   _updatecatformatterc                V    U " XX4U5        UR                  X$   R                  5       S9  g )N)r|   )datar|   )r&   fmctxmatcherpathdecodes         r(   r   r     s'    '(GGCI%%'G(r*   wrapconvertsinkc                l    U " U5      nUR                   S:X  a   " S SUR                  5      nX!l        U$ )Ns   hgc                  (   ^  \ rS rSrU 4S jrSrU =r$ )convertsink.<locals>.lfssinki  c	           
     L  >^ [         TU ]  n	U	" UUUUUUUU5      n
SU R                  R                  ;  an  U R                  U
   m[	        U4S jU 5       5      (       aE  U R                  R                  R                  S5        [        R                  " U R                  5        U
$ )Nr    c              3  f   >#    U  H&  u  pUT;   =(       a    TU   R                  5       v   M(     g 7fr   )r   ).0fnr   s      r(   	<genexpr>9convertsink.<locals>.lfssink.putcommit.<locals>.<genexpr>7  s)     I541186A65s   .1)super	putcommitr5   r!   anyr$   r   writereporequirements)r:   filescopiesparentscommitsourcerevmapfullcleanp2pcrf   r   	__class__s              @r(   r   &convertsink.<locals>.lfssink.putcommit  s     W&	 !7!77))D/C I5III		..226:55dii@r*   r#   )__name__
__module____qualname____firstlineno__r   __static_attributes____classcell__)r   s   @r(   lfssinkr     s       r*   r   )repotyper   )r&   sinkr   s      r(   convertsinkr     s4    :D}}!	dnn !	F !Kr*   __init__c           	        U " X5        UR                   R                  5        H+  u  p4UR                  S5      (       d  M  XAR                   U'   M-     S H*  n[        X%5      (       d  M  [	        X[        X%5      5        M,     g )Nr    )r1   rD   )rp   r\   rH   r2   setattrr   )r&   r:   othervfsrN   ra   rO   s         r(   vfsinitr   D  se      &&(<<LLO )
 <8""D 78 <r*   c                4   [        U R                  S5      (       d  g/ n[        5       nU R                  R                  nU H  u  pVX   nUR	                  U5       H  n[        Xx5      n	U	(       d  M  U	R                  5       U;  d  M-  UR                  U	R                  5       5      (       a  MS  Xl        UR                  U	5        UR                  U	R                  5       5        M     M     U(       a&  [        R                  " U 5      R                  X$5        gg)zOEnsure that required LFS blobs are present, fetching them as a group if
needed.r1   N)r2   r3   setr1   walkpointerfromctxr@   rB   rC   r4   r$   r   remoterE   )
r5   
revmatchespointersoids
localstorere   matchr   r   rK   s
             r(   _prefetchfilesr   R  s     499122H5D,,J 
i%As&AqQUUWD(1H1H
"! ! !  	((> r*   c                    [        U R                  S5      (       d  g[        U R                  R                  [        R
                  5      $ )NrD   Tr2   r3   
isinstancerD   r   _nullremoter5   s    r(   _canskipuploadr   k  s6    499233 dii22I4I4IJJr*   c                    [        U R                  S5      (       d  g[        U R                  R                  [        R
                  5      (       + $ )NrD   Fr   r   s    r(   candownloadr   t  s9    499233 $))66	8M8MNNNr*   c                R    [        U 5      (       a  g[        X5      n[        X5        g)z#upload lfs blobs introduced by revsN)r   extractpointersuploadblobs)r5   revsr   s      r(   uploadblobsfromrevsr   }  s"    dt*Hr*   c                V    [        U R                  U R                  R                  5      $ )zPrepush hook.

Read through the revisions to push, looking for filelog entries that can be
deserialized into metadata so that we can block the push on their upload to
the remote blobstore.
)r   r5   outgoingmissing)pushops    r(   prepushr     s     v{{FOO,C,CDDr*   pushc                   SUR                   ;   a  UR                  5       (       dB  UR                  S5      (       d,  [        S5      n[        R
                  " US-  [        S5      S9eUR                  R                  n [        R                  " XR                  5       5      UR                  l        U " X/UQ70 UD6XaR                  l        $ U " X/UQ70 UD6$ ! XaR                  l        f = f)z}bail on push if the extension isn't enabled on remote when needed, and
update the remote store based on the destination path.r    s:   required features are not supported in the destination: %ss&   enable the lfs extension on the server)hint)r!   localcapabler   r   Abortr3   rD   r   r   url)r&   r5   r   argsr'   mremotestores          r(   r   r     s     """ ||~~fnnV&<&< OPA++F
#L!M  ii22	7+4+;+;D**,+ODII(6t6v6+6II(D242622 ,7II(s   ?>C C,writenewbundlec                H    [        X&R                  5        U " XX4XV/UQ70 UD6$ )z;upload LFS blobs added by outgoing revisions on 'hg bundle')r   r   )	r&   r-   r5   r   rC   
bundletyper   r   r'   s	            r(   r   r     s6    
 ../
&J;?CI r*   c                   U R                   R                  S5        0 nU R                   R                  nU" [        S5      [        S5      [	        U5      5       nU HI  nX   n[        U5      R                  5        H  nXrUR                  5       '   M     UR                  5         MK     [        UR                  5       S S9sSSS5        $ ! , (       d  f       g= f)z1return a list of lfs pointers added by given revss&   lfs: computing set of blobs to upload
s
   lfs searchs
   changesetsc                "    U R                  5       $ r   )r@   )rK   s    r(   r   !extractpointers.<locals>.<lambda>  s
    quuwr*   )keyN)
r-   debugmakeprogressr   rI   pointersfromctxvaluesr@   	incrementsorted)r5   r   r   r   progressrr   rK   s           r(   r   r     s    GGMM<=H77''L		-!M*CI
	A'C$S)002$%! 3 	 
 hoo'->?
 
 
s   A(C
Cc           	     6   U nX;  aQ  U(       d  gXR                  5       ;   a  U R                  5       nO%XR                  5       ;   a  U R                  5       nOgX1   n[        UR                  5       R                  UR                  5       5      (       d  g [        R                  " UR                  5       5      nX:X  a  U$ 0 $ ! [        R                   aA  n[        R                  " [        S5      U[        UR                  5       5      U4-  5      eSnAff = f)a+  return a pointer for the named file from the given changectx, or None if
the file isn't LFS.

Optionally, the pointer for a file deleted from the context can be returned.
Since no such pointer is actually stored, and to distinguish from a non LFS
file, this pointer is represented by an empty dict.
Ns#   lfs: corrupted pointer (%s@%s): %s
)rt   ru   rl   r   ro   r   r   r?   r|   InvalidPointerr   r   r   r   rf   )r   r   removed_ctxr   rK   exs          r(   r   r     s     D|=668D&&(]668D7D$,,.(($--/::	
/;H	!! 
kk56%		$b)*
 	

s   *C C D<DDc                    0 nU R                  5       R                  5       nU R                  5        H%  nU" U5      (       d  M  [        XUS9nUc  M!  XRU'   M'     U$ )zreturn a dict {path: pointer} for given single changectx.

If ``removed`` == True and the LFS file was removed from ``ctx``, the value
stored for the path is an empty dict.
)r   )r5   narrowmatchr   r   )r   r   resultr   r   rK   s         r(   r   r     sZ     F
 A YY[tt373=1I  Mr*   c                    U(       d  gU R                   R                  nUR                  XR                   R                  5        g)z*upload given pointers from local blobstoreN)r3   rD   
writebatchr1   )r5   r   
remoteblobs      r(   r   r     s/    --J(II$?$?@r*   finishdatamigrationc                   U " XX45        [        UR                  S5      (       a  [        UR                  S5      (       a  UR                  R                  R                  nUR                  R                  R                  nUR	                  5        Ha  u  pxn	U	 HU  n
UR                  [        S5      U
-  5        [        R                  " UR                  U
5      UR                  U
5      5        MW     Mc     g g g )Nr1   s   copying lfs blob %s
)
r2   r3   r1   r   r   rY   r   r   rs   join)r&   r-   srcrepodstrepor!   	srclfsvfs	dstlfsvfsdirpathdirsr   r@   s              r(   upgradefinishdatamigrationr    s    g, w||011g)7 7 LL2266	LL2266	$-NN$4 G534s:;INN3/1DE  %571r*   preservedrequirementssupporteddestrequirementsc                X    U " U5      nSUR                   ;   a  UR                  S5        U$ )Nr    )r!   r$   )r&   r5   reqss      r(   upgraderequirementsr    s,     :D"""Kr*   )NN)F)I
__future__r   rV   mercurial.i18nr   mercurial.noder   r   r   	mercurialr   r	   r
   r   r   r   r   r   r   r   r   vfsmodr   mercurial.upgrade_utilsr   upgrade_actionsr   upgrade_enginemercurial.interfacesr   mercurial.utilsr   r   
largefilesr    r   r   ehwrapfunctionr)   r+   r/   r<   rP   rc   rl   REVIDX_DEFAULT_FLAGSrz   r}   r   r   basefilectxr   r   r   r   r   readonlyvfsr   r   r   r   r   r   r   r   r   r   r   r   r  r  r#   r*   r(   <module>r)     s   #   * *   
 ,
  
  -.H /H 45 6 "O4 5:>1. 	

%
%%R
 +,% -%$ $$e, - $$j1 2; /0) 1)
 +,) -)\ ##Z0
9 1
9?2KO E 6"3 #3: *+ ,@"
B&A !67F 8F  "9:"=> ? ;r*   