
    d"                         d Z ddlZddlmZ ddlmZ ddlmZmZ ddlm	Z	 ddl
mZ dd	lmZmZmZmZ d
 Z G d d          Z G d dej                  ZdS )z!Fast export/import functionality.    N)commands)errors)parser	processor   )commit_tree)iter_tree_contents)ZERO_SHABlobCommitTagc                 b    |                      dd          \  }}||                    d          fS )N    <r      >)rsplitrstrip)textnameemails      V/home/feoh/.local/pipx/venvs/poetry/lib/python3.11/site-packages/dulwich/fastexport.pysplit_emailr   #   s0    KKq))MT5%,,t$$%%    c                   F    e Zd ZdZd Zd Zd Zd Zd Zd Z	dd	Z
dd
ZdS )GitFastExporterz5Generate a fast-export output stream for Git objects.c                 >    || _         || _        i | _        d| _        d S )Nr   )outfstoremarkers_marker_idx)selfr   r   s      r   __init__zGitFastExporter.__init__+   s%    	
r   c                 x    | j                              t          |d|j                              dz              d S )N	__bytes__   
)r   writegetattr__repr__r    cmds     r   	print_cmdzGitFastExporter.print_cmd1   s8    	?[#,??AAEIJJJJJr   c                 ^    | xj         dz  c_         d| j         fz                      d          S )Nr   z%dascii)r   encode)r    s    r   _allocate_markerz GitFastExporter._allocate_marker4   s5    A(**227;;;r   c                     |                                  }|j        | j        |<   t          j        ||j                  |fS N)r.   idr   r   BlobCommanddata)r    blobmarkers      r   _export_blobzGitFastExporter._export_blob8   s;    &&((#wV$VTY77@@r   c                 `    |                      |          \  }}|                     |           |S r0   )r6   r*   )r    r4   r)   r5   s       r   	emit_blobzGitFastExporter.emit_blob=   s0    ))$//fsr   c              #     K   | j                             ||          D ]\  \  }}\  }}\  }}|t          j        |          V  (t	          j        |          s"| j         |         }	|                     |	          }
||k    r|t          j        ||          V  ||k    s||k    rd|
z   }t          j        |||d           V  d S )N   :)	r   tree_changesr   FileDeleteCommandstatS_ISDIRr8   FileRenameCommandFileModifyCommand)r    	base_treenew_treeold_pathnew_pathold_modenew_mode
old_hexsha
new_hexshar4   r5   prefixed_markers               r   _iter_fileszGitFastExporter._iter_filesB   s
     
 Z$$Y99		 	 
 Xx Xx$Z0:::::<)) .z*---8##(<08DDDDD8##zZ'?'?"&-0h    	 	r   Nc           
         t          |                     ||j                            }|                                 }|j        r|j        d         }|j        dd          }nd }g }t          |j                  \  }}	t          |j                  \  }
}t          j	        ||||	|j
        |j        f|
||j        |j        f|j        |||          }||fS )Nr   r   )listrJ   treer.   parentsr   author	committerr   CommitCommandauthor_timeauthor_timezonecommit_timecommit_timezonemessage)r    commitrefrA   	file_cmdsr5   from_mergesrO   author_emailrP   committer_emailr)   s                r   _export_commitzGitFastExporter._export_commitV   s    )))V[AABB	&&((> 	N1%E^ABB'FFEF*6=99%01A%B%B"	?$\6#5v7MN"&	 N
 
 V}r   c                 d    |                      |||          \  }}|                     |           |S r0   )r^   r*   )r    rW   rX   rA   r)   r5   s         r   emit_commitzGitFastExporter.emit_commitr   s4    ))&#yAAVsr   r0   )__name__
__module____qualname____doc__r!   r*   r.   r6   r8   rJ   r^   r`    r   r   r   r   (   s        ??  K K K< < <A A A
  
  (   8     r   r   c                   V    e Zd ZdZddZd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd ZdS )GitImportProcessorzEAn import processor that imports into a Git repository using Dulwich.NFc                     t           j                            | ||           || _        t          | _        i | _        i | _        d S r0   )r   ImportProcessorr!   repor
   last_commitr   	_contents)r    rj   paramsverboser   s        r   r!   zGitImportProcessor.__init__}   s>    !**4AAA	#r   c                 Z    |                     d          r| j        |dd                   S |S )Nr:   r   )
startswithr   )r    	objectishs     r   lookup_objectz GitImportProcessor.lookup_object   s3    %% 	/<	!""..r   c                 l    t          j        |          }|                     |j                   | j        S r0   )r   ImportParserprocessiter_commandsr   )r    streamps      r   import_streamz GitImportProcessor.import_stream   s.    ''Q_%%%|r   c                     t          j        |j                  }| j        j                            |           |j        r|j        | j        |j        <   dS dS )zProcess a BlobCommand.N)	r   from_stringr3   rj   object_store
add_objectmarkr1   r   )r    r)   r4   s      r   blob_handlerzGitImportProcessor.blob_handler   sW    ))	))$///8 	-%)WDL"""	- 	-r   c                     dS )zProcess a CheckpointCommand.Nre   r(   s     r   checkpoint_handlerz%GitImportProcessor.checkpoint_handler       r   c                 N   t                      }|j        |j        }n|j        }|\  }}}}|j        \  }}	}
}|dz   |z   dz   |_        ||_        t	          |          |_        |dz   |	z   dz   |_        ||_        t	          |
          |_        |j        |_        g |_	        |j
        r9|                     |j
                  |_
        |                     |j
                   |                                D ],}|j        dk    rx|j        @t!          j        |j                  }| j        j                            |           |j        }n|                     |j                  }|j        |f| j        |j        <   |j        dk    r| j        |j        = |j        dk    r | j        |j                 | j        |j        <   |j        dk    r.| j        |j                 | j        |j        <   | j        |j        = |j        dk    r	i | _        t=          d	|j        z            t?          | j        j        d
 | j                                         D                       |_!        | j"        tF          k    r|j	        $                    | j"                   |j%        D ]/}|j	        $                    |                     |                     0| 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 %s not supportedc              3   ,   K   | ]\  }\  }}|||fV  d S r0   re   ).0pathmodehexshas       r   	<genexpr>z4GitImportProcessor.commit_handler.<locals>.<genexpr>   s2      WW&<t^dFdFD!WWWWWWr   )*r   rO   rP   rS   intrR   rU   rT   rV   rN   rZ   rr   _reset_base
iter_filesr   r3   r   r{   rj   r|   addr1   datarefr   rl   r   src_path	dest_pathrC   rD   	Exceptionr   itemsrM   rk   r
   appendr[   r}   rX   r~   r   )r    r)   rW   rO   author_namer\   author_timestamprS   committer_namer]   commit_timestamprU   filecmdr4   blob_idmerges                   r   commit_handlerz!GitImportProcessor.commit_handler   s   :!ZFF]FIOFl$4o M	
#e+l:TA!0 !122)E1OCdJ!0 !1229 	(**3955CISY'''~~'' 	K 	KG|},,<++GL99DI*..t444"gGG"00AAG07g/Fw|,,..N7<00,,48N7CS4Tw011..37>'BR3Sw/0N7#344!111!# :W\ IJJJ!I"WW@T@T@V@VWWW
 
 x''N!!$"2333Z 	= 	=EN!!$"4"4U";";<<<<	))&111#Y	#'!98 	/%+YDL"""	/ 	/r   c                     dS )zProcess a ProgressCommand.Nre   r(   s     r   progress_handlerz#GitImportProcessor.progress_handler   r   r   c                     | j         |k    rd S i | _        || _         |t          k    r?| j        |         j        }t          | j        j        |          D ]\  }}}||f| j        |<   d S d S r0   )rk   rl   r
   rj   rM   r	   r|   )r    	commit_idtree_idr   r   r   s         r   r   zGitImportProcessor._reset_base   s    y((F$  i	*/G
 $DI$:GDD	6 6 (,f~t$$ ! 6 6r   c                     |j         t          }n|                     |j                   }|                     |           || j        j        |j        <   dS )zProcess a ResetCommand.N)rZ   r
   rr   r   rj   refsrX   )r    r)   rZ   s      r   reset_handlerz GitImportProcessor.reset_handler   sP    9EE&&sy11E"'	swr   c                     t                      }|j        |_        |j        |_        |j        |_        | j                            |           |j        | j        j        d|j        z   <   dS )zProcess a TagCommand.z
refs/tags/N)	r   taggerrV   tagr   rj   r}   r1   r   )r    r)   r   s      r   tag_handlerzGitImportProcessor.tag_handler   sY    eeZ
k7	S!!!25&	|ch.///r   c                 4    t          j        |j                  )zProcess a FeatureCommand.)fastimport_errorsUnknownFeaturefeature_namer(   s     r   feature_handlerz"GitImportProcessor.feature_handler   s    .s/?@@@r   )NFN)ra   rb   rc   rd   r!   rr   ry   r   r   r   r   r   r   r   r   re   r   r   rg   rg   x   s        OO     
  
- - -  9/ 9/ 9/v  6 6 6( ( (9 9 9A A A A Ar   rg   )rd   r=   
fastimportr   r   r   r   r   indexr   r|   r	   objectsr
   r   r   r   r   r   ri   rg   re   r   r   <module>r      s%  , ( '        2 2 2 2 2 2 ( ( ( ( ( ( ( (       , , , , , , 0 0 0 0 0 0 0 0 0 0 0 0& & &
M M M M M M M M`BA BA BA BA BA2 BA BA BA BA BAr   