403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /usr/lib64/python3.9/site-packages/mercurial/__pycache__/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /usr/lib64/python3.9/site-packages/mercurial/__pycache__/logcmdutil.cpython-39.pyc
a

�+�b��
@s@ddlmZddlZddlZddlZddlmZddlmZm	Z	ddl
mZddlm
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZddlm Z m!Z!ej"r�dd	l#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)e$e%e&e'e)fD]Z*e*s�J�q�d
d�Z+dd
�Z,dWdd�Z-Gdd�de.�Z/dd�Z0Gdd�de.�Z1Gdd�de1�Z2Gdd�de1�Z3dd�Z4dd�Z5dXd d!�Z6dYd"d#�Z7ej8Gd$d%�d%e.��Z9d&d'�Z:d(d)�Z;d*d+�Z<d,d-�Z=dZd/d0�Z>d1d2�Z?d[d3d4�Z@d5d6d7d8d9d:d;d<d=d>�	ZAd?d@�ZBdAdB�ZCdCdD�ZDdEdF�ZEdGdH�ZFdIdJ�ZGdKdL�ZHd\dMdN�ZIdOdP�ZJdQdR�ZKdSdT�ZLdUdV�ZMdS)]�)�absolute_importN�)�_)�nullrev�wdirrev)�attr)�dagop�error�	formatter�graphmod�match�mdiff�merge�patch�pathutil�pycompat�revset�
revsetlang�scmutil�smartset�
templatekw�	templater�util)�dateutil�
stringutil)�Any�Callable�Dict�Optional�Sequence�TuplecCs\|�d�}|rTzt|�}Wn ty:t�td���Yn0|dkrXt�td���nd}|S)z0get the log limit according to option -l/--limitslimits limit must be a positive integerrslimit must be positiveN)�get�int�
ValueErrorr	�
InputErrorr)�opts�limit�r'�:/usr/lib64/python3.9/site-packages/mercurial/logcmdutil.py�getlimit:s
r)c	Cs�|��}|j�dd�r�|����tkr�ddlm}|�|�}|�	|�
��|j�ddid��L|j���"t
j
|��|d�Wd	�n1s�0YWd	�n1s�0Y|S|�
�Sd	S)
z�get the context object to use as parent when diffing


    If diff.merge is enabled, an overlayworkingctx of the auto-merged parents will be returned.
    �diffsmerger)�context)�uis
forcemerges#internal:merge3-lie-about-conflictss
merge-diff)ZwcN)�repo�ui�
configboolZp2�revr�r+ZoverlayworkingctxZsetbase�p1ZconfigoverrideZsilentr)�ctxr-r+�wctxr'r'r(�diff_parentIs
��	Nr5F�c!s�|rt�|j|��|��nd�d}dd�}�fdd�}�dkr�tj|dd�}||���}�d	7�|��D],}|���sh��t	d
�|||��|f�qhtj
|�gdd�}t�||�}|}|j
�d
d�p�|j
�d
d����fdd�}|||�}|�r0|jddd�}d}����s���|	}��s0|t�|�|�}|j|||||||
d��|du�s\����r�|�pd�}|�r�tjt���|d�g�t�t����D]}|�|��q�n�|�r�tjt���|d��ntjdd��|d������r��fdd�}t�t�|���D]}��|��qn�D]\}}�j||d��q|��}t�||�D]�\}}|}z|du�rl|j |d}Wnt!�y�d}Yn0t�"||�}|j#�$�|�} |�s�|�%|��s�t&|����rF|j�||||||| d��qFdS) zshow diff or diffstat.r6Ncs��fdd�S)Ncs��|��S�Nr')�x��f�gr'r(�<lambda>~r6z1diffordiffstat.<locals>.compose.<locals>.<lambda>r'r9r'r9r(�compose}szdiffordiffstat.<locals>.composecst��|�Sr7)�	posixpath�join�r:)�prefixr'r(�pathfn�szdiffordiffstat.<locals>.pathfnT)Zlegacyrelativevalue�/s(warning: %s not inside relative root %s
spath)�pats�defaultsdevelsall-warningss
check-relrootcs.�r|���std|�f��|t��d�S)Ns%file %s doesn't start with relroot %s)�
startswith�AssertionError�lenr@)�	checkroot�relrootr'r(�
relrootpathfn�s

�z%diffordiffstat.<locals>.relrootpathfnrF)r+Znoprefix�P)r%rB�copysourcematch�
hunksfilterfn)�widthc[s|Sr7r')�chunks�kwargsr'r'r(r<�r6z diffordiffstat.<locals>.<lambda>)r%c3s"�D]\}}�j||d�VqdS)N��labelrR)�chunkrS)rPr.r'r(�gen�szdiffordiffstat.<locals>.genrRr)�changes�stat�fprA)'rZ	canonpath�root�getcwdrZgetuipathfn�filesrF�warnrr�matchmodZintersectmatchersr.r/�copy�plainZ	termwidth�diffZcanwritewithoutlabelsr�diffstatrZ	iterlinesZ
filechunkiterZchunkbuffer�writeZ
diffstatuiZ	difflabelZcanbatchlabeledwrites�nodeZitersubreposZsubstate�KeyErrorZ
subdirmatcherZwvfsZreljoin�exact�any)!r.r-�diffoptsZctx1Zctx2rrVrWrX�
graphwidthrArYZlistsubreposrNrMr=rBZuipathfnZ	uirelrootZ	matchrootZrelrootmatchrKrO�outrTrUrSZnode2Zsubpath�subZ	tempnode2ZsubmatchZ	subprefixr')rIrPrArJr.r(�diffordiffstatfs�
����

�


�


 �rkc@s*eZdZdZdd�Zdd�Zddd	�Zd
S)�changesetdifferzBGenerate diff of changeset with pre-configured filtering functionscCst�|���Sr7)rZmatchallr-��selfr3r'r'r(�_makefilematcher�sz changesetdiffer._makefilematchercCsdSr7r'rmr'r'r(�_makehunksfilter�sz changesetdiffer._makehunksfilterrFcCs2t||��|t|�||�|�|||�|�d�	dS)N)rrWrhrN)rkr-r5rorp)rnr.r3rgrhrWr'r'r(�showdiff�s�zchangesetdiffer.showdiffN)rF)�__name__�
__module__�__qualname__�__doc__rorprqr'r'r'r(rl�srlcCsZdd|��g}|��r"|�d�|��rP|�d�|��D]}|�d|�q<d�|�S)Ns
log.changesetschangeset.%sschangeset.obsoleteschangeset.unstablesinstability.%s� )�phasestr�obsolete�append�
isunstable�
instabilitiesr?)r3�labelsZinstabilityr'r'r(�changesetlabels�s

r}c@sVeZdZdZddd�Zdd�Zdd	�Zdd
d�Zdd
�Zdd�Z	dd�Z
ddd�ZdS)�changesetprinterz9show changeset information when templating not requested.NFcCsr||_||_||_|pt�|_t�||�|_|o8|�d�|_	|oH|�d�|_
i|_i|_d|_
d|_t��|_dS)Nsstatspatch)r.r-�bufferedrl�_differrZdiffallopts�	_diffoptsr!�_includestat�_includediff�header�hunk�
lastheader�footerrZ
getlogcolumns�_columns)rnr.r-�differrgrr'r'r(�__init__szchangesetprinter.__init__cCsh|��}||jvr@|j|}||jkr8||_|j�|�|j|=||jvrd|j�|j|�|j|=dSr7)r0r�r�r.rbr�)rnr3r0�hr'r'r(�flushs



zchangesetprinter.flushcCs|jr|j�|j�dSr7)r�r.rb�rnr'r'r(�close&szchangesetprinter.closecKsTt�|�}|jrB|jjdd�|�|||�|j��|j|��<n|�|||�dS)NT)Zlabeled)	rZbyteskwargsrr.�
pushbuffer�_show�	popbufferr�r0)rnr3�copies�propsr'r'r(�show*s
zchangesetprinter.showcCs�|��}|�dd�}|jjr:|jjdt�|�dd�dS|j}|jj|dt�|�t|�d�|�	�}|dkr�|jj|d	|d
d�t
�|jj
�D]B\}}	|dkr�q�|	�
|j|�D] }
|jj|	j|
d|	jd�q�q�|jj�r|jj|d
|��dd�t�|j|�D]0}d|��}|jj|dt�|�|d��q|jj�r�|��}
|
du�rn|jjj}
t}n|jj�|
�}|jj|dt�|j||
�dd�|jj|d|��dd�|jj|dt�|���dd�|���r|��}|jj|dd� |�dd�n|�!��r$|�"|�|�#|�|jj�r�t$gd�|�%�|�&�|�'�g�D].\}}|�rX|jj||d� |�dd��qXn6|�(��r�|jj)�r�|jj|dd� |�(��dd�|�r�|jj)�r�dd �|D�}|jj|d!d� |�d"d�|�*�}|�rN|jj�rNt+|�,��D],\}}|jj|d#|t-�.|�fd$d��q |�/��0�}|�r�|jj)�r�|jjt1d%�d&d�|jj|d&d�|j�d'�n |jj|d(|�2�dd)d�|j�d*�|�3||�dS)+�(show a single changeset or file revision�
graphwidthrs%s
slog.noderRN�	changesetsdefault�branchs
log.branchsbranchesslog.%ssphases	log.phaseslog.parent changeset.%s�parent�manifestsui.debug log.manifest�userslog.user�dateslog.datesinstabilitys, slog.instability)�filessfiles+sfiles-rvsui.debug log.filesr�sui.note log.filescSsg|]}d|�qS)s%s (%s)r'��.0�cr'r'r(�
<listcomp>�r6z*changesetprinter._show.<locals>.<listcomp>�copiessui.note log.copies�extrasui.debug log.extras
description:
sui.note log.descriptions

ssummaryslog.summary�
)4rcr!r.�quietrbrZformatchangeidr�r}�branchr�	iteritemsr-�namesZlogfmtZ	colorname�	debugflagrwZmeaningfulparents�manifestnode�
nodeconstants�wdiridrZmanifestlogr0Z
formatrevnode�userrZdatestr�daterzr{r?rx�_showobsfate�_exthook�zip�
filesmodified�
filesadded�filesremovedr[�verbose�extra�sorted�itemsrZ	escapestr�description�stripr�
splitlines�
_showpatch)rnr3r�r�Z
changenoderh�columnsr�Znsname�ns�nameZpctxrSZmnodeZmrevr{�key�valuer�r�r'r'r(r�3s��� 
��



���
�



�����

��zchangesetprinter._showcCsht�|jj|j�}tj|jjdtj|d�}|�d|i���}|rd|D]}|jj	|j
d|dd�qDdS)Ns{join(obsfate, "
")}��defaults�	resources�ctxsobsoleteslog.obsfaterR)r
�templateresourcesr-r.�
maketemplaterr�keywords�
renderdefaultr�rbr�)rnr3�tres�tZobsfateZobsfateliner'r'r(r��s��zchangesetprinter._showobsfatecCsdS)z.empty method used by extension as a hook pointNr'rmr'r'r(r��szchangesetprinter._exthookrcCst|jr |jj|j||j|dd�|jr8|jr8|j�d�|jrX|jj|j||j|dd�|jsd|jrp|j�d�dS)NT�rWr�F)r�r�rqr.r�r�rb)rnr3rhr'r'r(r��s��zchangesetprinter._showpatch)NNF)N)r)rrrsrtrur�r�r�r�r�r�r�r�r'r'r'r(r~	s

	wr~c@s*eZdZdZd
dd�Zdd�Zdd	�ZdS)�changesetformatterz1Format changeset information by generic formatterNFcCs0t�||||||�tj||dd�|_||_dS)NT)�git)r~r�rZdifffeatureoptsr��_fm)rnr.r-�fmr�rgrr'r'r(r��szchangesetformatter.__init__cCs|j��dSr7)r��endr�r'r'r(r��szchangesetformatter.closecs||j�����j|d��jt�|���t�|��d����}|j	j
rR|sRdS�j|��|��|�
���|���|���j|��dd��j|��dd��j�fdd�|��D�d	d�d
�|j	js�d|vr�j��|��p�|jjj�d�|j	j�sd
|v�r�j��|���d�|j	j�s@d|v�s@d|v�s@d|v�rz�j�j|��dd��j|��dd��j|��dd�d�|j	j�o�|j	j}|�s�d|v�r��j�j|� �dd�d�|�r�|�s�d|v�r�j�j|�p�iddd�d�|j!�s�d|v�r2|j	�"�|j#j$|j	||j%dd��j|j	�&�d�|j'�sDd|v�rx|j	�"�|j#j$|j	||j%d d��j|j	�&�d!�dS)"r��r3)r0rcN�bookmark)r�stagcsg|]}��|����qSr')�hexfuncrcr��r�r'r(r��r6z,changesetformatter._show.<locals>.<listcomp>snode)r�Zphaser�r�Zdesc�	bookmarks�tags�parentsr�)Zmanifestr�)r�smodifiedsadded�removedsfile)ZmodifiedZaddedZremovedr�)r[r�snamessource)r�r��r�sdiffstatTr�)rar*F)r`)(r�Z	startitemr+�datar�intrevr�Zbinnode�datahintr.r�r�rwr�Z
formatdater�r�Z
formatlistr�r�r�r�r�r-r�r�Z
formatdictr�r�r�r�r�r[r�r�r�rqr�r�r�)rnr3r�r�r�r�r'r�r(r��sn ��
��������

zchangesetformatter._show)NNF)rrrsrtrur�r�r�r'r'r'r(r��s
�
r�cs2eZdZdZd
dd�Z�fdd�Zdd	�Z�ZS)�changesettemplateraformat changeset information.

    Note: there are a variety of convenience functions to build a
    changesettemplater for common cases. See functions such as:
    maketemplater, changesetdisplayer, buildcommittemplate, or other
    functions that use changesest_templater.
    NFcs:t�||||||�t�||�|_}tj|�tj|tjd�|_	t
��|_�j
|_dddd�j
�j
ddddddi|_�jr�d|jjd	f|jjd
f|jjdfg}|D]4\}	}
|jD]$}||
}|	r�||j	vr�||j|<q�q�n4�fdd
�|j��D�}
t��|j	|
�}|j�|�|jd�r6|j�|j	�|jdi��dS)N)r�r��cache�headerr6�footers	docheader�	docfooter�	separator)Tr6s_verboses_quiets_debugcsg|]}|�jkr|�qSr')�ref)r��p��tmplspecr'r(r�Lr6z/changesettemplater.__init__.<locals>.<listcomp>)r~r�r
r��_tresourcesZ
loadtemplaterrr�Zdefaulttemplr��	itertools�count�_counterr��_tref�_parts�mapfiler.r�r�r��keysZtemplatepartsmap�updaterb�render)rnr.r-r�r�rgrr�Z	tmplmodes�modeZpostfixr�ZcurZ	partnames�mr'r�r(r�%sD�
�


�
zchangesettemplater.__init__csB|jdr4|jsd|_|j|j�|jdi�7_tt|���S)Nr�r6)r�r�r�r��superr�r�r���	__class__r'r(r�Ss

zchangesettemplater.closecCs|��}||d<t|j�|d<}d|i|d<|�dd�}|jdrh|dkrh|j�|j�|jdi��|jdr�|j�|jd|�}|j	r�||j
|��<n|j|kr�||_|j�|�|j|j
}|j�|j�||��|�|�|�||�|jd	�r|j�s|j�|jd	|�|_d
S)r�r�sindexr�srevcacher�rr�r�r�N)r^�nextr�r!r�r.rbr�r�rr�r0r�r�r�r�r�)rnr3r�r��indexrhr�r�r'r'r(r�Zs*


zchangesettemplater._show)NNF)rrrsrtrur�r�r��
__classcell__r'r'r�r(r�s
�
.r�cCs*|r|rJ�|rt�d|�St�|�SdS)Nr�)r
�mapfile_templatespec�literal_templatespec)�tmplr�r'r'r(�templatespec}sr�cCs�|s:|s:|�dd�}|r(t�t�|��St�|�dd��}|s�|r�|}d}tj�	|�ds~t�
d|�ppt�
|�\}}|r~|}t�d||�St�|d|�S)	zqFind the template matching the given template spec or style

    See formatter.lookuptemplate() for details.
    �command-templates�logr,�styleNrsmap-cmdline.r�)
�configr
r�r�
unquotestringrZ
expandpath�os�path�splitZtry_open_templater�Zlookuptemplate)r.r�Zstyler�rXZmapnamer'r'r(�_lookuptemplate�s$��rcCst�|�}t||||d�S)zKCreate a changesettemplater from a literal template 'tmpl'
    byte-string.)r)r
r�r�)r.r-r�r�specr'r'r(r��s
r�cCs�|||f}t||�d�|�d��}|jdvrL|�d|�}t|||g|�R�S|jsp|jsp|jspt||g|�R�St|||g|�R�S)a_show one changeset using template or regular display.

    Display format will be the first non-empty hit of:
    1. option 'template'
    2. option 'style'
    3. [command-templates] setting 'log'
    4. [ui] setting 'style'
    If all of these values are either the unset or the empty string,
    regular display via changesetprinter() is done.
    stemplater>scborsjsonr�)	rr!r�r
r�r�r�r~r�)r.r-r%r�rZpostargsrr�r'r'r(�changesetdisplayer�s

rc@seZdZdZe��Ze��Ze��Zeje�	e
�d�Zeje�	e
�d�Zejdd�Z
eje�	e
�d�Zejdd�Zejdd�Zeje�	e
�d�Zeje�	e
�d�Zeje�	e
�d�Zeje�	e
�d�Zejdd�Zejdd�Zejdd�Zejdd�Zejdd�ZdS)�walkoptszgOptions to configure a set of revisions and file matcher factory
    to scan revision/file history
    )rENFrT)rrrsrtrurZibrDr%�revspecZFactory�listr��branchesr�r��	no_merges�only_merges�prune_ancestors�users�include_pats�exclude_pats�follow�force_changelog_traversal�filter_revisions_by_pats�sort_revisionsr&r'r'r'r(r	�s&r	cCs�|�d�rd}n|�d�r d}nd}|�d�rF|�dd�r@d	}qJd
}nd}t|||�dg�|�d
g�|�dg�|�dg�|�d�|�dg�t|�d��t|�d��|�dg�|�dg�|�dg�|�dg�|t|�d��|t|�d�S)zwParse log command options into walkopts

    The returned walkopts will be passed in to getrevs() or makewalker().
    sfollow_firstrsfollow�r�graph�experimentalslog.topo�topo�descNsrevr�r�sonly_branchr��keyword�	no_merges�only_merges�pruner�sincludesexcluder�)rDr%r
r�rr�r�r
rrrrrrrrr&)r!r/r	�boolr))r.rDr%rrr'r'r(�	parseopts�s:









�r!c
sz�d}t�||j|j�\}}|��p4|��o4|j}|�sp|jr�|jr��fdd�|D�}|�	�D]H}d}	|D]$}
||
vr�d}	qn|
�
|�rnd}	}qn|	sbt�t
d�|��qbn�|j�r|�	�D]X}||vr�tj���|��r�d}q�nt�t
d�|����|�}|s�t�t
d�|��q�n$|�	�D]}��|�}|�s"d}�q"|�rp|�	�D]}|�rb|�jv�rL�qp�qLd}|||fS)	a^Build matcher and expanded patterns from log options

    If --follow, revs are the revisions to follow from.

    Returns (match, pats, slowpath) where
    - match: a matcher built from the given pats and -I/-X opts
    - pats: patterns used (globs are expanded on Windows)
    - slowpath: True if patterns aren't as simple as scanning filelogs
    Ncsg|]}�|�qSr'r')r��r�r-r'r(r�5r6z _makematcher.<locals>.<listcomp>FTs>cannot follow file not in any of the specified revisions: "%s"�/cannot follow file not in parent revision: "%s"s$cannot follow nonexistent file: "%s")rZmatchandpatsrDr%Zanypats�alwaysrrr
r[Zhasdirr	�
StateErrorrrr�existsZwjoin�file�store)
r-�revs�woptsr4rrD�slowpathZ	startctxsr:�foundr�Zfilelogrr'r#r(�_makematchersf�

������

�

r.csjg�|D]*}�|����fdd���|�D��qi���fdd�}���fdd�}tj|�dd�|fS)	Nc3s|]}�|��VqdSr7)Zintrofilectx)r�r:r�r'r(�	<genexpr>xr6z!_fileancestors.<locals>.<genexpr>cst����t�|�g��Sr7)r�
matchfilesr!r�r�)�fcacher-r'r(�filematcher�sz#_fileancestors.<locals>.filematcherc3s4tj��d�D] \}}dd�|D��|<|VqdS)N��followfirstcSsg|]}|���qSr')rr�r'r'r(r��r6z2_fileancestors.<locals>.revgen.<locals>.<listcomp>)rZfilectxancestors)r0�cs)r1�fctxsr4r'r(�revgen�sz_fileancestors.<locals>.revgenF)Ziterasc)�extend�walkrZgeneratorset)r-r*rr4r"r2r7r')r3r1r6r4r-r(�_fileancestorsts r:cCsdS)zDhook for extensions to override the filematcher for non-follow casesNr')r-rDr%r'r'r(�_makenofollowfilematcher�sr;�.c
CsTzt�||||�WStjyN}z"tj|jd|jd��WYd}~n
d}~00dS)z�Resolves user-provided revset(s) into a single revision.

    This just wraps the lower-level scmutil.revsingle() in order to raise an
    exception indicating user error.
    r��hintN)r�	revsingler	�RepoLookupErrorr$�argsr>)r-r
rE�
localalias�er'r'r(r?�sr?c
CsPzt�||�WStjyJ}z"tj|jd|jd��WYd}~n
d}~00dS)z�Resolves user-provided revset(s) into two revisions.

    This just wraps the lower-level scmutil.revpair() in order to raise an
    exception indicating user error.
    rr=N)r�revpairr	r@r$rAr>)r-r*rCr'r'r(rD�srDc
CsRzt�|||�WStjyL}z"tj|jd|jd��WYd}~n
d}~00dS)z�Resolves user-provided revset(s).

    This just wraps the lower-level scmutil.revrange() in order to raise an
    exception indicating user error.
    rr=N)r�revranger	r@r$rAr>)r-ZspecsrBrCr'r'r(rE�srE)snot merge()N)smerge()N)Ns_matchfiles(%ps))sdate(%s)N)s
branch(%s)�%lr)sfilelog(%s)rF)skeyword(%s)rF)s
ancestors(%s)snot %lr)suser(%s)rF)	rr�_matchfilesr�r��_patslogrrr�c
s��fdd�|jD�|j|j|j|j|jdd�|jD�d�}|jr�|r�ddg}|jD]}|�	d|�qR|j
D]}|�	d|�ql|jD]}|�	d	|�q�||d
<n|jr�|js�t
|j�|d<g}tt�|��D]z\}}|s�q�t|\�}	��rd�v�r|�	��q�|	�s |�	t��|��qЈ�r8�fd
d�|D�}|�	t�|	|��q�|j�rr|�	t�ddd�|jD���|�r�dd�|�d}nd}|S)z?Return a revset string built from log options and file patternscsg|]}d��|��qS�sliteral:)Zlookupbranch)r��br#r'r(r��r6z_makerevset.<locals>.<listcomp>cSsg|]}d|�qSrIr'�r��vr'r'r(r��r6)r�r�rrrrr�sr:s	d:relpathsp:si:sx:rGrH�%csg|]}t��|��qSr')r�
formatspecrK)�revopr'r(r��r6rFcSsg|]}t�|��qSr')rZformat_bookmark_revspecrKr'r'r(r��r6�(s and �)N)rr�r�r
rrrrrDryrrrrr�rr��_opt2logrevsetrrNr�r?)
r-r+r,r%Z	matchargsr��expr�op�valZlistopr')r-rOr(�_makerevset�sT�





��rVcCs\|jrt||j�}nD|jr4|j��|jkr4t��}n$|jrF|�d�}nt�	|�}|�
�|S)z>Return the initial set of revisions to be filtered or followedr<)r
rErZdirstater2Znullidr�basesetr*Zspanset�reverse)r-r+r*r'r'r(�_initialrevs�s

rYcszt||�}|st��dfSt|||�\�}}tj||d�}d}|jr�|sP���rhtj	|||jdkd�}n$|j
rrJ�t||�|jdkd�\}}|��|dur�t
||j|j�}|dur��fdd�}t|||�}|j�r<|jdvs�J�|jdk�r|���s<t�||jj�}tjt|�d	d
�}n |���s<|���s<|jd	d�|�rXt�d|�}|||�}|jdu�rr|�d|j�}||fS)
z�Build (revs, makefilematcher) to scan revision/file history

    - revs is the smartset to be traversed.
    - makefilematcher is a function to map ctx to a matcher for that revision
    N)rDrr3cs�Sr7r'r��rr'r(r2'szmakewalker.<locals>.filematcher>rrrT)�istopo�rXr)rYrrWr.rZevolverr%rZrevancestorsrr:rXr;rDr%rVrr[ZtoposortZ	changelogZ
parentrevsrrZisdescending�sortrr&�slice)r-r+r*rDr,r2rSZmatcherr'rZr(�
makewalkersB

�


r_cCs.t||�\}}|s|dfSt�}||_||fS)zvReturn (revs, differ) where revs is a smartset

    differ is a changesetdiffer with pre-configured file matcher.
    N)r_rlro)r-r+r*r2r�r'r'r(�getrevs>sr`c		Cs�g}|�dg�D]�}z|�dd�\}}Wn$tyLt�td�|��Yn0ztt|�d��\}}Wn$ty�t�td�|��Yn0td�|}t	�
|d||�}|�|t�
||�f�q|S)	zbParse --line-range log option and return a list of tuples (filename,
    (fromline, toline)).
    s
line_range�,rs"malformatted line-range pattern %s�:sinvalid line range for %ss3line range pattern '%s' must match exactly one fileN)r!�rsplitr#r	r$r�mapr"rrZparsefollowlinespatternryrZprocesslinerange)	r-r%Zlinerangebyfname�pat�	linerange�fromline�toline�msg�fnamer'r'r(�_parselinerangeoptLs$
�
�rkcs��d}i�t�|�D]�\}\}}||vr<t�td�|��|�|�}t�|||�D]D\}}|��}	|	durpt}	|	|vrzqT��	|	i��	|�
�g��|�qTqdd����fdd�}
��fdd�}t�d	d
�}t
�}
||
_|
|
_t�|�|
fS)aReturn (revs, differ).

    "revs" are revisions obtained by processing "line-range" log options and
    walking block ancestors of each specified file/line-range.

    "differ" is a changesetdiffer with pre-configured file matcher and hunks
    filter.
    Nr$cSs|Sr7r')�fctx�hunksr'r'r(�nofilterhunksfn�sz)getlinerangerevs.<locals>.nofilterhunksfncs,��t�|����dur�S�fdd�}|S)Nc3sn��|���}|durZ|D]<\�}�dur6�|fVqt�fdd�|D��r�|fVqn|D]
}|Vq^dS)Nc3s"|]}t��dd�|�VqdS)rN)r
Zhunkinrange)r�Zlr��hrr'r(r/�r6zJgetlinerangerevs.<locals>.hunksfilter.<locals>.filterfn.<locals>.<genexpr>)r!rrf)rlrmZ
lineranges�linesr��Zfctxlinerangesror(�filterfn�s
z7getlinerangerevs.<locals>.hunksfilter.<locals>.filterfn)r!rr�)r3rs)�linerangesbyrevrnrrr(�hunksfilter�s

z%getlinerangerevs.<locals>.hunksfiltercs"t��t�|�g��}t��|�Sr7)rr!rr�r0)r3r[)rtr-r'r(r2�sz%getlinerangerevs.<locals>.filematcherTr\)rkr	r&rZfilectxrZblockancestorsZintrorevr�
setdefaultrryr�rlrorprrW)r-Zuserrevsr%r4rjrgrhrlrfr0rur2r*r�r')rtrnr-r(�getlinerangerevsds6	
�
��rwcs`|�dd�}|stjSt�|�}t|t�r2|j}n
t�	|�}tj
||tj|d���fdd�}|S)Nr�s	graphnoder�cs||d�}��|�S)N)r�srepo)r�)r-r3r�r��Ztemplr'r(�
formatnode�s
z'_graphnodeformatter.<locals>.formatnode)rrZgetgraphnoderr�
isinstancer�r�r
r�r�r�)r.�	displayerrr�ryr'rxr(�_graphnodeformatter�s



�r|c
Csx|pi}t||�}t��}|j}	|�d�r>|	�t�|	d��n\tjtj	tj
d�}
|
��D]2\}}|�dd||	|�|	|<|	|sXd|	|<qX|�
dd�|_i}
|D]�\}}}}||||
�}|r�||�nd}||||||�}t|�}|d}|j|f||d�t�|���|j�|��d	�}|d
�s*|d
=|�|�t�|g|�D]&\}}}}t�||||||�g}�qBq�|��dS)Nr�|)r�sgrandparentsmissingrs
graphstyle.%ssgraphshortenr)r�rhr����)r|rZ
asciistate�stylesr_r��dict�fromkeysZPARENTZGRANDPARENTZ
MISSINGPARENTr�rr/Zgraphshortenr�r�rZ	strkwargsr��poprr�r��chain�asciir�)r.r-Zdagr{Zedgefn�	getcopiesr�ry�staterZ	edgetypesr�r�Zformatnode_cacher0�typer3r��charr�ZedgesZ	firstedgerOrqZcoldatar'r'r(�displaygraph�sN

��
���


r�cCs$t�||�}t||||tj|�dSr7)rZ	dagwalkerr�Z
asciiedges)r.r-r*r{Z
getrenamedZrevdagr'r'r(�displaygraphrevs�sr�cCsF|D]4}||}|r||�nd}|j||d�|�|�q|��dS)Nr�)r�r�r�)r.r-r*r{r�r0r3r�r'r'r(�displayrevs�sr�cCs8dD].}||vr||rt�td�|�dd���qdS)N)snewest_firsts+-G/--graph option is incompatible with --%s�_�-)r	r$r�replace)rDr%rTr'r'r(�checkunsupportedgraphflags�s
��r�cCs0t|�}|��|dur$|d|�}t�||�Sr7)r)rXr�nodes)r-r�r%r&r'r'r(�	graphrevss
r�)NFNrr6r6FN)F)NF)r<N)N)NN)NZ
__future__rr�rr>Zi18nrrcrrZ
thirdpartyrr1rr	r
rrr]r
rrrrrrrrrrrZutilsrr�
TYPE_CHECKING�typingrrrrrr r�r)r5rk�objectrlr}r~r�r�r�rr�r�sr	r!r.r:r;r?rDrErRrVrYr_r`rkrwr|r�r�r�r�r�r'r'r'r(�<module>s�L 	
$�
FLc

-,W


�
;3@
/		

Youez - 2016 - github.com/yon3zu
LinuXploit