o ]LbF@s|ddlmZmZddlZddlmZddlmZmZddl m Z e j Z ddZ d d Z Gd d d eZGd dde jZdS))absolute_importprint_functionN)_)errorpycompat)commonccsTt|}|dkr#|d|||ddfV|dd|}|dks d|fVdS)aYield tuples with path split at '/', starting with the full path. No leading, trailing or double '/', please. >>> for x in rpairs(b'foo/bar/baz'): print(x) ('foo/bar/baz', '') ('foo/bar', 'baz') ('foo', 'bar/baz') ('.', 'foo/bar/baz') Nr/r.)lenrfind)pathir7/usr/lib/python3/dist-packages/hgext/convert/filemap.pyrpairss rcCs|durdSt|S)z}We use posixpath.normpath to support cross-platform path format. However, it doesn't handle None input. So we wrap it up.N) posixpathnormpath)rrrr normalize%s rc@sBeZdZdZdddZddZddZd d Zd d Zd dZ dS) filemapperzMap and filter filenames when importing. A name can be mapped to itself, a new name, or None (omit from new repository).NcCsB||_i|_i|_i|_d|_|r||rttddSdS)Nserrors in filemap) uiincludeexcluderenametargetprefixesparserAbortr)selfrrrrr__init__2s zfilemapper.__init__cs<d}fdd}tj|dd}|r|dkr/t}|||jd7}|j|<ng|dkrQt}|||jd7}|||jd7}|j|<nE|dkrpt}t}|||jd7}|j|<n&|d kr|t7}nj t d j j t |f|d 7}}|s|S) Nrc s|sjtdjj|fdS||vr)jtdjj||fdS|ds7|ds7d|vrLjtdjj|t|fdSdS)Ns%s:%d: path to %s is missing rs%s:%d: %r already in %s list r s//s%s:%d: superfluous / in %s %r r) rwarnrinfilelineno startswithendswithrbytestr)namemappinglistnamelexrrrcheck?s, zfilemapper.parse..checks!@#$%^&*()-=+[]{}|;:,./<>?)filepath wordcharssincludesexcludesrenamessources%s:%d: unknown directive %r r)rshlexer get_tokenrrrrrrr rr!r"rr%)rrerrsr+cmdr&srcdestrr)rr<s@       zfilemapper.parsec CsJt|}t|D]\}}z ||||fWStyYqwd|dfS)N)rrKeyError)rr&r'presufrrrlookuprs  zfilemapper.lookupcCsv|jdurt|_t|jD] \}}|j|q|jr"d|jvr$dSt|}t|D] \}}||jvr8dSq,dS)zReturn true if the given target filename is covered as a destination of the filemap. This is useful for identifying what parts of the target repo belong to the source repo and what parts don't.Nr TF)rsetr iteritemsraddrr)rfilenamebeforeafterr6r7rrr istargetfile{s  zfilemapper.istargetfilecCs|jr |||jd}n|}|jr|||jd}nd}|js#|s+t|t|kr-dS|||j\}}}|rR|dkr?|S|rP|drJ||S|d|S|S|S)Nrr4r r )rr8rr rr$)rr&incexcnewprer6r7rrr__call__s$  zfilemapper.__call__cCst|jp |jp |jSN)boolrrrrrrractiveszfilemapper.activerD) __name__ __module__ __qualname____doc__rrr8r?rCrGrrrrr-s  6  rcseZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*ZZS)+filemap_sourcecsjtt|||j||_t|||_i|_i|_i|_d|_ d|_ i|_ i|_ i|_ |jdd|_dS)NFsconvertsignoreancestorcheck)superrLrrepotypebasercommits parentmapwantedancestorsconvertedorder_rebuilt origparentschildren seenchildrenr configboolignoreancestorcheck)rr baseconverterfilemap __class__rrrs  zfilemap_source.__init__cC|jdSrD)rOr=rFrrrr=zfilemap_source.beforecCr^rD)rOr>rFrrrr>r_zfilemap_source.afterc Cs| |_tti}t}g}|jD]4}||}||v}|r&|||<||j|<n|||j|<||j|<||}|tkr|j|}|j|<|jD]}|j|dd|j|<q|SNrr)rOrmrPrnrVrq)rrhcprrrrms zfilemap_source.getcommitcCrvrD)rO numcommitsrFrrrr| rxzfilemap_source.numcommitscCs ||jvr |j|S|j|SrD)rPrOrmrrhrrr _cachedcommit#s   zfilemap_source._cachedcommitcGsv|D]6}|dur q|j|dd|j|<|j||j|kr8|j|d|j|d|j|=|jr8|j|=qdSry)rWrqrVrRpoprQrT)rrevsrrrrrt(szfilemap_source._discardcCslz |j||}Wntyttdw|D] }||r$dSq|jjr+dS| o5d|j|j vS)Ns+source repository doesn't support --filemapTFclose) rOgetchangedfilesNotImplementedErrorrrrrrrPextra)rrhrfilesfrrrrj4s  zfilemap_source.wantedcCsF|durt|j|<th|j|<dS|j||j|<|j||j|<dSrD)r`rQrR)rrhr{rrrrsPs   zfilemap_source.mark_not_wantedcCsf||j|<t}|D]}||jvr||j|q |jtd||fq ||||j|<dS)Ns!warning: %s parent %s is missing )rQr9rRupdaterr rr;)rrhrnwrevr{rrrrr_s   zfilemap_source.mark_wantedcsj|j}t|dkrjsg}t}j|j}d}t|D]E\}jt ks5|vr6q$j oFt fdd|D} | s[|s[t|dkr[ j|kr[d}| || f| q$|rsdd|D}d} |rtdd|D} d d|D}n|rd } |j|<d} d j|jvrfd d|D} || vrd} t|d kr| sو|| sd} |r|| } || j |d| fj|j|S|j|_||j |ddfj|j||\}}}i}t|}|D]'\}}|}|r+||ks||vr+||f||<||kr+||qt|}i}|D]}|}|rO||}|rO|||<q7|||fS)NrFc3s8|]}|krj|krj|vr|VqdSrD)rQrR).0p2mp1p1rrr sz,filemap_source.getchanges..TcSsg|]}|ds|qS)rrr{rrr z-filemap_source.getchanges..css|]}|dVqdS)NrrrrrrscSsg|]}|dqS)rrrrrrrsrrcsg|]}|jqSr)r~branchrrFrrrrr)rPrnr rYrur9r enumeraterQr`anyr~rbr;maxrUrrjrsrSrtrrrO getchangesrdiscardsorteditems)rrhfullrnmparents knownparentsrhasbranchparentr isancestorwpclosed pbranchesr{changescopiescleanp2rncleanp2rrnewfncopiesrznewc newsourcerrrrts                   zfilemap_source.getchangescC |j|SrD)rr?)rtargetfilenamerrrtargetfilebelongstosource z(filemap_source.targetfilebelongstosourcecCs|\}}|j||SrD)rOgetfile)rr&rhrealnamerealrevrrrrszfilemap_source.getfilecCrvrD)rOgettagsrFrrrrrxzfilemap_source.gettagscCrvrD)rOhasnativeorderrFrrrrrxzfilemap_source.hasnativeordercCrrD)rO lookuprevr}rrrrrzfilemap_source.lookuprevcCrvrD)rO getbookmarksrFrrrrrxzfilemap_source.getbookmarkscCs|j||dSrD)rOrg)rrhsinkrevrrrrgszfilemap_source.converted)rHrIrJrr=r>rcrurwrmr|r~rtrjrsrrrrrrrrrrg __classcell__rrr\rrLs,  jrL) __future__rrrmercurial.i18nr mercurialrrrr`rrobjectrconverter_sourcerLrrrrs