
    dg>                     D   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 SK	Jr  S SKJrJr  S SKJr  S SKJrJrJr  S SK	Jr  S S	KJr   " S
 S5      rSS\4S jjrSS\SS4S jjrS rS rS rS r SS jr!S r"S r#S r$\%S:X  a  \ " 5         gg)    N)ALCApt)	ALCConfig)ALCLog)SeenDbDbError_)ChangesControlParserPackage)	frontends)Snapshotc                       \ rS rSrSrS V VVs/ s H  n[
        R                  " U5      PM     snnn r  SS jrSS jr	\
S 5       rS rS	 rS
 rSrgs  snnn f )Filterer0   as  Filterer objects need to have the following methods:
reset(pkg, installed=None) -- Reset the filterer for a new log file in the
  the package, optionally specifying the control stanza of the installed
  version of the same package. If installed is specified then the filterer
  does version-number-based filtering.
stop(entry) -- Return True to discard the specified entry and stop parsing
  the current changelog
filter(entry) -- Return True to discard the current entry
Both stop() and filter() may be called with None, in which case they should
return False.
stop() is always called before filter() for any particular entry.)z^linux-image-Nc                     Uc  UR                   OUU l         Uc  UR                  OUU l        Uc  UR                  OUU l        X l        SU l        SU l        SU l        SU l        SU l        g)z*keyword args override the values in configNr   F)	show_allsincelatestseen_dbacceptedfilteredsaw_uspkg	installed)selfconfigr   r   r   r   s         A/usr/lib/python3/dist-packages/apt_listchanges/apt_listchanges.py__init__Filterer.__init__F   s`     ,4+;%*]V\\
'-~fmm6    c                    ^ TU l         X l        SU l        SU l        [	        U4S jU R
                   5       5      U l        g )Nr   c              3      >#    U  HB  nUR                  TR                  5      =(       d    UR                  TR                  5      v   MD     g 7fN)matchbinarysource).0rr   s     r   	<genexpr>!Filterer.reset.<locals>.<genexpr>X   s;      @#>a ''#**-D1DD#>s   A
A)r   r   r   r   anytrust_version_packagesr   )r   r   r   s    ` r   resetFilterer.resetS   s?    " @#'#>#>@ @r!   c                     U R                  S5      nUS:w  a/  [        U 5      [        US-   US-   5      ;   a  XS-      S:X  a  U S U $ U $ )N+         b)rfindlenrange)versionposs     r   _drop_binnmu_suffixFilterer._drop_binnmu_suffix[   sP    mmC "9Ws1uc!e)<<q5>S 4C= r!   c                 D   U R                   (       d  gUR                  U R                  R                  :X  a  SnO(UR                  U R                  R                  :X  a  SnOgU R
                  (       dY  US:X  a  U R                  R                  OU R                  R                  nU R                  U5      UR                  :X  a  SU l        gUS:X  a  U R                   R                  OU R                   R                  n[        R                  " UR                  U5      S:*  $ )NFr&   r'   Tr   )r   packager   r&   r'   r   r:   source_versionr<   apt_pkgversion_compare)r   entrywhichour_versioncutoff_versions        r   version_stopFilterer.version_stopc   s    ~~==DHHOO+E]]dhhoo-E{{.3x.?$((**XX,, ''4E"38H3D//.. 	 &&u}}nEJJr!   c                    Uc  gU R                   (       a0  U R                  U R                   :  a  U =R                  S-  sl        gU R                  (       aE  [        R
                  " UR                  U R                  5      S::  a  U =R                  S-  sl        gU R                  R                  U5      (       a  U =R                  S-  sl        gU R                  U5      (       a  U =R                  S-  sl        gg)z&True means to stop, False means not toFr5   Tr   )
r   r   r   r   rA   rB   r:   r   	seen_hererG   )r   rC   s     r   stopFilterer.stopw   s    =;;4==DKK7MMQM::""5==$**=BMMQM<<!!%((MMQMU##MMQMr!   c                    Uc  gU R                   (       a  U =R                  S-  sl        gU R                  R                  U5      (       a  U =R                  S-  sl        gU R                  R                  USS9nU R                  R                  U5        U(       a  U =R                  S-  sl        U$ U =R                  S-  sl        U$ )z(True means to filter, False means not toFr5   T)exact)r   r   r   rJ   r   seen_anywhereadd)r   rC   	do_filters      r   filterFilterer.filter   s    ===MMQM<<!!%((MMQMLL..uE.B	 	MMQM  MMQMr!   )	r   r   r   r   r   r   r   r   r   )NNNr$   )__name__
__module____qualname____firstlineno____doc__recompiler-   r   r.   staticmethodr<   rG   rK   rR   __static_attributes__)r(   r)   rY   s   000r   r   r   0   sf    
I& 6II5Hbjjm5HI=A@  K((O Js    Ar   force_dbc                 0   [         R                  " 5         U R                  U5        [        R                  " U R
                  5        [        R
                  " [        S5      5        [        U 5       n[        XU5      sSSS5        $ ! , (       d  f       g= f)zforce_db is only used by unit tests. Once pytest-subprocess is packaged
and we can use it on our tests, then we'll be able to simplify the tests
and eliminate the need for force_db.zEnabled debug outputN)	rA   initsetupr   	set_debugdebugr	   r   doit_with_snapshot)r   argsr]   snapshots       r   doitrf      s]     LLN
LL
V\\"
LL)*+	&	X!&H= 
		s   1B
Breturnc                 $  ^ U R                   nU R                  (       a  UR                  U R                  S5        U R                  (       a9  [	        U R                  5      R                  5         [        R                  " S5        U R                  (       aA  [        R                  " U 5      R                  5       nU(       d  [        R                  " S5        UR                  SR                  U5      S5        [        R                  R                  5       (       d  U R                   (       d  SU l         ["        R$                  " U ['        U5      5      nWc  [        R                  " S5        UR3                  5       (       as  [        R4                  R                  5       (       dP   [7        SSSS	9 n[8        R:                  " S5        [8        R<                  " UR?                  5       S5        S S S 5        U(       d?  U RF                  (       d"  U RH                  (       d  U RJ                  (       a  [	        S 5      nO[	        U R                  5      n[M        X5      nU V	s/ s H  n	[O        X5      PM     n
n	[Q        XXzUS9u  pUR                  U=(       d    SS5        UR                  U=(       d    SS5        U=(       d    U(       + n U(       d  U(       a  [S        XKS 5        [S        XLS 5        ["        RT                  " X5        Sn["        RV                  " U 5      (       a6  [X        RZ                  " S5      m[]        XU4S j5        []        XU4S j5        U(       a?  UR_                  5         U R                  (       a  UR                  U R                  S5        g g U R                  (       aU  [`        Rb                  " 5        nURe                  URf                  SS9  UR                  URf                  S5        S S S 5        g g ! ["        R(                   aF    [*        R,                  " [/        S5      U R0                  -  5        [        R                  " S5         GNf = f! , (       d  f       GN= f! [@         a6  n[*        RB                  " [/        S
5      [E        U5      -  5         S nAGNS nAff = fs  sn	f ! , (       d  f       g = f! U(       a?  UR_                  5         U R                  (       a  UR                  U R                  S5        f f U R                  (       af  [`        Rb                  " 5        nURe                  URf                  SS9  UR                  URf                  S5        S S S 5        f ! , (       d  f       f = ff = f)Nz	db-beforer   
zdeb-listr5   zUnknown frontend: %sz/dev/ttyzrb+)	bufferingz$Cannot reopen /dev/tty for stdin: %s)re    newschangesc                      [        S5      $ )Nzapt-listchanges: Newsr    r!   r   <lambda>$doit_with_snapshot.<locals>.<lambda>   s
    Q67r!   c                      [        S5      $ )Nzapt-listchanges: Changelogsr   ro   r!   r   rp   rq      s
    Q<=r!   Thostnamec                      > [        S5      T -  $ )Nzapt-listchanges: news for %sr   rs   s   r   rp   rq      s    A<=Hr!   c                      > [        S5      T -  $ )Nz"apt-listchanges: changelogs for %sr   ru   s   r   rp   rq      s    ABChNr!   zdb-after)force)4debs	save_seenadd_file	dump_seenr   dumpsysexitapt_moder   AptPipelinereadadd_datajoinstdoutisattyquietr   make_frontendr8   EUnknownFrontendr   errorr	   frontendneeds_tty_stdinstdinopenosclosedup2fileno	Exceptionwarningstrr   r   r   r   r   process_pkgs_displayconfirm_or_exitcan_send_emails
subprocess	getoutput_send_emailapply_changestempfileNamedTemporaryFilesave_asname)r   re   r]   rx   r   ttyexr   filtererdebpkgsrl   rm   	confirmedfrs   s                  @r   rc   rc      s   ;;D&**K8v %%'!!&)..0HHQKdiioz2 ::v||**63t9=
 !!#))*:*:*<*<		P
 j%15

a( 6 FLLFMM,))*(H.23dsGC"dD3 7*24MD djb&)gmY/ _W%I67X79X=? %%f7I((00%//
;HJ NP
 !!#!!&"2"2J?  ,,.!d3!!!&&*5 /. w %% Q-.@A 65  	PNN1CDs2wNOO	P 4F /. !!#!!&"2"2J?  ,,.!d3!!!&&*5 /.. s   4 P &Q7 1<Q%-Q7 R:
BS 7R?AQ"!Q"%
Q4/Q7 4Q7 7
R7+R22R7?
SA-V=7U=4	V=
VVc                 b    U(       a(  U R                  U" 5       5        U R                  U5        g g r$   )	set_titledisplay_output)r   rm   title_getters      r   r   r     s(    <>*( r!   c                 L    U(       a  [         R                  " XU" 5       5        g g r$   )r   mail_changes)r   rm   subject_getters      r   r   r     s    v0@A r!   c                      S n [         R                  [         R                  [         R                  4 H  n[         R                   " X5        M     g )Nc                     [         R                  " [        S5      U -  5        [        R                  " [
        R                  5        g )NzReceived signal %d, exiting)r   r   r	   r}   r~   r   BREAK_APT_EXIT_CODE)signumframes     r   signal_handler&_setup_signals.<locals>.signal_handler  s+    Q45>?../r!   )signalSIGHUPSIGQUITSIGTERM)r   ss     r   _setup_signalsr     s2    0 mmV^^V^^<a( =r!   c                     [        5         [        R                  " 5       n  [        U 5        g ! [         a'    [        R
                  " [        R                  5         g [        R                   aM  n[        R                  " [        U5      5        [        R
                  " [        R                  5         S nAg S nAf[         a?  n[        R                  " [        U5      5        [        R
                  " S5         S nAg S nAf[         aY    [        R                   " 5         [        R"                  " U [        R$                  " U 5      5        [        R
                  " S5         g f = f)Nr5   )r   r   rf   KeyboardInterruptr}   r~   r   r   r   AptPipelineErrorr   r   r   r   r   	traceback	print_excr   
ttyconfirm)r   r   s     r   mainr     s      "FV 0../"" 0SW..// SW !!I((0	2	s/   - .E%E%0AB88E%5C??A#E%$E%c                 :   [        5       n[        5       n/ nS nU R                  (       d  U R                  (       du  U R                  (       dd  [        R
                  R                  S5      n	U(       a  UR                  U	S5        [        5       nUR                  U	5        UR                  S5        U H~  n
[        XXU
5      u  pU(       a'  [        R                  " SU
R                   35        X[-  nU(       a'  [        R                  " SU
R                   35        Xl-  nUR                  5         M     UR!                  5         U R"                  (       a   UR#                  5         UR#                  5         [%        XPR&                  S 5      n[%        X`R&                  S 5      n[)        U5      nU(       a  U(       a	  USU-   -  nOUnU R*                  (       aB  U(       a;  [-        S	5      S
-   SR/                  U5      -   nU R0                  S:X  a  X-  nX4$ X-  nX4$ )NzDir::State::statuszdpkg-statusr   zGot news for zGot changelogs for c                     [        S5      U -  $ )NzNews for %sr   r?   s    r   rp   process_pkgs.<locals>.<lambda>O  s    -(87(Br!   c                     [        S5      U -  $ )NzChanges for %sr   r   s    r   rp   r   Q  s    1-=+>+Hr!   

zInformational notesz:

ri   rl   )r
   r   r   r   rA   r   	find_filerz   r   readfile	makeindexprocess_pkgr   rb   pathupdate_progressprogress_donereversejoin_changesheadersjoin_binnmusverboser	   r   rD   )r   r   r   r   re   all_newsall_changelogsnotesstatusdpkg_statusr   rl   
changelogsrm   binnmusjoined_notess                   r   r   r   .  s   yHYNEFOOv||v}}nn../CDk=9$#(VC1LL=
34HLL.sxxj9:(N  "  ~~ ..BDD>>>HJG>*Gv''GG~~%./'9DIIe<LL<<6! D = #G=r!   c                 j  ^ S nU R                   (       d  U R                  (       d  U R                  (       d  UR                  STR                  5      =(       d    / n [        U4S jU 5       5      n[        USS5      (       d(  UR                  [        S5      TR                  -  5        gUR                  TR                  5      (       d9  UR                  TR                  5        [        XSSSS9nTR                  S	U5        TR                  U R                  US
9u  pU R                   (       d&  U R                  S:w  a  U	(       d  TR#                  US
9n	U(       a  UR$                  (       a  UOS U	(       a%  U	R$                  (       d  U	R&                  (       a  U	4$ S 4$ ! [         a    S n GN?f = f)Nr   c              3   ^   >#    U  H"  oR                   TR                   :X  d  M  Uv   M$     g 7fr$   )arch)r(   r   r   s     r   r*   process_pkg.<locals>.<genexpr>i  s$       A)aVVsxx-?>s   -	-r   Fz%s: will be newly installed)NN
   )r   r   r   both)r   rl   )r   r   r   findr&   nextStopIterationgetattrappendr	   has_packageadd_packager   extract_changes_via_installedextract_changesrD   
no_networkextract_changes_via_aptentriesr   )
r   r   r   r   r   status_entrystatus_entriesseed_filtererrl   	changelogs
       `     r   r   r   d  sr   LOOv||v}}Y

;Ar	   A) A AL |[%88LL89CJJFG""3::..

+$Vu+0=M --fmD ++FLL6B , DT!7	//,/G	T\\Dt")"3"3 @ @:>@ @3  	 L	 s   F" "F21F2c                     U(       d  U R                   $ SnS nU R                   H?  nUR                  U:w  a  UR                  nUSU" U5       S3-  nU[        U5      S-   -  nMA     U$ )Nrk   --- z ---

r   )rm   r   r?   r   )all_changesshow_headersheader_package_getterrm   r?   rC   s         r   r   r     st    """GG$$==G#mmG3G<=XFFG3u:&&	 % Nr!   c                    0 nU R                    H.  nUR                  UR                  / 5      R                  U5        M0     SnUR	                  5        H  u  pES[        S5      -   nSn[        U5      nU Hm  nUR                  n	U	R                  S5      n
U
S:  a  U	S U
S-    n	Xg-  nU[        U5      -  nSnU[        U	5      -   S	:  a  US
-  nSnXi-  nU[        U	5      -  nMo     X6S-   U-   S-   -  nM     U$ )Nrk   r   zBinary NMU ofz: )r   r5   z, K   z
 r   )	r   
setdefaultcontentr   itemsr	   r8   headerr   )all_binnmus
by_contentrC   r   r   r   r   seplastlenhdridxs              r   r   r     s   J$$emmR077> % G&,,./**d)E,,C((3-Cax&3q5k KDs3xGCS!B&KDs3xG   	&=7*V33) /, Nr!   __main__)NF)Fr$   )&r   os.pathrY   r}   r   r   r   r   rA   apt_listchangesr   r   r   apt_listchanges.ALCSeenDbr   r   apt_listchanges.ALChacksr	   apt_listchanges.DebianFilesr
   r   r   r   apt_listchanges.snapshotr   r   boolrf   rc   r   r   r   r   r   r   r   r   rT   ro   r!   r   <module>r     s   6 
  	 
      " % " 5 & G G % -m m`>d >U64 U6D U6p)B
)(3l"@J> zF r!   