B
    ܇\?                 @   s\   d dl Z d dlZddlmZ d dlmZ efddZdddZd	d
 Z	dd Z
dddZdS )    N   )
UsageError)failc             C   s"   y|   S  |k
r   dS X d S )NF)Zcheck)pathignore r   7lib/python3.7/site-packages/_pytest/config/findpaths.pyexists	   s    r	   c       	      C   s  ddl m} dddg}dd | D } | s4tj g} x| D ]}tj|}x|jdd	D ]}x|D ]}||}t|rbtj	|}d
|j
kr|dkr|dk	rt|j|ddd |||d
 fS |dkrd|j
kr|||d fS |dkrb||i fS qbW qXW q:W dS )z
    Search the list of arguments for a valid ini-file for pytest,
    and return a tuple of (rootdir, inifile, cfg-dict).

    note: config is optional and used only to issue warnings explicitly (#2891).
    r   )CFG_PYTEST_SECTIONz
pytest.iniztox.iniz	setup.cfgc             S   s   g | ]}t |d s|qS )-)str
startswith).0xr   r   r   
<listcomp>   s    zgetcfg.<locals>.<listcomp>T)reversepytestN)filenameF)pytraceztool:pytest)NNN)_pytest.deprecatedr
   pyr   localpartsjoinr	   	iniconfig	IniConfigsectionsr   format)	argsconfigr
   ZinibasenamesargbaseZinibasenamepr   r   r   r   getcfg   s0    






r#   c             C   s   d }x`| D ]X}|  sq
|d kr&|}q
||s
||kr<q
q
||rL|}q
||}|d k	r
|}q
W |d krztj }n| r| }|S )N)r	   Zreltocommonr   r   r   isfiledirpath)pathsZcommon_ancestorr   Zsharedr   r   r   get_common_ancestor7   s$    


r(   c                s>   dd dd dd  fdd| D } fd	d
|D S )Nc             S   s   t | dS )Nr   )r   r   )r   r   r   r   	is_optionO   s    z%get_dirs_from_args.<locals>.is_optionc             S   s   t | dd S )Nz::r   )r   split)r   r   r   r   get_file_part_from_node_idR   s    z6get_dirs_from_args.<locals>.get_file_part_from_node_idc             S   s   |   r| S tj| jS )N)isdirr   r   r   dirname)r   r   r   r   get_dir_from_pathU   s    z-get_dirs_from_args.<locals>.get_dir_from_pathc             3   s&   | ]}|st j |V  qd S )N)r   r   r   )r   r    )r+   r)   r   r   	<genexpr>\   s   z%get_dirs_from_args.<locals>.<genexpr>c                s   g | ]}|  r |qS r   )r	   )r   r   )r.   r   r   r   a   s    z&get_dirs_from_args.<locals>.<listcomp>r   )r   Zpossible_pathsr   )r.   r+   r)   r   get_dirs_from_argsN   s    r0   c          	   C   s  t |}| rtj| }t| d}|r2ddgndg}xl|D ]d}yF|| }	|r|dkr|d k	rddlm}
 t|
j	t| ddd P W q> t
k
r   d }	Y q>X q>W |d krt|}nt|}t|g|d	\}} }	|d kr|d krx|jd
dD ]}|d r|}P qW ||gkr0t||d	\}} }	|d kr|d k	rL|j}n
tj }t||g}tjt|d dk}|r|}|rtjtj|}| std	||| |	pi fS )Nz.cfgztool:pytestr   r   )r
   )r   F)r   )r   T)r   zsetup.pyr   /z8Directory '{}' not found. Check your '--rootdir' option.)r0   r   r   r   r   endswithr   r
   r   r   KeyErrorr(   r#   r   r   r	   Zinvocation_dirr   r   os
splitdrive
expandvarsr,   r   )Zinifiler   Zrootdir_cmd_argr   dirsr   Zis_cfg_filer   ZsectionZinicfgr
   ZrootdirZancestorZpossible_rootdircwdZ
is_fs_rootr   r   r   determine_setupd   sR    





r9   )N)NN)r4   r   
exceptionsr   Z_pytest.outcomesr   EnvironmentErrorr	   r#   r(   r0   r9   r   r   r   r   <module>   s   
'