
    6h&                      S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
rSSKJr  SSKJr  SSKJrJrJr  SSKJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r$  SSK%J&r'  SS	K(J)r)J*r*J+r+J,r,  Sq-\!R\                  r.\!R^                  r/\!R`                  r0\"Rb                  r1S
 r2S r3 " S S\Rh                  5      r5S r6S r7S r8S r9SSSS.r:S r;S!S jr<S r= " S S5      r> " S S\>5      r? " S S\>5      r@ " S S\>5      rA\?\@\AS .rBg)"    )annotationsN   )_)MatcherT)binhexshort)cmdutilencodingerrorexchange
logcmdutilmatchmergepathutilphasespycompatscmutilsubrepoutilutilvfs)status)dateutilhashutilprocutilurlutilc                   [         R                  " [        R                  " U 5      5      n[         R                  " U5      nUR
                  (       d4  [        R                  " [        R                  " UR                  5      5      n U $ )zM
get a path or url and if it is a path expand it and return an absolute path
)	r   urllocalpathr   
expandpathurlschemenormpathabspathpath)r$   expandedpathus      3/usr/lib/python3/dist-packages/mercurial/subrepo.py_expandedabspathr(   >   sR     ''(=>LL!A88}}T\\!&&12K    c                t    [        [        R                  " [        U 5      5      R	                  5       5      SS $ )zEget a unique filename for the store hash cache of a remote repositoryr      )r   r   sha1r(   digest)
remotepaths    r'   _getstorehashcachenamer/   I   s,    x}}-j9:AACDQrJJr)   c                      \ rS rSrSrS rSrg)SubrepoAbortN   zEException class used to avoid handling a subrepo error more than oncec                    UR                  SS 5      U l        UR                  SS 5      U l        [        R                  R
                  " U /UQ70 UD6  g )Nsubrepocause)popr4   r5   r   Abort__init__)selfargskws      r'   r8   SubrepoAbort.__init__Q   sB    vvi.VVGT*
T/D/B/r)   )r5   r4   N)__name__
__module____qualname____firstlineno____doc__r8   __static_attributes__ r)   r'   r1   r1   N   s
    O0r)   r1   c                   ^  U 4S jnU$ )Nc                  >  T" U /UQ70 UD6nU$ ! [          a  nUeS nAf[        R                   aV  n[        U 5      nUR                  S-   [        S5      U-  -   n[        XdR                  U[        R                  " 5       S9eS nAff = f)N    s   (in subrepository "%s"))hintr4   r5   )	r1   r   r7   
subrelpathmessager   rG   sysexc_info)r9   r:   kargsresexr4   errormsgfuncs          r'   decoratedmethod-annotatesubrepoerror.<locals>.decoratedmethodX   s    	t,d,e,C 
  	H{{ 	 &G

T!A&@$AG$KK  wws||~ 	s    
B
B
ABB
rC   )rP   rQ   s   ` r'   annotatesubrepoerrorrS   W   s    " r)   c                    U(       a  [        S5      [        U5      X44-  nO[        S5      [        U5      X44-  nU R                  US5      $ )Ns    subrepository sources for %s differ
you can use (l)ocal source (%s) or (r)emote source (%s).
what do you want to do?$$ &Local $$ &Remotes    subrepository sources for %s differ (in checked out version)
you can use (l)ocal source (%s) or (r)emote source (%s).
what do you want to do?$$ &Local $$ &Remoter   )r   rH   promptchoice)uisubdirtylocalremotemsgs         r'   _updatepromptr\   l   s^    $

 _e,- $
 _e,- ??3""r)   c                   UR                  5        H  u  p4n[        U5       H  u  pgUR                  5       U:X  d  M  XF	   O   UR                  U5      R                  5       S:w  a  MW  U He  nUR                  5       S:X  d  M  U R	                  [        S5      UR                  U5      -  5        UR                  UR                  X85      5        Mg     M     g )Ns   .hg   hgrcs5   warning: removing potentially hostile 'hgrc' in '%s'
)	walk	enumeratelowerbasenamewarnr   joinunlinkreljoin)	rV   r   ignoredirnamedirsnamesidfs	            r'   	_sanitizern      s     #
udODAwwyF"G $ << &&(F2AwwyG#% hhw'	( 

3;;w23  !+r)   c                   UR                  S5      (       d   SU;   d  [        R                  " U5      U:w  a"  [        R                  " [        S5      U-  5      e[        R                  " U R                  5      " U5        U R                  R                  U5      (       a"  [        R                  " [        S5      U-  5      eg )N   ~   $+   subrepo path contains illegal component: %ss$   subrepo '%s' traverses symbolic link)
startswithr   r   r   r7   r   r   pathauditorrootwvfsislink)repor$   s     r'   _auditsubrepopathry      s    t0E0Mkk<=D
 	
 #D)yykk!CDtKLL r)   TF)   hg   git   svnc                   U R                  SSS5      (       d'  [        R                  " [        S5      [        S5      S9e[        R                  US5      nU R                  SSU-  U5      (       d*  [        R                  " [        S	5      U-  [        S5      S9eU[        ;  a"  [        R                  " [        S
5      U-  5      eg )N   subreposs   allowedTs   subrepos not enableds)   see 'hg help config.subrepos' for detailsrG   Fs
   %s:alloweds   %s subrepos not alloweds   unknown subrepo type %s)
configboolr   r7   r   SUBREPO_ALLOWED_DEFAULTSgettypes)rV   kinddefaults      r'   
_checktyper      s     ==j$77kk%&?@
 	

 '**47G==md&:GDDkk()D0?@
 	

 5kk!67$>?? r)   c                   SSK Jn  UqU R                  5       n[        XQ5        U R                  U   n[        UR                  US   5        U(       a  US   U R                  U5      US   4n[        US      " XUSS U5      $ )z>return instance of the right subrepo class for subrepo in pathr   hg   r   N)	 r   rx   ry   substater   rV   subrevr   )ctxr$   	allowwdirallowcreatehrx   states          r'   r4   r4      s|     	
B88:Dd!LLEtwwa!q3::d+U1X6q?3eBQi==r)   c                    SSK Jn  UqU R                  5       n[        XA5        U R                  U   n[        UR                  US   5        SnUS   S:X  a  Sn[        US      " X!US   U4S5      $ )	z=return an empty subrepo in pctx for the extant subrepo in ctxr   r   r   r)   rz   s(   0000000000000000000000000000000000000000r   T)r   r   rx   ry   r   r   rV   r   )r   r$   pctxr   rx   r   r   s          r'   nullsubrepor      su     	
B88:Dd!LLEtwwa!FQx5q?4a&'94@@r)   c                  $   \ rS rSrS rS rS rS(S jrS(S jrS)S jr	S	 r
S
 rS rS rS rS*S jrS rS rS rS rS rS+S jrS rS rS rS rS rS rS,S jrS rS-S.S jjrS rS r S  r!S! r"S" r#S# r$S*S$ jr%\&S% 5       r'\&S& 5       r(S'r)g)/abstractsubrepo   c                Z    UR                  5       R                  U l        Xl        X l        g)zInitialize abstractsubrepo part

``ctx`` is the context referring this subrepository in the
parent repository.

``path`` is the path to this subrepository as seen from
innermost repository.
N)rx   rV   _ctx_path)r9   r   r$   s      r'   r8   abstractsubrepo.__init__   s     ((*--	
r)   c                    g)zAdd the hgwebdir entries for this subrepo, and any of its subrepos.

``serverpath`` is the path component of the URL for this repo.

``webconf`` is the dictionary of hgwebdir entries.
NrC   r9   
serverpathwebconfs      r'   addwebdirpathabstractsubrepo.addwebdirpath   s     	r)   c                    g)zo
returns true if the repository has not changed since it was last
cloned from or pushed to a given repository.
FrC   r9   r$   s     r'   
storecleanabstractsubrepo.storeclean   s    
 r)   c                    [         e)zreturns true if the dirstate of the subrepo is dirty or does not
match current stored state. If ignoreupdate is true, only check
whether the subrepo has uncommitted changes in its dirstate.  If missing
is true, check for deleted files.
NotImplementedErrorr9   ignoreupdatemissings      r'   rX   abstractsubrepo.dirty  s
     "!r)   c                Z    U R                  XS9(       a  [        S5      [        U 5      -  $ g)zreturn reason string if it is ``dirty()``

Returned string should have enough information for the message
of exception.

This returns None, otherwise.
r   r   s)   uncommitted changes in subrepository "%s"N)rX   r   rH   r   s      r'   dirtyreasonabstractsubrepo.dirtyreason  s6     ::<:AABZF   Br)   Nc                Z    U R                  USS9nU(       a  [        R                  " X2S9eg)z+raise Abort if subrepository is ``dirty()``Tr   r   N)r   r   r7   )r9   r   rG   r   s       r'   bailifchangedabstractsubrepo.bailifchanged  s.    &&L$&O++k55 r)   c                    [         e)zhcurrent working directory base state, disregarding .hgsubstate
state and working directory modificationsr   r9   s    r'   	basestateabstractsubrepo.basestate  s
     "!r)   c                    g)z7check if path is a subrepository within this repositoryFrC   r   s     r'   checknestedabstractsubrepo.checknested$  s    r)   c                    [         e)zcommit the current changes to the subrepo with the given
log message. Use given user and date if possible. Return the
new state of the subrepo.
r   )r9   textuserdates       r'   commitabstractsubrepo.commit(  
    
 "!r)   c                "    [         R                  $ )z6returns phase of specified state in the subrepository.)r   publicr9   r   s     r'   phaseabstractsubrepo.phase/  s    }}r)   c                    [         e)zDremove the subrepo

(should verify the dirstate is not dirty first)
r   r   s    r'   removeabstractsubrepo.remove3  r   r)   c                    [         e)zDrun whatever commands are needed to put the subrepo into
this state
r   )r9   r   	overwrites      r'   r   abstractsubrepo.get:  s
     "!r)   c                    [         e)z/merge currently-saved state with the new state.r   r   s     r'   r   abstractsubrepo.merge@      !!r)   c                    [         e)zXperform whatever action is analogous to 'hg push'

This may be a no-op on some systems.
r   r9   optss     r'   pushabstractsubrepo.pushD  r   r)   c                    / $ NrC   r9   rV   r   prefixuipathfnexplicitonlyr   s          r'   addabstractsubrepo.addK  s    	r)   c                V    U R                   R                  SU[        S5      4-  5        g)Ns   %s: %ss   addremove is not supportedr   rV   rc   r   )r9   matcherr   r   r   s        r'   	addremoveabstractsubrepo.addremoveN  s%    Y&!,I*J!KKLr)   c                    gNr   rC   )r9   r   fm
fntemplater   r   s         r'   catabstractsubrepo.catR      r)   c           	     :    [         R                  " / / / / / / / 5      $ r   )r   r   )r9   rev2r   s      r'   r   abstractsubrepo.statusU  s    ~~b"b"b"b99r)   c                    g r   rC   )r9   rV   diffoptsnode2r   r   r   s          r'   diffabstractsubrepo.diffX  s    r)   c                    gr   rC   )r9   rV   destr   s       r'   outgoingabstractsubrepo.outgoing[  r   r)   c                    gr   rC   )r9   rV   sourcer   s       r'   incomingabstractsubrepo.incoming^  r   r)   c                    [         e)zreturn filename iteratorr   r   s    r'   filesabstractsubrepo.filesa  r   r)   c                    [         e)z9return file data, optionally passed through repo decodersr   r9   namedecodes      r'   filedataabstractsubrepo.filedatae  r   r)   c                    g)zreturn file flagsr)   rC   )r9   r   s     r'   	fileflagsabstractsubrepo.fileflagsi  s    r)   c                *    [         R                  " US9$ )z,Resolve the fileset expression for this repobadfn)matchmodnever)r9   cwdexprr  s       r'   matchfilesetabstractsubrepo.matchfilesetm  s    ~~E**r)   c                    g)z)handle the files command for this subrepor   rC   )r9   rV   mr   r   fmtsubreposs          r'   
printfilesabstractsubrepo.printfilesq  s    r)   c           
     &   U R                  5        Vs/ s H  oS" U5      (       d  M  UPM     nn[        U5      n[        U 5      nU R                  R	                  [        S5      U-  [        S5      US9n	U	R                  S5        S n
U Hn  nU R                  U5      nSU;   =(       a    S=(       d    SnSU;   nU
c  U" 5       n
U
R                  X+-   XU R                  X5      5        U	R                  5         Mp     U	R                  5         U$ s  snf )	N   archiving (%s)   files)unittotalr      xi  i     l)r   lenrH   rV   makeprogressr   updater  addfiler  	incrementcomplete)r9   openerr   r   r   rm   r   r  relpathprogressarchiverr   flagsmodesymlinks                  r'   archiveabstractsubrepo.archiveu  s     JJL5LqE!HL5E
T"77'' 7*8E ( 
 	DNN4(E5=*U3eDemG!8tdmmD.I    	' 6s
   DDc                    g)z^
walk recursively through the directory tree, finding all files
matched by the match function
NrC   )r9   r   s     r'   r_   abstractsubrepo.walk      r)   c                
    / / 4$ r   rC   r9   r   r   r   dryruninteractives         r'   forgetabstractsubrepo.forget  s    Bxr)   c	                R    UR                  [        S5      U R                  -  5        g)zremove the matched files from the subrepository and the filesystem,
possibly by force and/or after the file has been removed from the
filesystem.  Return 0 on success, 1 on any warning.
s)   warning: removefiles not implemented (%s)r   )appendr   r   	r9   r   r   r   afterforcer  r0  warningss	            r'   removefilesabstractsubrepo.removefiles  s'     	:;djjH	
 r)   c                d    U R                   R                  [        S5      US   US   4-  5        / $ )Ns)   %s: reverting %s subrepos is unsupported
r   r   r   r9   r   patsr   s       r'   revertabstractsubrepo.revert  s7    ;<{HQK()	
 	r)   c                    U$ r   rC   r9   revids     r'   shortidabstractsubrepo.shortid  s    r)   c                    g)z8
convert this repository from shared to normal storage.
NrC   r   s    r'   unshareabstractsubrepo.unshare  r-  r)   c                    g)a  verify the revision of this repository that is held in `_state` is
present and not hidden.  Return 0 on success or warning, 1 on any
error.  In the case of ``onpush``, warnings or errors will raise an
exception if the result of pushing would be a broken remote repository.
r   rC   )r9   onpushs     r'   verifyabstractsubrepo.verify  s     r)   c                    [         R                  " U R                  R                  5       R                  R                  U R                  5      5      $ )z@return vfs to access the working directory of this subrepository)vfsmodr   r   rx   rv   rd   r   r   s    r'   rv   abstractsubrepo.wvfs  s3     zz$))..*//44TZZ@AAr)   c                    U R                   R                  [        U R                  R	                  5       5      U R
                  5      $ zCreturn path to this subrepository as seen from outermost repository)rv   rf   reporelpathr   rx   r   r   s    r'   _relpathabstractsubrepo._relpath  s/     yy  TYY^^-=!>

KKr)   )r   r   rV   FF)FNFreturnzistatus.Statusr   Tr   r   )*r=   r>   r?   r@   r8   r   r   rX   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r)  r_   r2  r:  r?  rD  rG  rK  propertycacherv   rS  rB   rC   r)   r'   r   r      s    "6"
""""":""+,(
 B B L Lr)   r   c                  N  ^  \ rS rSrU 4S jr\S 5       rS rS rS r	\
S 5       rS rS	 rS
 r\S 5       r\S 5       r\S 5       r\S 5       r\S.S j5       r\S 5       r\S/S0S jj5       r\S1S j5       rS rS r\S 5       r\S 5       r\S 5       rS r\S2S j5       r\S 5       r\S 5       r\S 5       r \S 5       r!\S 5       r"S r#S  r$\S! 5       r%\S3S" j5       r&S# r'\S$ 5       r(\S% 5       r)\S& 5       r*S' r+S( r,\S) 5       r-S2S* jr.\
S+ 5       r/\
S, 5       r0S-r1U =r2$ )4	hgsubrepoi  c                  > [         TU ]  X5        X0l        UR                  5       nUR	                  [
        R                  " U5      5      nU=(       a#    UR                  R                  SU-  5      (       + n[        R                  R                  U5      n[        R                  R                  [        R                  R                  [
        R                  " U5      5      5      n	X:w  a"  [        R                  " [!        S5      U-  5      e["        R%                  UR&                  XgS9U l        [        R                  R                  U R(                  R*                  5      [        R                  R                  U5      :w  a.  [        R,                  " SX`R(                  R*                  4-  5      eXUR/                  5       L a  U R(                  R/                  5       U l        U R(                  R0                  U l        S HF  u  pUR0                  R3                  X5      nU(       d  M)  U R0                  R5                  XUS5        MH     U R0                  R5                  SSS	S5        U R7                  XSS
   U5        g )Ns   %s/.hgrr   creates9   failed to reject unsafe subrepo path: %s (expanded to %s)))   uis   commitsubrepos   subrepora  s   _usedassubrepos   Truer   )superr8   _staterx   wjoinr   	localpathrv   existsosr$   normcaserealpathr   r   r7   r   r   
repositorybaseui_reporu   ProgrammingError
unfilteredrV   config	setconfig	_initrepo)r9   r   r$   r   r   rru   r`  	norm_root	real_rootskv	__class__s                r'   r8   hgsubrepo.__init__  s   #HHJwwt~~d+,DQVV]]9t3C%D!D GG$$T*	GG$$RWW%5%5dood6K%LM	!++@ADH  ]]188T]A
77DJJOO,0@0@0FF((-04jjoo/FG  ..0DJ**--0DAA!Aq!!!:6 1
 	%!2GZHq(F+r)   c                Z    [         R                  " U R                  [        U 5      U5        g r   )r
   r   rm  rH   r   s      r'   r   hgsubrepo.addwebdirpath  s    djj*T*:GDr)   c                    U R                   R                  5          U R                  U5      sS S S 5        $ ! , (       d  f       g = fr   )rm  lock_storecleanr   s     r'   r   hgsubrepo.storeclean  s*    ZZ__##D) s	   6
Ac                    SnU R                  U5      nU R                  U5       H  nU[        US 5      :w  d  M  Sn  O   U(       a  [        US 5      S L nU$ )NTF)_calcstorehash_readstorehashcachenext)r9   r$   clean	itercachefilehashs        r'   r  hgsubrepo._storeclean  s`    ''-	006H4	400 7  D)T1Er)   c              #     #    SnS[        U5      -  v   U R                  R                  nU HG  n[        [        R
                  " UR                  U5      5      R                  5       5      nSXE4-  v   MI     g7f)zcalculate a unique "store hash"

This method is used to to detect when there are changes that may
require a push to a given remote path.)s	   bookmarkss   store/phaserootss   store/00changelog.is   # %s
   %s = %s
N)r(   rm  r   r   r   r,   tryreadr-   )r9   r.   filelistr   relnamer  s         r'   r  hgsubrepo._calcstorehash  sh      O*:666jjnnG8==W)=>EEGHH'!444  s   A7A9c                t    [         R                  " U R                  R                  R                  S5      5      $ )Ns   cache/storehash)rN  r   rm  rd   r   s    r'   _cachestorehashvfshgsubrepo._cachestorehashvfs  s%    zz$**..--.@ABBr)   c                P    [        U5      nU R                  R                  US5      $ )z7read the store hash cache for a given remote repository   r)r/   r  tryreadlines)r9   r.   	cachefiles      r'   r  hgsubrepo._readstorehashcache  s%    *:6	&&33ItDDr)   c                    [        U5      nU R                  R                  5          [        U R	                  U5      5      nU R
                  nUR                  X#SSS9  SSS5        g! , (       d  f       g= f)zcache the current store hash

Each remote repo requires its own store hash cache, because a subrepo
store may be "clean" versus a given remote repo, but not versus another
s   wbT)r'  
notindexedN)r/   rm  r~  listr  r  
writelines)r9   r.   r  	storehashr   s        r'   _cachestorehashhgsubrepo._cachestorehash  sZ     +:6	ZZ__T00<=I))CNN9eNM s   8A''
A5c                    U R                   R                  5       c  U R                  S   $ U R                  S   nU R                  U   $ )zBfetch the context for this subrepo revision, possibly a workingctxNr   )r   revrm  rd  )r9   r  s     r'   _getctxhgsubrepo._getctx$  s<    99==?"::d##++a.C::c?"r)   c                  ^ ^ UT R                   l        UT R                   l        U(       a  S/mUU 4S jn[        T R                   SS9n[        T R                   SSS9nU" SU5        XV:w  a	  U" SU5        T R                   R                  R                  S[        R                  " S	R                  T5      5      5        g g )
Ns   [paths]
c                z   > U(       a3  TR                  SX4-  5        TR                  R                  SXS5        g g )Nr  s   pathsrb  )r5  rV   rq  )keyvaluelinesr9   s     r'   addpathconfig*hgsubrepo._initrepo.<locals>.addpathconfig4  s4    LL!<=GG%%hJG r)   F)abortTs   defaults   default-pushr^   r)   )	rm  
_subparent
_subsource
_abssourcer   writer   tonativeeolrd   )r9   
parentrepor   r`  r  defpathdefpushpathr  s   `      @r'   rr  hgsubrepo._initrepo,  s     *

 &

!NEH
 !59G$TZZUCK*g.%o{;JJNN  $*:*:388E?*KL r)   c           
     ^   U R                   R                  5          U R                   R                  R                  U R                   5         [        R
                  " UU R                   UUUU40 UD6sS S S 5        sS S S 5        $ ! , (       d  f       O= fS S S 5        g ! , (       d  f       g = fr   )rm  wlockdirstatechanging_filesr
   r   r   s          r'   r   hgsubrepo.addA  s{     ZZ!4!4!C!CDJJ!O;;

  "P!O!O!Os#   0B&B1	B
B	B
B,c           	        [         R                   " U5      nSUS'   U R                  R                  5          U R                  R                  R	                  U R                  5         [
        R                  " U R                  UUUU5      sS S S 5        sS S S 5        $ ! , (       d  f       O= fS S S 5        g ! , (       d  f       g = f)NTr~   )copyrm  r  r  r  r   r   )r9   r  r   r   r   s        r'   r   hgsubrepo.addremoveR  s    
 yy [
 ZZ!4!4!C!CDJJ!O$$

 "P!O!O!Os#   0B7&$B
	B7
B+	'B77
Cc           	         U R                   S   nU R                  U   n[        R                  " U R                  U R                  XqX#U40 UD6$ r   )rd  rm  r
   r   rV   )r9   r   r   r   r   r   r  r   s           r'   r   hgsubrepo.catf  sH    kk!njjo{{GGTZZRV
GK
 	
r)   c           
     v    U R                   S   nU R                  U   nU R                  U   nU R                  R                  " XE40 UD6$ ! [        R                   aX  nU R
                  R                  [        S5      U[        U 5      4-  5        [        R                  " / / / / / / / 5      s S nA$ S nAff = f)Nr   *   warning: error "%s" in subrepository "%s"
)
rd  rm  r   r   RepoLookupErrorrV   rc   r   rH   r   )r9   r   r   rev1ctx1ctx2insts          r'   r   hgsubrepo.statusn  s    
	>;;q>D::d#D::d#D::$$T8488$$ 	>GGLL@AD)*+ >>"b"b"b"==	>s   A	A B8 AB3-B83B8c                ~    [        U R                  S   5      nUb  [        U5      n[        R                  " UU R                  UU R                  U   U R                  U   U4USS.UD6  g ! [
        R                   a<  nU R                  R                  [        S5      U[        U 5      4-  5         S nAg S nAff = f)Nr   T)r   listsubreposr  )r   rd  r   diffordiffstatrm  r   r  rV   rc   r   rH   )	r9   rV   r   r   r   r   r   node1r  s	            r'   r   hgsubrepo.diff|  s    	A'E  E
%%



5!

5!
 !
 
 $$ 	GGLL@AD)*+ 	s   A)A, ,B< 2B77B<c                R   U R                  U R                  S-   5        U R                  5        Vs/ s H  oS" U5      (       d  M  UPM     nnU R                  S   nU R                  U   n[        R
                  " U R                  UR                  5       [        R                  " U R                  U5      4/5        [        R                  XX#5      n	UR                   H@  n
[        XS5      n[        R                  " X5      nX*-   S-   nXR                  XX5      -  n	MB     U	$ s  snf )N)rz   r   T   /)_getrd  r   rm  r   prefetchfilesr  
matchfilesr   r)  r   r4   r	  subdirmatcher)r9   r"  r   r   r   rm   r   r  r   r  subpathrv  submatch	subprefixs                 r'   r)  hgsubrepo.archive  s    		$++() JJL5LqE!HL5kk!njjoJJ#'')W%7%7

E%JKL	
  ''fD||Gd+A--g=H(4/IYYv(CCE	 $
  6s   D$D$c                    U R                   S   nUS:X  a  U(       d  gU R                  S    nX4R                  5       R                  5       :w  a  U(       d  gUR	                  US9$ )Nr   r)   T)r   )rd  rm  p1r   rX   )r9   r   r   rs  ws        r'   rX   hgsubrepo.dirty  sQ    KKN8LJJt

\wwww''r)   c                <    U R                   S   R                  5       $ N   .)rm  r   r   s    r'   r   hgsubrepo.basestate  s    zz$##%%r)   c                j    U R                   R                  U R                   R                  U5      5      $ r   )rm  _checknestedre  r   s     r'   r   hgsubrepo.checknested  s&    zz&&tzz'7'7'=>>r)   c                L   U R                  S5      (       d  U R                  S   R                  5       $ U R                  R	                  S[        U 5      -  5        U R                  R                  XU5      nU(       d  U R                  S   R                  5       $ [        U5      $ )NTr  s   committing subrepo %s
)rX   rm  r   rV   debugrH   r   )r9   r   r   r   ns        r'   r   hgsubrepo.commit  s     zz$::d#''))0:d3CCDJJd$/::d#''))1vr)   c                N    U R                   U=(       d    S   R                  5       $ r  )rm  r   r   s     r'   r   hgsubrepo.phase  s    zz%-4(..00r)   c                    U R                   R                  [        S5      [        U 5      -  5        [        R                  U R                  U R                  R                  S5        g )N   removing subrepo %s
F)rV   noter   rH   r   r  rm  nullidr   s    r'   r   hgsubrepo.remove  sB     	Q/0:d3CCD
TZZ..6r)   c           	       ^ ^ Uu  p#nT R                   R                  nUT R                   R                  5       ;   a/  [        T R                   5      S:w  d  UR	                  5       (       d  gUT R                   l        [        T R                   5      mU U4S jn[        T R                   5      S:X  GaN  T R                   R                  R                  5         UR	                  5       (       a  [        R                  T5      (       a  T R                  R                  [        S5      [        T 5      T4-  5        U" 5       n [        R                  T R                   R                  R                   UT R                   R"                  SSS9nUR%                  5         UR'                  5       T l         GO/UR	                  5       (       aY  T R                  R)                  SS5      n	U	(       a  [*        R,                  " U	5      n	U	T R                  R)                  SS	5      S
.n
O0 n
T R                  R                  [        S5      [        T 5      [.        R0                  " T5      4-  5        U" 5       n [        R3                  T R                   R                  R                   0 UT R                   R"                  SU
S9u  pUR%                  5         UR'                  5       T l         T R5                  XRSS9  T R7                  T5        gT R                  R                  [        S5      [        T 5      [.        R0                  " T5      4-  5        T R9                  T5      nU" 5       n [:        R<                  " T R                   U5        UR%                  5         U(       a  T R7                  T5        g! UR%                  5         f = f! UR%                  5         f = f! UR%                  5         f = f)Nr   Tc                 F   > [         R                  T R                  0 T5      $ r   )r   peerrm  )r9   srcurls   r'   <lambda> hgsubrepo._get.<locals>.<lambda>  s    "''$**b&9r)   s   sharing subrepo %s from %s
F)r  	bookmarkss   share   pools
   poolnaming)r  s   mode   cloning subrepo %s from %s
)r  	shareoptsr_     pulling subrepo %s from %s
)rm  r  ro  r  sharedr  r  r   rmtreer   islocalrV   r   r   rH   sharerl  ru   closerY   rp  r   r   r   hidepasswordclonerr  r  r   r   pull)r9   r   r   revisionr   r  getpeerr  r  poolr  otherclonedcleansubr  s   `             @r'   r  hgsubrepo._get  s   !&$ZZ**
tzz,,..4::!#:+<+<+>+> &

DJJ' :tzz?aJJNN!!#   ""rzz&'9'956!$'01 y	!XX

--44

$"' & F JJL#\\^
 $$&&77>>(G<D#t4 "&!%-!H!I
 !#I56!$')=)=f)EFG y
!$&HH

--44

$"+ %- %ME JJL#\\^
NN:dN;  (  GGNN12d#W%9%9&%ABC v.H9Ddjj$/

$$V,e JJL@ JJL 

s&   ?A	N) -AN> !O )N;>OO%c                   U R                  U5      nUu  pEnU R                  nUR                  R                  SU R                  -  5        U(       aa  UR                  5       nX   n	U	R                  5       (       a8  UR                  R                  [        S5      USS U R                  4-  5        UnU(       a  [        R                  " Xu   5        g [        R                  " Xu   5        g )Ns   getting subrepo %s
s,   revision %s in subrepository "%s" is hidden
r   r+   )r  rm  rV   r  r   ro  hiddenrc   r   r   clean_updater  )
r9   r   r   inrepor   r  r   rx   urepor   s
             r'   r   hgsubrepo.get)  s    5!!&$zz-

:;OO%E/Czz||FG"~tzz23 t~.LL(r)   c                  ^ ^^^^ T R                  T5        T R                  S   mT R                  TS      mTR                  T5      mUUUU U4S jnT R                  S    nT R                  5       (       aC  TT:w  a5  [	        T R
                  T UR                  5       TT5      (       a  U" 5         g g U" 5         g U" 5         g )Nr  r   c                   > T T:X  am  TR                  5       TR                  5       :X  aK  TR                  R                  S[        T5      -  5        [        R                  TR                  TS   5        g T T:X  a(  TR                  R                  S[        T5      -  5        g TR                  R                  S[        T5      -  5        [        R                  TSS9  g )Ns   updating subrepository "%s"
r   s   skipping subrepository "%s"
s   merging subrepository "%s"
F)remind)branchrV   r  rH   r   r  rm  r   )anccurdstr9   r   s   r'   	mergefunc"hgsubrepo.merge.<locals>.mergefuncD  s    czcjjlcjjl:4z$7GG 		$**eAh/4z$7GG 3j6FF U+r)   )r  rm  ancestorrX   r\   rV   )r9   r   r  wctxr  r  r  s   ``  @@@r'   r   hgsubrepo.merge=  s    		%jjjjq"ll3	, 	,  zz$::<<cz $

c3GGK H Kr)   c                   UR                  S5      nUR                  S5      nUR                  S5      nU R                  S   nUR                  n[        U5       H)  nUR	                  U5      R                  U5      S:X  d  M)    g   [        U R                  S5      nU(       d]  U R                  U5      (       aG  U R                  R                  [        S5      [        U 5      [        R                  " U5      4-  5        g U R                  R                  [        S	5      [        U 5      [        R                  " U5      4-  5        [        R                  U R                  SU0U5      n	 [         R
                  " U R                  XUS
9n
U	R#                  5         U R%                  U5        U
R&                  $ ! U	R#                  5         f = f)N   forces
   new_branchs   sshr  r   FTs4   no changes made to subrepo %s since last push to %s
s   pushing subrepo %s to %s
)	newbranch)r   rm  r   sortedrW   r   r  r   rV   r   r   rH   r   r  r   r  r   r  r  cgresult)r9   r   r8  r  sshcsubsrv  dsturlr   rM   s              r'   r   hgsubrepo.push^  sl   "HH]+	hhv JJtzzAuuQx}}T"a'  DJJ-v&&NO!$')=)=f)EFG +,$!5!5f!=>?	
 

VSM6:	--

EINCKKM 	V$||	 KKMs   + F8 8G
c                   SU;   d  SU;   a:  [         R                   " U5      nUR                  SS 5        UR                  SS 5        [        R                  " U R                  5      n[
        R                  XR                  X#US9$ Ns   revs   branch)r  )r  r6   r   repo_rel_or_abs_sourcerm  r   r   )r9   rV   r   r   r  s        r'   r   hgsubrepo.outgoing  sf    T>Y$.99T?DHHVT"HHY%44TZZ@{{2zz4w{GGr)   c                   SU;   d  SU;   a:  [         R                   " U5      nUR                  SS 5        UR                  SS 5        [        R                  " U R                  5      n[
        R                  XR                  X#US9$ r!  )r  r6   r   r"  rm  r   r   )r9   rV   r   r   r  s        r'   r   hgsubrepo.incoming  sf    T>Y$.99T?DHHVT"HHY%44TZZ@{{2zz6{IIr)   c                z    U R                   S   nU R                  U   nUR                  5       R                  5       $ r   )rd  rm  manifestkeys)r9   r  r   s      r'   r   hgsubrepo.files  s1    kk!njjo||~""$$r)   c                    U R                   S   nU R                  U   U   R                  5       nU(       a  U R                  R                  X5      nU$ r   )rd  rm  data
wwritedata)r9   r   r   r  r+  s        r'   r  hgsubrepo.filedata  sF    kk!nzz#t$))+::((4Dr)   c                `    U R                   S   nU R                  U   nUR                  U5      $ r   )rd  rm  r&  )r9   r   r  r   s       r'   r  hgsubrepo.fileflags  s*    kk!njjoyyr)   c           	         U R                   R                  5       c  U R                  S    nOU R                  S   nU R                  U   n[        R
                  " XX#XEU5      $ r   )r   r  rm  rd  r
   r   )	r9   rV   r  r   r   r  r  r   r  s	            r'   r  hgsubrepo.printfiles  sQ     99==?"**T"C++a.C**S/C}}Ra2HEEr)   c           
        U R                   R                  5       c  U R                  S    nOU R                  S   nU R                  U   nUR	                  XUS9/nUR
                   HK  nUR                  U5      n UR	                  XUS9n	[        R                  " XyUS9n
UR                  U
5        MM     [%        U5      S:X  a  US   $ [        R&                  " U5      $ ! [        R                   aN    U R                  R                  [        S5      U R                  R!                  [#        U 5      U5      -  5         M  f = f)Nr   r  s#   skipping missing subrepository: %s
r   )r   r  rm  rd  r  r   rW   r	  prefixdirmatcherr5  r   LookupErrorrV   r   r   rv   rf   rR  r  unionmatcher)r9   r  r  r  r   r  matchersr  rW   smpms              r'   r  hgsubrepo.matchfileset  s   99==?"**T"C++a.C**S/C$$Se$<=||G'''"C%%cu%=..w%H# $ x=AA;$$X.. $$ =>ii''D(97CDs   <6C  AEEc                B    U R                   S    nUR                  U5      $ r   )rm  r_   )r9   r   r   s      r'   r_   hgsubrepo.walk  s    jjxxr)   c                p   U R                   R                  5          U R                   R                  R                  U R                   5         [        R
                  " U R                  U R                   UUUSUUS9sS S S 5        sS S S 5        $ ! , (       d  f       O= fS S S 5        g ! , (       d  f       g = f)NT)r0  r1  )rm  r  r  r  r
   r2  rV   r/  s         r'   r2  hgsubrepo.forget  s{     ZZ!4!4!C!CDJJ!O>>

'	 "P!O!O!Os#   0B'/B:	B'
B	B''
B5c	                v   U R                   R                  5          U R                   R                  R                  U R                   5         [        R
                  " U R                  U R                   UUUUUUU5	      sS S S 5        sS S S 5        $ ! , (       d  f       O= fS S S 5        g ! , (       d  f       g = fr   )rm  r  r  r  r
   r   rV   r6  s	            r'   r:  hgsubrepo.removefiles  s~      ZZ!4!4!C!CDJJ!O>>


 "P!O!O!Os#   0B*2B=	B*
B	B**
B8c                0   U R                   R                  [        S5      US   -  5        UR                  S5      (       d/  UR	                  5       nS US'   US   US'   U R
                  " U0 UD6  UR                  S5      (       d  U R                  USS	9  g g )
N   reverting subrepo %s
r   	no_backupr   r   r  dry_runTr   )rV   r   r   r   r  
filerevertr=  s       r'   r?  hgsubrepo.revert  s     	q23hqkABxx$$ 99;DDL"1+DKOOT*T* xx	""HHXH. #r)   c                   U R                   US      nUR                  S5      (       a  S/nO/ nU R                   R                  5          U R                   R                  R	                  U R                   5         [
        R                  " U R                  U R                   U/UQ70 UD6  S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr  alls   set:modified())rm  r   r  r  r  r
   r?  rV   )r9   r>  r   r   s       r'   rE  hgsubrepo.filerevert  s    jje%88E??%&DD
 ZZ!4!4!C!CDJJ!ONN477DJJCdCdC "P!O!Os$   	0C91B;*C;
C		C
Cc                    US S $ )Nr+   rC   rB  s     r'   rD  hgsubrepo.shortid   s    Sbzr)   c                   SSK Jn  UqU R                  R                  5       (       a1  U R                  R                  [        S5      U R                  -  5        [        R                  U R                  U R                  5        g )Nr   r   s   unsharing subrepo '%s'
)	r   r   rm  r  rV   r   r   rS  rG  )r9   r   s     r'   rG  hgsubrepo.unshare#  sV     	
 ::GGNN189DMMIJ


477DJJ'r)   c                    U R                   S   nU R                  R                  5       U   nUR                  5       (       a  [	        S5      U R
                  [        U R                  R                  5       5      4-  nU(       a  [        R                  " U5      eU R                  R                  R                  SU-  5        g! [        R                   a    [	        S5      U R
                  [        U R                  R                  5       5      4-  nU(       a  [        R                  " U5      eU R                  R                  R                  SU-  5         gf = f)Nr   s%   subrepo '%s' is hidden in revision %ss   %s
r   s%   subrepo '%s' not found in revision %s)rd  rm  ro  r  r   rS  r	   r   noder   r7   rV   rc   r  )r9   rJ  r  r   r[   s        r'   rK  hgsubrepo.verify6  s   	++a.C**'')#.Czz|| @AMM$))..*+E 
 ++c**JJMM&&w}5$$ 	 <=diinn&'A C
 kk#&&

""7S=1	s   CC BEEc                .    U R                   R                  $ )z.return own wvfs for efficiency and consistency)rm  rv   r   s    r'   rv   hgsubrepo.wvfsU  s     zzr)   c                ,    [        U R                  5      $ rQ  )rR  rm  r   s    r'   rS  hgsubrepo._relpathZ  s     4::&&r)   )rm  rd  rV   rW  rY  rZ  rU  rV  r   )3r=   r>   r?   r@   r8   rS   r   r   r  r  r[  r  r  r  r  rr  r   r   r   r   r   r)  rX   r   r   r   r   r   r  r   r   r   r   r   r   r  r  r  r  r_   r2  r:  r?  rE  rD  rG  rK  rv   rS  rB   __classcell__ry  s   @r'   r]  r]    s    ,D E E*5 C CE

N# M M(     & 
 
 > >  0    ( (&? 	 	 1 1 7 7Yv ) )&  @    D H H J J % %

 F F / /2  "  8 / /*D ( ($>   ' 'r)   r]  c                     ^  \ rS rSrU 4S jrSS jr\S 5       rS rS r	S r
S r\SS	 j5       rS
 r\S 5       r\S 5       r\SS j5       r\S 5       rS r\S 5       rS rSrU =r$ )
svnsubrepoia  c                   > [         TU ]  X5        X0l        [        R                  " S5      U l        U R
                  (       d,  [        R                  " [        S5      U R                  -  5      eg )Nr|   s+   'svn' executable not found for subrepo '%s')
rc  r8   rd  r   findexe_exer   r7   r   r   r9   r   r$   r   r   ry  s        r'   r8   svnsubrepo.__init__b  sV    #$$V,	yy++@ADJJN  r)   c           
        U R                   /n0 nU R                  R                  5       (       d-  [        R                  US'   US   S;   a  UR                  S5        [        [        S5      (       a  [        [        S5      US'   UR                  U5        UbZ  U R                  R                  U R                  R                  5       R                  U R                  U5      nUR                  U5        [        [         R"                  5      nUR%                  S5      nU(       a  XS'   US	 S	US
'   [        R&                  " [(        R*                  " [,        R.                  U5      4S[,        R0                  [        R                  [        R                  [,        R2                  " U5      S.UD6n	[5        [6        R8                  U	R;                  5       5      u  pUR=                  5       nU(       db  U	R>                  (       a,  [@        RB                  " U=(       d    SU	R>                  -  5      eU(       a  U R                  RE                  US-   5        X4$ )Nstdinr   )   update   checkout   commits   --non-interactiveCREATE_NO_WINDOWcreationflags   LC_ALLs   LANG   Cs   LC_MESSAGES)bufsize	close_fdsstdoutstderrenvs   exited with code %d   
)#r[  rV   r1  
subprocessPIPEr5  hasattrgetattrextendrv   rf   r   rx   origrootr   dictr   environr   Popenr   rapplyr   tonativestrclosefdstonativeenvmapr   fromnativeeolcommunicatestrip
returncoder   r7   rc   )r9   commandsfilenamefailokcmdextrakwr$   rl  lc_allprj  rk  s               r'   _svncommandsvnsubrepo._svncommandk  s   yykww""$$  *GG
 {AA

/0:122 (/z;M'NGO$

899$$		 ))4::xD JJt8##$#!LI"NOOH00#6
''????$$S)
 
 T//A||kkC4q||C  Ve^,~r)   c                   U R                  SS/S S9u  p[        R                  " SU5      nU(       d  [        R                  " [        S5      5      e[        UR                  S5      5      [        UR                  S5      5      4$ )N	   --version   --quiet)r  s   ^(\d+)\.(\d+)s    cannot retrieve svn tool versionr   r   )r  researchr   r7   r   intgroup)r9   outputerrr  s       r'   _svnversionsvnsubrepo._svnversion  sq    &&:& ' 
 II'0++a CDEEAGGAJQWWQZ11r)   c                B    U R                   R                  S5      (       + $ )N   .svnrv   rg  r   s    r'   _svnmissingsvnsubrepo._svnmissing      99##G,,,r)   c                   U R                  SS/5      u  p[        R                  R                  R	                  U5      nUR                  S5      nSu  pVU(       a}  [        R                  " US   R                  S5      5      =(       d    SnUS   R                  S5      nU(       a1  [        R                  " US   R                  S5      5      =(       d    SnXV4$ )	Ns   info   --xmlentry)   0r  r   r  r  r   )	r  xmldomminidomparseStringgetElementsByTagNamer   bytestrgetAttribute)r9   r  r  docentrieslastrevr  commitss           r'   _wcrevssvnsubrepo._wcrevs  s     &&':;ggoo))&1**73!""71:#:#::#FGO4Caj55h?G$$WQZ%<%<Z%HI   ~r)   c                (    U R                  5       S   $ )Nr   )r  r   s    r'   _wcrevsvnsubrepo._wcrev  s    ||~a  r)   c                   U R                  SS/5      u  p/ / / pTn[        R                  R                  R	                  U5      nUR                  S5       H  nUR                  S5      nU(       d  M  US   R                  S5      n	US   R                  S5      n
UR                  S5      R                  S	5      nU	S
:X  a  UR                  U5        OU	S:X  a  UR                  U5        U	S;  d  U
S;  d  M  UR                  U5        M     U HJ  nU HA  nX:X  d)  UR                  U[        R                  -   5      (       d  M1  SS[        U5      4s  s  $    ML     [        U5      S[        U5      4$ )zReturn (changes, extchanges, missing) where changes is True
if the working directory was changed, extchanges is
True if any of these changes concern an external entry and missing
is True if any change is a missing entry.
   statusr  r  z	wc-statusr   itempropsr$   utf8externalr   )r   normalunversionedr  )r   noner  TF)r  r  r  r  r  r  r  encoder5  rs   r   ossepbool)r9   r  r  	externalschangesr   r  erv  r  r  r$   exts                r'   
_wcchangedsvnsubrepo._wcchanged  sR    &&	8'<=&("bG	ggoo))&1))'2A&&{3AQ4$$V,DaD%%g.E>>&)008Dz!  &"t$  
 44t$# 3$ D ;$//#2F"G"GtG}44 !  G}eT']22r)   c                   U R                  5       (       a  U R                  S   S:g  $ U R                  5       nUS   =(       d    U=(       a    US   nU(       d)  U R                  S   U R                  5       ;   d  U(       a  gg)Nr   r)   r   r   FT)r  rd  r  r  )r9   r   r   	wcchangedchangeds        r'   rX   svnsubrepo.dirty  sh    ;;q>S((OO%	A,<7#;y|{{1~/<r)   c                    U R                  5       u  pX:w  a(   U R                  SSU R                  S   U4-  /5        U$ U$ ! [        R                   a     U$ f = f)N   list   %s@%sr   )r  r  rd  r   r7   )r9   r  r  s      r'   r   svnsubrepo.basestate  sl    ||~>
  h$++a.')BBC  
 ;; 
s   &A AAc                   U R                  5       u  pEnU(       d  U R                  5       $ U(       a  [        R                  " [	        S5      5      eU(       a  [        R                  " [	        S5      5      eU R                  SSU/5      u  pxU R                  R                  U5        [        R                  " SU5      n	U	(       d[  UR                  5       (       d  [        R                  " [	        S5      5      e[        R                  " UR                  5       S   5      eU	R                  5       S   n	U R                  R                  U R                  S	S
U	/5      S   5        U	$ )Ns   cannot commit svn externalss!   cannot commit missing svn entriesrb     -ms   Committed revision ([0-9]+).s   failed to commit svn changesrg  r   r`     -r)r  r   r   r7   r   r  rV   r   r  r  r~  
splitlinesgroups)
r9   r   r   r   r  
extchangedr   
commitinfor  newrevs
             r'   r   svnsubrepo.commit  s    (,'8$W>>##++a >?@@ ++a DEFF**Iud+CD
z":JG##%%
 kk!$C"DEE++j335b9::#t''E6(BCAFGr)   c                   U R                  5       (       a2  U R                  R                  [        S5      U R                  -  5        g U R                  R                  [        S5      U R                  -  5        U R                  R                  SS9   U R                  R                  5       R                  nUR                  UR                  U R                  5      5        g ! [         a     g f = f)N-   not removing repo %s because it has changes.
r  T)forcibly)rX   rV   rc   r   r   r  rv   r  r   rx   
removedirsrh   OSError)r9   pwvfss     r'   r   svnsubrepo.remove  s    ::<<GGLLCD** Q/04::=>		$'	IINN$))EU]]4::67 		s   AC" "
C/.C/c                   U(       a  U R                  SS/5        S/nU R                  S:  a  UR                  S5        UR                  SUS   US   4-  5        [        R                  " US   5        U R                  US	S
9u  pE[        U R                  U R                  S5        [        R                  " SU5      (       dn  SU;   a8  U R                  5       S S S:X  a!  U R                  5         U R                  USS9  g [        R                  " U=(       d    UR                  5       S   5      eU R                  R!                  U5        g )Ns   revert   --recursivera  )r         --forcer  r   r   T)r  r  s   Checked out revision [0-9]+.s-   is already a working copy for a different URLr   rU  FrD  rg  )r  r  r5  r   checksafesshrn   rV   rv   r  r  r  r   r   r   r7   r  r   )r9   r   r   r:   r   r  s         r'   r   svnsubrepo.get(  s   i89}v%KK
# 	Ha%(334 	U1X&&&tD&9$''499g.yy8&AA?3F!"1%7 %0++v}88:2>??vr)   c                    U R                   S   nUS   nU R                  5       nX4:w  aN  X$:H  =(       d    U R                  5       S   n[        U R                  XXC5      (       a  U R                  US5        g g g )Nr   r   F)rd  r  r  r\   rV   r   )r9   r   oldnewwcrevrX   s         r'   r   svnsubrepo.mergeC  sk    kk!nAh<L8DOO$5a$8ETWWd5>>& ? r)   c                    g)NTrC   r   s     r'   r   svnsubrepo.pushM  s    r)   c                   U R                  / SQ5      S   n[        R                  R                  R	                  U5      n/ nUR                  S5       H  n[        R                  " UR                  S5      5      nUS:w  a  M0  SR                  S UR                  S5      S   R                   5       5      nUR                  UR                  S	5      5        M     U$ )
N)r  r  r  r   r  r   s   filer   c              3  r   #    U  H-  nUR                   UR                  :X  d  M  UR                  v   M/     g 7fr   )nodeType	TEXT_NODEr+  ).0r  s     r'   	<genexpr>#svnsubrepo.files.<locals>.<genexpr>Z  s-      EA::, Es   77r   r  )r  r  r  r  r  r  r   r  r  rd   
childNodesr5  r  )r9   r  r  pathsr  r   r   s          r'   r   svnsubrepo.filesQ  s    !!"EFqIggoo))&1))'2A##ANN6$:;Dw77 //7:EE D
 LLV,- 3 r)   c                .    U R                  S/U5      S   $ )Ns   catr   )r  r   s      r'   r  svnsubrepo.filedatab  s    $/22r)   )r[  rd  )r)   FrU  rV  )r=   r>   r?   r@   r8   r  r[  r  r  r  r  r  rS   rX   r   r   r   r   r   r   r   r  rB   rU  rV  s   @r'   rX  rX  a  s    0d 2 2-$!3B     6     4 ' '   3 3r)   rX  c                    ^  \ rS rSrU 4S jrS r\S 5       r\S 5       rS$S jr	S$S j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S r\S&S j5       rS r\S'S j5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r S(S)S jjr!\S 5       r"\S*S j5       r#\S  5       r$\S! 5       r%S" r&S#r'U =r($ )+
gitsubrepoif  c                   > [         TU ]  X5        X0l        UR                  5       R	                  U5      U l        UR                  5       U l        U R                  5         g r   )rc  r8   rd  rx   re  _abspathr  
_ensuregitr\  s        r'   r8   gitsubrepo.__init__g  sD    #
((.((*r)   c           	     f    SU l         U R                  S/5      u  pU R                  U5      nUS	:X  a%  U R                  R!                  [        S
5      5        g US:X  a  [        R                  " [        S5      5      eUS:X  a%  U R                  R!                  [        S5      5        g g ! [         Ga{  n[        S5      n[        S5      nUR                  [        R
                  :w  aB  [        R                  " X@R                  [        R                  " UR                  5      4-  5      e[        R                  (       a   SU l         U R                  S/5      u  p S nAGNE! [         a  nUR                  [        R
                  :X  a+  [        R                  " [        S5      U R                  -  US9e[        R                  " UU R                  [        R                  " UR                  5      4-  5      eS nAff = f[        R                  " [        S5      U R                  -  US9eS nAff = f)Nr{   r  s(   error executing git for subrepo '%s': %ss'   check git is installed and in your PATHs   git.cmds1   couldn't find 'git' or 'git.cmd' for subrepo '%s'r   s"   couldn't find git for subrepo '%s'   unknowns   cannot retrieve git version
   aborts,   git subrepo requires at least 1.6.0 or later   warnings-   git subrepo requires at least 1.6.0 or later
)_gitexecutable	_gitnodirr  r   errnoENOENTr   r7   r   r   
strtolocalstrerrorr   	iswindows_checkversionrV   rc   )r9   outr  r  genericerrornotfoundhinte2versionstatuss           r'   r  gitsubrepo._ensuregitn  s   !	"(D~~|n5HC@ **3/J&GGLL;<=h&++AB  j(GGLLLMN )M  	HILGHLww%,,&kk JJ0C0CAJJ0O#PP  ##*4D'#~~|n=HC xx5<</#kk!5 #jj	)
 ".  $kk(#zz8+>+>r{{+KLM   kk;<tzzI% 7	s7   B* *H05BH+E""
G=,BG88G==.H++H0c                   [         R                  " SU 5      nU(       aM  [        UR                  S5      5      [        UR                  S5      5      [        UR                  S5      5      4$ [         R                  " SU 5      nU(       a5  [        UR                  S5      5      [        UR                  S5      5      S4$ g)Ns    ^git version (\d+)\.(\d+)\.(\d+)r   r      s   ^git version (\d+)\.(\d+)r   rg  )r  r  r  r  )r  r  s     r'   _gitversiongitsubrepo._gitversion  s    II:C@
OS_c!''!*oFFII3S9
OS_a88r)   c                X    [         R                  U 5      nUS:X  a  gUS:  a  gUS:  a  gg)a  ensure git version is new enough

>>> _checkversion = gitsubrepo._checkversion
>>> _checkversion(b'git version 1.6.0')
'ok'
>>> _checkversion(b'git version 1.8.5')
'ok'
>>> _checkversion(b'git version 1.4.0')
'abort'
>>> _checkversion(b'git version 1.5.0')
'warning'
>>> _checkversion(b'git version 1.9-rc0')
'ok'
>>> _checkversion(b'git version 1.9.0.265.g81cdec2')
'ok'
>>> _checkversion(b'git version 1.9.0.GIT')
'ok'
>>> _checkversion(b'git version 12345')
'unknown'
>>> _checkversion(b'no')
'unknown'
rg  r  )r   r  r   r  )r      r   r  s   ok)r  r  )r  versions     r'   r  gitsubrepo._checkversion  s9    0 ((- b=Yy r)   c                (    U R                  XUS9S   $ )N)rl  streamr   _gitdirr9   r  rl  r  s       r'   _gitcommandgitsubrepo._gitcommand  s    ||Hf|=a@@r)   c                6    U R                  XX0R                  S9$ )N)rl  r  r  )r  r  r  s       r'   r  gitsubrepo._gitdir  s!    ~~f--  
 	
r)   c           
        U R                   R                  SU R                  SR                  U5      4-  5        Uc  [        R
                  R                  5       nSUS'   SU;  a  SUS'   SnU R                   R                  (       a%  [        R                  " [        R                  S5      nU R                   R                  (       a+  [        U5      (       a  US	   S
:X  a  UR                  SS5        0 n[        [         S5      (       a  [#        [         S5      US'   [         R$                  " [        R&                  " [(        R*                  U R,                  /U-   5      4S[        R&                  " [(        R*                  U5      [(        R.                  " U5      [(        R0                  [         R2                  US.UD6nU(       a  UR4                  S4$ UR4                  R7                  5       R9                  5       nUR;                  5         UR<                  S	:w  a`  UR<                  S:w  aP  US	   n	U	S;   a  XR<                  4$ [>        R@                  " [C        S5      XR<                  U R                  4-  5      eXR<                  4$ )zCalls the git command

The methods tries to call the git command. versions prior to 1.6.0
are not supported and very probably fail.
s   %s: git %s
rF   Nrf  re  s   GIT_ALLOW_PROTOCOLs   file:git:http:https:ssh   wr      diffr   s   --colorrc  rd  rg  )rh  r  rl  ri  rj  rk  )   cat-file   symbolic-refs   git %s error %d in %s)"rV   r  rS  rd   r   ru  r  quietr   openrh  devnull
_colormoder  insertrp  rn  rq  rv  rw  r   rx  r  rz  ry  ro  rj  readr~  waitr  r   r7   r   )
r9   r  rl  r  r  errpiper  r  retdatacommands
             r'   r  gitsubrepo._gitnodir  s    	o		(8K(LLM;""'')CI +)CC%& 77==mmBJJ5G77#h--HQK74J OOAz*:122 (/z;M'NGO$OO$$t':':&;h&F
  4 4c:$$S)''??
 
 88T>!((--/'')	<<1!2qkG88,,++*+LL$--89 
 $$r)   c                B    U R                   R                  S5      (       + $ )N   .gitr  r   s    r'   _gitmissinggitsubrepo._gitmissing  r  r)   c                (    U R                  SS/5      $ )Ns	   rev-parse   HEADr  r   s    r'   	_gitstategitsubrepo._gitstate  s    w 788r)   c                B    U R                  / SQ5      u  pU(       a  S nU$ )N)r  r/  r  r  )r9   currentr  s      r'   _gitcurrentbranchgitsubrepo._gitcurrentbranch  s     ||$JKGr)   c                    U R                  SSSU/5      nUR                  S5      S   nUR                  S5      [        S5      -   nX4S  $ )Ns   remote   shows   -nrm  r   s   URL: )r  splitindexr  )r9   rZ   r  linerk   s        r'   
_gitremotegitsubrepo._gitremote  sN    	7E6BCyy"JJx 3x=0Bxr)   c                8    U R                  SSU/5      u  p#US:H  $ )Nr  s   -er   r  )r9   r  r  codes       r'   _githavelocallygitsubrepo._githavelocally!  s#    LL+uh!?@	qyr)   c                0    U R                  SX/5      nX1:H  $ )N
   merge-baser0  )r9   r1r2bases       r'   _gitisancestorgitsubrepo._gitisancestor%  s     78zr)   c                .    U R                  / SQ5      S:H  $ )N)   configs   --bool	   core.bare   truer0  r   s    r'   
_gitisbaregitsubrepo._gitisbare)  s     DEPPr)   c                *    U R                  / SQ5        g)zThis must be run before git diff-index.
diff-index only looks at changes to file stat;
this command looks at file contents and updates the stat.)s   update-index   -qs	   --refreshNr0  r   s    r'   _gitupdatestatgitsubrepo._gitupdatestat,  s     	?@r)   c                   0 n0 nU R                  / SQ5      nUR                  S5       H  nUR                  S5      u  pVUR                  S5      (       d  UR                  S5      (       d  MD  UR                  S5      (       a  UR                  S5      (       a  Mr  XQU'   UR	                  U/ 5      R                  U5        M     X4$ )zSreturns 2 things:
a map from git branch to revision
a map from revision to branches)s   for-each-refs   --formats   %(objectname) %(refname)rm  rF   s   refs/heads/   refs/remotes/s   /HEAD)r  r9  rs   endswith
setdefaultr5  )r9   
branch2rev
rev2branchr  r;  r  refs          r'   _gitbranchmapgitsubrepo._gitbranchmap2  s     

G
 IIe$D JJt,MH>>.11#.. ; ; ~~.//CLL4J4J&sO!!(B/66s; % %%r)   c           	        0 nU H  nUR                  S5      (       a  M  UR                  SS5      S   nU R                  SSU-  /5      nU(       d  MO  U R                  SSU-  /5      nUUSXVR                  SS5      S   4-  '   M     U$ )z4return map of remote branch to local tracking branchrT  r  r   rJ  s   branch.%s.remotes   branch.%s.merges   refs/remotes/%s/%s)rs   r9  r  )r9   branchestrackingbbnamerZ   rY  s          r'   _gittrackinggitsubrepo._gittrackingH  s     A||,--GGD!$Q'E%%y2E2M&NOFv&&	3E3M'NO  )VYYtQ5G5J,KK  r)   c                t    SU;  a"  UR                  S5      nUS:w  a  SUS U ;  a  U$ Xl        [        U 5      $ )Ns   ://   :rg  r  )findr  r  )r9   r   colons      r'   r  gitsubrepo._abssourceX  sA    KK%E{t6&5>9 $r)   c                x   U R                  5       (       aw  [        R                  " U5        U R                  U5      nU R                  R                  [        S5      U R                  U4-  5        U R                  SXR                  /5        U R                  U5      (       a  g U R                  R                  [        S5      U R                  U R                  S5      4-  5        U R                  S/5        U R                  U5      (       d-  [        R                  " [        S5      X R                  4-  5      eg )Nr  s   cloner     origins   fetchs1   revision %s does not exist in subrepository "%s"
)r,  r   r  r  rV   r   r   rS  r  r  r@  r<  r  r   r7   )r9   r   r  s      r'   _fetchgitsubrepo._fetcha  s     (__V,FGGNN12dmmV5LL NNHfmm<=))-.}}dooi89:	

 	($##H--++GH]]+,  .r)   c                "   U R                  5       (       a  U R                  S   S:g  $ U R                  5       (       a  gU(       d"  U R                  S   U R                  5       :w  a  gU R	                  5         U R                  / SQ5      u  p4US:H  $ )Nr   r)   T
   diff-indexr  r/  )r,  rd  rM  r1  rQ  r  )r9   r   r   r  r?  s        r'   rX   gitsubrepo.dirtyy  sw    ;;q>S((??A$..2B BLL!EF	qyr)   c                "    U R                  5       $ r   )r1  r   s    r'   r   gitsubrepo.basestate  s    ~~r)   c                N  ^ ^^^ Uu  nmnT(       d  T R                  5         g T R                  UT5        T R                  5       (       a<  T R                  / SQ5        T R	                  5       T:X  a  T R                  / SQ5        g OBT R	                  5       T:X  a.  T(       a&  T R                  SS/5        T R                  / SQ5        g T R                  5       u  pVUU 4S jmUUU 4S jnTU;  a  U" 5         g UT   nS n	U H7  n
U
S:X  a  T" S/5          g U	(       a  M  U
R                  S5      (       a  M5  U
n	M9     U	(       a
  T" U	/5        g T R                  UR                  5       5      nUS	   nX;  a  U H  n
X;   d  M
  U
n  O   X;  a   UR                  S
S5      S   nT" SX/5        g T R                  X[U      U5      (       aW  X   T R                  5       :w  a  T" X   /5        T R                  SSU/5        [        T R                  T R                  S5        g U" 5         g )N)rJ  rK  s   false)   resets   --hardr/  rs  r/  c                   > S/nT(       a$  TR                  SS/5        UR                  S5        TR                  X-   5        [        TR                  TR                  S5        g )Nra  rs  r/     -fr+  )r  r5  rn   rV   rv   )r:   r  r   r9   s     r'   checkout gitsubrepo.get.<locals>.checkout  sR    -C   (G!45

5!SZ(dggtyy'2r)   c                    > TR                   R                  [        S5      TR                  -  5        TR                   R                  [        S5      5        T " ST/5        g )Ns1   checking out detached HEAD in subrepository "%s"
s5   check out a git branch if you intend to make changes
rP  )rV   rc   r   rS  )rv  r  r9   s   r'   rawcheckout#gitsubrepo.get.<locals>.rawcheckout  sR    GGLLGH--  GGLLKL eX&'r)   s   refs/heads/masterrT  r   r  r
  s   -b   merges   --ffr+  )r   rj  rM  r  r1  rZ  rs   ra  r(  r9  rG  r5  rn   rV   rv   )r9   r   r   r   r   rW  rX  ry  r]  firstlocalbranchr_  r^  rZ   rY   rv  r  s   ` `           @@r'   r   gitsubrepo.get  s   !&$KKMFH%??@A~~8+  !?@ , ^^)   (G!45  !?@!%!3!3!5
		3		( :%Mh'A((./0##ALL9I,J,J#$   &'($$Z__%67!!=F 
 !LLq)!,EeU+,  V,<!=vFF 4#9#9#;;(*+,h89dggtyy'2 Mr)   c                h   U R                  5       (       a,  [        R                  " [        S5      U R                  -  5      eSSSU/n[
        R                  R                  5       nU(       a  USU/-  nU(       a  [        R                  " US5      US'   U R                  XES9  U R                  5       $ )	N   subrepo %s is missingrb  s   -ar  s   --authors   %Y-%m-%dT%H:%M:%S %1%2s   GIT_AUTHOR_DATE)rl  )r,  r   r7   r   rS  r   ru  r  r   datestrr  r1  )r9   r   r   r   r  rl  s         r'   r   gitsubrepo.commit  s    ++a 89DMMIJJ%-##%K&&C '/&6&6/'C"# 	& ~~r)   c           	       ^ ^^^	 Tu  nm	nT R                  UT	5        T R                  ST	T R                  S   /5      mT R                  5         T R	                  / SQ5      u  pEUU	U U4S jnT R                  5       (       a{  T R                  5       T	:w  af  T R                  5       T R                  S   :H  =(       d    US:g  n[        T R                  T UT R                  S   S S T	S S 5      (       a  U" 5         g g g U" 5         g )NrC  r   rm  c                    > T T:X  a  TR                  T5        O'T TR                  S   :w  a  TR                  SST/5        [        TR                  TR
                  S5        g )Nr   r{  s   --no-commitr+  )r   rd  r  rn   rV   rv   )rF  r  r9   r   s   r'   r  #gitsubrepo.merge.<locals>.mergefunc  sO    xQ'  (NH!EFdggtyy'2r)   r      )	rj  r  rd  rQ  r  rX   r1  r\   rV   )
r9   r   r   r   r  r?  r  rX   rF  r  s
   ``      @@r'   r   gitsubrepo.merge  s    !&$FH%$++a. IJLL!EF		3 	3 ::<<~~8+(DKKN:Gdai GGT5$++a.!*<hrl  K , Kr)   c                   UR                  S5      nU R                  S   (       d  gU R                  5       (       a,  [        R                  " [        S5      U R                  -  5      eU R                  5       u  p4U R                  S   U;   a0  X@R                  S       H  nUR                  S5      (       d  M    g   UR                  5        HC  u  pVUR                  S5      (       d  M  U R                  U R                  S   U5      (       d  MC    g   S/nU(       a  UR                  S5        U R                  5       nU(       a  U R                  U R                  S   U5      (       d2  U R                  R                  [        S5      U R                  -  5        g	U R                  R                  [        S
5      UR!                  SS5      S   U R                  4-  5        U R#                  USU/-   5      n	U	S   S:H  $ U R                  R                  [        S5      U R                  U R                  S   4-  5        g	)Nr  r   Tr  s   refs/remotes/origin/s   pushr  s7   unrelated git branch checked out in subrepository "%s"
Fs(   pushing branch %s of subrepository "%s"
r  r   ri  r   sD   no branch checked out in subrepository "%s"
cannot push revision %s
)r   rd  r,  r   r7   r   rS  rZ  rs   itemsrG  r5  r5  rV   rc   r   r9  r  )
r9   r   r8  rW  rX  r_  r  r  r4  rets
             r'   r   gitsubrepo.push  s   "{{1~++a 89DMMIJJ!%!3!3!5
;;q>Z'A/<< 788 0 &++-KA||344&&t{{1~x@@ .
 iJJz"((*&&t{{1~w??3 mm	$ GGNN>?==q)!,dmm<= ,,si%99:Cq6Q;GGLL1 ==$++a.1	2 r)   c                   U R                  5       (       a  / $ U R                  S SSS9n[        5       nUR                  UR                  UR
                  UR                  4 H  n	UR                  U	5        M     UR                  n
U
R                  UR                  5       5        / n[        [        U
5      5       Vs/ s H  o" U5      (       d  M  UPM     n
nU
 H  nUR                  U5      nS/nU(       a  UR                  S5        UR                  (       d  U(       d#  UR                  [        S5      U" U5      -  5        X;   a  U(       a  UR                  U5        M  UR!                  S5      (       a  M  U R#                  X/-   5        M     U H&  nUR%                  [        S5      U" U5      -  5        M(     U$ s  snf )NT)unknownr  s   addru  s
   adding %s
rC  s   %s already tracked!
)r,  r   setmodifiedaddeddeletedr  r  r  rr  r   r  exactr5  verboser   r   r  rc   )r9   rV   r   r   r   r   r   rv  trackedlr   rejectedrm   r  r(  s                  r'   r   gitsubrepo.addB  sb   IKKd$K7%**aggqyy!'':ANN1 ; 		U[[]#"3u:.;.q%(.;AKKNEhGu%zz		!N+hqk9:|OOA&88I&&  3/  AGGA./(1+=>  ' <s   <GGc                4   U R                  5       (       a  g U R                  5       (       a2  U R                  R                  [	        S5      U R
                  -  5        g U R                  R                  [	        S5      U R
                  -  5        U R                  / SQ5        U R                  R                  5        HY  u  pUS:X  a  M  U[        R                  :X  a  U R                  R                  U5        M>  U R                  R                  U5        M[     g )Nr  r  )rJ  rK  rL  r+  )r,  rX   rV   rc   r   rS  r  r  rv   readdirstatS_IFDIRr  re   )r9   rm   r   s      r'   r   gitsubrepo.removei  s    ::<<GGLLCD--   	Q/04==@A;<yy((*GAG|t||#		  #		  # +r)   c                   SnU R                   u  pgU(       d  U$ U R                  Xg5        U R                  SU/SS9n[        R                  " USS9n	[        U 5      n
U R                  R                  [        S5      U
-  [        S5      S	9nS nUR                  S5        U	 GH  nUR                  5       (       a  M  [        R                  " UR                  5      nU" U5      (       d  MJ  UR                  5       (       a  UR                  nORU	R!                  U5      nU(       a  UR#                  5       nO)U R                  R%                  [        S
5      U-  5        M  Uc  U" 5       nUR'                  X.-   UR(                  UR                  5       U5        US-  nUR+                  5         GM     UR-                  5         U$ )Nr   s   archiveT)r  zr|)fileobjr'  r  r  )r  s   skipping "%s" (unknown type)r   )rd  rj  r  tarfiler   rH   rV   r  r   r  isdirr   fsencoder   issymlinknameextractfiler$  rc   r  r'  r   r!  )r9   r"  r   r   r   r  r   r  	tarstreamtarr#  r$  r%  infor`  r+  rm   s                    r'   r)  gitsubrepo.archive  sx   ;;LF%
 $$j(%;D$I	ll948T"77'' 7*8 ( 
 Dzz||%%dii0E<<zz||}}OOD)668DGGLL#B!Ce!KL!8V^TYY

dKQJE ' ( 	r)   c           	        U R                   S   nUR                  5       (       a  gUR                  5       (       d  gUR                  5        Hl  nU R                  SSXg4-  /5      n[        R
                  " U R                  X0R                  R                  XG5      S9 n	U	R                  U5        S S S 5        Mn     g! , (       d  f       M  = f)Nr   r8  s   %s:%s)pathnamer   )
rd  anypatsr   r  r
   makefileobjr   rv   rf   r  )
r9   r   r   r   r   r   r  rm   r  fps
             r'   r   gitsubrepo.cat  s    kk!n==??{{}} A%%wC80C&DEF$$		:		0A0A&0L     s   B==
C	c           	        U R                   S   nU R                  5       (       d  U(       d  [        R                  " / / / / / / / 5      $ / / / penU R	                  5         U(       a  SSSX1/nOSSU/nU R                  U5      nUR                  S5       Ht  n	U	R                  S5      n
U
S:X  a  M  XS-
  U
 XS-   S  pUS	:X  a  UR                  U5        MB  US
:X  a  UR                  U5        M[  US:X  d  Mc  UR                  U5        Mv     / / / / 4u  pnn/ SQnUR                  S5      (       a  US/-  nUR                  S5      (       a  US/-  nU R                  U5      n[        5       nUR                  U5        UR                  U5        UR                  U5        UR                  S5       H  n	U	(       d  M  U	SS nU	R                  S5      S:  a  U	SS  R                  S5      u  nnOU	SS  nS nUR                  U5        U(       a  UR                  U5        US:X  a  UR                  U5        M  US:X  d  M  UR                  U5        M     UR                  S5      (       aC  U R                  S/5      nUR                  S5       H  nUU;  d  M  UR                  U5        M     [        R                  " XEXmXU5      $ )Nr   s	   diff-tree   --no-renamesr  rn  rm     	rg     M   A   D)r  s   --porcelains   -zr  s   --untracked-files=allignoreds	   --ignored    r   r   r
  s   ??s   !!r  s   ls-files)rd  r,  r   r   rQ  r  r9  re  r5  r   r  r  r   )r9   r   r   r  r  r  removedr(  r  r;  tabr   rm   r  r  r  r  changedfilesst	filename1	filename2s                        r'   r   gitsubrepo.status  s   {{1~T>>"b"b"b"==#%r2#_eTHG$ot<Gw'IIe$D))E"Cby1Ws+T')_A~"4Q4q! % ,.r2r>('5488I011G88I~%Gw'uH%E"G$IIe$DaByy1$'+ABx~~e'<$	9 H	 	Y'  +U{y)uy)% %( 88G""K=1CYYu%L(LLO & ~~Ww
 	
r)   c                J   U R                   S   nSS/nUS   (       a  UR                  S5        OUR                  SUR                  -  5        UR                  (       a  UR	                  SU-  SU-  /5        OUR	                  S	U-  S
U-  /5        UR
                  (       a  UR                  S5        UR                  (       a  UR                  S5        U R                  U R                  S/5      5      S:  a"  UR                  (       a  UR                  S5        UR                  U5        U(       a  UR                  U5        Sn	UR                  5       (       a  XR                  U5      S-   -  n	OU R                  U5      n
U
R                  U
R                  U
R                  4 VVs/ s H  nU  H  nUPM     M     nnnU H-  nU" U5      (       d  M  XR                  USU/-   5      S-   -  n	M/     U	R                  5       (       a  UR!                  U	5        g g s  snnf )Nr   r  r  r  s   --stats   -U%ds   --src-prefix=%s/s   --dst-prefix=%s/s   --src-prefix=a/%s/s   --dst-prefix=b/%s/s   --ignore-all-spaces   --ignore-space-changer  )r         s   --ignore-blank-linesr)   rm  s   --)rd  r5  contextnoprefixrr  ignorewsignorewsamountr  r  ignoreblanklinesalwaysr   r  r  r  r~  r  )r9   rV   r   r   r   r   r   r  r  r  r  sublistrm   r   s                 r'   r   gitsubrepo.diff  s   A(<JJy! JJw!1!112JJ$v-/BV/KL JJ&/1F1OP JJ,-""JJ/0T--|n=>)K))JJ./

5JJu<<>>&&s+e33FU#B !#RXXrzzBBG A   B  
 88..seQZ/?@5HHF  <<>>HHV s   +Hc                   U R                   R                  [        S5      US   -  5        UR                  S5      (       d  U R                  S 5      nUR                  nU H  n[
        R                  R                  U R                  U5      n[        R                  " U R                   U R                  U5      nU R                   R                  [        S5      U[
        R                  R                  U5      4-  5        [        R                  " U R                   R                  U5      U5        M     UR                  S5      (       d  U R                  USS9  / $ )NrA  r   rB  s#   saving current version of %s as %s
rC  TrD  )rV   r   r   r   r  rh  r$   rd   r   r   
backuppathr  r  r#  r   renamerv   )	r9   r   r>  r   r   rj   r   
parentnamebaknames	            r'   r?  gitsubrepo.revert1  s   q23hqkABxx$$[[&FOOE  WW\\$**d;
!,,GGT__j =>RWW__W567 DIINN40':  xx	""HHXH.	r)   c                    US S $ )Nr  rC   rB  s     r'   rD  gitsubrepo.shortidH  s    Rayr)   )r  r  rd  r  r  )NF)NFNrU  rV  rY  rZ  rW  ))r=   r>   r?   r@   r8   r  staticmethodr  r  r  r  r  r,  r1  r5  r<  r@  rG  rM  rQ  rZ  ra  r  rj  rS   rX   r   r   r   r   r   r   r   r)  r   r   r   r?  rD  rB   rU  rV  s   @r'   r  r  f  s   +OZ 	 	 ! !FA

:%x-9QA&,  0    V Vp    $  0 0 0d $ $L $ $*'R  $ A
 A
F / /b  , r)   r  )rz   r|   r{   )FT)C
__future__r   r  r  rh  r  r  rn  rJ   r  xml.dom.minidomr  i18nr   interfaces.typesr   rO  r   r   r	   r   r
   r   r   r   r   r   r	  r   r   r   r   r   r   r   r   rN  
interfacesr   istatusutilsr   r   r   r   r   rR  rH   r  r[  r(   r/   r7   r1   rS   r\   rn   ry   r   r   r4   r   r   r]  rX  r  r   rC   r)   r'   <module>r     s/   #   	 	   
    
      
%%##
##
""K
05;; 0*#&4(	M  @(>(A0aL aLHT
' T
'nB3 B3Jc cN 	r)   