ó î8¥Qc@sãddlZddlZddlZddlmZddlmZddlmZddlmZde fd„ƒYZ de fd„ƒYZ d „Z ed eed „Zd e fd „ƒYZdeed„Zd„ZdS(iÿÿÿÿN(tutil(t_(thooktlogentrycBs eZdZd„Zd„ZRS(sÎClass logentry has the following attributes: .author - author name as CVS knows it .branch - name of branch this revision is on .branches - revision tuple of branches starting at this revision .comment - commit message .commitid - CVS commitid or None .date - the commit date as a (time, tz) tuple .dead - true if file revision is dead .file - Name of file .lines - a tuple (+lines, -lines) or None .parent - Previous revision of this entry .rcs - name of file as returned from CVS .revision - revision number as tuple .tags - list of tags on the file .synthetic - is this a synthetic "file ... added on ..." revision? .mergepoint - the branch that has been merged from (if present in rlog output) or None .branchpoints - the branches that start at the current entry or empty cKst|_|jj|ƒdS(N(tFalset synthetict__dict__tupdate(tselftentries((s7/sys/lib/python2.7/site-packages/hgext/convert/cvsps.pyt__init__$s cs?‡fd†tˆjƒDƒ}dtˆƒjdj|ƒfS(Nc3s&|]}d|ˆj|fVqdS(s%s=%rN(R(t.0tk(R(s7/sys/lib/python2.7/site-packages/hgext/convert/cvsps.pys )ss%s(%s)s, (tsortedRttypet__name__tjoin(Rtitems((Rs7/sys/lib/python2.7/site-packages/hgext/convert/cvsps.pyt__repr__(s(Rt __module__t__doc__R R(((s7/sys/lib/python2.7/site-packages/hgext/convert/cvsps.pyRs tlogerrorcBseZRS((RR(((s7/sys/lib/python2.7/site-packages/hgext/convert/cvsps.pyR,scCs_|jdƒ}|djdƒ}d}|dkr=|}n|d|djd|ƒ}|S(sUReturn the repository path from a CVS path. >>> getrepopath('/foo/bar') '/foo/bar' >>> getrepopath('c:/foo/bar') '/foo/bar' >>> getrepopath(':pserver:10/foo/bar') '/foo/bar' >>> getrepopath(':pserver:10c:/foo/bar') '/foo/bar' >>> getrepopath(':pserver:/foo/bar') '/foo/bar' >>> getrepopath(':pserver:c:/foo/bar') '/foo/bar' >>> getrepopath(':pserver:truc@foo.bar:/foo/bar') '/foo/bar' >>> getrepopath(':pserver:truc@foo.bar:c:/foo/bar') '/foo/bar' >>> getrepopath('user@server/path/to/repository') '/path/to/repository' t:iÿÿÿÿt@it/(tsplittfind(tcvspathtpartst atpositiontstarttrepopath((s7/sys/lib/python2.7/site-packages/hgext/convert/cvsps.pyt getrepopath/s  tc8sJi‰‡fd†}|jtdƒƒg}tjdƒ}tjdƒ}tjdƒ} tjdƒ} tjdƒ} tjdƒ} tjd ƒ} tjd ƒ}tjd ƒ}tjd ƒ}tjd ƒ}tjdƒ}tjdƒ}d}|d^krÚyFttjjddƒƒj ƒj ƒ}|}|dkrHd}nWn#t k rnt tdƒƒ‚nX|r˜|j tjƒ r˜|tj7}ny+ttjjddƒƒj ƒj ƒ}WqÚt k rÖqÚXn|søtjjddƒ}ng}d^}|rÅtjjdƒ}tjj|ƒs>tj|ƒn|jdƒ|dg}g|D]'}|r^djtjd|ƒƒ^q^}tjj|djg|D]}|r¤|^q¤ƒƒ}n|dkrÚy±|jtdƒ|ƒtjt|ƒƒ}xa|D]Y}tj|dƒo@tj|dƒo@tj|d ƒs|jtd!ƒƒg}PqqW|jtd"ƒt|ƒƒWn*tk r®}|jtd#ƒ|ƒnX|rÚ|d$j}tj|d%ƒ}qÚnd&d'g}|rS|jd(|ƒtj t!|ƒƒ}|j d)ƒs.|d)7}n|rJ|tj |ƒ}qS|}n|jd*d+g|ƒ|r„|jd,|ƒn|j|ƒi}i}d-}t"} g|D]}!tj#|!ƒ^q°}|jtd.ƒd/j|ƒƒ|j$d0|||fƒtj%d/j|ƒƒ}"|"j&ƒ}#xº t'rå|#}$|$dkrHPn|"j&ƒ}#|$j d1ƒrp|$d$ }$n|d-kr¾|j(|$ƒ}%|%rC|%j)d2ƒ}&i}|r7tj |&d3 ƒ}'|'j*|ƒrá|'t|ƒ}'n|'j*d)ƒrý|'d2}'n|'j*d4ƒr|'d5}'n|'j+d6d)ƒ}'d7}q,nd2}q,n|j(|$ƒ}%|%rpt |%j)d2ƒƒ‚n| j(|$ƒ}%|%rt |%j)d7ƒƒ‚n| j(|$ƒrj t |$ƒ‚qj n¬|d2kr| j(|$ƒ}%|%sñt,td8ƒƒ‚tj |%j)d2ƒƒ}'d7}nX|d7kr?| j(|$ƒrj i}d9}qj n+|d9kro| j(|$ƒ}%|%r<g|%j)d7ƒjdƒD]}(t-|(ƒ^qy})t|)ƒ}*|*d9krÞ|*d7d-krÞ|)d3d-krÞ|)d3 |)d$})nt.|)ƒ})|)|krg||)||&ƒd?||'ƒd@t.g|%j)d2ƒjdƒD]}(t-|(ƒ^q% ƒdAgdBd^dd^d d^dt0ƒƒ}d5}ný|d5krç |j(|$ƒ}%|%s  t,tdCƒƒ‚|%j)d2ƒ}+|+d7d)krÌ dD|+}+nt|+jƒƒd9krñ |+dE}+ntj1|+dFdGdHgƒ|_||%j)d7ƒƒ|_2|%j)d9ƒj3ƒdIk|_4|%j)d:ƒr´ |%j)d5ƒr“ t-|%j)d:ƒƒt-|%j)d5ƒƒf|_5qí t-|%j)d:ƒƒd-f|_5n9|%j)d5ƒrä d-t-|%j)d5ƒƒf|_5n d^|_5|%j)dJƒr |%j)dKƒ|_6n|%j)dLƒrÕ |%j)dMƒjdƒ},t|,ƒd7krV dN|_7qÕ dj|,d3 dO|,d3gƒ},g|D]}-||-|,kr~ |-^q~ }.t|.ƒd2ksÅ t,dP|j7ƒ‚|.d-|_7ng|_8dJ}nƒ|dJkrË |j(|$ƒ}/|/rm g|/j)d2ƒjdQƒD]:}(t.g|(j ƒjdƒD]}0t-|0ƒ^q@ ƒ^q! |_9dK}qj |j(|$ƒrš |j(|#ƒrš d:}t'} qj |j(|$ƒr¸ d-}t'} qj |j8j|$ƒnŸ|dKkrj |j(|$ƒr9 |#}1|1j d1ƒr |1d$ }1n|j(|1ƒr& d:}t'} qg |j8j|$ƒqj |j(|$ƒrW d-}t'} qj |j8j|$ƒn| rä |j4rä |j:d$d2krä t|j8ƒd2krä |j(|j8d-ƒrä |j$dR|j;|j8d-fƒt'|_<n| r,t"} t=g|j|j:gƒD]}(||(ƒ^q ƒ|_>|d1j|j8ƒƒ|_8t|j:ƒ}*|*d9kr“|*d7d-kr“|j|j:d$ d^gƒd-|_?n d^|_?t0ƒ}2xØ|j@ƒD]Ê\}3}4t.g|4jdƒD]}5t-|5ƒ^qу}6t|6ƒd7krq²n|6d3d-krN|6d$d7d-krN|6d3 |j:kr||2jA|3ƒq|q²|6d_kr²|6|j9kr||2jA|3ƒq|q²q²W|2|_B|j|ƒt|ƒdSd-krâ|jtjCdTt|ƒ|jDfdUƒd1ƒqâq,q,W|jEdVdW„ƒi}7xq|D]i}|j:d$ }3|7j|j;|3fd^ƒ}|d^krP|j:d3 }n||_F|j:|7|j;|3f(Cannot access.+CVSROOT)|(can't create temporary directory.+)$sWorking file: (.+)$ssymbolic names:s (.+): ([\d.]+)$s----------------------------$sN=============================================================================$s(revision ([\d.]+)(\s+locked by:\s+.+;)?$sˆdate:\s+(.+);\s+author:\s+(.+);\s+state:\s+(.+?);(\s+lines:\s+(\+\d+)?\s+(-\d+)?;)?(\s+commitid:\s+([^;]+);)?(.*mergepoint:\s+([^;]+);)?sbranches: (.+);$s+file [^/]+ was (initially )?added on branchR!tCVSt Repositoryt.snot a CVS sandboxtRoottCVSROOTs ~/.hg.cvspsRtcachet-s\w+Rsreading cvs log cache %s t branchpointstcommitidt mergepointsignoring old cache scache has %d log entries serror reading cache: %r iÿÿÿÿs%Y/%m/%d %H:%M:%S %1%2tcvss-qs-d%sRtlogtrlogs-d>%sis running %s t sprefix=%r directory=%r root=%r s iiþÿÿÿsAttic/is/Attic/is)RCS file must be followed by working fileiiis!must have at least some revisionssexpected revision numbertrcstfiletrevisiontbranchestparents&revision must be followed by date linet19s UTCs%y/%m/%d %H:%M:%Ss%Y/%m/%d %H:%M:%Ss%Y-%m-%d %H:%M:%Stdeadiii i tHEADt0sunknown branch: %st;s#found synthetic revision in %s: %r ids%d %siPtkeycSs|j|jfS(N(R4R6(tx((s7/sys/lib/python2.7/site-packages/hgext/convert/cvsps.pyt¾scSs|jS(N(tdate(R?((s7/sys/lib/python2.7/site-packages/hgext/convert/cvsps.pyR@Îss>log cache overlaps with new log entries, re-run without cache.swriting cvs log cache %s tws%d log entries tcvslogN(iii(ItstatusRtretcompiletNonetopentostpathRtreadtstriptIOErrorRtendswithtseptenvirontgett expandusertexiststmkdirRtfindalltnotetpickletloadRt safehasattrtlent ExceptionRAtdatestrtappendtnormpathR Rt shellquotetdebugtpopentreadlinetTruetmatchtgroupt startswithtreplacetAssertionErrortintttupleRtsett parsedatetauthortlowerR:tlinesR.R/tcommentR7R6R4RR ttagstbrancht iteritemstaddR-tellipsisR5tsortR8tdumpR(8tuit directorytrootR2R+R%R1tre_00tre_01tre_02tre_03tre_10tre_20tre_30tre_31tre_32tre_50tre_60tre_70t file_added_retprefixtoldlogRAtcachedirt cachefileR#tetcmdtpRqt branchmaptstatetstoretargtpfptpeektlineRdR4tfilenameR?trevtrevntdtmyrevtbR7tmtytcpeekR-RrR6titrevpartstversions((R$s7/sys/lib/python2.7/site-packages/hgext/convert/cvsps.pyt createlogVs '   +  4 .  !     "              1 ,       %  1      0!!  !)    Y           7&  .$   :       t changesetcBs eZdZd„Zd„ZRS(sûClass changeset has the following attributes: .id - integer identifying this changeset (list index) .author - author name as CVS knows it .branch - name of branch this changeset is on, or None .comment - commit message .commitid - CVS commitid or None .date - the commit date as a (time,tz) tuple .entries - list of logentry objects in this changeset .parents - list of one or two parent changesets .tags - list of tags on this changeset .synthetic - from synthetic revision "file ... added on branch ..." .mergepoint- the branch that has been merged from or None .branchpoints- the branches that start at the current entry or empty cKst|_|jj|ƒdS(N(RRRR(RR ((s7/sys/lib/python2.7/site-packages/hgext/convert/cvsps.pyR òs cs?‡fd†tˆjƒDƒ}dtˆƒjdj|ƒfS(Nc3s&|]}d|ˆj|fVqdS(s%s=%rN(R(R R (R(s7/sys/lib/python2.7/site-packages/hgext/convert/cvsps.pys ÷ss%s(%s)s, (R RRRR(RR((Rs7/sys/lib/python2.7/site-packages/hgext/convert/cvsps.pyRös(RRRR R(((s7/sys/lib/python2.7/site-packages/hgext/convert/cvsps.pyR£ãs i<cs6|jtdƒƒi‰x?|D]7}|jr t|jˆj|jƒƒˆ|jcs7ˆj|jƒ|j|j|j|j|j|jfS(N(RQR.RpRmRrRAR-(R?(tmindate(s7/sys/lib/python2.7/site-packages/hgext/convert/cvsps.pyR@siiRpRmRrRAR R/R-R.ids%d %siÿÿÿÿiPs cSsØ|jjdƒ}|jjdƒ}t|ƒ}t|ƒ}t||ƒ}x†t|ƒD]x}|d|kr~||kr~dS|d|krŸ||krŸd S||||kr·dS||||krXd SqXWdS(sMimic cvsps sorting orderRiiÿÿÿÿi(R5RRZtmintrange(tltrtnltnrtnRŸ((s7/sys/lib/python2.7/site-packages/hgext/convert/cvsps.pyt entitycompareHs   cSst|jƒt|jƒ}|r&|Si}x!|jD]}|j||j‹ss{{mergetobranch ([-\w]+)}}s{{mergefrombranch ([-\w]+)}}s0synthetic changeset cannot have multiple parentsR;sBwarning: CVS commit message references non-existent branch %r: %s s&convert-repo: CVS merge from branch %sRqtparentsis%d changeset entries t cvschangesetst changesetsN(,RDRR.R¥RARQRvRkRGt enumerateR-RpRmRrR5R£R/R]RZtreprRRuR RtRRqRR RERFR4R6txrangeR³RhtsearchRetKeyErrortwarntgroupstinserttidRRc(RxR1tfuzzt mergefromtmergetoRŒRµtfilesRŸttR¬R¯R°RqR¡R7R«tfRŽt candidateRœtcc((R±R²R¤s7/sys/lib/python2.7/site-packages/hgext/convert/cvsps.pytcreatechangesetús  , !$  &# ,       &                   %           cOs!|drd}n|dr&d}nd }|d}yc|r|g}xP|D])}|t||d|dd|ƒ7}qLWnt|d|dd|ƒ}Wn%tk rÀ}|jd|ƒd SXt|||d ƒ}~t|ƒ} i} i} x(|D] } |d ry| j| krf| jrf| jd jrf|| jd jd j| jd jf| | j|rc| |\}}|jd |pNd|| |fƒq&W|rŠ|jd!dj|ƒƒqŠn|jd"ƒ|jd#| jƒ|jd$ƒx¾| jD]³}|j}|j|d%ƒrû|t|d%ƒ}n|jd&|d'jg|jD]}t|ƒ^qƒp5d(d'jg|jD]}t|ƒ^qEƒdd)g|jfƒqÂW|jd*ƒn|rÍ| rÍ|d t| jƒksÁ|d | j krÍt} qÍnt|ƒd krù| rù|d t| jƒks|d | j krPqqùqùWd S(+sŸRead CVS rlog for current directory or named path in repository, and convert the log to changesets based on matching commit log entries and dates. t new_cachetwritet update_cacheRt revisionsRzR+s%r NR¿t ancestorsiiR7R;s--------------------- s PatchSet %d s Date: %s s%Y/%m/%d %H:%M:%S %1%2s Author: %s s Branch: %s s Tag%s: %s R!R#t,s(none)sBranchpoints: %s s, R³s Parents: %s s Parent: %d s%s:%d:%dsAncestors: %s sLog: s%s s Members: Rˆs %s:%s->%s%s R(tINITIALs(DEAD)s (RGR¢RRÉRÇRZRrR³R¾RR\RARmRqRR-R tstrR]RpR R5RfR8R6R:R(RxtargstoptsR+RËR1R™RŒRµtoffR7RÌtcsRŽR›R¨R±RÄtfnR?((s7/sys/lib/python2.7/site-packages/hgext/convert/cvsps.pyt debugcvsps s’      *    (#  %   3   (     1(  (RIREtcPickleRWt mercurialRtmercurial.i18nRRtobjectRR[RR RGRcR¢R£RÇRÕ(((s7/sys/lib/python2.7/site-packages/hgext/convert/cvsps.pyts    'ÿŽÿ