o ]LbX"@s`ddlmZddlZddlZddlmZddlmZddlm Z m Z mZm Z Gddde Z dS) )absolute_importN)_)getattr)encodingerrorpycompatutilc@seZdZd+ddZddZddZdd Zd d Zd d ZddZ ddZ ddZ d+ddZ ddZ ddZddZddZddZd,d!d"Zd#d$Zd%d&Zd-d'd(Zd-d)d*ZdS).configNcCsHd|_i|_g|_|r"|jD] }|||j|<q|jd|_dSdS)Nrr)_current_source_level_data_unsetcopy)selfdatakr2/usr/lib/python3/dist-packages/mercurial/config.py__init__s zconfig.__init__cCs|jd7_dS)zYincrement the source counter This is used to define source priority when readingrN)r rrrr new_source!szconfig.new_sourcecCst|SN)r rrrrr'sz config.copycCs ||jvSr)r rsectionrrr __contains__*s zconfig.__contains__cCs||j|ivSrr getrritemrrrhasitem-szconfig.hasitemcCs|j|iSrrrrrr __getitem__0zconfig.__getitem__ccs|D]}|VqdSr)sections)rdrrr__iter__3s zconfig.__iter__c Cs|j}|d7}|j}|jD] \}}|j|d}|dur-||vr-||j|<|j||=q |D]>}|j|d}|rC||j|<nt|j|<|j|D]\}}|\} } } | |7} t| |}| | | f|j||<qQq0||_dS)Nr) r r r r preparewriter cowsortdictitemsmax) rsrc current_level max_levelsndsrvvaluesourcelevelrrrupdate7s*    z config.updatecCs|j|i|Srrrrrr_getMsz config._getcCs |||}|dur |S|dS)Nrr4)rrrdefaultresultrrrrP z config.getcCs:z |j||}Wn ty||fYSw||f|S)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)rrkeyrrrrbackupVs    z config.backupcCs |||}|dur dS|dS)Nrr5rrrr7rrrr1br8z config.sourcecCs |||}|dur dS|dS)Nr5r=rrrr2hr8z config.levelcCst|jSr)sortedr keysrrrrr"nr!zconfig.sectionscCs"t|j|i}dd|DS)NcSsg|] \}}||dfqS)rr).0rr/rrr ssz config.items..)r iteritemsr r)rrr'rrrr'qsz config.itemsr<cCstjrt|tr Jdt|trJdt|trJd||vr*t|j|<n |j||j|<|||jf|j||<dS)Ns5config section may not be unicode strings on Python 3s2config item may not be unicode strings on Python 3s4config values may not be unicode strings on Python 3) rispy3 isinstancestrr r&r r%r )rrrr0r1rrrsetus(z config.setcCsJ|j||}t|}|f|dd}t||ksJ||j||<dS)zsalter a value without altering its source or level This method is meant to be used by `ui.fixconfig` only.rN)r len)rrr: new_valuersizenew_itemrrralters z config.altercCszt|dkr'|dd\}}|dd}|j||j|<||j||<dS|\}}||jvr;|j||ddSdS)z$restore data returned by self.backupr>N)rHr r%pop)rrrr:rrrrrestores   zconfig.restorec Cstjd}tjd}tjd}tjd} tjd} tjd} tjd} d} d}d }d }|r:|| | } |d D].}|d 7}|d krU|d rU|dd}|r| |r]q?||}|r|rk| |vrkq?|| |d|d }|| ||d||fq?d}d }| |}|r|rt |d }z ||||dWn,t y}z |j t j krt td|t|jfd||fWYd}~nd}~wwq?| |rq?||}|r|d } |r|| | } | |vrt|j| <q?||}|r|d }d }|r| |vrq?|| ||dd||fq?| |}|rW|d }|r5| |vr5q?|| |durN|j| |j| <|j| |=|j| |fq?|}|dred|}t |d||fdS)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<rFTrs s%s:%dremapr"scannot include %s (%s)r> s!unexpected leading whitespace: %s)r recompiler splitlines startswithmatchgrouprG expandpathIOErrorerrnoENOENTr ConfigErrorrr strtolocalstrerrorr&r r%r appendrstrip)rr)rr"rRinclude sectionreitemrecontreemptyre commentreunsetre includererrlinecontlmr/expandedinstnamemessagerrrparses                          z config.parsecsp|s t|d}t|dddksJd||jftj|fdd}j|| |||ddS)Nsrbmoderbs=config files must be opened in binary mode, got fp=%r mode=%rcs2tjtj|}j|||ddS)NrQ)ospathnormpathjoinreadr)relrRr"absdirrrrrcs zconfig.read..include)r"rRrc) rr posixfilerrtrvrwdirnamersrz)rrwfpr"rRrcrr}rrzs   z config.readr)r<)NNN)__name__ __module__ __qualname__rrrrrr r$r3r4rr;r1r2r"r'rGrLrNrsrzrrrrr s*      Qr ) __future__rr\rvi18nrrrrrr objectr rrrrs