xkddZddlmZddlZddlZddlZddlZddlZddlZddl m Z m Z m Z m Z mZmZmZmZddlmZddlmZGddeZGd d eZGd d eZd Zedkr edSdS)z;Classes for working with locally available Debian packages.)print_functionN)DictIterableListOptionalSetTupleUnioncast)gettext)BytesIOceZdZdZdS)NoDebArchiveExceptionz9Exception which is raised if a file is no Debian archive.N)__name__ __module__ __qualname____doc__-/usr/lib/python3/dist-packages/apt/debfile.pyrr#sCCCCrrceZdZdZed\ZZZZdZ d&dZ dZ dZ dZ ed Zed Zd'd Zd ZdZdZdZedZedZedZedZdZdZdZd(dZd'dZdZdZ edZ!edZ"e#dZ$e#d Z%d)d!Z&d"Z'd#Z(d$Z)d*d%Z*dS)+ DebPackagezA Debian Package (.deb file).rNc|tj}||_ttjd|_d|_d|_i|_ g|_ d|_ d|_ d|_ |r||dSdS)NF)aptCache_cacher apt_instDebFile_debfilepkgnamefilename _sections _need_pkgs_check_was_run_failure_string _multiarchopenselfr#caches r__init__zDebPackage.__init__0s =IKKE X-t44    #!  IIh       rcf|dd|zg|_t|_d|_||_t j|j|_|jj d}tj ||_ |j d|_d|_dS)zopen given debfilez open '%s'rcontrolPackageFN)_dbgr%set_installed_conflictsr'r#rr r!r0 extractdataapt_pkg TagSectionr$r"r&)r+r#r0s rr)zDebPackage.openBs ![8+,,,$'EE!!   (77 -'33I>> +G44~i0 #rc|j|SNr$r+keys r __getitem__zDebPackage.__getitem__Ps~c""rc||jvSr9r:r;s r __contains__zDebPackage.__contains__Tsdn$$rcg |jjfdn(#t$rt d|jzgcYSwxYwS)z$return the list of files in the deb.c8|jSr9appendname)itemdatafiless rz%DebPackage.filelist..^sU\\$)5L5Lrz(List of files for '%s' could not be read)r!rFgo SystemError_r#)r+rGs @rfilelistzDebPackage.filelistXsy S M  ! !"L"L"L"L M M M M S S S@AADMQR R R R S "("A  A cg |jjfdn(#t$rt d|jzgcYSwxYwt S)z*return the list of files in control.tar.gzc8|jSr9rB)rErFr0s rrHz-DebPackage.control_filelist..isty8Q8Qrz0List of control files for '%s' could not be read)r!r0rIrJrKr#sorted)r+r0s @rcontrol_filelistzDebPackage.control_filelistcs  M ! $ $%Q%Q%Q%Q R R R R   DEE U    grMFcd|vr|S|js|S|j|r|S||jvrL|j|j:t t jj|j|jjdkr|S|d|j}||jvr|S|j|}|j|S|jj }|j |j zr|S|r|j |j zs|S|S)N:all) r(ris_virtual_package candidater rpackageVersion architecture_cand multi_archMULTI_ARCH_FOREIGNMULTI_ARCH_SAME)r+r"in_conflict_checkingmultiarch_pkgname multiarch_pkgcands r_maybe_append_multiarch_suffixz)DebPackage._maybe_append_multiarch_suffixqs '>>N N [ + +G 4 4 N t{ " " G$.:S[($+g*>*HIIVN'.ww@ DK / /$ $ $56  " *$ $&, ?T4 4 N  4;O)O N  rc j|dd|z|D]}|d}|d}|d}||}||jvr\|j|rA|dd|z|j|D] }|jrdS|j|j}|tj|j ||rdS|sL|j|d D]/}|jr&|dd |j d |d dS0d S)zReturn True if at least one dependency of the or-group is satisfied. This method gets an 'or_group' and analyzes if at least one dependency of this group is already satisfied. z_checkOrGroup(): %s rr/z+_is_or_group_satisfied(): %s is virtual depTN)include_nonvirtualzfound installed 'z' that provides ''F) r2rbrrUget_providing_packages is_installed installedr6 check_depversionrD) r+or_groupdepdepnameveroperpkginstppkgs r_is_or_group_satisfiedz!DebPackage._is_or_group_satisfieds !+x8999& $& $C!fGa&Cq6D99'BBGdk));11'::(IIH7R ${AA'JJ((+(#'444(;w'1DG$5dlD#$N$Ntt $ K>>? $ $D($ A#yyy'''3 $ttt $urc|D]}|\}}}||}||jvrV|j|sB|j|}t |dkrp|dj}|j|}|jj|j}|stj |j ||s| dd|z|j |dSd} |D]J}| |dz } |r|r| d|dd|dd z } ||t |dz kr| d z } K|xjt!d | zz c_d S) zTry to satisfy the or_group.rerrdzNeed to get: %sTrz ( )|z"Dependency is not satisfiable: %s F)rbrrUrhlenrD _depcacheget_candidate_ver_pkgr6rkver_strr2r%rCr'rK) r+rmrnrorprq providersrrraor_strs r_satisfy_or_groupzDebPackage._satisfy_or_groups  C!$ GS$99'BBGdk)){55g>> K>>wGG y>>Q&&#A,++g&C;(::38DDD $T\4==  IIa*W4 5 5 5 O " "7 + + +44  C c!f F 8t 8AA77hs8}}q0111#  "G H H6 QQurc |dd|d|d|d|j|}|jr|jJ|jj}n|jr|jJ|jj}ndStj|||r\| |||sE|xj td|j zz c_ |dd |j zd SdS) z@Return True if a pkg conflicts with a real installed/marked pkg.r/z"_check_single_pkg_conflict() pkg='z' ver='z' oper='rgNFz)Conflicts with the installed package '%s'z!conflicts with installed pkg '%s'T) r2rrirjrlmarked_installrVr6rkreplaces_real_pkgr'rKrD)r+r"rprqrrpkgvers r_check_single_pkg_conflictz%DebPackage._check_single_pkg_conflicts AwwTTT #   k'"   =,,,]*FF   =,,,]*FF5  VT3 / / 8N8N T39 9    @AACHL   IIaz=DebPackage.check_breaks_existing_packages..s 333AaDG333rrgY@Nrdzwould break (depends) %sz]Breaks existing package '%(pkgname)s' dependency %(depname)s (%(deprelation)s %(depversion)s))r"ro deprelation depversionFrzwould break (conflicts) %szZBreaks existing package '%(pkgname)s' conflict: %(targetpkg)s (%(comptype)s %(targetver)s))r" targetpkgcomptype targetverz{Breaks existing package '%(pkgname)s' that conflict: '%(targetpkg)s'. But the '%(debfile)s' provides it via: '%(provides)s',)rdebfilerr"T)!floatrzrmaxintr$r enumerate op_progressupdaterirjr} current_ver dependenciesor_dependenciesrDr"r6rkrelationrlr2r'rKdone depends_list target_pkgrY comp_type target_verjoinr#) r+sizestepsdebverdebarchrirrrpdep_orrnconflicts_ver_listc_ors rcheck_breaks_existing_packagesz)DebPackage.check_breaks_existing_packagessS%%&&Cr NNA&& *.033T]333 ,,N )N )FAs5yA~~ '..uQxx$/FGGG# =,,,(&C-4 ) )!1))Cx4<//&0s{SS) IIa)Cch)NOOO !00A!C55 ,/8+.8/2|.1k !! 5 00!K388:::#(5555'),c...*-*:;*G-)-)& 2,),) O0DL@@ $ < G G&0 &  -!% !-ICH-T U U U!% 4 4%C9"9" 03x151E0415 %"%" 9" !" 4 4!% 7 < < > > >',uuuu O0H<< $  8 8 IIa)E)PQQQ 00A!155 -0HHX,>,>+/=-1_-A+.8 !! 5 00!K388:::#(5555Y,)Z $$&&&trTc*|dd|jd}|jd}d||g}|jd}|dd|z||jvr|j|}|r|j |jj}n|s|j |jj}n|jS|Utj ||}|dd |z|d kr|j S|d kr|j S|d kr|j S|jS) a Compare the package to the version available in the cache. Checks if the package is already installed or availabe in the cache and if so in what version, returns one of (VERSION_NONE, VERSION_OUTDATED, VERSION_SAME, VERSION_NEWER). r/compare_to_version_in_cacher1rrSrXrez debver: %sNz"CompareVersion(debver,instver): %sr) r2r$rrrjrlrV VERSION_NONEr6version_compare VERSION_SAME VERSION_NEWERVERSION_OUTDATED)r+ use_installedr"rYrrrcachevercmps rrz&DebPackage.compare_to_version_in_caches7 !2333.+~n5 ((G\233 * !\F*+++ dk ! !+g&C )!:=0" )s}'@=0((#-h?? !ACGHHH!88,,1WW--1WW00  rc|ddd|_d|jvr,|ddtd|_dS|jd}|d kr|t jd kr{|t jvr7||_ |j d |j |_ |dd |zn/|dd td|z|_dS|sJ| |j kr-|j |j jrtd|_dSd|_|sdS|sdS||jsdS|sdS|j jjdkr/td|_|j dSdS)z$Check if the package is installable.r/checkTrrezERROR: no architecture fieldz$No Architecture field in the packageFrTzAPT::ArchitecturerSzFound multiarch arch: '%s'zERROR: Wrong architecture dude!zVWrong architecture '%s' -- Run dpkg --add-architecture to add it and update afterwardsz$A later version is already installedrrz1Failed to satisfy all dependencies (broken cache))r2r&r$rKr'r6configfindget_architecturesr(r"rrrrjrr_satisfy_dependsrr{ broken_countclear)r+allow_downgradearchs rrzDebPackage.checks( !W"  / / IIa7 8 8 8#$%K#L#LD 5~n- 5==TW^%8%89L%M%MMMw02222"&*.,,,H  !9D@AAAA !>???7  $u  0022d6KKK{4<(2 '()O'P'P$u "##%% 52244 5$$T\22 5##%% 5 ; - 1 1#$F$$D  K     5trcR|tj|dS)z-Satisfy the dependencies in the given string.F)rr6r)r+ dependsstrs rsatisfy_depends_strzDebPackage.satisfy_depends_str[s%$$W%::u%M%MNNNrc tj|jj}|n#t$rYnwxYw|D]/}||s||sdS0|jD]f} |j|d%#t$r5td|z|_ |j YdSwxYwdS)zSatisfy the dependencies.F) from_userzCannot install '%s'T) r6 ActionGrouprr{AttributeErrorrurr% mark_installrJrKr'r)r+r _actiongrouprmrrs rrzDebPackage._satisfy_depends`s ".t{/DEEL LL    D   ! !H..x88 !--h77! 55?  C  C --->>>>   '()>'?'?#'E$ !!###uuu ts # 00/!B:CCcx|dd|jz|jstd|jS)zReturn missing dependencies.rezInstalling: %s-property only available after check() was run)r2r%r&rr+s r missing_depszDebPackage.missing_depsxsC !%7888" R !PQQ Qrcjg}g}g}|jstd|jD]}|js|jrZ|jJ||jd}|jjD] }||j z} |s||j|j r||j|||fS)zGet the changes required to satisfy the dependencies. Returns: a tuple with (install, remove, unauthenticated) rNF) r&rrrmarked_upgraderVrCrDoriginstrusted marked_delete)r+installremoveunauthenticatedrr authenticatedorigins rrequired_changeszDebPackage.required_changess" R !PQQ Q; ( (C! 5S%7 5}000sx(((!& !m344F!V^3MM$5#**38444  ( ch'''11rczd}t|D](\}}|dzdkr|dz }|dt|zz })|S)NrPr z%2.2x )rord)in_datahexrcs rto_hexzDebPackage.to_hexsVg&& % %DAq2v{{t  8c!ff$ $CC rcd}t|tr7|D]3}t|dkst|dkr|dz }.||z }4n)|D]&}|dks|dkr|dz }|t|z }'|S)Nr rw) isinstancestrrchr)rsrbs r to_strishzDebPackage.to_strishs  gs # #   q66B;;#a&&3,,HAAFAA    r66QWWHAAQKAArc|dr |dd}||}|dr_|r]t|}t j|}t dd}||z } | dS#t$r,t d}|| |z }|cYSwxYw)Nz./rdz.gz)fileobjzAutomatically decompressed: zutf-8z,Automatically converted to printable ascii: ) startswithr5endswithr gzipGzipFilerKencodereaddecode Exceptionr) r+partrDauto_decompressauto_hexrFiogznew_datas r _get_contentzDebPackage._get_contents ??4  8D%% ==   O Br***B677>>wGGD BGGII D ;;w'' '   HIIH t,, ,HOOO s*B??3C54C5cf ||jj|S#t$rYdSwxYwz4return the content of a specific control.tar.gz filer)rr!r0 LookupErrorr+rDs rcontrol_contentzDebPackage.control_contentsD $$T]%:DAA A   22  " 00cf ||jj|S#t$rYdSwxYwr)rr!rFrrs r data_contentzDebPackage.data_contentsD $$T]%7>> >   22 rcV||jkrt|tjdSdS)z%Write debugging output to sys.stderr.)fileN)debugprintsysstderr)r+levelmsgs rr2zDebPackage._dbgs4 DJ   #CJ ' ' ' ' ' '  rc|jtjd|'tjtjddd|jS |n$#t$r|YnwxYw| |j} | n$#t$r| YnwxYw|S)zInstall the package.NzNo filename specifieddpkgz-i) r#r6ErrorosspawnlpP_WAIT start_updater startUpdaterun finish_update finishUpdate)r+install_progressrs rrzDebPackage.installs = - 788 8  #:bit}MM M / --////! / / / ,,..... /"&&t}55C 0 ..0000! 0 0 0 --///// 0Js$AA<;A<B//CCNNF)T)TTr9)+rrrrrangerrrrr r-r)r=r?propertyrLrQrbrurrrrrrrrrrrrrrrr staticmethodrrrrrr2rrrrrr's''EJE!HHA\#\= E    $ $ $ $###%%%X  X #!#!#!#!J000d+++ZB///BX  X XX>   ___B"!"!"!"!HDDDDLOOO 0X22X24\\&&((( rrcjeZdZdZd dZedZedZedZdZ d d Z dS) DscSrcPackagez#A locally available source package.Nct|d|||_g|_g|_t |_d|_g|_i|_ |j| |jdSdS)Nr) rr-r#_depends _conflictsr3r4r"binariesr$r)r*s rr-zDscSrcPackage.__init__szD$...   $'EE!   = $ IIdm $ $ $ $ $ % $rc|jSz&Return the dependencies of the package)r:rs rrzDscSrcPackage.dependss }rc|jSr>)r;rs rrzDscSrcPackage.conflicts s rcR|jddddS)z6Return the list of files associated with this dsc fileFilesrdNr/)r$splitrs rrLzDscSrcPackage.filelists( ~g&,,..qt!t44rcDddg}ddg}tj|}tj|}tj|} |D]}|D]9}||vr|jtj||:|D]9}||vr|jtj||:d|vr |d|_ d|vr*d|d dD|_ | D]}||vr|||j |< ~|n#~|wxYwtd |j d |j fz} | |j d <d |_d S)zOpen the package.z Build-DependszBuild-Depends-IndepzBuild-ConflictszBuild-Conflicts-IndepSourceBinaryc6g|]}|Sr)strip)rrs rrz&DscSrcPackage.open../s $Q$Q$Q1QWWYY$Q$Q$QrrzBInstall Build-Dependencies for source package '%s' that builds %s rw DescriptionFN)r6open_maybe_clear_signed_filer)fdopenTagFiler:rparse_src_dependsr;r"rBr<keysr$closerKrr&) r+r depends_tagsconflicts_tagsfdfobjtagfilesectagrs rr)zDscSrcPackage.opens()>? +-DE  1$ 7 7y}}/$''  7 7'NNC#~~ M(()B3s8)L)LMMMM)PPC#~~ O**7+DSX+N+NOOOOs??#&x=DLs??$Q$QH 8K8KC8P8P$Q$Q$QDM88::77Cczz.1#hs+7 7" JJLLLL JJLLLL T  \388DM22 3 4)*}%#s C'EEFc$|s\|jD]T}|j|jjrt t d|j|Ud|_| |j S)zCheck if the package is installable. The second parameter is ignored and only exists for compatibility with parent type.z%An essential package would be removedT) rr4rr} essentialrrK mark_deleter&rr)r+rr"s rrzDscSrcPackage.check=s ##%% 34 3 3;w',6P#A&M$N$NOOO G$002222"$$T\222rr2r3) rrrrr-r5rrrLr)rrrrr8r8s-- % % % %X X 55X5 !$!$!$F333333rr8chddlm}ddlm}|}d}t |d||||}t d|z|D]}t d|jzttj d|}t d |j z| s#t d t |j t d |jzt |jt |jt d ||}t |t%| }d} t |t)j| ddS)z Test functionr)r)InstallProgressz www-browserz virtual: zProviders for %s :z %srezDeb: %szcan't be satifiedzmissing deps: %szInstalling ...)r,z:libc6 (>= 2.3.2), libaio (>= 0.3.96) | libaio1 (>= 0.3.96)FN) apt.cacherapt.progress.baserZr!rUrhrDrr"argvr"rr'rrrLrr8rr6r) rrZr,vprrrdretrdss r_testrbOs 111111 EGGE B bbb%":":2">">"> ?@@@,,R00I  #$$$   ech38A;&&A )ai    7799! !""" a    q~ -... !  !*  ))OO%% & &C #JJJ E"""A EB !  W22u== > >?????r__main__)r __future__rrrr6r r)r"typingrrrrrr r r r rKrr IOErrorrobjectrr8rbrrrrrhs&BA%%%%%%  JJJJJJJJJJJJJJJJJJJJ DDDDDGDDDM M M M M M M M `U3U3U3U3U3JU3U3U3p$@$@$@N z EGGGGGr