Ë
    CfÙc=%  ã                   óî   — d Z ddlZddlZ	 ddlmZmZmZmZmZm	Z	m
Z
 dZddddd	œZ ej                  d
«      Z G d„ de«      Z G d„ de«      Zd„ Zd„ Z G d„ de«      Z G d„ de«      Zy# e$ r Y ŒUw xY w)z'Functions for working with watch files.é    N)ÚIterableÚIteratorÚListÚOptionalÚSequenceÚTextIOÚTupleé   z[-_]?(\d[\-+\.:\~\da-zA-Z]*)z2(?i)\.(?:tar\.xz|tar\.bz2|tar\.gz|zip|tgz|tbz|txz)zL(?i)\.(?:tar\.xz|tar\.bz2|tar\.gz|zip|tgz|tbz|txz)\.(?:asc|pgp|gpg|sig|sign)z%[\+~](debian|dfsg|ds|deb)(\.)?(\d+)?$)z@ANY_VERSION@z@ARCHIVE_EXT@z@SIGNATURE_EXT@z	@DEB_EXT@zdebian.watchc                   ó   — e Zd ZdZy)ÚMissingVersionzThe version= line is missing.N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ú./usr/lib/python3/dist-packages/debian/watch.pyr   r   =   s   „ Ú'r   r   c                   ó   — e Zd ZdZy)ÚWatchFileFormatErrorz(Raised when the input is not valid.
    Nr   r   r   r   r   r   A   s   „ òr   r   c                 óž   — t        t        j                  «       «      }||d<   |j                  «       D ]  \  }}| j                  ||«      } Œ | S )z°Apply substitutions to a string.

    :param text: text to apply substitutions to
    :param package: package name, as a string
    :return: text with subsitutions applied
    z	@PACKAGE@)ÚdictÚSUBSTITUTIONSÚitemsÚreplace)ÚtextÚpackageÚsubstsÚkÚvs        r   Úexpandr!   F   sQ   € ô ”-×%Ñ%Ó'Ó(€Fð "€Fˆ;ÑØ—‘“ò "‰ˆˆ1Ø�|‰|˜A˜qÓ!‰ð"à€Kr   c                 óH   — |rt        | «      ‚t        j                  | «       y ©N)r   ÚloggerÚwarning)ÚmsgÚstricts     r   Ú	_complainr(   W   s   € áÜ" 3Ó'Ð'Ü
‡N�N�3Õr   c                   ó<   — e Zd ZdZddefd„Zd„ Zd„ Zedd„«       Z	y)Ú	WatchFilezÂA Debian watch file.

    :ivar entries: list of Watch entries
    :ivar options: optional list of global options, applied to all Watch
        entries
    :ivar version: watch file version
    Nc                 ó>   — || _         |€g }|| _        |€g }|| _        y r#   )ÚversionÚentriesÚoptions)Úselfr-   r.   r,   s       r   Ú__init__zWatchFile.__init__g   s-   € ð
 ˆŒØˆ?ØˆGØˆŒØˆ?ØˆGØˆ�r   c                 ó,   — t        | j                  «      S r#   )Úiterr-   ©r/   s    r   Ú__iter__zWatchFile.__iter__t   s   € ä�D—L‘LÓ!Ð!r   c                 ó”  — d„ }| j                   �|j                  d| j                   z  «       | j                  r$|j                   || j                  «      dz   «       | j                  D ]Ü  }|j                  r$|j                   ||j                  «      dz   «       |j                  |j                  «       |j
                  r|j                  d|j
                  z   «       |j                   r|j                  d|j                   z   «       |j                  r|j                  d|j                  z   «       |j                  d«       ŒÞ y)aO  Write the contents of a watch file to a file-like object.

        Note that this will not preserve the formatting of the original file,
        and thus it is currently not possible to use this function to
        parse and reserialize a file and end up with the same contents.

        :param f: File-like object to write to
        c                 óN   — dj                  | «      }d|v sd|v rd|z   dz   S d|z   S )Nú,ú ú	zopts="ú"úopts=)Újoin)ÚoptsÚss     r   Úserialize_optionsz)WatchFile.dump.<locals>.serialize_options‚   s5   € à—‘˜“ˆAØ�a‰x˜4 1™9Ø !‘| cÑ)Ð)Ø˜Q‘;Ðr   Nzversion=%d
ú
r8   )r,   Úwriter.   r-   ÚurlÚmatching_patternÚscript)r/   Úfr?   Úentrys       r   ÚdumpzWatchFile.dumpx   sò   € ò	ð �<‰<Ð#Ø�G‰G�N T§\¡\Ñ1Ô2Ø�<Š<Ø�G‰GÑ% d§l¡lÓ3°dÑ:Ô;Ø—\‘\ò 
	ˆEØ�}Š}Ø—‘Ñ)¨%¯-©-Ó8¸3Ñ>Ô?Ø�G‰G�E—I‘IÔØ×%Ò%Ø—‘˜˜e×4Ñ4Ñ4Ô5Ø�}Š}Ø—‘˜˜eŸm™mÑ+Ô,Ø�|Š|Ø—‘˜˜eŸl™lÑ*Ô+Ø�G‰G�D�Mñ
	r   c                 óô  — g }g }|D ]Š  }|j                  d«      rŒ|j                  «       sŒ&|j                  d«      j                  d«      r!|j	                  |j                  d«      «       Œg|j	                  |«       |j	                  |«       g }ŒŒ |rt        d|«       |j	                  |«       |sydj                  |j                  d«      «      }	 |j                  d	d
«      \  }}|j                  «       dk7  r
t        «       ‚t        |j                  «       «      }	g }
g }|D �]}  }|	dkD  r|D �cg c]  }|j                  «       ‘Œ }}dj                  |«      j                  «       }|sŒH|j                  d«      rf|d   dk(  r3|j                  dd«      }|dk(  rt        d|z  «      ‚|d| }||d
z   d }n	 |dd j                  dd
«      \  }}|j                  d«      }ng }|rª	 |j                  dd
«      \  }}t        j                  d|«      }|rAt!        |d   «      ft#        |j                  dd
«      «      z   }|dt%        |d   «       d
z
   }nt#        |j                  dd«      «      }|j	                  t'        |g|¢­d|iŽ«       �Œm|
j)                  |«       �Œ€  | ||
|	¬«      S # t        $ r t        «       ‚w xY wc c}w # t        $ r |dd }d}Y �Œw xY w# t        $ r |}d}Y Œõw xY w)a@  Parse from the contents that make up a watch file.

        :param lines: watch file lines to parse
        :return: instance or None if there are no non-comment lines in the file
        :raise MissingVersion: if there is no version number declared
        :raise ValueError: when syntax errors are encountered
        ú#r@   ú\z
\z*watchfile ended with \; skipping last lineNÚ r   ú=é   r,   é   r;   é   r:   é   éÿÿÿÿzNot matching " in %rr7   z/([^/]*\([^/]*\)[^/]*)$é   r=   )r-   r.   r,   )Ú
startswithÚstripÚrstripÚendswithÚappendr(   r<   ÚpopÚsplitÚ
ValueErrorr   ÚintÚlstripÚindexÚreÚfindallÚstrÚtupleÚlenÚWatchÚextend)ÚclsÚlinesr'   Újoined_linesÚ	continuedÚlineÚ	firstlineÚkeyÚvaluer,   Úpersistent_optionsr-   ÚchunkedÚchunkÚoptendÚopts_strr=   rB   ÚmÚpartss                       r   Ú
from_lineszWatchFile.from_lines˜   s  € ð ˆØˆ	Øò 
	ˆDØ�‰˜sÔ#ØØ—:‘:”<ØØ�{‰{˜4Ó ×)Ñ)¨$Ô/Ø× Ñ  §¡¨VÓ!4Õ5à× Ñ  Ô&Ø×#Ñ# IÔ.Ø‘	ð
	ñ äÐCÀVÔLØ×Ñ 	Ô*ÙØØ—G‘G˜L×,Ñ,¨QÓ/Ó0ˆ	ð	#Ø"Ÿ™¨¨aÓ0‰JˆC�ð �9‰9‹;˜)Ò#Ü Ó"Ð"Ü�e—k‘k“mÓ$ˆØÐØˆØ#ó &	0ˆGØ˜Š{ð 8?Ö?¨e˜5Ÿ<™<�>Ð?�Ð?Ø—7‘7˜7Ó#×)Ñ)Ó+ˆDÙØØ�‰˜wÔ'Ø˜‘7˜c’>Ø!ŸZ™Z¨¨QÓ/�FØ ’|Ü(Ð)?À$Ñ)FÓGÐGØ# A f˜~�HØ  q¡ 	˜?‘Dð"Ø+/°°¨8¯>©>¸$ÀÓ+BÑ(˜ 4ð  —~‘~ cÓ*‘à�ÙðØ $§
¡
¨4°Ó 3‘I�C˜ô —J‘JÐ9¸3Ó?�ÙÜ   1¡›Y˜M¬E°$·*±*¸TÀ1Ó2EÓ,FÑF�EØ˜m¤ A a¡D£	˜z¨!™|Ð,‘Cä! $§*¡*¨T°1Ó"5Ó6�EØ—‘œu SÐ<¨5Ò<°tÑ<Ö=à"×)Ñ)¨$Ö/ðM&	0ñN ØÐ%7ÀôJð 	Jøô] ò 	#Ü Ó"Ð"ð	#üò @øô &ò "Ø#'¨¨ 8˜Ø!›ð"ûô "ò Ø�CØ’Dðús6   ÃJ4 Ä5KÆ=KÇ,K'Ê4KËK$Ë#K$Ë'K7Ë6K7)F)
r   r   r   r   ÚDEFAULT_VERSIONr0   r4   rG   Úclassmethodrt   r   r   r   r*   r*   ^   s:   „ ñð ØØ(óò"òð@ òNJó ñNJr   r*   c                   ó,   — e Zd ZdZ	 	 	 	 dd„Zd„ Zd„ Zy)rc   aO  Watch line entry.

    This will contain the attributes documented in uscan(1):

    :ivar url: The URL (possibly including the filename regex)
    :ivar matching_pattern: a filename regex, optional
    :ivar version: version policy, optional
    :ivar script: script to run, optional
    :ivar opts: a list of options, as strings
    Nc                 óR   — || _         || _        || _        || _        |€g }|| _        y r#   )rB   rC   r,   rD   r.   )r/   rB   rC   r,   rD   r=   s         r   r0   zWatch.__init__ö   s2   € ð ˆŒØ 0ˆÔØˆŒØˆŒØˆ<ØˆDØˆ�r   c                 ó¶   — | j                   j                  ›d| j                  ›d| j                  ›d| j                  ›d| j
                  ›d| j                  ›d�S )Nú(z, matching_pattern=z
, version=z	, script=z, opts=ú))Ú	__class__r   rB   rC   r,   rD   r.   r3   s    r   Ú__repr__zWatch.__repr__  s<   € ð —‘×'Ó'¨¯«°4×3HÓ3HØ—“˜dŸk›k¨4¯<«<ð9ð	:r   c                 ó.  — t        |t        «      sy|j                  | j                  k(  xrj |j                  | j                  k(  xrO |j                  | j                  k(  xr4 |j
                  | j
                  k(  xr |j                  | j                  k(  S )NF)Ú
isinstancerc   rB   rC   r,   rD   r.   )r/   Úothers     r   Ú__eq__zWatch.__eq__  s€   € ä˜%¤Ô'ØØ—	‘	˜TŸX™XÑ%ò .Ø×&Ñ&¨$×*?Ñ*?Ñ?ò.à—‘ §¡Ñ-ò.ð —‘ §¡Ñ+ò.ð —‘ §¡Ñ-ð		/r   )NNNN)r   r   r   r   r0   r}   r�   r   r   r   rc   rc   ê   s$   „ ñ	ð #'ØØØóò:ó/r   rc   )r   Úloggingr^   Útypingr   r   r   r   r   r   r	   ÚImportErrorru   r   Ú	getLoggerr$   Ú	Exceptionr   rZ   r   r!   r(   Úobjectr*   rc   r   r   r   ú<module>rˆ      s¯   ðñ$ .ã Û 	ð	÷
÷ 
ñ 
ð €ð
 5ð Kð	&ð :ñ€ð  
ˆ×	Ñ	˜>Ó	*€ô(�Yô (ô˜:ô ò
ò"ôIJ�ô IJôX*/ˆFõ */øðQ ò 	áð	ús   ŒA, Á,A4Á3A4