Ñò eRc@stddkZddkZddkZddkZddkZddkZddkZddkZddki Z ddk i Z ddk i Z ddkZddkiZddkiZyddkiZeZWnej o eZnXdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd „ƒYZd efd „ƒYZd e fd „ƒYZ!dS(iÿÿÿÿNtTransactionErrorcBs)eZdZd„Zd„Zd„ZRS(s4Base exception class for all Transaction exceptions.cGs5ti||Œ|o|d|_n d|_dS(Ni(t Exceptiont__init__tdatatNone(tselftargs((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyR4scCs t|ƒS(N(tstr(R((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyt __unicode__;scCs t|iƒS(N(RR(R((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyt__str__As(t__name__t __module__t__doc__RRR (((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyR1s  tTransactionContentErrorcBseZdZd„ZRS(sxUsed to indicate that an unexpected error was encountered while processing the payload content for an operation.cCstdƒ|iS(Ns:Unrecognized or malformed data in operation payload: '%s'.(t_R(R((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyR Is (R R R R (((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyR EstTransactionOperationErrorcBs eZdZd„Zd„ZRS(slUsed to indicate that a Transaction operation failed. Data should be provided as keyword arguments.cOs4ti||Œ|djo h}n||_dS(N(RRRt_args(RRtkwargs((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyRSs  cCs4d|ijotdƒ|iiddƒSd|ijotdƒ|iiddƒSd|ijotd ƒ|iiddƒSd |ijotd ƒ|iiddƒSd |ijotd ƒ|iiddƒSd|ijo tdƒSd|ijotdƒ|idSt|iƒS(Ntclient_releases-The specified client_release is invalid: '%s'tmsgtt fmri_versions2'The specified FMRI, '%s', has an invalid version.tpfmritvalid_new_fmris@The specified FMRI, '%s', already exists or has been restricted.tpublisher_requireds¬The specified FMRI, '%s', must include the publisher prefix as the repository contains package data for more than one publisher or a default publisher has not been defined.t missing_fmris8Need an existing instance of %s to exist to append to ittnon_sigs7Only a signature can be appended to an existing packages%The specified FMRI, '%s', is invalid.(RRtgetRR(R((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyR Ys,          (R R R RR (((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyRNs tTransactionUnknownIDErrorcBseZdZd„ZRS(s>Used to indicate that the specified transaction ID is unknown.cCstdƒ|iS(Ns/No Transaction matching ID '%s' could be found.(RR(R((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyR ys (R R R R (((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyRvstTransactionAlreadyOpenErrorcBseZdZd„ZRS(s<Used to indicate that a Transaction is already open for use.cCstdƒ|iS(Ns$Transaction ID '%s' is already open.(RR(R((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyR s(R R R R (((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyR~st TransactioncBs†eZdZd„Zd„Zd„Zd„Zd„Zed„Z d„Z d„Z d d „Z ed „Zed „Zd „ZRS(sûA Transaction is a server-side object used to represent the set of incoming changes to a package. Manipulation of Transaction objects in the repository server is generally initiated by a package publisher, such as pkgsend(1M).cCs|d|_d|_d|_d|_d|_d|_d|_t|_ t|_ t|_ t ƒ|_ t|_d|_dS(NRi(Rt open_timetpkg_namet esc_pkg_nametrstoreRtfmritdirtFalsetobsoletetrenamedt has_reqdepstsett types_foundt append_transtremaining_payload_cnt(R((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyR‹s            cCsF|ipt‚dti|iiƒƒtit|iƒdƒfS(Ns%d_%sR( RtAssertionErrortcalendarttimegmt utctimetupleturllibtquoteRR#(R((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyt get_basename›sc Cst||_|djotddd|ƒ‚n|djotddƒ‚nt|tƒpt|ƒ}n||_||_ti |dƒ|_ yt i |i|iƒ|_ Wn$t i j o}t|ƒ‚nX|i idjotddd|ƒ‚n|i ipš|i}|ptdtd|ƒ‚n||i _|i}d|}|idƒp||}n|id|ƒ}||_ti |dƒ|_ n|i iƒ|_|io;di|idƒd ƒ|_ti |idƒ|_ nZxVtiiƒ|_|i i|iƒ|i}|i|i ƒpPntid ƒq |ii|i ƒptd td|ƒ‚n|i ƒ} t!i"i|ii#| ƒ|_$yt!i%|i$t&i'ƒWnDt(j o8}|i)t)i*jot+| ƒ‚nt|ƒ‚nXt!i"i|i$d ƒ} t,| d ƒ} t-i.d|i ƒ} | t| ƒIJ| i/ƒdS(NRRRRRs pkg://%s/spkg:/t:iÿÿÿÿgÐ?Rtmanifestsab+sset name=pkg.fmri value=%s(0R"RRt isinstancet basestringRRR R1R2R!R#tPkgFmrit FmriErrortversiont publishertTruet startswithtreplacet get_timestampRtjointsplittdatetimetutcnowt set_timestamptcatalogt get_entryttimetsleepRR%R3tostpatht trans_rootR$tmakedirstmisct PKG_DIR_MODEtEnvironmentErrorterrnotEEXISTRtfiletactionstfromstrtclose( RR"RRtet default_pubR t pub_stringtcatttrans_basenamettfpathttfiletfact((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pytopen¢sx                      c Cs9||_t|_|djotddd|ƒ‚n|djotddƒ‚nt|tƒpt|ƒ}n||_||_ t i |dƒ|_ yt i|i |iƒ|_ Wn$t ij o}t|ƒ‚nX|i idjp|i iƒ otddd|ƒ‚n|i ipš|i}|ptdtd|ƒ‚n||i _|i }d|}|idƒp||}n|id|ƒ}||_ t i |dƒ|_ n|i iƒ|_di|idƒd ƒ|_ t i |i dƒ|_ |i|i ƒptd td|i ƒ‚n|iƒ}tii|i|ƒ|_yti|iti ƒWnDt!j o8}|i"t"i#jot$|ƒ‚nt|ƒ‚nXt%tii|id ƒd ƒi&i'ƒ} z | ~ } WdQXt(i)|i*|i ƒtii|id ƒƒdS(NRRRRRs pkg://%s/spkg:/R4iÿÿÿÿRtappendtwbR5(+R"R<R+RRR6R7RRR R1R2R!R#R8R9R:R?R;R=R>RR@RAtvalid_append_fmriR3RIRJRKR$RLRMRNRORPRQRR^t__exit__t __enter__tportabletcopyfileR5( RR"RRRVRWR RXRZt_[1]tfh((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyR_sh         $           8c CsC||_y+tii|ƒiddƒ\}|_Wn+tj ottii|ƒƒ‚nXtii t |ƒƒ|_ t i |iƒ|_ti|idƒ|_tii|i|iƒƒ|_tii|iƒpt|iƒƒ‚nd}|ip|d7}ny+tii|idƒ}t||ƒ}Wn0tj o$}|itijodS‚nXtiiƒ}|id|i ƒƒ|i!ƒtiitii|idƒƒo t"|_#n|i$d d ƒ|_%|i$d d ƒ|_&t'd „|i(ƒDƒƒ|_)t*d „|i+dƒDƒƒ|_,dS(sdThe reopen() method is invoked by the repository as needed to load Transaction data.Ritrbt+R5NtcontentR_s pkg.obsoletetfalses pkg.renamedcssx|]}|iVqWdS(N(tname(t.0taction((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pys “s css&x|]}|iddjVqWdS(ttypetrequireN(tattrs(Rmta((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pys –s tdepend(-R"RIRJtbasenameRAR!t ValueErrorRRBtutcfromtimestamptintRR1tunquoteR R#R8RR@RKR3R$texistst read_onlyRRtIOErrorRPtENOENTtpkgR5tManifestt set_contenttreadRUR<R+tgetboolR&R'R)t gen_actionsR*tanytgen_actions_by_typeR(( RR"t trans_dirt open_time_strttmodeR[R\RVtm((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pytreopencsD + !  % cCs¦d„}|iƒ}||ƒd}d}|io|i|ƒ\}}n|i|ƒ\}}yti|iƒWn"tj o}ti |ƒnX||fS(sžCloses an open transaction, returning the published FMRI for the corresponding package, and its current state in the catalog. cSs7tid|ƒ}|idƒti|idƒƒfS(Ns (\d+)_(.*)ii(tretmatchtgroupR1Rx(ttidRˆ((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pytsplit_trans_idžsit SUBMITTED( R3R+t accept_appendtaccept_publishtshutiltrmtreeR$RORMtemsg(Rtadd_to_catalogRŽttrans_idtpkg_fmrit pkg_stateRV((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyRUšs   cCs]yti|iƒWnBtj o6}|i|ijo|itijo‚qYnXdS(Nt ABANDONED(R’R“R$ROtfilenameRPR|(RRV((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pytabandon¹s & cCsîy|iƒWn$tij o}t|ƒ‚nX|io#|idjotdtƒ‚nt|ii ddƒƒ}|i o|djod„|_ n|i d,j oÂt i|i ƒd|dtdtid tiƒ\}}|id d,ƒ|_|ii|ƒti|ƒ\}}}|} to‚|d d joqtii|id | ƒ} t| dƒ} | i|ƒ| iƒyti| ƒ} Wn$ti j o}t!|ƒ‚nXy£d} d}| ti"jo t}nt#}|ti"jo t}nt#}ti$| d|d|ƒ}|o|||i|Ôstlengthtreturn_contentt hash_attrst hash_algsthashisELFs.temp-%sR`spkg.content-type.sha256telfhashtsha1tsha256tbitstelfbitstarchtelfarchRRs pkg.csizes chain.sizesR)Rls pkg.obsoletetvaluettruesLAn obsolete package cannot contain actions other than 'set' and 'signature'.s pkg.renamedRssUA renamed package cannot contain actions other than 'set', 'depend', and 'signature'.RoRps>A package may not be marked for both obsoletion and renaming.sHA '%(type)s' action cannot be present in an obsolete package: %(action)sRnsFA '%(type)s' action cannot be present in a renamed package: %(action)sR5sab+N(ssetRœ(sdependssetRœ(ssetRœ(sdependssetRœ(8tvalidateRSt ActionErrorRR+RlR<RwRqRt has_payloadRRRMtget_data_digesttdigesttDEFAULT_HASH_ATTRSt HASH_ALGStpopR£tupdatetget_least_preferred_hashthaveelfRIRJR@R$R^twriteRUtelftget_infotElfErrorR tDEFAULT_CONTENT_HASH_ATTRSR%t get_dynamicRtunlinkR"RRRtgetattrtcompute_compressed_attrst hexdigesttlenRAR,R&R*t differenceR)RR'R(tadd(RRnRVtsizethashesRt hash_attrthash_valt hash_functfnametelf_nametelf_filetelf_infotelf256telf1t get_sha256tget_sha1tdyntdst_pathtcsizetchashestattrtchashR[R\((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyt add_contentÂsÈ              $            c Csti|d|dtdtidtiƒ\}}|d jot|ƒ}ny3tid ƒd}||}|i i |ƒ}Wn;t j o/}t |ddƒ|jo‚nd }nXti |||||idtid tiƒ\} } d } d }|id 8_d S( s!Adds the file to the Transaction.RŸR R¡R¢iRRt chash_attrst chash_algsiN(RMR°R<R±R²R³RRÂR¶R"RRRR¿RÀR$tDEFAULT_CHASH_ATTRSt CHASH_ALGSR,( RtfRÅRÆRtdefault_hash_attrRÊRÓRVRÔRÕ((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pytadd_filees*      cCsf|io!|i ottdƒƒ‚n|iƒ|o|ii|iƒnt|iƒdfS(szTransaction meets consistency criteria, and can be published. Publish, making appropriate catalog entries.s<A renamed package must contain at least one 'depend' action.t PUBLISHED( R'R(RRtpublish_packageR"t add_packageR#R(RR•((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyR‘…s  cCsŒ|io!|i ottdƒƒ‚n|idjottdƒƒ‚n|iƒ|o|ii|iƒnt |iƒdfS(sTransaction meets consistency criteria, and can be published. Publish, making appropriate catalog replacements.s<A renamed package must contain at least one 'depend' action.isIAt least one certificate has not been delivered for the signature action.Rà( R'R(RRR,RáR"treplace_packageR#R(RR•((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyR˜s cCsÅ|ii}tii|idƒ}|ii|iƒ}ti tii |ƒƒt i ||ƒx\ti |iƒD]H}|djoquntii|i|ƒ}|iii||ƒquWdS(sIThis method is called by the server to publish a package. It moves the files associated with the transaction into the appropriate position in the server repository. Callers shall supply a fmri, repo store, and transaction in fmri, rstore, and trans, respectively.R5R_N(R#R RIRJR@R$R"R5RMRLtdirnameRdtrenametlistdirt cache_storetinsert(RR t src_mpatht dest_mpathRÝtsrc_path((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyRá±s  N(R R R RR3R^R_R‰R<RUR›RØRRßR‘RRá(((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyR…s   q P 7  £  ("R.RBRPRIRŠR’RGR1t pkg.actionsRSt pkg.digestR±tpkg.fmriR#t pkg.manifestR}tpkg.miscRMt pkg.portableRdtpkg.elfR¹R<R·t ImportErrorR%RRR RRRtobjectR(((s</usr/lib/python2.6/vendor-packages/pkg/server/transaction.pyts0            (