ÿØÿà JFIF    ÿÛ „  ( %"1!%)+...383,7(-.+  -+++--++++---+-+-----+---------------+---+-++7-----ÿÀ  ß â" ÿÄ     ÿÄ H    !1AQaq"‘¡2B±ÁÑð#R“Ò Tbr‚²á3csƒ’ÂñDS¢³$CÿÄ   ÿÄ %  !1AQa"23‘ÿÚ   ? ôÿ ¨pŸªáÿ —åYõõ\?àÒü©ŠÄï¨pŸªáÿ —åYõõ\?àÓü©ŠÄá 0Ÿªáÿ Ÿå[úƒ ú®ði~TÁbqÐ8OÕpÿ ƒOò¤Oè`–RÂáœá™êi€ßÉ< FtŸI“öÌ8úDf´°å}“¾œ6  öFá°y¥jñÇh†ˆ¢ã/ÃÐ:ªcÈ "Y¡ðÑl>ÿ ”ÏËte:qž\oäŠe÷󲍷˜HT4&ÿ ÓÐü6ö®¿øþßèô Ÿ•7Ñi’•j|“ñì>b…þS?*Óôÿ ÓÐü*h¥£ír¶ü UãS炟[AÐaè[ûª•õ&õj?†Éö+EzP—WeÒírJFt ‘BŒ†Ï‡%#tE Øz ¥OÛ«!1›üä±Í™%ºÍãö]°î(–:@<‹ŒÊö×òÆt¦ãº+‡¦%ÌÁ²h´OƒJŒtMÜ>ÀÜÊw3Y´•牋4ǍýʏTì>œú=Íwhyë,¾Ôò×õ¿ßÊa»«þˆѪQ|%6ž™A õ%:øj<>É—ÿ Å_ˆCbõ¥š±ý¯Ýƒï…¶|RëócÍf溪“t.СøTÿ *Ä¿-{†çàczůŽ_–^XþŒ±miB[X±d 1,é”zEù»& î9gœf™9Ð'.;—™i}!ôšåîqêÛ٤ёý£½ÆA–àôe"A$˝Úsäÿ ÷Û #°xŸëí(l »ý3—¥5m! rt`†0~'j2(]S¦¦kv,ÚÇ l¦øJA£Šƒ J3E8ÙiŽ:cÉžúeZ°€¯\®kÖ(79«Ž:¯X”¾³Š&¡* ….‰Ž(ÜíŸ2¥ª‡×Hi²TF¤ò[¨íÈRëÉ䢍mgÑ.Ÿ<öäS0í„ǹÁU´f#Vß;Õ–…P@3ío<ä-±»Ž.L|kªÀê›fÂ6@»eu‚|ÓaÞÆŸ…¨ááå>åŠ?cKü6ùTÍÆ”†sĤÚ;H2RÚ†õ\Ö·Ÿn'¾ ñ#ºI¤Å´%çÁ­‚â7›‹qT3Iï¨ÖÚ5I7Ë!ÅOóŸ¶øÝñØôת¦$Tcö‘[«Ö³šÒ';Aþ ¸èíg A2Z"i¸vdÄ÷.iõ®§)¿]¤À†–‡É&ä{V¶iŽ”.Ó×Õÿ û?h¬Mt–íª[ÿ Ñÿ ÌV(í}=ibÔ¡›¥¢±b Lô¥‡piη_Z<‡z§èŒ)iÖwiÇ 2hÙ3·=’d÷8éŽ1¦¸c¤µ€7›7Ø ð\á)} ¹fËí›pAÃL%âc2 í§æQz¿;T8sæ°qø)QFMð‰XŒÂ±N¢aF¨…8¯!U  Z©RÊ ÖPVÄÀÍin™Ì-GˆªÅËŠ›•zË}º±ŽÍFò¹}Uw×#ä5B¤{î}Ð<ÙD é©¤&‡ïDbàÁôMÁ." ¤‡ú*õ'VŽ|¼´Úgllº¼klz[Æüï÷Aób‡Eÿ dÑ»Xx9ÃÜ£ÁT/`¼¸vI±Ýµ·Ë‚“G³þ*Ÿû´r|*}<¨îºœ @¦mÄ’M¹”.œ«Y–|6ÏU¤jç¥ÕÞqO ˜kDÆÁ¨5ÿ š;ÐЦ¦€GÙk \ –Þ=â¼=SͧµªS°ÚÍpÜãQűÀõ¬?ÃÁ1Ñ•õZà?hóœ€ L¦l{Y*K˜Ù›zc˜–ˆâ ø+¾ ­-Ök¥%ùEÜA'}ˆ><ÊIè“bpÍ/qÞâvoX€w,\úªò6Z[XdÒæ­@Ö—€$òJí#é>'°Ú ôª˜<)4ryÙ£|óAÅn5žêŸyÒäMÝ2{"}‰–¤l÷ûWX\l¾Á¸góÉOÔ /óñB¤f¸çñ[.P˜ZsÊË*ßT܈§QN¢’¡¨§V¼(Üù*eÕ“”5T¨‹Âê¥FŒã½Dü[8'Ò¥a…Ú¶k7a *•›¼'Ò·\8¨ª\@\õ¢¦íq+DÙrmÎ…_ªæ»ŠÓœ¡¯’Ré9MÅ×D™lælffc+ŒÑ,ý™ÿ ¯þǤ=Å’Á7µ÷ÚÛ/“Ü€ñýã¼àí¾ÕÑ+ƒ,uµMâÀÄbm:ÒÎPæ{˜Gz[ƒ¯«® KHà`ߨŠéí¯P8Aq.C‰ à€kòpj´kN¶qô€…Õ,ÜNŠª-­{Zö’æû44‰sŽè‰îVíRœÕm" 6?³D9¡ÇTíÅꋇ`4«¸ÝÁô ï’ýorqКÇZ«x4Žâéþuïf¹µö[P ,Q£éaX±`PÉÍZ ¸äYúg üAx ’6Lê‚xÝÓ*äQ  Ï’¨hÍ =²,6ï#rÃ<¯–£»ƒ‹,–ê•€ aÛsñ'%Æ"®ÛüìBᝠHÚ3ß°©$“XnœÖ’î2ËTeûìxîß ¦å¿çÉ ðK§þ{‘t‚Ϋ¬jéîZ[ ”š7L¥4VÚCE×]m¤Øy”ä4-dz£œ§¸x.*ãÊÊ b÷•h:©‡¦s`BTÁRû¾g⻩‹jø sF¢àJøFl‘È•Xᓁà~*j¯ +(ÚÕ6-£¯÷GŠØy‚<Ç’.F‹Hœw(+)ÜÜâÈzÄäT§FߘãÏ;DmVœ3Àu@mÚüXÝü•3B¨òÌÁÛ<·ÃÜ z,Ì@õÅ·d2]ü8s÷IôÞ¯^Ç9¢u„~ëAŸï4«M? K]­ÅàPl@s_ p:°¬ZR”´›JC[CS.h‹ƒïËœ«Æ]–÷ó‚wR×k7X‰k›‘´ù¦=¡«‰¨¨Â')—71ó’c‡Ðúµ `é.{§p¹ój\Ž{1h{o±Ý=áUÊïGÖŒõ–-BÄm+AZX¶¡ ïHðæ¥JmÙ;…䡟ˆ¦ ° äšiÉg«$üMk5¤L“’çÊvïâï ,=f“"íἊ5ô¬x6{ɏžID0e¸vçmi'︧ºð9$ò¹÷*£’9ÿ ²TÔ…×>JV¥}Œ}$p[bÔ®*[jzS*8 ”·T›Í–ñUîƒwo$áè=LT™ç—~ô·¤ÈÚ$榍q‰„+´kFm)ž‹©i–ËqÞŠ‰à¶ü( ‚•§ •°ò·‡#5ª•µÊ﯅¡X¨šÁ*F#TXJÊ ušJVÍ&=iÄs1‚3•'fý§5Ñ<=[íÞ­ PÚ;ѱÌ_~Ä££8rÞ ²w;’hDT°>ÈG¬8Á²ÚzŽ®ò®qZcqJêäÞ-ö[ܘbň±çb“ж31²n×iƒðÕ;1¶þÉ ªX‰,ßqÏ$>•î íZ¥Z 1{ç൵+ƒÕµ¥°T$§K]á»Ûï*·¤tMI’ÂZbŽÕiÒ˜}bÓ0£ª5›¨ [5Ž^ÝœWøÂÝh° ¢OWun£¤5 a2Z.G2³YL]jåtì”ä ÁÓ‘%"©<Ôúʰsº UZvä‡ÄiÆÒM .÷V·™ø#kèýiíÌ–ª)µT[)BˆõÑ xB¾B€ÖT¨.¥~ð@VĶr#¸ü*åZNDŽH;âi ],©£öØpù(šºãö¼T.uCê•4@ÿ GÕÛ)Cx›®0ø#:ÏðFÒbR\(€€Ä®fã4Þ‰Fä¯HXƒÅ,†öEÑÔÜ]Öv²?tLÃvBY£ú6Êu5ÅAQ³1‘’¬x–HŒÐ‡ ^ ¸KwJôÖŽ5×CÚ¨vÜ«/B0$×k°=ðbÇ(Ï)w±A†Á† 11Í=èQšµ626ŒÜ/`G«µ<}—-Ö7KEHÈÉðóȤmݱû±·ø«Snmá=“䫚mݱŸ¡¶~ó·“äUóJæúòB|E LêŽy´jDÔ$G¢þÐñ7óR8ýÒ…Ç› WVe#·Ÿ p·Fx~•ݤF÷0Èÿ K¯æS<6’¡WШ; ´ÿ ¥Êø\Òuî†åÝ–VNœkÒ7oòX¨Á­Ø÷FÎÑä±g÷ÿ M~Çî=p,X´ ÝÌÚÅ‹’ÃjÖ.ØöÏñ qïQ¤ÓZE†° =6·]܈ s¸>v•Ž^Ý\wq9r‰Î\¸¡kURÒ$­*‹Nq?Þª*!sŠÆ:TU_u±T+øX¡ ®¹¡,ÄâÃBTsÜ$Ø›4m椴zÜK]’’›Pƒ @€#â˜`é¹=I‡fiV•Ôî“nRm+µFPOhÍ0B£ €+¬5c v•:P'ÒyÎ ‰V~‚Ó†ÖuókDoh$å\*ö%Ю=£«…aȼ½÷Û.-½VŒŠ¼'lyî±1¬3ó#ÞE¿ÔS¤gV£m›=§\û"—WU¤ÚǼÿ ÂnÁGŒÃ ‚õN D³õNÚíŒÕ;HôyÄÈ©P¹Ä{:?R‘Ô¨âF÷ø£bÅó® JS|‚R÷ivýáâ€Æé¡è³´IئÑT!§˜•ت‚¬â@q€wnïCWÄ@JU€ê¯m6]Ï:£âx'+ÒðXvÓ¦Úm=–´7œ $ì“B£~p%ÕŸUþ« N@¼üï~w˜ñø5®—'Ôe»¤5ã//€ž~‰Tþ›Å7•#¤× Íö pÄ$ùeåì*«ÓŠEØWEÈsßg ¦ûvžSsLpºÊW–âµEWöˬH; ™!CYõZ ÃÄf æ#1W. \uWâ\,\Çf j’<qTbên›Î[vxx£ë 'ö¨1›˜ÀM¼Pÿ H)ƒêêŒA7s,|F“ 꺸k³9Ìö*ç®;Ö!Ö$Eiž•¹ÒÚ†ýóéÝû¾ÕS®ó$’NÝäŸz¤5r¦ãÄÃD÷Üø!°ø‡Ô&@m™Ì^Ãä­d q5Lnÿ N;.6½·N|#ä"1Nƒx“ã<3('&ñßt  ~ªu”1Tb㫨9ê–›–bìd$ߣ=#ÕãÒmU¯eí$EFù5ýYô櫨æì™Ç—±ssM]·á¿0ÕåJRÓªîiƒ+O58ÖñªŠÒx" \µâá¨i’¤i —Ö ” M+M¤ë9‚‰A¦°Qõ¾ßøK~¼Ã‘g…Ö´~÷Ï[3GUœÒ½#…kàÔ®Ò”‰³·dWV‰IP‰Ú8u¹”E ÖqLj¾êÕCBš{A^Âß;–¨`¯¬ìö ˼ ×tìø.tƐm*n¨y4o&Àx¥n¦×î‡aupáÛj8¿m›è¶ã!o½;ß0y^ý×^EÑ¿ÒjzŒ­)vÚÑnÄL …^ªô× ‡—‚3k Îý­hï]içå–îÏ*÷ñþ»Ô CÒjøjÍznˆ´ ¹#b'Fô‹ ‰v¥'’à'T´ƒHýÍ%M‰ ƒ&ÆÇŒï1 ‘ –Þ ‰i¬s žR-Ÿ kЬá¬7:þ 0ŒÅÒÕ/aÙ¬ÃÝ#Úøœ ©aiVc‰. ¹¦ãµ” ›Yg¦›ÆÎýº°f³7ƒhá·¸­}&D9¡ÂsÉÙÞèŠõØàC™¨ñbFC|´Ü(ŸƒÚÒ-%»'a Ì¿)ËÇn¿úÿ ÞŽX…4ÊÅH^ôΑí@ù¹Eh¶“L8Çjù ¼ÎåVªóR©Ï5uà V4lZß®=€xÖŸ–ÑÈ ÷”¨°¾__yM1tÉ?uÆþIkÄgæ@þ[¢†°XÃJ£j·:nkÅ¢u ‘}âGzö­/IµèЬ¼48q¦F°ŽR¼=ûì{´¯RýicS ÕÛ íNtÍÙï£,w4rêì®»~x(©Uñ§#Ñ&œÕ¤>ÎåÍÓ9’Ö{9eV­[Öjâ²ãu]˜å2›qÑšÕJç0€sÄ|Êëè0튔bÁ>“{×_F`Ø©ºê:µä,v¤ðfc1±"«ÔÍän1#=· Âøv~H½ÐßA¾¿Ü€Óš]Õ; I¾÷ç‚Qi†î¹9ywÔKG˜áñ zQY—§ÃÕZ07§X‚ Áh;ÁM)iÌCH-¯T‘ë|A0{Ò½LÚ–TâÖkÜ’dÀ“rmm»”جPF³ÖcbE§T€ÒxKºû’Ó®7±²(\4ŽÃ¸Uu@j™yĵ;³µ!Á¢b.W¤=mõ´êµK k ¸K^ÜÛ#p*Ü14qkZç5ïë †°5Ï%ÍÛ<Õ¤×Ô¥ê†C Õ´¼ú$ƒÖ“”]Ù¬qÞÚ[4©ý!ûÏ—Áb쳐XµA¬â~`›Çr¸8ìùÝ䫦<>ä÷«?xs´ÇÑ /á;¹øüÊÈÙà{"@Žïzâ¬[âß‚ U_<ÇŸ½4èN˜ú61®qŠu ¦þF£»äJ_ˆÙÎ~ ÞAã–݄ϗrŠD;xTž‘ô`É«…suãO`?³à™ô Lý#Íc5öoæØ‚y´´÷«ZR§<&JÇ+éâô´€i!Àˆ0æAoàðLèÖ-2ŸõW.’t^–(KÁmHµV@xÜÇy®Ñø­â^:Ú3w· 7½¹°ñ¸â¹®:',«Mœ—n­Á+Ãbš LÈ‘ÄnRÓÅœ%¦²‰¨ùQ:¤f‚ "PÕtô¸…cæl…&˜Ú˜Ôkv‹ž+vŠ,=¢v­6—Xy*¥t£«<™:“aîϲ=¦6rO]XI¿Œ÷¤zÚ­›¶ 6÷”w\d ü~v®ˆÌk«^m<ÿ ¢‰Õ\)ùºŽ;… lîÙÅEŠ®cѾ@vnMÏ,¼“ñ•ŽBxðÃzãÇç%3ˆ"}Ù•Åî> BÉú;Ò]V+P˜F_´ßé> Øše|ï‡ÄOmFæÇ ãqÞ$/xÐx­z`ï9"œÜij‚!7.\Td…9M‡•iŽ‹¾‘50ÞŽn¥ß4ÉôO ¹*í^QêËÜÇÌ8=ާs‰'ÂëÙ«á%Pú[O †ÅP¯Vsް.‰,kc¶ ¬A9n˜XÎ-ÞšN["¹QÕ‰ƒMýÁߺXJæÍaLj¾×Ãmã¾ãÚ uñÒþåQô¦¥ /ÄUx:‚ÍÜ’ Đ©ØÝ3V¨‰ÕnÐ6ó*óúK­«…c ¯U òhsý­jóÔj#,ímŒRµ«lbïUTŒÑ8†Ä0œÏr`ð¡¬É Ї ë"À² ™ 6¥ f¶ ¢ÚoܱԷ-<Àî)†a¶ž'Ú»¨TXqØæ¶÷YÄHy˜9ÈIW­YÀuMFë ºÏ’AqÌ4·/Ú †ô'i$øä­=Ä Ý|öK×40è|È6p‘0§)o¥ctî§H+CA-“ xØ|ÐXАç l8íºð3Ø:³¤¬KX¯UÿÙ U ˎ^b@s dZddlmZddlZddlZddlZddlZddlZddlZzHddl m Z m Z m Z m Z mZmZmZmZe e e e eeeWnek rddZYnXddlmZddlmZGd d d eZGd d d eZGd ddeZddZedkredS)z;Classes for working with locally available Debian packages.)print_functionN)DictIterableListOptionalSetTupleUnioncastcCs|SN)typobjr r -/usr/lib/python3/dist-packages/apt/debfile.pyr 'sr )gettext)BytesIOc@seZdZdZdS)NoDebArchiveExceptionz9Exception which is raised if a file is no Debian archive.N)__name__ __module__ __qualname____doc__r r r rr/src@sPeZdZdZed\ZZZZdZ dEddZ ddZ d d Z d d Z ed dZeddZdFddZddZddZddZddZeddZeddZed d!Zed"d#Zd$d%Zd&d'Zd(d)ZdGd+d,ZdHd-d.Zd/d0Zd1d2Z ed3d4Z!ed5d6Z"e#d7d8Z$e#d9d:Z%dId;d<Z&d=d>Z'd?d@Z(dAdBZ)dJdCdDZ*dS)K DebPackagezA Debian Package (.deb file).rNcCs`|dkrt}||_ttjd|_d|_d|_i|_ g|_ d|_ d|_ d|_ |r\||dS)NF)aptCache_cacher apt_instDebFile_debfilepkgnamefilename _sections _need_pkgs_check_was_run_failure_string _multiarchopenselfr!cacher r r__init__?szDebPackage.__init__cCsh|dd|g|_t|_d|_||_t|j|_|jj d}t ||_ |j d|_d|_dS)z open given debfile z open '%s'rcontrolPackageFN)_dbgr#set_installed_conflictsr%r!rrrr- extractdataapt_pkgZ TagSectionr"r r$)r)r!r-r r rr'Os  zDebPackage.opencCs |j|Sr r"r)keyr r r __getitem__]szDebPackage.__getitem__cCs ||jkSr r4r5r r r __contains__aszDebPackage.__contains__csHgz|jjfddWn$tk rBtd|jgYSXS)z$return the list of files in the deb.cs |jSr appendnameitemdatafilesr rkz%DebPackage.filelist..z(List of files for '%s' could not be read)rr>go SystemError_r!r)r r?rfilelistes zDebPackage.filelistcsLgz|jjfddWn$tk rBtd|jgYSXtS)z, return the list of files in control.tar.gz cs |jSr r9r<r-r rrAxrBz-DebPackage.control_filelist..z0List of control files for '%s' could not be read)rr-rCrDrEr!sortedrFr rHrcontrol_filelistqs  zDebPackage.control_filelistFcCsd|kr |S|js|S|j|r&|S||jkr`|j|jdk r`ttjj|j|jjdkr`|Sd||jf}||jkr||S|j|}|jdkr|S|jj }|j |j @r|S|r|j |j @s|S|S)N:all%s:%s) r&ris_virtual_package candidater rpackageVersion architectureZ_candZ multi_archZMULTI_ARCH_FOREIGNZMULTI_ARCH_SAME)r)r in_conflict_checkingZmultiarch_pkgnameZ multiarch_pkgcandr r r_maybe_append_multiarch_suffixs<        z)DebPackage._maybe_append_multiarch_suffixc Cs|dd||D]}|d}|d}|d}||}||jkr|j|r|dd||j|D]}|jrldSqlq|j|j}|dk rt|j ||rdS|s|jj|dd D](}|jr|dd |j |fdSqqd 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)Zinclude_nonvirtualz'found installed '%s' that provides '%s'F) r/rUrrNget_providing_packages is_installed installedr3 check_depversionr;) r)or_groupdepdepnameveroperpkginstZppkgr r r_is_or_group_satisfiedsH       z!DebPackage._is_or_group_satisfiedc Cs|D]}|\}}}||}||jkrX|j|s4q|j|}t|dkrNq|dj}|j|}|jj|j}|sxqt |j ||sq| dd||j |dSd} |D]L}| |d7} |r|r| d|d|df7} ||t|dkr| d7} q|jtd | 7_d S) zTry to satisfy the or_group.rWrrVzNeed to get: %sTrz (%s %s)|z"Dependency is not satisfiable: %s F)rUrrNrXlenr; _depcacheZget_candidate_ver_pkgr3r[Zver_strr/r#r:r%rE) r)r]r^r_r`ra providersrbrTZor_strr r r_satisfy_or_groups@           zDebPackage._satisfy_or_groupcCs|dd|||f|j|}|jr>|jdk s4t|jj}n"|jr\|jdk sRt|jj}ndSt |||r| |||s|j t d|j 7_ |dd|j dSdS)z@Return True if a pkg conflicts with a real installed/marked pkg.r,z8_check_single_pkg_conflict() pkg='%s' ver='%s' oper='%s'NFz)Conflicts with the installed package '%s'z!conflicts with installed pkg '%s'T)r/rrYrZAssertionErrorr\marked_installrOr3r[replaces_real_pkgr%rEr;)r)r r`rarbpkgverr r r_check_single_pkg_conflicts2     z%DebPackage._check_single_pkg_conflictcCs|dd||D]}|d}|d}|d}|j|dd}||jkr|j|r|j|D]N}|dd|j|j|jkr|dd q`||j||r`|j |jq`q||||r|j |qt |jS) z5Check the or-group for conflicts with installed pkgs.rVz _check_conflicts_or_group(): %s rrWT)rSr,zconflicts virtual check: %szconflict on self, ignoring) r/rUrrNrXr;r ror1addbool)r)r]r^r_r`rarbr r r_check_conflicts_or_groups4    z$DebPackage._check_conflicts_or_groupcCs6d}zt|j|dWStk r0gYSXdS)z/List of packages conflicting with this package. ConflictsFNr3 parse_dependsr"KeyErrorr5r r r conflicts?s zDebPackage.conflictsc CsDg}dD]6}z|t|j|dWqtk r<YqXq|S)z2List of packages on which this package depends on.)ZDependsz Pre-DependsF)extendr3rur"rv)r)dependsr6r r rryIszDebPackage.dependscCs6d}zt|j|dWStk r0gYSXdS)zsz=DebPackage.check_breaks_existing_packages..rgY@NrVzwould break (depends) %sz]Breaks existing package '%(pkgname)s' dependency %(depname)s (%(deprelation)s %(depversion)s))r r_Z deprelationZ depversionFrszwould break (conflicts) %szZBreaks existing package '%(pkgname)s' conflict: %(targetpkg)s (%(comptype)s %(targetver)s))r targetpkgZcomptypeZ targetverz{Breaks existing package '%(pkgname)s' that conflict: '%(targetpkg)s'. But the '%(debfile)s' provides it via: '%(provides)s',)rzZdebfilerr T)"floatrfrmaxintr"rz enumerateZ op_progressupdaterYrZrkrhZ current_verZ dependenciesZor_dependenciesr;r r3r[Zrelationr\r/r%rEZdoneZ depends_listZ target_pkgrRZ comp_typeZ target_verjoinr!) r)sizeZstepsdebverZdebarchrzirbr`Zdep_orr^Zconflicts_ver_listZc_orr r rcheck_breaks_existing_packagess               z)DebPackage.check_breaks_existing_packagesTcCs|dd|jd}|jd}d||g}|jd}|dd|||jkr|j|}|rt|jd k rt|jj}n|s|jd k r|jj}n|jS|d k rt ||}|dd ||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_cacher.rrKrQrWz debver: %sNz"CompareVersion(debver,instver): %sr) r/r"rrrZr\rO VERSION_NONEr3Zversion_compare VERSION_SAME VERSION_NEWERVERSION_OUTDATED)r)Z use_installedr rRrrbZcacheverZcmpr r rrs.         z&DebPackage.compare_to_version_in_cachecCsD|ddd|_d|jkr6|ddtd|_dS|jd}|d kr|tjd kr|tkr||_ d |j |j f|_ |dd |n|dd td||_dS|s| |j kr|j |j jrtd|_dSd|_|sdS|sdS||js dS|sdS|j jjdkr@td|_|j dSdS)z$Check if the package is installable.r,checkTrrWzERROR: no architecture fieldz$No Architecture field in the packageFrLzAPT::ArchitecturerMzFound 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))r/r$r"rEr%r3ZconfigfindZget_architecturesr&r rrrrZr}r_satisfy_dependsryrgZ broken_countclear)r)allow_downgradeZarchr r rrsN           zDebPackage.checkcCs|t|dS)z-Satisfy the dependencies in the given string.F)rr3ru)r)Z dependsstrr r rsatisfy_depends_strQszDebPackage.satisfy_depends_strc Cszt|jj}|Wntk r*YnX|D]}||s0||s0dSq0|jD]L}z|j|jddWqVt k rt d||_ |j YdSXqVdS)zSatisfy the dependencies.F)Z from_userzCannot install '%s'T) r3Z ActionGrouprrgAttributeErrorrdrjr#Z mark_installrDrEr%r)r)ryZ _actiongroupr]rbr r rrVs"     zDebPackage._satisfy_dependscCs&|dd|j|js td|jS)zReturn missing dependencies.rWzInstalling: %s-property only available after check() was run)r/r#r$rrFr r r missing_depsns zDebPackage.missing_depscCsg}g}g}|jstd|jD]h}|js0|jrv|jdk s>t||jd}|jj D]}||j O}qV|sv||j|j r ||jq |||fS)zGet the changes required to satisfy the dependencies. Returns: a tuple with (install, remove, unauthenticated) rNF) r$rrrlZmarked_upgraderOrkr:r;ZoriginsZtrustedZ marked_delete)r)installremoveZunauthenticatedrbZ authenticatedoriginr r rrequired_changesxs&      zDebPackage.required_changescCs>d}t|D],\}}|ddkr(|d7}|dt|7}q |S)NrPr z%2.2x )rord)in_datahexrcr r rto_hexs  zDebPackage.to_hexcCsxd}t|trD|D].}t|dks.t|dkr8|d7}q||7}qn0|D]*}|dks\|dkrf|d7}qH|t|7}qH|S)Nr  ) isinstancestrrchr)rsrbr r r to_strishs    zDebPackage.to_strishc Cs|dr|dd}||}|dr\|r\t|}tj|d}tdd}||7}z | dWSt k rtd}|| |7}|YSXdS)Nz./rVz.gz)ZfileobjzAutomatically decompressed: zutf-8z,Automatically converted to printable ascii: ) startswithr2endswithrgzipZGzipFilerEencodereaddecode Exceptionr) r)partr;Zauto_decompressZauto_hexr>ioZgzZnew_datar r r _get_contents      zDebPackage._get_contentcCs.z||jj|WStk r(YdSXdSz6 return the content of a specific control.tar.gz file rN)rrr- LookupErrorr)r;r r rcontrol_contentszDebPackage.control_contentcCs.z||jj|WStk r(YdSXdSr)rrr>rrr r r data_contentszDebPackage.data_contentcCs||jkrt|tjddS)z%Write debugging output to sys.stderr.)fileN)debugprintsysstderr)r)levelmsgr r rr/s zDebPackage._dbgcCs|jdkrtd|dkr2ttjddd|jSz |Wntk rZ|YnX| |j}z | Wntk r| YnX|SdS)zInstall the package.NzNo filename specifiedZdpkgz-i) r!r3ErrorosspawnlpP_WAITZ start_updaterZ startUpdaterunZ finish_updateZ finishUpdate)r)Zinstall_progressr|r r rrs     zDebPackage.install)NN)F)T)F)TT)N)+rrrrrangerrrrrr+r'r7r8propertyrGrJrUrdrjrorrrwryrzr{rmr}rrrrrrr staticmethodrrrrrr/rr r r rr3sb    %/.!    Y $ ?     rc@sPeZdZdZdddZeddZeddZed d Zd d Z dddZ dS) DscSrcPackagez#A locally available source package.NcCsTt|d|||_g|_g|_t|_d|_g|_i|_ |jdk rP| |jdS)Nr) rr+r!_depends _conflictsr0r1r binariesr"r'r(r r rr+s zDscSrcPackage.__init__cCs|jSz&Return the dependencies of the package)rrFr r rryszDscSrcPackage.dependscCs|jSr)rrFr r rrwszDscSrcPackage.conflictscCs|jddddS)z6Return the list of files associated with this dsc fileZFilesrVNr,)r"splitrFr r rrG szDscSrcPackage.filelistc Cs$ddg}ddg}t|}t|}t|}z|D]}|D]$}||krJq<|jt||q<|D]$}||krtqf|j t||qfd|kr|d|_ d|krdd|d d D|_ | D]}||kr|||j|<qq4W5~|Xtd |j d |j f} | |jd <d |_dS)zOpen the package.z Build-DependszBuild-Depends-IndepzBuild-ConflictszBuild-Conflicts-IndepZSourceZBinarycSsg|] }|qSr )strip)rrr r rr'sz&DscSrcPackage.open..rzBInstall Build-Dependencies for source package '%s' that builds %s rZ DescriptionFN)r3Zopen_maybe_clear_signed_filerfdopenZTagFilecloserrxZparse_src_dependsrr rrkeysr"rErr$) r)rZ depends_tagsZconflicts_tagsfdZfobjZtagfileZsectagrr r rr'sB         zDscSrcPackage.openFcCsN|s<|jD],}|j|jjr,ttd|j|qd|_| |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) r}r1rrhZ essentialrrEZ mark_deleter$rry)r)rr r r rr6s  zDscSrcPackage.check)NN)F) rrrrr+rryrwrGr'rr r r rrs    $rc Csddlm}ddlm}|}d}td|||f||}td||D]}td|jqRtt j d|}td |j | std t|j td |jt|jt|jtd ||}t|t|d }d} t|t| ddS)z Test functionr)r)InstallProgressz www-browserz%s virtual: %szProviders for %s :z %srWzDeb: %szcan't be satifiedzmissing deps: %szInstalling ...)r*z:libc6 (>= 2.3.2), libaio (>= 0.3.96) | libaio1 (>= 0.3.96)FN)Z apt.cacherZapt.progress.baserrrNrXr;rrargvr rr%rrrGrrrr3ru) rrr*ZvprirbdZretrZdsr r r_testHs.         r__main__)rZ __future__rrrr3rrrtypingrrrrrrr r ImportErrorrrErrIOErrorrobjectrrrrr r r rs@ (  AY'