HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/mercurial/hgweb/__pycache__/webutil.cpython-310.pyc
o

�]Lbl�@s�ddlmZddlZddlZddlZddlZddlmZddlm	Z	m
Z
ddlmZddl
mZmZmZmZdd	lmZmZmZmZmZmZmZmZmZmZmZmZmZmZ m!Z!dd
l"m#Z#e!�$d�Z%d}dd
�Z&dd�Z'd}dd�Z(Gdd�de)�Z*Gdd�de*�Z+dd�Z,d~dd�Z-dd�Z.dd�Z/d}dd�Z0d}d d!�Z1d"d#�Z2d$d%�Z3d&d'�Z4d(d)�Z5d*d+�Z6d,d-�Z7d.d/�Z8d}d0d1�Z9d}d2d3�Z:dd4d5�Z;d6d7�Z<d8d9�Z=d:d;�Z>d<d=�Z?d>d?�Z@d@dA�ZAdBdC�ZBdDdE�ZCdFdGheC_DdHdI�ZEdJdK�ZFdFdGheF_DdLdM�ZGdNdO�ZHdPdQ�ZIdRdS�ZJdTdU�ZKdVdW�ZLdXdY�ZMdZd[�ZNd\d]�ZOd^d_�ZPd�dadb�ZQdcdd�ZRdedf�ZSdgdh�ZTdidj�ZUdkdl�ZVdmdn�ZWdodp�ZXdqdr�ZYdsdt�ZZGdudv�dvej[�Z\Gdwdx�dxe j�Z]dydz�Z^d{d|�Z_dS)��)�absolute_importN�)�_)�hex�short)�setattr�)�
ErrorResponse�HTTP_BAD_REQUEST�HTTP_NOT_FOUND�	paritygen)�context�diffutil�error�match�mdiff�obsutil�patch�pathutil�pycompat�scmutil�templatefilters�
templatekw�templateutil�ui�util)�
stringutil))�zip)sapplication/ziprs.zipN)sgz)sapplication/x-gzipstgzs.tar.gzN)sbz2)sapplication/x-bzip2stbz2s.tar.bz2NcCsf|jdddd�}g}t�t�D]\}}||vs!|jdd|dd�r-|�||d||d��qt�|�S)N�webs
allow-archiveT��	untrustedsallowr)�types	extension�nodesurl)�
configlistr�	iteritems�archivespecs�
configbool�appendr�mappinglist)r�nodeid�url�allowed�archives�typ�spec�r/�9/usr/lib/python3/dist-packages/mercurial/hgweb/webutil.py�archivelist8s
����
	r1cCsT|dd�dkrd|}|dd�dkr|dd�}tj�|�}|dkr&dS|dS)Nrr�/���)�os�path�dirname)�p�upr/r/r0r8Lsr8ccsv�|r+|V|dkr|dkrd}|V|dksJ�|dksJ�||kr+|d9}||ks#	d|Vd|V|d9}q,)	N��(�2r�
Tr�r/)�step�	firststepr/r/r0�_navseqWs ��

�r@c@s8eZdZdd�Zdd�ZeZdd�Zdd�Zd	d
�ZdS)�revnavcCs|j|_dS)zUNavigation generation object

        :repo: repo object we generate nav for
        N)�	changelog�_revlog)�self�repor/r/r0�__init__hszrevnav.__init__cCs|��duS)z,return True if any revision to navigate overN)�_first�rDr/r/r0�__nonzero__pszrevnav.__nonzero__cCs&ztt|j��WStyYdSw)z1return the minimum non-filtered changeset or NoneN)�next�iterrC�
StopIterationrHr/r/r0rGvs
�z
revnav._firstcCst|j�|��S�N)rrC�node�rD�revr/r/r0r}�z
revnav.hexc
Cs@|st�t�g�t�g�d�g�Sg}td|�D]}||kr n|�||�|�||�q|��|��}d||�|�d�g}g}|D]B}	|	|jvrNqF||	krX|krknn|�dt|	|�|�|	�d��d|	kru|kr�nqF|�dt|	|�|�|	�d��qF|�ddd��t�t�|�t�|�d�g�S)	a�computes label and revision id for navigation link

        :pos: is the revision relative to which we generate navigation.
        :pagelen: the size of each navigation page
        :limit: how far shall we link

        The return is:
            - a single element mappinglist
            - containing a dictionary with a `before` and `after` key
            - values are dictionaries with `label` and `node` keys
        )sbeforesafterrs(%i))slabelr"s+%drs-%d�tip)	rr(r@r'�sortrGrrC�abs)
rD�pos�pagelen�limit�targets�f�first�	navbefore�navafterrPr/r/r0�gen�sH���	
������z
revnav.genN)	�__name__�
__module__�__qualname__rFrI�__bool__rGrr]r/r/r/r0rAgsrAc@seZdZdd�Zdd�ZdS)�
filerevnavcCs|��j|_|�|�|_dS)z�Navigation generation object

        :repo: repo object we generate nav for
        :path: path of the file we generate nav for
        N)�
unfilteredrB�
_changelog�filerC)rDrEr5r/r/r0rF�szfilerevnav.__init__cCst|j�|j�|���SrM)rrdrNrC�linkrevrOr/r/r0r�szfilerevnav.hexN)r^r_r`rFrr/r/r/r0rb�srbccsX�|D]&}|��|��|��|��|��|��d�}t�|d�r&|��|d<|VqdS)N)r"�revsuser�datesdescription�branchspath�file)	rrP�user�date�description�branchr�safehasattrr5)r
�ctxs�s�dr/r/r0�_ctxsgen�s���rscCsJ|durg}dd�|D�}t|�dkr|d��|krg}tjt|fd�S)NcSs"g|]
}|��|��jkr|�qSr/)rNrE�nullid)�.0rqr/r/r0�
<listcomp>�s"z_siblings.<locals>.<listcomp>rr��args)�lenrPr�mappinggeneratorrs)�siblings�hiderevr/r/r0�	_siblings�sr}cCsVtj|d|dd�}dD]}|j�|�}|dur(t�|�}t|||dur%|nd�q|S)NT)r �section�
whitespace)signorewssignorewsamountsignorewseolsignoreblanklines)r�difffeatureopts�qsparams�getr�	parseboolr)�reqrr~�diffopts�k�vr/r/r0r��s�
�r�cCst||d�}|jd|d�S)NsannotateT)�followr�)r��annotate)r��fctxrr�r/r/r0r��sr�cCsFt|tj�r|��}|����|krt|��|g|�St|��|�SrM)	�
isinstancer
�basefilectx�introrev�	changectxrPr}rE�parents)�ctx�hider�r/r/r0r��s
r�cCst|��|�SrM)r}�children)r�r�r/r/r0r��r�cCs4|��}|rt�|dt|d�d�g�St�g�S)Nrr)rjr")�renamedrr(r)r��rr/r/r0�
renamelink	s
r�cC�tj|�|�dd�S�N�name��name)r�
hybridlist�nodetags�rErNr/r/r0�nodetagsdict�r�cCr�r�)rr��
nodebookmarksr�r/r/r0�nodebookmarksdictr�r�cCsXg}|��}z|�|�}Wntjyd}Ynw||��kr%|�|�tj|dd�Sr��rn�	branchtipr�RepoLookupErrorrNr'rr��rEr��branchesrn�
branchnoder/r/r0�nodebranchdicts�
r�cCs`g}|��}z|�|�}Wntjyd}Ynw|dkr)||��kr)|�|�tj|dd�S�Nsdefaultr�r�r�r�r/r/r0�nodeinbranch&s�
r�cCs,g}|��}|dkr|�|�tj|dd�Sr�)rnr'rr�)r�r�rnr/r/r0�nodebranchnodefault2s

r�ccs�||�D]}||iVqdSrMr/)r
rYrNr��tr/r/r0�
_nodenamesgen:s��r�cC�*|dur|j}|j|df}tjt||d�S)Nstag�rxr�)rtr�rrzr��rE�t1rNrxr/r/r0�showtag?�r�cCr�)Nsbookmarkr�)rtr�rrzr�r�r/r/r0�showbookmarkFr�r�cs<g�����t|��dd��������fdd�}t�|�S)NcSs|d|d��fS)Nrr)rP)�itemr/r/r0�<lambda>Qszbranchentries.<locals>.<lambda>c3s��d}�s�����D]\}}}}���||f�qt��dd�D]4\}}�dkr1|�kr1dS|d7}|r:d}n|���vrCd}nd}t��|��||��|��d�Vq"dS)	NrT)�key�reversersclosedsinactivesopen)�parityri�statusr"rh)	�	branchmap�iterbranchesr'�sortedrNrJrnrrl)r
�count�tag�hs�tip�closedr��status��headsrW�parityrE�sortkey�tipsr/r0�entriesSs*�
��zbranchentries.<locals>.entries)r�rrrz)rE�stripecountrWr�r/r�r0�
branchentriesMs
r�cCs.|�d�}tj|jdd�}tj|jd||d�S)Nr2F)�realfs�)�auditor)�lstripr�pathauditor�root�	canonpath)rEr5r�r/r/r0�	cleanpathms
r�cCsFd}d|jvr|jd}|�d�}|dkr||dd�}t�||�S)NrRr"�:r3r�r��findr�	revsymbol�rEr��changeid�iposr/r/r0r�ss


r�cCsBd|jvr|jd}|�d�}|dkr|d|�}t�||�SdS)Nr"r�r3r�r�r/r/r0�
basechangectx~s


r�cCs�d|jvr
ttd��t||jd�}d|jvr|jd}nd|jvr(|jd}nttd��zt�||�|}W|StjyJ|j||d�}Y|Sw)Nrjsfile not givenr"sfilenodesnode or filenode not given)�fileid)	r�r	rr�rr�r�	RepoError�filectx)rEr�r5r�r�r/r/r0r��s




��r�c
Cs�|j�d�}|s
dSt|�dkrttd��ztt|d�dd��\}}Wnty0ttd��wzt	�
||�WStjyM}zttt
�|���d}~ww)Ns	linerangersredundant linerange parameterrr�sinvalid linerange parameter)r��getallryr	r
�map�int�split�
ValueErrorr�processlineranger�
ParseErrorr�bytestr)r��	linerange�fromline�toline�excr/r/r0r��s 

���r�cCsd|d|fS)Ns%d:%drr/)r�r�r/r/r0�formatlinerange�rQr�c#sT�|�|d��t�||�}|�||�D]}t�fdd�|dD��|d<|VqdS)N�repoc3s�|]}�|VqdSrMr/)ru�	successor�rEr/r0�	<genexpr>�s�
�z&_succsandmarkersgen.<locals>.<genexpr>s
successors)�resourcer�showsuccsandmarkers�tovaluer})r
�mapping�itemmappingsr�r/r�r0�_succsandmarkersgen�s���r�cC�tjt|fd�S�Nrw)rrzr��r
r�r/r/r0�succsandmarkers�rQr�r��ctxccsT�|�|d�}|�|d�}t�||�}|D]}|�d�r$t|d�|d<|VqdS)Nr�r�sdivergentnodes)r�r�whyunstabler�r})r
r�rEr�r��entryr/r/r0�_whyunstablegen�s�
�r�cCr�r�)rrzr�r�r/r/r0r��rQr�cs�t���}id��d����dt|��d����d����d����d����d����d	��	��d
t
�dtj��
�dd
��dt�dt���dt|���dt|���dt||��dt||���fdd��fdd�d��S)Nr�rgr"sauthorsdescrhsextrasphasesobsoletessuccsandmarkerss
instabilitiessinstabilityr�swhyunstablerisinbranchsbranchesstagss	bookmarksc�t��SrM�r�r��r�r/r0r���zcommonentry.<locals>.<lambda>cr�rM�r�r�rr/r0r��r)�parent�child)r�binnoderPrrkrmrl�extra�phasestr�obsoleter�rr��
instabilitiesr�r�r�r�r�r�)rEr�rNr/rr0�commonentry�sR
�����	�
���
�����
�
�
�
�

�rcsv|j}����t���}t|d|�}t���||j�}t|��}|�	�fdd���fdd���fdd�||d��|S)z�Obtain a dictionary to be used for entries in a changelist.

    This function is called when producing items for the "entries" list passed
    to the "shortlog" and "changelog" templates.
    �changelogtagcr�rMrr�rr/r0r�rz!changelistentry.<locals>.<lambda>cst��d�S�Nrrr��r�rPr/r0r��cst��d�Sr
rr�rr/r0r�r)s
allparentsrrrsfiles)
rErPrrr��
listfilediffs�files�maxfilesr�update)�webr�rE�n�showtagsrr�r/rr0�changelistentry�s


��	rccsP�|j}d}|D]}||krdS|d7}t|||�}t|�|d<|VqdS)z2Emit up to N records for an iterable of revisions.rrr�N)rErrJ)r�revs�maxcount�parityfnrEr�rPr�r/r/r0�changelistentries
s��rcCs(d|jvr
t�|jd�Stt�|��S)Nr")r�r�	revescaperrr)r�r�r/r/r0�symrevorshortnodes
rc	
cs��t|�}|��}t|���D]/\}}||vrd}n	||vr!d}nd}|dkr)dnd}|�||��||dt|�|d��VqdS)Nsremovedsaddedsmodifieds
filenolinksfilenodelinkr)r"rj�blocknor�r�)r�
filesadded�	enumerater�processrrJ)	r
r�r�r�r�blocknorYr��templater/r/r0�
_listfilesgen"s(����r$c
st|jdt�|��}t|jdt�|��}t|�}t|j|j�}|dur'|��}|�	dd�}d|jj
vr9|jj
d}t|||d|�}t|j
�}t|jj||��t|�|�}	td
|t|j|�|��|||tjt||j
fd��fdd�|	|�|���d	�
t�t|j|����S)zBObtain a dictionary to be used to render the "changeset" template.schangesettagschangesetbookmarkNrsstylerwcr�rM)�diffsummaryr���diffstatsgenr/r0r�Zrz changesetentry.<locals>.<lambda>)
�diff�symrev�basenode�changesettag�changesetbookmark�changesetbranchrr%�diffstatr,r/)r�rErrr�r�r�r��p1�configr��diffsrr��diffstatgenrr.�dictrrr�mappedgeneratorr$r1r�	strkwargsr)
rr�r�
showbookmarks�
showbranch�basectx�styler(r��	diffstatsr/r&r0�changesetentry9s>�


�
�
�r;ccsN�|d|�D]}|�dt|�|d��Vqt|�|kr%|�di�VdSdS)Nsfiledifflink)r"rjsfileellipses)r!rry)r
rrN�maxrYr/r/r0�_listfilediffsgenas��r=cCstjt|||fd�Sr�)rr4r=)rrNr<r/r/r0rhs
�rc	cs~�t|d�D]6\}}d||f}|�d�rd}n|�d�r d}n
|�d�r(d}nd	}|�||||d
|d|d��VqdS)
Nrs%d.%d�+sdifflineplus�-s
difflineminus�@s
difflineatsdifflinesl%ss% 8s)slineslineno�lineids
linenumber)r �
startswithr!)r
�linesr"�lineidprefix�lineno�l�
difflineno�ltyper/r/r0�_prettyprintdifflinesns&�



���rIc	cs��|r	t�|�}	nt��}	tj|jdd�}
t|�}tj||||	|
d�}t|d�D]Q\}
\}}}}|dkr:|dd�}dd�|D�}|D] \}}|dur^|dur^|\}}}}t	�
||f|�s^qC|�|�qC|rytj
t||
|fd�}t|�|
|d	�Vq(dS)
NTr��optsrsrawcSsg|]}|d�qS)�
r/)ru�hr/r/r0rv�sz_diffsgen.<locals>.<listcomp>rw)r�r�lines)r�exact�alwaysrr�rr�	diffhunksr r�hunkinrange�extendrr4rIrJ)r
rEr�r8rr9r�r�rD�mr�r�rQr"�fctx1�fctx2�header�hunksrC�	hunkrange�	hunklines�s1�l1�s2�l2rFr/r/r0�	_diffsgen�s6�
����r_r�cCs(|j|||||j||f}tjt|dd�S)Ns	diffblockr�)rEr�rrzr_)rr�r8rr9r�rDrxr/r/r0r1�s�
�r1c	Csj|rd|pd}||rd|pd7}|rd|nd}|r d|nd}|||d||p+d|d||p2dd�S)Nsl%dr�sr%ds%ds% 6s)r!rAs
leftlinenosleftlinenumbersleftlinesrightlinenosrightlinenumbers	rightliner/)�type�
leftlineno�leftline�rightlineno�	rightline�lineid�llno�rlnor/r/r0�	_compline�s�rhc

cs��|D]v\}}}}}t�|�}||}	||}
t|	|
�}t�|�D]}t|||d|||||d|||d�Vq!|	|
kr\t�|||�D]}t||d||ddd�VqJq|
|	kryt�|||�D]}t|dd|d||d�VqhqdS)Nr)r`rarbrcrd)r�sysbytes�min�xrangerh)
r
�	leftlines�
rightlines�opcodesr`�llo�lhi�rlo�rhi�len1�len2r��ir/r/r0�_getcompblockgen�sF�






�
��
���rvcC�|||f}tjt|dd�S)Nscomparisonliner�)rrzrv)rlrmrnrxr/r/r0�
_getcompblock��
�rxccsb�t�d||�}|dkrt|||���}d|iVdS|j|d�D]
}t|||�}d|iVq!dS)z>Generator function that provides side-by-side comparison data.NrrN)r)�difflib�SequenceMatcherrx�get_opcodes�get_grouped_opcodes)r
�
contextnumrlrmrqrF�ocr/r/r0�_comparegen�s��r�cCrw)Nscomparisonblockr�)rrzr�)r~rlrmrxr/r/r0�compareryr�c
csV�t�|ddi�}t�t�|j||d���}t�|�\}}}}}		||||||	fVq!)z3Generator function that provides the diffstat data.snoprefixFrJ)rr��diffstatdatar�	iterlinesr(�diffstatsum)
rr�r8r��stats�maxname�maxtotal�addtotal�removetotal�binaryr/r/r0r2
s��r2cCs*t|�\}}}}}}td�t|�||fS)z#Return a short summary of the diff.s5 %d files changed, %d insertions(+), %d deletions(-)
)rJrry)�statgenr�r�r�r�r�r�r/r/r0r%s�r%c#s��t|�\}}�}}}|��}	�fdd�}
d}|D]-\}}
}}||	vr%dnd}|
|}|d7}|�||��||||
|
�|
|�t|�d��VqdS)Ncs�dkrdSt|��dS)Nr�d)�float)ru�r�r/r0�pct#sz_diffstattmplgen.<locals>.pctrsdiffstatlinksdiffstatnolinkr)r"rjsfilenostotalsaddpcts	removepctr�)rJrr!r)r
r�r�r�r�r�r�r�r�rr��fileno�filename�adds�removes�isbinaryr#�totalr/r�r0�_diffstattmplgens*����r�cCs|||f}tjt|d�S)z5Return a diffstat template for each file in the diff.rw)rr4r�)r�r�r�rxr/r/r0r.;s
r.c@s~eZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS) �sessionvars�?cCs||_||_dSrM)�_start�_vars)rD�vars�startr/r/r0rFBs
zsessionvars.__init__cCs
|j|SrM�r�)rDr�r/r/r0�__getitem__F�
zsessionvars.__getitem__cCs||j|<dSrMr�)rDr��valuer/r/r0�__setitem__Ir�zsessionvars.__setitem__cCstt�|j�|j�SrM)r��copyr�r�rHr/r/r0�__copy__Lr�zsessionvars.__copy__cCst�|||�}||jvSrM)r�unwrapvaluer�)rDr
r�r�r/r/r0�containsOs
zsessionvars.containscCst�|||�}|j�|�SrM)rr�r�r�)rDr
r�r�r/r/r0�	getmemberSszsessionvars.getmembercC�t�td����Nsnot comparable�rr�r�rDr
r�r/r/r0�getminWr�zsessionvars.getmincCr�r�r�r�r/r/r0�getmaxZr�zsessionvars.getmaxcCr�)Nsnot filterabler�)rDr
r��selectr/r/r0�filter]�zsessionvars.filterccs>�|j}tt�|j��D]\}}|t�|�|d�Vd}qdS)N)r�svalues	separator�&)r�r�rr$r�r�)rDr
�	separatorr�r�r/r/r0�itermapsas���zsessionvars.itermapscCr�)Ns not displayable without templater�)rDr
r��sepr/r/r0�joinkr�zsessionvars.joincCs|�||d�S�Nr�)r�r�r/r/r0�showor�zsessionvars.showcCs
t|j�SrM)�boolr�r�r/r/r0�toboolrr�zsessionvars.toboolcCs|jSrMr�r�r/r/r0r�uszsessionvars.tovalueN)r�)r^r_r`rFr�r�r�r�r�r�r�r�r�r�r�r�r�r/r/r/r0r�As

r�c@seZdZdd�ZdS)�wsgiuicCsdS)N�Pr/rHr/r/r0�	termwidth{szwsgiui.termwidthN)r^r_r`r�r/r/r/r0r�ysr�c	Cs,g}|j�d�}||j�d�7}|D]�\}}|dd�}t�|�}t�d|||f|�}|s;|j�td�||f�qt�d|�}|�	||�
d��}	|�	||�
d��}
|�
d�}d	}|rnt�|�
��D]	}
|tj|
O}qdzt�|	|�}	|�|	|
f�Wqtjy�|j�td
�||	f�Yqw|S)Nswebsubsinterhgrrs1^s%s(.+)(?:(?<=\\\\)|(?<!\\))%s(.*)%s([ilmsux])*$s#websub: invalid pattern for %s: %s
s(?<!\\)\\%sr=rs"websub: invalid regexp for %s: %s
)r�configitemsr�reescape�rer�warnr�compile�sub�groupr�sysstr�upper�__dict__r'r)rE�websubtable�
websubdefsr��pattern�unesc�delimr�delim_re�regexp�format�flagin�flags�flagr/r/r0�
getwebsubssD
���
��r�cCst�||i�t�|�SrM)r�getgraphnodecurrent�getgraphnodesymbol)rEr�r/r/r0�getgraphnode�s
��r�rM)NN)rr�)`�
__future__rr�rzr4r��i18nrrNrrrr�commonr	r
rr�r
rrrrrrrrrrrr�uimodr�utilsr�sortdictr%r1r8r@�objectrArbrsr}r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��	_requiresr�r�rrrrr$r;r=rrIr_r1rhrvrxr�r�r2r%r�r.�wrappedr�r�r�r�r/r/r/r0�<module>s�D�
	
T
	




 


(
)"
8.