
    ӭh                         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Z ej                  dd       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jF                  d      Z$	 ddl%m&Z& dZ'ejP                  jS                  dd      Z*e*dz   Z+e*dz   Z,dZ-	 ddl.Z. ej^                  e+ej`                        re$jc                  d       dZ-	 dZ2dZ3dZ4dZ5dZ6dZ7dZ8i dejr                  jt                  d ejr                  jv                  d!ejr                  jx                  d"ejr                  jz                  d#ejr                  j|                  d$ejr                  jv                  d%ejr                  jx                  d&ejr                  jx                  d'ejr                  j~                  d(ejr                  j                  d)ejr                  j                  d*ejr                  j                  d+ejr                  jv                  d,ejr                  j                  d-ejr                  j                  d.ejr                  j                  d/ejr                  jx                  i d0ejr                  j                  d1ejr                  j                  d2ejr                  jz                  d3ejr                  jx                  d4ejr                  j|                  d5ejr                  jx                  d6ejr                  jx                  d7ejr                  jx                  d8ejr                  j                  d9ejr                  jv                  d:ejr                  jx                  d;ejr                  jv                  d<ejr                  jx                  d=ejr                  j                  d>ejr                  j                  d?ejr                  j                  d@ejr                  j                  i dAejr                  j                  dBejr                  j                  dCejr                  jx                  dDejr                  j                  dEejr                  jv                  dFejr                  jx                  dGejr                  jx                  dHejr                  jx                  dIejr                  jx                  dJejr                  j                  dKejr                  jt                  dLejr                  j                  dMejr                  j                  dNejr                  j                  dOejr                  j                  dPejr                  jx                  dQejr                  j                  ejr                  j                  ejr                  j                  ejr                  j                  ejr                  j                  ejr                  jx                  ejr                  j                  ejr                  j                  ejr                  j                  ejr                  j                  ejr                  j                  dR
ZS G dS dTe"j                        ZUe'r G dU dVej"                  e&      ZVdW ZdX ZdY ZdZ 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)[a  
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PackageKitGlibz1.0)GObject)r      )bitfield_addbitfield_removebitfield_summarizebitfield_contains   )enums)TransactionFailed)DaemonAcquireProgress)	aptworkerzAptKit.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[                          | _.        dg| _/        y )Nzapplication/x-deb)0r   	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
mime_types)selfchrootload_pluginss      8/usr/lib/python3/dist-packages/aptkit/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)$aptkit_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`   #22''. ::555 }}\%>%>? ;""5#';;t/E/Ec/J1/M#N#%;;#9#9;; }}\%@%@A =""5#';;t/E/Ec/J1/M#N#%;;#;#;== }}\%=%=> 9""5#';;t/E/Ec/J1/M#N#%;;#7#799 }}\%<%<= 9""5#';;t/E/Ec/J1/M#N#%;;#7#799 }}\%>%>? O""5#';;t/E/Ec/J1/M#N#%;;#7#7 # OO }}\%@%@A 9""5#';;t/E/Ec/J1/M#N#%;;#:#:37 # 99
 }}\%;%;< N""5#';;t/E/Ec/J1/M#N#%;;#6#6 # NN ,, P""5$++c*:#%;;#8#8$ # PP (77EL EN%22EJ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   ::333#L$>$>%./ / ==!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#L$>$>$=$)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_files4  s/   
 u GGNN./%gr}}/F/FG KK() O" 0&&s+$x|';';C'GGG&1G&&w/0 '
4G#VSXXo-FHCKK+,!''JOO/9@H%113NFF""a'
 ##FLLN333E74@B ((I(I396(BD D  	,H""3' 8#3#3C#??$x/""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_groupsn  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>.matchesz  s!    " !% ! r   r   N)r   listr   keys_emit_all_visible_pkg_versions)r{   r   rv   rx   r   pkg_names         r~   r   z AptPackageKitWorker.search_namesx  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   r.  r0  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  r/  marked_upgrader   rP   r   r   NORMALr1  r0  r4  r3  r2  SECURITYr   r   r   ENHANCEMENTBUGFIX_emit_require_restart)r{   r   rv   r5  r   r   candidate_originr1  r0  r4  r3  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~   r@  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   rJ  	MATCH_CVErM  HREF_CVE)rS  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-8rC  ;Replaces)><)rb  )ra  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>.+)r.  =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   r7  rP   
StatusEnumDOWNLOAD_CHANGELOGr   r   lenlocale	getlocaleLC_TIME	setlocale_iterate_mainloop_get_package_by_idr+  r/  r3  
isinstancebytesdecoder   r.  architecturer   r  get_dependenciesr   KeyErrorrelationr,  r-  _get_id_from_versionaddrF  NONEUpdateStateEnumUNKNOWNr4  r1  STABLETESTINGUNSTABLEr   rG  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_idsrW  r\  totalcount
old_localepkg_idr   installed_originupdates	obsoletes	dep_groupdepobscmpobs_idvendor_urlsrestartupdate_textstater1  issuedupdatedchangelog_dirr   changelog_rawchangelog_filer   old_changelogrS  liner   ro  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 &N%)+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_idr/  	componentr0  r   packageemit_detailsdescriptionhomepagesize)r{   r   r  r  r.  r/  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   r7  r  _is_version_visible_emit_pkg_versionr  r   r   r~  r   ERROR_NO_PACKAGE)r{   r   rv   packagesr   r.  r   s          r~   r   zAptPackageKitWorker.resolve  s    #00  	ID11$7 ++GW=**5':	I  Ikk$' 33E7CH  ;'(E(E)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.
            NrC  r_  z;;)rP   rh   ri   r  summaryr   rj   r  r  r.  emit_packager   r   r   )base_dependencyr   rv   r  r.  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  r.  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   r7  r,  r  r   r  r}  or_dependenciesr   is_virtual_packager   get_providing_packages)r{   r   rv   r  	recursiver  dependency_typesidr.  
dependencyr  providerr  s   ```         @r~   get_dependszAptPackageKitWorker.get_depends  s<   
 :>,.MM,>,>	=,	/< #77()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   r7  r  r   r  is_installedr+  r  dependenciesr  r  r   providesr   )r{   r   rv   r  r  r  r.  r   pkg_verr  r  r  s               r~   get_requiresz AptPackageKitWorker.get_requires4  s   
 #77 	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_detailsU  s      EJH /11"5+++$BB7"<> > %W./ $ 'C"S(50chhnu44#uc))chh&
	's   B)B,T
   zDir::Cache::archiveszaptkit-download)prefixz"The directory '%s' is not writableN)r   STATUS_DOWNLOADINGr   r7  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_packagesP  sz   
	'* $66 >>**+ABD##+<=Dww}}T""))D"''*B#L$E$E$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
  L' >>E
L LL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)rx  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 |s0t        t        j                  dt        j                  |      z        y# t        $ r Y tw 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   NotImplementedErrorr   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	 #L$D$D$F$&$>$>}$M%NO O 	 + s   6.C	C'&C'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   NrC  )r   r   r  r   rr  add_repository)r{   r   repo_idenabledfieldss        r~   r   zAptPackageKitWorker.repo_enable  s    #L$D$D%23 3 v;?fQi/AA#00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APTKIT_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~~)))#L$D$D$>$IK K	3

#56I 	**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   r^  rC  all:r_  )r/  r3  ry  rz  r{  r|  NATIVE_ARCHr  r   r   r.  )r{   r.  r0  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   r.  r   r  r.  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   r.  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
        Nr4  )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   r6  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{   r.  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>  r?  r@  rs   r   rt   )r{   r   rv   s      r~   r  z'AptPackageKitWorker._is_package_visibleH  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~   rB  z$AptPackageKitWorker._is_package_freex  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  )r/  r0  r  r4  )r{   r.  r/  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   )r.  r   r{   r   r.  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'   )r.  r   r  rD  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   r2  r.  r   r  rD  s     r~   r?  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  r/  r0  r  r4  )r{   r   r/  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  r.  s      r~   rx  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.
        r_     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   r.  )r{   r  r   version_stringarchdatar   r.  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'#L$A$A%:$'HHgootE E   	*#L$A$A$F$(* *	*	4#L$A$A$=$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.listrj  r^  rm  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 )	r.  r   rw   r   warningr   rP   	GroupEnumr  rG  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   rX  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   r@  )r{   r   fetch_rangeinstall_ranger   r  s         r~   rl  z"AptPackageKitWorker._apply_changes  s     5)$ {{..0 >$$(<(<!66s}}EF!66s}}EF7=**3884> 	**4+8	: E9%ZZ<;;;^^L556]]<445&&u- 6 &r   )NTNFr  ))   2   )rr  Z   ).__name__
__module____qualname__r  rO   r   r   r   r   r   r   r   r   r@  r   r   r   r   r  r  r   r   r   r   r   r  r   r  r   r   r7  r   r  r  rB  r;  r=  r<  r?  r:  rx  r  r   r   r	  rl  r   r   r~   rL   rL      s   H0(0T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 rp  )r   rO   r   r{   s    r~   rO   zGMetaRelease.__init__&  s&    OO$$T*$$T5%8r   c                 P    t        j                  |        | j                  d       y )Nry  )r   downloademitr{  s    r~   r}  zGMetaRelease.download*  s    $$T*IIo&r   )	rt  ru  rv  r   SignalFlags	RUN_FIRST__gsignals__rO   r}  r   r   r~   rx  rx     s/    ''*=*=*G*G*.*,*. /	9	'r   rx  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   7  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	   C  s    1D	>!!r   )W__doc__
__author__r  r  r  rs  loggingr   r   r   r   r  timer,  girequire_versiongi.repositoryr   r   rP   r[  ImportErrorpkutilsr   r   r   r	   rC  r   r   rc  r   r   r   r   	getLoggerr   UpdateManager.Core.MetaReleaser   rf   r  r  XAPIAN_DB_PATHr  XAPIAN_DB_VALUESr  r  r  R_OKr   rK  rO  rP  rQ  rR  rY  rZ  rY  ADMIN_TOOLSrG  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   rx  r   r   r~   <module>r     s   5
      	  	     
   #U + ! .* * # & ,  	34 >   /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,,\\%%{=' @z.)-- z.z# 'w '"o(  M"  ! !  		s6   Z2 [  [ 2Z=<Z= [
[[[