Ë ص]9AèšãóÄ—ddlZddlZddlZddlmZddlmZmZddl m Z m Z mZm Z ddl m Z ddlmZej"rdd lmZe j(Zd „ZGd „d «Zd „Zd„Zd„Zd„Zd„Zd„Zd6d„Zd„Zd„Zd„Z d6d„Z!d6d„Z"d7d„Z#d„Z$d6d„Z%d6d„Z&Gd„de'«Z(iZ)iZ*ejVfd„Z,d „Z-e,d!d"«d#„«Z.e,d$d$«d%„«Z/hd&£Z0e,d'd(«d)„«Z1dejdejfejhd*œZ5e'd+„e5jm«D««Z7e,d,d-e7jp¬.«d/„«Z9e,d0d1e-¬.«d2„«Z:d3„Z;Gd4„d5«Z://:@:/?# Missing components are set to None. The only exception is fragment, which is set to '' if present but empty. If parsefragment is False, fragment is included in query. If parsequery is False, query is included in path. If both are False, both fragment and query are included in path. See http://www.ietf.org/rfc/rfc2396.txt for more information. Note that for backward compatibility reasons, bundle URLs do not take host names. That means 'bundle://../' has a path of '../'. Examples: >>> url(b'http://www.ietf.org/rfc/rfc2396.txt') >>> url(b'ssh://[::1]:2200//home/joe/repo') >>> url(b'file:///home/joe/repo') >>> url(b'file:///c:/temp/foo/') >>> url(b'bundle:foo') >>> url(b'bundle://../foo') >>> url(br'c:\foo\bar') >>> url(br'\\blah\blah\blah') >>> url(br'\\blah\blah\blah#baz') >>> url(br'file:///C:\users\me') Authentication credentials: >>> url(b'ssh://joe:xyz@x/repo') >>> url(b'ssh://joe@x/repo') Query strings and fragments: >>> url(b'http://host/a?b#c') >>> url(b'http://host/a?b#c', parsequery=False, parsefragment=False) Empty path: >>> url(b'') >>> url(b'#a') >>> url(b'http://host/') >>> url(b'http://host/#a') Only scheme: >>> url(b'http:') s!~*'()+s /!~*'()+:\s^[a-zA-Z0-9+.\-]+:có—dx|_x|_x|_|_dx|_x|_x|_|_d|_d|_ ||_ |rd|vr|jdd«\}|_t|«s|jd«r||_y|jd«r*d|_|dd}|jd «r|d d}||_y|j|«r(|jd d«}|d r|\|_}d |_|sd}|j�r6d|_y|jr||_y|r5d|vr1|jdd«\}|_|sd}|j sd|_|rp|jd «r_|d djdd«}t|«dkDr |\|_}n |d |_d}|jsd|_|rt|«sd|z}|jr�d|jvrs|jj!dd«\|_|_d |jvr)|jjd d«\|_|_|jsd|_|jr‘d |jvrƒ|jjd«r|jj#d«sM|j|_ |jj!d d«\|_|_|jsd|_|jr;|jdk(r,|jdvrt%j&t)d««‚||_dD]1}t+||«}|€Œt-||t.j1|««Œ3y)NTóó#r ó\\óbundle:óbundleéó//ró:rFó?ó/ó@ó[ó]ófile)s localhosts 127.0.0.1s[::1]s(file:// URLs can only refer to localhost)ÚuserÚpasswdÚhostrÚpathÚfragment)Úschemer*r+r,rr-Úqueryr.Ú _localpathÚ _hostportÚ _origpathÚsplitÚhasdriveletterÚ startswithÚ _matchschemeÚlenÚrsplitÚendswithrrrrrÚurlreqÚunquote)Úselfr-Ú parsequeryÚ parsefragmentÚpartsÚaÚvs rÚ__init__z url.__init__‹s,€ð=AÐ@ˆŒ Ð@�d”iÐ@ $¤+°´ Ø=AÐAˆŒ ÐA�D”IÐA ¤ ¨T¬]؈ŒØˆŒØˆŒá ˜T T™\Ø"&§*¡*¨T°1Ó"5Ñ ˆD�$”-ô ˜$Ô  4§?¡?°7Ô#;؈DŒIØ ð �?‰?˜:Ô &Ø#ˆDŒKؘ˜�8ˆDØ�‰˜uÔ%ؘA˜B�x�؈DŒIØ à × Ñ ˜TÔ "Ø—J‘J˜t QÓ'ˆEØ�QŠxØ$)Ñ!�” ˜TØ"'�”áØˆDØ�‹Ø�” Øà�ŠØ �” Øá˜d d™lØ#'§:¡:¨d°AÓ#6Ñ ��d”jÙØ�DØ—z’zØ!%�D”Jñ˜Ÿ™¨Ô.ؘQ˜R˜Ÿ™ t¨QÓ/�Ü�u“: ’>Ø&+‘O�D”I™tà % a¡�D”IØ�DØ—y’yØ $�D”Iñ¤N°4Ô$8Ø# d™{˜à�yŠy˜T T§Y¡YÑ.Ø'+§y¡y×'7Ñ'7¸¸aÓ'@Ñ$�” ˜4œ9ؘ4Ÿ9™9Ñ$Ø-1¯Y©Y¯_©_¸TÀ1Ó-EÑ*�D”I˜tœ{Ø—y’yØ $�D”Ið— ’ ؘDŸI™IÑ%à—I‘I×(Ñ(¨Ô.°4·9±9×3EÑ3EÀdÔ3Kð"&§¡�”Ø'+§y¡y×'7Ñ'7¸¸aÓ'@Ñ$�” ˜4œ9Ø—y’yØ $�D”Ið— ’ Ø—K‘K 7Ò*Ø—I‘IÐ%KÑKä—k‘kÜÐAÓBóððˆŒ óHˆAܘ˜aÓ ˆA؉}ܘ˜a¤§¡°Ó!2Õ3ñHrcó’—td«}|j|_|j|_|j|_|j|_|j |_|j |_|j|_|j|_|j|_ |j|_ |j|_ |S)Nstemporary useless value) rr-r/r*r+r,rr0r.r1r2r3)r=Úus rÚcopyzurl.copyñs‹€Ü Ð*Ó +ˆØ—‘ˆŒØ—;‘;ˆŒØ—‘ˆŒØ—;‘;ˆŒØ—‘ˆŒØ—‘ˆŒØ—*‘*ˆŒØ—]‘]ˆŒ Ø—‘ˆŒ Ø—n‘nˆŒ Ø—n‘nˆŒ ؈rcó¬—g}dD]:}t||«}|€Œ|jd|tj|«fz«Œ<ddj |«zS)N)sschemesuserspasswdshostsportópathsquerysfragments%s: %rss, )rÚappendr ÚbytestrÚjoin)r=ÚattrsrArBs rÚ__repr__z url.__repr__s]€àˆó  ˆAô˜˜aÓ ˆA؉}Ø— ‘ ˜Y¨!¬X×-=Ñ-=¸aÓ-@Ð)AÑAÕBð  ð˜UŸZ™Z¨Ó.Ñ.Ð.rcóœ—|jr@|j}|jdk(rd|z}|jr|d|jzz }|S|jdz}|js|j s |j r|dz }ng|jr[|jr0|jjd«st|j«r|dz }t|j«r|dz }|jr.|tj|j|j¬«z }|j r1|dtj|j |j¬«zz }|js |j r|dz }|j rh|j jd «r|j jd «s#|tj|j «z }n||j z }|jr%|dtj|j«zz }|j r|dz }|jr.|tj|j|j¬«z }|jr|d |jzz }|j�1|dtj|j|j¬«zz }|S) aßJoin the URL's components back into a URL string. Examples: >>> bytes(url(b'http://user:pw@host:80/c:/bob?fo:oo#ba:ar')) 'http://user:pw@host:80/c:/bob?fo:oo#ba:ar' >>> bytes(url(b'http://user:pw@host:80/?foo=bar&baz=42')) 'http://user:pw@host:80/?foo=bar&baz=42' >>> bytes(url(b'http://user:pw@host:80/?foo=bar%3dbaz')) 'http://user:pw@host:80/?foo=bar%3dbaz' >>> bytes(url(b'ssh://user:pw@[::1]:2200//home/joe#')) 'ssh://user:pw@[::1]:2200//home/joe#' >>> bytes(url(b'http://localhost:80//')) 'http://localhost:80//' >>> bytes(url(b'http://localhost:80/')) 'http://localhost:80/' >>> bytes(url(b'http://localhost:80')) 'http://localhost:80/' >>> bytes(url(b'bundle:foo')) 'bundle:foo' >>> bytes(url(b'bundle://../foo')) 'bundle:../foo' >>> bytes(url(b'path')) 'path' >>> bytes(url(b'file:///tmp/foo/bar')) 'file:///tmp/foo/bar' >>> bytes(url(b'file:///c:/tmp/foo/bar')) 'file:///c:/tmp/foo/bar' >>> print(url(br'bundle:foo\bar')) bundle:foo\bar >>> print(url(br'file:///D:\data\hg')) file:///D:\data\hg r rrr#r"r%)Úsafer&r'r(r$)r1r-r/r.r*r+r,r6r5r;ÚquoteÚ _safecharsr:rÚ _safepcharsr0)r=Úss rÚ __bytes__z url.__bytes__s€ðD �?Š?Ø— ‘ ˆAØ�{‰{˜iÒ'Ø ‘N�Ø�}Š}Ø�T˜DŸM™MÑ)Ñ)�؈Hà �K‰K˜$Ñ ˆØ �9Š9˜Ÿ š  t§y¢yØ �‰J‰AØ �[Š[Ø— ’ Ø�y‰y×#Ñ# DÔ)ܘdŸi™iÔ(à �‰JˆAܘdŸi™iÔ(Ø�T‘ �Ø �9Š9Ø ”—‘˜dŸi™i¨d¯o©o�Ó>Ñ >ˆAØ �;Š;Ø �œŸ ™  T§[¡[°t·±˜ ÓGÑGÑ GˆAØ �9Š9˜Ÿ š Ø �‰IˆAØ �9Š9Ø—I‘I×(Ñ(¨Ô.°4·9±9×3EÑ3EÀdÔ3KØ”V—\‘\ $§)¡)Ó,Ñ,‘à�T—Y‘Y‘�Ø �9Š9Ø �œŸ ™  T§Y¡YÓ/Ñ/Ñ /ˆAØ �9Š9Ø �‰IˆAØ �9Š9ð ”—‘˜dŸi™i¨d×.>Ñ.>�Ó?Ñ ?ˆAØ �:Š:à �˜Ÿ ™ Ñ"Ñ "ˆAØ �=‰=Ð $Ø �œŸ ™  T§]¡]¸×9IÑ9I˜ ÓJÑJÑ JˆA؈rcó&—|j|j}} d\|_|_t|«}||c|_|_|js|dfS|d||jf|j|jxsdffS#||c|_|_wxYw)N)NNr)r*r+Úbytesr,)r=r*r+rSs rÚauthinfoz url.authinfods�€Ø—y‘y $§+¡+ˆfˆð 2Ø%/Ñ "ˆDŒI�t”{Ü�d“ ˆAà%)¨6Ð "ˆDŒI�t”{Ø�yŠyØ�t�9Ð ð �D˜1˜dŸi™i˜.¨$¯)©)°T·[±[Ò5GÀCÐHÐIÐIøð&*¨6Ð "ˆDŒI�t•{ús šA?Á?BcóØ—|jr|jdk7ryt|j«ry|jjd«ry|jjd«ryy)Nr)Trr%F)r/r5r-r6©r=s rÚisabsz url.isabsssS€Ø �;Š;˜4Ÿ;™;¨'Ò1ØÜ ˜$Ÿ)™)Ô $ØØ �9‰9× Ñ  Ô 'ØØ �9‰9× Ñ  Ô %ØØrcó0—|jdk(s|jdk(rm|jxsd}t|j«r|jdz|jz}|S|j�|jrt|«sd|z}|S|j S)Nr)r r%)r/r-r5r2r,r3©r=r-s rÚ localpathz url.localpath~s„€à �;‰;˜'Ò ! T§[¡[°IÒ%=Ø—9‘9Ò$ ˆDô˜dŸn™nÔ-Ø—~‘~¨Ñ,¨t¯y©yÑ8�ð ˆKð— ‘ Ð%¨$¯)ª)¼NÈ4ÔÑ>€Lód4òL ð×Ññ/óð/ò"Nð`!ˆh× Ñ  Ó+€Gò Jò ò ó rrcó>—tt|«j«S©N)Úboolrr/©r-s rÚ hasschemern–s€ä ”�D“ × Ñ Ó !Ð!rcóV—t|«xr|dddk(xr|ddj«S)Nr rr#r)rlÚisalpharms rr5r5›s0€ä �‹:Ò C˜$˜q ˜) tÑ+Ò C°°Q°q° ×0AÑ0AÓ0CÐCrcó:—t|dd¬«j«S)NF)r>r?)rr]rms rÚ urllocalpathrr s€ä ˆt °UÔ ;× EÑ EÓ GÐGrcóÜ—tj|«}|jd«s|jd«r5tjt d«t j|«fz«‚y)a\check if a path / url is a potentially unsafe ssh exploit (SEC) This is a sanity check for ssh urls. ssh will parse the first item as an option; e.g. ssh://-oProxyCommand=curl${IFS}bad.server|sh/path. Let's prevent these potentially exploited urls entirely and warn the user. Raises an error.Abort when the url is unsafe. sssh://-s svn+ssh://-spotentially unsafe url: %rN)r;r<r6rrrr rJrms rÚ checksafesshrt¥s\€ô �>‰>˜$Ó €DØ ‡��zÔ" d§o¡o°nÔ&EÜ�k‰kÜ Ð+Ó ,´×0@Ñ0@ÀÓ0FÐ/HÑ Hó ð ð'FrcóT—t|«}|jrd|_t|«S)z$hide user credential in a url strings***)rr+rV©rEs rÚ hidepasswordrw·s$€ô ˆA‹€A؇x‚x؈ŒÜ �‹8€OrcóJ—t|«}dx|_|_t|«S)z7remove all authentication information from a url stringN)rr*r+rVrvs rÚ removeauthryÀs$€ô ˆA‹€AØÐ€A„FˆQŒXÜ �‹8€Orcó—g}|€Gt|jj««D]\}}|D]}|j||f«ŒŒ!|S|jj |g«D]}|j||f«Œ|S)z+list all the (name, paths) in the passed ui)ÚsortedÚpathsÚitemsrIÚget)ÚuiÚ target_pathÚresultÚnamer|Úpr-s rÚ list_pathsr„Ès}€à €FØÐÜ! "§(¡(§.¡.Ó"2Ö3‰KˆD�%Û�Ø— ‘ ˜t Q˜iÕ(ñð4ð €Mð—H‘H—L‘L ¨bÖ1ˆDØ �M‰M˜;¨Ð-Õ .ð2à €Mrcó>— t|d|¬«S#t$rYywxYw)zLtry to build a path from a url Return None if no Path could built. N)Úrawloc)r-r)rrs rÚtry_pathr‡Ös(€ð ä�B˜ SÔ)Ð)øÜ òÙðús ‚ � ›c#ó8K—|s“d|jvr'|jdD]}|j«–—Œyd|jvr'|jdD]}|j«–—Œytjt d«t d«¬«‚|D]|}||jvr'|j|D]}|j«–—ŒŒ8t ||«}|€%t d«}||z}tj |«‚|j«–—Œ~y­w)z=yields all the `path` selected as push destination by `dests`s default-pushódefaults"default repository not configured!ssee 'hg help config.paths')ÚhintNsrepository %s does not exist)r|Úget_push_variantrÚ ConfigErrorrr‡Ú RepoError)ÚreporÚdestsrƒÚdestr-Úmsgs rÚget_push_pathsr’âs èø€á Ø ˜bŸh™hÑ &Ø—X‘X˜oÔ.�Ø×(Ñ(Ó*Ó*ñ/à ˜2Ÿ8™8Ñ #Ø—X‘X˜jÔ)�Ø×(Ñ(Ó*Ó*ñ*ô×#Ñ#ÜÐ7Ó8ÜÐ4Ó5ôð ó ˆDØ�r—x‘xÑØŸ™ $œ�AØ×,Ñ,Ó.Ó.ñ(ô   DÓ)�Ø�<ÜÐ;Ó<�Cؘ4‘K�CÜŸ/™/¨#Ó.Ð.Ø×+Ñ+Ó-Ó-ñùs‚DDc#ó˜K—|sdg}|D]<}||jvr|j|D]}|–—ŒŒ*t|d|d¬«}|–—Œ>y­w)zDyields all the `(path, branch)` selected as pull source by `sources`r‰NF)Ú validate_path)r|r-)rŽrÚsourcesÚsourcerƒs rÚget_pull_pathsr—þsUèø€á Ø�,ˆÛˆØ �R—X‘XÑ Ø—X‘X˜fÔ%�Ø“ñ&ô�R˜˜v°UÔ;ˆAØ‹Gñ ùs‚AA có—|€g}n|g}tt|||««}t|«dk7rO|€td«}|t|«|fz}ntd«}|t|«||fz}t j |«‚|dS)zÛreturn a unique `path` or abort if multiple are found This is useful for command and action that does not support multiple destination (yet). The `action` parameter will be used for the error message. r ó9default path points to %d urls while %s only supports oneó5path points to %d urls while %s only supports one: %sr)Úlistr’r8rrr)ÚactionrŽrr�r�r‘s rÚget_unique_push_pathr� s’€ð €|؉à�ˆÜ ”  b¨%Ó0Ó 1€EÜ ˆ5ƒz�Q‚Ø ˆ<ÜØLóˆCð ”C˜“J Ð'Ñ '‰CäÐLÓMˆCØ ”C˜“J ¨Ð-Ñ -ˆCÜ�k‰k˜#ÓÐØ �‰8€Orcóþ—g}|�|j|«ttd||¬««}t|«}|dk7r=|€t d«}|||fz}nt d«}||||fz}t j |«‚|dS)axreturn a unique `(path, branch)` or abort if multiple are found This is useful for command and action that does not support multiple destination (yet). The `action` parameter will be used for the error message. note: Ideally, this function would be called `get_unique_pull_path` to mirror the `get_unique_push_path`, but the name was already taken. N)r•r r™ršr)rIr›r—r8rrr)rœrr–r•Ú pull_pathsÚ path_countr‘s rÚget_unique_pull_path_objr¡%s–€ð€GØ ÐØ�‰�vÔä”n T¨2°wÔ?Ó@€JÜ�Z“€JØ�Q‚Ø ˆ>ÜØLóˆCð �J Ð'Ñ '‰CäÐLÓMˆCØ �J ¨Ð/Ñ /ˆCÜ�k‰k˜#ÓÐØ �a‰=ÐrcóJ—t|||¬«}t|j|«S)ztreturn a unique `(url, branch)` or abort if multiple are found See `get_unique_pull_path_obj` for details. ©r–)r¡Úparseurlr†)rœrŽrr–Údefault_branchesr-s rÚget_unique_pull_pathr¦Cs$€ô $ F¨B°vÔ >€DÜ �D—K‘KÐ!1Ó 2Ð2rcó*—|dk(rytd||¬«S)ú?return the `(origsource, url, branch)` selected as clone sourcerNscloner£)r¡)rr–s rÚget_clone_path_objr©Ls€à �‚}ØÜ # H¨b¸Ô @Ð@rcó‚—t||«}|€ddd|ffS|€g}|j|f}|j|j|fS)r¨Nr)r©Úbranchr†Úloc)rr–r¥r-Úbranchess rÚget_clone_pathr®SsV€ä ˜b &Ó )€DØ €|Ø�S˜4Ð!1Ð2Ð3Ð3ØÐØÐØ— ‘ Ð-Ð.€HØ �;‰;˜Ÿ™ (Ð *Ð*rcó€—t|«}d}|jr|j}d|_t|«||xsgffS)z5parse url#branch, returning (url, (branch, branches))N)rr.rV)r-r­rEr«s rr¤r¤^s?€ä ˆD‹ €AØ €F؇z‚zØ—‘ˆØˆŒ Ü �‹8�f˜hšn¨"Ð-Ð -Ð-rcó—eZdZdZd„Zy)r|z”Represents a collection of paths and their configs. Data is initially derived from ui instances and the config files they have loaded. c óú—tj|«tjj d«}|j dd¬«D�]e\}}|sŒ |j d|«\}}|jd|«}|||f}|jj||«} |jd«} | �+tj| «rtj|«} n|g} g} | D]Ç} tjj| «} tjj | «} t| «s\tjj| «s=tjj!tjj#| | ««} t||| |¬«}| j%|«ŒÉ| ||<�Œht'|j)««D]/\}}g}|D]}|j+t-|||««Œ |||<Œ1y)Nó~ópathsT)Ú ignoresubó multi-urls)r†Ú suboptions)ÚdictrCÚosr-Ú expanduserÚ configitemsÚconfigsuboptionsÚ configsourceÚ _path_to_rootr~r Ú parseboolÚ parselistÚ expandvarsrnrZÚnormpathrKrIr{r}ÚextendÚ _chain_path)r=rÚ home_pathr‚ÚvalueÚ_valueÚsub_optsrSÚroot_keyÚrootÚ multi_urlÚ base_locsr|r¬rƒÚ old_pathsÚ new_pathss rrCzpaths.__init__os§€Ü � ‰ �dÔä—G‘G×&Ñ& tÓ,ˆ àŸ>™>¨(¸d˜>×C‰KˆD�%áØØ!×2Ñ2°8¸TÓBÑ ˆF�HØ—‘ ¨$Ó/ˆAؘe QÐ'ˆHØ×#Ñ#×'Ñ'¨°)Ó<ˆDà Ÿ ™  ]Ó3ˆIØÐ$¬×)=Ñ)=¸iÔ)HÜ&×0Ñ0°Ó7‘ à"˜G� àˆEÛ �Ü—g‘g×(Ñ(¨Ó-�Ü—g‘g×(Ñ(¨Ó-�Ü  ”~¬b¯g©g¯m©m¸CÔ.@ÜŸ'™'×*Ñ*¬2¯7©7¯<©<¸¸cÓ+BÓC�Cܘ˜T¨#¸(ÔC�Ø— ‘ ˜Q•ð !ðˆD�‹Jð/Dô2 & d§j¡j£lÖ3‰OˆD�)؈IÛ�Ø× Ñ ¤¨Q°°DÓ!9Õ:ðà"ˆD�ŠJñ 4rN)r`rarbrcrCrirrr|r|hs „ñó "#rr|c󇇇—ˆˆˆfd„}|S)a–Decorator used to declare a path sub-option. Arguments are the sub-option name and the attribute it should set on ``path`` instances. The decorated function will receive as arguments a ``ui`` instance, ``path`` instance, and the string value of this option from the config. The function should return the value that will be set on the ``path`` instance. The optional `display` argument is a function that can be used to format the value when displayed to the user (like in `hg paths` for example). This decorator can be used to perform additional verification of sub-options and to change the type of sub-options. có0•—‰|ft‰<‰t‰<|Srk)Ú_pathsuboptionsÚpath_suboptions_display)ÚfuncÚattrÚdisplayÚoptions €€€rÚregisterzpathsuboption..register«s!ø€Ø#'¨ ,Œ˜ÑØ*1Ô Ñ'؈ rri)rÕrÓrÔrÖs``` rÚ pathsuboptionr×™sú€ö$ð €Orcó—|rdSdS)z,display a boolean suboption back to the usersyessnori)rÅs rÚ display_boolrÙ³s€áˆ6Ð% Ð%rspushurls_pushloccó—t|«}|js.td«}||j|fz}|j |«y|j r.|j td«|jz«d|_t |«S)Ns-(paths.%s:pushurl not a URL; ignoring: "%s") s:("#fragment" in paths.%s:pushurl not supported; ignoring) )rr/rr‚Úwarnr.rV)rr-rÅrEr‘s rÚpushurlpathoptionrܸs€€ä ˆE‹ €Aà �8Š8ÜÐAÓBˆØ �— ‘ ˜5Ð!Ñ!ˆØ �‰�Œ Øð ‡z‚zØ �‰Ü ðó ð�i‰iñ  ô ðˆŒ ä �‹8€Orspushrevcó—|Srkri)rr-rÅs rÚpushrevpathoptionrÞÑs€à €Lr>óignoreómirrorr‰sbookmarks.modesbookmarks_modecóŠ—|tvr3|j}|€d}td«}|||fz}|j|«|dk(rd}|S)Nó*s2(paths.%s:bookmarks.mode has unknown value: "%s") r‰)ÚSUPPORTED_BOOKMARKS_MODESr‚rrÛ©rr-rÅÚ path_namer‘s rÚbookmarks_mode_optionræÝsV€à Ô-Ñ-Ø—I‘Iˆ Ø Ð àˆIÜÐFÓGˆØ � ˜5Ð!Ñ!ˆØ �‰�Œ Ø � ÒØˆØ €Lr)r‰stry-basesno-reusesforcedc#ó,K—|] }|ddd…–—Œy­w)Néÿÿÿÿri)Ú.0Úis rÚ rëòsèø€Ð OÑ2N¨Q ¡4 R 4¥Ñ2Nùs‚spulled-delta-reuse-policysdelta_reuse_policy)rÔcó¢—|tvr3|j}|€d}td«}|||fz}|j|«tj |«S)Nrâs=(paths.%s:pulled-delta-reuse-policy has unknown value: "%s") )ÚDELTA_REUSE_POLICIESr‚rrÛr~räs rÚdelta_reuse_policyrîõs[€ð  Ô(Ñ(Ø—I‘Iˆ Ø Ð àˆIÜØ Mó ˆð � ˜5Ð!Ñ!ˆØ �‰�Œ Ü × #Ñ # EÓ *Ð*rrµs multi_urlscó†—tj|«}|€)|jtd«|jz«d}|S)Ns.(paths.%s:multi-urls not a boolean; ignoring) F)r r¾rÛrr‚)rr-rÅÚress rÚmultiurls_pathoptionrñsA€ä × Ñ ˜uÓ %€CØ €{Ø �‰Ü Ð@Ó AÀDÇIÁIÑ Mô ðˆØ €Jrcó—g}|jjdk7r|j|«|S|jj�J‚|j |jj «}|€Et d«}||j|jj fz}tj|«‚|D�]O}|j«}|jjdk(rEt d«}||j|jj fz}tj|«‚|j|_|j|_|j|_ |j€|j|_ n5|jjdd«d}d||jfz|_|jj«} | j!|j"«|j%|| «|j|«�ŒR|S)zÓ?ˆAØ �)×"Ñ" I§M¡M×$6Ñ$6Ð7Ñ 7ˆAÜ—+‘+˜a“.Ð Ü ˆGØ—>‘>Ó#ˆDØ�‰×%Ñ%¨Ò0ÜÐMÓN�Ø�d—k‘k 4§8¡8§=¡=Ð1Ñ1�Ü—k‘k !“nÐ$Ø—{‘{ˆDŒHØ!Ÿ.™.ˆDŒKØ—{‘{ˆDŒHØ�{‰{Ð"Ø%Ÿn™n�• à—{‘{×)Ñ)¨$°Ó2°1Ñ5�Ø&¨$°· ± Ð)<Ñ<�” Ø ×.Ñ.×3Ñ3Ó5ˆJØ × Ñ ˜d×0Ñ0Ô 1Ø × "Ñ " 2 zÔ 2Ø × Ñ ˜TÖ "ð#!ð$ Ðrcón—eZdZdZ d d„Zd„Zdd„Zed„«Zd„Z d„Z d „Z d „Z d „Z ed „«Zy)r-z4Represents an individual path and its configuration.Ncót—|€ |�J‚|�J‚|�J‚y|s td«‚||_d|_|j|«|r|j «|j dd«\}}i|_|�&|j«|_|j|«|j«|_ |j||«y)aConstruct a path from its config options. ``ui`` is the ``ui`` instance the path is coming from. ``name`` is the symbolic name of the path. ``rawloc`` is the raw location, as defined in the config. ``_pushloc`` is the raw locations pushes should be made to. (see the `get_push_variant` method) If ``name`` is not defined, we require that the location be a) a local filesystem path with a .hg directory or b) a URL. If not, ``ValueError`` is raised. Nsrawloc must be definedr³râ) rr‚Ú main_pathÚ _setup_urlÚ_validate_pathr»rörFrõrôr÷)r=rr‚r†r¶r”Ú_pathrÇs rrCz path.__init__7sÀð( ˆ:à�<Ð �<Ø�>Ð !�>ØÐ%Ð %Ð%Ø áÜÐ6Ó7Ð 7àˆŒ ðˆŒØ �‰˜Ôá Ø × Ñ Ô !à×-Ñ-¨h¸Ó=‰ˆˆxØˆÔØ Ð !Ø!+§¡Ó!2ˆDÔ Ø �O‰O˜JÔ 'Ø%Ÿ]™]›_ˆÔà ×јr 8Õ,rcóÄ—t|«}d}|jr|j}d|_||_|j«|_||_||_d|z|_y)Ns%s)rr.rFrór«r†r¬)r=r†rEr«s rrzpath._setup_urlgsT€ä �‹KˆØˆØ �:Š:Ø—Z‘ZˆF؈AŒJàˆŒà—v‘v“xˆŒ ؈Œ àˆŒ ؘ1‘9ˆ�rcóÚ—|j«}|jj«D]*\}}t|dd«}|�|«}||j|<Œ,|�|j |«|S)z³make a copy of this path object When `new_raw_location` is set, the new path will point to it. This is used by the scheme extension so expand the scheme. rFN)Ú __class__Ú__dict__r}rr)r=Únew_raw_locationÚnewÚkrBÚnew_copys rrFz path.copywsm€ð �n‰nӈؗM‘M×'Ñ'Ö)‰DˆAˆqܘq &¨$Ó/ˆHØÐ#Ù“J�؈C�L‰L˜ŠOð *ð Ð 'Ø �N‰NÐ+Ô ,؈ rcó—|jduS)z-is this a path variant to be used for pushingN)rÿrYs rÚis_push_variantzpath.is_push_variant‡s€ð�~‰~ TÐ)Ð)rcóž—|jr|S|j«}||_|jr|j|j«|S)zÒget a "copy" of the path, but suitable for pushing This means using the value of the `pushurl` option (if any) as the url. The original path is available in the `main_path` attribute. )rÿrFÚ_pushlocr)r=rs rr‹zpath.get_push_variantŒs>€ð �>Š>؈KØ�i‰i‹kˆØˆŒ Ø �=Š=Ø �N‰N˜4Ÿ=™=Ô )؈ rcóN—ddlm}d}|j|d«|jS)z1compatibility layer for the deprecated attributesr)Úutilz3don't use path.pushloc, use path.get_push_variant()s6.5)ÚrÚnouideprecwarnr)r=rr‘s rÚpushlocz path.pushloc›s$€åàCˆØ ×јC Ô(Ø�}‰}Ðrcó²—|jsK|jjs4|j|j«st d|j z«‚yyy)Ns1location is not a URL or path to a local repo: %s)r‚rr/Ú_isvalidlocalpathr¬rr†rYs rrzpath._validate_path£sU€ð— ’ Ø—H‘H—O’OØ×*Ñ*¨4¯8©8Ô4äðØ"Ÿk™kñ*óð ð5ð$ðrcóš—tj«D]4\}\}}||vrt||d«Œ|||||«}t|||«Œ6yrk)rÐr}r)r=rÚ sub_optionsÚ suboptionrÓrÒrÅs rr÷zpath._apply_suboptions°sV€ô(7×'<Ñ'<Ö'>Ñ #ˆI‘|˜˜dØ  Ñ+ܘ˜d DÔ)Øá˜˜T ;¨yÑ#9Ó:ˆEÜ �D˜$ Õ &ñ (?rcó¨— tjjtjj|d««S#tt f$rYywxYw)zêReturns True if the given path is a potentially valid repository. This is its own function so that extensions can change the definition of 'valid' in this case (like when pulling from a git repo into a hg one).s.hgF)r¸r-ÚisdirrKÚ TypeErrorrr\s rrzpath._isvalidlocalpath¼s@€ð  Ü—7‘7—=‘=¤§¡§¡¨d°FÓ!;Ó<Ð <øäœ:Ð&ò Ùð ús‚ð Ø ØØØó .-ò`ó ð ñ*óð*ò òò ò 'ò ðñ óñ rr-rk)Nri)=r¸ÚrerdrÚi18nrr rrrrrr r Ú revlogutilsr Úrevlog_constantsÚ TYPE_CHECKINGÚtypingrr;rrrnr5rrrtrwryr„r‡r’r—r�r¡r¦r©r®r¤r·r|rÐrÑrJr×rÙrÜrÞrãræÚDELTA_BASE_REUSE_TRYÚDELTA_BASE_REUSE_NOÚDELTA_BASE_REUSE_FORCErír}ÚDELTA_REUSE_POLICIES_NAMEr~rîrñrÃr-rirrÚr+sÕðó ÛÛ å÷÷óõõð  ×Òõð × Ñ €ò ÷*V ñV òr "ò Dò Hò  ò$òó ò ò.ò8 óó4ó<3òAó+ó.ô)#ˆDô)#ðX€àÐð)1×(8Ñ(8óò4&ñ ˆz˜;Ó'ñó(ðñ0ˆz˜:Ó&ñó'ðòÐñÐ Ð"3Ó4ñ ó5ð ðØ!×6Ñ6Ø!×5Ñ5Ø×6Ñ6ñ Ðñ !Ñ OÐ2F×2LÑ2LÔ2NÓ OÓOÐñØ ØØ %× )Ñ )ôñ +ó ð +ñˆ}˜m°\ÔBñóCðò÷B^ò^r