ó
    dÝg/d  ã                   óZ  • S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKJr  S SKJr  S r " S S5      r " S S5      r " S	 S
5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      rS r " S S5      r " S S\5      rg)é    N)ÚALCLog)Ú_c                 óR   • SSSSSS.nUR                  U R                  5       S5      $ )Né   é   é   é   )ÚcriticalÚ	emergencyÚhighÚmediumÚlowéc   )ÚgetÚlower)ÚuÚurgency_maps     Ú=/usr/lib/python3/dist-packages/apt_listchanges/DebianFiles.pyÚ_numeric_urgencyr   -   s1   € Ø!"Ø!"Ø!"Ø!"Ø!"ñ	$€Kð �?‰?˜1Ÿ7™7›9 bÓ)Ð)ó    c                   ób   • \ rS rSr/ SQrS r\S 5       r\S 5       r\S 5       r	\S 5       r
Srg	)
ÚControlStanzaé8   )ÚPackageÚSourceÚVersionÚArchitectureÚStatusc           	      óN  • S nUR                  S5       H|  nU(       d    OtUS   S;   a&  U(       a  [        X[        X5      S-   U-   5        M9  M;  UR                  SS5      u  p$X R                  ;   a  [        XUR	                  5       5        Mz  S nM~     [        U SS 5      U l        g )NÚ
r   )Ú Ú	Ú:r   r   )ÚsplitÚsetattrÚgetattrÚfields_to_readÚlstripÚarch)ÚselfÚsÚfieldÚlineÚvalues        r   Ú__init__ÚControlStanza.__init__;   s“   € Øˆà—G‘G˜D–MˆDÞÙØ�A‰w˜+Ó%ÞÜ˜D¬°Ó)=ÀÑ)DÀtÑ)KÖLñ ð  $Ÿz™z¨#¨qÓ1‘�Ø×/Ñ/Ó/Ü˜D¨¯©«Ö8à ’Eñ "ô ˜D .°$Ó7ˆ�	r   c                 óT   • [        U SU R                  5      R                  S5      S   $ )Nr   r!   r   )r&   r   r$   ©r*   s    r   ÚsourceÚControlStanza.sourceM   s%   € ä�t˜X t§|¡|Ó4×:Ñ:¸3Ó?ÀÑBÐBr   c                 ó  • [        U SS5      nU(       d  U R                  $ UR                  S5      n[        U5      S:  a  U R                  $ US   nUR	                  S5      (       a  UR                  S5      (       d  g USS $ )	Nr   Ú r!   r   r   Ú(Ú)éÿÿÿÿ)r&   Úversionr$   ÚlenÚ
startswithÚendswith)r*   r3   ÚfieldsÚversion_exprs       r   Úsource_versionÚControlStanza.source_versionQ   sz   € ä˜˜x¨Ó,ˆÞØ—<‘<ÐØ—‘˜cÓ"ˆÜˆv‹;˜‹?Ø—<‘<ÐØ˜a‘yˆØ×'Ñ'¨×,Ñ,°×1FÑ1FÀs×1KÑ1KØØ˜A˜bÐ!Ð!r   c                 ój   • [        U S5      =(       a!    U R                  R                  S5      S   S:H  $ )Nr   r!   r   Ú	installed)Úhasattrr   r$   r2   s    r   rC   ÚControlStanza.installed^   s2   € ä�t˜XÓ&÷ 5Ø�K‰K×Ñ˜cÓ" 1Ñ%¨Ñ4ð	5r   c                 ó   • U R                   $ ©N)r   r2   s    r   r:   ÚControlStanza.versionc   ó   € à�|‰|Ðr   )r)   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r'   r/   Úpropertyr3   r@   rC   r:   Ú__static_attributes__© r   r   r   r   8   s^   † ÚO€Nò8ð$ ñCó ðCð ñ
"ó ð
"ð ñ5ó ð5ð ñó ór   r   c                   ó2   • \ rS rSrS rS rS rS rS rSr	g)	ÚControlParseréh   c                 ó    • / U l         0 U l        g rG   )ÚstanzasÚindexr2   s    r   r/   ÚControlParser.__init__i   s   € ØˆŒØˆ�
r   c                 óº   • 0 U R                   U'   U R                   H<  n[        X!5      nU R                   U   R                  U/ 5      R	                  U5        M>     g rG   )rV   rU   r&   Ú
setdefaultÚappend)r*   r,   ÚstanzaÚkeys       r   Ú	makeindexÚControlParser.makeindexm   sL   € Øˆ�
‰
�5ÑØ—l”lˆFÜ˜&Ó(ˆCØ�J‰J�uÑ×(Ñ(¨¨bÓ1×8Ñ8¸Ö@ò #r   c           	      ón  •  [        USSS9 nU =R                  UR                  5       R                  S5       Vs/ s H  o3(       d  M  [	        U5      PM     sn-  sl        S S S 5        g s  snf ! , (       d  f       g = f! [
         a)  n[        [        S5      U[        U5      S.-  5      UeS nAff = f)Núutf-8Úreplace)ÚencodingÚerrorsú

ú'Error processing '%(what)s': %(errmsg)s©ÚwhatÚerrmsg)	ÚopenrU   Úreadr$   r   Ú	ExceptionÚRuntimeErrorr   Ústr)r*   ÚfileÚfÚxÚexs        r   ÚreadfileÚControlParser.readfiles   s°   € ð	JÜ�d W°YÒ?À1Ø—’Ø./¯f©f«h¯n©n¸VÔ.Dó!KÚ.D¨ËÓ$”M !Ö$Ñ.Dñ!Kñ K•÷ @Ð?ùò!K÷ @Õ?ûô ó 	JÜœqÐ!JÓKØ(,¼¸B»Ñ@ñ Aó BØGIðJûð	JúsK   ‚B �.A0»
A+
Á	A+
Á
A0Á"B Á+A0Á0
A>Á:B Á>B Â
B4Â$B/Â/B4c                 ó2  •  SSU/[         R                  -   n[        R                  " U5      nU R                  R                  [        UR                  SS5      5      5        g ! [         a)  n[        [        S5      U[        U5      S.-  5      UeS nAff = f)Nzdpkg-debz-fr`   ra   re   rf   )r   r'   Ú
subprocessÚcheck_outputrU   rZ   Údecoderk   rl   r   rm   )r*   ÚdebÚcommandÚoutputrq   s        r   ÚreaddebÚControlParser.readdeb|   s“   € ð	IØ! 4¨Ð-´×0LÑ0LÑLˆGÜ×,Ò,¨WÓ5ˆFØ�L‰L×ÑÜ˜fŸm™m¨G°YÓ?Ó@õBøäó 	IÜœqÐ!JÓKØ(+´s¸2³wÑ?ñ @ó AØFHðIûð	Iús   ‚A A# Á#
BÁ-$BÂBc                 ó  • XR                   ;   a%  X R                   U   ;   a  U R                   U   U   $ g U R                   Vs/ s H(  n[        X15      (       d  M  [        X15      U:X  d  M&  UPM*     nnU(       a  U$ S $ s  snf rG   )rV   rU   rD   r&   )r*   r,   r.   r[   Úfounds        r   ÚfindÚControlParser.find†   s€   € Ø—J‘JÓØŸ
™
 5Ñ)Ó)Ø—z‘z %Ñ(¨Ñ/Ð/ØØ&*§l¢ló P¢l˜FÜ˜F×*ó Ü/6°vÓ/EÈÑ/N÷ ¡lˆð PæˆuÐ' 4Ð'ùòPs   ÁA?ÁA?Á,A?)rV   rU   N)
rJ   rK   rL   rM   r/   r]   rr   r{   r   rO   rP   r   r   rR   rR   h   s   † òòAòJòIõ(r   rR   c                   óÒ   • \ rS rSr SS jrS rS r\S 5       r\S 5       r	\S 5       r
\S 5       r\S	 5       r\S
 5       r\S 5       r\S 5       r\S 5       rS r\rS rS rSrg)ÚChangelogEntryé�   c                 ó¦   • UR                  5       U l        X l        X0l        X@l        XPl        [        U5      U l        SU l        SU l        Xpl	        g )Nr6   )
ÚstripÚ_headerÚ_pathÚ_packageÚ_sourceÚ_versionr   Ú_trailerÚ_contentÚ_binnmu)r*   ÚheaderÚpathÚpackager3   r:   ÚurgencyÚbinnmus           r   r/   ÚChangelogEntry.__init__‘   sC   € à—|‘|“~ˆŒØŒ
ØŒØŒØŒÜ 0°Ó 9ˆÔØˆŒØˆŒØ�r   c                 ó.   • UR                  5       U l        g rG   )Úrstripr‹   )r*   Útrailers     r   Úset_trailerÚChangelogEntry.set_trailer�   s   € ØŸ™Ó(ˆ�r   c                 óŠ   • U R                   (       a  U =R                   U-  sl         g UR                  5       (       d  Xl         g g rG   )rŒ   Úisspace)r*   Úcontents     r   Úadd_contentÚChangelogEntry.add_content    s.   € Ø�=�=Ø�MŠM˜WÑ$ŽMØ—‘×"Ñ"Ø#�Mð #r   c                 ó   • U R                   $ rG   )r‡   r2   s    r   r�   ÚChangelogEntry.path¦   s   € à�z‰zÐr   c                 ó   • U R                   $ rG   )rˆ   r2   s    r   r�   ÚChangelogEntry.packageª   ó   € à�}‰}Ðr   c                 ó   • U R                   $ rG   )r‰   r2   s    r   r3   ÚChangelogEntry.source®   rI   r   c                 ó   • U R                   $ rG   )rŠ   r2   s    r   r:   ÚChangelogEntry.version²   r¢   r   c                 ó   • U R                   $ rG   )r   r2   s    r   Únumeric_urgencyÚChangelogEntry.numeric_urgency¶   s   € à×$Ñ$Ð$r   c                 ó   • U R                   $ rG   )r�   r2   s    r   r’   ÚChangelogEntry.binnmuº   rI   r   c                 ó   • U R                   $ rG   )r†   r2   s    r   rŽ   ÚChangelogEntry.header¾   rI   r   c                 ó   • U R                   $ rG   )r‹   r2   s    r   r–   ÚChangelogEntry.trailerÂ   r¢   r   c                 ó6   • U R                   R                  5       $ rG   )rŒ   r•   r2   s    r   r›   ÚChangelogEntry.contentÆ   s   € à�}‰}×#Ñ#Ó%Ð%r   c                 óÂ   • U R                   S-   U R                  -   S-   U R                  -   nU R                   (       a  U R                  (       a  U$ UR                  5       $ )Nrd   )rŽ   r›   r–   r…   )r*   Úresults     r   Ú__str__ÚChangelogEntry.__str__Ê   sE   € Ø—‘˜vÑ%¨¯©Ñ4°vÑ=ÀÇÁÑLˆØ�;�;˜4Ÿ<Ÿ<ØˆMØ�|‰|‹~Ðr   c                 óp   • [        U R                  U R                  U R                  U R                  45      $ rG   )Úhashr†   r›   r‹   r�   r2   s    r   Ú__hash__ÚChangelogEntry.__hash__Ñ   s&   € Ü�T—\‘\ 4§<¡<°·±ÀÇÁÐMÓNÐNr   c                 óf   • U R                   UR                   :w  a  g[        U 5      [        U5      :H  $ ©NF)Ú	__class__r·   ©r*   Úothers     r   Ú__eq__ÚChangelogEntry.__eq__Ô   s(   € Ø�>‰>˜UŸ_™_Ó,ØÜ�D‹zœT %›[Ñ(Ð(r   )	r�   rŒ   r†   r   rˆ   r‡   r‰   r‹   rŠ   N©F)rJ   rK   rL   rM   r/   r—   rœ   rN   r�   r�   r3   r:   r¨   r’   rŽ   r–   r›   r´   Ú__repr__r¸   r¿   rO   rP   r   r   r‚   r‚   �   sß   † àô
ò)ò$ð ñó ðð ñó ðð ñó ðð ñó ðð ñ%ó ð%ð ñó ðð ñó ðð ñó ðð ñ&ó ð&òð
 €HòOõ)r   r‚   c                   ó    • \ rS rSrS rS rSrg)ÚEntrySorteréÜ   c                 ól  ^• [        S U 5       5      nU V^s0 s H  mT[        U4S jU 5       5      _M     snU l        [        [        S U 5       5      [        R
                  " [        R                  5      SS9n[        [        U5      5       Vs0 s H  oTU   U_M
     snU l
        g s  snf s  snf )Nc              3   ó8   #   • U  H  oR                   v •  M     g 7frG   )r�   ©Ú.0Úentrys     r   Ú	<genexpr>Ú'EntrySorter.__init__.<locals>.<genexpr>Þ   s   é € Ð;²7¨%Ÿž²7ùó   ‚c              3   ó`   >#   • U  H#  nUR                   T:X  d  M  UR                  v •  M%     g 7frG   )r�   r¨   )rÉ   rÊ   r�   s     €r   rË   rÌ   à   s*   øé € ð 7ºW°EØ"Ÿ]™]¨gÑ5ó 0˜%×/Ö/ºWùs   ƒ.›.c              3   ó8   #   • U  H  oR                   v •  M     g 7frG   )r:   rÈ   s     r   rË   rÌ   ç   s   é € ÐBº'°Ÿ}ž}º'ùrÍ   T©r\   Úreverse)ÚsetÚminÚpackage_urgenciesÚsortedÚ	functoolsÚ
cmp_to_keyÚapt_pkgÚversion_compareÚranger;   Úversion_keys)r*   ÚentriesÚpackagesr�   ÚversionsÚis      `  r   r/   ÚEntrySorter.__init__Ý   s´   ø€ ÜÑ;±7Ó;Ó<ˆñ $ô"
ò $�ð ”Sô 7¹Wó 7ó 8ò 8á#ñ"
ˆÔô œ#ÑB¹'ÓBÓCÜ'×2Ò2´7×3JÑ3JÓKØ"&ñ(ˆô 6;¼3¸x»=Ô5IÓJÒ5I° a™[¨!š^Ñ5IÑJˆÕùò"
ùò Ks   ™ B,ÂB1c                 ó|   • U R                   UR                     UR                  U R                  UR                     4$ rG   )rÔ   r�   rÛ   r:   ©r*   rÊ   s     r   Úkey_funcÚEntrySorter.key_funcì   s6   € Ø×&Ñ& u§}¡}Ñ5°u·}±}Ø×!Ñ! %§-¡-Ñ0ð2ð 	2r   )rÔ   rÛ   N)rJ   rK   rL   rM   r/   rã   rO   rP   r   r   rÄ   rÄ   Ü   s   † òKõ2r   rÄ   c                   óh   • \ rS rSrS rS rS rS r\S 5       r	\S 5       r
\S 5       rS	 rS
 rSrg)ÚChangeséñ   c                 ó<   • / U l         / U l        SU l        SU l        g ©NTF)Ú_entriesÚ_binnmusrÕ   Úreversedr2   s    r   r/   ÚChanges.__init__ò   s   € ØˆŒØˆŒØˆŒØˆ�r   c                 óÐ  ^• Ub%  U R                   UR                   :w  a  [        S5      e[        5       mTR                  R	                  U R                  5        TR
                  R	                  U R
                  5        Ub^  TR                  R	                  U4S jUR                   5       5        TR
                  R	                  U4S jUR
                   5       5        STl        T$ )Nú'Can only add Changes to another Changesc              3   óL   >#   • U  H  nUTR                   ;  d  M  Uv •  M     g 7frG   ©rê   )rÉ   ÚeÚaddeds     €r   rË   Ú"Changes.__add__.<locals>.<genexpr>ÿ   ó$   øé € ð ">ª^¨Ø%&¨e¯n©nÑ%<÷ #$¡!ª^ùó   ƒ$›	$c              3   óL   >#   • U  H  nUTR                   ;  d  M  Uv •  M     g 7frG   ©rë   )rÉ   Úbró   s     €r   rË   rô     rõ   rö   F)r¼   Ú
ValueErrorræ   rê   Úextendrë   rÕ   )r*   r¾   ró   s     @r   Ú__add__ÚChanges.__add__ø   s­   ø€ ØÑ §¡°5·?±?Ó!BÜÐFÓGÐGÜ“	ˆØ�‰×Ñ˜dŸm™mÔ,Ø�‰×Ñ˜dŸm™mÔ,ØÑØ�N‰N×!Ñ!ô ">¨U¯^ª^ó ">ô >à�N‰N×!Ñ!ô ">¨U¯^ª^ó ">ô >àˆŒØˆr   c                 ó&  ^ • Uc  T $ T R                   UR                   :w  a  [        S5      eT R                  R                  U 4S jUR                   5       5        T R                  R                  U 4S jUR                   5       5        ST l        T $ )Nrï   c              3   óL   >#   • U  H  nUTR                   ;  d  M  Uv •  M     g 7frG   rñ   )rÉ   rò   r*   s     €r   rË   Ú#Changes.__iadd__.<locals>.<genexpr>  ó$   øé € ð 8ª 1Ø !¨¯©Ñ 6÷ ™Qªùrö   c              3   óL   >#   • U  H  nUTR                   ;  d  M  Uv •  M     g 7frG   rø   )rÉ   rù   r*   s     €r   rË   r     r  rö   F)r¼   rú   rê   rû   rë   rÕ   r½   s   ` r   Ú__iadd__ÚChanges.__iadd__  sy   ø€ Ø‰=ØˆKØ�>‰>˜UŸ_™_Ó,ÜÐFÓGÐGØ�‰×Ñô 8¨¯ªó 8ô 	8à�‰×Ñô 8¨¯ªó 8ô 	8àˆŒØˆr   c                 ó:  • U R                   (       a  g U R                  R                  [        U R                  5      R                  U R
                  S9  U R                  R                  [        U R                  5      R                  U R
                  S9  SU l         g )NrÐ   T)rÕ   rê   ÚsortrÄ   rã   rì   rë   r2   s    r   r  ÚChanges.sort  sq   € Ø�;�;ØØ�‰×Ñœ{¨4¯=©=Ó9×BÑBØ#'§=¡=ð 	ñ 	2à�‰×Ñœ{¨4¯=©=Ó9×BÑBØ#'§=¡=ð 	ñ 	2àˆ�r   c                 ó:   • U R                  5         U R                  $ rG   )r  rê   r2   s    r   rÜ   ÚChanges.entries  ó   € à�	‰	ŒØ�}‰}Ðr   c                 ó:   • U R                  5         U R                  $ rG   )r  rë   r2   s    r   ÚbinnmusÚChanges.binnmus   r
  r   c                 ó~   • U R                   (       a,  SR                  [        [        U R                   5      5      S-   $ g)Nrd   r    r6   )rÜ   ÚjoinÚmaprm   r2   s    r   ÚchangesÚChanges.changes%  s+   € à�<�<Ø—;‘;œs¤3¨¯©Ó5Ó6¸Ñ=Ð=Ør   c                 ó¢   • SU l         UR                  (       a  U R                  R                  U5        g U R                  R                  U5        g r»   )rÕ   r’   rë   rZ   rê   râ   s     r   Ú
save_entryÚChanges.save_entry+  s4   € ØˆŒØ�<�<Ø�M‰M× Ñ  Õ'à�M‰M× Ñ  Õ'r   c                 ó    • SU l         SU l        g ré   )rì   rÕ   r2   s    r   rÑ   ÚChanges.reverse2  s   € ØˆŒØˆ�r   )rë   rê   rì   rÕ   N)rJ   rK   rL   rM   r/   rü   r  r  rN   rÜ   r  r  r  rÑ   rO   rP   r   r   ræ   ræ   ñ   s\   † òòò
òð ñó ðð ñó ðð ñó ðò
(õr   ræ   c                   ó,   • \ rS rSrS rS rS rS rSrg)ÚNullFiltereri7  c                 ó   • g rG   rP   r2   s    r   r/   ÚNullFilterer.__init__8  ó   € Ør   c                 ó   • g rG   rP   )r*   Ú_pkgÚ
_installeds      r   ÚresetÚNullFilterer.reset;  r  r   c                 ó   • gr»   rP   ©r*   Ú_entrys     r   ÚstopÚNullFilterer.stop>  ó   € Ør   c                 ó   • gr»   rP   r#  s     r   ÚfilterÚNullFilterer.filterA  r'  r   rP   N)	rJ   rK   rL   rM   r/   r   r%  r)  rO   rP   r   r   r  r  7  s   † òòòõr   r  c                   óÔ   • \ rS rSr\R
                  " S5      r\R
                  " S5      r\R
                  " S\R                  5      r	\R
                  " S5      r
SrSS jrS	 rS
 rSrg)ÚChangelogParseriE  zC^(?P<package>\S+) \((?P<version>.*)\) .*;.*urgency=(?P<urgency>\w+)zT(^\S+ \(?\d.*\)|Old Changelog:|Changes|ChangeLog begins|Mon|Tue|Wed|Thu|Fri|Sat|Sun)z(;;\s*)?Local\s+variables.*z^\s--\s.*<.*@.*>.*$zbinary-only=yesNc                 óî   • Xl         UR                  U l        UR                  U l        X@l        [        5       U l        U=(       d    UR                  =(       d
    [        5       U l
        SU l        X l        g)zTSee comment above Filterer class in apt_listchanges.py for
documentation of filtererFN)rˆ   ÚbinaryÚ_binaryr3   r‰   r  ræ   Ú_changesÚfiltererr  Ú	_filtererÚ_stoppedr�   )r*   r�   r�   r1  rC   s        r   r/   ÚChangelogParser.__init__P  sR   € ð  ŒØ—~‘~ˆŒØ—~‘~ˆŒØ#ŒÜ›	ˆŒØ!×G W×%5Ñ%5×G¼»ˆŒØˆŒØ�	r   c                 ó  • SnSnSnU R                   R                  U R                  U R                  5        UR	                  5        GH  nUR                  SS5      nUR                  S5      (       a  M.  Ub†  UR                  S5      (       d  US:X  aj  U(       dP  U R                  R                  U5      (       a0  UR                  U5        U R                  U5      nSnU(       d    GOrM¤  UR                  U5        M·  U(       d  U R                  R                  U5      OSnU(       az  SnUR                  S	5      nU R                  U5      (       d  Sn  GO[        XPR                  U R                   U R"                  X‡R                  S
5      U R$                  U;   5      nGM\  U R&                  R                  U5      (       aV  U(       d    O�SnU R                  U5      (       d  Sn  Os[        XPR                  U R                   U R"                  SSS5      nGMÒ  U R(                  R                  U5      (       a    O U(       d  GMþ  UR                  U5        GM     U R                  U5        U(       a  U R*                  $ S$ )z7Parse changelog or news from the given file descriptor.FNr`   ra   Ú#r!   r    Tr:   r‘   r6   r   )r2  r   rˆ   r  Ú	readlinesrw   r<   Ú_changelog_trailerÚmatchr—   Ú_save_entryrœ   Ú_changelog_headerÚgroupr‚   r�   r/  r‰   Ú_binnmu_markerÚ_changelog_header_ancientÚ_changelog_header_emacsr0  )	r*   ÚfdÚancientrÊ   Úis_debian_changelogr-   Úgo_onr9  r:   s	            r   ÚparseÚChangelogParser.parse\  s  € àˆØˆØ#Ðà�‰×Ñ˜TŸ]™]¨D¯O©OÔ<Ø—L‘L—NˆDØ—;‘;˜w¨	Ó2ˆDà�‰˜s×#Ñ#ÙàÑ  d§o¡o°c×&:Ñ&:¸dÀd»lÞ 4×#:Ñ#:×#@Ñ#@À×#FÑ#FØ×%Ñ% dÔ+Ø ×,Ñ,¨UÓ3�EØ �EÞ Úñ !ð ×%Ñ% dÖ+ö %ð ×.Ñ.×4Ñ4°TÔ:Ø*.ð æØ*.Ð'Ø#Ÿk™k¨)Ó4�GØ×+Ñ+¨E×2Ñ2Ø $˜ÚÜ*ØŸi™i¨¯©°t·|±|Ø§¡¨YÓ!7Ø×+Ñ+¨tÑ3ó5“Eð
 ×3Ñ3×9Ñ9¸$×?Ñ?Þ.áØ"�GØ×+Ñ+¨E×2Ñ2Ø $˜ÙÜ*¨4·±¸D¿L¹LØ+/¯<©<¸¸UÀEóK“Eð ×1Ñ1×7Ñ7¸×=Ñ=Ùç‘UØ×%Ñ% dÔ+Úñ[ #ðb 	×Ñ˜Ôæ 3ˆt�}‰}Ð=¸Ð=r   c                 óü   • U R                   (       a  gU R                  R                  U5      (       a  SU l         gU(       a;  U R                  R                  U5      (       d  U R                  R                  U5        g)NFT)r3  r2  r%  r)  r0  r  râ   s     r   r:  ÚChangelogParser._save_entry˜  sY   € Ø�=�=ð Ø�>‰>×Ñ˜u×%Ñ%Ø ˆDŒMØÞ˜Ÿ™×.Ñ.¨u×5Ñ5Ø�M‰M×$Ñ$ UÔ+Ør   )r/  r0  r2  r  rˆ   r‰   r3  r�   ©NN)rJ   rK   rL   rM   ÚreÚcompiler;  r>  Ú
IGNORECASEr?  r8  r=  r/   rD  r:  rO   rP   r   r   r,  r,  E  si   † ØŸ
š
ØNóPÐà "§
¢
ð	(ó!)Ðð !ŸjšjÐ)GØ)+¯©ó8ÐàŸšÐ$:Ó;ÐØ&€Nô
ò:>õxr   r,  c                   ó<   • \ rS rSrS	S jrS r S
S jrS rS rSr	g)ÚChangelogsReaderi¦  Nc                 óì   • Xl         UR                  U l        UR                  U l        X l        UR                  S5      (       a  [        U5      U l        O[        U5      S-   U l        X0l	        X@l
        g )NÚ/r   )rˆ   r.  r/  r3   r‰   Ú_rootdirr=   r;   Ú
prefix_lenr2  Ú_installed_package)r*   r�   Úrootdirr1  rC   s        r   r/   ÚChangelogsReader.__init__§  sY   € ØŒØ—~‘~ˆŒØ—~‘~ˆŒØŒØ×Ñ˜C× Ñ Ü! '›lˆD�Oä! '›l¨QÑ.ˆDŒOØ!ŒØ"+Õr   c                 ó^   • U(       d  g U H  nU R                  X25      nU(       d  M  Us  $    g rG   )Ú_read_changelog)r*   Ú	filenamesÚversion_filteringÚfilenamer³   s        r   Ú_find_firstÚChangelogsReader._find_first³  s1   € ÞØÛ!ˆHØ×)Ñ)¨(ÓFˆFßˆvØ’ñ "ð r   c                 ó`   • U R                  X#5      nU R                  X5      nU(       a  XE-   $ U$ rG   )rZ  )r*   rW  Úbinnmus_filenamesrX  r  rÜ   s         r   Úread_changelogsÚ ChangelogsReader.read_changelogs¼  s3   € à×"Ñ"Ð#4ÓHˆØ×"Ñ" 9Ó@ˆæ$+ˆwÑ Ð8°Ð8r   c                 ó”  • U R                  [        R                  R                  U R                  U5      5      u  p4U(       d  gX0R
                  S  n[        R                  " SU S35        U   [        U R                  X0R                  U(       a  U R                  OS S9R                  U5      sS S S 5        $ ! , (       d  f       g = f)NFzFound z in _read_changelog©rC   )Ú_open_changelog_fileÚosr�   r  rP  rQ  r   Údebugr,  rˆ   r2  rR  rD  )r*   ÚfileglobrX  rY  r@  s        r   rV  Ú ChangelogsReader._read_changelogÃ  s“   € Ø×0Ñ0Ü�G‰G�L‰L˜Ÿ™¨Ó1ó3‰ˆæØØŸO™OÐ,Ð-ˆÜ�Š�v˜h˜ZÐ':Ð;Ô<âÜ"Ø—‘˜x¯©æ$ð ×1Ò1Ø*.ñ0÷ 16±°b³	÷	 �R�Rús   Á.AB9Â9
Cc                 óà  • [         R                   " U5      nU H‹  n [        R                  R                  U5      (       a#  [        R
                  " [        S5      U-  5        O@UR                  S5      (       a  U[        R                  " U5      4s  $ U[        US5      4s  $   g   g! [         a:  nUR                  [        R                  [        R                  4;  a  e  S nAMÏ  S nAff = f)Nz(Ignoring `%s' (seems to be a directory!)z.gzÚrbrH  )Úglobrc  r�   Úisdirr   Úerrorr   r=   ÚgzipÚGzipFileri   ÚIOErrorÚerrnoÚENOENTÚELOOP)r*   Úfilename_globrW  rY  rò   s        r   rb  Ú%ChangelogsReader._open_changelog_fileÑ  sÈ   € Ü—I’I˜mÓ,ˆ	ã!ˆHðÜ—7‘7—=‘= ×*Ñ*Ü—L’LÜÐDÓEØ ñ!õ"ð ×&Ñ& u×-Ñ-Ø#¤T§]¢]°8Ó%<Ð<Ò<à#¤T¨(°DÓ%9Ð9Ò9Øð ñ "ð øô ó Ø—7‘7¤5§<¡<´·±Ð"=Ó=Øõ >ûðús   �A4B)ÂB)Â)
C-Â3/C(Ã(C-)r/  r2  rR  rˆ   rP  r‰   rQ  rG   rÁ   )
rJ   rK   rL   rM   r/   rZ  r^  rV  rb  rO   rP   r   r   rM  rM  ¦  s    † ô
,òð +0ô9ò:õr   rM  c                 ó>   • SS/nU Vs/ s H  o"U -  PM	     sn$ s  snf )Nzusr/share/doc/*/%s.gzzusr/share/doc/*/%srP   )rY  Úformatsrp   s      r   Ú_changelog_variationsrv  å  s)   € Ø&Ø#ð%€Gá")Ó*¢'˜Q�ŒL¡'Ñ*Ð*ùÒ*s   ‰c                   ó¬   • \ rS rSr\" S5      r\" S5      \" S5      -   rS rS r\r	\
S 5       rSS	 jr\S
 5       rSS jrS rSS jrS rS rS rSrg)r   ië  zNEWS.Debianzchangelog.DebianÚ	changelogc                 ó.  • Xl         X l        [        5       nUR                  U R                   5        UR                  S   nUR
                  U l        UR                  U l        UR                  U l        UR                  U l	        UR                  U l        g )Nr   )r�   r1  rR   r{   rU   r   r.  r:   r3   r@   r   r)   )r*   r�   r1  ÚparserÚpkgdatas        r   r/   ÚPackage.__init__ñ  sm   € ØŒ	Ø Œä“ˆØ�‰�t—y‘yÔ!Ø—.‘. Ñ#ˆà—o‘oˆŒØ—‘ˆŒØ—n‘nˆŒØ%×4Ñ4ˆÔØ×(Ñ(ˆ�	r   c                 óP   • SU R                   R                   SU R                   S3$ ©NÚ<z object for Ú>)r¼   rL   r�   r2   s    r   r´   ÚPackage.__str__ÿ  s&   € Ø�4—>‘>×.Ñ.Ð/¨|¸D¿I¹I¸;ÀaÐHÐHr   c                 ó2   • [        SU R                  -   5      $ )Nzchangelog.Debian.)rv  r)   r2   s    r   Úbinnmu_filenamesÚPackage.binnmu_filenames  s   € ä$Ð%8¸4¿9¹9Ñ%DÓEÐEr   Nc                 óV  • [         R                  " [        S5      SU R                  0-  5        / n/ n/ nUS;   a  U R                  nUS;   a  U R
                  nU R                  nXE-   U-   n[         R                  " SU 35        U R                  U5      n [        XU=(       d    U R                  US9n	U(       a  U	R                  U R                  S5      n
OSn
U(       a  U	R                  XVSS	9nOSn[        R                  " US
5        X«4$ ! [        R                  " US
5        f = f)a  Extract changelog and binnmu entries, news or both from the package.

Unpacks changelog or news files from the binary package, and parses
them.
If filterer is specified, it overrides the one specified on object
creation.
Returns ChangelogParser object or None.
z#Extracting changes from %(debfile)sÚdebfile©ÚbothÚnews©rˆ  Ú
changelogsz
Examining ra  NT©rX  r   )r   rd  r   r�   Únews_filenamesÚchangelog_filenamesrƒ  Ú_extract_contentsrM  r1  r^  ÚshutilÚrmtree)r*   Úwhichr1  rC   r�  rŽ  rƒ  rW  ÚtempdirÚreaderr‰  rx  s               r   Úextract_changesÚPackage.extract_changes  s1  € ô 	�Š”QÐ<Ó=Ø §¡Ð+ñ,ô 	-àˆØ ÐØÐØÐ$Ó$Ø!×0Ñ0ˆNØÐ*Ó*Ø"&×":Ñ":ÐØ#×4Ñ4Ðà"Ñ8Ð;KÑKˆ	Ü�Š�z ) Ð-Ô.à×(Ñ(¨Ó3ˆð	&Ü% d°X×5NÀÇÁØ09ñ;ˆFö Ø×-Ñ-¨d×.AÑ.AÀ4ÓH‘à�Þ"Ø"×2Ñ2Ø'Ø&*ð 3ð ,‘	ð !�	ô �MŠM˜' 1Ô%àÐ Ð øô �MŠM˜' 1Õ%ús   ÂAD ÄD(c                 ón   ^• U  V^s/ s H!  m[        U4S jU 5       5      (       d  M  TPM#     sn$ s  snf )Nc              3   óR   >#   • U  H  n[         R                   " TU5      v •  M     g 7frG   )Úfnmatch)rÉ   Úpro   s     €r   rË   Ú+Package.fn_pattern_match.<locals>.<genexpr>6  s   øé € Ð?²h°”w—’ q¨!×,Ð,²hùs   ƒ$')Úany)rW  Úpatternsro   s     `r   Úfn_pattern_matchÚPackage.fn_pattern_match3  s8   ø€ á$ô Aš9�aÜÔ?±hÓ?×?÷ ™9ñ Að 	Aùò As   ‡2©2c                 óž  • [         R                  " [        S5      SU R                  0-  5        / n/ n/ nUS;   a  U R                  nUS;   a  U R
                  nU R                  nU R                  X4-   U-   5      nU R                  Xc5      nU R                  Xd5      nU R                  Xe5      n[        U SU=(       d    U R                  5      nU(       a  UR                  US5      nOSnU(       a  UR                  XE5      n	OSn	U(       a  UR                  (       a  UOSU	(       a%  U	R                  (       d  U	R                  (       a  U	4$ S4$ )zÃLike extract_changes but reads already installed changelog files
No version filtering because that requires the version number we're
parsing for to be different from the installed version number.z,Extracting installed changes for %(package)sr�   r‡  rŠ  rO  N)r   rd  r   r.  r�  rŽ  rƒ  Ú _extract_filenames_via_installedrž  rM  r1  r^  rÜ   r  )
r*   r’  r1  Ú
news_filesÚchangelog_filesÚbinnmu_filesÚpackage_filesr”  r‰  rx  s
             r   Úextract_changes_via_installedÚ%Package.extract_changes_via_installed8  sE  € ô 	�Š”QÐEÓFØ §¡Ð-ñ.ô 	/àˆ
ØˆØˆØÐ$Ó$Ø×,Ñ,ˆJØÐ*Ó*Ø"×6Ñ6ˆOØ×0Ñ0ˆLØ×=Ñ=ØÑ(¨<Ñ7ó9ˆà×*Ñ*¨=ÓEˆ
Ø×/Ñ/°ÓOˆØ×,Ñ,¨]ÓIˆä! $¨¨X×-F¸¿¹ÓGˆæØ×)Ñ)¨*°dÓ;‰DàˆDÞØ×.Ñ.Øó/‰Ið ˆIæ §§‘°4Þ&Ø×"×" i×&7×&7ð ðDð 	Dà>BðDð 	Dr   c           
      óô  • SU R                    3n[        R                  " [        R                  R	                  U[        R                  R                  U5      5      5        [        [        R                  R	                  X5      S5       n SSSU R                    SU R                   3/n[        R                  " [        S5      S[        U5      0-  5        [        R                  " XC[        R                  S	S
S9   SSS5        U$ ! [        R                   aw  n[        R                   " [        S5      U R                   UR"                  (       a  UR"                  R%                  SS5      O
[        U5      S.-  5         SnASSS5        gSnAf[&         aJ  n[        R                   " [        S5      U R                   [        U5      S.-  5         SnASSS5        gSnAff = f! , (       d  f       U$ = f)z‚Run apt-get changelog and parse the downloaded changelog.
Retrieve changelog using the "apt-get changelog" command, and parse it.
znetwork/Úwbzapt-getz-qqrx  Ú=z%Calling %(cmd)s to retrieve changelogÚcmdéx   T)ÚstdoutÚstderrÚtimeoutÚcheckz]Unable to retrieve changelog for package %(pkg)s; 'apt-get changelog' failed with: %(errmsg)sr`   ra   )Úpkgrh   Nz_Unable to retrieve changelog for package %(pkg)s; could not run 'apt-get changelog': %(errmsg)s)r.  rc  Úmkdirr�   r  Údirnameri   r:   r   rd  r   rm   ru   ÚrunÚPIPEÚCalledProcessErrorrk  r®  rw   rk   )r*   r“  Úchangelog_fileÚchangelog_fdry   rq   s         r   Úextract_content_via_aptÚPackage.extract_content_via_apt\  s™  € ð
 $ D§K¡K =Ð1ˆÜ
�Š”—‘—‘˜g¤r§w¡w§¡°~Ó'FÓGÔHÜ”"—'‘'—,‘,˜wÓ7¸Ô>À,ðØ$ e¨[Ø"Ÿk™k˜]¨!¨D¯L©L¨>Ð:ð<�ä—’œQÐFÓGØ#¤S¨£\Ð2ñ3ô 4ä—’ØÜ%Ÿ?™?°C¸tóE÷ ?ð4 Ðøô! ×0Ñ0ó Ü—’Üð Fó Gà"Ÿk™kàŸ)Ÿ)ð "$§¡×!1Ñ!1°'¸9Ô!EÜ),¨R«ñ2ñ2ô3ó ÷# ?Ð>ûô& ó Ü—’Üð Hó Ià"Ÿk™k´S¸³WÑ=ñ>ô?ó ÷1 ?Ð>ûð&ú÷' ?Ô>ð4 ÐúsD   Â
G(ÂA1DÄG%ÄA%FÆG(ÆG%Æ8G ÇG(Ç G%Ç%G(Ç(
G7c                 óT  • [         R                  " SS9n U R                  U5      nU(       aG  [        XU=(       d    U R                  US9R                  U/SSS9nU[        R                  " US5        $  [        R                  " US5        g! [        R                  " US5        f = f)zªRun apt-get changelog and parse the downloaded changelog.
Retrieve changelog using the "apt-get changelog" command, and parse it.
Returns ChangelogParser object or None.
úapt-listchanges©Úprefixra  NTrŒ  r   )ÚtempfileÚmkdtempr¹  rM  r1  r^  r�  r‘  )r*   r1  rC   r“  r·  rx  s         r   Úextract_changes_via_aptÚPackage.extract_changes_via_apt  s¢   € ô ×"Ò"Ð*;Ñ<ˆð		&Ø!×9Ñ9¸'ÓBˆNÞÜ,Ø 8×#<¨t¯}©}Ø'ñ)ç)8©Ø'Ð(¨$À$ð *9ð *Hð ð !ä�MŠM˜' 1Õ%ð ô �MŠM˜' 1Ô%àøô �MŠM˜' 1Õ%ús   –AB ÂB'c           	      ó¼  • [         R                  " U R                  5      nSR                  U Vs/ s H  n[         R                  " SU-   5      PM     sn5      nSU SU S3n[        R
                  " USSSSS	9nUR                  [        R                  * :X  a  [        e[        S
 UR                  R                  5       R                  S5       5       5      $ s  snf )Nr!   ú./údpkg-deb --fsys-tarfile z | tar tf - --wildcards ú 2>/dev/nullTr`   F)ÚshellÚcapture_outputrb   r°  c              3   ó*   #   • U  H	  oS S v •  M     g7f)r   NrP   )rÉ   Úfns     r   rË   Ú-Package._extract_filenames.<locals>.<genexpr>   s   é € ÐGÒ%F˜r�q�r•FÒ%Fùs   ‚r    )ÚshlexÚquoter�   r  ru   r´  Ú
returncodeÚsignalÚSIGINTÚKeyboardInterruptÚlistr­  r…   r$   )r*   r�  Úqpathrp   ÚqnamesÚextract_commandr³   s          r   Ú_extract_filenamesÚPackage._extract_filenames“  sÂ   € Ü—’˜DŸI™IÓ&ˆØ—‘¹(ÓCº(°Qœ5Ÿ;š; t¨a¡xÖ0¹(ÑCÓDˆà& u gð .$Ø$* 8¨<ð9ð 	ô —’Ø 4¸ÀwØñˆð
 ×Ñ¤§¡ Ó.Ü#Ð#ÜÑG V§]¡]×%8Ñ%8Ó%:×%@Ñ%@ÀÔ%FÓGÓGÐGùò Ds   °#Cc                 óp  • [         R                  " SSU R                   SU R                   34SSSS9nUR                  [
        R                  * :X  a  [        eUR                  R                  5       R                  S5       Vs/ s H  o3R                  5       S	S  PM     nnU R                  XA5      $ s  snf )
NÚdpkgz-Lr#   Tr`   F)rÈ  rb   r°  r    r   )ru   r´  r.  r)   rÎ  rÏ  rÐ  rÑ  r­  r…   r$   rž  )r*   r�  r³   rÊ  Úfiless        r   r¡  Ú(Package._extract_filenames_via_installed¢  s    € Ü—’Ø�T˜dŸk™k˜]¨!¨D¯I©I¨;Ð7Ð8Ø¨'¸ñ@ˆð
 ×Ñ¤§¡ Ó.Ü#Ð#Ø*0¯-©-×*=Ñ*=Ó*?×*EÑ*EÀdÔ*KÓLÒ*K B—‘“˜A˜B“Ñ*KˆÐLØ×$Ñ$ UÓ5Ð5ùò Ms   ÂB3c           	      ó  • [         R                  " SS9n[        R                  " U R                  5      n[        R                  " U5      nSR                  U Vs/ s H  n[        R                  " SU-   5      PM     sn5      nSU SU SU S3n[        R                  " U5      n[        R                  " U5      (       aE  [        R                  " U5      [        R                  :X  a  [        R                  " US5        [        eU$ s  snf )	Nr¼  r½  r!   rÄ  rÅ  z | tar xf - --wildcards -C rÆ  r   )r¿  rÀ  rÌ  rÍ  r�   r  rc  ÚsystemÚWIFSIGNALEDÚWTERMSIGrÏ  rÐ  r�  r‘  rÑ  )	r*   rW  r“  rÓ  Úqdirrp   rÔ  rÕ  Ústatuss	            r   r�  ÚPackage._extract_contents­  sÓ   € Ü×"Ò"Ð*;Ñ<ˆä—’˜DŸI™IÓ&ˆÜ�{Š{˜7Ó#ˆØ—‘¹)ÓDº)°Qœ5Ÿ;š; t¨a¡xÖ0¹)ÑDÓEˆà& u gð .'Ø'+ f¨A¨f¨X°\ðCð 	ô —’˜?Ó+ˆä�>Š>˜&×!Ñ!¤b§k¢k°&Ó&9¼V¿]¹]Ó&JÜ�MŠM˜' 1Ô%Ü#Ð#àˆùò Es   Á#D©r)   r.  r1  r�   r3   r@   r:   rH  rG   )rJ   rK   rL   rM   rv  r�  rŽ  r/   r´   rÂ   rN   rƒ  r•  Ústaticmethodrž  r¦  r¹  rÁ  rÖ  r¡  r�  rO   rP   r   r   r   r   ë  s‰   † Ù*¨=Ó9€NáÐ0Ó1Ù˜kÓ*ñ	+ð ò)òIà€HàñFó ðFô*!ðX ñAó ðAô"DòH!ôFò(Hò	6õr   r   c                   ó4   • \ rS rSrS rS r\rSS jrS rSr	g)	ÚInstalledPackageiÂ  c                 óÈ   • S U l         X l        UR                  U l        UR                  U l        UR
                  U l        UR                  U l        UR                  U l        g rG   )	r�   r1  r   r.  r:   r3   r@   r   r)   )r*   r{  r1  s      r   r/   ÚInstalledPackage.__init__Ä  sJ   € ØˆŒ	Ø ŒØ—o‘oˆŒØ—‘ˆŒØ—n‘nˆŒØ%×4Ñ4ˆÔØ×(Ñ(ˆ�	r   c                 óP   • SU R                   R                   SU R                   S3$ r~  )r¼   rL   r.  r2   s    r   r´   ÚInstalledPackage.__str__Í  s&   € Ø�4—>‘>×.Ñ.Ð/¨|¸D¿K¹K¸=ÈÐJÐJr   Nc                 ó$   • U R                  X5      $ rG   )r¦  )r*   r’  r1  rC   s       r   r•  Ú InstalledPackage.extract_changesÑ  s   € Ø×1Ñ1°%ÓBÐBr   c                 ó   • [        5       erG   )ÚNotImplementedError)r*   rW  s     r   r�  Ú"InstalledPackage._extract_contentsÔ  s   € Ü!Ó#Ð#r   rã  rH  )
rJ   rK   rL   rM   r/   r´   rÂ   r•  r�  rO   rP   r   r   ræ  ræ  Â  s   † ò)òKà€HôCõ$r   ræ  )ro  r™  rÖ   ri  rl  rc  rI  rÌ  r�  rÏ  ru   r¿  rØ   Úapt_listchangesr   Úapt_listchanges.ALChacksr   r   r   rR   r‚   rÄ   ræ   r  r,  rM  rv  r   ræ  rP   r   r   Ú<module>rò     s³   ðó4 Û Û Û Û Û 	Û 	Û Û Û Û Û ã å "Ý &ò*÷-ñ -÷`%(ñ %(÷PG)ñ G)÷X2ñ 2÷*Cñ C÷Lñ ÷^ñ ^÷B<ñ <ò~+÷Tñ Tôn$�wõ $r   