3
_AfC                 @   sH   d dl Z d dlmZ d dlZdZdZdZdZdZdZ	G d	d
 d
e
ZdS )    N)TraceHEADzrefs/changes/zrefs/heads/z
refs/tags/zrefs/published/zrefs/remotes/m/c               @   sh   e Zd Zdd Zedd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )GitRefsc             C   s   || _ d | _d | _i | _d S )N)_gitdir_phyref_symref_mtime)selfgitdir r   :/home/qytech/356xLinux510-101server/.repo/repo/git_refs.py__init__   s    zGitRefs.__init__c             C   s   | j   | jS )N)_EnsureLoadedr   )r	   r   r   r   all$   s    zGitRefs.allc             C   s$   y
| j | S  tk
r   dS X d S )N )r   KeyError)r	   namer   r   r   get)   s    
zGitRefs.getc             C   sD   | j d k	r@|| j kr| j |= || jkr.| j|= || jkr@| j|= d S )N)r   r   r   )r	   r   r   r   r   deleted/   s    



zGitRefs.deletedc             C   s,   y| j   | j| S  tk
r&   dS X d S )Nr   )r   r   r   )r	   r   r   r   r   symref:   s
    
zGitRefs.symrefc             C   s   | j d ks| j r| j  d S )N)r   _NeedUpdate_LoadAll)r	   r   r   r   r   A   s    zGitRefs._EnsureLoadedc             C   sb   t d| j xP| jj D ]B\}}y$|tjjtjj| j|krBdS W q tk
rX   dS X qW dS )Nz: scan refs %sTF)	r   r   r   itemsospathgetmtimejoinOSError)r	   r   mtimer   r   r   r   E   s    
zGitRefs._NeedUpdatec             C   s   t d| j i | _i | _i | _| j  | jd | jtj	j
| jtt | j}d}xZ|r|dk ri }x8|j D ],\}}|| jkr| j| | j|< qn|||< qnW |}|d7 }qTW d S )Nz: load refs %szrefs/r         )r   r   r   r   r   _ReadPackedRefs
_ReadLoose_ReadLoose1r   r   r   r   r   )r	   scanZattemptsZ	scan_nextr   destr   r   r   r   P   s"    

zGitRefs._LoadAllc             C   s   t jj| jd}yt|d}t jj|}W n& tk
r>   d S  tk
rP   d S X zfx`|D ]X}t|}|d dkrtqZ|d dkrqZ|d d }|j	d}|d }|d }|| j
|< qZW W d |j  X || jd< d S )	Nzpacked-refsrr   #^r     )r   r   r   r   openr   IOErrorr   strsplitr   closer   )r	   r   fdr   linepref_idr   r   r   r   r!   g   s,    



zGitRefs._ReadPackedRefsc             C   s   t jj| j|}xltj|D ]^}t jj||}tj|r^t jj|| j|< | j	|| d  q|j
drjq| j|||  qW d S )N/z.lock)r   r   r   r   platform_utilslistdirisdirr   r   r"   endswithr#   )r	   prefixbaser   r2   r   r   r   r"      s    

zGitRefs._ReadLoosec             C   s   y,t |}tjj|}|j }W d Q R X W n ttfk
rD   d S X y|j }W n tk
rf   Y nX |spd S |d d }|j	dr|dd  | j
|< n
|| j|< || j|< d S )Nr    zref: r   r*   )r+   r   r   r   readliner,   r   decodeAttributeError
startswithr   r   r   )r	   r   r   r0   r   r3   r   r   r   r#      s"    


zGitRefs._ReadLoose1N)__name__
__module____qualname__r   propertyr   r   r   r   r   r   r   r!   r"   r#   r   r   r   r   r      s   r   )r   
repo_tracer   r5   r   Z	R_CHANGESZR_HEADSZR_TAGSZR_PUBZR_Mobjectr   r   r   r   r   <module>   s   