
    	^c!                     \    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	  G d d          Z
dS )    N   )_)getattr)encodingerrorutilc                       e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 ZddZd Zd Zd Zd Zd ZddZd Zd ZddZddZdS )configNc                     d| _         i | _        g | _        |r=|j        D ]$}||                                         | j        |<   %|j         dz   | _         d S d S )Nr   r   )_current_source_level_data_unsetcopy)selfdataks      2/usr/lib/python3/dist-packages/mercurial/config.py__init__zconfig.__init__   sm    %&"
 	HZ / / $Q
1)-)Ca)GD&&&	H 	H    c                 &    | xj         dz  c_         dS )zYincrement the source counter

        This is used to define source priority when readingr   N)r   r   s    r   
new_sourcezconfig.new_source   s     	""a'""""r   c                      t          |           S N)r
   r   s    r   r   zconfig.copy%   s    d||r   c                     || j         v S r   )r   r   sections     r   __contains__zconfig.__contains__(   s    $*$$r   c                 <    || j                             |i           v S r   r   getr   r   items      r   hasitemzconfig.hasitem+   s    tz~~gr2222r   c                 8    | j                             |i           S r   r    r   s     r   __getitem__zconfig.__getitem__.   s    z~~gr***r   c              #   @   K   |                                  D ]}|V  d S r   )sections)r   ds     r   __iter__zconfig.__iter__1   s2       	 	AGGGG	 	r   c                 D   | j         }|dz  }| j         }|j        D ]P\  }}| j                            |d           }|.||v r*|                                | j        |<   | j        |         |= Q|D ]}| j                            |d           }|r|                                | j        |<   nt          j                    | j        |<   |j        |                                         D ]3\  }}|\  }	}
}||z  }t          ||          }|	|
|f| j        |         |<   4|| _         d S )Nr   )	r   r   r   r!   preparewriter   cowsortdictitemsmax)r   srccurrent_level	max_levelsndsr   vvaluesourcelevels               r   updatezconfig.update5   sG   2.	J 	% 	%DAq4((B~!r'' " 1 1
1JqM!$ 
	: 
	:A4((B 3 " 1 1
1 $ 0 2 2
1	!**,, : :1'($vu&}55	$)65#9
1a  	:
 &/"""r   c                 ^    | j                             |i                               |          S r   r    r"   s      r   _getzconfig._getK   s&    z~~gr**..t444r   c                 F    |                      ||          }||S |d         S )Nr   r<   )r   r   r#   defaultresults        r   r!   z
config.getN   s)    7D))>Nayr   c                 `    	 | j         |         |         }||f|z   S # t          $ r ||fcY S w xY w)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   backupzconfig.backupT   sV    
	):g&s+D S>D((  	" 	" 	"S>!!!	"s    --c                 F    |                      ||          }|dS |d         S )Nr   r   r>   r   r   r#   r@   s       r   r8   zconfig.source`   s)    7D))>3ayr   c                 F    |                      ||          }|d S |d         S )N   r>   rF   s       r   r9   zconfig.levelf   s)    7D))>4ayr   c                 N    t          | j                                                  S r   )sortedr   keysr   s    r   r(   zconfig.sectionsl   s    djoo''(((r   c                 t    | j                             |i                                           }d |D             S )Nc                 (    g | ]\  }}||d          fS )r    ).0r   r6   s      r   
<listcomp>z config.items.<locals>.<listcomp>q   s$    ...fq!AaD	...r   )r   r!   r.   )r   r   r.   s      r   r.   zconfig.itemso   s7    
w++1133......r   r   c                 ~   t          |t                    r
J d            t          |t                    r
J d            t          |t                    r
J d            || vrt          j                    | j        |<   n'| j        |                                         | j        |<   ||| j        f| j        |         |<   d S )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   r-   r   r,   r   )r   r   r#   r7   r8   s        r   setz
config.sets   s   S
 
 	D 	DC	D 	D 	D #
 
 	A 	A@	A 	A 	A 3
 
 	C 	CB	C 	C 	C $"&"2"4"4DJw"&*W"5"B"B"D"DDJw%*FD4N$O
7D!!!r   c                     | j         |         |         }t          |          }|f|dd         z   }t          |          |k    sJ || j         |         |<   dS )zsalter 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   rC   	new_valuer#   sizenew_items          r   alterzconfig.alter   sb     z'"3'4yy<$qrr(*8}}$$$$#+
7C   r   c                 .   t          |          dk    rP|dd         \  }}|dd         }| j        |                                         | j        |<   || j        |         |<   dS |\  }}|| j        v r#| j        |                             |d           dS dS )z$restore data returned by self.backuprH   N)rV   r   r,   pop)r   r   r   rC   r#   s        r   restorezconfig.restore   s    t99>>8LGS8D"&*W"5"B"B"D"DDJw'+DJw$$$ !MGT$*$$
7#''d33333 %$r   c           	         t           j                            d          }t           j                            d          }t           j                            d          }t           j                            d          }	t           j                            d          }
t           j                            d          }t           j                            d          }d}d }d	}d
}|r|                    ||          }|                    d          D ]<}|dz  }|dk    r|                    d          r
|dd          }|r|
                    |          rE|                    |          }|rT|r||vrc|                     ||          dz   |                    d          z   }|                     |||d||fz             d }d
}|                    |          }|r|rt          j	        |                    d                    }	  ||||           no# t          $ rb}|j        t          j        k    rCt          j        t          d          |t!          j        |j                  fz  d||fz            Y d }~nd }~ww xY wu|	                    |          r|                    |          }|rN|                    d          }|r|                    ||          }|| vrt          j                    | j        |<   |                    |          }|rQ|                    d          }d}|r||vr'|                     |||                    d          d||fz             Y|                    |          }|r|                    d          }|r||vr|                     ||          5| j        |                                         | j        |<   | j        |         |= | j                            ||f           |                                }|                    d          rd|z  }t          j        |d||fz            d S )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remapr(   s   cannot include %s (%s)rH       s!   unexpected leading whitespace: %s)r   recompiler!   
splitlines
startswithmatchgrouprT   
expandpathIOErrorerrnoENOENTr   ConfigErrorr   r   
strtolocalstrerrorr-   r   r,   r   appendrstrip)r   r0   r   r(   rb   include	sectionreitemrecontreemptyre	commentreunsetre	includerer   r#   linecontlmr6   expandedinstnamemessages                           r   parsezconfig.parse   sg   GOO$455	!ABB!788'//.11GOOI..	'//"455GOO$BCC	 	2ii11G&& ?	G ?	GAAIDqyyQ\\/::yabbE ??1%% LLOO  !G8$;$; $//%7!''!**DAHHWdAx3+/EFFF""A W ?1771::66GHEHEEEEE   zU\11#/788')<T])K)KLM$T{2   21111 }}Q ""A ''!** :#ii99G$&&*.*:*<*<DJw'QA wwqzz x 7 7$

HT{4JKKKa  A wwqzz x 7 788GT**6*.*W*=*J*J*L*LDJw'
7+D1""GT?333hhjjG||D!! I>H#Gh#t.DFFF?	G ?	Gs   H
I?AI::I?c                 T                                       |st          j        |d          }t          |dd          dk    sJ d||j        fz              t
          j                            |           fd}                     ||	                                |||           d S )Ns   rbmoderbs=   config files must be opened in binary mode, got fp=%r mode=%rc                     t           j                            t           j                            |                     }                    |||                                            d S )Nra   )ospathnormpathjoinreadr   )relrb   r(   absdirr   s       r   rs   zconfig.read.<locals>.include   sV    '""27<<S#9#9::CIIcI:::OOr   )r(   rb   rs   )
r   r   	posixfiler   r   r   r   dirnamer   r   )r   r   fpr(   rb   rs   r   s   `     @r   r   zconfig.read   s     	-e,,BB%%---KGO
 
 .-- good##	 	 	 	 	 	 	

"''))heW 	 	
 	
 	
 	
 	
r   r   )r   )NNN)__name__
__module____qualname__r   r   r   r   r$   r&   r*   r:   r<   r!   rD   r8   r9   r(   r.   rT   rZ   r]   r   r   rN   r   r   r
   r
      sj       H H H H( ( (  % % %3 3 3+ + +  / / /,5 5 5   
) 
) 
)    ) ) )/ / /P P P P , , ,4 4 4OG OG OG OGb
 
 
 
 
 
r   r
   )rl   r   i18nr   pycompatr    r   r   r   r
   rN   r   r   <module>r      s     				                     l
 l
 l
 l
 l
 l
 l
 l
 l
 l
r   