a
    %0_$                  	   @   sR  d Z ddlmZ ddlZddlZddlmZ ddlm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mZmZmZmZmZ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( e Z)e'j*Z*d
Z+dd Z,dddZ-dd Z.dd Z/e)0e
ddd Z1e)j2ddddedfdddedfdddedfgddd  Z3e)0edd!d" Z4e)0ed#d$d% Z5e)0e j6d&d'd( Z7e)2d&d)d* Z8e)0e j6d+dd-d.Z9e)2d/d0d1 Z:e)j2d2ddded3fdd4ded5fdd6ded7fgdd8d9 Z;e)j2d:ddded;fgdd<d= Z<e)0ed>dd?d@Z=e)0edAdBdC Z>e)0edDdEdF Z?e)0edGddHdIZ@e)0edJddKdLZAe)0edMddNdOZBe)0edPdQdR ZCe)j2dSddTdedUfddVg edWedXfgdddYdZZDe)j2d[ddVg ed\edXfgdd]d^ ZEe)0ed_d`da ZFe)Gdbdcdd ZHe)j2deddTdedffgdddgdhZIe)0ededidj ZJe)j2dkdkdldmdn ZKe)jLdodp ZMe)2dqdrds ZNe)0e
dqdtdu ZOe)0edqddwdxZPe)0e j6dqddydzZQe)0ed{d|d} ZRe)0ed~dd ZSe)0eddd ZTdd ZUdd ZVe)j2ddddedfgddd ZWdd ZXe)j2ddddedfgddd ZYe)0eddddZZe)j2dddldd Z[e)2ddd Z\e)j2dddldd Z]e)2ddd Z^e)0eddd Z_e)0eddd Z`e)0e!de)0e!ddd ZadZbe)0e#ddddZcdS )zHOverridden Mercurial commands and functions for the largefiles extension    )absolute_importN)_)open)webcommands)archivalcmdutilcopieserrorexchange
extensions	exthelper	filemergehg
logcmdutilmatchmerge
mergestatepathutilpycompatscmutilsmartsetsubrepoupgradeurlutil   )
lfcommandslfutilstorefactorys   lfmrc                    s\   t  | }fdd  fdd|jD |_t|j|_dd |_|j fdd|_|S )zMcreate a matcher that matches only the largefiles in the original
    matcherc                    s   t |  v S Nr   standinfmanifest </usr/lib/python3/dist-packages/hgext/largefiles/overrides.py<lambda>@       z)composelargefilematcher.<locals>.<lambda>c                    s   g | ]} |r|qS r&   r&   .0lflfiler&   r'   
<listcomp>A   r)   z+composelargefilematcher.<locals>.<listcomp>c                   S   s   dS NFr&   r&   r&   r&   r'   r(   C   r)   c                    s    | o| S r   r&   r"   r.   origmatchfnr&   r'   r(   E   r)   )copy_filesset_filesetalwaysmatchfn)r   r%   mr&   )r.   r%   r2   r'   composelargefilematcher<   s    

r:   c                    sv   t   |d ur | t| } fddfdd|jD |_t |j|_dd |_|jfdd|_|S )Nc                    s"   t | pt | v p|  v  S r   r   	isstandinr!   r"   )excludedr%   r&   r'   r(   O   s    z*composenormalfilematcher.<locals>.<lambda>c                    s   g | ]} |r|qS r&   r&   r*   )notlfiler&   r'   r/   R   r)   z,composenormalfilematcher.<locals>.<listcomp>c                   S   s   dS r0   r&   r&   r&   r&   r'   r(   T   r)   c                    s    | o| S r   r&   r"   )r>   r2   r&   r'   r(   V   r)   )r5   updater3   r4   r6   r7   r8   )r   r%   Zexcluder9   r&   )r=   r%   r>   r2   r'   composenormalfilematcherI   s    


r@   c                    sB  | d}t| t|| d}d }t|rX| tjd}	|	rXt|jdt	|	}g }
||d  }|
tdd D ]}|}t||v }||v }|p|}|r|r|r~| td||  q~|s|s~t|s~|j|sq~|o|j|j|d d k}|s&|s&|r~||r~|
| | js<|s~| td	||  q~g  |  | d
sg }t| |}|
D ]\}t|}tj||dt||d || || dkr|| n
|| q|   fdd|d  |D 7   fdd|
D }W d    n1 s00    Y  | fS )Nlargelfsizes   patternsr)   c                 S   s   d S r   r&   )xyr&   r&   r'   r(   j   r)   zaddlargefiles.<locals>.<lambda>s   %s already a largefile
i   s   adding %s as a largefile
Zdry_run)hash
executable   rc                    s"   g | ]}|   v rt|qS r&   )filesr   splitstandinr+   r#   r9   r&   r'   r/      s   z!addlargefiles.<locals>.<listcomp>c                    s   g | ]}| vr|qS r&   r&   rJ   )badr&   r'   r/      r)   ) getr   Z
getminsizeislfilesrepoZ
configlistZlongnamematchmodr   rootlistwalkZbadmatchexactr!   warnr   r<   wvfsexistslstatst_sizeappendverbosestatuswlockopenlfdirstatewritestandingetexecutablewjoinnormallookupaddwrite)uirepoisaddremovematcheruipathfnoptsrA   rB   Z	lfmatcherZlfpatsZlfnameswctxr#   rS   r.   ZnfilerV   Zaboveminstandins
lfdirstateZstandinnameaddedr&   )rL   r9   r'   addlargefilesZ   sj    






2rn   c              	      s  | d}t||d   }t|  |j|| d}	W d    n1 sJ0    Y  |d     fdd|	j|	j|	j|	jfD \}
}}}fdd}|r|}||
| | t	d}n(|| }||
t	d}||t	d	p|}|
  t|}t|D ]F}js||s,t	d
|  |s|s|jj|dd q|r^|W  d    S dd |D }|s|D ]}|jj|dd qv|d  | |D ]}t||t|d q|  W d    n1 s0    Y  |S )Nafterr   cleanc                    s   g | ]} fd d|D qS )c                    s   g | ]}t | v r|qS r&   r    rJ   r$   r&   r'   r/      r)   z/removelargefiles.<locals>.<listcomp>.<listcomp>r&   )r+   rQ   r$   r&   r'   r/      s   z$removelargefiles.<locals>.<listcomp>c                    s,   | D ]}  ||  qtt| dkS )Nr   )rT   intlen)rH   msgr#   )rd   rh   r&   r'   rT      s    zremovelargefiles.<locals>.warns#   not removing %s: file still exists
s<   not removing %s: file is modified (use -f to force removal)
sC   not removing %s: file has been marked for add (use forget to undo)
   removing %s
TZignoremissingc                 S   s   g | ]}t |qS r&   r    rJ   r&   r&   r'   r/      r)   F)rM   r:   r%   lfstatusr[   modifiedrm   deletedrq   r   r\   r   r]   sortedrZ   rS   rU   
unlinkpathforgetsynclfdirstaterI   rc   )rd   re   rf   rg   rh   dryrunri   ro   r9   srx   rm   ry   rq   rT   removeresultrl   r#   r&   )r%   rd   rh   r'   removelargefiles   sd    

.

(r   s
   decodepathc                 C   s   t |p|S r   r   rI   )origpathr&   r&   r'   
decodepath   s    r   s   addr)      larges   add as largefiles   normals   add as normal files   lfsizesH   add all files above this size (in megabytes) as largefiles (default: 10))ri   c                 O   s:   | dr"| dr"ttd| ||g|R i |S )NnormalrA   s$   --normal cannot be used with --large)rM   r	   Abortr   r   rd   re   patsri   r&   r&   r'   overrideadd   s    r   c                 K   s   | dr$| ||||||fi |S t||d||fi |\}}	t||d   |}
| |||
|||fi |}|dd |	D  |S )Nr   Fc                 s   s   | ]
}|V  qd S r   r&   rJ   r&   r&   r'   	<genexpr>  r)   zcmdutiladd.<locals>.<genexpr>)rM   rn   r@   r%   extend)r   rd   re   rg   prefixrh   explicitonlyri   ZladdedZlbadnormalmatcherrL   r&   r&   r'   
cmdutiladd  s    
r   s   removec
              
   C   sF   t ||d   }
| |||
||||||		}t||d|||	||dpD|S )NF)ro   force)r@   r%   r   )r   rd   re   rg   r   rh   ro   r   subreposr~   r   r   r&   r&   r'   cmdutilremove  s"    r   s   statusc                 K   s@   t |j" | ||fi |W  d    S 1 s20    Y  d S r   rw   _repo)r   re   Zrev2ri   r&   r&   r'   overridestatusfn7  s    r   c                 O   sD   t |( | ||g|R i |W  d    S 1 s60    Y  d S r   rw   r   r&   r&   r'   overridestatus=  s    
r   s   dirtyFc                 C   s<   t |j | |||dW  d    S 1 s.0    Y  d S )N)ignoreupdatemissingr   )r   re   r   r   r&   r&   r'   overridedirtyC  s    r   s   logc           	   	      s   d
fdd	}t j d fdd	}tt d|}ttd	|}|Z |6 | g|R i |W  d    W  d    S 1 s0    Y  W d    n1 s0    Y  d S )Nr&   F   relpathc                    sp  |du ri }| ||||||d}t  |\}}	| r:|S t|	}tjfdd rtj}
t	|
dt
|
    fddndd |fdd	|	D  td
t
|jD ]^}|j| dkrqt|j| }||v r||j|< q|j| |vrj|r|j| qt|j|_dd |_|jfdd}||_ddt|  ||fS )zMatcher that merges root directory with .hglf, suitable for log.
        It is still possible to match .hglf directly.
        For any listed files run log on the standin too.
        matchfn tries both the given filename and with .hglf stripped.
        Nbadfnc                 S   sJ   |  dr| S t| d }|d d ur>|d d ||d  S ||d S )Ns   set:r      :r   )
startswithrO   Z	_patsplit)pat	tostandinZkindpatr&   r&   r'   fixpatse  s    
z:overridelog.<locals>.overridematchandpats.<locals>.fixpatsc                    s\   |   r$t| t d  r$| S tjrB| t d  } nd |  }  t|  S )N   /)r   r   rI   rs   osr   isabsr!   r"   )backcwdr&   r'   r   t  s     z<overridelog.<locals>.overridematchandpats.<locals>.tostandinc                 S   s   t | r| S t | S r   r;   r"   r&   r&   r'   r     s    
c                 3   s   | ]} |V  qd S r   r&   rJ   )r   r   r&   r'   r     r)   z<overridelog.<locals>.overridematchandpats.<locals>.<genexpr>r      .c                   S   s   dS r0   r&   r&   r&   r&   r'   r(     r)   z;overridelog.<locals>.overridematchandpats.<locals>.<lambda>c                    s*   t | }|d ur |rdS  | }|S )NTr   )r#   r,   r)r2   r&   r'   	lfmatchfn  s
    
z<overridelog.<locals>.overridematchandpats.<locals>.lfmatchfns   updated patterns: %s
s   , )r3   r7   r5   r   r!   getcwd	shortnamer   ZpconvertZpathtors   r?   ranger4   rU   isdirrY   r6   r8   debugjoinrz   )r   ctxr   ri   globbeddefaultr   matchandpatsr9   pZhglfir!   r   re   rd   )r   r   r   r2   r   r'   overridematchandpatsK  s<    

z)overridelog.<locals>.overridematchandpatsc                    s(   |d  }||||d\ } fddS )Nr   c                    s    S r   r&   r   r   r&   r'   r(     r)   z>overridelog.<locals>.overridemakefilematcher.<locals>.<lambda>r&   )r   re   r   ri   r   rj   )oldmatchandpatsr   r'   overridemakefilematcher  s    z,overridelog.<locals>.overridemakefilematchers   matchandpatss   _makenofollowfilematcher)r&   NFr   N)N)r   r   r   wrappedfunctionr   )	r   rd   re   r   ri   r   r   ZwrappedmatchandpatsZwrappedmakefilematcherr&   )r   re   rd   r'   overridelogI  s          fr   s   verifys5   verify that all largefiles in current revision existss   lfas4   verify largefiles in all revisions, not just currents   lfcs3   verify local largefile contents, not just existencec           	      O   s`   | dd}| dd}| dd}| ||g|R i |}|sH|sH|r\|pZt||||}|S )NrA   FZlfaZlfc)popr   Zverifylfiles)	r   rd   re   r   ri   rA   allcontentsr   r&   r&   r'   overrideverify  s    r   s
   debugstates   display largefiles dirstatec                    s\   | dd}|r@G  fdddt}| |g|R i | n|  g|R i | d S )NrA   Fc                       s   e Zd Ze ZdS )z$overridedebugstate.<locals>.fakerepoN)__name__
__module____qualname__r   r]   dirstater&   r   r&   r'   fakerepo  s   r   )r   object)r   rd   re   r   ri   rA   r   r&   r   r'   overridedebugstate  s
    r   s   _checkunknownfilec                 C   s*   t |j||v rdS | |||||S r0   )r   r!   r   	normalize)origfnre   rj   mctxr#   f2r&   r&   r'   overridecheckunknownfile  s    r   s   calculateupdatesc                 O   s@  |o| }
| |||||||g|R i |	}|
r4|S t  }| D ]B}t|}|d url||v rl|| qBt||v rB|| qBt|D ]}t|}||d\}}}||d\}}}|dv rx|dkrx|dkr|\}}}}}||  df}t	d| }|j
|ddkr>||dd d ||d	|d
 n8||dd d
 |rf||dd d n||dd d q|dv r|dkr|dkr|\}}}}}||  df}t	d| }|j
|ddkr|r||dd d ||dd d
 n ||td d ||dd d q||d	|d
 ||dd d q|S )N)NNN)   g   dcrG   r   Fsw   remote turned local normal file %s into a largefile
use (l)argefile or keep (n)ormal file?$$ &Largefile $$ &Normal filer   s   replaced by standinr   s   replaces standin   ks   replaced by non-standinsw   remote turned local largefile %s into a normal file
keep (l)argefile or use (n)ormal file?$$ &Largefile $$ &Normal files   forget non-standin largefile   as   keep standin)r5   rH   r   rI   rb   r!   rz   Zgetfileflagsr   rd   promptchoiceaddfile#MERGE_ACTION_LARGEFILE_MARK_REMOVED)r   re   Zp1Zp2Zpasbranchmerger   ZacceptremoteargskwargsZ	overwriteZmresultlfilesr#   rI   r.   r!   ZlmZlargsZlmsgZsmZsargsZsmsgf1r   ZfaZmoveZancZusermsgr&   r&   r'   overridecalculateupdates  s    



r   s   recordupdatesc           	      C   sV   t |v rHt|j|}|t  D ] \}}}|j| || q|  | ||||S r   )r   r   r]   rd   r   r   rb   rc   )	r   re   Zactionsr   Zgetfiledatarl   r.   r   rt   r&   r&   r'   mergerecordupdates}  s    r   s
   _filemergec
                 C   s   t |r| s| r4| |||||||||	d	S t | }
t | }t | }||
kr||kr||
ks|jtdt ||
||f ddkr|	|
 | |  dS )N)labelss   largefile %s has a merge conflict
ancestor was %s
you can keep (l)ocal %s or take (o)ther %s.
what do you want to do?$$ &Local $$ &Otherr   r   )Tr   F)r   r<   Zisabsentreadasstandinlowerrd   r   r   rI   wwriter   datar   )r   Zpremergere   rj   Zmynoder   ZfcdZfcoZfcar   ZahashZdhashZohashr&   r&   r'   overridefilemerge  s4    
r   s
   pathcopiesc                 C   sF   | |||d}i }t |D ]$\}}t|p0||t|p>|< q|S )Nr   )r   Z	iteritemsr   rI   )r   Zctx1Zctx2r   r   updatedkvr&   r&   r'   copiespathcopies  s
    r   s   copyc                    s  t |dk r| |||S d}d}d   dfdd	}ttd|h z| |||}	W nB tjy }
 z(|
jtdkr|
nd	}d
}	W Y d }
~
n
d }
~
0 0 W d    n1 s0    Y  z	  W n t
y   |	 Y S 0 fdd}t|}|d }tj|r4tj||s4t|| z:z }d   dfdd	}g }|D ]0}t|d ur|| n||| qfg   fdd}ttd|T ttd|$ |	| |||7 }	W d    n1 s0    Y  W d    n1 s0    Y  t|} D ]\}}tj|v r0|tjr0|tdd}|tdd}j|pd}tj|st| |rt|| jj|d	d | | nt!|| |"| q0|#  W nB tjyd }
 z&|
jtdkrL|
nd	}W Y d }
~
n
d }
~
0 0 W |$  n
|$  0 |r|rttd|	S )N   Fr&   r   c                    s*   |d u ri }| ||||||d}t | S )Nr   )r@   )r   r   r   ri   r   r   r   r   r$   r&   r'   normalfilesmatchfn  s    	z(overridecopy.<locals>.normalfilesmatchfn   matchs   no files to copyTr   c                    s&   t  j  | } jt|S r   )r   Z	canonpathrP   r   rU   r   r   r!   )relpathr   re   r&   r'   makestandin  s    z!overridecopy.<locals>.makestandinc                    s   |d u ri }g }|D ]<}t |d u rFtj|v rF||tjd q|| q| ||||||d}	t|	}
fdd  fdd|
jD |
_t|
j|
_	|
j
fdd}||
_
|
S )	Nr)   r   c                    s   t |  v S r   r    r"   r$   r&   r'   r(     r)   z5overridecopy.<locals>.overridematch.<locals>.<lambda>c                    s   g | ]} |rt |qS r&   r    rJ   r-   r&   r'   r/     r)   z7overridecopy.<locals>.overridematch.<locals>.<listcomp>c                    s&   t | }|d ur"|  v r"|p$d S r   r   r#   r.   )r%   r2   r&   r'   r8     s    
z4overridecopy.<locals>.overridematch.<locals>.matchfn)rO   patkindr   r   rY   replacer3   r4   r5   r6   r8   )r   r   r   ri   r   r   r   Znewpatsr   r   r9   r8   r$   r1   r'   overridematch   s     	
	z#overridecopy.<locals>.overridematchc                    sv   t j|v rL|t jrL|t jd}d sLtj|rLtdt	d 
||f | ||g|R i | d S )Nr)   s   forces$   destination largefile already exists)r   r   r   r`   r   r   r   rV   IOErrorr   rY   )r   srcdestr   r   	destlfile)copiedfilesri   re   r&   r'   overridecopyfile/  s    
z&overridecopy.<locals>.overridecopyfiles   copyfiler)   r   rv   )r&   NFr   N)r&   NFr   N)%rs   r%   r   r   r   r	   r   messager   r   OSErrorZ
expandpatsr   r   r   makedirsr\   rO   r   rY   r   r   r]   r   r   r`   r   r!   rU   dirnamerenamer{   r   Zcopyfilerb   rc   release)r   rd   re   r   ri   r   ZnonormalfilesZnolfilesr   r   er   Zfullpatsr   r\   r   Zlistpatsr   r   rl   r   Zsrclfiler   Zdestlfiledirr&   )r   r%   ri   re   r'   overridecopy  s         8

     &T

r  s   revertc              	      s*    
 t|}t|}|  |jD ]}t|t| q2|jD ]&}t|}	j	
|	rRj	|	 qRt}
d	 fdd	}ttd|* | | g|R i | W d    n1 s0    Y  t}t|
|}tj||ddd W d    n1 s0    Y  d S )
Nr&   Fr   c                    s   |d u ri }|  |||||d}t  |}t  j  d}	d  }
g }|jD ]L}t|}|v sr| v r~|| qT||
v sT|	| dkrqTqT|| qT||_t|j|_	|j
 fdd}||_
|S )Nr   FrG   c                    s2   t | }|d ur*|o(|  v p(| v S | S r   r   r   )r   r   r2   r&   r'   r8     s    
z6overriderevert.<locals>.overridematch.<locals>.matchfn)r3   r   r]   re   rd   r4   r!   rY   r5   r6   r8   )r   r   r   ri   r   r   r   r   r9   rl   rj   Z
matchfilesr#   r!   r8   r   re   )r   r2   r'   r   ~  s,    	


z%overriderevert.<locals>.overridematchr   T)printmessagera   )r&   NFr   N)r\   r   r]   Zlfdirstatestatusrc   rx   updatestandinr!   ry   rU   rV   unlinkgetstandinsstater   r   r   getlfilestoupdater   updatelfiles)r   rd   re   r   r   ri   rl   r   r.   fstandinoldstandinsr   newstandinsfilelistr&   r  r'   overriderevertl  s0    



     -8

r  s   pulls   all-largefiless7   download all pulled versions of largefiles (DEPRECATED)s   lfrevs'   download largefiles for these revisionss   REVc                 K   s   t |}|sd}||_| |||fi |}t |}|dg }|drR|d |r||krd}	||_zJt||D ]4}
|td|
  t	
|||
\}}|	t |7 }	qvW |`n|`0 |td|	  |S )Ns   defaultlfrevall_largefiles   pulled()r   s#   pulling largefiles for revision %d
s   %d largefiles cached
)rs   ZlfpullsourcerM   rY   firstpulledr   revrangeZnoter   r   cachelfilesr[   )r   rd   re   sourceri   Zrevsprepullr   ZrevspostpulllfrevsZ	numcachedrevcachedr   r&   r&   r'   overridepull  s(    

r  s   pushs%   upload largefiles for these revisionsc                 O   sD   | dd}|r,|di }t|||d< | ||g|R i |S )z<Override push command and store --lfrev parameters in opargsr  Nopargss   lfrevs)r   
setdefaultr   r  )r   rd   re   r   r   r  r  r&   r&   r'   overridepush  s
    r  s   pushoperationc                 O   s$   | dd}| |i |}||_|S )z=Override pushoperation constructor and store lfrevs parameterr  N)r   r  )r   r   r   r  Zpushopr&   r&   r'   exchangepushoperation  s    r  r  c                    sD   z
| j  W n  ty*   ttdY n0 t fdd|D S )ag  Changesets that just has been pulled.

    Only available with largefiles from pull --lfrev expressions.

    .. container:: verbose

      Some examples:

      - pull largefiles for all new changesets::

          hg pull -lfrev "pulled()"

      - pull largefiles for all new branch heads::

          hg pull -lfrev "head(pulled()) and not closed()"

    s"   pulled() only available in --lfrevc                    s   g | ]}| kr|qS r&   r&   )r+   r   r  r&   r'   r/     r)   z&pulledrevsetsymbol.<locals>.<listcomp>)r  AttributeErrorr	   r   r   r   Zbaseset)re   ZsubsetrC   r&   r  r'   pulledrevsetsymbol  s
    
r!  s   clones'   download all versions of all largefilesc                 K   sP   |}|d u rt |}|dr<t |s<ttd| | |||fi |S )Nr  s>   --all-largefiles is incompatible with non-local destination %s)r   ZdefaultdestrM   Zislocalr	   r   r   )r   rd   r  r   ri   dr&   r&   r'   overrideclone  s    
r#  c                 O   sb   | ||g|R i |}|d ur^|\}}|  }|s8|S |dr^t||\}	}
|
dkr^d S |S )Ns   all_largefilesr   )ZlocalrM   r   Zdownloadlfiles)r   rd   ri   r   r   r   Z
sourcerepoZdestrepore   successr   r&   r&   r'   hgclone7  s    
r%     rebase)	extensionc                 K   s   t |ds| ||fi |S |d}|jt| |jdd  zp|ddid8 | ||fi |W  d    W |j	  |j	  S 1 s0    Y  W |j	  |j	  n|j	  |j	  0 d S )N   _largefilesenabledcontinuec                  _   s   d S r   r&   rt   ri   r&   r&   r'   r(   X  r)   z#overriderebasecmd.<locals>.<lambda>)r&  s   experimental.inmemoryF
   largefiles)
r   safehasattrrM   _lfcommithooksrY   r   automatedcommithook_lfstatuswritersZconfigoverrider   )r   rd   re   ri   resumingr&   r&   r'   overriderebasecmdQ  s"    
 



r1  c                 C   s<   zt d}W n ty    Y n0 dd }t |d| d S )Nr&  c                 _   s   d|d< | |i |S )NFZinmemoryr&   r   r   r   r&   r&   r'   	_dorebasek  s    z!overriderebase.<locals>._dorebases	   _dorebase)r   findKeyErrorwrapfunction)rd   Zrebaser3  r&   r&   r'   overriderebasec  s    r7  s   archivec                 K   sH   t | ( | || |fi |W  d    S 1 s:0    Y  d S r   )rw   
unfiltered)r   rd   re   r   ri   r&   r&   r'   overridearchivecmdr  s    r9  c                 C   s6   t |j | |W  d    S 1 s(0    Y  d S r   )rw   re   )r   Zwebr&   r&   r'   hgwebarchivex  s    r:  Tc
              
      s  j s( j s(| |||||		S |d ur@tj| |tjvr\tt	d| | |dkrrtt	dnt
|| fdd}
tj| ||p d  jddr|
d	d
dfdd D ]}|}| j}t|}|d ur`|d urLt|  d u rPtt	d| n||}fdd}|
|d|v rtdpvd
d|v | q|	rtjD ]z}|}t|}| d }t|drt |jpt  | || W d    n1 s0    Y  q   d S )Ns   unknown archive type '%s's   filess*   cannot give prefix when archiving to filesc                    s>   r| sd S | }r& | |} |  ||| d S r   )
wwritedatar   namemodeislinkgetdatar   )archiverdecoder   r   re   r&   r'   rc     s    zoverridearchive.<locals>.writer   s   uis   archivemetas   .hg_archival.txt  Fc                      s
   t  S r   )r   Zbuildmetadatar&   r   r&   r'   r(     r)   z!overridearchive.<locals>.<lambda>4   largefile %s not found in repo store or system cachec                      s
   t  S r   )r   readfiler&   )r   r&   r'   r(     r)      x     lr   r   )rw   r8  r   r  rd   r   Z	archiversr	   r   r   Z
tidyprefixdateZ
configboolr   r   r   rI   findfilestriprz   substate
workingsubrO   subdirmatcherr   r,  r   nullcontextmanagerarchiveZdone)r   re   r   nodekindrB  r   r   mtimer   rc   r#   ffr@  r.   subpathsubsubmatch	subprefixr&   )rA  r   rB  r   r   r   re   r'   overridearchive~  sj    







$
2rY  c              	      s  t jd}|rjjs*|  S jd  jd }j| }| d urptj	j|   fdd}	|D ]|
}
| j}t}|d ur| d urtj|  d u rttd| n||fdd}|	d	|
v rd
pdd|
v | qt|jD ]|}||}t|}| d }t |drvt|jp|t    | || W d    n1 s0    Y  q6d S )Nr(  )s   hgr   c                    s@   rsd S | }r(j | |} |  ||| d S r   )r   r;  r   r<  )rA  rB  r#   r   r   re   r&   r'   rc     s    zhgsubrepoarchive.<locals>.writerD  c                      s   t tj S r   )r   rE  r   r   r   r&   )r   r   r&   r'   r(     r)   z"hgsubrepoarchive.<locals>.<lambda>rF  rG  rC  rH  r   r   )r   r,  r   rw   Z_getZ_staterQ  r   r  rd   r   r   r   rI   rJ  rK  r	   r   r   rz   rL  rM  rO   rN  rO  rP  )r   re   rA  r   r   rB  Z	lfenabledr  r   rc   rT  r@  r.   rU  rV  rW  rX  r&   )rA  rB  r#   r   r   r   re   r'   hgsubrepoarchive  sL    





$
rZ  s   bailifchangedc                 O   sp   | |g|R i | t | | }W d    n1 s<0    Y  |js^|js^|js^|jrlttdd S )Ns   uncommitted changes)	rw   r[   rx   rm   removedry   r	   r   r   )r   re   r   r   r   r&   r&   r'   overridebailifchanged#  s
    
&r\  s   postcommitstatusc                 O   sB   t |& | |g|R i |W  d    S 1 s40    Y  d S r   r   )r   re   r   r   r&   r&   r'   postcommitstatus,  s    
r]  s   forgetc	              	      s  t ||d   }	| |||	|||||\}
}t||d    t| |j dd}W d    n1 sj0    Y  |d   t|j|j |j |j	 }fdd|D }|D ]D}t
|}||jvr|j|s|td||  |
| q|D ],}|js |s|td||  q|  t
||}|D ]*}|| dkrb|| n
|| qD|  dd |D }|D ]}|jj|dd	 q|d  |W d    n1 s0    Y  |
 fd
dD  |fdd|D  |
|fS )NTrp   c                    s   g | ]}t | v r|qS r&   r    rJ   r$   r&   r'   r/   G  r)   z!cmdutilforget.<locals>.<listcomp>s+   not removing %s: file is already untracked
ru   r   c                 S   s   g | ]}t |qS r&   r    rJ   r&   r&   r'   r/   _  r)   rv   c                 3   s   | ]}|   v r|V  qd S r   )rH   rJ   rK   r&   r'   r   d  r)   z cmdutilforget.<locals>.<genexpr>c                 3   s   | ]}| vr|V  qd S r   r&   rJ   )rejectedr&   r'   r   e  r)   )r@   r%   r:   rw   r[   rz   rx   rm   ry   rq   r   r!   r   rU   r   rT   r   rY   rZ   rS   r\   r]   dropr   rc   r{   r|   r   )r   rd   re   r   r   rh   r   r~   interactiver   rL   Zforgotr   r|   r#   r  rl   rk   r&   )r9   r%   r^  r'   cmdutilforget2  sR    

,

.ra  c                    sb   t   t   fdd}t| || r^t| |} D ]\}}|| sB||| qBdS )zget pairs of filename and largefile hash in outgoing revisions
    in 'missing'.

    largefiles already existing on 'other' repository are ignored.

    'addfunc' is invoked with each unique pairs of filename and
    largefile hash value.
    c                    s(   | |f}| vr$  |  | d S r   rb   )fnlfhashr   Zknownslfhashesr&   r'   dedupu  s    
z_getoutgoings.<locals>.dedupN)r5   r   Zgetlfilestouploadr   	openstorerV   )re   otherr   addfuncrg  Zlfexistsrc  rd  r&   re  r'   _getoutgoingsi  s    	rk  c                    s   | dd rt  jr:i  fdd}fdd}nt  fdd}dd }t|||| sxtd nJtd	t   tD ] }t	|d
  || qd
 d S )Nr   c                    s,   | vrg | < |   |  | d S r   )rY   rb   rc  rd  rf  touploadr&   r'   rj    s    zoutgoinghook.<locals>.addfuncc                    s$   t  |  D ]}d|  qd S )Ns       %s
)rz   r   rl  )rn  rd   r&   r'   
showhashes  s    z outgoinghook.<locals>.showhashesc                    s    |    | d S r   rb  rl  rm  r&   r'   rj    s    
c                 S   s   d S r   r&   )rc  r&   r&   r'   ro    s    s   largefiles: no files to upload
s$   largefiles to upload (%d entities):
   
)
r   r5   Z	debugflagrk  r[   r   rs   rz   r   rI   )rd   re   ri  ri   r   rj  ro  filer&   )rf  rn  rd   r'   outgoinghook  s&    
rr  s   outgoings   display outgoing largefilesc                 O   s   | |i |S r   r&   r2  r&   r&   r'   _outgoingcmd  s    rs  c           
         s   | dd}|d u r"|rdS dS n|r|d \}}}}|d u rP| td d S t t   fdd}	t|||j|	 s| td	 n| td
t tf  d S )Nr   F)FT)FFr   s   largefiles: (no remote repo)
c                    s    |    | d S r   rb  rl  rm  r&   r'   rj    s    
z"summaryremotehook.<locals>.addfuncs!   largefiles: (no files to upload)
s/   largefiles: %d entities for %d files to upload
)rM   r[   r   r5   rk  r   rs   )
rd   re   ri   ZchangesZlargeoptr   branchZpeerZoutgoingrj  r&   rm  r'   summaryremotehook  s*    ru  s   summaryc                 O   sD   t |( | ||g|R i | W d    n1 s60    Y  d S r   r   r   r&   r&   r'   overridesummary  s    
rv  s	   addremovec              	      s   |d u ri }t |s&| |||||S t |j|}|jt g dddd\}jrt|}|j	  fdd|_	t
|j|d|||dfi t| t|j|d||fi t|\}	}
t||d   |	}| |||||S )NFr   ignoredrq   unknownc                    s   | j v o | S r   )ry   r"   r8   r   r&   r'   r(     r)   z"scmutiladdremove.<locals>.<lambda>Ts   dry_run)r   rN   r]   rd   r[   rO   r7   ry   r3   r8   r   rM   r   Z	strkwargsrn   r@   r%   )r   re   rg   r   rh   ri   rl   unsurer9   rm   rL   r&   rz  r'   scmutiladdremove  sB    



r|  s   purgec                    sH     j d fdd	}|_| g|R i |  _d S )Nr   Fc              	      sh   | ||||||}t   fdd|jD } fdd|jD }t|j|j|j|j	|||j
S )Nc                    s   g | ]} | d kr|qS    ?r&   rJ   rl   r&   r'   r/   .  r)   z9overridepurge.<locals>.overridestatus.<locals>.<listcomp>c                    s   g | ]} | d kr|qS r}  r&   rJ   r  r&   r'   r/   /  r)   )r   r]   ry  rx  r   r[   rx   rm   r[  ry   rq   )Znode1Znode2r   rx  rq   ry  Zlistsubreposr   Z	oldstatusre   rd   r  r'   r   !  s    	z%overridepurge.<locals>.overridestatus)r   NNFFFF)r8  r[   )r   rd   re   dirsri   r   r&   r  r'   overridepurge  s           r  s   rollbackc                    s     `  j } fdd jD }| | fi |} j }||kr`|W  d    S  d } jD ]p}	t|	rn||	  j|	 dkr jj|	dd qn|	|v r||	 }
 |	|
	 |

  qnt |	dd qn|D ]} jj|dd qt| }t|}t }|D ] }t ||d || q|D ]}|| qB|  W d    n1 sr0    Y  |S )	Nc                    s(   h | ] }t |r j| d kr|qS )rG   )r   r<   r   rJ   r   r&   r'   	<setcomp>=  s   z#overriderollback.<locals>.<setcomp>r   rG   Trv   r)   F)r\   r   parentsr   r<   discardrU   r{   r   r   r   r^   r]   r5   Z
listlfilesr}   r_  rc   )r   rd   re   ri   ZbeforeZorphansr   ro   pctxr#   Zfctxr!   rl   r   rq  r.   r&   r   r'   overriderollback9  s>    






(r  s
   transplantc                 O   sx   | d}|jt| |jdd  z0| ||g|R i |}W |j  |j  n|j  |j  0 |S )Nr)  c                  _   s   d S r   r&   r*  r&   r&   r'   r(   g  r)   z$overridetransplant.<locals>.<lambda>)rM   r-  rY   r   r.  r/  r   )r   rd   re   Zrevsri   r0  r   r&   r&   r'   overridetransplantc  s    


r  s   catc              
      s  t |}t||d}d}t  t||f| |}|j fdd}	|	|_|j fdd}
|
|_|j	fdd}||_	|
|D ]<}tj||d	|d

}t|}|d u sʈ|r||  }|dr|||}|| nt|| }t|j|sTt|}|||fg\}}t|dkrTttd| t|j|}t|d,}t|D ]}|| qxW d    n1 s0    Y  W d    n1 s0    Y  d}q|S )Ns   revr   c                    s4   | rdS t | }|d u r"dS  | |S NTF)r   rI   rb   )r#   r,   )notbadr2   r&   r'   r   y  s    

zoverridecat.<locals>.lfmatchfnc                    s   |  vr| | d S r   r&   )r#   rt   )r  	origbadfnr&   r'   lfbadfn  s    zoverridecat.<locals>.lfbadfnc                    s<   | t jkrdS  | }|r|S t | }|d u r4dS  |S r  )r   r   rI   )dirZretr,   )origvisitdirfnr&   r'   lfvisitdirfn  s    

z!overridecat.<locals>.lfvisitdirfns   output)pathnames   decodes8   largefile %s is not in cache and could not be downloadeds   rbr   )r   Zbyteskwargsr   Z	revsinglerM   r5   r   r8   rL   ZvisitdirrR   r   Zmakefileobjr   rI   r   r;  rc   r   Zinusercacherd   r   rh  rs   r	   r   r   Zusercachepathr   r   Zfilechunkiter)r   rd   re   Zfile1r   ri   r   errr9   r   r  r  r#   fpr,   r   rE   Zstorer$  r   r   Zfpinchunkr&   )r  r  r2   r  r'   overridecatp  sP    
	


Nr  s   _updatec              
   O   s  | dd }|o|  }|  t|j|}	|	jt g dddd\}
}t|j	}|d }|| }|
|j
 D ]l}|j|}|j|sqtt|}t|}t|||t| ||v rt|t|| krt|| qt|jD ](}t|}||vrqt||| q|D ]}|	| q|	  t|}| d}|r^| r^td| ||||g|R i |}t|}t||}||D ]}|	| q|	  |s|s|r||j |j!  t"j#|j|||d |W  d    S 1 s0    Y  d S )	Nrg   FTrw  r   wcs1   largefiles is not compatible with in-memory merge)r  ra   )$rM   r7   r\   r   r]   rd   r[   rO   r5   rq   rx   rU   r   rV   Zhashfiler!   r^   r_   r   rb   rm   r  ra   rc   r  Z
isinmemoryr	   ProgrammingErrorr	  
differencer   r   ry   r[  r   r
  )r   re   rQ  r   r   r   r   rg   partialrl   r{  r   Zoldcleanr  Zdctxr.   Zlfileabsrd  r!   r  r  r  r   r  r  r&   r&   r'   mergeupdate  sj    










r  s   marktouchedc           	      O   s`   | ||g|R i |}g }|D ] }t |}|d ur || q |r\tj|j||ddd |S )NFT)r  r  ra   )r   rI   rY   r   r
  rd   )	r   re   rH   r   r   r   r  r#   r,   r&   r&   r'   scmutilmarktouched  s    
r  s   preservedrequirementss   supporteddestrequirementsc                 C   s    | |}d|j v r|d |S )Nr+  )Zrequirementsrb   )r   re   Zreqsr&   r&   r'   upgraderequirements$  s    

r  s   largefile://s   openc                 C   sJ   | tr8|rd}t||ttd  }t||S | |||dS d S )Ns'   cannot use data on a 'largefile://' url)r   )r   	_lfschemer	   r  rs   r   Zgetlfile)r   rd   Zurl_r   rt   Zlfidr&   r&   r'   openlargefile0  s    

r  )N)FF)N)N)N)F)N)N)TNr)   NN)NT)N)N)d__doc__Z
__future__r   r3   r   Zmercurial.i18nr   Zmercurial.pycompatr   Zmercurial.hgwebr   Z	mercurialr   r   r   Z	copiesmodr	   r
   r   r   r   r   r   r   rO   r   r   Zmergestatemodr   r   r   r   r   r   r   Zurlmodr    r   r   r   Zehrw   r   r:   r@   rn   r   r6  r   Zwrapcommandr   r   r   Z	hgsubrepor   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  Zrevsetpredicater!  r#  r%  r1  Zextsetupr7  r9  r:  rY  rZ  r\  r]  ra  rk  rr  rs  ru  rv  r|  r  r  r  r  r  r  r  r  r  r&   r&   r&   r'   <module>	   sj  \
KL









x


 

]


 !

 ,

O
	










     `C





6(
"

4
%
)

G

V




