o
    Uhq#                     @   s   d Z ddlZddlmZmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZmZmZmZ d	d
 ZG dd dZG dd dejZdS )z!Fast export/import functionality.    N)commandsparser	processor)errors   )commit_tree)iter_tree_contents)ZERO_SHABlobCommitTagc                 C   s   |  dd\}}||dfS )N    <r      >)rsplitrstrip)textnameemail r   f/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/dulwich/fastexport.pysplit_email#   s   r   c                   @   sX   e Zd ZdZdddZdddZdd	 Zd
d Zdd Zdd Z	dddZ
dddZdS )GitFastExporterz5Generate a fast-export output stream for Git objects.returnNc                 C   s   || _ || _i | _d| _d S )Nr   )outfstoremarkers_marker_idx)selfr   r   r   r   r   __init__+   s   
zGitFastExporter.__init__c                 C   s    | j t|d|j d  d S )N	__bytes__   
)r   writegetattr__repr__r   cmdr   r   r   	print_cmd1   s    zGitFastExporter.print_cmdc                 C   s   |  j d7  _ t| j dS )Nr   ascii)r   strencode)r   r   r   r   _allocate_marker4   s   z GitFastExporter._allocate_markerc                 C   s&   |   }|j| j|< t||j|fS N)r*   idr   r   BlobCommanddata)r   blobmarkerr   r   r   _export_blob8   s   zGitFastExporter._export_blobc                 C   s   |  |\}}| | |S r+   )r1   r&   )r   r/   r%   r0   r   r   r   	emit_blob=   s   
zGitFastExporter.emit_blobc                 c   s    | j ||D ]I\\}}\}}\}}|d u rt|V  qt|s-| j | }	| |	}
||kr<|d ur<t||V  ||ksD||krQd|
 }t|||d V  qd S )N   :)	r   tree_changesr   FileDeleteCommandstatS_ISDIRr2   FileRenameCommandFileModifyCommand)r   	base_treenew_treeold_pathnew_pathold_modenew_mode
old_hexsha
new_hexshar/   r0   prefixed_markerr   r   r   _iter_filesB   s*   


zGitFastExporter._iter_filesc              
   C   s   t | ||j}|  }|jr|jd }|jdd  }nd }g }t|j\}}	t|j\}
}t	||||	|j
|jf|
||j|jf|j|||}||fS )Nr   r   )listrC   treer*   parentsr   author	committerr   CommitCommandauthor_timeauthor_timezonecommit_timecommit_timezonemessage)r   commitrefr:   	file_cmdsr0   from_mergesrG   author_emailrH   committer_emailr%   r   r   r   _export_commitV   s0   
zGitFastExporter._export_commitc                 C   s    |  |||\}}| | |S r+   )rV   r&   )r   rO   rP   r:   r%   r0   r   r   r   emit_commitr   s   
zGitFastExporter.emit_commitr   Nr+   )__name__
__module____qualname____doc__r   r&   r*   r1   r2   rC   rV   rW   r   r   r   r   r   (   s    


r   c                   @   sz   e Zd ZdZddddZdd Zd	d
 ZdddZdddZdddZ	dddZ
dddZdddZdddZdd ZdS )GitImportProcessorzEAn import processor that imports into a Git repository using Dulwich.NFr   c                 C   s,   t j| || || _t| _i | _i | _d S r+   )r   ImportProcessorr   repor	   last_commitr   	_contents)r   r_   paramsverboser   r   r   r   r   }   s
   
zGitImportProcessor.__init__c                 C   s    | dr| j|dd   S |S )Nr3   r   )
startswithr   )r   	objectishr   r   r   lookup_object   s   
z GitImportProcessor.lookup_objectc                 C   s   t |}| |j | jS r+   )r   ImportParserprocessiter_commandsr   )r   streampr   r   r   import_stream   s   
z GitImportProcessor.import_streamc                 C   s6   t |j}| jj| |jr|j| j|j< dS dS )zProcess a BlobCommand.N)	r
   from_stringr.   r_   object_store
add_objectmarkr,   r   )r   r%   r/   r   r   r   blob_handler   s
   zGitImportProcessor.blob_handlerc                 C      dS )zProcess a CheckpointCommand.Nr   r$   r   r   r   checkpoint_handler       z%GitImportProcessor.checkpoint_handlerc                 C   s(  t  }|jdur|j}n|j}|\}}}}|j\}}	}
}|d | d |_||_t||_|d |	 d |_||_t|
|_|j|_g |_	|j
rU| |j
|_
| |j
 | D ]n}|jdkr|jdurvt|j}| jj| |j}n| |j}|j|f| j|j< qY|jdkr| j|j= qY|jdkr| j|j | j|j< qY|jdkr| j|j | j|j< | j|j= qY|jdkri | _qYtd	|j d
t| jjdd | j  D |_!| j"t#kr|j	$| j" |j%D ]}|j	$| | q| jj&| |j| j|j'< |j| _"|j(r|j| j)|j(< dS dS )zProcess a CommitCommand.Nr   r   s
   filemodifys
   filedeletes   filecopys
   filerenames   filedeleteallzCommand z not supportedc                 s   s"    | ]\}\}}|||fV  qd S r+   r   ).0pathmodehexshar   r   r   	<genexpr>   s     z4GitImportProcessor.commit_handler.<locals>.<genexpr>)*r   rG   rH   rK   intrJ   rM   rL   rN   rF   rR   rf   _reset_base
iter_filesr   r.   r
   rm   r_   rn   addr,   datarefrw   ra   rv   src_path	dest_pathr<   r=   	Exceptionr   itemsrE   r`   r	   appendrS   ro   rP   rp   r   )r   r%   rO   rG   author_namerT   author_timestamprK   committer_namerU   commit_timestamprM   filecmdr/   blob_idmerger   r   r   commit_handler   sl   










z!GitImportProcessor.commit_handlerc                 C   rr   )zProcess a ProgressCommand.Nr   r$   r   r   r   progress_handler   rt   z#GitImportProcessor.progress_handlerc                 C   s^   | j |krd S i | _|| _ |tkr+| j| j}t| jj|D ]\}}}||f| j|< qd S d S r+   )r`   ra   r	   r_   rE   r   rn   )r   	commit_idtree_idrv   rw   rx   r   r   r   r{      s   
zGitImportProcessor._reset_basec                 C   s8   |j du rt}n| |j }| | || jj|j< dS )zProcess a ResetCommand.N)rR   r	   rf   r{   r_   refsrP   )r   r%   rR   r   r   r   reset_handler   s
   

z GitImportProcessor.reset_handlerc                 C   sB   t  }|j|_|j|_|j|_| j| |j| jjd|j < dS )zProcess a TagCommand.z
refs/tags/N)	r   taggerrN   tagr   r_   ro   r,   r   )r   r%   r   r   r   r   tag_handler   s   zGitImportProcessor.tag_handlerc                 C   s   t |j)zProcess a FeatureCommand.)fastimport_errorsUnknownFeaturefeature_namer$   r   r   r   feature_handler   s   z"GitImportProcessor.feature_handler)NFNrX   )rY   rZ   r[   r\   r   rf   rl   rq   rs   r   r   r{   r   r   r   r   r   r   r   r]   x   s    



;


		r]   )r\   r6   
fastimportr   r   r   r   r   indexr   rn   r   objectsr	   r
   r   r   r   r   r^   r]   r   r   r   r   <module>   s   P