Cfc,kdZddlZddlZddlZ ddlmZmZmZmZm Z m Z m Z m Z m Z mZmZmZmZmZmZmZddlmZ ddlZ ej2dZ ddlZej:Z ddlZej@Z!ddl"Z#e#jHjJZ%Gd d e&Z'Gd d e(Z)Gd de)Z*Gdde)Z+er Gdde*Z,n Gdde+Z,dZ-GddZ.GddZ/Gdde/Z0dZ1ee1Z2e1Z3d(dZ4ee4Z5[2[1dZ6dZ7ee7Z8dZ9ejte9Z;ejte9jyd Z= d(d!Z>ee>Z?d"Z@ee@ZAd)d#ZBeeBZCd$ZDeeDZEd%ZFeeFZGd*d&ZHeeHZId'ZJeeJZKy#e$rYwxYw#ej6$rdZYxwxYw#e$rdZYwxYw#e$rdZYwxYw#e$rdZ!YwxYw)+z2 Facilities to deal with Debian-specific metadata N)AnyAnyStrBinaryIODictIterableIterator GeneratorListMatchNoReturnOptionalPatternTextTextIOTupleUnion)function_deprecated_byTFctdNzBuilt-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! !" "ctdrrrs r new_sha256rSrrcDeZdZdZfdZdZdZdZeeZ 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 czt|tsJ||_||_||_t t ||yN) isinstanceintfilenamelinenomsgsuperr!__init__)selfr&r'r( __class__s rr*zParseError.__init__ms9 &#&&&    j$(.rc|jSr#)r(r+s r__str__zParseError.__str__ys xxrcNd|j|j|jfzS)NzParseError(%r, %d, %r))r&r'r(r.s r__repr__zParseError.__repr__}s('4==+/;;+/88+55 5rc|jd|j|j|jfz|j y)z0Writes a machine-parsable error message to file.z %s:%d: %s N)writer&r'r(flush)r+files r print_outzParseError.print_outs1 =DMM4;;#IIJ r) __name__ __module__ __qualname____doc__r*r/r1r6rprintOut __classcell__r,s@rr!r!bs( /5  &i0Hrr!ceZdZdZej dZdZdZdZ 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_versioncHt|tr t|}||_yr#)r$r?strr@r+versions rr*zBaseVersion.__init__s g{ +'lG#rcP|jj|}|std|z|jd!d|jdvrtd|z||_|jd|_|jd|_|jd|_y)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  ! ! ' ' 087BC C 777  #qww7I/J(J87BC C&www' "#''*<"=!"):!;rc||jvrtt|||y|dk(rd}|dk(r|j t |y| t |}d|z}t ||}t||| |jy#t$r0t||||jtd|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__s t'' ' +t 0u =  # #$D > !  " "3u: . E (4/Gg.I D'5 ) 2))+ 2gy1))+ $(%"122  2s 8B 9Ccv||jvrtt||S|dk(rd}d|z}t ||S)NrDrCrV)rWr)r?__getattribute__rY)r+r\r^r,s r __getattr__zBaseVersion.__getattr__sJ t'' 'drrceZdZdZej dZej dZej dZej dZ dZ e dZ e dZ e d Zy ) NativeVersionzBRepresents a Debian package version, with native Python comparisonz\d+|\D+z\d+z\dz[A-Za-z]c|yt|ts tt|}t |j xsd}t |j xsd}||kry||kDry|j |jxsd|jxsd}|dk7r|S|j |jxsd|jxsdS#t$r}td|d|d}~wwxYw)NzCouldn't convert z to BaseVersion: 0r) r$r?rFrMr%rA_version_cmp_partrBrC)r+rjelepochrepochress rrkzNativeVersion._compare0s =%- /#CJ/ TZZ&3'U[['C( F? F?$$T%:%:%Ac%*%;%;%BsD !8J%%d&:&:&Ac&+&;&;&BsD D / $)1".// /sC C)C$$C)c|dk(ry|jj|rt|dzS|jj|r t |St |dzS)z'Return an integer value for character x~rr)re_digitrLr%re_alphaord)clsxs r_orderzNativeVersion._orderOsW 8 <<  a q6A:  <<  a q6M1v|rc|Dcgc]}|j|}}|Dcgc]}|j|}}|s|rBc|jj|}|jj|}|s|rd}d}|r|jd}|r|jd}|jj |r=|jj |r"t |}t |}||kry||kDry|j ||} | dk7r| S|r|ry)Nrrrr)re_all_digits_or_notfindallr re_digitsrLr%r) rrrrrrravalbvalrs rrzNativeVersion._version_cmp_partms % % - -b 1  % % - -b 1BAAFF1IFF1I}}""1%#--*=*=a*@1v1v$;$;--a3!8J#B$rN)r7r8r9r:rrrrrrrk classmethodrrrrrrr(sL%2::j1 6"Irzz% Hrzz*%HD>  "rrc eZdZyVersionNr7r8r9rrrrr rrc eZdZyrrrrrrrrrcHt|}t|}||kry||kDryy)Nrrr)r)rrrrs rrrs+ B B Bw Bw rceZdZdZej dZej dZ d dZdZ dZ d dZ e e Z y) 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*)$NcX| t|d}||_||_d|_||_y)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__s2  D$'H     rc#K|j}|xjdz c_g}|r|jddk(r?|s|jd|g}|j}|xjdz c_V|jj |}|s|jd|j \}}|xsd} |j}|xjdz c_|jj |}|r|j \}|d}|d|}nnb|j||f|r|r|yyw)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(++,EF **, q MM''-E''(@A$||~ T8~2H**, q ,,2248#(<<>LY ($& +3Y?H JJh' (78 I s D=E E c|jj}t|tr|j |j S|Sr#)r5readliner$bytesdecoder)r+rs rrzPackageFile._aux_read_lines8yy!!# dE ";;t}}- - rcL| |j}t|j||r#)r'r!r)r+r(r's rrzPackageFile.raise_syntax_errors# >[[FFC00r)Nzutf-8r#)r7r8r9r:rrrrr*rrrrraiseSyntaxErrorrrrrrsV rzzHIH bjj!:;O!!&"H1 ..@ArrcLeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z y ) PseudoEnumz8A base class for types which resemble enumeration types.c ||_||_yr#)_namer)r+rorders rr*zPseudoEnum.__init__s  rcN|jjd|jdS)N())r,r7rr.s rr1zPseudoEnum.__repr__s>>22DJJ??rc|jSr#)rr.s rr/zPseudoEnum.__str__s zzrc4|j|jkSr#rris rrozPseudoEnum.__lt__{{U\\))rc4|j|jkSr#rris rrrzPseudoEnum.__le__{{ell**rc4|j|jk(Sr#rris rruzPseudoEnum.__eq__rrc4|j|jk7Sr#rris rrwzPseudoEnum.__ne__ rrc4|j|jk\Sr#rris rryzPseudoEnum.__ge__rrc4|j|jkDSr#rris rr{zPseudoEnum.__gt__rrc,t|jSr#)r}rr.s rr~zPseudoEnum.__hash__sDKK  rN)r7r8r9r:r*r1r/rorrrurwryr{r~rrrrrs8B@*++++*!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/ c<tt| ||||_yr#)r)rr*rH)r+rrrHr,s rr*zRelease.__init__&s gt%dE2 r)rd)r7r8r9r:releasesr*r<r=s@rrrs H rrcti}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/sS H D(dO5S g sG45 G Orc4|t}|j|Sr#) _release_listget)rrs rintern_releaser Us  << rct}|D]D}t|tr|j|%|j|j dF|j SNUTF-8)rr$rupdateencode hexdigestlinesrSls rread_lines_sha256rcsP A ( a  HHQK HHQXXg& ' ( ;;=rct}|D]D}t|tr|j|%|j|j dF|j Sr)rr$rrrrrs rread_lines_sha1rnsP A ( a  HHQK HHQXXg& ' ( ;;=rz^(\d+)(?:,(\d+))?([acd])$rc#Kt|}|}|D]}|st|trtnt}|j |}|t d|z|j\}}}t|} |dn t|} t|dk(r| dz } | | dz} | | gft|dk(r| t d|z| } n | dz } | | dz} g} |D]+} | dvrt d|z| d vrn| j| -| | | fyw) 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_scriptr+sK" V AH$#&0u&={9Ht$ =84?@ @$||~F }t#e* s8s?AIE|qy$# #  s8r> !=!DEEDAIE|qy AI~ !?$!FGG.. LLO   dE""I$#sD D c$|D] \}}}|||| y)z2Applies patches to lines. Updates lines in place.Nr)rpatchesr(r)rs r patch_linesr.s& '!d eD!rc|dz} t|d|5}|D]}|j| dddtj||tjj |rtj |yy#1swYUxYw#tjj |rtj |wwxYw)Nz.newzw+r)rr3osreplacepathexistsunlink)rlocalr local_newnew_filers r replace_filer9sI! )TH 5 " "q! " " 9e$ 77>>) $ IIi  %  " " 77>>) $ IIi  %s!BBBB B7Ccddl}ddlm}||5}|j|d5}|j cdddcdddS#1swYnxYw dddy#1swYyxYw)z[Downloads a file from a remote location and gunzips it. Returns the lines in the file.rNurlopenrt)mode)gzipurllib.requestr<r readlines)remoter?r<zfdgfds rdownload_gunzip_linesrEsl & #C YYsY & ##==? # ### # # ####s!A A  A  A A  A)c:t|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)rEr9)rBr6rs r download_filerHs! "&5. 1E Lrc  t|dd5}|j}dddg}i}ddlm}|dz}tjd } ||5} tt|| } dddd  D cgc]} | D]\} }|  c}} } vr!|r td d}t}t}n |r tdd}t}t}| D]} | D]\}}||dzk(r-| j|\}}||k(r|r td|ccS;||dzk(rJ|jD]6}|dk(r | j|\}}}|s||k(s&|j!|8||dzk(r6|jD]"}|dk(r | j|\}}}|||<$|std|z|s|r td|t ||S|D]b}|rtd|zt#|dz|zdz}||||k7rt%d|zt|}t'|t)|d||}|k7rt%d|d|t+|||S#1swYLxYw#t$r|r tdt ||cYSwxYw#1swY6xYw#t$r|r td t ||cYSt$r|r td t ||cYSwxYwcc}} } w)zjUpdates the local file by downloading a remote patch. Returns a list of lines in the local file. rrr0Nz1update_file: no local copy, downloading full filerr;z .diff/Indexz\s+z1update_file: could not interpret patch index filez0update_file: could not download patch index filezSHA256-Currentzupdate_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/rGzpatch %r was garbledzpatch failed, got z instead of )rrAIOErrorprintrHr@r<rrlistrr!rrsplit splitlinesrrErMr.r+r9)rBr6verbose local_filerpatches_to_apply patch_hashesr< index_name re_whitespace index_url index_fieldsfieldskvprefix local_hash read_linesfieldr] remote_hash_entry hist_hash patch_name patch_hashpatch_contentspatch_contents_unicodenew_hashs r update_filerjs, %w / +:((*E +L'-'JJJv&M , Z  DI J BCL DLKK&FKSQqAKAKK  - .&u- &  + ,$U+ $  ?$ ?NUEz))#0#6#6u#= a,EF Lz))"--/1D1DU1K.Y:(9 +B(// ;<z))"--/:E{ 2?2E2Ee2L/ZJ/9L, : 5=>? ? ?D   > KVU++&K  5 B C. X  *U 24 n %j)A A3j@A A!%n!5E12HIJK% H;$k34 4 LG + + ,  E FVU++,  D D ,  E FVU++ ,  D EVU++, Ls]I8I+I8J-J ,J-;K8 +I50I88"JJ J*%J--"K5!K54K5cBi}|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_setsroos< A  AAaD  !9rr#)r)F)Lr:r1os.pathrtypingrrrrrrr r r r r rrrrr ImportErrordebian.deprecationrrinitrError_sha1sha1r_sha256sha256rdebian._arch_tabledebian _arch_table DpkgArchTable Exceptionr!objectr?rrrrrrrr listReleasesr r  internReleaserr readLinesSHA1 _patch_re_rawrr rrr+patchesFromEdScriptr. patchLinesr9 replaceFilerEdownloadGunzipLinesrH downloadFilerj updateFilero mergeAsSetsrrrrsv8&   ,6    "zzH "J""00 '1'1TH&HV >K >"\K\~ -  -  OBOBd.!.!bj$B&m4  '~6 '7 - BJJ} % bjj--g67 9#v--CD!$K 0  !%\2  #--BC &m4 k\$K 0 %]3 [   == M""""""sd$F+GF7G%G,+F43F47G G G  GGGG)(G),G87G8