^cHddlmZddlmZdZdZdZdZdZdZ d Z d S) )_)mdiffc#Ki}|jtdt|t|ztd}|D]]}|t |}||vr|g||<B|||^|D]r}||}t |}||gD]"}||kr||fVn#s| dS)zfind renamed files that have no changes Takes a list of new filectxs and a list of removed filectxs, and yields (before, after) tuples of exact matches. ssearching for exact renamesfiles)totalunitN) ui makeprogressrlen incrementhashdataappendgetcomplete) repoaddedremovedhashesprogressfctxhadatarfctxs 3/usr/lib/python3/dist-packages/mercurial/similar.py_findexactmatchesrs[Fw## ())5zzCLL( x[[$H ##    F??F1II 1I  T " " " "  KKZZ2&&  E $$dm###%  cV|}|tj|fSN)rr splitnewlines)rorigs r_ctxdatar"4s% 99;;D $T** **rc|\}}|}d}tj||}|D]&\}}} } || | D]} |t| z }'t|t|z} |dz| z S)Ng@)rrblocksr ) r otherdatar!linestextequalmatchesx1x2y1y2linelengthss r_scorer1:sKD% 99;;D El4&&G!BB"R%L  D SYY EE $ii#d))#G 3;  rc<t|t|Sr)r1r")fctx1fctx2s rscorer5Is %% ) ))rc#Ki}|jtdtdt|}|D]i}|d}|D]N}||d|fd} |t |}t||} | | kr|| f||<Oj|| D]\} } | \} }| | |fVdS)zfind potentially renamed files based on similar file content Takes a list of new filectxs and a list of removed filectxs, and yields (before, after, score) tuples of partial matches. ssearching for similar filesr)rrNr) r r rr r rr"r1ritems)rrr thresholdcopiesrrra bestscoremyscoredestvsourcebscores r_findsimilarmatchesrBMs, Fw## ())( 3w<<$H ) ) ) )A 1tY&788;I|{{QooG""Lq  ) <<>>##adF"""""##rcd|DS)NcBg|]}|dk|S)r$)size).0xs r z_dropempty..is% - - -!1 A r)fctxss r _dropemptyrKhs - -u - - --rc#f K|d t fdt|D}t fdt|D}t t |||D]E\}} |||dfVF|dkrR fd|D}t||||D]3\}}}|||fV2dSdS)z:find renamed files -- yields (before, after, score) tuplesNc3(K|] }|V dSrrI)rFfpwctxs r zfindrenames..ts'==DH======rc30K|]}|v|VdSrrI)rFrNpctxs rrPzfindrenames..us+OO2B$JJd2hJJJJOOrg?cg|]}|v| SrIrI)rFrG matchedfiless rrHzfindrenames..s#EEEAq /D/Da/D/D/Dr)p1rKsortedsetraddpathrB) rrrr8 addedfiles removedfilesr;br5rTrRrOs @@@r findrenamesr]lsZ :D 7799D ====ve}}=====JOOOOOOOOOL55L#D*lCC((Avvxx3'''''3EEEEEEE 0 *lI   . .MQ56688QVVXXu- - - - -  . .rN) i18nrrrr"r1r5rBrKr]rIrrr`s """J+++ ! ! !***###6........r