
    6h"                    d    S SK Jr  S SKrS SKrS SKJrJr  SSKJr  SSK	J
r
JrJr   " S S5      rg)	    )annotationsN)ListTuple   )_)encodingerrorutilc                      \ rS rSrSS jrS rS rS rS rS r	S	 r
S
 rS rSS jrS rS rS rS rSS jrSS jrS rS rSS jrSS jrSrg)config   Nc                    SU l         0 U l        / U l        U(       aG  UR                   H"  nX   R                  5       U R                  U'   M$     UR                   S-   U l         g g )Nr   r   )_current_source_level_data_unsetcopy)selfdataks      2/usr/lib/python3/dist-packages/mercurial/config.py__init__config.__init__   sV    %&"
ZZ $

1  )-)C)Ca)GD&     c                .    U =R                   S-  sl         g)zQincrement the source counter

This is used to define source priority when readingr   N)r   r   s    r   
new_sourceconfig.new_source$   s     	""a'"r   c                    [        U 5      $ N)r   r   s    r   r   config.copy*   s    d|r   c                    XR                   ;   $ r   )r   r   sections     r   __contains__config.__contains__-   s    **$$r   c                >    X R                   R                  U0 5      ;   $ r   r   getr   r#   items      r   hasitemconfig.hasitem0   s    zz~~gr222r   c                :    U R                   R                  U0 5      $ r   r'   r"   s     r   __getitem__config.__getitem__3   s    zz~~gr**r   c              #  @   #    U R                  5        S h  vN   g  N7fr   )sectionsr   s    r   __iter__config.__iter__6   s     ==?""s   c                   U R                   nUS-  nU R                   nUR                   HZ  u  pEU R                  R                  US 5      nUc  M&  XV;   d  M-  UR	                  5       U R                  U'   U R                  U   U	 M\     U H  nU R                  R                  US 5      nU(       a  UR	                  5       U R                  U'   O"[
        R                  " 5       U R                  U'   UR                  U   R                  5        H-  u  pxUu  pnX-  n[        X5      nXU4U R                  U   U'   M/     M     X0l         g )Nr   )	r   r   r   r(   preparewriter
   cowsortdictitemsmax)r   srccurrent_level	max_levelsndsr   vvaluesourcelevels               r   updateconfig.update9   s   22..	JJDA4(B~!' " 1

1JJqM!$	 
 A4(B " 1

1 $ 0 0 2

1		!**,'($u&5	$)5#9

1a 	 -  &/"r   c                X    U R                   R                  U0 5      R                  U5      $ r   r'   r)   s      r   _getconfig._getO   s"    zz~~gr*..t44r   c                8    U R                  X5      nUc  U$ US   $ Nr   rF   )r   r#   r*   defaultresults        r   r(   
config.getR   s$    7)>Nayr   c                Z     U R                   U   U   nX4U-   $ ! [         a    X4s $ f = f)zreturn a tuple allowing restore to reinstall a previous value

The main reason we need it is because it handles the "no data" case.
)r   KeyError)r   r#   keyr*   s       r   backupconfig.backupX   sB    
	)::g&s+D >D((  	">!	"s    **c                6    U R                  X5      nUc  gUS   $ )Nr   r   rJ   r   r#   r*   rL   s       r   rA   config.sourced   s"    7)>ayr   c                6    U R                  X5      nUc  g US   $ )N   rJ   rT   s       r   rB   config.levelj   s"    7)>ayr   c                H    [        U R                  R                  5       5      $ r   )sortedr   keysr   s    r   r1   config.sectionsp   s    djjoo'((r   c                    U R                   R                  U0 5      R                  5       nU VVs/ s H  u  p4X4S   4PM     snn$ s  snnf rI   )r   r(   r7   )r   r#   r7   r   r?   s        r   r7   config.itemss   s?    

w+113(-.fqaD	...s   Ac                   [        U[        5      (       a   S5       e[        U[        5      (       a   S5       e[        U[        5      (       a   S5       eX;  a#  [        R                  " 5       U R                  U'   O*U R                  U   R                  5       U R                  U'   X4U R                  4U R                  U   U'   g )Ns5   config section may not be unicode strings on Python 3s2   config item may not be unicode strings on Python 3s4   config values may not be unicode strings on Python 3)
isinstancestrr
   r6   r   r5   r   )r   r#   r*   r@   rA   s        r   set
config.setw   s    S
 
 	DC	D 
 #
 
 	A@	A 
 3
 
 	CB	C 
 "&"2"2"4DJJw"&**W"5"B"B"DDJJw%*D4N4N$O

7D!r   c                    U R                   U   U   n[        U5      nU4USS -   n[        U5      U:X  d   eX`R                   U   U'   g)zkalter a value without altering its source or level

This method is meant to be used by `ui.fixconfig` only.r   N)r   len)r   r#   rP   	new_valuer*   sizenew_items          r   alterconfig.alter   sU     zz'"3'4y<$qr(*8}$$$#+

7C r   c                   [        U5      S:w  aH  USS u  p#USS nU R                  U   R                  5       U R                  U'   X@R                  U   U'   gUu  p$X R                  ;   a   U R                  U   R                  US5        gg)z$restore data returned by self.backuprW   N)re   r   r5   pop)r   r   r#   rP   r*   s        r   restoreconfig.restore   s    t9>8LG8D"&**W"5"B"B"DDJJw'+JJw$ !MG**$

7#''d3 %r   c           	        [         R                  R                  S5      n[         R                  R                  S5      n[         R                  R                  S5      n[         R                  R                  S5      n	[         R                  R                  S5      n
[         R                  R                  S5      n[         R                  R                  S5      nSnS nS	nS
nU(       a  UR                  X5      nUR	                  S5       GH  nUS-  nUS:X  a  UR                  S5      (       a  USS  nU(       a  U
R                  U5      (       a  MI  UR                  U5      nU(       aM  U(       a  X;  a  Mo  U R                  X5      S-   UR                  S5      -   nU R                  XUSX4-  5        M  S nS
nUR                  U5      nU(       a7  U(       a0  [         R                  " UR                  S5      5      n U" UXCS9  GM  U	R                  U5      (       a  GM  UR                  U5      nU(       aS  UR                  S5      nU(       a  UR                  X5      nX;  a"  [         R&                  " 5       U R(                  U'   GM  UR                  U5      nU(       aK  UR                  S5      nSnU(       a  X;  a  GM  U R                  XUR                  S5      SX4-  5        GM  UR                  U5      nU(       a  UR                  S5      nU(       a  X;  a  GM   U R                  UU5      b:  U R(                  U   R+                  5       U R(                  U'   U R(                  U   U	 U R,                  R/                  UU45        GM  UR1                  5       nUR                  S5      (       a  SU-  n[        R                  " USX4-  5      e   g ! [         ap  nUR                  [        R                  :w  aG  [        R                  " [        S5      U[         R"                  " UR$                  5      4-  SX4-  5      e S nAGNMS nAff = f)Ns   \[([^\[]+)\]s   ([^=\s][^=]*?)\s*=\s*(.*\S|)s   \s+(\S|\S.*\S)\s*$s
   (;|#|\s*$)s   (;|#)s   %unset\s+(\S+)s   %include\s+(\S|\S.*\S)\s*$r   r   FTr   s   ﻿      
s   %s:%dremapr1   s   cannot include %s (%s)rW       s!   unexpected leading whitespace: %s)r
   recompiler(   
splitlines
startswithmatchgrouprb   
expandpathOSErrorerrnoENOENTr	   ConfigErrorr   r   
strtolocalstrerrorr6   r   r5   r   appendrstrip)r   r9   r   r1   rs   include	sectionreitemrecontreemptyre	commentreunsetre	includerer#   r*   linecontlmr?   expandedinstnamemessages                           r   parseconfig.parse   st   GGOO$45	!AB!78''//.1GGOOI.	''//"45GGOO$BC	ii1G&AAIDqyQ\\/::abE??1%%LLOG$; /%7!''!*DAHHWAx3+/EF"AW??1771:6HEE }}Q"A''!*#ii9G&*.*:*:*<DJJw'QAwwqz 7
H{4JKa Awwqz 788GT*6*.**W*=*J*J*LDJJw'

7+D1""GT?3hhjG||D!!>H##Gh#.DFF '.  zzU\\1#//78')<)<T]])KLM${2  2s   O!!
Q+A%QQc                <  ^ ^ T R                  5         U(       d  [        R                  " US5      n[        USS5      S:X  d   SUUR                  4-  5       e[
        R                  R                  U5      mUU 4S jnT R                  XR                  5       X4US9  g )Ns   rbmoderbs=   config files must be opened in binary mode, got fp=%r mode=%rc                   > [         R                  R                  [         R                  R                  TU 5      5      nTR	                  X1US9  TR                  5         g )Nrr   )ospathnormpathjoinreadr   )relrs   r1   absdirr   s       r   r   config.read.<locals>.include   s@    ''""277<<S#9:CIIcI:OOr   )r1   rs   r   )
r   r
   	posixfilegetattrr   r   r   dirnamer   r   )r   r   fpr1   rs   r   r   s   `     @r   r   config.read   s    e,BB%-	
KGGO
 
	
- ggood#	 	

'')hW 	 	
r   )r   r   r   r   )r#   bytesreturnzList[Tuple[bytes, bytes]])r   )NNN)__name__
__module____qualname____firstlineno__r   r   r   r$   r+   r.   r2   rC   rF   r(   rQ   rA   rB   r1   r7   rb   ri   rm   r   r   __static_attributes__ r   r   r   r      sk    H(%3+#/,5
))/P ,4OGb
r   r   )
__future__r   r}   r   typingr   r   i18nr    r   r	   r
   r   r   r   r   <module>r      s0    #  	
  k
 k
r   