PNG  IHDRQgAMA a cHRMz&u0`:pQ<bKGDgmIDATxwUﹻ& ^CX(J I@ "% (** BX +*i"]j(IH{~R)[~>h{}gy)I$Ij .I$I$ʊy@}x.: $I$Ii}VZPC)I$IF ^0ʐJ$I$Q^}{"r=OzI$gRZeC.IOvH eKX $IMpxsk.쒷/&r[޳<v| .I~)@$updYRa$I |M.e JaֶpSYR6j>h%IRز if&uJ)M$I vLi=H;7UJ,],X$I1AҒJ$ XY XzI@GNҥRT)E@;]K*Mw;#5_wOn~\ DC&$(A5 RRFkvIR}l!RytRl;~^ǷJj اy뷦BZJr&ӥ8Pjw~vnv X^(I;4R=P[3]J,]ȏ~:3?[ a&e)`e*P[4]T=Cq6R[ ~ޤrXR Հg(t_HZ-Hg M$ãmL5R uk*`%C-E6/%[t X.{8P9Z.vkXŐKjgKZHg(aK9ڦmKjѺm_ \#$5,)-  61eJ,5m| r'= &ڡd%-]J on Xm|{ RҞe $eڧY XYrԮ-a7RK6h>n$5AVڴi*ֆK)mѦtmr1p| q:흺,)Oi*ֺK)ܬ֦K-5r3>0ԔHjJئEZj,%re~/z%jVMڸmrt)3]J,T K֦OvԒgii*bKiNO~%PW0=dii2tJ9Jݕ{7"I P9JKTbu,%r"6RKU}Ij2HKZXJ,妝 XYrP ެ24c%i^IK|.H,%rb:XRl1X4Pe/`x&P8Pj28Mzsx2r\zRPz4J}yP[g=L) .Q[6RjWgp FIH*-`IMRaK9TXcq*I y[jE>cw%gLRԕiFCj-ďa`#e~I j,%r,)?[gp FI˨mnWX#>mʔ XA DZf9,nKҲzIZXJ,L#kiPz4JZF,I,`61%2s $,VOϚ2/UFJfy7K> X+6 STXIeJILzMfKm LRaK9%|4p9LwJI!`NsiazĔ)%- XMq>pk$-$Q2x#N ؎-QR}ᶦHZډ)J,l#i@yn3LN`;nڔ XuX5pF)m|^0(>BHF9(cզEerJI rg7 4I@z0\JIi䵙RR0s;$s6eJ,`n 䂦0a)S)A 1eJ,堌#635RIgpNHuTH_SԕqVe ` &S)>p;S$魁eKIuX`I4춒o}`m$1":PI<[v9^\pTJjriRŭ P{#{R2,`)e-`mgj~1ϣLKam7&U\j/3mJ,`F;M'䱀 .KR#)yhTq;pcK9(q!w?uRR,n.yw*UXj#\]ɱ(qv2=RqfB#iJmmL<]Y͙#$5 uTU7ӦXR+q,`I}qL'`6Kͷ6r,]0S$- [RKR3oiRE|nӦXR.(i:LDLTJjY%o:)6rxzҒqTJjh㞦I.$YR.ʼnGZ\ֿf:%55 I˼!6dKxm4E"mG_ s? .e*?LRfK9%q#uh$)i3ULRfK9yxm܌bj84$i1U^@Wbm4uJ,ҪA>_Ij?1v32[gLRD96oTaR׿N7%L2 NT,`)7&ƝL*꽙yp_$M2#AS,`)7$rkTA29_Iye"|/0t)$n XT2`YJ;6Jx".e<`$) PI$5V4]29SRI>~=@j]lp2`K9Jaai^" Ԋ29ORI%:XV5]JmN9]H;1UC39NI%Xe78t)a;Oi Ҙ>Xt"~G>_mn:%|~ޅ_+]$o)@ǀ{hgN;IK6G&rp)T2i୦KJuv*T=TOSV>(~D>dm,I*Ɛ:R#ۙNI%D>G.n$o;+#RR!.eU˽TRI28t)1LWϚ>IJa3oFbu&:tJ*(F7y0ZR ^p'Ii L24x| XRI%ۄ>S1]Jy[zL$adB7.eh4%%누>WETf+3IR:I3Xה)3אOۦSRO'ٺ)S}"qOr[B7ϙ.edG)^ETR"RtRݜh0}LFVӦDB^k_JDj\=LS(Iv─aTeZ%eUAM-0;~˃@i|l @S4y72>sX-vA}ϛBI!ݎߨWl*)3{'Y|iSlEڻ(5KtSI$Uv02,~ԩ~x;P4ցCrO%tyn425:KMlD ^4JRxSهF_}شJTS6uj+ﷸk$eZO%G*^V2u3EMj3k%)okI]dT)URKDS 7~m@TJR~荪fT"֛L \sM -0T KfJz+nإKr L&j()[E&I ߴ>e FW_kJR|!O:5/2跌3T-'|zX ryp0JS ~^F>-2< `*%ZFP)bSn"L :)+pʷf(pO3TMW$~>@~ū:TAIsV1}S2<%ޟM?@iT ,Eūoz%i~g|`wS(]oȤ8)$ ntu`өe`6yPl IzMI{ʣzʨ )IZ2= ld:5+請M$-ї;U>_gsY$ÁN5WzWfIZ)-yuXIfp~S*IZdt;t>KūKR|$#LcԀ+2\;kJ`]YǔM1B)UbG"IRߊ<xܾӔJ0Z='Y嵤 Leveg)$znV-º^3Ւof#0Tfk^Zs[*I꯳3{)ˬW4Ւ4 OdpbZRS|*I 55#"&-IvT&/윚Ye:i$ 9{LkuRe[I~_\ؠ%>GL$iY8 9ܕ"S`kS.IlC;Ҏ4x&>u_0JLr<J2(^$5L s=MgV ~,Iju> 7r2)^=G$1:3G< `J3~&IR% 6Tx/rIj3O< ʔ&#f_yXJiގNSz; Tx(i8%#4 ~AS+IjerIUrIj362v885+IjAhK__5X%nV%Iͳ-y|7XV2v4fzo_68"S/I-qbf; LkF)KSM$ Ms>K WNV}^`-큧32ŒVؙGdu,^^m%6~Nn&͓3ŒVZMsRpfEW%IwdǀLm[7W&bIRL@Q|)* i ImsIMmKmyV`i$G+R 0tV'!V)֏28vU7͒vHꦼtxꗞT ;S}7Mf+fIRHNZUkUx5SAJㄌ9MqμAIRi|j5)o*^'<$TwI1hEU^c_j?Е$%d`z cyf,XO IJnTgA UXRD }{H}^S,P5V2\Xx`pZ|Yk:$e ~ @nWL.j+ϝYb퇪bZ BVu)u/IJ_ 1[p.p60bC >|X91P:N\!5qUB}5a5ja `ubcVxYt1N0Zzl4]7­gKj]?4ϻ *[bg$)+À*x쳀ogO$~,5 زUS9 lq3+5mgw@np1sso Ӻ=|N6 /g(Wv7U;zωM=wk,0uTg_`_P`uz?2yI!b`kĸSo+Qx%!\οe|އԁKS-s6pu_(ֿ$i++T8=eY; צP+phxWQv*|p1. ά. XRkIQYP,drZ | B%wP|S5`~́@i޾ E;Չaw{o'Q?%iL{u D?N1BD!owPHReFZ* k_-~{E9b-~P`fE{AܶBJAFO wx6Rox5 K5=WwehS8 (JClJ~ p+Fi;ŗo+:bD#g(C"wA^ r.F8L;dzdIHUX݆ϞXg )IFqem%I4dj&ppT{'{HOx( Rk6^C٫O.)3:s(۳(Z?~ٻ89zmT"PLtw䥈5&b<8GZ-Y&K?e8,`I6e(֍xb83 `rzXj)F=l($Ij 2*(F?h(/9ik:I`m#p3MgLaKjc/U#n5S# m(^)=y=đx8ŬI[U]~SцA4p$-F i(R,7Cx;X=cI>{Km\ o(Tv2vx2qiiDJN,Ҏ!1f 5quBj1!8 rDFd(!WQl,gSkL1Bxg''՞^ǘ;pQ P(c_ IRujg(Wz bs#P­rz> k c&nB=q+ؔXn#r5)co*Ũ+G?7< |PQӣ'G`uOd>%Mctz# Ԫڞ&7CaQ~N'-P.W`Oedp03C!IZcIAMPUۀ5J<\u~+{9(FbbyAeBhOSܳ1 bÈT#ŠyDžs,`5}DC-`̞%r&ڙa87QWWp6e7 Rϫ/oY ꇅ Nܶըtc!LA T7V4Jsū I-0Pxz7QNF_iZgúWkG83 0eWr9 X]㾮݁#Jˢ C}0=3ݱtBi]_ &{{[/o[~ \q鯜00٩|cD3=4B_b RYb$óBRsf&lLX#M*C_L܄:gx)WΘsGSbuL rF$9';\4Ɍq'n[%p.Q`u hNb`eCQyQ|l_C>Lb꟟3hSb #xNxSs^ 88|Mz)}:](vbۢamŖ࿥ 0)Q7@0=?^k(*J}3ibkFn HjB׻NO z x}7p 0tfDX.lwgȔhԾŲ }6g E |LkLZteu+=q\Iv0쮑)QٵpH8/2?Σo>Jvppho~f>%bMM}\//":PTc(v9v!gոQ )UfVG+! 35{=x\2+ki,y$~A1iC6#)vC5^>+gǵ@1Hy٪7u;p psϰu/S <aʸGu'tD1ԝI<pg|6j'p:tպhX{o(7v],*}6a_ wXRk,O]Lܳ~Vo45rp"N5k;m{rZbΦ${#)`(Ŵg,;j%6j.pyYT?}-kBDc3qA`NWQū20/^AZW%NQ MI.X#P#,^Ebc&?XR tAV|Y.1!؅⨉ccww>ivl(JT~ u`ٵDm q)+Ri x/x8cyFO!/*!/&,7<.N,YDŽ&ܑQF1Bz)FPʛ?5d 6`kQձ λc؎%582Y&nD_$Je4>a?! ͨ|ȎWZSsv8 j(I&yj Jb5m?HWp=g}G3#|I,5v珿] H~R3@B[☉9Ox~oMy=J;xUVoj bUsl_35t-(ՃɼRB7U!qc+x4H_Qo֮$[GO<4`&č\GOc[.[*Af%mG/ ňM/r W/Nw~B1U3J?P&Y )`ѓZ1p]^l“W#)lWZilUQu`-m|xĐ,_ƪ|9i:_{*(3Gѧ}UoD+>m_?VPۅ15&}2|/pIOʵ> GZ9cmíتmnz)yߐbD >e}:) r|@R5qVSA10C%E_'^8cR7O;6[eKePGϦX7jb}OTGO^jn*媓7nGMC t,k31Rb (vyܴʭ!iTh8~ZYZp(qsRL ?b}cŨʊGO^!rPJO15MJ[c&~Z`"ѓޔH1C&^|Ш|rʼ,AwĴ?b5)tLU)F| &g٣O]oqSUjy(x<Ϳ3 .FSkoYg2 \_#wj{u'rQ>o;%n|F*O_L"e9umDds?.fuuQbIWz |4\0 sb;OvxOSs; G%T4gFRurj(֍ڑb uԖKDu1MK{1^ q; C=6\8FR艇!%\YÔU| 88m)֓NcLve C6z;o&X x59:q61Z(T7>C?gcļxѐ Z oo-08jہ x,`' ҔOcRlf~`jj".Nv+sM_]Zk g( UOPyεx%pUh2(@il0ݽQXxppx-NS( WO+轾 nFߢ3M<;z)FBZjciu/QoF 7R¥ ZFLF~#ȣߨ^<쩡ݛкvџ))ME>ώx4m#!-m!L;vv#~Y[đKmx9.[,UFS CVkZ +ߟrY٧IZd/ioi$%͝ب_ֶX3ܫhNU ZZgk=]=bbJS[wjU()*I =ώ:}-蹞lUj:1}MWm=̛ _ ¾,8{__m{_PVK^n3esw5ӫh#$-q=A̟> ,^I}P^J$qY~Q[ Xq9{#&T.^GVj__RKpn,b=`żY@^՝;z{paVKkQXj/)y TIc&F;FBG7wg ZZDG!x r_tƢ!}i/V=M/#nB8 XxЫ ^@CR<{䤭YCN)eKOSƟa $&g[i3.C6xrOc8TI;o hH6P&L{@q6[ Gzp^71j(l`J}]e6X☉#͕ ׈$AB1Vjh㭦IRsqFBjwQ_7Xk>y"N=MB0 ,C #o6MRc0|$)ف"1!ixY<B9mx `,tA>)5ػQ?jQ?cn>YZe Tisvh# GMމȇp:ԴVuږ8ɼH]C.5C!UV;F`mbBk LTMvPʍϤj?ԯ/Qr1NB`9s"s TYsz &9S%U԰> {<ؿSMxB|H\3@!U| k']$U+> |HHMLޢ?V9iD!-@x TIî%6Z*9X@HMW#?nN ,oe6?tQwڱ.]-y':mW0#!J82qFjH -`ѓ&M0u Uγmxϵ^-_\])@0Rt.8/?ٰCY]x}=sD3ojަЫNuS%U}ԤwHH>ڗjܷ_3gN q7[q2la*ArǓԖ+p8/RGM ]jacd(JhWko6ڎbj]i5Bj3+3!\j1UZLsLTv8HHmup<>gKMJj0@H%,W΃7R) ">c, xixј^ aܖ>H[i.UIHc U1=yW\=S*GR~)AF=`&2h`DzT󑓶J+?W+}C%P:|0H܆}-<;OC[~o.$~i}~HQ TvXΈr=b}$vizL4:ȰT|4~*!oXQR6Lk+#t/g lԁߖ[Jڶ_N$k*". xsxX7jRVbAAʯKҎU3)zSNN _'s?f)6X!%ssAkʱ>qƷb hg %n ~p1REGMHH=BJiy[<5 ǁJҖgKR*倳e~HUy)Ag,K)`Vw6bRR:qL#\rclK/$sh*$ 6덤 KԖc 3Z9=Ɣ=o>X Ώ"1 )a`SJJ6k(<c e{%kϊP+SL'TcMJWRm ŏ"w)qc ef꒵i?b7b('"2r%~HUS1\<(`1Wx9=8HY9m:X18bgD1u ~|H;K-Uep,, C1 RV.MR5άh,tWO8WC$ XRVsQS]3GJ|12 [vM :k#~tH30Rf-HYݺ-`I9%lIDTm\ S{]9gOڒMNCV\G*2JRŨ;Rҏ^ڽ̱mq1Eu?To3I)y^#jJw^Ńj^vvlB_⋌P4x>0$c>K†Aļ9s_VjTt0l#m>E-,,x,-W)سo&96RE XR.6bXw+)GAEvL)͞K4$p=Ũi_ѱOjb HY/+@θH9޼]Nԥ%n{ &zjT? Ty) s^ULlb,PiTf^<À] 62R^V7)S!nllS6~͝V}-=%* ʻ>G DnK<y&>LPy7'r=Hj 9V`[c"*^8HpcO8bnU`4JȪAƋ#1_\ XϘHPRgik(~G~0DAA_2p|J묭a2\NCr]M_0 ^T%e#vD^%xy-n}-E\3aS%yN!r_{ )sAw ڼp1pEAk~v<:`'ӭ^5 ArXOI驻T (dk)_\ PuA*BY]yB"l\ey hH*tbK)3 IKZ򹞋XjN n *n>k]X_d!ryBH ]*R 0(#'7 %es9??ښFC,ՁQPjARJ\Ρw K#jahgw;2$l*) %Xq5!U᢯6Re] |0[__64ch&_}iL8KEgҎ7 M/\`|.p,~`a=BR?xܐrQ8K XR2M8f ?`sgWS%" Ԉ 7R%$ N}?QL1|-эټwIZ%pvL3Hk>,ImgW7{E xPHx73RA @RS CC !\ȟ5IXR^ZxHл$Q[ŝ40 (>+ _C >BRt<,TrT {O/H+˟Pl6 I B)/VC<6a2~(XwV4gnXR ϱ5ǀHٻ?tw똤Eyxp{#WK qG%5],(0ӈH HZ])ג=K1j&G(FbM@)%I` XRg ʔ KZG(vP,<`[ Kn^ SJRsAʠ5xՅF`0&RbV tx:EaUE/{fi2;.IAwW8/tTxAGOoN?G}l L(n`Zv?pB8K_gI+ܗ #i?ޙ.) p$utc ~DžfՈEo3l/)I-U?aԅ^jxArA ΧX}DmZ@QLےbTXGd.^|xKHR{|ΕW_h] IJ`[G9{).y) 0X YA1]qp?p_k+J*Y@HI>^?gt.06Rn ,` ?);p pSF9ZXLBJPWjgQ|&)7! HjQt<| ؅W5 x W HIzYoVMGP Hjn`+\(dNW)F+IrS[|/a`K|ͻ0Hj{R,Q=\ (F}\WR)AgSG`IsnAR=|8$}G(vC$)s FBJ?]_u XRvύ6z ŨG[36-T9HzpW̞ú Xg큽=7CufzI$)ki^qk-) 0H*N` QZkk]/tnnsI^Gu't=7$ Z;{8^jB% IItRQS7[ϭ3 $_OQJ`7!]W"W,)Iy W AJA;KWG`IY{8k$I$^%9.^(`N|LJ%@$I}ֽp=FB*xN=gI?Q{٥4B)mw $Igc~dZ@G9K X?7)aK%݅K$IZ-`IpC U6$I\0>!9k} Xa IIS0H$I H ?1R.Чj:4~Rw@p$IrA*u}WjWFPJ$I➓/6#! LӾ+ X36x8J |+L;v$Io4301R20M I$-E}@,pS^ޟR[/s¹'0H$IKyfŸfVOπFT*a$I>He~VY/3R/)>d$I>28`Cjw,n@FU*9ttf$I~<;=/4RD~@ X-ѕzἱI$: ԍR a@b X{+Qxuq$IЛzo /~3\8ڒ4BN7$IҀj V]n18H$IYFBj3̵̚ja pp $Is/3R Ӻ-Yj+L;.0ŔI$Av? #!5"aʄj}UKmɽH$IjCYs?h$IDl843.v}m7UiI=&=0Lg0$I4: embe` eQbm0u? $IT!Sƍ'-sv)s#C0:XB2a w I$zbww{."pPzO =Ɔ\[ o($Iaw]`E).Kvi:L*#gР7[$IyGPI=@R 4yR~̮´cg I$I/<tPͽ hDgo 94Z^k盇΄8I56^W$I^0̜N?4*H`237}g+hxoq)SJ@p|` $I%>-hO0eO>\ԣNߌZD6R=K ~n($I$y3D>o4b#px2$yڪtzW~a $I~?x'BwwpH$IZݑnC㧄Pc_9sO gwJ=l1:mKB>Ab<4Lp$Ib o1ZQ@85b̍ S'F,Fe,^I$IjEdù{l4 8Ys_s Z8.x m"+{~?q,Z D!I$ϻ'|XhB)=…']M>5 rgotԎ 獽PH$IjIPhh)n#cÔqA'ug5qwU&rF|1E%I$%]!'3AFD/;Ck_`9 v!ٴtPV;x`'*bQa w I$Ix5 FC3D_~A_#O݆DvV?<qw+I$I{=Z8".#RIYyjǪ=fDl9%M,a8$I$Ywi[7ݍFe$s1ՋBVA?`]#!oz4zjLJo8$I$%@3jAa4(o ;p,,dya=F9ً[LSPH$IJYЉ+3> 5"39aZ<ñh!{TpBGkj}Sp $IlvF.F$I z< '\K*qq.f<2Y!S"-\I$IYwčjF$ w9 \ߪB.1v!Ʊ?+r:^!I$BϹB H"B;L'G[ 4U#5>੐)|#o0aڱ$I>}k&1`U#V?YsV x>{t1[I~D&(I$I/{H0fw"q"y%4 IXyE~M3 8XψL}qE$I[> nD?~sf ]o΁ cT6"?'_Ἣ $I>~.f|'!N?⟩0G KkXZE]ޡ;/&?k OۘH$IRۀwXӨ<7@PnS04aӶp.:@\IWQJ6sS%I$e5ڑv`3:x';wq_vpgHyXZ 3gЂ7{{EuԹn±}$I$8t;b|591nءQ"P6O5i }iR̈́%Q̄p!I䮢]O{H$IRϻ9s֧ a=`- aB\X0"+5"C1Hb?߮3x3&gşggl_hZ^,`5?ߎvĸ%̀M!OZC2#0x LJ0 Gw$I$I}<{Eb+y;iI,`ܚF:5ܛA8-O-|8K7s|#Z8a&><a&/VtbtLʌI$I$I$I$I$I$IRjDD%tEXtdate:create2022-05-31T04:40:26+00:00!Î%tEXtdate:modify2022-05-31T04:40:26+00:00|{2IENDB`Mini Shell

HOME


Mini Shell 1.0
DIR:/lib/python2.7/site-packages/sos/
Upload File :
Current File : //lib/python2.7/site-packages/sos/archive.pyc
�
u��ec@sddlZddlZddlZddlZddlZddlZddlZddlmZddl	m
Z
mZyddlZWne
k
r�nXddlZejr�eZndZdZdZdZdefd	��YZd
efd��YZdefd
��YZdS(i����N(tLock(tsos_get_command_outputt
is_executabletfiletlinktnodetdirtArchivecBs�eZdZed��Zejd�ZdZe	Z
e�Zd�Z
d�Zd�Zd�Zd�Zd	�Zdd
�Zdd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZRS(s!Abstract base class for archives.cCs|jS(s6Returns the archive class's name as a string.
        (t__name__(tcls((s//usr/lib/python2.7/site-packages/sos/archive.pytarchive_type*stsostunsetcCsd|j�|fS(Ns[archive:%s] %s(R
(tselftmsg((s//usr/lib/python2.7/site-packages/sos/archive.pyt_format_msg7scCs
||_dS(N(t_debug(R
tdebug((s//usr/lib/python2.7/site-packages/sos/archive.pyt	set_debug:scCs|jj|j|��dS(N(tlogterrorR(R
R((s//usr/lib/python2.7/site-packages/sos/archive.pyt	log_error=scCs|jj|j|��dS(N(RtwarningR(R
R((s//usr/lib/python2.7/site-packages/sos/archive.pytlog_warn@scCs|jj|j|��dS(N(RtinfoR(R
R((s//usr/lib/python2.7/site-packages/sos/archive.pytlog_infoCscCs*|js
dS|jj|j|��dS(N(RRRR(R
R((s//usr/lib/python2.7/site-packages/sos/archive.pyt	log_debugFs	cCs
t�dS(N(tNotImplementedError(R
tsrctdest((s//usr/lib/python2.7/site-packages/sos/archive.pytadd_fileNstwcCs
t�dS(N(R(R
tcontentRtmode((s//usr/lib/python2.7/site-packages/sos/archive.pyt
add_stringQscCs
t�dS(N(R(R
R R((s//usr/lib/python2.7/site-packages/sos/archive.pyt
add_binaryTscCs
t�dS(N(R(R
tsourcet	link_name((s//usr/lib/python2.7/site-packages/sos/archive.pytadd_linkWscCs
t�dS(N(R(R
tpath((s//usr/lib/python2.7/site-packages/sos/archive.pytadd_dirZscCs
t�dS(N(R(R
R'R!tdevice((s//usr/lib/python2.7/site-packages/sos/archive.pytadd_node]scCs
t�dS(s�Return a temporary directory that clients of the archive may
        use to write content to. The content of the path is guaranteed
        to be included in the generated archive.N(R(R
((s//usr/lib/python2.7/site-packages/sos/archive.pytget_tmp_dir`scCs
t�dS(s�Return the maximum file name length this archive can support.
        This is the lesser of the name length limit of the archive
        format and any temporary file system based cache.N(R(R
((s//usr/lib/python2.7/site-packages/sos/archive.pytname_maxfscCsdS(sTReturn a string representing the path to the temporary
        archive. For archive classes that implement in-line handling
        this will be the archive file itself. Archives that use a
        directory based cache prior to packaging should return the
        path to the temporary directory where the report content is
        locatedN((R
((s//usr/lib/python2.7/site-packages/sos/archive.pytget_archive_pathlscCsdS(s:Clean up any temporary resources used by an Archive class.N((R
((s//usr/lib/python2.7/site-packages/sos/archive.pytcleanupuscCs|j�dS(sFinalize an archive object via method. This may involve creating
        An archive that is subsequently compressed or simply closing an
        archive that supports in-line handling. If method is automatic then
        the following methods are tried in order: xz, bz2 and gzipN(tclose(R
tmethod((s//usr/lib/python2.7/site-packages/sos/archive.pytfinalizeysN(Rt
__module__t__doc__tclassmethodR
tloggingt	getLoggerRt_nametFalseRRt
_path_lockRRRRRRtNoneRR"R#R&R(R*R+R,R-R.R1(((s//usr/lib/python2.7/site-packages/sos/archive.pyR's.																tFileCacheArchivecBs�eZdZdZdZdZd�Zd�Zd�Zdd�Z	ded�Zdd�Z
d	d
�Zd�Zd�Zd
�Zd�Zd�Zd�Zd�Zdd�Zd�Zd�Zd�Zd�ZRS(sd Abstract superclass for archive types that use a temporary cache
    directory in the file system. tcCs�||_||_||_||_||_||_tjj||�|_	|j
�tj|j	d�WdQX|jd|j	f�dS(Ni�s*initialised empty FileCacheArchive at '%s'(
R7t_tmp_dirt_policyt_threadstenc_optstsysroottosR'tjoint
_archive_rootR9tmakedirsR(R
tnamettmpdirtpolicytthreadsR@RA((s//usr/lib/python2.7/site-packages/sos/archive.pyt__init__�s						
	cCs=tjj|�r'|jtj�}ntjj|j|�S(N(RBR'tisabstlstriptsepRCRD(R
RF((s//usr/lib/python2.7/site-packages/sos/archive.pyt	dest_path�scCsL|j|j�r|S|dtjkr6|d}ntjj|j|�S(Nii(t
startswithRARBRMR'RC(R
R'((s//usr/lib/python2.7/site-packages/sos/archive.pytjoin_sysroot�s

i�csa|jd|�|j�|}�fd�}|jd�sG|}n7tjj|j|��rh|ntjj|�d}|}g}xG|dkr�|dkr�tjj|�\}}	|j|	�|}q�W|j	��}
d}xp|D]h}tjj
|
|�}
||
�sq�ntjj
||�}tjj|
�s�|jd|
�tjj|�r/tjj|�r/tj
|�}
tjj|�d}tjj
||
�}|j|d|�}tjj|�}tjj|
�rtjj|
|�}
n|jd|
|
f�tj|
|
�qY|jd	|
�tj|
|�|}q�q�W|S(
s�Create leading path components

            The standard python `os.makedirs` is insufficient for our
            needs: it will only create directories, and ignores the fact
            that some path components may be symbolic links.

            :param src: The source path in the host file system for which
                        leading components should be created, or the path
                        to an sos_* virtual directory inside the archive.

                        Host paths must be absolute (initial '/'), and
                        sos_* directory paths must be a path relative to
                        the root of the archive.

            :param mode: An optional mode to be used when creating path
                         components.
            :returns: A rewritten destination path in the case that one
                      or more symbolic links in intermediate components
                      of the path have altered the path destination.
        sMaking leading paths for %scs|jtjj�d��S(s>Test whether path ``path`` is inside the archive.
            R<(RORBR'RC(R'(troot(s//usr/lib/python2.7/site-packages/sos/archive.pyt
in_archive�st/iR<sMaking path %sR!sMaking symlink '%s' -> '%s'sMaking directory %s(RRDRORBR'tisdirRPtsplittappendtreverseRCtexiststislinktreadlinkt_make_leading_pathstnormpathRKtrelpathtsymlinktmkdir(R
RR!RRRtsrc_dirR't
path_compstheadttailtabs_pathtsrc_pathtcompttargett
target_dirt
target_src((RQs//usr/lib/python2.7/site-packages/sos/archive.pyR[�sN		!



$	
c

Cs�|p|j|�}|tkr*|}ntjj|�d}|sJ|Stjj|�r�tjj|�r�td|��nJtjj|�s�|tkr�|ntjj|�d}|j|�nd�}|r�|Stjj|�r�tj	|�}d}	|t
kr>tj|j
�r>t|	|df��n|tkrvtj|j
�rvt|	|df��n|tkr�||j
�r�t|	|df��n|tkr�tj|j
�r�t|	|df��nd	S|S(
s4Check a new destination path in the archive.

            Since it is possible for multiple plugins to collect the same
            paths, and since plugins can now run concurrently, it is possible
            for two threads to race in archive methods: historically the
            archive class only needed to test for the actual presence of a
            path, since it was impossible for another `Archive` client to
            enter the class while another method invocation was being
            dispatched.

            Deal with this by implementing a locking scheme for operations
            that modify the path structure of the archive, and by testing
            explicitly for conflicts with any existing content at the
            specified destination path.

            It is not an error to attempt to create a path that already
            exists in the archive so long as the type of the object to be
            added matches the type of object already found at the path.

            It is an error to attempt to re-create an existing path with
            a different path type (for example, creating a symbolic link
            at a path already occupied by a regular file).

            :param src: the source path to be copied to the archive
            :param path_type: the type of object to be copied
            :param dest: an optional destination path
            :param force: force file creation even if the path exists
            :returns: An absolute destination path if the path should be
                      copied now or `None` otherwise
        is'path '%s' exists and is not a directorycSs:ttj|�tj|�tj|�tj|�g�S(N(tanytstattS_ISBLKtS_ISCHRtS_ISFIFOtS_ISSOCK(R!((s//usr/lib/python2.7/site-packages/sos/archive.pyt
is_special.s
s path '%s' exists and is not a %ssregular files
symbolic linksspecial filet	directoryN(RNtP_DIRRBR'RURXRTt
ValueErrorR[tlstattP_FILERktS_ISREGtst_modetP_LINKtS_ISLNKtP_NODEtS_ISDIRR:(
R
Rt	path_typeRtforcetdest_dirR`Rptsttve_msg((s//usr/lib/python2.7/site-packages/sos/archive.pyt_check_path�s8	%
(	cCs�|j��|s|}n|j|t�}|s5dSt|dd�s�ytj||�Wnntk
r�}|jd�s�|jd�r�q�|j	d||f�n$t
k
r�}|j	d|�nXy�tj|�}|jd�s�|jd�r.tj
||�tj|d|j|jf�ntj||�tj||j|j�Wn*tk
r�}|jd||f�nXd|}nI|jd	�t|d
��%}x|D]}|j|�q�WWdQXd}|jd||jf�WdQXdS(
Ntreads/sys/s/proc/scaught '%s' copying '%s'sFile not collected: '%s'tnss&caught '%s' setting attributes of '%s's'%s'iRs	open files!added %s to FileCacheArchive '%s'(R9R�RutgetattrR:tshutiltcopytIOErrorRORtOSErrorRBRktcopymodetutimetst_atime_nstst_mtime_nstcopystattchowntst_uidtst_gidt	ExceptionRtseektopentwriteRD(R
RRteRkt	file_nametftline((s//usr/lib/python2.7/site-packages/sos/archive.pyRJsB
	"	


	Rc	Cs�|j��|}|j|tdt�}tj||dd�}t|t�rd|jdd�}n|j	|�t
jj|�r�yt
j||�Wq�tk
r�}|jd||f�q�Xn|jd||jf�WdQXdS(NR}tencodingsutf-8tutf8tignores!Unable to add '%s' to archive: %ss-added string at '%s' to FileCacheArchive '%s'(R9R�RutTruetcodecsR�t
isinstancetbytestdecodeR�RBR'RXR�R�R�RRRD(R
R RR!RR�R�((s//usr/lib/python2.7/site-packages/sos/archive.pyR"{s

		c	Cso|j�`|j|t�}|s&dStj|ddd�}|j|�|jd||jf�WdQXdS(NtwbR�s,added binary content at '%s' to archive '%s'(	R9R�RuR�R�R:R�RRD(R
R RR�((s//usr/lib/python2.7/site-packages/sos/archive.pyR#�s

	c		Cs>|jd||f�|j�c|j|t�}|s=dStjj|�stj||�|jd|||jf�nWdQX|jd|||f�tjj	|�}tjj
tjj||��}|j|�}d�}tjj
|�s-tjj|�r�|}tjj	|�}tjj|tj|��}tjj||�}|||�r�|jd||f�dS|jd||f�|j||�q-tjj|�r�|jd|�|j|�q-tjj|�r|jd|�|j|�q-|jd	||f�n|jd
�dS(Nsadding symlink at '%s' -> '%s's-added symlink at '%s' to '%s' in archive '%s's.Link follow up: source=%s link_name=%s dest=%scSs�tjj|�}tjj|�sHtjjtjj||��}ntjj|�}||krjtSytj|�Wn)tk
r�}|j	dkr�tS�nXt
S(s�Return ``True`` if the symbolic link ``link_name`` is part
                of a file system loop, or ``False`` otherwise.
            i((RBR'tdirnameRKtrealpathRCR�RkR�terrnoR8(R%R$tlink_dirR�((s//usr/lib/python2.7/site-packages/sos/archive.pytis_loop�s$s#Link '%s' - '%s' loops: skipping...s'Adding link %s -> %s for link follow ups Adding dir %s for link follow ups!Adding file %s for link follow ups)No link follow up: source=%s link_name=%ssleaving add_link()(RR9R�RxRBR'tlexistsR^RDR�R�RCRNRXRYRZR]R&RTR(tisfileR(	R
R$R%Rt
source_dirthost_path_nametdest_path_nameR�R~((s//usr/lib/python2.7/site-packages/sos/archive.pyR&�sJ
		!				cCs$|j�|j|t�WdQXdS(smCreate a directory in the archive.

            :param path: the path in the host file system to add
        N(R9R�Rr(R
R'((s//usr/lib/python2.7/site-packages/sos/archive.pyR(�s
cCs�|j|t�}|sdStjj|�s�ytj|||�WnLtk
r�}|jtjkr�d}|j	d||f�dS|�nXt
j||�ndS(NsOperation not permittedsadd_node: %s - mknod '%s'(R�RzRBR'RXtmknodR�R�tEPERMRR�R�(R
R'R!R)RR�R((s//usr/lib/python2.7/site-packages/sos/archive.pyR*�s
cCs7dtjkr/tjd}tj|j|�SdSdS(NtPC_NAME_MAXi�(RBtpathconf_namestpathconfRD(R
tpc_name_max((s//usr/lib/python2.7/site-packages/sos/archive.pyR,�s
cCs|jS(N(RD(R
((s//usr/lib/python2.7/site-packages/sos/archive.pyR+scCs|jS(N(RD(R
((s//usr/lib/python2.7/site-packages/sos/archive.pyR-scCsCtjtjj|j|�d|�|jd||jf�dS(ssCreate path, including leading components.

            Used by sos.sosreport to set up sos_* directories.
        R!s2created directory at '%s' in FileCacheArchive '%s'N(RBRER'RCRDR(R
R'R!((s//usr/lib/python2.7/site-packages/sos/archive.pyREs%	cCs+|j|�}tj|ddddd�S(NtrR�sutf-8terrorsR�(RNR�R�(R
R'((s//usr/lib/python2.7/site-packages/sos/archive.pyt	open_filescCs,tjj|j�r(tj|j�ndS(N(RBR'RTRDR�trmtree(R
((s//usr/lib/python2.7/site-packages/sos/archive.pyR.scCs|jd|j|f�|j�|j�|jd|jtj|j�jf�||_y|j	�}Wn7t
k
r�}d}|jd||f�|j�SX|j
dr�y|j|�SWqt
k
r�}d}|jd||f�|SXn|SdS(Ns)finalizing archive '%s' using method '%s'sbuilt archive at '%s' (size=%d)s+An error occurred compressing the archive: s%s %stencrypts)An error occurred encrypting the archive:(RRDt_build_archiveR.t
_archive_nameRBRktst_sizeR0t	_compressR�RRFR@t_encrypt(R
R0tresR�texp_msg((s//usr/lib/python2.7/site-packages/sos/archive.pyR1s*	

	
cCs,|jdd�}|d7}d|}d}|jdr[|d|jd7}||7}n|jdr�d|jdjd	d
�}i|d6}|d7}d
|}||7}nt|ddd|�}|ddkr�|S|ddkr|jdrd}qd}nd|d}t|��dS(s�Encrypts the compressed archive using GPG.

        If encryption fails for any reason, it should be logged by sos but not
        cause execution to stop. The assumption is that the unencrypted archive
        would still be of use to the user, and/or that the end user has another
        means of securing the archive.

        Returns the name of the encrypted archive, or raises an exception to
        signal that encryption failed and the unencrypted archive name should
        be used.
        s
sosreport-ssecured-sosreport-s.gpgsgpg --batch -o %s tkeys--trust-model always -e -r %s tpasswords%ss'"R<tsos_gpgs-c --passphrase-fd 0 s!/bin/bash -c "echo $sos_gpg | %s"ttimeoutitenvtstatusisSpecified key not in keyringsCould not read passphrasesgpg exited with code %sN(treplaceR:R@RR�(R
tarchivetarc_nametenc_cmdR�tpasswdR�R((s//usr/lib/python2.7/site-packages/sos/archive.pyR�5s,









		N(RR2R3R=RDR�RJRNRPR[R:R8R�RR"R#R&R(R*R,R+R-RER�R.R1R�(((s//usr/lib/python2.7/site-packages/sos/archive.pyR;�s.	
		\K1		H										tTarFileArchivecBseeZdZd	ZeZd�Zd	d�Zd�Z	d�Z
d�Zd�Zd�Z
d�ZRS(
s: archive class using python TarFile to create tar archivescCsPtt|�j||||||�d|_tjj||j��|_dS(Nttar(	tsuperR�RJt_suffixRBR'RCRFR�(R
RFRGRHRIR@RA((s//usr/lib/python2.7/site-packages/sos/archive.pyRJgs
	cCsn|j|_d|j|jd<d|j|jd<|rF||_n|j|_|j|_|j	|_
dS(Ns%.9ftatimetctime(tst_mtimetmtimetst_atimetpax_headerstst_ctimeR!RwR�tuidR�tgid(R
ttar_infotfstatR!((s//usr/lib/python2.7/site-packages/sos/archive.pytset_tarinfo_from_statmscCs�|jttjj|j�d�}|s8|j}nytj|�}Wntk
r_|SX|j	r�|j
|�}|r�||jd<q�n|j||�|S(Ni����sRHT.security.selinux(
RFtlenRBR'RUR7RDRkR�t_with_selinux_contexttget_selinux_contextR�R�(R
ttarinfot	orig_pathR�tcontext((s//usr/lib/python2.7/site-packages/sos/archive.pytcopy_permissions_filterzs&
	cCs6ytj|�\}}|SWntk
r1dSXdS(N(tselinuxt
getfileconR�R:(R
R'trctc((s//usr/lib/python2.7/site-packages/sos/archive.pyR��s

cCsd|j|jfS(Ns%s.%s(R7R�(R
((s//usr/lib/python2.7/site-packages/sos/archive.pyRF�scCstt|�j�S(N(R�R�R,(R
((s//usr/lib/python2.7/site-packages/sos/archive.pyR,�scCsXtj|jdd�}|j|jdtjj|j�dd|j	�|j
�dS(NR!Rtarcnameitfilter(ttarfileR�R�taddRDRBR'RUR7R�R/(R
R�((s//usr/lib/python2.7/site-packages/sos/archive.pyR��s(
c
Cseg}xDdddgD]3}t|�r8|j|�q|jd|�qW|j|krk|jg}nd}t|�}x�|D]�}d|jdd�}|jj||j�}y�d	||j	�f}t
|d
tdd�}|d
r!|j|d�td||d
f��n|j
|7_
|j	�SWq�tk
rV}	|	}q�Xq�W|�dS(Ntxztbzip2tgzips#"%s" compression method unavailablesNo compression utilities found.t.tipR<s%s %ststderrR�iR�toutputs%s exited with %s(RRVRR0R�R�R>tget_cmd_for_compress_methodR?RFRR�RR�(
R
tmethodsR0R�t
last_errortcmdtsuffixtexec_cmdR�R�((s//usr/lib/python2.7/site-packages/sos/archive.pyR��s0

	N(RR2R3R:R0R8R�RJR�R�R�RFR,R�R�(((s//usr/lib/python2.7/site-packages/sos/archive.pyR�as	
					(RBR�R�R5R�R�Rkt	threadingRt
sos.utilitiesRRR�tImportErrortsixtPY3tinttlongRuRxRzRrtobjectRR;R�(((s//usr/lib/python2.7/site-packages/sos/archive.pyt<module>s.
		[��