Ñò #ßøTc@sÞddklZddkZddkZddkZddkZddki i Z ddk l Z ddk lZddkZddkZddkZeiddƒZde ifd„ƒYZd e ifd „ƒYZdS( iÿÿÿÿ(tlint_fmri_successorN(t ActionError(t FileActiont ObsoleteFmrisis_obsolete, fmritPkgDupActionCheckercBsseZdZdZd„Zd„Zdd„Zedƒe_dd„Z ed ƒe _d d „Z ed ƒe _d d„Z edƒe _dd„Z edƒe _dd„Z edƒe _dd„Zedƒe_ded„Zdd„Zedƒe_dd„Zed ƒe_d!d"„Zed#ƒe_ed$„Zd%„Zd&d'„Zed(ƒe_RS()s.A class to check duplicate actions/attributes.spkglint.dupactioncCstdƒ|_h|_h|_h|_h|_h|_h|_h|_h|_ h|_ h|_ h|_ h|_ h|_h|_h|_h|_h|_h|_h|_h|_h|_h|_h|_h|_h|_g|_tt|ƒi|ƒdS(Ns!Checks for duplicate IPS actions.(t_t descriptiont ref_pathst lint_pathst ref_driverst lint_driverst ref_usernamestref_uidstlint_usernamest lint_uidstref_groupnamestlint_groupnamestref_gidst lint_gidstref_legacy_pkgstlint_legacy_pkgstprocessed_pathstprocessed_driverstprocessed_usernamestprocessed_uidstprocessed_groupnamestprocessed_gidstprocessed_refcount_pathstprocessed_refcount_legacy_pkgstprocessed_overlaystseen_dup_typestseen_mediated_linkstsuperRt__init__(tselftconfig((s=/usr/lib/python2.6/vendor-packages/pkg/lint/pkglint_action.pyR!/s8                          cs-dtd„}h}xQ|i|id|id|iƒD]+}|i|iiƒgƒi |iƒq:Wx6|i D]+}|i|iiƒgƒi |iƒqsW|i i t dƒƒx|i|id|iƒD]è‰t‡fd†|iˆiiƒgƒDƒƒoqÔqÔ|ˆd|iƒ|ˆd|idd ƒ|ˆd |idd ƒ|ˆd |idd ƒ|ˆd|idd ƒ|ˆd|iddƒ|ˆd|iddƒqÔW|i i t dƒƒxÕ|i|id|id|iƒD]¯‰|ˆd|iƒ|ˆd|idd ƒ|ˆd |idd ƒ|ˆd |idd ƒ|ˆd|idd ƒ|ˆd|iddƒ|ˆd|iddƒqûW|i i t dƒƒxº|i D]¯‰|ˆd|iƒ|ˆd|idd ƒ|ˆd |idd ƒ|ˆd |idd ƒ|ˆd|idd ƒ|ˆd|iddƒ|ˆd|iddƒqÎW|i|if|i|if|i|if|i|if|i|if|i|if|i|ifg}x6|D].\}}|i||d|i ƒh|_!q÷WdS(sSCalled to initialise a given checker using the supplied engine.c s#ˆiƒ}‡fd†}x||ƒD]ó}|o|i|joq(n||ijoq(n|iƒ}|i|ƒxN|iƒD]@\} } t| tƒot| ƒ|i| ¨s tpathtpkgR&tlegacyR+tdrivertusernametusertuidt groupnametgrouptgids,Seeding lint action duplicates dictionaries.s-Seeding local action duplicates dictionaries.t ignore_pubsN("tNonetFalset gen_manifestst lint_api_instR?R@t setdefaultR3tget_nameR4tlint_manifeststloggertdebugRt ref_api_insttanytgetRRR R R RRRRR R RRRt _merge_dictRMtlint_dic(R"tengineR>t lint_fmristmtdup_dictionariesR[tref_dic((RBs=/usr/lib/python2.6/vendor-packages/pkg/lint/pkglint_action.pytstartupjsœ)# #    #            t001c Cs;|iddgd|i|i|||iƒd|ƒdS(s6Checks for duplicate paths on non-ref-counted actions.tfiletlicenseRCtmsgidN(tdup_attr_checkRRR*(R"R9RBR\t pkglint_id((s=/usr/lib/python2.6/vendor-packages/pkg/lint/pkglint_action.pytduplicate_pathsîs sPaths should be unique.t002c Cs8|idgd|i|i|||iƒd|ƒdS(s"Checks for duplicate driver names.RFR+ReN(RfR RR*(R"R9RBR\Rg((s=/usr/lib/python2.6/vendor-packages/pkg/lint/pkglint_action.pytduplicate_driversøs sDriver names should be unique.t003c Cs8|idgd|i|i|||iƒd|ƒdS(s Checks for duplicate user names.RHRGReN(RfR RR*(R"R9RBR\Rg((s=/usr/lib/python2.6/vendor-packages/pkg/lint/pkglint_action.pytduplicate_usernamess sUser names should be unique.t004c Cs8|idgd|i|i|||iƒd|ƒdS(sChecks for duplicate uids.RHRIReN(RfR RR*(R"R9RBR\Rg((s=/usr/lib/python2.6/vendor-packages/pkg/lint/pkglint_action.pytduplicate_uids s sUIDs should be unique.t005c Cs8|idgd|i|i|||iƒd|ƒdS(s!Checks for duplicate group names.RKRJReN(RfRRR*(R"R9RBR\Rg((s=/usr/lib/python2.6/vendor-packages/pkg/lint/pkglint_action.pytduplicate_groupnamess sGroup names should be unique.t006c Cs8|idgd|i|i|||iƒd|ƒdS(sChecks for duplicate gids.RKR+ReN(RfRRR*(R"R9RBR\Rg((s=/usr/lib/python2.6/vendor-packages/pkg/lint/pkglint_action.pytduplicate_gidss sGIDs should be unique.t007cCs³|ipdSxd|i|ifd|i|ifgD]q\}}}|ii|dƒ}|pq:n||jot||ƒdjoq:n||joq:nd|i |f} t ƒ} |} t ƒ} xû||D]ï\} }|i d|d|d| ƒoqán| i | ƒx­|i | ƒD]œ}|id ƒp@|id ƒp0|id ƒp |id ƒp|id ƒoq0n|i|| g|iƒƒ\}}|pq0n| i |ƒq0WqáWg}| oÀt ƒ}x t| ƒD]}h}xž||D]’\} }|i d|d|d| ƒoqn|i |i ƒ||ijo@|i|}||jo||i| ƒq | g|| %st sx%(type)s action for %(attr)s is reference-counted but has different attributes across %(count)s duplicates: %(suspects)sttypeR5tcounttsuspectsRet ignore_linted(t refcountableRRRRR,RYRNtlenR+R1tlintedtaddt differencest startswithtconflicting_variantsR*tsortedR4tjoinRStTrueterrorR(R"R9RBR\RgR5R`t processed_dicR=RttfmristtargR‚tpfmriR'tkeyt conflict_varstconflict_actionsR|t action_typestvalt_[1]t_[2]((s=/usr/lib/python2.6/vendor-packages/pkg/lint/pkglint_action.pytduplicate_refcount_path_attrs(sŽ   $               :   /s@Duplicated reference counted actions should have the same attrs.tc CsÚ||ijodS|i|jodS|i|} | |jodS| |jot|| ƒdjodStƒ} tƒ} xY|| D]M\} }|idjod|ijoqn| i|ƒ| i| ƒqW|i| |ƒ\}}|djo¢|idjo’|i|||ƒ\}}| oIx7|D]/\}}|i|dd |i||fƒq>Wt|| ~ƒƒ} d„} d„} g} g} g}tƒ}xÈ|D]À}|iiddƒ}|ol|djo_|iiddƒp8|itdƒh|d6| ||ƒd 6d fƒqZ| i|ƒqš|o|d jo| i|ƒqš|i|ƒqšW| p| p |gfSd „}d „}|i | |ƒ\}}|oK|itdƒh|d6di t | ƒƒd6||ƒd6dfƒn| pn|i | |ƒ\}}|oK|itdƒh|d6di t | ƒƒd6||ƒd6dfƒqhnt }x#| D]}|i |g| |ƒ\}}|oµ|i |ƒ|i ||ƒ\}}|oK|itdƒh|d6di t | ƒƒd6||ƒd6dfƒq||ƒ}xi|D]#}|||ƒjo t}q+q+Wqu|itdƒh|d6di t | ƒƒd6dfƒquW|o>|itdƒh|d6di t | ƒƒd6dfƒn| p| oE|o>|itdƒh|d6di t | ƒƒd6dfƒn||fS(s^Given a list of file actions that all deliver to the same path, return that list minus any actions that are attempting to use overlays. Also return a list of tuples containing any overlay-related errors encountered, in the the format: [ (, ), ... ] iRCcSshti|ƒ}xL|iiƒD];}|djoqq|idƒoqq|i|=qWt|ƒS(séreturns a string representation of the given action with all non-variant attributes other than path and overlay removed. Used for comparison of overlay actions. RCtoverlayRu(spathsoverlay(RÀtdeepcopyR,tkeysRƒR´(R9t action_copyR((s=/usr/lib/python2.6/vendor-packages/pkg/lint/pkglint_action.pyt _remove_attrsús cSs-x&|D]\}}||jo|SqWdS(s#return the fmri for a given action.N((R9t action_fmrisR3R¯((s=/usr/lib/python2.6/vendor-packages/pkg/lint/pkglint_action.pyt _get_fmri s  RËtallowtpreservesQpath %(path)s missing 'preserve' attribute for 'overlay=allow' action in %(fmri)sR3t1ttruecSs[tƒ}x<|D]4}x+|D]#\}}|id||fƒqWqWdit|ƒƒS(s pretty print a group of variantss%s=%ss, (R1RR†R2(RŽRšRKRR‘((s=/usr/lib/python2.6/vendor-packages/pkg/lint/pkglint_action.pyt_render_variants0s  cSsKh}x>tiD]3}|djoqn|ii|dƒ|| 8 charsR+RDRes%s%s.1is[a-z]sWUsername %(name)s in %(pkg)s does not have an initial lower-case alphabetical characters%s%s.2s^[a-z]([a-zA-Z1-9._-])*$s7Username %(name)s in %(pkg)s is invalid - see passwd(4)s%s%s.3(R+R,RRˆRR3tretmatch(R"R9RBR\RgRG((s=/usr/lib/python2.6/vendor-packages/pkg/lint/pkglint_action.pytusername_format³s*   +    sUser names should be valid.RëcCs¥|idjodS|iidƒdjodS|id}tii|ddƒ}|ip?|itdƒh|d6|id 6d d |i|fƒndS( s6Checks that 'incorporate' dependencies have a version.R)NRzt incorporateR3R+s5.11sK'incorporate' depend action on %(fmri)s in %(pkg)s does not have a version.RDRes%s%s( R+R,RYRDR3R/RRˆR(R"R9RBR\RgR3RŒ((s=/usr/lib/python2.6/vendor-packages/pkg/lint/pkglint_action.pytversion_incorporateÓs    s1'incorporate' dependencies should have a version.t012cCs‘xŠ|iiƒD]y}|idƒoc|i|iƒ}|d jo?|itdƒh|d6|id6dd |i|fƒq‰qqWd S( s5facet values should be set to a valid value in pkg(5)RvRÕRÿtalls[facet value should be set to 'true', 'false' or 'all' in attribute name %(key)s in %(fmri)sRR3Res%s%sN(struesfalsesall(R,RÍRƒRR RR3R+(R"R9RBR\RgRtvalue((s=/usr/lib/python2.6/vendor-packages/pkg/lint/pkglint_action.pyt facet_valueés    sAfacet value should be set to a valid value in an action attributet013c Csîd}|d|dg}d|ijp|idi|ƒ odS|id|joW|itdƒid|idd|id d i|ƒƒd d i|i|ƒƒn|id|djo„x|id ƒD]l}t ii |ddƒ}|i pqÚn|ididt |ƒd|iƒd d i|i|ƒƒqÚWn|id|djo„x|id ƒD]l}t ii |ddƒ}|i oqvn|ididt |ƒd|iƒd d i|i|ƒƒqvWndS(s6pkg_actuators should be set to a valid value in pkg(5)spkg.additional-supdate-on-uninstallsuninstall-on-uninstallR+NsGinvalid package actuator name {attr} in {fmri} supported values: {sact}R5R3tsacts, Res{0}{1}RLR+s5.11sUinvalid package-triggered uninstall FMRI {tf} in {fmri}: should not contain a versionttfsWinvalid package-triggered update FMRI {tf} in {fmri}: should contain a specific version( R,RƒR RtformatR3R†R+tattrlistRDR/RR´( R"R9RBR\Rgt start_patterntsupported_actuatorsR<RŒ((s=/usr/lib/python2.6/vendor-packages/pkg/lint/pkglint_action.pytsupported_pkg_actuatorýsN               s/package actuator should be set to a valid value(RøRùR+R!RaR RRûRRER!R(R<R>RdR€RCRGRIRMRU(((s=/usr/lib/python2.6/vendor-packages/pkg/lint/pkglint_action.pyRüÍsD % 7  ?  ' 3   u         4(tpkg.lint.engineRt collectionsRÀtos.pathRòtpkg.fmriRDt pkg.lint.basetlintR%t pkg.actionsRtpkg.actions.fileRRERRt namedtupleRt ActionCheckerRRü(((s=/usr/lib/python2.6/vendor-packages/pkg/lint/pkglint_action.pyts        ÿÿÿ¦