mò fDc@ssdkZdkZdkTdkZdkZdkZdkZdklZlZl Z l Z dfd„ƒYZ dS(N(t*(sdebugserrorstracesfataltDeptreecBs¡tZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z d „Zd„Zd„Zd„Zd„ZRS(NcCsstiddƒ|_h|_d|_d|_h|_h|_h|_ h|_ h|_ h|_ h|_ dS(Nt(tNodetNonetselftm_roott m_name2nodest m_bldnodet m_srcnodet m_src_to_bldt m_bld_to_srct m_depends_ont m_deps_tstampt m_raw_depstm_sigstm_flags(R((t)/home/samy/kbilliards/wafadmin/Deptree.pyt__init__s         cCs`|i}y9||i|jo dG|GHn|i|i|ƒWn|g|i| s (d) t s i( R'R&taccuRRtm_filestchildRRtm_dirstdirtrecu(RR&R+R)R-(R'R.(RR.`s   tCYANissize is (R'R.tParamstpprintRRRtsize(RR'R.((R'R.Rtdump\s  cCs=|ii|ƒ}|ptdƒn|ii|ƒ}|S(Ns$lst is empty, this should not happen( RR tdifflsttdirnodetlstRRt find_nodet mirrornode(RR5R8R6((Rtget_mirror_nodets cCs|ii|ii|ƒƒS(N(RR R7RR4tbldnode(RR:((Rtget_src_from_mirror€scCs |i|S(N(RR tsrcnode(RR<((Rtget_bld_from_srcƒscCsÿti|joG|itiƒ}|i|t|ƒd ƒ}|t|ƒd}n|i |ƒ}d}x,|i D]!}|i|jo |}PqvqvW|p&ti||ƒ}|i i|ƒn|otdt|ƒƒntdt|ƒƒ|S(Nismirror node is found smirror node is NOT FOUND(tostseptfilenametsplitR6R5R7tlenRR9R8RtretR*tfileRRRttraceR(RR5R@R8R6RCRD((Rt mirror_fileˆs$  cCs™td|ƒ|itiƒ}|i|i|ƒ} |i |i |ƒ\}}ti| iƒƒi}tiot|ƒ}n|}|| ij}|o^|oWt| iƒt|iƒjo4x)| iD]}ti|iƒƒ|_qÎWdSqün|oÝti| iƒƒ}g}g}g}g}g}x*| iD]}yŠti|iƒƒ}|i} ti|iƒƒ|_|i&|i'ƒ| |ijo0tdt|ƒt| ƒt|iƒfƒnWq@|i'}| ii)|ƒxm|iD]^}|i'|joH|ii)|ƒy)ti)ti+i,|iƒ|i'ƒƒWnnXPqùqùWq@Xq@WxB| i-D]7}ti|iƒƒ}|i|_|i&|i'ƒqmW||ti.}x/|D]'}||joqÀn|i&|ƒqÀWxå|D]Ý}t0i0|| ƒ}ti|iƒƒ}| i2|ƒ} t4|t5ƒo€| ii&|ƒti|iƒƒ|_t0i0||ƒ}|ii&|ƒ| i|_|iƒ}||i8|<||i9|R?R6Rtensure_node_from_lstR tsrc_nodetensure_directory_lstRtexiststmir_nodetstattabspathtst_mtimetsrc_sigR0t g_strong_hashRtC1RtC2RBR*Rth_filetlistdirt names_readtremovedtaddedte_fileste_dirst e_unknownRDtstttsRRtnametremovetmntpathtjoinR,t g_excludestexclRt child_nodet relpath_gentrelptS_ISREGtST_MODEtmir_child_nodetdupeR R t file_or_dirtsubpathttstamp(RR-RORJRjR6RURDRmRHRfRlR\RkRYRRRQRRWRKRMRdRcRVR]R_R[RXRZRi((Rtscanner_mirror¦sÌ     4  )                  cCs•|}xˆ|D]€}|pq nd}x,|iD]!}|i|jo |}Pq1q1W|p&t i ||ƒ}|ii |ƒn|}q q W|S(Ni( RtcurnodetplsttdirnameRtfoundR,tcandRRR(RRRpRsRrRqRo((RRGDs$  cCsn|}d}xU|D]M}|pqnd}x,|iD]!}|i |jo |}Pq7q7Wy,|o!|i |djo |}wnWnnX|p&t i ||ƒ}|ii |ƒn|}yti|iƒƒWnttj ohd}td|iƒƒyti|iƒƒWntd|iƒƒnXg|_g|_nXd|i |RLRMtOSErrorREtmkdirR*(RRRpRJRsRrRqRo((RRIisF    cCs´td|ƒ|itiƒ}|i}x„|D]|}|pq0nd}x,|i D]!}|i|jo |}PqTqTW|p&ti||ƒ}|i i|ƒn|}q0W|S(Ns Deptree:ensure_node_from_path %s(RERMRAR>R?RpRRRoRqRRrR,RsRRR(RRMRpRsRrRqRo((Rtensure_node_from_path“s$    cCsttd|ƒ|itiƒ}|i}xD|D]<}|pq0nd}x,|i D]!}|i|jo |}PqTqTWy,|o!|i|djo |}w0nWnnX|p&ti||ƒ}|i i|ƒn|}yti|iƒƒ}Wnatj oUtd|iƒƒti|iƒƒti|iƒƒ}g|_ g|_nXd|i|R?tdir_lstRRRoRqRRrR,RsRRRRRLRMR[RtRuR*(RR`RsR[RrRqRoRw((Rtensure_directory§sB     (t__name__t __module__RRRRR!R"R$R3R9R;R=RFRnRGRIRvRx(((RRs" #         ž % * ( R>tos.pathRLtshutiltcPickleRR0RterrorREtfatalR( RR}RRRER0R~RR|R>((Rt?s