~Z>m?Z?de@fd YZAdS( i(t defaultdictt namedtupleN(tglobal_settings(t DebugValues(t _ActionPlan(tmediator_impl_matches(tPKG_OP_DEHYDRATEtPKG_OP_REHYDRATEt MSG_ERRORt MSG_WARNINGtMSG_INFOt ImagePlanc BseZdZdZdZdZdZeedZ dZ dZ dZ e d Ze d Ze d Zd Ze d Ze dZe dZe dZedZeeeedZdZedZeeeedZedZdZdZdZdZ eeeeee!j"eedZ#eeeeee!j"dZ$eeeeee!j"dZ%dZ&dZ'd Z(e e(e'Z)ee!j"d!Z*ee!j"d"Z+d#Z,d$Z-d%Z.e!j"d&Z/ed'Z0ed(Z1ed)Z2eee!j"d*Z3d+Z4d,Z5ee!j"d-Z6ed.Z7eee!j"d/Z8eee!j"d0Z9d1Z:d2Z;d3Z<d4Z=d5Z>e?d6Z@e?d7ZAd8ZBd9ZCd:ZDd;ZEed<ZFd=ZGd>ZHd?ZIed@ZJee!j"dAZKee!j"dBZLedCZMedDZNdEZOdFZPdGZQdHZRdIZSe?dJZTe?dKZUe?e!j"dLZVe?dMZWdNZXdOZYdPZZdQZ[e?dRZ\dSZ]dTZ^dUZ_e?dVZ`dWZadXZbe?dYZce?dZZded[Zeed\Zfd]Zgd^Zhd_Zid`ZjdaZkdbZldcZmddZndeZodfZpdgZqdhZrdiZsdjZtdkZudlZvdmZwdnZxe?eeeedoZye?e!jze!jzee!j"dpZ{e?dqZ|RS(rs7ImagePlan object contains the plan for changing the image... there are separate routines for planning the various types of image modifying operations; evaluation (comparing manifests and building lists of removal, install and update actions and their execution is all common codeiiiicCs4||_||_||_||_t|_i|_d|_d|_d|_ d|_ d|_ d|_ d|_d|_i|_i|_d|_|j|_|j|_d|_i|_i|_i|_t|_d|_|dkrtj|}n|j|ks#t|j |dS(Ni(!timaget_ImagePlan__progtrackt_ImagePlan__check_cancelt_ImagePlan__noexecutetsettvalid_directoriest saved_filest _ImagePlan__target_install_countt_ImagePlan__target_update_countt _ImagePlan__target_removal_counttNonet_ImagePlan__directoriest_ImagePlan__symlinkst_ImagePlan__hardlinkst_ImagePlan__licensest_ImagePlan__legacyt_ImagePlan__cached_actionst_ImagePlan__fixupstoperations_pubst list_excludest_ImagePlan__old_excludest_ImagePlan__new_excludest&_ImagePlan__preexecuted_indexing_errort_ImagePlan__match_instt_ImagePlan__match_rmt_ImagePlan__match_updatet_ImagePlan__pkg_actuatorstpdtplandesctPlanDescriptiont_optAssertionErrort_ImagePlan__setup_plan(tselfR topt progtrackt check_cancelt noexecuteR'((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__init__Qs:                         cCs|jjtjkrd}|Sd|jj}|jjtjkrH|S|d7}x.|jjD] \}}|d||f7}q_W|jjr|d|jj}n|j|j kr|d|j|j f}n|jj r|ddj |jj }n|S( Ns UNEVALUATED: s%s sPackage version changes: s %s -> %s s Actuators: %s s# Variants/Facet changes: %s -> %s s Mediator changes: %ss ( R'tstateR(t UNEVALUATEDt_solver_summarytEVALUATED_PKGSt _fmri_changest _actuatorsR R!t_mediators_changetjoint get_mediators(R-tstoldfmritnewfmri((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__str__s$   cCsB|jtjtjtjgks't||_|j|jj |jj f|j_ |jjtjkr|jj j |dS|jj|jj|jj|_|jj j|xz|jjD]l}|j|_|jr|jr|jd7_q|jr|jd7_q|jr|jd7_qqWdS(Ni(R3R(R4R6t EVALUATED_OKR+R't_ImagePlan__update_avail_spaceR t avoid_set_gettobsolete_set_gett_new_avoid_obstlinkedt init_planRt _new_variantst _new_facetsR!t setup_plant pkg_planst origin_fmritdestination_fmriRRR(R-tplantpp((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt __setup_plans*        cCs|jjtjtjgksCtd|jjtjtjf|jjtjkr\dS|jj|jjkrt j |jj n|jj r|jj j ntj|j_dS(Ns%s not in [%s, %s](R'R3R(tPREEXECUTED_OKR@R+R tversiontCURRENT_VERSIONt api_errorstImageFormatUpdateNeededtroott transporttshutdown(R-((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pytskip_preexecutes   cCs |jjS(N(R'R3(R-((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyR3scCs |jjS(sRReturns a constant value indicating the type of operation planned.(R'R*(R-((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt planned_opscCs |jjS(sGet the proposed fmri changes.(R'R7(R-((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt plan_descscCs|jS(s)Return a pointer to the plan description.(R'(R-((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pytdescribescCs |jjS(s&get the (approx) number of bytes added(R't _bytes_added(R-((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt bytes_addedscCs |jjS(s9get the (approx) number of bytes needed in download cache(R't _cbytes_added(R-((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt cbytes_addedscCs |jjS(s0get the (approx) number of bytes space available(R't _bytes_avail(R-((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt bytes_availscCs |jjS(s3get the (approx) number of download space available(R't _cbytes_avail(R-((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt cbytes_availscCs.|j}||_|dk r*||_ndS(sPrivate helper function that must be called at the end of every planning operation to ensure final plan state is set and any general post-plan work is performed.N(R'R3RR7(R-tpdstatet fmri_changesR'((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt __finish_plans   c Csg}|dk r2g|D]}|d^q} nd} xtj|tj|D]t\} } | | kr|j| | fqTn|dk s|rT| dks| | kr|j| | fqqTqTW||j_|S(sGiven an installed set of packages, and a proposed vector of package changes determine what, if any, changes should be made to the image. This takes into account different behaviors during operations like variant changes, and updates where the only packages being updated are linked image constraints, etc.iN(RR t_ImagePlan__dicts2fmrichangest_ImagePlan__fmris2dicttappendR't_li_pkg_updates( R-tinstalled_dicttvectortli_pkg_updatest new_variantst new_facetsRet fmri_updatestftaffectedtatb((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__vector_2_fmri_changess      cCs|jjdt|j_dS(sTPrivate helper method used to mark the start of a planned operation.tstringN(R tget_last_modifiedtTrueR't _image_lm(R-((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt __plan_op%scCs|dk r+tjj|}|jn|jjj}|dkretjj|}|jn|j|jj j ||krdt t fSt |j |pt |j|}t | ot |j|}||kst|||fS(sXMerge any new facets settings with (possibly changing) inherited facets.N(RtpkgtfacettFacetst_clear_inheritedR tcfgtfacetstupdateREtinherited_facetstFalsetboolt _cmp_valuest _cmp_priorityt_cmp_all_valuesR+(R-Rot old_facetst facet_changetmasked_facet_change((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__merge_inherited_facets+s        cCsg|j|\}}}|s*|s*|r~t|j_||j_|jjj|j_||j_ ||j_ ||j_ n|jj |||_ t|jjjdd}|r|jj|jj|n|dkrt}nt|}|dkrt}nt|||B}||_|rW|j j|jj|n||||fS(s`Private helper function used to determine new facet and variant state for image.tpropertyt dehydratedN(t"_ImagePlan__merge_inherited_facetsRxR't_varcets_changeRGR RRt _old_facetsRHt _facet_changet_masked_facet_changeRR!Rt get_propertyR Ritget_dehydrated_exclude_funcRR(R-RnRot dehydratet rehydrateRRtold_dehydrated((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__evaluate_excludesWs8                  cCst}y||SWnktjk r}|jjjdtrJ|ndtjkrb|n|sq|nt}||SXdS(sRun the solver, and if it fails, optionally retry the operation once while relaxing installed parent dependencies.t latest_mdtPKG_REQUIRE_SYNCN( RRStPlanCreationExceptionR REtinsynctostenvironRx(R-t solver_cbtretry_wo_parent_depstignore_inst_parent_depste((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt __run_solvers   c Cs/t|ts|g}n|jj}|j|j||jd|d|dt\}} t} x$|jD]} | t| O} qsWx| j D]z} |t j kr| |jks|t j kr| |jkr| j | qn|j j|| j||fqW|j||| dS(sAdd a single actuator to the solver 'solver_inst' and update the plan. 'trigger_fmri' is pkg which triggered the operation and is only used in the plan. 'trigger_op' is the name of the operation which triggered the change, 'exec_op' is the name of the operation which should be performed. 'values' contains the fmris of the pkgs which should get changed.t pub_rankstinstalled_pkgstraise_not_installedN(t isinstancetlistR tget_publisher_rankst_ImagePlan__match_user_fmristMATCH_INST_STEMSRRtvaluestcopytpkgdefstPKG_OP_UNINSTALLtremoveR&taddtpkg_nametadd_triggered_op( R-t trigger_fmrit trigger_optexec_opRt solver_instRkRt matched_valst unmatchedttriggered_fmristmtt((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__add_actuators(      ccstjtjg}|jdjds,dSy8|jdjdd}|jdjdd}Wntk rxdSX||ks||krdSxY|jdD]H}ytj j |dd Wntj j k rqnX||fVqWdS( s7Read and decode pkg actuator data from action 'action'.tnamespkg.additional-Nt-iitvaluet build_releases5.11( Rt PKG_OP_UPDATERtattrst startswithtsplittKeyErrortattrlistR{tfmritPkgFmrit IllegalFmri(R-tactionR.tsupported_exec_opsRRRq((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__decode_pkg_actuator_attrss"  c Cssi}td}|r,|jdkr,dStj|jj}|jj}|j|j||jd|d|dt \}} t } x"|D]} | t || O} qWx| D]} t | t j jst j j| dd} nxw|jj|jjj| t jjjgD]E} x<|j| |D](\}}|j| |||||q;Wq"WqWdS( sCheck the manifests for the pkgs specified by 'fmris' and add them to the solver instance specified by 'solver_inst'. 'op' defines the trigger operation which called this function.signore-pkg-actuatorsttrueNRRRRs5.11(RtlowerR RhR tgen_installed_pkgsRRtMATCH_INST_VERSIONSRRRR{RRt get_catalogtIMG_CATALOG_INSTALLEDtget_entry_actionstcatalogtCatalogtSUMMARYt%_ImagePlan__decode_pkg_actuator_attrst_ImagePlan__add_actuator(R-tfmrisR.Rttrigger_entriestignoreRkRRRtpfmrisRRqRsRtefmri((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__set_pkg_actuatorss2        cCsx|jD]\}}}}xl|jjD]^\}}|rJ|j|ks_|r)|j|kr)||kr)|jj|j||q)q)Wq WdS(s Add pkg actuators to PlanDescription. Skip any changes which would have been triggered by an actuator but were also requested explicitly by the user to avoid confusion. N(R&R'R7Rtadd_pkg_actuator(R-t user_pkgsttftpRRtbeforetafter((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__add_pkg_actuators_to_pd!s c  s!j|\}} } j|} pT|pT| pTpT| pT|dk sggj_dSjjtjjj |rj j|j n t |rj j|j ddd\} | _nir njj irEjin f d}  }j| d|\}}j_rjnj|d|dd |d |j_jt|j_td r|jj_ndS( sUse the solver to determine the fmri changes needed to install the specified pkgs, sync the specified image, and/or change facets/variants within the current image.NRRt reject_setcsjj}jj}r6t}g}ntjjjjj |jjj j }rj t j |n|j|ddjddd|dd\}}|||fS(NRntexcludesRt relax_allRt exact_installtinstalled_dict_tmp(R RBtget_frozen_listRt pkg_solvert PkgSolverRtIMG_CATALOG_KNOWNREt parent_fmrisR t_ImagePlan__set_pkg_actuatorsRRt solve_installR!(Rt avoid_sett frozen_listtsolvert new_vectort new_avoid_obs( Rt inst_dictRkRt li_sync_opRnRRR-tvariants(s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyRes8       RRmRnRoReRM(t_ImagePlan__evaluate_excludest_ImagePlan__any_reject_matchesRR'R7R RR RhRtmatch_user_stemst MATCH_ALLRRR#t get_variantsRt_ImagePlan__run_solverRDt!_ImagePlan__vector_2_fmri_changest#_ImagePlan__add_pkg_actuators_to_pdtstrR5Rtget_trim_errorst_solver_errors(R-RmRRoRnt pkgs_instt reject_listReRRRt uninstallt referencesRRRR(( RRRkRRRnRRR-Rs:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__plan_install_solver.sT         **     c CsL|j|jd|d|d|d|d|d||jtjdS(sDetermine the fmri changes needed to install the specified pkgs, sync the image, and/or change facets/variants within the current image.RmRRoRnRRN(t_ImagePlan__plan_opt_ImagePlan__plan_install_solvert_ImagePlan__finish_planR(R6(R-RmRRoRnRR((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__plan_installs  cCsR|j|jd|d|d|d|d|d|dt|jtjdS( sDetermine the fmri changes needed to install exactly the specified pkgs, sync the image, and/or change facets/variants within the current image.RmRRoRnRRRN(R R RxR R(R6(R-RmRRoRnRR((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__plan_exact_installs  cCs@||j_||j_||j_||j_||j_dS(N(R't _backup_bet_backup_be_namet_new_bet _be_activatet_be_name(R-t backup_betbackup_be_nametnew_bet be_activatetbe_name((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pytset_be_optionss     cCs||j_dS(N(R't _update_index(R-R((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__set_update_indexscCs |jjS(N(R'R(R-((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__get_update_indexscCs|jd|d|dS(sODetermine the fmri changes needed to install the specified pkgsRRN(t_ImagePlan__plan_install(R-RR((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt plan_installscCs|jd|d|dS(sWDetermine the fmri changes needed to install exactly the specified pkgsRRN(t_ImagePlan__plan_exact_install(R-RR((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pytplan_exact_installsc Cst}|jj|jj}t|jg}g}|j}|jj}|j|j d|x|jj D]}|jj |dt } || |\}} | s|j |j |d8}qtn|j||fxg|j||D]S} x@| D]8} |rPn| jdkr| | jkrt }PqqW|rPqqW|d8}|j |j qtW|j|j |j||fS(Ntgoaltignore_excludesitdepend(RR RRt frozensett DEPENDENCYR tcount_installed_pkgst plan_startt PLAN_PKGPLANRt get_manifestRxtplan_add_progressRiRRRt plan_donet plan_all_done( R-t get_mattrst use_solvertcattcat_infoRetpttrem_pkgsRqRtmattrstacttattr((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__get_attr_fmri_changess@       csjjjjgD],}|ksE||kr|^qjfdDfd}j|S(s|The following optimizations only work correctly if only facets are changing (not variants, uninstalls, etc).c3s!|]}|kr|VqdS(N((t.0Rq(Ro(s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys .scs8|tfd|jdjdDfS(Nc3s)|]}||kr|VqdS(N((R8Rq(RoR(s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys ;sRtpatterns(Rt gen_facetsR!(RR/(tchanged_facetsRoRR-(s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt get_fattrs3s   (R'RRHtextendt!_ImagePlan__get_attr_fmri_changes(R-RqR<((R;RoRR-s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__facet_change_fastpaths       cs+jjfd}j|S(s|The following optimizations only work correctly if only variants are changing (not facets, uninstalls, etc).csbg}xO|jdjdD]2\}}||krGt}n|j|q"W||fS(NRR9(t gen_variantsR!RxRi(RR/tmvarstvarianttpvals(t nvariantsR-(s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt get_vattrsJs   (R'RGR>(R-RE((RDR-s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__variant_change_fastpathDs cCsg|jjD]}|j^q}|sD|r:|}qDtjSng|jjD]3}|j|krT|jrT|jjrT|j^qT}t|t|}|rtj d|n|S(sReturn publishers that have repositories configured. 'publishers' is an optional list of publisher prefixes to limit the returned results to. A PlanCreationException will be raised if any of the publishers specified do not exist, if any of the specified publishers have no configured repositories, or if all known publishers have no configured repositories.t no_repo_pubs( R tgen_publisherstprefixtmisctEmptyIt repositorytoriginsRRSR(R-t publishersRtall_pubstpubtconfigured_pubstunconfigured_pubs((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__get_publishers_with_repos^s %  $  cCs|j|jd|}|s6|jtjdSg|jjd|D]}||f^qL}|r}|jd|n|jd||dk st |jtjd|dS(NRNtpubsRRRe( R t%_ImagePlan__get_publishers_with_reposR R(R6R RRRR+(R-RNRRTRqRe((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__plan_common_hydration~s +cCs|j|dtdS(sDehydrate packages for given publishers. If no publishers are specified, packages for all publishers with configured repositories will be dehydrated.RN(t!_ImagePlan__plan_common_hydrationRx(R-RN((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pytplan_dehydratescCs|j|dS(sRehydrate packages for given publishers. If no publishers are specified, packages for all dehydrated publishers with configured repositories will be rehydrated.N(RW(R-RN((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pytplan_rehydratesc s0jdfd}j\}}j}|ri|dSjjjs|dSr|r|dSt}|r stj \}nr| stj \}n|r|dSdk stj t j ddS(sZDetermine the fmri changes needed to change the specified facets/variants.c s6jddddjtjdS(NRoRnRRe(R R R(R6((ReRoRnRR-(s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pytplan_install_solvers  NRe(R RRRR RERRxR+t!_ImagePlan__facet_change_fastpatht#_ImagePlan__variant_change_fastpathR R(R6( R-RoRnRRZRRRR/((ReRoRnRR-s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pytplan_change_varcetss6     c Cs+|j|jt|j_||j_|jjj}|j }|j |j i}xj|jjj D]V}|j |j xndD]f}||jj|kr<|jj||dk rd|jj|d| %s (RR'R7(R-tfulltoutputR((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pytget_plans  ccsn|jjtjkstt|jj}x!|jjD]}|j |q=Wx|D] }|Vq[WdS(s7Generates all the fmris which will be in the new image.N( R'R3R(R6R+RR RRJtupdate_pkg_set(R-tfmri_setRR((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pytgen_new_installed_pkgss  ccsb|jjtjkstx@|jjD]2}|jr(|jsFt|j|jfVq(q(WdS(sjGenerates fmri-manifest pairs for all packages which are being installed (or fixed, etc.).N(R'R3R(R6R+RJRLtdestination_manifest(R-R((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__gen_only_new_installed_infos  ccst|jjtjkstxR|jjD]D}|jr(|j|jkr(|jsXt|j|jfVq(q(WdS(s[Generates fmri-manifest pairs for all the packages which are being removed.N( R'R3R(R6R+RJRKRLtorigin_manifest(R-R((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__gen_outgoing_infos  cCs|j||jd|S(sXGenerates actions of type 'atype' from the packages in the future image.t implicit_dirs(t#_ImagePlan__gen_star_actions_bytypeR(R-tatypeR((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt gen_new_installed_actions_bytypes cCs|j||j|d|S(sPGenerates actions of type 'atype' from packages being installed.R(t9_ImagePlan__gen_star_actions_bytype_from_extant_manifestst'_ImagePlan__gen_only_new_installed_info(R-R RR((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt%gen_only_new_installed_actions_bytypescCs|j||j|d|S(svGenerates actions of type 'atype' from packages being removed (not necessarily actions being removed).R(R t_ImagePlan__gen_outgoing_info(R-R RR((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pytgen_outgoing_actions_bytypesc cs$|jjtjkst|rH|dkr6t}qHtjjj }nx|D]}|j j |dt }|rt }nxH|j|d|jD].}|r|j|jdn||fVqW|rRxF|j|jD]/} | |kr|d| dd|fVqqWqRqRWdS(sGenerate installed actions of type 'atype' from the package fmris emitted by 'generator'. If 'implicit_dirs' is True, then when 'atype' is 'dir', directories only implicitly delivered in the image will be emitted as well.RR#RRtimplicitRN(R'R3R(R6R+RR{RRRR R*RxRRR!RRtget_directories( R-R t generatorRtdaRRtdirsR5td((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__gen_star_actions_bytype s$    c cs |jjtjkst|rH|dkr6t}qHtjjj }nx|D]\}}|rpt }nxE|j |d|D].} |r|j | j dn| |fVqW|rRxC|j|D]/} | |kr|d| dd|fVqqWqRqRWdS(sGenerate installed actions of type 'atype' from the package manifests emitted by 'generator'. 'excludes' is a list of variants and facets which should be excluded from the actions generated. If 'implicit_dirs' is True, then when 'atype' is 'dir', directories only implicitly delivered in the image will be emitted as well.RRRRRN(R'R3R(R6R+RR{RRRRRRRR( R-R RRRRRRRR5R((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt/__gen_star_actions_bytype_from_extant_manifests+s$       cCso|jdkrhtd|jddtD}|j|jjjddddg||_n|jS( s/ return set of all directories in target image css,|]"}tjj|djdVqdS(iRN(RRtnormpathR(R8R((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys TsRRt/tvarsvar/sadmsvar/sadm/installN( RRRR RxRR timgdirtrstrip(R-R((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__get_directoriesMs   cCs;|jdkr4td|jdD|_n|jS(s- return a set of all symlinks in target imagecss"|]\}}|jdVqdS(RN(R(R8RsR((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys esRaN(RRRR (R-((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__get_symlinksas cCs;|jdkr4td|jdD|_n|jS(s. return a set of all hardlinks in target imagecss"|]\}}|jdVqdS(RN(R(R8RsR((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys nsR`N(RRRR (R-((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__get_hardlinksjs cCs;|jdkr4td|jdD|_n|jS(s- return a set of all licenses in target imagecss"|]\}}|jdVqdS(tlicenseN(R(R8RsR((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys wsR!N(RRRR (R-((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__get_licensesss cCs;|jdkr4td|jdD|_n|jS(s3 return a set of all legacy actions in target imagecss"|]\}}|jdVqdS(R{N(R(R8RsR((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys stlegacyN(RRRR (R-((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt __get_legacy|s cCstd|D}td|D}t|dksbt|dkrft|dkrfdSt|t|kr5t|dkrdSt|dkst|ddjdkrd|dfSxa|D]#}d|djkrd|fSqW|djjid d 6d d 6d d 6d|fSntjd}t |d|}t |d|}||krt dt ||DrdSd|fS(ssCheck whether multiple action types within a namespace group deliver to a given name in that space.css|]}|djVqdS(iN(R(R8Rs((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys scss|]}|djVqdS(iN(R(R8Rs((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys siitnothingRtfixupRt0755RRURRtkeycss)|]\}}|d|dkVqdS(iN((R8totn((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys sterrorN(R%N(R%N( RRRR+RRRtoperatort itemgetterRtalltzip(RtoactionstntypestotypesRstsort_key((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__check_inconsistent_typess.6   cCs$t|dks:t|t|ko5dknrjt|dkrftd|DrfdSdSt|t|krtd|DrdSt|dkstd|DrdSd|dfS|jd d |jd d t|t|kr7td t||Dr7dSt|d krd}}x|D]{\}}|jdkr|jjddkrd|jkr|}qZ|jdkrZ|jjddkrZ|}qZqZW|r|rt j |ddg}|rd|t j fSdSnd|fS(sCheck whether we deliver more than one action with a given key attribute value if only a single action of that type and value may be delivered.iicss+|]!}|djjddkVqdS(iRRN(RRi(R8Rs((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys sRcss+|]!}|djjddkVqdS(iRRN(RRi(R8Rs((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys scss"|]}d|djkVqdS(RiN(R(R8Rs((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys sR%R&R(cSst|dS(Ni(R(R~((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pytscSst|dS(Ni(R(R~((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyR5scss)|]\}}|d|dkVqdS(iN((R8R)R*((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys siRRRRRR+N(soverlayN(soverlayN(snothingN(snothingN(soverlayN( RtanyRtsortR.R/RRRiR t#_ImagePlan__find_inconsistent_attrsRSt InconsistentActionAttributeError(RR0t overlayableRR5tignoredR((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__check_duplicate_actionssJ:         cst}g}xtj|dD]\}djdkrZddjkrZq"n||krlq"ndj|d}| sd|kr|j|q"ntfd|Ds|j|q"ndjdksdjdkrdjjd|djjdkrdjjd |djjd ksdjjd |djjd kr|j|q"n|j |fq"W|S( s0Find all the problem Action pairs. 'ignore' is an optional list of attributes to ignore when checking for inconsistent attributes. By default, all attributes listed in the 'unique_attrs' property of an Action are checked. iiRRc3s4|]*}|djkr|kr|VqdS(iN(t unique_attrs(R8R(ta1R(s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys 3sRaR`Rbsmediator-versionsmediator-implementation( Rt itertoolst combinationsRRt differencesRR6RiRi(RRtseentproblemsta2tdiffs((R>Rs:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__find_inconsistent_attrs s. &   &,,, cCstj|}tj|}t|t|kr@d|fS| rR| rRdSt|t|krndS|ddjdkrd|dfSx/|D]#}d|djkrd|fSqWd SdS( slCheck whether we have non-identical actions delivering to the same point in their namespace.R+NR%iRR&R(snothingN(snothingN(R R8RRRR(RR0t nproblemst oproblemsRs((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__check_inconsistent_attrsJs  cCs|jj|d\}}}|dkr|tj|j}|rT|g}g}ng}|g}|||f|j| sc3s3|])}jj|jj|kVqdS(N(RRi(R8Rs(R5toact(s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys sN(RgRR+RiRtranget refcountabletglobally_identicalRRRR^R.R=RxR(R-tnewtoldtnsR(RR0tunmatched_old_actionsRttnext_keyRtmatchedtanameRntopfmri((RR5RRs:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt __fast_check sn          c CsMx|jD]q\}}|j|g}|jj|jjt|dkrkt|dkrkq nt|tkr|j||j ||t j |rq qntt d|Ddkst tt d|Ddkst |dd} | j rH| jrH|j||j||t j|r~q q~q | jr |j||j||t j|r~q q~q q Wx|jD]\}}|jj|jjt|dkrqn||krqntd|Drqn|dd} | j r| jr|j||jg|t j|rEqqEqqWdS(sZCheck all the newly installed actions for conflicts with existing actions.iicss|]}|djVqdS(iN(R(R8Rs((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys  scss|]}|djVqdS(iN(R(R8Rs((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys  sicss"|]}|djdkVqdS(iRN(R(R8Rs((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys 6 sN(t iteritemsRiR R+RxRttypetintt_ImagePlan__process_conflictst$_ImagePlan__check_inconsistent_typesRStInconsistentActionTypeErrorRR+RRt#_ImagePlan__check_duplicate_actionstDuplicateActionErrort$_ImagePlan__check_inconsistent_attrsR9R6( R-RRRzRRkR(RR0Rt((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__check_conflicts s^  $   ((            cCsAd}t}x(|jD]\}}t|tkrItj}n|}x|jD]\}}t|dkrq\n||gdk r|j|q\n|ddj r|ddj rtj |gdk r5|j|q\q5q\|ddj r\tj |gdk r\|j|q\q\q\WqW|S(swReturn the keys in the namespace dictionary ('nsd') which map to actions that conflict with each other.cWsdS(N(R(R((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pytnoopG siiN( RRRRR RRRRRRRR(tnsdRtbad_keysRtkey_dictt type_funcR(R((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt_check_actionsB s0       cCs/x(|jjD]}|j|jq WdS(s_Now that we're done reading the manifests, we can clear them from the pkgplans.N(R'RJtclear_dest_manifesttclear_origin_manifest(R-R((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__clear_pkg_plansc s cCsDtdr|jdSg}|j}|j|jtd|jD}|sw|j|j|jdStd|jj D}||}tg|j j D]}|j rt |j ^q}tjd}ttjjjd|} tdtj| |D} |j|j|jj|j} |jj} |jjtk} tj}xv| jD]h\}}|j|jtd|Drqn|j |j!||j"}|j |j#||j$}| r|j%|||nt&j't(j(| j)d d t(j*}|j+|j+ttj,|j-|j-}|j.||t/| ||||t|j-}|j.||t0| ||||B|WdQX|j1|||||qW~|j| j2|j3|j|j|r@t4j5|ndS( s%Find all instances of conflicting actions. There are three categories of conflicting actions. The first involves the notion of a 'namespace group': a set of action classes which install into the same namespace. The only example of this is the set of filesystem actions: file, dir, link, and hardlink. If more than one action delivers to a given pathname, all of those actions need to be of the same type. The second category involves actions which cannot be delivered multiple times to the same point in their namespace. For example, files must be delivered exactly once, as must users, but directories or symlinks can be delivered multiple times, and we refcount them. The third category involves actions which may be delivered multiple times, but all of those actions must be identical in their core attributes. s"broken-conflicting-action-handlingNcss|]}t|VqdS(N(R(R8R<((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys scss|]}t|VqdS(N(R(R8R<((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys sRR(css'|]\}}|t|fVqdS(N(R(R8RRz((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys scss|]}|j VqdS(N(R(R8tc((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys sitaccess(6Rt_ImagePlan__clear_pkg_plansR R(RxRRR,R RR'RJRLRR,t attrgetterRR{Rttypest itervaluesRR?tgroupbyR+t _load_actdictt_get_stripped_actions_filet_load_conflicting_keystweakreftWeakValueDictionaryRR.t_ImagePlan__seedRR!RR t_ImagePlan__fast_checkt contextlibtclosingtmmaptfilenot ACCESS_READRtchaintiterkeyst_ImagePlan__update_actRRxt_ImagePlan__check_conflictstcloset_ImagePlan__evaluate_fixupsRStConflictingActionErrors(R-RkR2t new_fmrist old_fmrist gone_fmrisRtchanging_fmristkfRtnamespace_dictRRtconflict_clean_imageRRRzRRtmsfRg((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__find_all_conflictsk s|     !             cCstjj|j}|j|S(saThis is the default function used by get_actions when the caller provides no key.(R{RRR`R(RR5t attr_name((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pytdefault_keyfunc scCs |jS(sPKeyfunc used in evaluate when calling get_actions for hardlinks.(tget_target_path(RR5((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pythardlink_keyfunc scCs|dkr|j}n||f|jkr>|j||fSi}xE|j|D]4\}}|||}|j|gj|qTW||j||f<|j||fS(sReturn a dictionary of actions of the type given by 'name' describing the target image. If 'key' is given and not None, the dictionary's key will be the name of the action type's key attribute. Otherwise, it's a callable taking an action as an argument which returns the key. This dictionary is cached for quick future lookups.N(RRRR RcRi(R-RR(RR5RR((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyR s  cCs9|r.|jj|d|p$|jjd|StjSdS(sReturn manifest for pfmriR#tintentN(R R*R'RRORP(R-RRR#((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__get_manifest s  c Cs|jr d St}|j|j|j|j|j|j|r|j|d }|r|j|jkrd}q|j dt }n|j dt }n?|j|d }|j|kr|j dt }nd }i|j j d6|d6|d6|d6}ddj g|D]*}||d k r&d |||f^q&}|rjd |fS|rz|d fSd Sd S( s[Return intent strings (or None). Given a pair of fmris describing a package operation, this routine returns intent strings to be passed to originating publisher describing manifest operations. We never send publisher info to prevent cross-publisher leakage of info.tunknowntanarchyt operationtold_fmritnew_fmrit references(%s)t;s%s=%sN(NN(NN(RRRRR#R$R%Rit get_publishertget_fmriRxR'R*R:( R-RRtenabled_publisherst_ImagePlan__match_intentRRR(R<((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__create_intent! s>        .  cCs|dkr|jjj}n<|dkr<|jjj}n|dkrZ|jjj}nt|rs|||told_intnew_int max_itemst same_excludesRNRRc((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__evaluate_pkg_plans sn %             c's|jj r:|jj r:|jj r:tt|jjStt}tt}xtj|j d|j dD]\}}|j j d}|sqwn|j j d}|rt j j|d}n|j j d}|p|sqwn|j j d} ||j| ||f||j dj|||||fqwW|jj} t} x|jD]\}} d} }} }}}|jjj |}| j |}|r|j d }|j d } |j d }|j d }nQ|dkrN|rN|j d }|j d } |j d }|j d }nxt| d tjD]\}}}| dkr||krqdqn|dkrt||sqdqn|}|sd}n| dkr|}|} n|dkr|}|}n7|r:d|kr:tj|d}|r:|}q:nPqdW|r||j d ksst||j d  r| j|ni||<|r|||d %scss"|]}|D] }|Vq qdS(N((R8Rttmed_link((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys 1sN(saddedschanged(+R'R9RR7RRt_cfg_mediatorsR?RR RRiR{RQtVersionRRQRRdRtmedtcmp_mediationsRtparse_mediator_implementationRaRRR^RbRRhRcRdRRiRJt EmptyDictRR\RSRRRgRf('R-tmediated_removed_pathstprop_mediatorstmediated_installed_pathsRsRRbtmed_vertmed_implt med_priorityRptchanged_mediatorsRtmed_ver_sourcetmed_impl_sourcet med_impl_vert mediationt cfg_mediationt opt_prioritytopt_vertopt_implRstimpl_vert act_removalsRrtptypeRnRot prop_med_vert prop_med_implt cfg_med_vert cfg_med_implt new_med_vert new_med_implRtRRuRWRv((RYs:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__mediate_linksM sF                                        '       (  #            +cs/|jj}x.|jjD] j|jjqWx|D]kr\qDn|j}jddkr|jdd |d=njddkr|jdd |jdd |d=n|rD|sN(R'R[RdRcRRiRhRRRxR9RgR6RR(R-RbRpt new_mediation((RRkRbs:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__finalize_mediationcsT                   c;Cs|j}|jjd+kr*i|j_n|jjrft|jj}|srt|j_ qrn t|j_ xn|jj D]`}|j r|j r|j d7_ q|j r|jd7_q|j r|jd7_qqWg|j_|j|j|jjj}|j_t}x|jj D]}|j|jxv|jD]h\}}|jdkr|j |jj|jd}||krt}|j8jjd} | |jjkr|j8jjd } |j8jjd } |jj| jd }|r?|j }n|jj| jd }|d+k ry| |kryt7}n|d+k rt!| | rt7}qqqnn|j8jdkr|j8jd|j?krt}n7|j8jdkr|j8jd|j@krt}n|s]d+|jj|}0ta|j|0}1g|1D]} | d+k rQ| ^qQ|1(q2W|j|j_|jb|j|j_|jc|/|j1|j_|j|jdg}2i}3|jj#r|jed|jf}3nx|jj#D]} | d%jdkr| d%jd }4|4|3krtgd&|3|4D}5|2j^g|5jhD]}6t| d'|6|6^qknd+}4n|jjGji| |jj d+kr| d%jjd djK|rt7|j_ qqqW|jj#j^|2tjjkd}7tjjkd%}8|jjjld(|7d)t7|jj#jld(|8|jj+jld(|8xtm|jj D]}|j |j ks|jTjns|jTjUs|jTjVr|j |j f}9|9|jjokr|jjoj|9qqn|jj jp||j }:|:|:f|jjokrO|jjojp|:|:fn~qW|jj jld(tjjqd*|j1|jd|jj d+krt|j_ nt.jr|j_0d+S(-sGiven a set of fmri changes and their associated pkg plan, merge all the resultant actions for the packages being updated.itusertusernameRt groupnameRaR`Rbsmediator-versionsmediator-implementationRQR^RtdrivertaliasRtConsolidationEntrysidx idcSs!t|trt|S|SdS(s#handle key values that may be listsN(RRR%(tv((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pythashifyFs RR!R#R{RRVs%s:%sRRYRtcontentcss|]}|dVqdS(iN((R8Rs((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys &sRcss|]}|dVqdS(iN((R8Rs((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys *sRSRaRRicss"|]}|jd|fVqdS(RN(R(R8R6((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys nsiR(treverseRLN(sremoval_actionssinstall_actionssupdate_actions(sR R'RdRR thas_boot_archivettupletget_ramdisk_filelistRRRJRKRLRRRRSR(tPLAN_ACTION_MERGERReR[RR+tgen_removal_actionsRt removed_usersRtremoved_groupsRiRRitget_short_versionRRRRt _rm_aliasestgen_update_actionst added_userst added_groupsRRcRRatgen_install_actionsRgR(RR3R,t nothingtodot_ImagePlan__find_all_conflictstPLAN_ACTION_CONSOLIDATERR^RxR_RRRRt_ImagePlan__get_symlinkst_ImagePlan__get_hardlinkst_ImagePlan__get_licensest_ImagePlan__get_legacyRRRdR`RReR8t scan_removalR*RRRRRRRRbtidxR+RR[RZt scan_installROtManifestt set_contentR R!t differenceR=tPLAN_ACTION_MEDIATIONt_ImagePlan__mediate_linksRfRt_ImagePlan__finalize_mediationtPLAN_ACTION_FINALIZERRRRt scan_updateR,R-R7RR\R7RRR@(;R-R2tramdisk_prefixesRNRpRaRR_RRbt src_versiontsrc_implRkt cfg_versiontcfg_impltrmRtRt cons_namedt cons_genericRRnRoRtlpatht inst_linkst dest_versiont dest_implRtretfnametplan_posRsRpt dest_pkgplanst new_updatest cache_nametindextratkeyvaltnkvtnu_srctnu_dsttnu_addtnu_chgtnu_remRbRbRuRvt l_refresht l_actionsRt unique_linksR6tremsorttaddsorttpairR((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__merge_actionssX                          $                 &                 $     #        3        0     cCs|jjtjtjgkr_|jjp]|jjp]|jjdk p]|jj p]|jj S|jjtj kr|jj p|jjp|jjdk p|jj Sdst d|jjdS(s5Test whether this image plan contains any work to do is+Shouldn't call nothingtodo() for state = %dN( R'R3R(R6RR7RGRHRR9RJR@R+(R-((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyRs        c Cs/|jjtjkst|jj|jjdtkrZtj |j_t j n|j rytj |j_dS|jj|jjkrt j|jjntdr|jj|jdt}n|jrd}y|jjtj|j|jj|jjd|jd|j}|jry|j|jjWqt j!k r}t j"|t#j$t#j%|_&|j'|jj(qXnWn:t j)k r}t j"|t#j$t#j%|_&nX~n|j*|jj+|jj,kr2t j-|jj+|jj,t.dn|jj/|jj0krtt j-|jj/|jj0t.dn|jj1j2j3d }}}xD|jj4D]6}|j5\}} || 7}||7}|d 7}qW|jj6|||g} yx|jj4D]}y|j7Wqt j8k rA}| j9|qt:k r}|j;t;j<krwt j=|j>n|j;t;j?krt j@|j>nqXqW| rt jA| ny1x*|jj4D]}|jB|j|jCqWWnt:k rX}|j;t;j<kr+t j=|j>n|j;t;j?krRt j@|j>nn@t jDt jEfk r}|r|jFr|jF|_FnnX|jj1jG|jjHWntj |j_nXtj |j_tdr+|jj|jdt} tIjJjKd || || ~~ ndS( sInvoke the evaluated image plan preexecute, execute and postexecute execute actions need to be sorted across packages RvNtplandesc_validatetreset_volatilesR/RsDownload cachesRoot filesystemiiR)(LR'R3R(R@R+RyR RwRxtPREEXECUTED_ERRORRSRRRPRQRRRTRURtgetstatet update_indexRtupdate_index_dirtindexertIndexerR*RR R tcheck_index_existencetcheck_index_has_exactly_fmristgen_installed_pkg_namestsetIncorrectIndexFileHashtWrapSuccessfulIndexingExceptiont tracebackt format_exct format_stackR"trebuild_index_from_scratchRtIndexingExceptionRAR^RbtImageInsufficentSpaceRR\R`RVtstatstresetRJt get_xferstatstdownload_set_goalt preexecutetPkgLicenseErrorsRiRRRtPermissionsExceptiontfilenametEROFStReadOnlyFileSystemExceptiontPlanLicenseErrorstdownloadRtInvalidDepotResponseExceptiontTransportErrort _autofix_pkgsRWt download_doneR{RJt json_diff( R-tpd_json1tindRtnpkgstnfilestnbytesRtnftnbt lic_errorstpd_json2((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyRs                         cCs|jjtjkst|jj|jjdtkrZtj |j_t j ny%x|jj D]}|j qjWWn=tk r}|jtjkrt j|jnnX|j|jj|jjkr t j|jj|jjtdn|jr*tj|j_dS|j}|j|j|j}|se|jjn|jjst j!j"|jj#}t$j%}xL|j&D];\}}t j!j"||kr|jj'j(|PqqWn|jj'j)|j|jj'j*|jg} yy|j+|j,t-|jj.|j+|j/t-|jj0|j+|j1t-|jj2x=|jj.D]/\}} } |j3| | |j4|j,qW|j5|j,x9|jj6j&D]%\} } t7j8j9| | |jqWg|j_.x=|jj0D]/\}} } |j:| | |j4|j/q!W|j5|j/g|j_0x=|jj2D]/\}} } |j;| | |j4|j1q}W|j5|j1|j<|j|j=g|j_2xK|jj r3|jj j>}|j?| j@|jA|jBfd}qW|jjD| |j|jjEsb|jjFr|jjG|jjH|jjI|jjJn|jjK|jjL|jjMtNtOfkr|jjPjQdd|jR|jjSnWntk r}|jtjks|jtjTkr3t j|jnm|jtjUkrZt jV|jnF|jtjWkrtXjYjZj[}t j\|td|jnnXWntXjYj]k r!t^j_\}}}tj |j_y|jj'j`|jWnnXt ja|gd|nkt^j_\}}}tj |j_z|jj'j`|jWd|d|XnX|jj'jb|j|jjcd|j|jdtj|j_|jjei|_ftg|_hi|_itg|j_jtg|j_ki|j_li|j_m|jnr|jjotpjq|j|jjr|jjsd|jd|jt}yE|r~|jun|s|jvr|jwg| f|jnWntxk rntyjzk rt j{|t|j}t|j~ntk r}~yPtpjq|j|jjr|jjsd|jd|jt}|j|jjWn4tk r}t j{|t|j}t|j~nXt j|t|j}t|j~nX|jdk r|jqndS( sInvoke the evaluated image plan preexecute, execute and postexecute execute actions need to be sorted across packages RvsRoot filesystemNRRsA link targeting itself or part of a link loop was found at '%s'; a file or directory was expected. Please remove the link and try again.R/R(R'R3R(RPR+RyR RwRxtEXECUTED_ERRORRSRRJt cacheloadRRRRRRAR\R`RRRt EXECUTED_OKR tset_major_phaset PHASE_EXECUTEt_ImagePlan__is_image_emptyt_remove_fast_lookupst is_liverootRRRRUtzonetlist_running_zonesRR8tset_zonet exec_preptexec_pre_actuatorstactions_set_goalt ACTION_REMOVERRStACTION_INSTALLRat ACTION_UPDATERRtexecute_removaltactions_add_progresst actions_doneRRt DriverActiontremove_aliasestexecute_installtexecute_updatetactions_all_donetPHASE_FINALIZERht postexecuteRiRLRKRtupdate_pkg_installed_stateRR9timage_config_updateRGRHRdt_avoid_set_saveRDR*RRRt set_propertyRt save_configtEPERMRRtELOOPR{RRt UnknownActiontActionExecutionErrort ActionErrortsystexc_infotexec_fail_actuatorstInvalidPackageErrorstexec_post_actuatorst_create_fast_lookupst_ImagePlan__save_release_notest _executed_okRRRRt_userst_groupst _usersbynamet _groupsbynameRRRRR*RR!tsetupRtclient_update_indextKeyboardInterruptRt$ProblematicPermissionsIndexExceptiontWrapIndexingExceptionRRRt ExceptionRRRR"(R-RRR2t empty_imageRUtrzonestzRt executed_ppR_RRtaliasesR5texc_typet exc_valuetexc_tbR((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pytexecutecsV    0                                                           cCs4y|jjjtSWntk r/tSXdS(N(R RtnextRt StopIterationRx(R-((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__is_image_emptys  c& Cs|s tS|jd}g}g} g} g} g} g} g}g}g}t}tt|}t}g}xr|D]j}y;|jdd}|d}d|ksd|krtjj}|j|n9|jds|jdrtjj }n tjj }|tjjkr=tjj ||}ntjj ||}t |}||kr}|j|wn|j||j||j||j|j|j|Wqtjjk r}|j|qXqW|}~~tt|g|D]}t^q }|dk rP|tjksGt|}nB|tjkrt|j|j}n|j|j}|j}x~|D]v\}} xgt||||D]P\}}}}!|!r||!krqn|| |jr||j| qqWqWi}"x|D]}#t||#}$|$dkrR| j|#q |$dkr|#|kr| j|#t||#fq x+||#D]}%|"j|%gj|#qWq WxE|"D]=} t|"| dkr| jt | g|"| qqW|tjkr#| | } } nI|tj!krlg|j|jj"D]} | |"krK| ^qK} n|s|r~| s| s| r|s| s| rt#j$d | d |d | d | d | d| n|r|"St|"j%S(sGiven a user specified list of patterns, return a set of matching package stems. Any versions specified are ignored. 'match_type' indicates how matching should be restricted. The possible values are: MATCH_ALL Matching is performed using all known package stems. MATCH_INST_VERSIONS Matching is performed using only installed package stems. MATCH_UNINSTALLED Matching is performed using uninstalled packages; it is an error for a pattern to match an installed package. Note that patterns starting w/ pkg:/ require an exact match; patterns containing '*' will using fnmatch rules; the default trailing match rules are used for remaining patterns. Exactly duplicated patterns are ignored. Routine raises PlanCreationException if errors occur: it is illegal to specify multiple different patterns that match the same pkg name. Only patterns that contain wildcards are allowed to match multiple packages. 'raise_unmatched' determines whether an exception will be raised if any patterns didn't match any packages. 'raise_not_installed' determines whether an exception will be raised if any pattern matches a package that's not installed. 'return_matchdict' determines whether the dictionary containing which patterns matched which stems or the list of stems is returned. 'universe' contains a list of tuples of publishers and package names against which the patterns should be matched. s Build-ReleaseRXiit*t?spkg:/Rtalready_installedtillegaltmissing_matchestmultiple_matchest multispectunmatched_fmrisN(&RRRRR{Rt glob_matchRRtexact_name_matcht fmri_matchtMatchingPkgFmriRRRRiR'R!RR/RR RR+RRRRt pkg_namesRRRcRtMATCH_UNINSTALLEDtnamesRSRRg(&R R9t match_typetraise_unmatchedRtreturn_matchdicttuniversetbreleasetillegalstnonmatcht multimatcht not_installedR>R:tmatchersRRTtwildcard_patternsRBt npatternstpattpartstpat_stemtmatcherRtsfmriRRnRlRDR0tpkg_pubRRPt matchdictRR6Rr((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyRs/                +    %   !   c[sg}g}g} g} g} g} g} t}g}g}g}g}t}tt}g}tt|}tj}|tjtjgkrtd|j D}n|j d}t}t}g}x>|D]6}y|j dd}|d}d(}t |dkr.|d}nd|ksFd|krbtjj}|j|n9|jds|jd rtjj}n tjj}|tjjkrtjj||} ntjj||} |snWd|ksd|ks|d kr"tjj||| _ntjj||| _t| }!|!|kre|j|wn|j|!|j||rt| jd d(r|j|n|j||j| j|j| j|j| Wqtjjtjj fk r}"|j|"qXqW|}~~tt!|g|D]}#t^q:}$t}%t}&i}'|tj"kr|j#|j$}(tj%j&j'g})n|j#|j(}(g})|j)}*x|(j*D]y}+xpt!|||||D]V\}}} },}-||+| j+s qnx&|(j,|+d |)D]\}.}/|,rg|.j-|,tjj. rgq6nx|/D]\}0}1|0j}2|-r|-|2krqnnF|tjkr|0j+|krqnn"|0j+|kr|%j|qnn|1d d}3g}4t/}5xX|1j0dtj1D]A}6ytj2j3|6}7Wntj2j4k rIqnXt5j6|3kr|7j7dkr|7j ddkr|4jtjj|7j ddqn|7j7dkrqn|7j d}8|8jdsqn|7j d}9t8|9tk}:xU|*j9D]G\};}<|;|8kr|:r1|<|9ksD|: r|<|9krt:}5PqqWqW|5ro|&j|qnn|$|j;|0j+gj|0|- r|tj"kr|+|kr|||+dt:kr||+|2kr|'j;|tj|2n|1d d}3t5j<|3kr%|j|0nt5j6|3krn|4||0|>t=t>j?g|$|=|>D]}0|0|k^qf^q}?tt:t/gt|?j kr)x)|?D]}>|?|>r|$|=|>=qqWq)qXqXWx|D]}=t |$|=dkr4|=|kr4g|$|=D]-}>|$|=|>D]}@|@|kry|@^qyqg}Atg|AD] }0||0D]}B|Bj+^qq}Cx5|$|=j@D] }>|>|Ckr|$|=|>=qqWq4q4Wi}Dx|D]}=t |$|=}E|Edkr |=|&krT |j|=q& |=|%krp | j|=q& |j|=q |Edkr |=|kr | j|=tg|$|=D]'}F|$|=|FD]}0|0jA^q q fq x=|$|=j9D]+\}G}H|Dj;|Ggj|=|Hfq Wq Wi}Ixo|Dj9D]a\}+}Jg|JD]*\}=}H|=|krP |=t|Hf^qP }Kt/}L|Kr |K}Mx|JD]C\}=}H|=|kr |=jds |=jdr t:}LPq q q Wng|JD]*\}=}H|=|kr |=t|Hf^q }Ng|ND]<\}=}H|=jdsK |=jdr! |=t|Hf^q! }M|Mrr t:}Ln|N}M|Mdd}Ox"|MdD]\}=}P|O|PM}Oq W|j0|+t/}Q|L r |Or |tj"kr r |dt:kr tfd|OD}Ot:}Qn|Or4 tB|O|I|+tg|I|>D]}0|0j^qo }RtBg|RD](}=|j0|=d$t:fd|=f^q dd}S|j0|0j+d(}Td(}U|T|I|>kr d(}Tn |Tj}Ug|I|>D]6}0|0|TksB|0j|Skr|0j|Ukr|0^q|I|>jFd%}Xxu|Ij9D]g\}Y}VtB|Vd&|Xd'}Z|W|Z|krqng|VD]}0|0j|Zjkr|0^q|I|Yss Build-ReleaseRXiiR8R9spkg:/Rtlatestt match_latestt info_neededtmetadatatstatesRR$RtrequireRs5.11RRsvariant.Rspkg://s//c3s$|]}|jkr|VqdS(N(R'(R8R(tinst_pub(s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pys sR?R=R;R<R>twrong_publisherstwrong_variantst rejected_patsiRQR(iN(GRRRRJR`R RRRRRRRRR{RR@RRRARBRCRRQtMatchingVersionR\RRRiRfR'R!t VersionErrorR/RRRRRR&RRRFRtentries_by_versionR"tCONSTRAINT_AUTORRiRKRR}RRtPKG_STATE_RENAMEDRRRRxRctPKG_STATE_OBSOLETEtreduceR,tor_RgRRRRSRR([R R9RGRRRRRLRMRNROR>texclpatstwrongpubtwrongvarRPRRTtversionsRQt renamed_fmristobsolete_fmristinstalled_pubsRKt latest_patsRBRRRSRTRUtpat_verRVRRWRRnRlRct rejected_varst rejected_pubsR0R\RRRQRPtverRRqR]tfpubR^tren_depst omit_packagetastrRstatnametatvaluetis_listtvntvvRRtobsoleteRtrenamed_matchestpfttargetsRYR6R*RrRR|tlsttnwc_pst pub_namedtrel_psttmp_pst common_pfmristvststripped_by_publishert pubs_foundtbest_pubtinst_ftinst_vtflistR R3tpnametplatest((R`s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyt__match_user_fmris^s48                           +   +                "P$   " #      1$ $'   (        2    & . & 1c Cs]t|}t}|j}i}t}g}tj||tjd|dt\}}tj||tjdtdtdt} t|j} t| j} | j | st xb| | D]V} t | | dkst | | d} |j | gj | |j| qWx|jD]\}}|jdd}t |dksu|dd kr|j|jd td tn|j|jd|d|j|q5Wtg|D]$}d |ksd |kr|^q}||8}xR|D]J}|jdd}t |dksF|dd kr |j|q q W||8}||O}i}xN|D]F}|j tjj|ddjd td ttj|q{WxR|jD]D\}}t |dkr|j ||fq|j||R[R\RURWRXRYR]RuRRwRRRRRRRRt staticmethodRhRgRRRRRRR RR RRR R RRRRRRRR8RRgRRRRRRRRRRRRRRMRJRRRRnRAR/R0RR RRRRRRR4RRR`RR(((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pyR Es -     #  ,4 " -  '  v      7 &    I  @X 8  {         !  8P<   v ' G k N!    8  2     V  L  C  (Bt collectionsRRRRRR?RR,RRRR;RRRt pkg.clientRtloggert pkg.actionsR{tpkg.actions.driverRRt pkg.catalogtpkg.client.api_errorstclientRStpkg.client.indexerRtpkg.client.linkedimage.zonet linkedimageRtpkg.client.pkg_solverRtpkg.client.pkgdefsRtpkg.client.pkgplanRktpkg.client.plandescR(t pkg.digestRtpkg.fmrit pkg.manifestROtpkg.miscRJt pkg.mediatorRbR]tpkg.search_errorst search_errorsRt pkg.versiontpkg.client.debugvaluesRRRRRRR R tobjectR (((s:/usr/lib/python2.7/vendor-packages/pkg/client/imageplan.pytsJ                  (