
    q&f_+                         d dl mZ d dlmZmZ d dlmZmZmZm	Z	m
Z
 ddlmZmZmZ d ZdZdZddZ G d	 d
ej&                        Zd Zd Zy)    )_)binhex)
bundlerepochangegrouperrormatchmdiff   )	constantsremotefilelogshallowutil   Nc              #     K   t        |t        j                        st        | |  ||||      D ]  }|  y t	        |      dk(  r|j                          y t        j                  ||j                        }|j                  |d         d   }|j                  d|       t        t	        |      dz
        D ]4  }	||	   ||	dz      }}
 ||      }|j                  |||
|      D ]  }|  6 |j                          y w)Nunitsr   r   )
isinstancer   supergrouplencloser   	sortnodesparentsinsertrange	nodechunk)clsselfnodelistrloglookupr   reordercpiprevcurrlinknodes                C/usr/lib/python3/dist-packages/hgext/remotefilelog/shallowbundle.pyshallowgroupr*      s    dM778sD'$e'L 	AG	
8}jjl$$Xt||<H 	Xa[!!$AOOAq 3x=1$% a[(1q5/d$<dD(; 	AG	 **,s   DDc                   F     e Zd Z fdZddZ fdZd Z fdZd Z xZ	S )shallowcg1packerc                 t    t        j                  | j                        rd}t        t        |   ||||fi |S )NF)r   	isenabled_repor   r,   generate)r   
commonrevsclnodesfastpathlinkrevsourcekwargs	__class__s         r)   r0   zshallowcg1packer.generate7   s@      ,#O%t5&
<B
 	
    c                 ,    t        t        | ||||      S )Nr   )r*   r,   )r   r   r    r!   r   r"   s         r)   r   zshallowcg1packer.group?   s    dHdF%
 	
r7   c                    	 |\  }}}t        j                  | j                        r| j                  }t	        |t
        j                        rEt
        j                  j                  |d       |j                  rt        j                  dd      g S | j                  |      }|t        k(  r+t        |D cg c]  }|j                  |      r| c}      }t        t         | F  |g|i |S # t         $ r |\  }}}}}	}
Y w xY wc c}w )Ns   foos   cannot pull from full bundless   use `hg unbundle` instead)hint)
ValueErrorr   r.   r/   r   r   bundlerepositoryfile_cgfilesposr   AbortshouldaddfilegroupsNoFileslistshallowmatchr   r,   generatefiles)r   changedfilesargsr5   	linknodesr1   r4   mfdictsr3   fnodesclrevsrepofilestosendfr6   s                 r)   rD   zshallowcg1packer.generatefilesD   s   	P,0)Iz6   ,::D$
 ; ;<
 ++00v>##++89  	226:Kg%# ,I1D4E4Ea4HQI  %t:

#)
 	
-  	PKOHJ&&	P& Js   C/ 6DD/DDc                    | j                   }t        j                  |      st        S |dk(  s|dk(  rt        S |dk(  r2|j                  j                  dd      }|dk(  rt        S |dk7  rt        S | j                  xs g }|dk(  s|d	k(  rBt        j                  |v rt        S |j                  j                  t        d
             t        S t        S )Ns   pushs   bundles   strips   remotefilelogs   strip.includefiless   locals   none   serves   pulls   pulling from a shallow repo
)r/   r   r.   AllFilesuiconfig
LocalFiles_bundlecapsr   BUNDLE2_CAPABLITYwarnr   rA   )r   r4   rK   cfgcapss        r)   r@   z$shallowcg1packer.shouldaddfilegroupsa   s    zz$$T*OW) 3O X''..!13HICh!!%2X7!2**d2!! Q?@Ar7   c                    t        |t        j                        st        t        |   |||      S | j
                  }g }|D ]C  }|j                  |j                  |      }|j                         |vs3|j                  |       E |S )N)fileid)
r   r   r   r,   pruner/   filectxfilenamelinkrevappend)	r   r    missingr1   rK   resultsfnodefctxr6   s	           r)   r[   zshallowcg1packer.prune   s    $ ; ;<)46gz  zz 	&E<<e<<D||~Z/u%	& r7   c              #     K   d}||j                   k(  r0|j                  |      }t        j                  t	        |            }n|j                  ||      }|j                  |      \  }}|j                  |      }	| j                  ||||||	      }
|
|z  }
t	        |
      t	        |      z   }t        j                  |       |
 | y w)Nr7   )nullidrawdatar
   trivialdiffheaderr   revdiffr   flagsbuilddeltaheaderr   chunkheader)r   revlognodeprevnoder(   prefixdeltap1p2ri   metals               r)   r   zshallowcg1packer.nodechunk   s     v}}$NN4(E,,SZ8F NN8T2E%BT"$$T2r8XuMIE
"%%a((
s   CCNN)
__name__
__module____qualname__r0   r   rD   r@   r[   r   __classcell__)r6   s   @r)   r,   r,   6   s!    



:>r7   r,   c                 N   t        j                  |      s | ||||g|i |S |j                  }	 |dk(  r|j                  d      }d }	d }
|xs g D ]j  }|j	                  d      r#|t        d      d  }|s%|j                  d      }	7|j	                  d      sI|t        d      d  }|sZ|j                  d      }
l |	s|
r)t        j                  |j                  dd |	|
      |_        nt        j                         |_         | ||||g|i |||_        S # ||_        w xY w)NrO   
bundlecapss   includepattern=    s   excludepattern=r7   )
r   r.   rC   get
startswithr   splitr	   rootalways)origrK   outgoingversionr4   rF   r5   originalr{   includepatternexcludepatterncapraws                r)   makechangegroupr      s1     &D(GVEdEfEE  H%XL1J!N!N!'R :>>"45c"4578C),5)9^^$67c"4578C),5)9: $)KKIIsD..%! %*LLN!D(GVEdEfE$Hs   AD 7#D D ,A'D 	D$c           	        %&' t        j                        s | ||||g|i |S d}t               }	i 'g &j                  j	                  t        d      |      }
	 |j                         }|sn|d   }j                  j                  d|z         |
j                          j                  |      s5j                  |      }|j                         }|j                  |||       d }	 |j                  |      }|sn:|d   }|'||f<   &j                  ||f       ||	vr|dz  }|	j                  |       N|t!        j"                  t        d            t               %%&'fd}d}g }&D ]S  \  }}'||f   }|d   |d	   |d
   g}|D ]4  }|j$                  k(  s||f'v r|j                  |t'        |      f       6 U j(                  j+                  |       &rP&j-                  d      \  }}||f%v r|dz  }|t/        &      dz   kD  rt!        j"                  t        d            j                  |      }'||f   }|\	  }}}}}}}}} |||||      s|j1                  |      }t3        j4                  ||      } t7        | t8              st9        |       } t        j:                  |       \  }!} d|!v r|!d   }"t=        |!d         }# ||||"|#      s||fD ]  }$|$j$                  k7  s |||||$      r  |j                  | |!||||       %j                  ||f       d}&rP|
j?                          t/        '      |fS )Nr   s   files)totals   filenames   adding %s revisions
r   s#   received file revlog group is emptyc                     |j                   k7  r6||fvr0||fvryj                  d| |f       j                  d||f       yy)NTr   F)re   r   )rM   rm   depfdepnode	processedqueuerK   revisiondatass       r)   	availablez&addchangegroupfiles.<locals>.available   sU    dkk!tWoY&F'?m3 LLQI&LLT7O,r7   r      s   circular node dependencys   copys   copyrev) r   r.   setrQ   makeprogressr   filelogheaderdebug	incrementrC   r=   	deltaiteraddgroup
deltachunkr_   addr   r?   re   r   fileserviceprefetchpopr   rf   r
   patchr   bytes	parsemetar   complete)(r   rK   r4   revmaptrpexpectedfilesrF   r5   newfilesvisitedprogress	chunkdatarM   fldeltaschainrevisiondatar   	skipcountprefetchfilesrm   
dependents	dependentrq   rr   r(   	deltabaserp   ri   sidedataproto_flagsbasetextrs   copyfromcopynoder$   r   r   r   s(    `                                   @@@r)   addchangegroupfilesr      s      &D&&#}NtNvNNHeGME ww##AhK}#EH
((*	k".23  #1B%%'FKK, ",,U3L OE(4M1e*%LL!U$AA/ 2 =++a FGHHS V I I M 64$aY/"1o|AQH
# 	6IDKK'Ay>]+J  !S^!45	66 	m, ))A,4t9	!Q	s5zA~%++a ;<==YYq\$aY/ 
	
 D!Y/zz)${{4'$&;D **40
dd?G}H4
+,HQh9b 	ADKK D!Q/	
 	tT3"b1q$i 	_ b }x''r7   ru   )mercurial.i18nr   mercurial.noder   r   	mercurialr   r   r   r	   r
    r   r   r   rA   rS   rP   r*   cgpackerr,   r   r    r7   r)   <module>r      sW     #   
4g{++ gT%>R(r7   