
    kd                        d Z dZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlmZ ddlmZ 	 ddlZddlmZmZmZmZ dd	lmZ dd
lmZ ddlmZ ddlm Z   ejB                  d      Z"	 ddl#m$Z$ dZ%ejL                  jO                  dd      Z(e(dz   Z)e(dz   Z*dZ+	 ddl,Z, ejZ                  e)ej\                        re"j_                  d       dZ+	 dZ0dZ1dZ2dZ3dZ4dZ5dZ6i dejn                  jp                  dejn                  jr                  dejn                  jt                  d ejn                  jv                  d!ejn                  jx                  d"ejn                  jr                  d#ejn                  jt                  d$ejn                  jt                  d%ejn                  jz                  d&ejn                  j|                  d'ejn                  j~                  d(ejn                  j                  d)ejn                  jr                  d*ejn                  j                  d+ejn                  j                  d,ejn                  j                  d-ejn                  jt                  i d.ejn                  j                  d/ejn                  j                  d0ejn                  jv                  d1ejn                  jt                  d2ejn                  jx                  d3ejn                  jt                  d4ejn                  jt                  d5ejn                  jt                  d6ejn                  j                  d7ejn                  jr                  d8ejn                  jt                  d9ejn                  jr                  d:ejn                  jt                  d;ejn                  j                  d<ejn                  j                  d=ejn                  j                  d>ejn                  j                  i d?ejn                  j                  d@ejn                  j                  dAejn                  jt                  dBejn                  j                  dCejn                  jr                  dDejn                  jt                  dEejn                  jt                  dFejn                  jt                  dGejn                  jt                  dHejn                  j                  dIejn                  jp                  dJejn                  j                  dKejn                  j|                  dLejn                  j|                  dMejn                  j                  dNejn                  jt                  dOejn                  j                  ejn                  j                  ejn                  j                  ejn                  j                  ejn                  j                  ejn                  jt                  ejn                  j                  ejn                  j                  ejn                  j                  ejn                  j                  ejn                  j                  dP
ZQ G dQ dRe j                        ZSe%r G dS dTej                  e$      ZTdU ZdV ZdW ZdX Zy# e$ r dZY _w xY w# e$ r dZ%Y .w xY w# e$ r Y w xY w)Ya  
Provides a compatibility layer to PackageKit

Copyright (C) 2007 Ali Sabil <ali.sabil@gmail.com>
Copyright (C) 2007 Tom Parker <palfrey@tevp.net>
Copyright (C) 2008-2011 Sebastian Heinlein <glatzor@ubuntu.com>

Licensed under the GNU General Public License Version 2

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
z%Sebastian Heinlein <devel@glatzor.de>    N)GObject)PackageKitGlib   )bitfield_addbitfield_removebitfield_summarizebitfield_contains   )enums)TransactionFailed)DaemonAcquireProgress)	aptworkerzAptDaemon.PackageKitWorker)MetaReleaseCoreTFAXI_DB_PATHz/var/lib/apt-xapian-indexz/indexz/valueszUse XAPIAN for the searchz5closes:\s*(?:bug)?\#?\s?\d+(?:,\s*(?:bug)?\#?\s?\d+)*z\#?\s?(\d+)z3http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=%szlp:\s+\#\d+(?:,\s*\#\d+)*z"https://bugs.launchpad.net/bugs/%szCVE-\d{4}-\d{4}z2http://web.nvd.nist.gov/view/vuln/detail?vulnId=%sadminbasezcli-monocommdatabasezdebian-installerdebugdeveldoceditors	educationelectronicsembeddedfontsgamesgnomezgnu-rgnustepgraphicshamradiohaskellhttpdinterpretersintrospectionjavakdekernellibdevellibslisplocalizationmailmathmiscnetnewsocamloldlibs	otherosfsperlphppythonrubyscienceshellssoundtextextutilsvcsvideo)
virtualwebxfcex11zopeunknownalientranslationsmetapackagestasksc                       e Zd ZdZ	 d,dZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd-dZd.dZd Zd.dZd.dZd.dZd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,	 	 d/d+Z-y)0AptPackageKitWorkerNc                    t         j                  j                  | ||       t        t        j
                  j                  t        j
                  j                  t        j
                  j                  t        j
                  j                  t        j
                  j                  t        j
                  j                  t        j
                  j                  t        j
                  j                  t        j
                  j                  t        j
                  j                  t        j
                  j                   t        j
                  j"                  t        j
                  j$                  t        j
                  j&                  t        j
                  j(                  t        j
                  j*                  t        j
                  j,                  t        j
                  j.                  t        j
                  j0                        | _        t4        r3t7        | j2                  t        j
                  j8                        | _        t        t        j:                  j<                  t        j:                  j>                  t        j:                  j@                  t        j:                  jB                  t        j:                  jD                  t        j:                  jF                  t        j:                  jH                  t        j:                  jJ                  t        j:                  jL                  t        j:                  jN                  t        j:                  jP                  t        j:                  jR                  t        j:                  jT                        | _+        t        tX        j[                          | _.        t        j^                  j`                  | _1        dg| _2        y )Nzapplication/x-deb)3r   	AptWorker__init__r   pkRoleEnumREFRESH_CACHEUPDATE_PACKAGESINSTALL_PACKAGESINSTALL_FILESREMOVE_PACKAGESGET_UPDATESGET_UPDATE_DETAILGET_PACKAGESGET_DETAILSSEARCH_NAMESEARCH_DETAILSSEARCH_GROUPSEARCH_FILEWHAT_PROVIDESREPO_ENABLEINSTALL_SIGNATUREREPAIR_SYSTEMCANCELDOWNLOAD_PACKAGESrolesMETA_RELEASE_SUPPORTr   GET_DISTRO_UPGRADES
FilterEnum	INSTALLEDNOT_INSTALLEDFREENOT_FREEGUINOT_GUICOLLECTIONSNOT_COLLECTIONS	SUPPORTEDNOT_SUPPORTEDARCHNOT_ARCHNEWESTfiltersSECTION_GROUP_MAPvaluesgroupsProvidesEnumANYprovides
mime_types)selfchrootload_pluginss      ;/usr/lib/python3/dist-packages/aptdaemon/worker/pkworker.pyrO   zAptPackageKitWorker.__init__   s*   $$T6<@'(A(A(*(C(C(*(D(D(*(A(A(*(C(C(*(?(?(*(E(E(*(@(@(*(?(?(*(?(?(*(B(B(*(@(@(*(?(?(*(A(A(*(?(?(*(E(E(*(A(A(*(:(:(*(E(E%G
&  %djj&(kk&E&EGDJ)"--*A*A*,--*E*E*,--*<*<*,--*@*@*,--*;*;*,--*?*?*,--*C*C*,--*G*G*,--*A*A*,--*E*E*,--*<*<*,--*@*@*,--*>*>@ )*;*B*B*DE,,./    c                     t        |d      rJt        |j                  j                  t        j
                  j                        r| j                  |       yt        j                  j                  | |      S )NpktransF)hasattrr	   r   flagsrP   TransactionFlagEnumSIMULATE_simulate_and_emit_packagesr   rN   _run_transactionr~   transs     r   r   z$AptPackageKitWorker._run_transaction   sY    E9%emm11 44==?,,U3&&77eDDr   c                     t         j                  |_        | j                  |       |j                  t         j
                  k(  rv|j                  t         j                     D ]L  }| j                  || j                  | j                  |      d      t        j                  j                         N |j                  t         j                     D ]L  }| j                  || j                  | j                  |      d      t        j                  j                         N |j                  t         j                      D ]L  }| j                  || j                  | j                  |      d      t        j                  j"                         N |j                  t         j$                     D ]L  }| j                  || j                  | j                  |      d      t        j                  j"                         N |j                  t         j&                     D ]N  }| j                  || j                  | j                  |      d      t        j                  j(                  d       P |j                  t         j*                     D ]N  }| j                  || j                  | j                  |      d      t        j                  j,                  d       P |j                  t         j.                     D ]N  }| j                  || j                  | j                  |      d      t        j                  j0                  d       P |j2                  D ]<  }| j                  || j                  |   t        j                  j4                  d       > t         j6                  |_        d|_        t         j:                  |_        |j<                  d d  }d | _        d | _         | jC                  |       tD        jG                  d|       y )Nr   Tforce_candidated   zFinished transaction %s)$
aptd_enumsSTATUS_RUNNINGstatus_simulate_transaction_idleexitEXIT_UNFINISHEDdependsPKGS_INSTALL_emit_package_cache_split_package_idrP   InfoEnum
INSTALLINGPKGS_REINSTALLREINSTALLINGPKGS_REMOVEREMOVING
PKGS_PURGEPKGS_UPGRADEUPDATINGPKGS_DOWNGRADEDOWNGRADING	PKGS_KEEPBLOCKEDunauthenticated	UNTRUSTEDSTATUS_FINISHEDprogressEXIT_SUCCESStidr   
marked_tid_emit_transaction_donepkloginfo)r~   r   pkgr   s       r   r   z/AptPackageKitWorker._simulate_and_emit_packages   s`   !00''. ::333 }}Z%<%<= ;""5#';;t/E/Ec/J1/M#N#%;;#9#9;; }}Z%>%>? =""5#';;t/E/Ec/J1/M#N#%;;#;#;== }}Z%;%;< 9""5#';;t/E/Ec/J1/M#N#%;;#7#799 }}Z%:%:; 9""5#';;t/E/Ec/J1/M#N#%;;#7#799 }}Z%<%<= O""5#';;t/E/Ec/J1/M#N#%;;#7#7 # OO }}Z%>%>? 9""5#';;t/E/Ec/J1/M#N#%;;#:#:37 # 99
 }}Z%9%9: N""5#';;t/E/Ec/J1/M#N#%;;#6#6 # NN ,, P""5$++c*:#%;;#8#8$ # PP &55EL EN#00EJiil
##E*

,c2r   c                 r	   |j                   t        j                  k7  rt        t        j                  d      |j
                  j                   t        j                  j                  k(  r | j                  |fi |j                   y|j
                  j                   t        j                  j                  k(  r | j                  |fi |j                   y|j
                  j                   t        j                  j                  k(  r | j                  |fi |j                   y|j
                  j                   t        j                  j                  k(  r | j                   |fi |j                   y|j
                  j                   t        j                  j"                  k(  r | j$                  |fi |j                   y|j
                  j                   t        j                  j&                  k(  r | j(                  |fi |j                   y|j
                  j                   t        j                  j*                  k(  r | j,                  |fi |j                   y|j
                  j                   t        j                  j.                  k(  r | j0                  |fi |j                   y|j
                  j                   t        j                  j2                  k(  r | j4                  |fi |j                   y|j
                  j                   t        j                  j6                  k(  r | j8                  |fi |j                   y|j
                  j                   t        j                  j:                  k(  r | j<                  |fi |j                   y|j
                  j                   t        j                  j>                  k(  r | j@                  |fi |j                   y|j
                  j                   t        j                  jB                  k(  r | jD                  |fi |j                   y|j
                  j                   t        j                  jF                  k(  r | jH                  |fi |j                   yt        t        j                  d|j
                  j                         )zRun the workerz*The transaction doesn't seem to be a queryzRole %s isn't supportedN)%roler   ROLE_PK_QUERYr   ERROR_UNKNOWNr   rP   rQ   RESOLVEresolvekwargsrW   get_updatesrX   get_update_detailrY   get_packages	GET_FILES	get_filesr[   search_namesr]   search_groupsr\   search_detailsr^   search_filesrZ   get_detailsrd   download_packagesr_   what_providesr`   repo_enablera   install_signaturer   s     r   queryzAptPackageKitWorker.query
  s7   ::111#J$<$<%./ / ==!4!44DLL/%,,/]]2;;#:#::DU3ell3]]2;;#@#@@"D""59ELL9]]2;;#;#;;De4u||4]]2;;#8#88DNN51ELL1]]2;;#:#::De4u||4]]2;;#;#;;Du55]]2;;#=#==D66]]2;;#:#::De4u||4]]2;;#:#::DU3ell3]]2;;#@#@@"D""59ELL9]]2;;#<#<<Du55]]2;;#:#::DU3ell3]]2;;#@#@@"D""59ELL9#J$<$<$=$)MM$6$68 8r   c                    d|_         t               }t        j                  j	                  d      rZt        |t        j                  j                        s5t        j                  d       g }|D ]B  }|j                  d      rd|dd j                  dd      z  }nd	|z  }|j                  |       D dd
ddddj                  |      g}t        j                  d|z         t        j                   |t        j"                  t        j"                        }	|	j%                         \  }
}|	j&                  dk(  r3|j)                  |
j+                                | j-                  |||       nt/        t0        j2                  |
d|      g }|D ]?  }|j                  d      rd|j                  dd      z  }nd|z  }|j                  |       A t5        j6                  dj                  |            }| j9                         D ]M  }|j:                  |v r| j=                  |      D ](  }|j?                  |      s| jA                  |||        M O y)zImplement org.freedesktop.PackageKit.Transaction.SearchFiles()

        Works only for installed file if apt-file isn't installed.
        e   z/usr/bin/apt-filezUsing apt-file/z^%s$r
   Nz\/z\/%s$z--regexpz--non-interactivez--package-onlyfind|zCalling: %s)stdoutstderrr    z.*\/%s$)!r   setospathexistsr	   rP   rh   ri   r   r   
startswithreplaceappendjoin
subprocessPopenPIPEcommunicate
returncodeupdatesplit_emit_visible_packages_by_namer   r   ERROR_INTERNAL_ERRORrecompile_iterate_packagesname_get_installed_filesmatch_emit_visible_package)r~   r   rv   rx   result_namesfilenames_regexfilenamepatterncmdapt_filer   r   files_patternr   installed_files                  r   r   z AptPackageKitWorker.search_files1  s/   
 u GGNN./%gr}}/F/FG KK() O" 0&&s+$x|';';C'FFG%0G&&w/0 '
4G#VSXXo-FHCKK+,!''JOO/9@H%113NFF""a'
 ##FLLN333E74@B (
(G(G396(BD D  	,H""3' 8#3#3C#>>#h.""7+	, 

388O#<=))+ 	Cxx<'"&";";C"@  &&~6..ugsC	r   c                     d|_         | j                         D ]>  }t        j                  | j	                  |            }||v s,| j                  |||       @ y)z?Implement org.freedesktop.PackageKit.Transaction.SearchGroups()r   N)r   r   rP   group_enum_to_string_get_package_groupr   )r~   r   rv   rx   r   	group_strs         r   r   z!AptPackageKitWorker.search_groupsk  sZ     ))+ 	@C//0G0G0LMIF"**5'3?	@r   c                     d }d|_         t        | j                  j                               D ],  } |||      s| j	                  ||| j                  |          . y)z>Implement org.freedesktop.PackageKit.Transaction.SearchNames()c                     | D ]  }||vs y yNFT searchesr=   searchs      r   matchesz1AptPackageKitWorker.search_names.<locals>.matchesw  s!    " !% ! r   r   N)r   listr   keys_emit_all_visible_pkg_versions)r~   r   rv   rx   r   pkg_names         r   r   z AptPackageKitWorker.search_namesu  s\    	
 T[[--/0 	KHvx(33E748KK4IK	Kr   c                    d|_         t        du r}t        j                  j                  t        j                  j
                  z  t        j                  j                  z  t        j                  j                  z  }t        j                  d       t        j                  t              }t        j                         }|j                  t        j                  j                         |j                  dj!                  |      |      }t        j"                  |      }|j%                  |       |j'                  dd      }	d |j'                  dd      D        D ]1  }
|
| j(                  v s| j+                  ||| j(                  |
          3 y
d }	t        j                  d	       |D cg c]  }|j-                          }}| j/                         D ]  }|j0                  }	 ||j2                  j4                  j-                         z  }||j2                  j6                  j8                  j-                         z  } |	||      sr| j+                  |||        y
c c}w # t:        $ r Y 0w xY w)z@Implement org.freedesktop.PackageKit.Transaction.SearchDetails()r   Tz!Performing xapian db based searchr   r   i  c              3   P   K   | ]  }|j                   j                            y wN)documentget_data).0r   s     r   	<genexpr>z5AptPackageKitWorker.search_details.<locals>.<genexpr>  s'      E!& #^^446 Es   $&c                     | D ]  }||vs y yr   r   r   s      r   r   z3AptPackageKitWorker.search_details.<locals>.matches  s!    & %FT)$% r   z!Performing apt cache based searchN)r   XAPIAN_SUPPORTxapianQueryParserFLAG_BOOLEANFLAG_PHRASEFLAG_LOVEHATEFLAG_BOOLEAN_ANY_CASEr   r   Database	XAPIAN_DBset_default_opQueryOP_ANDparse_queryr   Enquire	set_queryget_msetr   r   lowerr   r   	candidateraw_description_translated_records	long_descAttributeError)r~   r   rv   rx   search_flagsdbparserr   enquirer   r  valr   txts                 r   r   z"AptPackageKitWorker.search_details  s   T!"..;;"..::;"..<<= #..DDEL KK;<+B'')F!!&,,"5"56&&sxx'7FEnnR(Ge$&&q$/GE*1*:*:1d*CE Ft{{*..ug/3{{8/DFF
 KK;<-34cciik4F4--/ Dhh3==88>>@@C3==<<FFLLNNC 63'..ugsCD 5 & s   *I#AI  	I,+I,c                 j   d }d| _         d| _        	 | j                  j                  d       | j                         D ]  }|j                  s|j                  j                  s(|j                  s.| j                  ||t        j                  j                  d       bt        j                  j                  }|j                  j                  d   }|j                  }|j                   }|j"                  }	|j$                  }
|dv r|	du r|j'                  d	      s|
d
k(  rt        j                  j(                  }n ||      r=t*        j-                  d|j.                  z         t        j                  j(                  }nW|j'                  d      rt        j                  j0                  }n+|j'                  d      rt        j                  j2                  }|dv r|	du rt        j                  j0                  }| j                  |||d        | j5                  |       y# t        $ r Y w xY w)zOnly report updates which can be installed safely: Which can depend
        on the installation of additional packages but which don't require
        the removal of already installed packages or block any other update.
        c                    | j                   D ]  }| j                  rot        j                  |j                  | j                  j                        dk  r8t        j                  |j                  | j
                  j                        dkD  r~|j                  D ]K  }|j                  dv s|j                  j                  d      s|j                  dk(  s=|j                  sJ  y  y)a  
            Return True if an update succeeds a previous security update

            An example would be a package with version 1.1 in the security
            archive and 1.1.1 in the archive of proposed updates or the
            same version in both archives.
            r   DebianUbuntu	-securityDebian-SecurityTF)versions	installedapt_pkgversion_compareversionr  originsoriginarchiveendswithlabeltrusted)r   r1  r3  s      r   succeeds_security_updatezAAptPackageKitWorker.get_updates.<locals>.succeeds_security_update  s     << $MM++GOO,/MM,A,ACFGH++GOO,/MM,A,ACEFG%oo $F)==#^^44[A#\\->>"NN#$$ r   Fr   T)dist_upgrader   r   r(  r+  r,  z>Update of %s succeeds a security update. Raising its priority.z
-backportsz-updates)zBackports.org archiveN)cancellabler   r   upgradeSystemErrorr   is_upgradabler  r2  marked_upgrader   rP   r   r   NORMALr4  r3  r7  r6  r5  SECURITYr   r   r   ENHANCEMENTBUGFIX_emit_require_restart)r~   r   rv   r8  r   r   candidate_originr4  r3  r7  r6  s              r   r   zAptPackageKitWorker.get_updates  s   
	0 !	KKT2 ))+ !	GC$$ ==((%%""5#r{{/B/B37 # 9;;%%D"}}44Q7&..G%,,F&..G$**E--'T/##K0E=N4N;;//D-c2KK !8:=((!C D;;//D%%l3;;22D%%j1;;--D22w${{..uc4FC!	GD 	""5)I  		s   H% %	H21H2c                     | j                         r5|j                  j                  t        j                  j
                  d       yy)z Emit RequireRestart if required. N)is_reboot_requiredr   RequireRestartrP   RestartEnumSYSTEMr   s     r   rC  z)AptPackageKitWorker._emit_require_restart  s3     ""$MM(()>)>C %r   c                 ,   d }d }d|_         d|_        t        j                  j                  |j
                  _        t        |      }d}t        j                  t        j                        }t        j                  t        j                  d       |D ]  }| j                          |dz  |z  |_         |dz  }| j                  |      }	|	j                  j                  rE|	j                  j                  d   j                   }
t#        |
t$              r|
j'                  d      }
nd	}
|	j(                  d
|	j                  j*                  d
|	j                  j,                  d
|
g}t/               }|	j0                  r|	j0                  j3                  d      D ]  }|D ]  }	 | j4                  |j(                     }|j                  s*|j8                  rpt;        j<                  |j0                  j*                  |j*                        }|dk(  r|j8                  dv r~|dk  r|j8                  dv r|dkD  r|j8                  dv r| j?                  |j                        }|jA                  |         g }t        jB                  jD                  }d	}t        jF                  jH                  }|	j0                  r|	j0                  j                  d   jJ                  r|	j0                  j                  d   j                   dk(  r|	j0                  j                  d   jL                  }|dk(  rt        jF                  jN                  }n?|dk(  rt        jF                  jP                  }n|dk(  rt        jF                  jR                  }d	}d	}|	j(                  jU                  d      s|	j(                  dv r|t        jB                  jV                  k(   t:        jX                  j[                  d      }|dk(  r=t\        j^                  ja                  t:        jX                  j[                  d      d      }t\        j^                  ja                  ||	j(                  d|	j0                  j*                  d      }d	}t\        j^                  jc                  |      r[td        jg                  d       ti        jj                  |d      }	 |jm                         j'                  d      }|jo                          |s<td        jg                  d       |	jq                         }t#        |tr              s|j'                  d      }t\        j^                  jc                  |      st]        jt                  |       t\        j^                  ja                  |d|	j(                  z        }tw        jv                  |      D ]5  }t]        jx                  t\        j^                  ja                  ||             7 ti        jj                  |d       }	 |j{                  |j}                  d             |jo                          d	}|j                  d!      D ]%  } | d	k(  r|d"z  }n|d#| z  z  }| jU                  |	j0                  j                        rLt        j                  d$|       }!||!j                  d%      d!d&t        |!j                  d%            z  d'z  }| jU                  d(      r	|d)| z  z  }| jU                  d*      s|d+z  }t        j                  d,|       }!|!s	 t        j                  j                  |!j                  d-      d.      }"|"j                         }|r|"j                         }( ||k(  rd	} ||      }# ||      }$|j                  |||||#|$||||||       
 t        j                  t        j                  |       y/# t6        $ r Y 2w xY w#  Y xY w# |jo                          w xY w# |jo                          w xY w# t        $ r Y w xY w)0zJ
        Implement the {backend}-get-update-details functionality
        c                    g }t        j                  t        | t         j                  t         j                  z        D ]@  }|j                  t        j                  t        |      D cg c]  }t        |z   c}       B t        j                  t        | t         j                  t         j                  z        D ]@  }|j                  t        j                  t        |      D cg c]  }t        |z   c}       B |S c c}w c c}w )zX
            Create a list of urls pointing to closed bugs in the changelog
            )
r   findallMATCH_BUG_CLOSES_DEBIAN
IGNORECASE	MULTILINEextendMATCH_BUG_NUMBERSHREF_BUG_DEBIANMATCH_BUG_CLOSES_UBUNTUHREF_BUG_UBUNTU)	changelogurlsrbugs       r   get_bug_urlsz;AptPackageKitWorker.get_update_detail.<locals>.get_bug_urls  s     DZZ 7 " <> @ZZ(91=?s_s2 ? @@ ZZ 7 " <> @ZZ(91=?s_s2 ? @@ K??s   'C?
$D
c                     t        j                  t        | t         j                        D cg c]  }t        |z   c}S c c}w )zZ
            Create a list of urls pointing to cves referred in the changelog
            )r   rM  	MATCH_CVErP  HREF_CVE)rV  cs     r   get_cve_urlsz;AptPackageKitWorker.get_update_detail.<locals>.get_cve_urls  s=     +-**Y	57\\+C DQHqL D D Ds   ?r   Fr
   Cr   UTF-8rF  ;Replaces)><)re  )rd  r)  stabletestingunstablezlinux-image-)libc6dbuszDir::Cache::Changelogsr   z
Dir::Cache
Changelogs_z.gzzReading changelog from cacherbzDownloading changelogz%s_*wb)mode
z 
z	    %s  
zH(?P<source>.+) \((?P<version>.*)\) (?P<dist>.+); urgency=(?P<urgency>.+)r1  =z

z  z%s

z --z  
zM^ -- (?P<maintainer>.+) (?P<mail><.+>)  (?P<date>.+) (?P<offset>[-\+][0-9]+)$datez%a, %d %b %Y %H:%M:%SN)Ir   r:  rP   
StatusEnumDOWNLOAD_CHANGELOGr   r   lenlocale	getlocaleLC_TIME	setlocale_iterate_mainloop_get_package_by_idr.  r2  r6  
isinstancebytesdecoder   r1  architecturer   r  get_dependenciesr   KeyErrorrelationr/  r0  _get_id_from_versionaddrI  NONEUpdateStateEnumUNKNOWNr7  r4  STABLETESTINGUNSTABLEr   rJ  configfind_dirr   r   r   r   r   r   gzipopenreadcloseget_changelogstrmakedirsglobremovewriteencoder   source_namer   r   groupdatetimestrptime
ValueError	isoformatemit_update_detail)%r~   r   package_idsrZ  r_  totalcount
old_localepkg_idr   installed_originupdates	obsoletes	dep_groupdepobscmpobs_idvendor_urlsrestartupdate_textstater4  issuedupdatedchangelog_dirr   changelog_rawchangelog_filer   old_changelogrV  liner   rr  bugzilla_urlscve_urlss%                                        r   r   z%AptPackageKitWorker.get_update_detail  s   		D !!}}??K %%fnn5
-! O	=F""$"S[50ENQJE))&1C}}$$#&==#8#8#;#A#A .6'7'>'>w'G$#% (+#--2G2G(+(B(B(8: ;G I}}!$!?!?
!K .I( .%"&++chh"7C  #}}$<<")"9"9 # 5 5 ##-C  #axCLLJ,F (!$qS\\U-B (!$qS\\U-B (!%!:!:3==!I!f-+... Knn))GK&&..E#--"7"7":"B"BMM))!,22h>--//2::h&..55E	)..66E
*..77EFG ##N3HH 112>>000#NN334LMM# "W^^-D-D FM .N-9!; ww||M25((25--2G2G%IJH Mww~~h':;!%8T!:+$2$7$7$9$@$@$IM #((* 34 # 1 1 3 "-5$1$8$8$AMww~~m4KK.'',,}fsxx6GH%)YYw%7 JMIIbggll=-HIJ!%8$!?+"(()=)=g)FG"((*I%++D1 !32:&I!44I??3==#<#<=HH &M%)+E  5;;y3I3636u{{97M3N4O$P PK __T*  8d?2K__U+6)KHH &M%)+E ! !'0099%++f:M;E F
 "^^-F""&.."2C!3D  (3M#I.H$$VWi%2Hg%0)%*FG=YO	=` 	4s  ( %$%l"((*& #((*@ & ! !sH   "_?_= _1/`	_	_	___.1`	``c           	      J   d|_         |D ]  }| j                  |      }|j                  }|r%|d   j                  dv r|d   j                  dv rd}nd}| j                  |j                        }|j                  ||||j                  |j                  |j                          y)z=Implement org.freedesktop.PackageKit.Transaction.GetDetails()r   r   mainuniverser(  freerF   N)r   _get_version_by_idr2  	componentr3  r   packageemit_detailsdescriptionhomepagesize)r~   r   r  r  r1  r2  licenser  s           r   r   zAptPackageKitWorker.get_details  s    ! 	?F--f5GooGAJ((,@@AJ%%)== #++GOO<Evww7J7J&//?	?r   c                     d| _         | j                         D ]'  }| j                  ||      s| j                  ||       ) y)z>Implement org.freedesktop.PackageKit.Transaction.GetPackages()r   N)r   r   _is_package_visibler   )r~   r   rv   r   s       r   r   z AptPackageKitWorker.get_packages  sA    ))+ 	/C''W5""5#.	/r   c                 z   t         j                  |_        d|_        d| _        |D ]8  }	 | j                  |      }| j                  ||      r| j                  ||       : y# t        $ r Y nw xY w	 | j                  |   }| j                  |||       o# t        $ r t        t         j                  d|      w xY w)z:Implement org.freedesktop.PackageKit.Transaction.Resolve()r   Fz&Package name %s could not be resolved.N)r   STATUS_QUERYr   r   r:  r  _is_version_visible_emit_pkg_versionr  r   r   r  r   ERROR_NO_PACKAGE)r~   r   rv   packagesr   r1  r   s          r   r   zAptPackageKitWorker.resolve  s    !..  	ID11$7 ++GW=**5':	I  Ikk$' 33E7CH  ;'
(C(C)459; ;;s   A""	A.-A.2B%B:c                     dt         j                  j                  f fd	 fd}t        j                   _        d_        d _        ddg}t        j                  d   r|j                  d	       |D ]  } j                  |      } |j                  | D ]  }	|	j                  D ]  }
 j                  j                  |
j                         r4 j                  j#                  |
j                         D ]  } |||
        \|
j                    j                  v r! | j                  |
j                      |
        |

          y)zrEmit all dependencies of the given package ids.

        Doesn't support recursive dependency resolution.
        Nc                    t         j                  j                  |v ry|rM|j                  j                  }t        |t         j                  j                        }j                  ||      syd}| j                  r| j                  | j                  }n| j                  }j                  | j                  d|dt         j                  j                  |       y)z`Send a blocked package signal for the given
            apt.package.BaseDependency.
            NrF  rb  z;;)rP   rh   ri   r  summaryr   rj   r  r  r1  emit_packager   r   r   )base_dependencyr   rv   r  r1  r~   r   s        r   emit_blocked_dependencyz@AptPackageKitWorker.get_depends.<locals>.emit_blocked_dependency  s    
 }}&&'1--//)'2==3N3NO//W=''$3$<$<$3$;$;= *11O,@,@'J!{{22G=r   c                 b   j                  |       sy|j                  rd}t        | j                        }| j                  r7|j                  | j                         |j                  d| j                         | j                  r7|j                  | j                         |j                  d| j                         |D ]M  }t        j                  |j                  |j                  |j                        s9j                  |       d} n |s ||        yyj                  |        y)zCheck if the given apt.package.Package can satisfy the
            BaseDepenendcy and emit the corresponding package signals.
            NFr   T)r  r1  r   r-  r.  r  insertr  r/  	check_depr  r  r   )	r   base_dep	satisfiedver_listdep_verr  rv   r~   r   s	        r   check_dependencyz9AptPackageKitWorker.get_depends.<locals>.check_dependency  s     ++C9!	  -==OOCMM2OOAs}}5==OOCMM2OOAs}}5' G(()1):):)1)9)9; ..ug>$(	 !+Hc7C ! ""5#.r   r   T
PreDependsDependszAPT::Install-Recommends
Recommends)rv   )rP   rh   r  r   STATUS_RESOLVING_DEPr   r   r:  r/  r  r   r  r  or_dependenciesr   is_virtual_packager   get_providing_packages)r~   r   rv   r  	recursiver  dependency_typesidr1  
dependencyr  providerr  s   ```         @r   get_dependszAptPackageKitWorker.get_depends  s<   
 :>,.MM,>,>	=,	/< !55()4>>34##L1 	AB--b1G6g668HI A
 * : : AH{{55hmmD(,(J(J ()/ AH,Xx@A "$++5(X]])CXN 0x8?AAA	Ar   c                    t         j                  | _        d| _        d| _        |D ]  }| j                  |      }| j                         D ]  }| j                  ||      s|j                  r|j                  }n|j                  r|j                  }j                  D ]j  }	d}
|	j                  D ]A  }|j                  j                  |j                  k(  s|j                  |j                  v s?d}
 n |
sX| j!                  ||           y)zhEmit all packages which depend on the given ids.

        Recursive searching is not supported.
        r   TFN)r   r  r   r   r:  r  r   r  is_installedr.  r  dependenciesr  r  r   r|   r   )r~   r   rv   r  r  r  r1  r   pkg_verr  r  r  s               r   get_requiresz AptPackageKitWorker.get_requires1  s   
 !55 	B--b1G--/ //W=##!mmG]]!mmG")"6"6 	J %I$.$>$> "#OO00HMMA (1A1A A(,I!	"
 !**5#6		r   c                      fd}t         j                  |_        d|_        d|_        |r t
        j                  j                  d      }nt        j                  d      }t        j                  j                  |      r$t        j                  |t        j                        st        t         j                   d|z         ||      D ]  \  }}}}	t#        |||	      }
 j%                  ||t&        j(                  j*                         	 |j-                  ||
       t        j                  j/                  |t        j                  j1                  |j2                              }|j5                  ||g        j%                  ||t&        j(                  j6                          y# t8        $ r(}t        t         j:                  t=        |            d}~ww xY w)	zjImplement the DownloadPackages functionality.

        The store_in_cache parameter gets ignored.
        c              3   \  K   d}d}g }| D ]^  }	j                  |      }|j                  st        t        j                  d|z        ||j
                  z  }|j                  ||f       ` |D ]9  \  }}|dz  |z  }||j
                  dz  |z  z   }||||f ||j
                  z  }; yw)zZCalculate the start and end point of a package download
            progress.
            r   zpackage %s isn't downloadabler   N)r  downloadabler   r   ERROR_PACKAGE_DOWNLOAD_FAILEDr  r   )
idsr  
downloadedr-  r  r  verstartendr~   s
            r   get_download_detailszCAptPackageKitWorker.download_packages.<locals>.get_download_detailsR  s      EJH /11"5+++"@@7"<> > %W./ $ 'C"S(50chhnu44#uc))chh&
	's   B)B,T
   zDir::Cache::archiveszaptdaemon-download)prefixz"The directory '%s' is not writableN)r   STATUS_DOWNLOADINGr   r:  r   r/  r  r  tempfilemkdtempr   r   isdiraccessW_OKr   r   r   r  rP   r   DOWNLOADINGfetch_binaryr   basenamer   
emit_filesFINISHED	Exceptionr  r  )r~   r   store_in_cacher  r  destr  r  r  r  r   r   errors   `            r   r   z%AptPackageKitWorker.download_packagesM  sz   
	'* "44 >>**+ABD##+?@Dww}}T""))D"''*B#J$C$C$H$(%)* * $8#D 	IBUC,UE3?H""5#r{{/F/FGI  x0
 ww||D"''*:*:3<<*HI  dV,&&uc2;;3G3GH	I
  J'<<c%jJ JJs   F%%	G.#GGc                 v    |D ]4  }| j                  |      }|j                  || j                  |             6 y)zEmit the Files signal which includes the files included in a package
        Apt only supports this for installed packages
        N)r{  r  r   )r~   r   r  r  r   s        r   r   zAptPackageKitWorker.get_files  s@      	AB))"-CR!:!:3!?@	Ar   c                    | j                          d}t        j                  |      }| j                  j	                  dg       D ]a  }t
        j                  dt        |      t        |             |D ]1  }	  || j                  ||      D ]  }	| j                  |||	        d}3 c |sN|t        j                  j                  k7  r0t        t        j                  dt        j                  |      z        yy# t        $ r Y w xY w)z@Emit all packages which provide the given type and search value.Fr   z"calling what_provides plugin %s %sTz Query type '%s' is not supportedN)_init_pluginsrP   provides_enum_to_string_pluginsgetr   r   r  r   r   NotImplementedErrorrz   r{   r   r   ERROR_NOT_SUPPORTED)
r~   r   rv   provides_typerx   supported_typeprovides_type_strpluginsearch_itemr  s
             r   r   z!AptPackageKitWorker.what_provides  s   66}E mm''< 	FKK<FS\3% #)$++7H*5$7 L225'7KL &*N	 -2??3F3F"F#J$B$B$F$&$>$>}$M%NO O #G~	 + s   6.C99	DDc           	         |st        t        j                  d      |j                         }t	        |      dk  s|d   dvrt        t        j                  d|z        | j                  ||d   |d   |d   |dd d	d       y)
zEnable or disable a repository.z)Disabling repositories is not implemented   r   )debzdeb-srcz Unknown repository ID format: %sr
   r   NrF  )r   r   r  r   ru  add_repository)r~   r   repo_idenabledfieldss        r   r   zAptPackageKitWorker.repo_enable  s    #J$B$B%23 3 v;?fQi/AA#..2W<> > 	E6!9fQi"12JD	2r   c                 "   |t         j                  j                  k7  rt        t        j
                  d|z        	 t        j                  d   }| j                  |||       y# t        $ r" t        j                         d   dk(  rd}nd}Y >w xY w)zInstall an archive key.zType %s is not supportedAPTDAEMON_KEYSERVERr   r*  zhkp://keyserver.ubuntu.com:80zhkp://keys.gnupg.netN)rP   SigTypeEnumGPGr   r   r  r   environr  platformdistadd_vendor_key_from_keyserver)r~   r   sig_typekey_id
package_id	keyservers         r   r   z%AptPackageKitWorker.install_signature  s    r~~)))#J$B$B$>$IK K	3

#89I 	**5&)D  	3}}q!X-;	2			3s   A# #(BBc                    |j                   r;|j                   d   j                  }t        |t              r|j	                  d      }nd}|j
                  | j                  dfv r|j                  j                  }n(|j                  j                  j                  d      d   }|d|j                  d|j
                  d|}|S )z9Return the package id of an apt.package.Version instance.r   ra  rF  all:rb  )r2  r6  r|  r}  r~  r  NATIVE_ARCHr  r   r   r1  )r~   r1  r3  r   r  s        r   r  z(AptPackageKitWorker._get_id_from_version  s    ??__Q'--F&%(w/FD$4$4e#<<??''D??''--c215D"GOO%22F<	r   c                    |j                   r|r*|j                  r| j                  ||j                  |       y|j                   r| j                  ||j                  |       yt        j                  d|j                  z         y)zA
        Send the Package signal for a given apt package
        z"Package %s hasn't got any version.N)r  r  r  r.  r   r   r   )r~   r   r   r   r   s        r   r   z!AptPackageKitWorker._emit_package  s`       O""5#-->""5#-->KK<sxxGHr   c                    | j                  |      }|j                  j                  d      d   }|s||j                  j                  k(  r;|dk(  rt
        j                  j                  }nUt
        j                  j                  }n:|dk(  rt
        j                  j                  }nt
        j                  j                  }|j                  |||j                         y)z9Emit the Package signal of the given apt.package.Version.r   rI   N)r  sectionr   r  r.  rP   r   COLLECTION_INSTALLEDri   COLLECTION_AVAILABLE	AVAILABLEr  r  )r~   r   r1  r   r  r0  s         r   r  z%AptPackageKitWorker._emit_pkg_version  s    &&w///'',R0'//333n,;;;;D;;00Dn,;;;;D;;00D4W__5r   c                 p    |j                   D ]'  }| j                  ||      s| j                  ||       ) y)z)Emit all available versions of a package.N)r-  r  r  )r~   r   rv   r   r1  s        r   r   z2AptPackageKitWorker._emit_all_visible_pkg_versions  s5    || 	7G''9&&ug6	7r   c                 P    | j                  ||      r| j                  |||       yy)z+
        Filter and emit a package
        Nr  r   )r~   r   rv   r   r   s        r   r   z)AptPackageKitWorker._emit_visible_package  s+     ##C1uc40 2r   c                 ^    |D ](  }| j                  ||      s| j                  |||       * y)z*
        Filter and emit packages
        Nr6  )r~   r   rv   pkgsr   r   s         r   _emit_visible_packagesz*AptPackageKitWorker._emit_visible_packages  s5      	5C''W5""5#t4	5r   c                     |D ]Q  }|| j                   v s| j                  | j                   |   |      s2| j                  || j                   |   |       S y)zb
        Find the packages with the given namens. Afterwards filter and emit
        them
        N)r   r  r   )r~   r   rv   r8  r   r   s         r   r   z2AptPackageKitWorker._emit_visible_packages_by_name  sU    
  	CD#,,T[[->H""5$++d*;TB	Cr   c                    |t         j                  j                  k(  ryt        |t         j                  j                        r|j
                  j                  |k7  ryt        |t         j                  j                        r|j
                  j                  |k7  ryt        |t         j                  j                        r|j
                  j                  |k(  ryt        |t         j                  j                        r| j                  |j
                        syt        |t         j                  j                        r| j                  |j
                        ryt        |t         j                  j                        r| j                  |      syt        |t         j                  j                        r| j                  |      ryt        |t         j                  j                         r| j#                  |j
                        syt        |t         j                  j$                        r| j#                  |j
                        ryt        |t         j                  j&                        r| j)                  |j
                        syt        |t         j                  j*                        r| j)                  |j
                        ryt        |t         j                  j,                        r| j/                  |j
                        syt        |t         j                  j0                        r| j/                  |j
                        ryt        |t         j                  j2                        r|j4                  | j6                  dfvryt        |t         j                  j8                        r|j4                  | j6                  dfv ryy)zTReturn True if the package version is matched by the given
        filters.
        TFr*  )rP   rh   r  r	   ru   r  r  ri   r.  rj   rq   _is_package_supportedrr   rk   _is_version_freerl   rm   _has_package_guirn   ro   _is_package_collectionrp   DEVELOPMENT_is_package_develNOT_DEVELOPMENTrs   r  r,  rt   )r~   r1  rv   s      r   r  z'AptPackageKitWorker._is_version_visible  s    bmm(((gr}}';';<))W4gr}}'>'>?))W4gr}}'B'BC))W4gr}}'>'>?..w?gr}}'B'BC**7??;gr}}'9'9:))'2gr}}'='=>%%g.gr}}'8'89))'//:gr}}'<'<=%%goo6gr}}'@'@A//@gr}}'D'DE++GOO<gr}}'@'@A**7??;gr}}'D'DE&&w7gr}}'9'9:$$T-=-=u,EEgr}}'='=>$$)9)95(AAr   c                    |t         j                  j                  k(  ryt        |t         j                  j                        r|j
                  syt        |t         j                  j                        r|j
                  ryt        |t         j                  j                        r| j                  |      syt        |t         j                  j                        r| j                  |      ryt        |t         j                  j                        r| j                  |      syt        |t         j                  j                        r| j                  |      ryt        |t         j                  j                        r| j                  |      syt        |t         j                  j                        r| j                  |      ryt        |t         j                  j                         r| j#                  |      syt        |t         j                  j$                        r| j#                  |      ryt        |t         j                  j&                        r| j)                  |      syt        |t         j                  j*                        r| j)                  |      ryt        |t         j                  j,                        rd|j.                  v ryt        |t         j                  j0                        rd|j.                  vryy)z;Return True if the package is matched by the given filters.TFr+  )rP   rh   r  r	   ri   r  rj   rq   r<  rr   rk   _is_package_freerl   rm   r>  rn   ro   r?  rp   r@  rA  rB  rs   r   rt   )r~   r   rv   s      r   r  z'AptPackageKitWorker._is_package_visibleE  s   bmm(((gr}}'>'>?$$gr}}'B'BC  gr}}'>'>?..s3gr}}'B'BC**3/gr}}'9'9:))#.gr}}'='=>%%c*gr}}'8'89))#.gr}}'<'<=%%c*gr}}'@'@A//4gr}}'D'DE++C0gr}}'@'@A**3/gr}}'D'DE&&s+gr}}'9'9:sxxgr}}'='=>388#r   c                 R    |j                   sy| j                  |j                         S )zWReturn True if we can be sure that the package's license is a
        free one
        F)r  r=  r~   r   s     r   rD  z$AptPackageKitWorker._is_package_freeu  s#     }}$$S]]33r   c                     |j                   }|xr^ |d   j                  dk(  xr |d   j                  dv xs& |d   j                  dk(  xr |d   j                  dk(  xr |d   j                  S )z_Return True if we can be sure that the package version has got
        a free license.
        r   r*  r  r)  r  )r2  r3  r  r7  )r~   r1  r2  s      r   r=  z$AptPackageKitWorker._is_version_free}  s     // #!*##x/ ?!*&&*>>2!*##x/ 1!*&&&0	#
 
""	$r   c                 H    |j                   j                  d      d   }|dk(  S )z3Return True if the package is a metapackge
        r   r/  rI   )r0  r   r~   r   r0  s      r   r?  z*AptPackageKitWorker._is_package_collection  s(     ++##C(,.((r   c                 ^    |j                   j                  d      d   j                         dv S )Nr   r/  )rD   r   r'   )r0  r   r  rF  s     r   r>  z$AptPackageKitWorker._has_package_gui  s-     {{  %b)//15LLLr   c                     |j                   j                  d      xsK |j                   j                  d      xs. |j                  j                  d      d   j	                         dv S )Nz-devz-dbgr   r/  )r   r)   )r   r5  r0  r   r  rF  s     r   rA  z%AptPackageKitWorker._is_package_devel  s]    !!&) LSXX->->v-F L!!#&r*0026KK	Mr   c                    |j                   sy|j                   j                  }|xr^ |d   j                  dk(  xr |d   j                  dv xs& |d   j                  dk(  xr |d   j                  dk(  xr |d   j                  S )NFr   r*  )r  
restrictedr)  r  )r  r2  r3  r  r7  )r~   r   r2  s      r   r<  z)AptPackageKitWorker._is_package_supported  s    }}--'' #!*##x/ A!*&&*@@2!*##x/ 1!*&&&0	#
 
""	$r   c                 <    | j                  |      }|j                  S )zReturn the apt.package.Package corresponding to the given
        package id.

        If the package isn't available error out.
        )r  r  )r~   r  r1  s      r   r{  z&AptPackageKitWorker._get_package_by_id  s     ))"-r   c                    |j                  dd      \  }}}}|r|| j                  dfvr|d|z  z  }	 | j                  |   }	 |j                  |   }|j                  |k7  r1t	        t
        j                  d|j                  |j                  |      |S # t        $ r t	        t
        j                  d|      w xY w#  t	        t
        j                  d|      xY w)zReturn the apt.package.Version corresponding to the given
        package id.

        If the version isn't available error out.
        rb     r*  z:%sz There isn't any package named %szVerion %s doesn't existz4Version %s of %s isn't available for architecture %s)r   r,  r   r  r   r   r  r-  r  r   r1  )r~   r  r   version_stringarchdatar   r1  s           r   r  z&AptPackageKitWorker._get_version_by_id  s     ,.88C+;(ndDD!1!15 99EDL D	*++d#C
	4ll>2G
 4'#J$?$?%:$'HHgootE E   	*#J$?$?$F$(* *	*	4#J$?$?$=$24 4s   B B< %B9<Cc                 F   t         j                  j                  t        j                  d   d|j
                  z        }	 t        |d      5 }|j                         j                  d      j                  d      }ddd       |S # 1 sw Y   S xY w# t        $ r g cY S w xY w)a  
        Return the list of unicode names of the files which have
        been installed by the package

        This method should be obsolete by the
        apt.package.Package.installedFiles attribute as soon as the
        consolidate branch of python-apt gets merged
        Dirzvar/lib/dpkg/info/%s.listrm  ra  rp  N)r   r   r   r/  r  r   r  r  r~  r   IOError)r~   r   r   ffiless        r   r   z(AptPackageKitWorker._get_installed_files  s     ww||GNN517#((BD	dD! =Q066t<= 	=   	I	s0    B /B;B B
B B B B c                     |j                   j                  d      d   }|t        v r	t        |   S t        j	                  d|j                   d|j
                         t        j                  j                  S )zT
        Return the packagekit group corresponding to the package's section
        r   r/  zUnkown package section z of )	r0  r   rw   r   warningr   rP   	GroupEnumr  rI  s      r   r   z&AptPackageKitWorker._get_package_group  sa     ++##C(,''$W--MMs{{?BxxI J<<'''r   c                    | j                   yt        syi | _         t        j                  j                  t        j                               \  }}|D ]!  }t        j                  j                  |       # dD ]  }t        j                  d|      D ]l  }	 |j                         }t        j                  d|dt        |j                               | j                   j                  |g       j                  |       n  y# t        $ rD}t        j                  d|dt        |j                        dt        |             Y d}~d}~ww xY w)zjInitialize PackageKit apt backend plugins.
        Do nothing if plugins are already initialized.
        N)r   zpackagekit.apt.pluginszFailed to load z from plugin z: zLoaded )r  pkg_resourcesworking_setfind_pluginsEnvironmentr  iter_entry_pointsloadr  r   rZ  r  r#  r   
setdefaultr   )r~   distserrorsr#  plugin_nameentry_pointr  es           r   r  z!AptPackageKitWorker._init_plugins  s.    ==$ &11>>%%')v 	0D%%))$/	0, 	IK,>>,k ; 
I(--/F
 [%5%5!68 9((b9@@H
I	I
 ! MM#S)9)9%:CF#D Es   D	E:EEc                 n   t        |d      r| j                  j                         D ]t  }|j                  s|j                  r| j                  |j                        }n| j                  |j                        }||j                  j                  |j                  <   v t        j                  j                  | |||       t        |d      rj|j                  t        j                   k(  s:|j"                  t        j$                     s|j&                  t        j$                     r| j)                  |       yyy)z2Apply changes and emit RequireRestart accordingly.r   N)r   r   get_changesmarked_deletemarked_reinstallr  r.  r  r   pkg_id_cacher   r   rN   _apply_changesr   r   ROLE_UPGRADE_SYSTEMr  r   r   rC  )r~   r   fetch_rangeinstall_ranger   r  s         r   rn  z"AptPackageKitWorker._apply_changes  s     5)$ {{..0 >$$(<(<!66s}}EF!66s}}EF7=**3884> 	**4+8	: E9%ZZ:999^^J334]]:223&&u- 4 &r   )NTNFr  ))   2   )rt  Z   ).__name__
__module____qualname__r  rO   r   r   r   r   r   r   r   r   rC  r   r   r   r   r  r  r   r   r   r   r   r  r   r  r   r   r9  r   r  r  rD  r=  r?  r>  rA  r<  r{  r  r   r   r  rn  r   r   r   rL   rL      s   H0)0VE13f%8N8t@K&DPF*PDq5f?$/I4OAb82IhAO62 E "	I6"715C3j.`4
$)M
M	$8$
(I< 19%-.r   rL   c                   N    e Zd Zdej                  j
                  ddfiZd Zd Zy)GMetaReleasedownload-doneNr   c                 p    t         j                   j                  |        t        j                  | dd       y rr  )r   rO   r   r~   s    r   rO   zGMetaRelease.__init__#  s&    OO$$T*$$T5%8r   c                 P    t        j                  |        | j                  d       y )Nr{  )r   downloademitr}  s    r   r  zGMetaRelease.download'  s    $$T*IIo&r   )	rv  rw  rx  r   SignalFlags	RUN_FIRST__gsignals__rO   r  r   r   r   rz  rz    s/    ''*=*=*G*G*.*,*. /	9	'r   rz  c                  :    d}| D ]  }|dt        |      z  z  } |S )z4Return the bitfield with the given PackageKit enums.r   r   int)r   fieldenums      r   r   r   ,  s-    E  c$i Lr   c                 (    | dt        |      z  z  } | S )z&Add a PackageKit enum to a given fieldr   r  r  r  s     r   r   r   4  s    	Q#d)^ELr   c                 (    | dt        |      z  z  } | S )z)Remove a PackageKit enum to a given fieldr   r  r  s     r   r   r   :  s    ATN"ELr   c                 $    | dt        |      z  z  S )z<Return True if a bitfield contains the given PackageKit enumr   r  r  s     r   r	   r	   @  s    1D	>!!r   )U__doc__
__author__r  r  r  rv  loggingr   r"  r   r   r  timer/  gi.repositoryr   r   rP   r]  ImportErrorpkutilsr   r   r   r	   rF  r   r   re  r   r   r   r   	getLoggerr   UpdateManager.Core.MetaReleaser   rf   r!  r  XAPIAN_DB_PATHr  XAPIAN_DB_VALUESr
  r  r  R_OKr   rN  rR  rS  rT  rU  r\  r]  r[  ADMIN_TOOLSrJ  PROGRAMMINGCOMMUNICATIONSERVERSDOCUMENTATION
PUBLISHING	EDUCATIONELECTRONICSFONTSGAMESDESKTOP_GNOMEDESKTOP_OTHERGRAPHICSDESKTOP_KDELOCALIZATIONINTERNETSCIENCEOTHERNETWORKLEGACY
MULTIMEDIAACCESSORIESro   r  rw   rN   rL   rz  r   r   r   <module>r     s   5
      	  	     ! .* * ! & ,  	67 >   /JKX%	!I-  ryyBGG$/0 = " G6 6 	?='R\\%%='
BLL=' ((=' BLL&&	='
 $$=' ++=' R\\%%=' R\\%%=' 
2<<%%=' r||&&=' ''=' 2<<++=' ##=' R\\=' R\\='  R\\''!='" R\\%%#='$ r||))%='& %%'='( **)='* r||''+=', R\\!!-='. BLL,,/='0 R\\--1='2 BLL$$3='4 
2<<##5='6 bll!!7='8 ((9=': BLL;='< BLL$$=='> BLL--?='@ BLL!!A='B BLL  C='D BLLE='F 
2<<G='H BLL!!I='J R\\%%K='L r||""M='N $$O='P BLL$$Q='R 
2<<##S='T bll&&U='V BLL$$W='X r||##Y='Z bll&&[='\ R\\$$]='^ 
2<<""_='` BLL##a='b R\\%%c='d 
2<<##e='f R\\$$g='h ||''<<  LL&&<<%%LL$$||##\\!!LL--LL,,\\%%{=' @{.)-- {.|# 'w '"q(  M"  ! !  		s6   Z =Z) .Z7 Z&%Z&)Z43Z47[ ?[ 