)uyc,k:dZddlZddlZddlZ ddlmZmZmZmZm Z m Z m Z m Z m Z mZmZmZmZmZmZmZn #e$rYnwxYwddlmZ ddlZ ejdZn#ej$rdZYnwxYwn #e$rdZYnwxYw ddlZejZn#e$rdZYnwxYw ddlZej Z!n#e$rdZ!YnwxYwddl"Z#e#j$j%Z%Gd d e&Z'Gd d e(Z)Gd de)Z*Gdde)Z+erGdde*Z,nGdde+Z,dZ-GddZ.GddZ/Gdde/Z0dZ1ee1Z2e1Z3d(dZ4ee4Z5[2[1dZ6dZ7ee7Z8dZ9ej:e9Z;ej:e9<d Z= d(d!Z>ee>Z?d"Z@ee@ZAd)d#ZBeeBZCd$ZDeeDZEd%ZFeeFZGd*d&ZHeeHZId'ZJeeJZKdS)+z2 Facilities to deal with Debian-specific metadata N)AnyAnyStrBinaryIODictIterableIterator GeneratorListMatchNoReturnOptionalPatternTextTextIOTupleUnion)function_deprecated_byTFc tdNzBuilt-in sha1 implementation not found; cannot use hashlib implementation because it depends on OpenSSL, which may not be linked with this library due to license incompatibilitiesNotImplementedErrorargss 7/usr/lib/python3/dist-packages/debian/debian_support.pynew_sha1rD! !"" "c tdrrrs r new_sha256rSrrcJeZdZdZfdZdZdZdZeeZ xZ S) ParseErrorzAn exception which is used to signal a parse failure. Attributes: filename - name of the file lineno - line number in the file msg - error message ct|tsJ||_||_||_t t ||dSN) isinstanceintfilenamelinenomsgsuperr!__init__)selfr&r'r( __class__s rr*zParseError.__init__msT &#&&&&&    j$((.....rc|jSr#)r(r+s r__str__zParseError.__str__ys xrc0d|j|j|jfzS)NzParseError(%r, %d, %r))r&r'r(r.s r__repr__zParseError.__repr__}s"'4=+/;+/8+55 5rc|d|j|j|jfz|dS)z0Writes a machine-parsable error message to file.z %s:%d: %s N)writer&r'r(flush)r+files r print_outzParseError.print_outs9 =DM4;#IIJJJ r) __name__ __module__ __qualname____doc__r*r/r1r6rprintOut __classcell__r,s@rr!r!bsu / / / / /555  &%i00HHHHHrr!ceZdZdZejdZdZdZdZ fdZ fdZ dZ d Z d Zd Zd Zd ZdZdZdZdZdZxZS) BaseVersionaBase class for classes representing Debian versions It doesn't implement any comparison, but it does check for valid versions according to Section 5.6.12 in the Debian Policy Manual. Since splitting the version into epoch, upstream_version, and debian_revision components is pretty much free with the validation, it sets those fields as properties of the object, and sets the raw version to the full_version property. A missing epoch or debian_revision results in the respective property set to None. Setting any of the properties results in the full_version being recomputed and the rest of the properties set from that. It also implements __str__, just returning the raw version given to the initializer. zd^((?P\d+):)?(?P[A-Za-z0-9.+:~-]+?)(-(?P[A-Za-z0-9+.~]+))?$) full_versionepochupstream_versiondebian_revisiondebian_versionc\t|trt|}||_dSr#)r$r?strr@r+versions rr*zBaseVersion.__init__s- g{ + + #'llG#rc|j|}|std|z|d)d|dvrtd|z||_|d|_|d|_|d|_dS)NzInvalid version string %rrA:rBrC)re_valid_versionmatch ValueErrorgroup_BaseVersion__full_version_BaseVersion__epoch_BaseVersion__upstream_version_BaseVersion__debian_revision)r+rHms r_set_full_versionzBaseVersion._set_full_versions  ! ' ' 0 0 D87BCC C 777   #qww7I/J/J(J(J87BCC C&www'' "#''*<"="=!"):!;!;rc||jvr+tt|||dS|dkrd}|dkr$|t |dS|t |}d|z}t ||}t||| |dS#t$r<t||||td|d|dwxYw)NrDrCr@_BaseVersion__%szSetting z to z results in invalid version) magic_attrsr)r? __setattr__rTrFgetattrsetattr_update_full_versionrM)r+attrvalueprivate old_valuer,s rrXzBaseVersion.__setattr__s2 t' ' ' +t $ $ 0 0u = = = F # # #$D > ! !  " "3u:: . . . . . E (4/Gg..I D'5 ) ) ) 2))+++++ 2 2 2gy111))+++ j$(DD%%%"1222  2s B66AC<c||jvr(tt||S|dkrd}d|z}t ||S)NrDrCrV)rWr)r?__getattribute__rY)r+r\r^r,s r __getattr__zBaseVersion.__getattr__s\ t' ' 'd++<>>>>>>rrceZdZdZejdZejdZejdZejdZ dZ e dZ e dZ e d Zd S) NativeVersionzBRepresents a Debian package version, with native Python comparisonz\d+|\D+z\d+z\dz[A-Za-z]c|dSt|tsE tt|}n'#t$r}td|d|d}~wwxYwt |jpd}t |jpd}||krdS||krdS||jpd|jpd}|dkr|S||jpd|jpdS)NzCouldn't convert z to BaseVersion: 0r) r$r?rFrMr%rA_version_cmp_partrBrC)r+rjelepochrepochress rrkzNativeVersion._compare0s- =1%-- / /#CJJ// / / / j$)EE11"./// /TZ&3''U['C(( F??2 F??1$$T%:%Ac%*%;%BsDD !88J%%d&:&Ac&+&;&BsDD Ds8 AAAc|dkrdS|j|rt|dzS|j|rt |St |dzS)z'Return an integer value for character x~rr)re_digitrLr%re_alphaord)clsxs r_orderzNativeVersion._orderOsm 882 <  a  q66A:  <  a  q66M1vv|rcfd|D}fd|D}|s|rFd}d}|r|d}|r|d}||krdS||krdS|D|FdS)Nc:g|]}|Sr.0rrs r z5NativeVersion._version_cmp_string..^# ( ( (cjjmm ( ( (rc:g|]}|Srrrs rrz5NativeVersion._version_cmp_string.._rrrrr)pop)rvavblalbabs` r_version_cmp_stringz!NativeVersion._version_cmp_string[s) ( ( (R ( ( ( ( ( ( (R ( ( ( B AA FF1II FF1II1uur1uuq B qrc|j|}|j|}|s|rd}d}|r|d}|r|d}|j|rI|j|r/t |}t |}||krdS||krdSn|||} | dkr| S||dS)Nrrrr)re_all_digits_or_notfindallr re_digitsrLr%r) rrrrrrravalbvalrs rrzNativeVersion._version_cmp_partms % - -b 1 1  % - -b 1 1 B AA FF1II FF1II}""1%% #-*=*=a*@*@ 1vv1vv$;;2$;;1--a33!88J# B $qrN)r7r8r9r:rrrrrrrk classmethodrrrrrrrr(sLL%2:j11 6""Irz%  Hrz*%%HDDD>  [ ["[rrceZdZdSVersionNr7r8r9rrrrr rrceZdZdSrrrrrrrrrcbt|}t|}||krdS||krdSdS)Nrrr)r)rrrrs rrrs9 B B Bwwr Bwwq 1rceZdZdZejdZejdZ d dZdZ dZ d d Z e e Z dS) PackageFilezmA Debian package file. Objects of this class can be used to read Debian's Source and Packages files.z+^([A-Za-z][A-Za-z0-9-_]+):(?:\s*(.*?))?\s*$z^\s+(?:\.|(\S.*?)\s*)$Nutf-8cb|t|d}||_||_d|_||_dS)zCreates a new package file object. name - the name of the file the data comes from file_obj - an alternate data source; the default is to open the file with the indicated name. Nrbr)opennamer5r'encoding)r+rfile_objrs rr*zPackageFile.__init__s9  D$''H     rc#K|}|xjdz c_g}|r&|ddkrB|s|d|Vg}|}|xjdz c_^|j|}|s|d|\}}|pd} |}|xjdz c_|j|}|r"|\}|d}|d|}nnd|||f|&|r|VdSdS)Nrz  zexpected package recordzexpected package fieldrd) _aux_read_liner'stripraise_syntax_errorre_fieldrLgroupsre_continuationappend)r+linepkgrLrcontents ncontentss r__iter__zPackageFile.__iter__s""$$ q  )zz%  D((G++,EFFF **,, q M''--E B''(@AAA$||~~ T8~2H **,, q ,22488#(<<>>LY ($& +388YY?HH  JJh' ( ( (7 )8  IIIII  rc|j}t|tr||jS|Sr#)r5readliner$bytesdecoder)r+rs rrzPackageFile._aux_read_linesBy!!## dE " " .;;t}-- - rc@||j}t|j||r#)r'r!r)r+r(r's rrzPackageFile.raise_syntax_errors" >[FFC000r)Nrr#)r7r8r9r:rrrrr*rrrrraiseSyntaxErrorrrrrrs rzHIIH bj!:;;O!!!!!&"""H1111 .-.@AArrcNeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d S) PseudoEnumz8A base class for types which resemble enumeration types.c"||_||_dSr#)_namer)r+rorders rr*zPseudoEnum.__init__s  rc0|jjd|jdS)N())r,r7rr.s rr1zPseudoEnum.__repr__s>222DJJJ??rc|jSr#)rr.s rr/zPseudoEnum.__str__s zrc"|j|jkSr#rris rrozPseudoEnum.__lt__{U\))rc"|j|jkSr#rris rrrzPseudoEnum.__le__{el**rc"|j|jkSr#rris rruzPseudoEnum.__eq__rrc"|j|jkSr#rris rrwzPseudoEnum.__ne__ rrc"|j|jkSr#rris rryzPseudoEnum.__ge__rrc"|j|jkSr#rris rr{zPseudoEnum.__gt__rrc*t|jSr#)r}rr.s rr~zPseudoEnum.__hash__sDK   rN)r7r8r9r:r*r1r/rorrrurwryr{r~rrrrrsBB@@@***++++++++++++***!!!!!rrc*eZdZdZiZ dfd ZxZS)Releasez Debian release defined with respect to its name, order of release and version. The latter can be empty in case of 'sid'. See https://www.debian.org/releases/ rdchtt|||||_dSr#)r)rr*rH)r+rrrHr,s rr*zRelease.__init__&s0 gt%%dE222 r)rd)r7r8r9r:releasesr*r<r=s@rrrsS H rrci}d}t|D]\}}|\}}t|||||<|t_|S)z* Returns dict of Debian releases ))buzzz1.1)rexz1.2)boz1.3)hammz2.0)slinkz2.1)potatoz2.2)woodyz3.0)sargez3.1)etchz4.0)lennyz5.0)squeezez6.0)wheezy7)jessie8)stretch9)buster10)bullseye11)bookworm12)trixie13)forky14)sidrd) enumeraterr)rrelsidxrelrrHs r list_releasesr/sX H D(dOO55S g sG44G Orc>|t}||Sr#) _release_listget)rrs rintern_releaserUs  <<  rct}|D]U}t|tr||-||dV|SNUTF-8)rr$rupdateencode hexdigestlinesrSls rread_lines_sha256rcsl A (( a   ( HHQKKKK HHQXXg&& ' ' ' ' ;;==rct}|D]U}t|tr||-||dV|Sr)rr$rrrrrs rread_lines_sha1rnsl A (( a   ( HHQKKKK HHQXXg&& ' ' ' ' ;;==rz^(\d+)(?:,(\d+))?([acd])$rc#Kt|}|}|D]'}|s#t|trtnt}||}|t d|z|\}}}t|} |dnt|} t|dkr| dz } | | dz} | | gfVt|dkr| t d|z| } n | dz } | | dz} g} |D]3} | dvrt d|z| d vrn| | 4| | | fV)dS) a1Converts source to a stream of patches. Patches are triples of line indexes: - number of the first line to be replaced - one plus the number of the last line to be replaced - list of line replacements This is enough to model arbitrary additions, deletions and replacements. Nzinvalid patch command: %rdrazinvalid patch argument: %r)rdrzend of stream in command: %r)z. .s. .) iterr$r _patch_re_b _patch_rerLrMrr%rr) sourcere_cmdipatch_rerrLfirst_last_cmdfirstlastrcs rpatches_from_ed_scriptr2s" V AH$#$# M&0u&=&=L{{9Ht$$ =84?@@ @$||~~F }tt#e** s88s??AIE|qy$# # # #  s88r>> !=!DEEEDDAIE|qy  AI~~ !?$!FGGG... LLOOOOdE"""""I$#$#rc&|D] \}}}||||<dS)z2Applies patches to lines. Updates lines in place.Nr)rpatchesr/r0rs r patch_linesr5s5 '!!d eDj!!rc|dz} t|d|5}|D]}|| dddn #1swxYwYtj||tj|rtj|dSdS#tj|rtj|wwxYw)Nz.newzw+r)rr3osreplacepathexistsunlink)rlocalr local_newnew_filers r replace_filer@sI! )TH 5 5 5 " " "q!!!! " " " " " " " " " " " " " " " " 9e$$$ 7>>) $ $ ! Ii  ! !27>>) $ $ ! Ii  !s-BA BABA B6Ccddl}ddlm}||5}||d5}|cdddcdddS#1swxYwY ddddS#1swxYwYdS)z[Downloads a file from a remote location and gunzips it. Returns the lines in the file.rNurlopenrt)mode)gzipurllib.requestrCr readlines)remoterFrCzfdgfds rdownload_gunzip_linesrLs. KKK&&&&&& #C YYsY & & ##==?? # # # # # # ######### # # # # # # # # ###################s4A4A A4A A4"A #A44A8;A8cJt|dz}t|||S)zCopies a gzipped remote file to the local system. remote - URL, without the .gz suffix local - name of the local file .gz)rLr@)rIr=rs r download_filerOs* "&5. 1 1E Lrc t|dd5}|}dddn #1swxYwYn1#t$r$|rtdt ||cYSwxYwg}i}ddlm}|dz}tjd } ||5} tt|| } dddn #1swxYwYn]#t$r$|rtd t ||cYSt$r$|rtd t ||cYSwxYwd d | Dvr*|rtdd} t|} t}n)|rtdd} t|} t}| D]}|D]\}}|| dzkr6| |\}}| |kr|rtd|ccSD|| dzkrU|D]?}|dkr | |\}}}|s|| kr||@|| dzkr=|D]'}|dkr | |\}}}|||<(|rtd|z|s"|rtd| t ||S|D]}|rtd|zt#|dz|zdz}||||krt%d|zt|}t'|t)|||}||krt%d|d|t+|||S)zjUpdates the local file by downloading a remote patch. Returns a list of lines in the local file. rrr7Nz1update_file: no local copy, downloading full filerrBz .diff/Indexz\s+z1update_file: could not interpret patch index filez0update_file: could not download patch index filezSHA256-Currentc"g|] }|D]\}}| Srr)rfieldskvs rrzupdate_file..%s)KKK&FKKSQqAKKKKrzupdate_file: using sha256SHA256zupdate_file: using sha1SHA1z-Currentz%update_file: local file is up-to-datez-Historyrdz-Patcheszupdate_file: field %r ignoredz*update_file: could not find historic entryz!update_file: downloading patch %rz.diff/rNzpatch %r was garbledzpatch failed, got z instead of )rrHIOErrorprintrOrGrCrrlistrr!rrsplit splitlinesrrLrMr5r2r@)rIr=verbose local_filerpatches_to_apply patch_hashesrC index_name re_whitespace index_url index_fieldsprefix local_hash read_linesrSfieldr] remote_hash_entry hist_hash patch_name patch_hashpatch_contentspatch_contents_unicodenew_hashs r update_filerrsF, %w / / / +:((**E + + + + + + + + + + + + + + + ,,,  G E F F FVU+++++, L'&&&&&-'JJv&&M , WZ  DI J B BCCL D D D D D D D D D D D D D D D ,,,  G E F F FVU+++++ ,,,  F D E E EVU+++++, KKLKKKKK  / - . . .&u-- &  - + , , ,$U++ $  ? ?$ ? ?NUEz)))#0#6#6u#=#= a,,GEFFF LLLLLz)))"--//<1D1DU1K1K.Y:(<9 +B+B(// ;;;z)))"--//::E{{ 2?2E2Ee2L2L/ZJ/9L,, ?5=>>>? ?B ,  L > K K KVU+++&KK  D 5 B C C C. X  *U 244 :n % %j)A A A3j@AA A!%n!5!5E12HIIJJJJz%  H;j$HHkk344 4 LshA5 A9A9A+A/.A/ C!C ? C CCCC+D1*D10D1cBi}|D] }|D]}d||< t|S)zdCreate an order set (represented as a list) of the objects in the sequences passed as arguments.T)sorted)rsrys r merge_as_setsrwosC A   AAaDD  !99rr#)r)F)Lr:r8os.pathrtypingrrrrrrr r r r r rrrrr ImportErrordebian.deprecationrrinitrError_sha1sha1r_sha256sha256rdebian._arch_tabledebian _arch_table DpkgArchTable Exceptionr!objectr?rrrrrrrr listReleasesrr internReleaserr readLinesSHA1 _patch_re_rawrr'rr&r2patchesFromEdScriptr5 patchLinesr@ replaceFilerLdownloadGunzipLinesrO downloadFilerr updateFilerw mergeAsSetsrrrrs88&   $   D 655555 NNN  = MMM "LLLzHH""""""""" "NNNJJ""""""""""0 '1'1'1'1'1'1'1'1THHHHH&HHHV > > > > >K > > >"\\\\\K\\\~      -         -      OBOBOBOBOBOBOBOBd.!.!.!.!.!.!.!.!bj$B&%m44   '&~66 '&77 - BJ} % % bj--g6677 9#9#9#9#v-,-CDD!!!$ #K 0 0  ! ! ! !%$\22  # # #-,-BCC   &%m44 kkkk\$ #K 0 0 %$]33 sf$5==A1 AA1 A-*A1,A--A11A;:A;? B BB B&&B10B1