
    "                         S r SSKJr  SSKJrJrJrJr  SSKJ	r	J
rJrJr  SSKrS r " S S\5      r " S	 S
\R$                  5      rg)z!Fast export/import functionality.    )commit_tree)BlobCommitTagZERO_SHA)commandserrorsparser	processorNc                 N    U R                  SS5      u  pXR                  S5      4$ )N    <      >)rsplitrstrip)textnameemails      %lib/third_party/dulwich/fastexport.pysplit_emailr   +   s&    KKq)MT,,t$%%    c                   P    \ rS rSrSrS rS rS rS rS r	S r
SS
 jrSS jrSrg	)GitFastExporter0   z5Generate a fast-export output stream for Git objects.c                 8    Xl         X l        0 U l        SU l        g )Nr   )outfstoremarkers_marker_idx)selfr   r   s      r   __init__GitFastExporter.__init__3   s    	
r   c                 t    U R                   R                  [        USUR                  5      " 5       S-   5        g )N	__bytes__   
)r   writegetattr__repr__r    cmds     r   	print_cmdGitFastExporter.print_cmd9   s'    		[#,,?AEIJr   c                 j    U =R                   S-  sl         SU R                   4-  R                  S5      $ )Nr   z%dascii)r   encode)r    s    r   _allocate_marker GitFastExporter._allocate_marker<   s2    A((**227;;r   c                     U R                  5       nUR                  U R                  U'   [        R                  " X!R
                  5      U4$ N)r0   idr   r   BlobCommanddata)r    blobmarkers      r   _export_blobGitFastExporter._export_blob@   s<    &&(#wwV$$VYY7@@r   c                 N    U R                  U5      u  p#U R                  U5        U$ r3   )r9   r+   )r    r7   r*   r8   s       r   	emit_blobGitFastExporter.emit_blobE   s%    ))$/sr   c              #     #    U R                   R                  X5       H  u  u  p4u  pVu  pxUc  [        R                  " U5      v   M*  [        R
                  " U5      (       d   U R                   U   n	U R                  U	5      n
X4:w  a  Ub  [        R                  " X45      v   XV:w  d  Xx:w  d  M  SW
-   n[        R                  " XFUS 5      v   M     g 7f)N   :)	r   tree_changesr   FileDeleteCommandstatS_ISDIRr<   FileRenameCommandFileModifyCommand)r    	base_treenew_treeold_pathnew_pathold_modenew_mode
old_hexsha
new_hexshar7   r8   prefixed_markers               r   _iter_filesGitFastExporter._iter_filesJ   s     
 ZZ$$Y9	
 X X$Z00::<<))zz*--#(<00DD#z'?"&-00  :s   B)C/$CNc           
         [        U R                  X1R                  5      5      nU R                  5       nUR                  (       a  UR                  S   nUR                  SS  nOS n/ n[        UR                  5      u  p[        UR                  5      u  p[        R                  " UUXUR                  UR                  4U
UUR                  UR                  4UR                  UUU5      nX4$ )Nr   r   )listrO   treer0   parentsr   author	committerr   CommitCommandauthor_timeauthor_timezonecommit_timecommit_timezonemessage)r    commitrefrF   	file_cmdsr8   from_mergesrU   author_emailrV   committer_emailr*   s                r   _export_commitGitFastExporter._export_commit^   s    )))[[AB	&&(>>NN1%E^^AB'FEF*6==9%01A1A%B"	$$6#5#5v7M7MN""&&	 NN
 }r   c                 P    U R                  XU5      u  pEU R                  U5        U$ r3   )rd   r+   )r    r]   r^   rF   r*   r8   s         r   emit_commitGitFastExporter.emit_commitz   s'    ))&yAsr   )r   r   r   r   r3   )__name__
__module____qualname____firstlineno____doc__r!   r+   r0   r9   r<   rO   rd   rg   __static_attributes__ r   r   r   r   0   s/    ?K<A

(8r   r   c                   ^    \ rS rSrSrSS jrS rS rS rS r	S	 r
S
 rS rS rS rS rSrg)GitImportProcessor   zEAn import processor that imports into a Git repository using Dulwich.Nc                     [         R                  R                  XU5        Xl        [        U l        0 U l        0 U l        g r3   )r   ImportProcessorr!   repor   last_commitr   	_contents)r    ru   paramsverboser   s        r   r!   GitImportProcessor.__init__   s3    !!**4A	#r   c                 V    UR                  S5      (       a  U R                  USS     $ U$ )Nr?   r   )
startswithr   )r    	objectishs     r   lookup_object GitImportProcessor.lookup_object   s.    %%<<	!"..r   c                 |    [         R                  " U5      nU R                  UR                  5        U R                  $ r3   )r
   ImportParserprocessiter_commandsr   )r    streamps      r   import_stream GitImportProcessor.import_stream   s,    'Q__%||r   c                     [         R                  " UR                  5      nU R                  R                  R                  U5        UR                  (       a$  UR                  U R                  UR                  '   gg)zProcess a BlobCommand.N)	r   from_stringr6   ru   object_store
add_objectmarkr4   r   )r    r*   r7   s      r   blob_handlerGitImportProcessor.blob_handler   sP    )		))$/88%)WWDLL" r   c                     g)zProcess a CheckpointCommand.Nro   r)   s     r   checkpoint_handler%GitImportProcessor.checkpoint_handler       r   c                    [        5       nUR                  b  UR                  nOUR                  nUu  pEpgUR                  u  nn	n
nUS-   U-   S-   Ul        Xrl        [	        U5      Ul        US-   U	-   S-   Ul        Xl        [	        U
5      Ul        UR                  Ul        / Ul	        UR                  (       a;  U R                  UR                  5      Ul
        U R                  UR                  5        UR                  5        GH  nUR                  S:X  a  UR                  bR  [         R"                  " UR                  5      nU R$                  R&                  R)                  U5        UR*                  nOU R                  UR,                  5      nUR.                  U4U R0                  UR2                  '   M  UR                  S:X  a  U R0                  UR2                  	 M  UR                  S:X  a3  U R0                  UR4                     U R0                  UR6                  '   GM!  UR                  S:X  aJ  U R0                  UR8                     U R0                  UR:                  '   U R0                  UR8                  	 GM{  UR                  S:X  a
  0 U l        GM  [=        S	UR                  -  5      e   [?        U R$                  R&                  S
 U R0                  RA                  5        5       5      Ul!        U RD                  [F        :w  a%  UR                  RI                  U RD                  5        URJ                   H-  nUR                  RI                  U R                  U5      5        M/     U R$                  R&                  RM                  U5        UR*                  U R$                  URN                  '   UR*                  U l"        URP                  (       a$  UR*                  U RR                  URP                  '   gg)zProcess a CommitCommand.Nr   r   s
   filemodifys
   filedeletes   filecopys
   filerenames   filedeleteallzCommand %s not supportedc              3   4   #    U  H  u  nu  p#XU4v   M     g 7fr3   ro   ).0pathmodehexshas       r   	<genexpr>4GitImportProcessor.commit_handler.<locals>.<genexpr>   s     W@V&<t^ddD!@Vs   )*r   rU   rV   rY   intrX   r[   rZ   r\   rT   r`   r~   _reset_base
iter_filesr   r6   r   r   ru   r   addr4   datarefr   rw   r   src_path	dest_pathrH   rI   	Exceptionr   itemsrS   rv   r   appendra   r   r^   r   r   )r    r*   r]   rU   author_namerb   author_timestamprY   committer_namerc   commit_timestampr[   filecmdr7   blob_idmerges                   r   commit_handler!GitImportProcessor.commit_handler   s   ::!ZZF]]FIOF$4 MM	
#e+l:TA!0 !12)E1OCdJ!0 !1299**3995CISYY'~~'G||},<<+++GLL9DII**..t4"ggG"00AG07g/Fw||,.NN7<<0,48NN7CSCS4Tw001.37>>'BRBR3Sw//0NN7#3#34!11!# :W\\ IJJ' (( "II""W@T@T@VW
 x'NN!!$"2"23ZZENN!!$"4"4U";<  		))&1#YY		#''!9988%+YYDLL" r   c                     g)zProcess a ProgressCommand.Nro   r)   s     r   progress_handler#GitImportProcessor.progress_handler   r   r   c                    U R                   U:X  a  g 0 U l        Xl         U[        :w  aZ  U R                  U   R                  nU R                  R
                  R                  U5       H  u  nnnXE4U R                  U'   M     g g r3   )rv   rw   r   ru   rS   r   iter_tree_contents)r    	commit_idtree_idr   r   r   s         r   r   GitImportProcessor._reset_base   s    y($ ii	*//G
 ''::7C	(,~t$ D !r   c                     UR                   c  [        nOU R                  UR                   5      nU R                  U5        X R                  R
                  UR                  '   g)zProcess a ResetCommand.N)r`   r   r~   r   ru   refsr^   )r    r*   r`   s      r   reset_handler GitImportProcessor.reset_handler   sG    99E&&syy1E"'		swwr   c                    [        5       nUR                  Ul        UR                  Ul        UR                  Ul        U R
                  R                  U5        UR                  U R
                  R                  SUR                  -   '   g)zProcess a TagCommand.z
refs/tags/N)	r   taggerr\   tagr   ru   r   r4   r   )r    r*   r   s      r   tag_handlerGitImportProcessor.tag_handler   s[    eZZ
kk77		S!25&&		|chh./r   c                 B    [         R                  " UR                  5      e)zProcess a FeatureCommand.)fastimport_errorsUnknownFeaturefeature_namer)   s     r   feature_handler"GitImportProcessor.feature_handler   s    ..s/?/?@@r   )rw   rv   r   ru   )NFN)ri   rj   rk   rl   rm   r!   r~   r   r   r   r   r   r   r   r   r   rn   ro   r   r   rq   rq      s>    O

-9/v6(9Ar   rq   )rm   dulwich.indexr   dulwich.objectsr   r   r   r   
fastimportr   r	   r   r
   r   rB   r   objectr   rt   rq   ro   r   r   <module>r      sR   , (   &
Mf M`BA22 BAr   