
    q&fI                     ^    d Z ddlZddlmZ ddlmZmZmZmZ	m
Z
mZ ddlmZ ddlmZmZ d Zy)	z,setup for largefiles repositories: reposetup    N)_)error
extensions	localrepomatchscmutilutil)	timestamp   )
lfcommandslfutilc                 T    j                         sy  G  fddj                        _        t        j                  g_         j
                  g_         fd}j                  j                  d|       d } j                  dd|d        j                  dd|d       y )	Nc                        e Zd ZdZdZ fdZej                  	 	 	 	 	 	 	 d fd	       Z fdZ		 	 	 	 	 	 	 d	 fd	Z
d Z xZS )
reposetup.<locals>.lfilesrepoTFc                     t         |   |      }| j                  rOd }t        j                  |d|       d }t        j                  |d|       dd}t        j                  |d|       |S )Nc                 h     |        }|D cg c]  }t        j                  |      xs | c}S c c}w N)r   splitstandin)orig	filenamesfs      </usr/lib/python3/dist-packages/hgext/largefiles/reposetup.pyfilesz8reposetup.<locals>.lfilesrepo.__getitem__.<locals>.files4   s0     $IAJKAF//27a7KKKs    /r   c                 R     |        } G fdd|j                         |_         |S )Nc                   "     e Zd Z fdZ xZS )Sreposetup.<locals>.lfilesrepo.__getitem__.<locals>.manifest.<locals>.lfilesmanifestc                 b    t         |   } ||      xs  |t        j                  |            S r   )super__contains__r   standin)selffilenamer   	__class__lfilesmanifests      r   r   z`reposetup.<locals>.lfilesrepo.__getitem__.<locals>.manifest.<locals>.lfilesmanifest.__contains__>   s3    #(#KD#'> $T &x 86     )__name__
__module____qualname__r   __classcell__)r#   r$   s   @r   r$   r   =   s     r%   r$   )r#   )r   man1r$   s     @r   manifestz;reposetup.<locals>.lfilesrepo.__getitem__.<locals>.manifest:   s(    6D  &4DNKr%   r+   c                    	 | | |||      }|S  | ||      }	 |S # t         j                  $ rV | | t        j                  |      ||      }n | t        j                  |      |      }|j                  fd|_        Y |S w xY w)Nc                               dz   S )N     )olddatas   r   <lambda>zLreposetup.<locals>.lfilesrepo.__getitem__.<locals>.filectx.<locals>.<lambda>W   s    gi%.? r%   )r   LookupErrorr   r    data)r   pathfileidfilelogresultr0   s        @r   filectxz:reposetup.<locals>.lfilesrepo.__getitem__.<locals>.filectxI   s    @".%)$%@F "M &*$%7F "M !,, @ #.%)&..*>%PF%)&..*>%GF"(++&?!M@s    	 A%BBr8   )NN)r   __getitem__lfstatusr   wrapfunction)r!   changeidctxr   r+   r8   r#   
lfilesrepos         r   r9   z)reposetup.<locals>.lfilesrepo.__getitem__0   sl    
D5h?C}}L ''We<  ''ZB"" ''Y@Jr%   c                    0 |||}
}	}t         2   } j                  s ||||||	|
|      S d _         |   } |   }|j                         d u 00xr | d   k(  }|t	        j
                         }	  j                  d      }d}|5   j                  j                         5  t        j                  4       }|j                         s1|D ]  } ||      s n!  ||||||	|
|      cd d d        cd d d        S  0fd}t        j                  |      } ||j                         |_         ||||||||      }0r fd}|j                   D cg c]  } ||      s| c}|_        |j                  |g d|	d      \  }}}|j"                  |j$                  |j&                  |j(                  |j*                  f\  }}}}}|r3d    }|D ]  }t        j,                  |      } | |vr|j/                  |       .t        j0                  ||          t        j2                   j5                  |            k7  r|j/                  |       }|	r|j/                  |       ||   j7                         }|j8                  }!|j:                  }"t=        j>                  ||      }#|#|!|"|#f}$|jA                  ||$        n||z   |z   |z   }%g g g }}} j                  jB                  }&|%D ]  }t        j,                  |      } | |v r j5                  |      }'t        j0                  ||          t        j2                  |'      k7  s4|&rDd|jE                  |       v tG        t        jH                  |'            k7  r|j/                  |       |	s|j/                  |       |j/                  |        |D cg c]  }t        j,                  |      |v r| }}|jK                  t        jL                               D ]S  } t        jN                  |       } ||      s!||vs&|j/                  |        jP                  jS                  | d       U tU        |      }|D cg c]  }| j                  vs| }}|d	   D cg c]	  }||vs| c}|d	<   tW        |      }(tW        |d
         jY                  |(      |d
<   tW        |d         jY                  |(      |d<   |D )*cg c](  })|)D *cg c]  }*t        jZ                  |*      r|* c}** }+})}*||||g g |f},t]        |+|,      D -.cg c]  \  }-}.t_        |-|.z          }}-}.n6|D /cg c])  }/|/D cg c]  }t        jN                  |      xs | c}+ }}/}|r |ja                   jc                                n|je                          d d d        d d d        d _        tg        j                   S # t        j                  $ r t        j                         }d}Y ~w xY wc c}w c c}w c c}w c c}w c c}*w c c}*})w c c}.}-w c c}w c c}}/w # 1 sw Y   xY w# 1 sw Y   xY w)NF   .Tc                     s| S g }j                   }| D ]c  }t        j                  |      }||v r|j                  |       .|j	                  |      r|j                  ||f       S|j                  |       e |S r   )dirstater   r    appendhasdirextend)r   newfilesrB   r   sfr!   workings        r   
tostandinsz8reposetup.<locals>.lfilesrepo.status.<locals>.tostandins   sz    "$!H#}}H" 	/#^^A.>$OOB/%__R0 %OOQG4$OOA.	/ $Or%   c                 t    t        j                  |       }j                  }||v xs |j                  |      S r   )r   r    rB   rD   )r   rG   rB   r!   s      r   sfindirstatez:reposetup.<locals>.lfilesrepo.status.<locals>.sfindirstate   s2    #^^A.#'==!X~D1DDr%   )subreposignoredcleanunknown   x)ignoremissing         )4r   statusr:   revmatchmodalwayswlockr   	LockErrorr	   nullcontextmanagerrB   running_statusr   openlfdirstatecopy_filesmodifiedaddedremoveddeletedrN   r    rC   readasstandinhashfilewjoinlstatst_modest_sizer
   reliable_mtime_of	set_clean
_checkexecflagsboolgetexecutablewalkgetstandinmatcherr   wvfs
unlinkpathlistset
difference	isstandinzipsortedwritecurrenttransaction
invalidater   )5r!   node1node2r   rM   rN   rO   listsubreposlistignored	listcleanlistunknownr   ctx1ctx2parentworkingrY   gotlock
lfdirstater   rI   mr7   rK   unsuresmtime_boundaryr`   ra   rb   rc   wctxlfiler    modesizemtime
cache_datatocheck	checkexecabslfilelfilesfilelistfnnormalsr:   list1list2itemsrH   r#   r>   repouis5   `                                               @r   rU   z$reposetup.<locals>.lfilesrepo.statusd   s    3:5'KKT1D==   "DM;D;DhhjD(G#:T
(:M} )  

5)  w,44T: w, $222t<
||~'  8!  $!!!'%'( w, w, w,0$" IIe$%ahh/5!WeWl E
 05||#O!|AA#OEL 1;0A0A!# %' % 1B 1-FA~ 

				B>Xugw %#Dz%+ LE&,nnU&;G&d2 ( 6!'!5!5 $W"!'E1B!C"D !) 6#,$)LL$7$(K$5$5$7'(yy'(yy(1(C(C$%~)" $)#426e1DJ$.$8$8
$K)L, #)8"3e";e"C13R%$(MM$<$<	%, 4E&,nnU&;G&$+/::e+<$*$8$8g$G'-x'@%A %.)-G1D)D'+F,@,@,J'K)L %-OOE$:%.$)LL$7 %U 3!40 *1# %%~~e4< "# # $(99V-E-Ed-K#L 
N & 3 3G <$U|$ 
2#NN51
 !II000M
N "&\F +2LQQdmm5KqLGL,21I Mq*9L MF1I _F #F1I 9 9& AF1I #F1I 9 9& AF1I )/$ '/Kf6F6Fr6JKG 
 ! H /2'8.D*UE uu}-F  &,! ?DD,,Q/414DF 
 $$T%<%<%>?))+ow, w,r !DM>>6**{ ??  //1 r $PF#6 M M L E_w, w, w, w,s  4W 	Y%4X9X9*	Y=AX9X	!X	%D=X9#C'X9)X94 XAX9 ?X9X3X7	X9 	X
XAX9$	X"
-XXX"
X9,X(
	X9	X3
 X.6X3
;5X90Y)XX	X9X"
"X9.X3
3X99Y	>YYc                 l    t        |   |g|i |} G fdd|j                        |_        |S )Nc                   "     e Zd Z fdZ xZS ):reposetup.<locals>.lfilesrepo.commitctx.<locals>.lfilesctxc                 F    t         |   }t        j                  || |      S r   )r   markcommittedr   )r!   noder   r#   	lfilesctxs      r   r   zHreposetup.<locals>.lfilesrepo.commitctx.<locals>.lfilesctx.markcommittedN  s$     D?D!//dDAAr%   )r&   r'   r(   r   r)   )r#   r   s   @r   r   r   M  s    B Br%   r   )r   	commitctxr#   )r!   r=   argskwargsr   r   r#   r>   s        @r   r   z'reposetup.<locals>.lfilesrepo.commitctxJ  s>    T4SJ4J6JDBCMM B
 &CMKr%   c           
          |i }t         |   }| j                         5  | j                  d   }	 |	| |      } ||||||||      }
|
cd d d        S # 1 sw Y   y xY w)N)textuserdater   forceeditorextra)r   commitrY   _lfcommithooks)r!   r   r   r   r   r   r   r   r   lfcommithookr7   r#   r>   s              r   r   z$reposetup.<locals>.lfilesrepo.commitX  sy     }T1D #2226$T51!   s   )AAc                    g }g }g }|D ]{  }t        j                  |dz         r#t        j                  t	        d      |z  d      | j
                  j                  |      r|j                  |       k|j                  |       } |D ]  }d}| j                  j                  |      dz   }|D ]A  }	| j                  j                  |	      j                  |      s.|j                  |       d} n |sY|D ]T  }
| j                  j                  |
      j                  |      s.|j                  |
       |rB|j                  d       d}V |r|j                  |        ||z  }|S )a  
            Adjust matched file list
            If we pass a directory to commit whose only committable files
            are largefiles, the core commit code aborts before finding
            the largefiles.
            So we do the following:
            For directories that only have largefiles as matches,
            we explicitly add the largefiles to the match list and remove
            the directory.
            In other cases, we leave the match list unmodified.
               /s    file "%s" is a largefile standins#   commit the largefile itself instead)hintFTr@   )r   rw   r   Abortr   rr   isdirrC   rB   	normalize
startswith)r!   r   r   actualfilesdirsregularsr   
matcheddirdmflfs              r   
_subdirlfsz(reposetup.<locals>.lfilesrepo._subdirlfsv  sn    KDH 
'##AH-++=>BC 
 99??1%KKNOOA&
'  *"
MM++A.5" B}}..r2==a@#**1-%)
	
 " % 
2==2226AA!D'..r2#- !, 2 24 8-1

2 "&&q)5*: 8#Kr%   )r@   NNFFFF)r%   NNNFFN)r&   r'   r(   _largefilesenabledr:   r9   r   unfilteredmethodrU   r   r   r   r)   )r#   r>   r   r   s   @r   r>   r   &   sn    !,	h 
	#	# c	+ 
$c	+J		  	<:	r%   r>   c                    | j                   }|| j                  j                  }|r]t               fd}t	        j
                  | j                  ||       t        j                  | j                  | j                         yy)z4Push largefiles for pushop before pushing revisions.Nc                 &    j                  |      S r   )add)r   lfhashtouploads     r   r1   z8reposetup.<locals>.prepushoutgoinghook.<locals>.<lambda>  s    f)= r%   )
lfrevsoutgoingmissingru   r   getlfilestouploadr   r   uploadlfilesremote)pushopr   addfuncr   r   s      @r   prepushoutgoinghookz&reposetup.<locals>.prepushoutgoinghook  sf    >__,,FuH=G$$V[[&'B##BV]]HM	 r%   
   largefilesc                 v   |j                         5  d|j                  v r
	 d d d        y t        j                  }|j                  j                         D ]O  }|j                  s||j                  v s|j                  j                  d       t        j                  |        n d d d        y # 1 sw Y   y xY w)Nr   )lockrequirementsr   shortnameslashstoredata_entries	is_revlog	target_idr   r   writereporequirements)r   r   r   markerentrys        r   checkrequireslfilesz&reposetup.<locals>.checkrequireslfiles  s    YY[ 
	 1 11
	 
	 **F002  ??v'@%%))-811$7	
	 
	 
	s   B/9B/$B/33B//B8s   hookss   changegroup.lfiless   commit.lfiles)
localr#   r   updatestandinsbymatchr   rU   _lfstatuswritersprepushoutgoinghooksr   	setconfig)r   r   r   r   r>   s   ``  @r   	reposetupr       s     ::<J JT^^ JX  DN "778D
  YYKD	N 	!!-1DE LL')<m LL+-@-Pr%   )__doc__r^   mercurial.i18nr   	mercurialr   r   r   r   rW   r   r	   mercurial.dirstateutilsr
    r   r   r   r/   r%   r   <module>r      s+    3    .zQr%   