
    q&f"                     X    d dl Z d dlZd dlmZmZ ddlmZ ddlmZm	Z	m
Z
  G d d      Zy)    N)ListTuple   )_)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edeeeef      fdZddZd Zd ZddZddZy)configNc                     d| _         i | _        g | _        |rF|j                  D ]"  }||   j                         | j                  |<   $ |j                   dz   | _         y y )Nr   r   )_current_source_level_data_unsetcopy)selfdataks      2/usr/lib/python3/dist-packages/mercurial/config.py__init__zconfig.__init__   s]    %&"
ZZ / $Q

1/)-)C)Ca)GD&     c                 .    | xj                   dz  c_         y)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                   j                  |i       v S r   r   getr   r   items      r   hasitemzconfig.hasitem/   s    tzz~~gr222r   c                 :    | j                   j                  |i       S r   r!   r   s     r   __getitem__zconfig.__getitem__2   s    zz~~gr**r   c              #   >   K   | j                         D ]  }|  y wr   )sections)r   ds     r   __iter__zconfig.__iter__5   s       	AG	s   c                    | j                   }|dz  }| j                   }|j                  D ]V  \  }}| j                  j                  |d       }|%||v s*|j	                         | j                  |<   | j                  |   |= X |D ]  }| j                  j                  |d       }|r|j	                         | j                  |<   n!t        j                         | j                  |<   |j                  |   j                         D ]1  \  }}|\  }	}
}||z  }t        ||      }|	|
|f| j                  |   |<   3  || _         y )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.update9   s7   22..	JJ 	%DAq4(B~!r' " 1

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

1 $ 0 0 2

1		!**, :1'($vu&}5	$)65#9

1a 	:
	: &/"r   c                 X    | j                   j                  |i       j                  |      S r   r!   r#   s      r   _getzconfig._getO   s"    zz~~gr*..t44r   c                 8    | j                  ||      }||S |d   S Nr   r=   )r   r   r$   defaultresults        r   r"   z
config.getR   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.backupX   sF    
	)::g&s+D S>D((  	"S>!	"s    ++c                 6    | j                  ||      }|y|d   S )Nr   r   r@   r   r   r$   rB   s       r   r9   zconfig.sourced   s$    7D)>ayr   c                 6    | j                  ||      }|y |d   S )N   r@   rH   s       r   r:   zconfig.levelj   s$    7D)>ayr   c                 H    t        | j                  j                               S r   )sortedr   keysr   s    r   r)   zconfig.sectionsp   s    djjoo'((r   r   returnc                     | j                   j                  |i       j                         }|D cg c]  \  }}||d   f c}}S c c}}w r?   )r   r"   r/   )r   r   r/   r   r7   s        r   r/   zconfig.itemss   s?    

w+113(-.fq!AaD	...s   Ac                 l   t        |t              rJ d       t        |t              rJ d       t        |t              rJ d       || vr"t        j                         | j                  |<   n*| j                  |   j                         | j                  |<   ||| j                  f| j                  |   |<   y )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$   r8   r9   s        r   setz
config.setw   s    S
 	DC	D 
 #
 	A@	A 
 3
 	CB	C 
 $"&"2"2"4DJJw"&**W"5"B"B"DDJJw%*FD4N4N$O

7D!r   c                     | j                   |   |   }t        |      }|f|dd z   }t        |      |k(  sJ || j                   |   |<   y)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   rE   	new_valuer$   sizenew_items          r   alterzconfig.alter   sW     zz'"3'4y<$qr(*8}$$$#+

7C r   c                    t        |      dk7  rJ|dd \  }}|dd }| j                  |   j                         | j                  |<   || j                  |   |<   y|\  }}|| j                  v r | j                  |   j                  |d       yy)z$restore data returned by self.backuprJ   N)rU   r   r-   pop)r   r   r   rE   r$   s        r   restorezconfig.restore   s    t9>8LGS8D"&**W"5"B"B"DDJJw'+DJJw$ !MGT$**$

7#''d3 %r   c           	         t         j                  j                  d      }t         j                  j                  d      }t         j                  j                  d      }t         j                  j                  d      }	t         j                  j                  d      }
t         j                  j                  d      }t         j                  j                  d      }d}d }d	}d
}|r|j                  ||      }|j	                  d      D ]{  }|dz  }|dk(  r|j                  d      r|dd  }|rq|
j                  |      r8|j                  |      }|rH|r||vrR| j                  ||      dz   |j                  d      z   }| j                  |||d||fz         d }d
}|j                  |      }|r3|r1t        j                  |j                  d            }	  ||||       |	j                  |      r|j                  |      }|rL|j                  d      }|r|j                  ||      }|| vr!t        j&                         | j(                  |<   N|j                  |      }|rE|j                  d      }d}|r||vr|| j                  |||j                  d      d||fz         |j                  |      }|r|j                  d      }|r||vr| j                  ||      :| j(                  |   j+                         | j(                  |<   | j(                  |   |= | j,                  j/                  ||f       =|j1                         }|j                  d      rd|z  }t        j                  |d||fz         y # t        $ rn}|j                  t        j                  k7  rFt        j                  t        d      |t!        j"                  |j$                        fz  d||fz        Y d }~d }~ww xY w)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)rJ       s!   unexpected leading whitespace: %s)r	   recompiler"   
splitlines
startswithmatchgrouprS   
expandpathIOErrorerrnoENOENTr   ConfigErrorr   r   
strtolocalstrerrorr.   r   r-   r   appendrstrip)r   r1   r   r)   ra   include	sectionreitemrecontreemptyre	commentreunsetre	includerer   r$   linecontlmr7   expandedinstnamemessages                           r   parsezconfig.parse   s   GGOO$45	!AB!78''//.1GGOOI.	''//"45GGOO$BC	ii1G& ?	GAAIDqyQ\\/:abE??1%LLOG8$; $/%7!''!*DAHHWdAx3+/EF"AW??1771:6HEHE }}Q"A''!*#ii9G$&*.*:*:*<DJJw'QAwwqzx 7$
HT{4JKa Awwqzx 788GT*6*.**W*=*J*J*LDJJw'

7+D1""GT?3hhjG||D!>H##Gh#t.DFF?	G.  zzU\\1#//78')<)<T]])KLM$T{2  2s   N	O>A#O99O>c                 6     j                          |st        j                  |d      }t        |dd      dk(  sJ d||j                  fz         t
        j                  j                  |       fd} j                  ||j                         |||       y )Ns   rbmoderbs=   config files must be opened in binary mode, got fp=%r mode=%rc                     t         j                  j                  t         j                  j                  |             }j	                  |||       j                          y )Nr`   )ospathnormpathjoinreadr   )relra   r)   absdirr   s       r   rr   zconfig.read.<locals>.include   sB    ''""277<<S#9:CIIcI:OOr   )r)   ra   rr   )
r   r	   	posixfilegetattrr   r   r   dirnamer   r   )r   r   fpr)   ra   rr   r   s   `     @r   r   zconfig.read   s    e,BB%-	
KGGO
 
	
- ggood#	 	

"'')heW 	 	
r   r   )r   )NNN)__name__
__module____qualname__r   r   r   r   r%   r'   r+   r;   r=   r"   rF   r9   r:   r)   bytesr   r   r/   rS   rY   r\   r   r    r   r   r   r      s    H(%3+/,5
))/U /tE%,,?'@ /P ,4OGb
r   r   )rk   r   typingr   r   i18nr    r   r   r	   r   r   r   r   <module>r      s-     	
  l
 l
r   