ó
a˜Qc           @   sž  d  d l  m Z d  d l m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 Z	 d  d l
 Z
 d  d l Z d d „ Z e d „ Z g  d „ Z i  Z d d „ Z d	 „  Z d
 „  Z d „  Z d „  Z e d e ƒ d „  ƒ Z e d e ƒ d „  ƒ Z e d e ƒ d „  ƒ Z e d e ƒ d „  ƒ Z d „  Z e d e e d ƒ ƒ d „  ƒ Z e d e ƒ d „  ƒ Z d „  Z d „  Z  e j! ƒ  Z" d S(   iÿÿÿÿ(   t   short(   t   _Nt    c         C   s   |  j  d | d | | ƒ S(   Ns   merge-toolst   .(   t   config(   t   uit   toolt   partt   default(    (    s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyt   _toolstr   s    c         C   s   |  j  d | d | | ƒ S(   Ns   merge-toolsR   (   t
   configbool(   R   R   R   R   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyt	   _toolbool   s    c         C   s   |  j  d | d | | ƒ S(   Ns   merge-toolsR   (   t
   configlist(   R   R   R   R   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyt	   _toollist   s    c            s   ‡  ‡ ‡ f d †  } | S(   s;   return a decorator for populating internal merge tool tablec            sD   d ˆ  } d | |  j  j ƒ  |  _  |  t | <ˆ |  _ ˆ |  _ |  S(   Ns	   internal:s   ``%s``
(   t   __doc__t   stript	   internalst   trymerget	   onfailure(   t   funct   fullname(   t   nameR   R   (    s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyt	   decorator   s    

		(    (   R   R   R   R   (    (   R   R   R   s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyt   internaltool   s    c         C   sº   | t  k r | Sx| d D]t } t |  | | ƒ } | s; q n  t j | t |  | d ƒ ƒ } | r t j | t |  | d ƒ ƒ } | r‹ | Sq q Wt |  | d | ƒ } t j t j | ƒ ƒ S(   Nt   regkeyt	   regkeyaltt   regnamet	   regappendt
   executable(   s   regkeyR   (   R   R	   t   utilt	   lookupregt   findexet
   expandpath(   R   R   t   knt   kt   pt   exe(    (    s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyt	   _findtool#   s    c            sW  ‡  f d †  } ˆ  j  d d ƒ } | r\ t ˆ  | ƒ } | rO | t j | ƒ f S| | f Sn  t j j d ƒ } | r~ | | f Sx{ ˆ  j d ƒ D]j \ }	 }
 t j |  j	 d |	 g ƒ } | | ƒ rŽ | |
 |	 | t
 ƒ rŽ t ˆ  |
 ƒ } |
 t j | ƒ f SqŽ Wi  } x^ ˆ  j d ƒ D]M \ } } | j d ƒ d	 } | | k rt t ˆ  | d
 d ƒ ƒ | | <qqW| j ƒ  } t g  | j ƒ  D] \ } } | | f ^ qƒ } ˆ  j  d d ƒ } | rè| | k rÏ| | f S| j d	 d  | f ƒ n  | j d ƒ xK | D]C \ } } | | d  | | ƒ rüt ˆ  | ƒ } | t j | ƒ f SqüW| sO| rSd Sd S(   Nc            s  |  } | r | d | 7} n  t  ˆ  |  ƒ sf | rL ˆ  j t d ƒ | ƒ q	ˆ  j t d ƒ | ƒ n£ | r™ t ˆ  |  d ƒ r™ ˆ  j t d ƒ | ƒ np | rÌ t ˆ  |  d ƒ rÌ ˆ  j t d ƒ | ƒ n= t j ƒ  rt ˆ  |  d ƒ rˆ  j t d ƒ | ƒ n t St S(	   Ns    specified for s   couldn't find merge tool %s
t   symlinks   tool %s can't handle symlinks
t   binarys   tool %s can't handle binary
t   guis   tool %s requires a GUI
(	   R%   t   warnR   t   noteR   R   R(   t   Truet   False(   R   t   patR&   R'   t   tmsg(   R   (    s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyt   check3   s    R   t
   forcemerget   HGMERGEs   merge-patternsR   s   merge-toolsR   i    t   priorityt   0t   merget   hgmerges   internal:prompts   internal:merge(   Ns   hgmerge(   s   internal:promptN(   s   internal:mergeN(   R   R%   R   t
   shellquotet   ost   environt   gett   configitemst   matcht   rootR,   t   splitt   intR	   t   keyst   sortedt   itemst   insertt   Nonet   append(   t   repoR   t   pathR'   R&   R/   t   forcet   toolpathR5   R-   R   t   mft   toolsR"   t   vt   tt   namesR#   t   uimerge(    (   R   s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyt	   _picktool2   sF    
!&2
c         C   sD   d |  k r d Sd |  k r  d Sd |  k r0 d Sd |  k r@ d Sd S(   s   Guess the EOL type of a filet    s   
s   s   
N(   RC   (   t   data(    (    s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyt   _eoltypet   s    c         C   sw   t  t j | ƒ ƒ } | rs t j |  ƒ } t  | ƒ } | rs | j | | ƒ } | | k rp t j |  | ƒ qp qs n  d S(   s/   Convert EOL markers in a file to match origfileN(   RR   R   t   readfilet   replacet	   writefile(   t   filet   origfilet   tostyleRQ   t   stylet   newdata(    (    s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyt	   _matcheol€   s    t   promptc   	      C   s‚   |  j  } | j ƒ  } | j t d ƒ | t d ƒ t d ƒ f d ƒ rb t |  | | | | | | ƒ St |  | | | | | | ƒ Sd S(   sX   Asks the user which of the local or the other version to keep as
    the merged version.s8    no tool found to merge %s
keep (l)ocal or take (o)ther?s   &Locals   &Otheri    N(   R   RF   t   promptchoiceR   t   _iothert   _ilocal(	   RE   t   mynodet   origt   fcdt   fcot   fcat   toolconfR   t   fd(    (    s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyt   _iprompt‹   s    	t   localc         C   s   d S(   s6   Uses the local version of files as the merged version.i    (    (   RE   R`   Ra   Rb   Rc   Rd   Re   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyR_   ™   s    t   otherc         C   s)   |  j  | j ƒ  | j ƒ  | j ƒ  ƒ d S(   s6   Uses the other version of files as the merged version.i    (   t   wwriteRF   RQ   t   flags(   RE   R`   Ra   Rb   Rc   Rd   Re   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyR^   ž   s    %t   failc         C   s   d S(   s±   
    Rather than attempting to merge files that were modified on both
    branches, it marks them as unresolved. The resolve command must be
    used to resolve these conflicts.i   (    (   RE   R`   Ra   Rb   Rc   Rd   Re   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyt   _ifail¤   s    c         C   sH  | \ } } } } | r d S| \ } } }	 }
 |  j  } y t | | d | ƒ } Wn“ t j k
 ræ t | | d ƒ j ƒ  } d j ƒ  } | | k rç d j g  | D] } d | d ^ q¡ ƒ } t j t d ƒ | | | f ƒ ‚ qç n X| rDt	 j	 | | | |	 d t
 ƒ} | s"| j d ƒ d	 S| d k rDt j |
 | ƒ qDn  d S(
   Ni   t   premerget   keeps   , t   's6   %s.premerge not valid ('%s' is neither boolean nor %s)t   quiets    premerge successful
i    (   R   R   t   errort   ConfigErrorR	   t   lowerR=   t   joinR   t   simplemergeR+   t   debugR   t   copyfile(   RE   Re   t   filesR   RH   R'   R&   t   at   bt   ct   backR   Rn   t   validRK   t   _validt   r(    (    s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyt	   _premerge¬   s,    	*R4   sF   merging %s incomplete! (edit conflicts, then use 'hg resolve --mark')
c         C   s­   | \ } }	 }
 } | rB |  j  j t d ƒ | j ƒ  ƒ t d f St |  | | ƒ } | r£ | \ } } } } |  j  } t j | | | | d d d g ƒ} t | f St d f S(   s°   
    Uses the internal non-interactive simple merge algorithm for merging
    files. It will fail if there are any conflicts and leave markers in
    the partially merged file.s5   warning: internal:merge cannot merge symlinks for %s
i   t   labelRh   Ri   i    (   R   R)   R   RF   R,   R   Rv   R+   (   RE   R`   Ra   Rb   Rc   Rd   Re   Ry   R   RH   R'   R&   R€   Rz   R{   R|   R}   R   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyt   _imergeÉ   s    
	$
t   dumpc         C   s   t  |  | | ƒ } | r“ | \ }	 }
 } } | j ƒ  } t j |	 |	 d ƒ |  j | d | j ƒ  | j ƒ  ƒ |  j | d | j ƒ  | j ƒ  ƒ n  t | f S(   su  
    Creates three versions of the files to merge, containing the
    contents of local, other and base. These files can then be used to
    perform a merge manually. If the file to be merged is named
    ``a.txt``, these files will accordingly be named ``a.txt.local``,
    ``a.txt.other`` and ``a.txt.base`` and they will be placed in the
    same directory as ``a.txt``.s   .locals   .others   .base(   R   RF   R   Rx   Rj   RQ   Rk   R,   (   RE   R`   Ra   Rb   Rc   Rd   Re   Ry   R€   Rz   R{   R|   R}   Rf   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyt   _idumpá   s    	#&c         C   sv  t  |  | | ƒ } | rl| \ }	 }
 } } | \ } } } } d } t d | j ƒ  d t | ƒ d t | j ƒ  ƒ d t | j ƒ  ƒ d d | j ƒ  k d d | j ƒ  k d	 d | j ƒ  k ƒ } |  j } t | |	 d
 d ƒ } d | k r÷ | | } } n  t d | d | d | d | ƒ } t	 j
 d | | d „  ƒ } t	 j |
 d | d |  j d | d | j ƒ} t | f St d f S(   NR   t   HG_FILEt
   HG_MY_NODEt   HG_OTHER_NODEt   HG_BASE_NODEt   HG_MY_ISLINKt   lt   HG_OTHER_ISLINKt   HG_BASE_ISLINKt   argss   $local $base $others   $outputRh   t   baseRi   t   outputs   \$c         S   s   t  j t  j |  ƒ ƒ S(   N(   R   R6   t	   localpath(   t   s(    (    s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyt   <lambda>
  s    t    t   cwdR8   t   outi    (   R   t   dictRF   R    t   strt	   changectxRk   R   R	   R   t   interpolatet   systemR<   t   foutR+   R,   (   RE   R`   Ra   Rb   Rc   Rd   Re   Ry   R€   R   RH   R'   R&   Rz   R{   R|   R}   R–   t   envR   RŽ   RT   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyt   _xmergeõ   s.    	!#
c            s  ‡  f d †  } | j  | ƒ s" d Sˆ  j } | j ƒ  } | j ƒ  pX | j ƒ  pX | j ƒ  }	 d | j ƒ  | j ƒ  k }
 t ˆ  | | |	 |
 ƒ \ } } | j d | | |	 |
 f ƒ | t k rÝ t | } | j	 } | j
 } n t } t } t d ƒ } | | |	 |
 f } | s)| ˆ  | | | | | | ƒ Sˆ  j | ƒ } | d | ƒ } | d | ƒ } | d } t j | | ƒ | | j ƒ  k r«| j t d ƒ | | j ƒ  | f ƒ n | j t d	 ƒ | ƒ | j d
 | | | f ƒ | ˆ  | | | | | | | | | | f ƒ \ } } | sc| r8| rE| j | | ƒ qEn t j | ƒ t j | ƒ t j | ƒ | S| r¾t | | d ƒ s”d t | | d ƒ k r¾t j d | j ƒ  t j ƒ r¾d } q¾n  t } d t | | d ƒ k rt } | j t d ƒ | t d ƒ t d ƒ f d ƒ rd } qn  | r©| r©t | | d ƒ sWd t | | d ƒ k r©t j  | | ƒ r©| j t d ƒ | t d ƒ t d ƒ f d ƒ r¦d } q¦q©n  t | | d ƒ rËt | | ƒ n  | rî| rû| j | | ƒ qûn t j | ƒ t j | ƒ t j | ƒ | S(   s  perform a 3-way merge in the working directory

    mynode = parent node before merge
    orig = original local filename before merge
    fco = other file context
    fca = ancestor file context
    fcd = local file context for current/destination file
    c            s…   d t  j j | j ƒ  ƒ |  f } t j d | ƒ \ } } ˆ  j | j ƒ  | j ƒ  ƒ } t  j | d ƒ } | j | ƒ | j	 ƒ  | S(   Ns   %s~%s.t   prefixt   wb(
   R7   RF   t   basenamet   tempfilet   mkstempt
   wwritedataRQ   t   fdopent   writet   close(   RŸ   t   ctxt   preRf   R   RQ   t   f(   RE   (    s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyt   temp  s    "
R‹   s/   picked tool '%s' for %s (binary %s symlink %s)
s   merging %s failed!
R   Ri   s   .origs   merging %s and %s to %s
s   merging %s
s   my %s other %s ancestor %s
t   checkconflictst	   conflictsR/   s!   ^(<<<<<<< .*|=======|>>>>>>> .*)$i   R\   s"   was merge of '%s' successful (yn)?s   &Yess   &Not   checkchangedt   changeds<    output file %s appears unchanged
was merge successful (yn)?t   fixeolN(   t   cmpRC   R   RF   t   isbinaryRk   RO   Rw   R   R   R   Rž   R+   R   t   wjoinR   Rx   t   statusR)   R7   t   unlinkR   R   t   ret   searchRQ   t	   MULTILINER,   R]   t   filecmpR[   (   RE   R`   Ra   Rb   Rc   Rd   R«   R   Rf   R'   R&   R   RH   R   R   R   Re   Rz   R{   R|   R}   t	   needcheckR€   t   checked(    (   RE   s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyt	   filemerge  s„    
		$	
	
) (#   t   nodeR    t   i18nR   R   Rv   R;   Rr   R7   R¢   R¶   R¹   R	   R,   R   R   R   RC   R   R%   RO   RR   R[   Rg   R_   R^   Rm   R   R+   Rƒ   R…   Rž   R¼   t   valuest   i18nfunctions(    (    (    s7   /sys/lib/python2.7/site-packages/mercurial/filemerge.pyt   <module>   s.   00		B						i