
    if1                        d dl Z d dlmZ d dlmZmZmZ ddlmZ ej                  j                  g d       	 d dlZd dlZd dlZd dlZej                   j"                  Zej$                  Zej&                  Zej(                  Zej*                   	 d dlmZ dZ G d	 d
ej4                        Zy# e$ r	 d dlmZ Y %w xY w# e$ r Y 0w xY w)    N)_)demandimporterrorutil   )common)zbreezy.transactionszbreezy.urlutilsElementPath)
NoSuchFile)filesymlinkc                   l     e Zd ZdZd fd	Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Z xZS )
bzr_sourcez>Reads Bazaar repositories by using the Bazaar Python librariesc                    t         t        |   ||||       t        j                  j                  t        j                  j                  |d            s!t        j                  t        d      |z        	 t         t        j                  |      }| j                  |       	 t        j                  j!                  |j#                               }|j%                         | _        i | _        |j/                  dd      | _        y # t        $ r. t        j                  t        d      t        d      dz  z         w xY w# t(        j*                  $ r" t        j                  t        d      |z        w xY w)	N)revss   .bzrs)   %s does not look like a Bazaar repositorys"   Bazaar modules could not be loadeds     (try installing the %s package)s   bzrs   converts   bzr.saverev)superr   __init__ospathexistsjoinr   NoRepor   bzrdir	NameErrorr   abspath_checkrepotypeBzrDiropendecodeopen_repository
sourcerepoerrorsNoRepositoryPresent
_parentids
configbool_saverev)selfuirepotyper   r   bzr_dir	__class__s         3/usr/lib/python3/dist-packages/hgext/convert/bzr.pyr   zbzr_source.__init__>   sA   j$(Xt$(Gww~~bggll49:-->?$F 	Q
 ||D!D!	mm((7G%557DO
 j.A  	Q--"G H !"E F O!P Q Q	Q )) 	-->?$F 	s   8D %AE  7D= 5E5c                 R   	 t         j                  j                  |j                               d   }	 |j	                  d      }|j
                  }|g|j                  j                  j                  |j                  j                  j                  k7  r%| j                  j                  t        d             y y y # t        j                  t        j                  f$ r d }|j                         }Y w xY w# t         $ r' | j                  j#                  t        d             Y y w xY w)Nr   F)recommend_upgradesa   warning: lightweight checkouts may cause conversion failures, try with a regular branch instead.
s(   bzr source type could not be determined
)r   r   open_containingr   open_workingtreebranchr!   NoWorkingTreeNotLocalUrlopen_branch
controldirroot_transportbaser'   warnr   	Exceptionnote)r&   r   dirtreer0   s        r+   r   zbzr_source._checkrepotypeY   s   	J--//>qAC+++e+D
  OO2277$$33889 -9 !	 ((&*<*<= +*+  	JGGLLGHI	Js5   0C6 B; A'C6 ;5C30C6 2C33C6 6-D&%D&c                 8    | j                   j                          y)a  Before the conversion begins, acquire a read lock
        for all the operations that might need it. Fortunately
        read locks don't block other reads or writes to the
        repository, so this shouldn't have any impact on the usage of
        the source repository.

        The alternative would be locking on every operation that
        needs locks (there are currently two: getting the file and
        getting the parent map) and releasing immediately after,
        but this approach can take even 40% longer.N)r    	lock_readr&   s    r+   beforezbzr_source.befores   s     	!!#    c                 8    | j                   j                          y N)r    unlockr>   s    r+   afterzbzr_source.after   s     r@   c                 :    | j                   j                  d      S )NT)using)r    find_branchesr>   s    r+   _bzrbrancheszbzr_source._bzrbranches   s    ,,4,88r@   c                 B   | j                   s6t        | j                         D cg c]  }|j                          c}      }nd }| j                         D ]\  }	 | j                   d   j	                         }t
        j                  j                  |      }|j                  |      }j                  }^ |.t        j                  t        d      | j                   d   z        |g}|D cg c]
  }|dk7  s	| }}|S c c}w # t        j                  $ r Y rw xY wc c}w )Nr   s   %s is not a valid revisions   null:)r   sortedrH   last_revisionr   revisionspecRevisionSpecfrom_string
in_historyr!   BzrErrorrev_idr   Abortr   )	r&   bheadsrevidr0   revspecrinfohs	            r+   getheadszbzr_source.getheads   s   yyt7H7H7JK!AOO-KLEE++- $"iil113G$11==gFA<</D $ }kk34tyy|C  GE!3qQ(]33% L   4s$   C>AD+
D6DDDc                    |j                         }| j                  j                  |      }	 |j                  |      }|t
        vry| j                  |j                         |f   }|dk(  rH|j                  |      }|#t        j                  t        d      ||fz        |j                         |fS |j                  |      }|j                         |fS # t        $ r Y yw xY w)N)NNr   s   %s.%s symlink has no target)r   r    revision_treekindr
   supportedkinds
_modecacheencodeget_symlink_targetr   rR   r   get_fileread)r&   namerevrevtreer]   modetargetsios           r+   getfilezbzr_source.getfile   s    {{}////4	<<%D ~%s349//5F~kk45sC  ==?D((""4(C88:t##  		s   C 	C"!C"c                 Z   |rt        j                  t        d            i | _        | j                  j                  |      | _        | j                  j                  |      }| j                  j                  |d         }| j                  | j                  |      \  }}||t               fS )Ns(   convert from cvs does not support --fullr   )r   rR   r   r_   r    r\   _revtreer#   pop_gettreechangesset)r&   versionfull	parentidsprevtreefileschangess          r+   
getchangeszbzr_source.getchanges   s    ++a KLMM55g>OO''0	??001>--dmmXFwgsu$$r@   c           	      .   | j                   j                  |      }|j                  s!g }t        j                  f| j
                  |<   n*| j                  |j                        }|| j
                  |<   |j                  j                  dd      }|dk(  rd}t        j                  |d|j                  |j                   fz  | j                  |j                        | j                  |j                        |j!                  d      || j"                        S )Nzbranch-nickdefaulttrunks   %d %dutf8)parentsdateauthordescr0   re   saverev)r    get_revision
parent_idsrevisionNULL_REVISIONr#   _filterghosts
propertiesgetr   commit	timestamptimezonerecode	committermessager`   r%   )r&   rp   re   r{   r0   s        r+   	getcommitzbzr_source.getcommit   s    oo**73~~G(0(>(>'@DOOG$((8G'.DOOG$##M9=WF}}S]]S\\M::;;s}}-S[[)==(MM
 	
r@   c                     i }| j                         D ]\  }|j                         si c S |j                  j                         }|j	                         D ]  \  }}||| j                  |      <    ^ |S rB   )rH   supports_tagstagsget_tag_dictitemsr   )r&   bytetagsr0   tagdictrd   re   s         r+   gettagszbzr_source.gettags   su    '') 	2F'')	kk..0G$]]_ 2	c.1T*+2		2 r@   c                    i | _         | j                  j                  |      }|| j                  |   |   }nt        j
                  }| j                  j                  |      }| j                  ||      d   D cg c]  }|d   	 }}|S c c}w )Nr   )r_   r    r\   r#   r   r   rn   )r&   re   icurtreeparentidrs   eru   s           r+   getchangedfileszbzr_source.getchangedfiles   s    ////4=s+A.H  --H??00:!%!5!5gx!H!KLA1Q4LL Ms   :B
c                 ^   |j                   }g }i }t               }	 |j                  }d }t        |j                  |      |d      }	|	D ]<  }
|
j                  }|
j                  }|
j                  }|d   dk(  s|d   dk(  r9|d   dk(  r4|d   dvr%|j                  | j                  |d         |f       |d   dk(  rd |vr|d   |d   k7  }|j                  |d         }|j                  |      D ]  \  }}|j                  dk(  r| j                  |d   d	z   |z         }||v r5|j                  |       |sI| j                  |d   d	z   |z         }|j                  ||f       |j                  ||f       |j                  xr d
xs |j                  dk(  xr dxs d}|| j                  ||f<   |||<    v|\  }}|| j                  |      }|| j                  |      }|j                  |xs |       ||j                  ||f       |r||k7  r|||<   |j                  ||f       ||fD cg c]  }|d   	 c}\  }}|xr d
xs |dk(  xr dxs d}|| j                  ||f<   |j                  ||f       ? ||fS # t        $ r |j                  }Y ~w xY wc c}w )Nc                 J    | j                   d   xs | j                   d   xs dS )Nr   r    )r   )cs    r+   keyz'bzr_source._gettreechanges.<locals>.key   s"    66!9/q	/R/r@   T)r   reverser   r   r   	directory)Nr   /   xr      sr@      l)_revision_idro   root_inventoryAttributeError	inventoryrJ   iter_changesr   r]   
executableappendr   path2iditer_entriesaddr_   )r&   currentoriginrU   ru   renamesseenr   r   
curchangeschangepathsr]   r   renamingsubdirrd   entryfrompathtopathrg   r   r   s                          r+   rn   zbzr_source._gettreechanges   s   $$u	)--I	0   (


 ! L	,FKKE;;D**JQx3%(c/ Aw+%7"55 NNDKKa$95#AB7k)d%.?$Qx583H '..uQx8F'0'='=f'E 3e ::4$#';;uQx#~/D#E#t+ %*'$!%U1X^d-B!C%'897 #--6$ # %

i 7 @D#" 
 <@8*273<  !LD&{{4(!V,HHT^V$~e}- "&e}- 04Z.@A!AD*'4OTY->-G4OCD/3DOOVUO,NNFE?+YL	,\ y  	)((I	)n  Bs   J <J*J'&J'c                     | j                   j                  |      }t        |D cg c]	  }||v s| c}      }|S c c}w )zqFilters out ghost revisions which hg does not support, see
        <http://bazaar-vcs.org/GhostRevision>
        )r    get_parent_maptuple)r&   ids	parentmapparentr{   s        r+   r   zbzr_source._filterghostsU  s?     OO2237	cIFVy5HIJ Js   	<<rB   )__name__
__module____qualname____doc__r   r   r?   rD   rH   rZ   rj   rv   r   r   r   rn   r   __classcell__)r*   s   @r+   r   r   ;   sK    HB6J4$!9.$.
%
.e Nr@   r   )r   mercurial.i18nr   	mercurialr   r   r   r   r   IGNORESupdatebreezy.bzr.bzrdirbreezybreezy.errorsbreezy.revisionbreezy.revisionspecbzrr   r!   r   rL   rM   breezy.transportr
   ImportErrorr^   converter_sourcer    r@   r+   <module>r      s    
  
      	  ZZF]]FH&&L-/ %`(( `  -,- 		s0   AB? B. .B<9B? ;B<<B? ?CC