
    	^cE                        d dl Z d dlZd dl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 ddlmZmZ dZej        r3d dlmZmZmZmZmZmZ dd	lmZmZmZmZmZm Z! ee"ee"e"e"f         f         Z#d
 Z$d Z%ddZ&ddZ'd Z(d Z)d Z*ddZ+d Z,dS )    N   )_)getattr)configerror	filemergepathutilphasespycompatutil)
stringutilurlutil)    r   s   empty)AnyDictListOptionalSetTuple)context	localrepomatchscmutilsubrepouic           
          t          j                                                      d fd	d v r d                               d          D ]1\  }}                    d||                    d|                     2i }d v r	 t           d                                                                                   D ]\  }}|                                }|s	 |	                    dd          \  }}nJ# t          $ r= t          j        t          d                              d          |dz   fz            w xY w|||<   n# t          $ r Y nw xY wfd	}i }	                    d
          D ]~\  }}d}
|                    d          r\d|vr!t          j        t          d                    |	                    dd          \  }
}|
dd         }
|                                }t%          j        |                                          st+          d          }|rt%          j        |          }t-          j        |j        pd
|          |_        t-          j        |j                  |_        t5          |          } ||          }||k    r ||          }n|} ||          }|                                |                    |d
          |
f|	t;          j        |          <   |	S )zreturn a state dict, mapping subrepo paths configured in .hgsub
    to tuple: (source from .hgsub, revision from .hgsubstate, kind
    (key in types dict))
    Nc                 z   | v r	 |                                           }nI# t          $ r<                     t          d                              |           z             Y d S w xY w                    | |||           d S t          j        t          d                              |           z            )Ns*   warning: subrepo spec file '%s' not found
s    subrepo spec file '%s' not found)dataFileNotFoundErrorwarnr   pathtoparser   Abort)	fsectionsremapr   ctxpreadrepor   s	       7/usr/lib/python3/dist-packages/mercurial/subrepoutil.pyr)   zstate.<locals>.read=   s    881v{{}}$   FGGkk!nn%    GGAtXud33333+7884;;q>>I  s   " AA('A(   .hgsub   subpaths   .hgsubstate    r   s8   invalid subrepository revision specifier in '%s' line %dc           	                              d          D ]\  }}t          j        |          }t          j        dd|          }	 t          j        ||| d          } H# t          j        $ rQ}t          j        t          d                              d|          t          j	        |          fz            d }~ww xY w| S )Nr-   s   \\\\([0-9]+)s   \\\1r   s#   bad subrepository pattern in %s: %s)
itemsr   	escapestrresubr   r#   r   sourceforcebytestr)srcpatternrepler(   s       r+   r&   zstate.<locals>.remapi   s    WW[11 	 	MGT '--D 6*Hd;;D	fWdC338   k<==g66"/22   
s   AB?.AB::B?r   s   hg   [   ]s!   missing ] in subrepository sourceFabort)NN)r   r*   configitemssetconfigsource	enumerater   
splitlineslstripsplit
ValueErrorr   r#   r   r!   r   r1   
startswithr   urlisabs
_abssource	posixpathjoinpathnormpathbytesstripgetr   pconvert)r'   r   rM   r7   revilrevisionr&   statekindparentjoinedremappedr(   r)   r*   s   ``            @@@r+   rW   rW   4   sn    	A88::D         " CY^^K00 J J	c	k4book4&H&HIIII
C	!#n"5":":"<"<"G"G"I"IJJ % %1HHJJ 	%&WWT1%5%5NHdd!   +;   ;;~66Q@	A   %D		% ! 	 	 	D	    , EWWS\\ M M	c>>$ 	3k!$H"I"IJJJ		$**ID#8D**,,C{3%%'' 	#E222F # V,,'nV[-?CEE'0==v !5==v%%%**CC"CeCjj&)iikk37743E3Et%LdmD!!""Ls,   AE *DE AE	E 
E"!E"c                     fdt                    D             }|                     dd                    |          d           dS )z=rewrite .hgsubstate in (outer) repo with these subrepo statesc                 p    g | ]2}|         d          t           d          k    d|         d          |fz  3S )r   s   %s %s
)	nullstate).0srW   s     r+   
<listcomp>zwritestate.<locals>.<listcomp>   sL       8A;)A,&& 	eAhqk1%%&&&r   r.   r   N)sortedwwriterL   )r*   rW   liness    ` r+   
writestatere      sY         E
 	KK55555r   c                 b
    ||k    r|                                 }|j        }|j        }|j        }i }	 j                            d|||fz             d fd	}
t	          j        |          }t          |                                          D ]\  }}|                    |t                    }|}|
                    |                                          r|d         |d         dz   f}||k    r|}|                                }||d<   ||v r\||         }||k    s||k    r||	|<   ||k    r< |
|d|           |
                    |                              ||           ||	|<   |d         |d         k    r~|d         |d	<   |d         |d
<    j                            t          d          |z  d          r; |
|d|           |
                    |                              ||           ||	|<   o|d         |d         k    r= |
|d|           |
                    |                              ||           ||	|<    |
|d           |
                    |          }|                    |d                   |d<   |                    |d                   |d<    j                            t          d          |z  d          }|dk    r<|
                    |                              |           ||	|<    |
|d|           |dk    r||	|<    |
|d|           |
                    |                              ||           ||	|<    |
|d|           ||k    r5 |
|d           |
                    |                                           |t          k    r |
|d           ||	|<   8 j                            t          d          |z  d          r3 |
|d           |
                    |                                           t          |                                          D ]\  }}||v r
||vr; |
|d|           |
                    |                              |           ||	|<   I|||         k    r|                                }||d<    j                            t          d          |z  d          dk    r: |
|d|           |
                    |                              |           ||	|<   t%           |	           |	S )z{delegated from merge.applyupdates: merging of .hgsubstate file
    in working context, merging context and ancestor contexts   subrepo merge %s %s %s
r   c                 V    |rd|z  }j                             d| ||fz             d S )Ns   %s:%s:%ss     subrepo %s: %s %s
)r   debug)r`   msgrr*   s      r+   rh   zsubmerge.<locals>.debug   s:     	 aA.!S!<=====r   r   r      +   ss   other changed, gets   los   ros    subrepository sources for %(s)s differ
you can use (l)ocal%(l)s source (%(lo)s) or (r)emote%(o)s source (%(ro)s).
what do you want to do?$$ &Local $$ &Remotes   prompt changed, gets   other side changed, gets   both sides changeds   sls   srs    subrepository %(s)s diverged (local revision: %(sl)s, remote revision: %(sr)s)
you can (m)erge, keep (l)ocal%(l)s or keep (r)emote%(o)s.
what do you want to do?$$ &Merge $$ &Local $$ &Remotes
   merge withs   keep local subrepo revisions   get remote subrepo revisions   remote removed, removes   local added, keepsz    local%(l)s changed subrepository %(s)s which remote%(o)s removed
use (c)hanged version or (d)elete?$$ &Changed $$ &Deletes   prompt removes   remote added, getsz    remote%(o)s changed subrepository %(s)s which local%(l)s removed
use (c)hanged version or (d)elete?$$ &Changed $$ &Deletes   prompt recreate)r   )p1substater   rh   r   
partextrasrb   r1   rQ   r^   r4   dirtycopypromptchoicer   shortidmergeremovere   )r*   wctxmctxactx	overwritelabelss1s2sasmrh   
promptssrcr`   rU   aldpromptsrj   srepooptions   `                   r+   submerger      s   
 t||wwyy	B	B	B	BGMM-tT0BBCCC> > > > > >
 %f--Jrxxzz"" W% W%1FF1i  88A;; 	%A$!t$B4<<A//##771AQww!q&&1qa.2229---1A!A$!"1!"17''0   
 
  E!3Q777HHQKKOOAy111BqEA!A$a3Q7779---1a.///!&qt!4!4!&qt!4!4--:     Q;;HHQKK%%a(((BqEE!]A....q[[BqEE!;Q????HHQKKOOAy111BqEE!;Q????1WWE!.///HHQKK    )^^E!)***BqEw##.   	 	 % a)***""$$$rxxzz""  177b[[E!)1---HHQKKOOABqEE"Q%ZZ oo''GGDM$$2   	 	 
 
 a+Q///"""1 tRIr   Fc                    g }t                      }|j                                        d|v rj|j        |j        |j        fD ]}d|v r|                    d           |                                j        }t          	                                          D ]N}	 |	          s6|	|v r||	         |	<   |s$t          j        t          d          |	z            |                    |	                              d          }
|
rd|                     dd          s#t          j        |
t          d                    |                    |	           |                    |	           |                    |	                                          }|	         d	         ||	         d
         f|	<   |                    |	d          d         |k    r|                    |	           P|                                D ]&}fd|j        D             }|fd|D             z  }'|rr d          sLd|                                |                                z   v r!t          j        t          d                    |j                            d	d           nAd|j        v r8d|v r4d|j        |j        z   |j        z   vr|j                            d	d           ||fS )ay  Calculate .hgsubstate changes that should be applied before committing

    Returns (subs, commitsubs, newstate) where
    - subs: changed subrepos (including dirty ones)
    - commitsubs: dirty subrepos which the caller needs to commit recursively
    - newstate: new state dict which the caller must write to .hgsubstate

    This also updates the given status argument.
    r,   r.   s#   commit with new subrepo %s excludedTs   uis   commitsubreposs#   use --subrepos for recursive commit)hintr      )NNNr   c                     g | ]}|v|	S  r   )r_   r`   newstates     r+   ra   zprecommit.<locals>.<listcomp>j  s#    <<<q!8*;*;*;*;*;r   c                 *    g | ]} |          |S r   r   )r_   r`   r   s     r+   ra   zprecommit.<locals>.<listcomp>k  s&    ...1UU1XX.Q...r   s$   can't commit subrepos without .hgsub)r@   rn   rq   modifiedaddedremovedru   rm   rb   keysr   r#   r   r4   dirtyreason
configboolappendadd	basestaterQ   parentsinsert)r   rv   statusr   forcesubs
commitsubscoldstater`   r   bsr(   rj   r   s      `          @r+   	precommitr   6  s    DJ}!!##H D&,> 	) 	)A""((( 7799%(( 	# 	#A588 =="*1+HQK +@AAAE   ((1++11$77K #}}U,=>> +#EFF    Aq!!!!XXa[[**,,'{1~r8A;q>B<<#566q9R??KKNNN  	/ 	/A<<<<AJ<<<A........DD 	65## N	$**,,.) ) k!$K"L"LMMMO""1n555	fn	$	$T!!nOfl*V^;'
 '
 N!!!^444X%%r   c                 x   | }g }t          j        |d          rlt          j        |j                  }|                    t          |                     |                                rn|j        }t          j        |d          l|	                                 t          j        | }t          j        |          S )zRreturn the source of this repo

    Either absolute or relative the outermost repo
   _subparent)r   safehasattrr   rH   
_subsourcer   rO   rI   
_subparentreverserK   rL   rN   )r*   rY   chunksr5   rM   s        r+   repo_rel_or_abs_sourcer   }  s     FF

6=
1
1 #V.//eFmm$$$<<>> 	" 
6=
1
1 # NN>6"Dd###r   c                     | }t          j        |d          r|j        }t          j        |d          | j        t	          t          j        |j                            d         S )z9return path to this (sub)repo as seen from outermost repor   N)r   r   r   rootlenr	   normasprefix)r*   rY   s     r+   reporelpathr     se     F

6=
1
1 #" 
6=
1
1 #9S.v{;;<<>>??r   c                     | j         S )z7return path to this subrepo as seen from outermost repo)_relpath)r4   s    r+   
subrelpathr     s     <r   Tc                 v   t          j        | d          rt          j        | j                  }|                                rt          |          S t          j        |j	                  |_	        t          | j        |d          }|ryt          j        t          j        |                    }t          j        |j	        pd|j	                  |_	        t          j        |j	                  |_	        t          |          S nd}t          j        | d          r| j        }n|r7| j                            dd          r| j                            dd          }no| j                            dd	          r| j                            dd	          }n8|                                 r$t$          j	                            | j                  S |rIt          j        |          r3t-          |          d
k    s|d
d         dvrt          j        |          }|S |r!t1          j        t5          d                    dS )zreturn pull/push path of repo - either based on parent repo .hgsub info
    or on the top repo config. Abort or return None if no source found.r   Fr=   r   Ns   _subtoppaths   pathss   default-pushs   defaultr      s   \/s(   default path for subrepository not found)r   r   r   rH   r   rI   rO   rK   rN   rM   rJ   r   rR   rL   _subtoppathr   r   sharedosdirname
sharedpathhasdriveletterr   abspathr   r#   r   )r*   pushr>   r5   rY   rM   s         r+   rJ   rJ     s    m,, 'T_--<<>> 	!== (55DOT??? 	![v!6!677F#.);V[IIFK#,V[99FK== 		! D.11 
	4#DD 	4dgnnX?? 	47>>(O<<DDW^^Hj11 	47>>(J77DD[[]] 	4 7??4?333 	 %d++ .t99>>T!A#Yf%<%<<--DK Jk!GHHIIIJ Jr   c                    t          j        |           }t          |dd           }|s|S |                     dd          }|dvr$t	          j        t          d          |z            |dk    r|S t           j        }d }t          |          D ]B}|	                    |          }|
                    ||         d                   }	||	k     r|	}|}C||k     r|dk    rGt	          j        t          d	          t           j        |         t           j        |         |fz            |                     t          d
          t           j        |         |fz             |S |S )Nrn   s   phasess   checksubrepos)   ignores   follow   aborts.   invalid phases.checksubrepos configuration: %sr   r   r   s=   can't commit in %s phase conflicting %s from subrepository %ssA   warning: changes are committed in %s phase from subrepository %s
)r
   newcommitphaser   r   r   r#   r   publicrb   r4   phase
phasenamesr    )
r   r'   commitphasern   checkmaxphasemaxsubr`   r4   subphases
             r+   r   r     s   '++KsJ--H IIi!122E444k?@@5H
 
 	
 	}HFH  ggajj99Xa[^,,hHFXH+= 
 %k2%h/	
 
 
 	5   *F3	4	
 	
 	
 r   )N)F)FT)-r   rK   r3   i18nr   r   r    r   r   r   r	   r
   r   utilsr   r   r^   TYPE_CHECKINGtypingr   r   r   r   r   r   r   r   r   matchmodr   r   r   uimodrO   SubstaterW   re   r   r   r   r   r   rJ   r   r   r   r+   <module>r      sP   
			     				                                    
 !	 7                               E5u!4556Hg g gT6 6 6J J J JZD& D& D& D&N$ $ $$@ @ @  .J .J .J .Jb* * * * *r   