a
    %0É_Z  ã                   @   s.  d Z ddlmZ ddlZddlmZ ddlmZmZ ddl	m
Z
 ddlmZmZmZmZ dd	lmZ d
Zi Ze e¡Ze d¡Ze d¡Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Ze d¡Zedddg edƒedƒfddded ƒed!ƒfd"d#ded$ƒed!ƒfd%d&ded'ƒed!ƒfged(ƒejd)d*d+„ ƒZdS ),z-export repositories as git fast-import streamé    )Úabsolute_importN)Ú_)ÚhexÚnullrev)Ú
stringutil)ÚerrorÚpycompatÚ	registrarÚscmutilé   )Úconvcmds   ships-with-hg-cores   [<>
"]s   [<> 
]c                 C   sn   |   ||¡}t |¡}t |¡}t |¡s4t |¡rFt t	dƒ| ¡‚|r^d| d | d S d| d S d S )Ns:   Unable to parse user into person and email for revision %só   "s   " <ó   >ó   <)
Úgetr   ZpersonZemailÚGIT_EMAIL_PROHIBITEDÚmatchÚGIT_PERSON_PROHIBITEDr   ÚAbortr   )Ú	authormapÚuserÚrevZmapped_userZuser_personZ
user_email© r   ú2/usr/lib/python3/dist-packages/hgext/fastexport.pyÚconvert_to_git_user%   s    

ÿÿÿr   c                 C   sp   | \}}|dkrdnd}|d dkr8t  tdƒ| f ¡‚t|ƒd }|d }|d }dt|ƒ | d||f  S )Nr   ó   +ó   -é<   s4   UTC offset in %b is not an integer number of secondss   %d s   %02d%02d)r   r   r   ÚabsÚint)ÚdateZ	timestampZutcoffZtzsignZtzhZtzminr   r   r   Úconvert_to_git_date6   s    ÿr!   c                 C   s   d|  S )Ns   refs/heads/r   )Úbranchr   r   r   Úconvert_to_git_refC   s    r#   c                 C   s>   |   dt|ƒ ¡ |   |¡ |r0|dd … dkr:|   d¡ d S )Ns   data %d
éÿÿÿÿó   
)ÚappendÚlen)ÚbufÚdataZskip_newliner   r   r   Ú
write_dataH   s    
r*   c                 C   sl  || }|  ¡ }||v r*|  d| ¡ d S dd„ | ¡ D ƒ}|D ],}|  ¡ |vr@|  tdƒ||f ¡  d S q@| ¡ D ]r}	|	|vr„qv| |	¡}
t |
 ¡ ƒ}||vrvt|ƒd }|||< |
 	¡ }dd| g}t
||dƒ | j|d	d
iŽ ~qvt|ƒd }|||< t| ¡ ƒ}d| d| dt|| ¡ |ƒt| ¡ ƒf g}t
|| ¡ d
ƒ |rh| d||d   ¡   ¡ t|ƒdkr°| d||d   ¡   ¡ ||d  }| ¡  | ¡ ¡}n| ¡ }g }|D ]l}	|	|vrâ| |	d|	 f¡ nH| |	¡}
|
 ¡ }|
 ¡ rdnd}d||t |ƒ |	f }| |	|f¡ qÀ| ¡  | dd„ |D ƒ¡ ~| d¡ | j|d	d
iŽ ~d S )Ns/   warning: revision %s already exported, skipped
c                 S   s   g | ]}|  ¡ tkr|‘qS r   )r   r   )Ú.0Úpr   r   r   Ú
<listcomp>U   ó    z!export_commit.<locals>.<listcomp>s8   warning: parent %s of %s has not been exported, skipped
r   s   blob
s	   mark :%d
FZkeepprogressbarTs
   commit %s
s   committer %s %s
s	   from :%d
r   é   s
   merge :%d
s   D %s
s   755s   644s   M %s :%d %s
c                 s   s   | ]\}}|V  qd S )Nr   )r+   ÚfnameÚchangedr   r   r   Ú	<genexpr>‘   r.   z export_commit.<locals>.<genexpr>r%   )r   ÚdebugÚparentsÚwarnr   ÚfilesÚfilectxZfilenoder'   r)   r*   Úwriter#   r"   r   r   r!   r    Zdescriptionr&   ZmanifestZdiffZisexecÚsortÚextend)ÚuiÚrepor   Úmarksr   ÚctxZrevidr4   r,   r0   r7   ZfilerevZmarkr)   r(   ÚrefZp0ctxr6   ZfilebufZfilepermr1   r   r   r   Úexport_commitO   sz    ÿÿ

þÿý	


r@   s   ^[0-9a-f]{40}$s
   fastexportó   ró   revs   revisions to exports   REVó   is   import-marksr.   s   old marks file to reads   FILEó   es   export-markss   new marks file to writeó   Aó	   authormaps   remap usernames using this files   [OPTION]... [REV]...)Zhelpcategoryc                 O   sà  t  |¡}|t| dg ¡ƒ7 }|s2t |dg¡}nt ||¡}|sPt tdƒ¡‚| d¡}|rlt	 
| |¡}ni }| d¡}i }|rît|dƒR}|D ]<}	|	 ¡ }	t |	¡r°|	|v r¾t tdƒ¡‚t|ƒd ||	< q’W d	  ƒ n1 sä0    Y  | ¡  | jtd
ƒtdƒt|ƒd4}
|D ]}t| ||||ƒ |
 ¡  qW d	  ƒ n1 sN0    Y  | d¡}|rÜt|dƒX}d	gt|ƒ }| ¡ D ]\}}|||d < qŠ|D ]}| |d ¡ q¦W d	  ƒ n1 sÒ0    Y  d	S )a  export repository as git fast-import stream

    This command lets you dump a repository as a human-readable text stream.
    It can be piped into corresponding import routines like "git fast-import".
    Incremental dumps can be created by using marks files.
    rB   ó   :s   no revisions matchedrF   s   import_marksÚrbs   Corrupted marks filer   Ns	   exportings	   revisions)ZunitÚtotals   export_marksÚwbr%   )r   ZbyteskwargsÚtupler   r
   Zrevranger   r   r   r   ZreadauthormapÚopenÚstripÚisrevr   r'   r9   Zmakeprogressr@   Z	incrementÚitemsr8   )r;   r<   ZrevsZoptsZ
authorfiler   Zimport_marksr=   Zimport_marks_fileÚlineZprogressr   Zexport_marksZexport_marks_fileZoutput_marksÚkÚvr   r   r   Ú
fastexport›   sH    


0ÿ,
rS   ) Ú__doc__Z
__future__r   ÚreZmercurial.i18nr   Zmercurial.noder   r   Zmercurial.utilsr   Z	mercurialr   r   r	   r
   Zconvertr   Z
testedwithZcmdtableZcommandÚcompiler   r   r   r!   r#   r*   r@   rN   ZCATEGORY_IMPORT_EXPORTrS   r   r   r   r   Ú<module>   sD   


I
ûüñ