�
�c@s%ddkZd�Zed�ZdS(i�Nc
Csg}d|jo+|id�}||d}|| }nti|||�\}}g}x�|o�|id�}|oc|ddjoRt|�djo?|id|�ti|||�\}} ||}| }qb|i|�qbW|i|�||fS(s�Parse options mostly like getopt.gnu_getopt.
This is different from getopt.gnu_getopt in that an argument of - will
become an argument of - instead of vanishing completely.
s--iit-(tindextgetopttpoptlentinserttappendtextend(
targstoptionstlongoptionst extraargst stopindextoptst parseargstargttoptstnewparseargs((s./mercurial/fancyopts.pyt gnugetopt
s"
+
cCspg}d}h}h}x|D]\}} }
}| }| idd�} | |d|<|d|<|
|| <t|
t�o|
|| <n)t|
d�od || <n|
|| <|
d jp|
tjp
|
tjp.|o|d7}n|o|d7}q n|o||7}n| o|i|�qqW|o
t}
n
t i }
|
|||�\}}x�D]�}}||} t
|| �}|t
t�jo|| |�|| <qs|t
d�jot|�|| <qs|t
d�jo||| <qs|t
g�jo|| i|�qs|t
d �jp|t
t�jot|| <qsqsW|S(
s�
read args, parse options, and store options in state
each option is a tuple of:
short option or ''
long option
default value
description
option types include:
boolean or none - option sets variable in state to true
string - parameter string is stored in state
list - parameter string is added to a list
integer - parameter strings is stored as int
function - call function with parameter
non-option args are returned
tRt_s--t__call__t:t=iN(
treplacet
isinstancetlistthasattrtNonetTruetFalseRRRttypet fancyoptstint(RR tstatetgnutnamelistt shortlisttargmaptdefmaptshorttnametdefaulttcommenttonametparseR
topttvaltt((s./mercurial/fancyopts.pyR $sR
'
&(RRRR (((s./mercurial/fancyopts.pys<module>s
|