U
    楡c%
                     @   s,   d dl Z d dlmZ dZG dd deZdS )    N)
CompoundDB)ReferenceDBc                       sF   e Zd ZdZdZ fddZ fddZdd Zd fd
d	Z  Z	S )r   z7A database consisting of database referred to in a fileNc                    s   t    || _d S N)super__init__	_ref_file)selfZref_file	__class__ 0/tmp/pip-unpacked-wheel-jjg5dubb/gitdb/db/ref.pyr      s    
zReferenceDB.__init__c                    s*   |dkrt  | _|   nt | d S )N_dbs)listr   _update_dbs_from_ref_filer   _set_cache_)r   attrr	   r   r   r      s    
zReferenceDB._set_cache_c           
   	      s*  | j }|d krddlm} |}t  z0tj| jddd}dd |D  W 5 Q R X W n tk
rh   Y nX t }dd	 | j	D }|| D ]6}t
| j	d d  D ]\}}| |kr| j	|= qqqt||  fd
dd}	|	D ]F}z*||}t|tr|  | j	| W q tk
r"   Y qX qd S )Nr   )GitDBrzutf-8)encodingc                 S   s   g | ]}|  qS r   )strip).0lr   r   r   
<listcomp>.   s     z9ReferenceDB._update_dbs_from_ref_file.<locals>.<listcomp>c                 S   s   h | ]}|  qS r   )	root_path)r   dbr   r   r   	<setcomp>4   s     z8ReferenceDB._update_dbs_from_ref_file.<locals>.<setcomp>c                    s
     | S r   )index)pZ	ref_pathsr   r   <lambda>A       z7ReferenceDB._update_dbs_from_ref_file.<locals>.<lambda>)key)ObjectDBClsZgitdb.db.gitr   r   codecsopenr   OSErrorsetr   	enumerater   sorted
isinstancer   Z	databasesappend	Exception)
r   Zdbclsr   fZref_paths_setZcur_ref_paths_setpathir   Zadded_pathsr   r   r   r   "   s4    
z%ReferenceDB._update_dbs_from_ref_fileFc                    s   |    t |S r   )r   r   update_cache)r   forcer	   r   r   r/   O   s    zReferenceDB.update_cache)F)
__name__
__module____qualname____doc__r"   r   r   r   r/   __classcell__r   r   r	   r   r      s   -r   )r#   Zgitdb.db.baser   __all__r   r   r   r   r   <module>   s   