ó
œçƒQc           @   s­   d  Z  d d l Z d d l 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 d d l m Z d d l Z d d l Z d d l Z d „  Z d S(   s,   setup for largefiles repositories: reposetupiÿÿÿÿN(   t   contextt   errort   manifestt   matcht   utilt	   discovery(   t   node(   t   _(   t	   localrepoc            s   ˆ j  ƒ  r  t j ˆ ˆ ƒ Sn  d ˆ j f ‡  ‡ ‡ f d †  ƒ  Y‰  ˆ  ˆ _ d „  } ˆ j d d | ƒ ˆ j d d | ƒ d  S(   Nt
   lfilesrepoc        
      s¹   e  Z e Z ‡  f d  †  Z ‡  f d †  Z e j d d	 d	 e e e e ‡  ‡ f d † ƒ Z	 ‡  f d †  Z
 d d	 d	 d	 e e i  ‡  ‡ f d † Z e d	 e ‡  ‡ ‡ f d † Z d „  Z RS(
   c            s   t  ˆ  |  ƒ j | | Ž  S(   N(   t   supert   status(   t   selft   argst   kwargs(   R	   (    s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyt   status_nolfiles   s    c            sr   t  ˆ |  ƒ j | ƒ } |  j rn d t j f ‡ f d †  ƒ  Y‰ d | j f ‡  ‡ f d †  ƒ  Y‰  ˆ  | _ n  | S(   Nt   lfilesmanifestdictc              s   e  Z ‡  f d  †  Z RS(   c            s;   t  ˆ  |  ƒ j | ƒ r t St  ˆ  |  ƒ j t j | ƒ ƒ S(   N(   R
   t   __contains__t   Truet   lfutilt   standin(   R   t   filename(   R   (    s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyR   *   s
    (   t   __name__t
   __module__R   (    (   R   (    s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyR   )   s   t	   lfilesctxc              s>   e  Z ‡  f d  †  Z ‡  ‡ f d †  Z d d ‡  f d † Z RS(   c            s;   t  ˆ  |  ƒ j ƒ  } g  | D] } t j | ƒ p4 | ^ q S(   N(   R
   t   filesR   t   splitstandin(   R   t	   filenamest   f(   R   (    s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyR   1   s    c            s"   t  ˆ  |  ƒ j ƒ  } ˆ | _ | S(   N(   R
   R   t	   __class__(   R   t   man1(   R   R   (    s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyR   4   s    	c            sÜ   yL | d  k	 r0 t ˆ |  ƒ j | | | ƒ } n t ˆ |  ƒ j | | ƒ } Wn‰ t j k
 r× | d  k	 r• t ˆ |  ƒ j t j | ƒ | | ƒ } n$ t ˆ |  ƒ j t j | ƒ | ƒ } | j ‰  ‡  f d †  | _ n X| S(   Nc              s   ˆ  ƒ  d S(   Nt    (    (    (   t   olddata(    s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyt   <lambda>J   s    (   t   NoneR
   t   filectxR   t   LookupErrorR   R   t   data(   R   t   patht   fileidt   filelogt   result(   R   (   R    s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyR#   8   s    	N(   R   R   R   R   R"   R#   (    (   R   R   (    s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyR   0   s   (   R
   t   __getitem__t   lfstatusR   t   manifestdictR   (   R   t   changeidt   ctx(   R	   (   R   R   s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyR*   &   s    	"t   .c   )   
      s  | | | } }	 }
 ˆ  j  sE t ˆ ˆ  ƒ j | | | | |	 |
 | ƒ St ˆ  _  t | t j ƒ ri | } n
 ˆ  | } t | t j ƒ rŽ | } n
 ˆ  | } | j ƒ  d  k ‰ ˆ o½ | ˆ  d k } d „  } | d  k ró t	 j
 ˆ  j ˆ  j ƒ  ƒ } n  d  } z´y ˆ  j t ƒ } Wn t j k
 r%n Xt j ˆ ˆ  ƒ } | j ƒ  r| j ƒ  rxI | D] } | | ƒ rXPqXqXWt ˆ ˆ  ƒ j | | | | |	 |
 | ƒ Sn  ‡  ‡ f d †  } t j | ƒ } | | j ƒ | _ t ˆ ˆ  ƒ j | | | | | | | ƒ } ˆ r^‡  f d †  } g  | j D] } | | ƒ r| ^ q| _ | j | g  t |	 t ƒ } | \ } } } } } } } } | rxD| D]‰ } t j | ƒ } | | k r±| j | ƒ q€| | j ƒ  j ƒ  t j ˆ  j | ƒ ƒ k rï| j | ƒ q€| j | ƒ | j | ƒ q€Wn° | | | | }  g  g  g  } } } x‡ |  D] } t j | ƒ } | | | ƒ r¯| | j ƒ  j ƒ  t j ˆ  j | ƒ ƒ k rŸ| j | ƒ q¼| j | ƒ q=| j | ƒ q=Wxf | j ƒ  D]X } t j | ƒ sèqÍn  t j | ƒ } | | ƒ s	qÍn  | | k rÍ| j | ƒ qÍqÍWt  | ƒ } g  | D] } | ˆ  j! k r<| ^ q<} g  | d D] } | | k rh| ^ qh| d <t" | j# ƒ }! t" | d ƒ j$ |! ƒ | d <t" | d ƒ j$ |! ƒ | d <g  | D]. }" g  |" D] }# t j |# ƒ sç|# ^ qç^ qÚ}$ | | | | g  g  | f }! g  t% |$ |! ƒ D] \ }% }& t& |% |& ƒ ^ q9} n; d „  }' g  | D]% }( g  |( D] } |' | ƒ ^ q{^ qn} | r¬| j' ƒ  n  Wd  | rÃ| j( ƒ  n  X|
 s×g  | d <n  | sêg  | d <n  |	 sýg  | d	 <n  t) ˆ  _  | Sd  S(
   NR/   c         S   sK   y2 | j  ƒ  d  k r% |  | j ƒ  k S| |  t SWn t k
 rF t SXd  S(   N(   t   revR"   R   R   t   KeyErrort   False(   t   fileR.   (    (    s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyt   inctxj   s    c            sŽ   ˆ s
 |  Sg  } ˆ  j  } xn |  D]f } t j | ƒ } | | k rQ | j | ƒ q  | | j ƒ  k ry | j | | f ƒ q  | j | ƒ q  W| S(   N(   t   dirstateR   R   t   appendt   dirst   extend(   R   t   newfilesR5   R   t   sf(   R   t   working(    s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyt
   tostandins   s    	c            s4   t  j |  ƒ } ˆ  j } | | k p3 | | j ƒ  k S(   N(   R   R   R5   R7   (   R   R:   R5   (   R   (    s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyt   sfindirstate§   s    	i   i   i   c         S   s    t  j |  ƒ r t  j |  ƒ S|  S(   N(   R   t	   isstandinR   (   R   (    (    s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyt   tonameõ   s    i   (*   R+   R
   R   R2   t
   isinstanceR    t	   changectxR0   R"   t   match_t   alwayst   roott   getcwdt   wlockR   t	   LockErrorR   t   openlfdirstateR   t   anypatst   copyt   _filesR   R6   R%   t   stript   hashfilet   wjoint   normalR   R>   R   t   listR5   t   sett   _mapt
   differencet   zipt   sortedt   writet   releaseR   ()   R   t   node1t   node2R   t   ignoredt   cleant   unknownt   listsubrepost   listignoredt	   listcleant   listunknownt   ctx1t   ctx2t   parentworkingR4   RF   t
   lfdirstateR   R<   t   mR)   R=   t   st   unsuret   modifiedt   addedt   removedt   missingt   _unknownt   _ignoredt   lfileR   t   tocheckt   lfilest   filelistt   fnt   normalst   list1t   list2R?   t   items(   R	   t   ui(   R   R;   s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyR   U   sÆ    			
	
			8	2	/	c            s/   t  ˆ  |  ƒ j | | Ž  } t j |  | ƒ | S(   N(   R
   t	   commitctxR   t   copyalltostore(   R   R   R   R   (   R	   (    s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyRx     s    t    c            s¯  t  ˆ |  ƒ j } |  j ƒ  }	 zt |  d t ƒ sE t |  d t ƒ r› t j |  j |  d d  d t ƒ| d | d | d | d | d	 | d
 | d | ƒ }
 |
 S| d  k sÁ | j	 ƒ  r”| j
 ƒ  r”t j ˆ |  ƒ } t j |  j |  j ƒ  ƒ } | j | g  t t t ƒ } | \ } } } } } } } } | | | | } t j |  ƒ ‰  xˆ ˆ  D]€ } | | k rOt j j |  j t j | ƒ ƒ ƒ rÏt j j |  j | ƒ ƒ rÌt j |  t j | ƒ ƒ | j | ƒ qÌqÏqOqOW| d | d | d | d | d	 | d
 | d | ƒ }
 |
 d  k	 r†xq | D]f } | | k rt j j |  j t j | ƒ ƒ ƒ slt j j |  j | ƒ ƒ r| j | ƒ qqqWn  | j ƒ  |
 St j |  ƒ ‰  |  j | j
 ƒ  ˆ  ƒ | _ t j |  | ƒ } |  j j  | g  t t ƒ ‰ ˆ s"| d | d | d | d | d	 | d
 | d | ƒ St j ˆ |  ƒ } xZ ˆ D]R } t j! | ƒ } | | d k r€t j |  | ƒ | j | ƒ q;| j | ƒ q;Wt" j" | ƒ } | j# ‰ | j t$ ˆ ƒ 7_ g  } xm | j D]b } t j | ƒ } | ˆ  k sÎ| ˆ k rqÎn  | j% t j& ƒ s#| t j& 7} n  | j' | ƒ qÎW| | _ ‡  ‡ ‡ f d †  } | | _# | d | d | d | d | d	 | d
 | d | ƒ }
 | j ƒ  |
 SWd  |	 j( ƒ  Xd  S(   Nt   _isrebasingt   _istransplantingRq   t   printmessaget   textt   usert   dateR   t   forcet   editort   extrat   rc            s$   ˆ |  ƒ r |  ˆ  k S|  ˆ k Sd  S(   N(    (   R   (   Rp   t   origmatchfnt   standins(    s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyt   matchfn  s    
()   R
   t   commitRF   t   getattrR2   t
   lfcommandst   updatelfilesRw   R"   RI   R   R   RH   RB   RC   RD   RE   R   t
   listlfilest   osR&   t   existsRN   R   t   updatestandinRO   t   dropRV   t
   _subdirlfsRK   t   composestandinmatcherR5   t   walkR   RJ   R‡   RU   t   endswitht   sepR6   RW   (   R   R~   R   R€   R   R   R‚   Rƒ   t   origRF   R)   Rd   t
   dirtymatchRf   Rg   Rh   Ri   Rj   t   _missingRl   Rm   t   _cleant   modifiedfilesRn   t   smatcherR   t   actualfilesR   t   fstandinR‡   (   R	   Rw   (   Rp   R…   R†   s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyRˆ     sŒ    		
			
c            s8  t  j ˆ | j ƒ  d | ƒ} | j rt ƒ  } |  j j | j | ƒ d } x±| D]©} g  |  j j | ƒ D] }	 |	 t j	 k rl |	 ^ ql }
 |  | } t | j
 ƒ  ƒ } t |
 ƒ d k r©| j ƒ  } | j ƒ  d j ƒ  } | j ƒ  d j ƒ  } x* | D]" } | | k rú | j | ƒ qú qú Wx* | D]" } | | k r'| j | ƒ q'q'WxY | D]N } | | | j | d  ƒ k s’| | | j | d  ƒ k rT| j | ƒ qTqTWn  | j t g  | D]7 } t j | ƒ r¹| | k r¹| | j ƒ  j ƒ  ^ q¹ƒ ƒ } qS Wt j ˆ |  | | ƒ n  t ˆ  |  ƒ j | | | | ƒ S(   NR   i    i   i   (   R   t   findcommonoutgoingt   peerRk   RQ   t	   changelogt   nodesbetweent   parentst   node_t   nullidR   t   lenR   t   addt   getR"   t   unionR   R>   R%   RL   RŠ   t   uploadlfilesR
   t   push(   R   t   remoteR   t   revst	   newbrancht   outgoingt   touploadt   ot   nt   pR¢   R.   R   t   mct   mp1t   mp2R   (   R	   t   repoRw   (    s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyRª      s>    			
,
Ac         S   sŽ  g  } g  } g  } x{ | D]s } t  j | d ƒ rT t j t d ƒ | d d ƒ‚ n  t j j |  j | ƒ ƒ r | j	 | ƒ q | j	 | ƒ q Wxí | D]å } t
 } |  j j | ƒ d } x@ | D]8 }	 |  j j |	 ƒ j | ƒ rÀ | j	 | ƒ t } PqÀ qÀ W| sfxa | D]V }
 |  j j |
 ƒ j | ƒ r	| j	 |
 ƒ | s_| j	 t  j | ƒ ƒ t } q_q	q	Wn  | s— | j	 | ƒ q— q— W| | 7} | S(   sé  
            Adjust matched file list
            If we pass a directory to commit whose only commitable 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.
            t   /s    file "%s" is a largefile standint   hints#   commit the largefile itself instead(   R   R>   R   t   AbortR   R   R&   t   isdirRN   R6   R2   R5   t	   normalizet
   startswithR   R   (   R   R   Rp   Rœ   R7   t   regularsR   t
   matcheddirt   dt   mft   lf(    (    s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyR‘   Â  s<    
N(   R   R   R2   R+   R   R*   R   t   unfilteredmethodR"   R   Rx   Rˆ   Rª   R‘   (    (   R	   R¶   Rw   (    s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyR	      s   /·‰"c         [   sR   d | j  k rN t j d „  | j j ƒ  Dƒ ƒ rN | j  j d ƒ | j ƒ  n  d  S(   Nt
   largefilesc         s   s&   |  ] } t  j d  | d k Vq d S(   R·   i    N(   R   t	   shortname(   t   .0R   (    (    s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pys	   <genexpr>ü  s    (   t   requirementsR   t   anyt   storet	   datafilesR¦   t   _writerequirements(   Rw   R¶   R   (    (    s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyt   checkrequireslfilesú  s    t   hookss   changegroup.lfiless   commit.lfiles(   t   localt   protot   wirereposetupR   t	   setconfig(   Rw   R¶   RË   (    (   R	   R¶   Rw   s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyt	   reposetup   s    %ÿ Ü		(   t   __doc__RJ   R   t	   mercurialR    R   R   R   RB   R   R   R   R£   t   mercurial.i18nR   R   RŠ   RÎ   R   RÑ   (    (    (    s>   /sys/lib/python2.7/site-packages/hgext/largefiles/reposetup.pyt   <module>	   s   .