\x89\x50\x4E\x47\x0D\x0A\x1A\x0A PNG  \x89\x50\x4E\x47\x0D\x0A\x1A\x0A  13\c @@sdZddlmZddlZddlmZddlmZmZm Z m Z m Z m Z m Z mZmZmZmZmZmZmZmZmZddlmZdZiZejeZiZejeZedd d eedd d eedd d d idd6dd6dd6Z ej!Z!de"fdYZ#de"fdYZ$dZ%edZ&edZ'dej(fdYZ)eedZ*de"fdYZ+d e"fd!YZ,d"Z-d#Z.eeeed$Z/edd%d&eed'fd(d)eed*fd+d,eed-fd.d/eed0fgej0ej1ej2ed1d2ej3d3ed4Z4dS(5s?apply working directory changes to changesets (EXPERIMENTAL) The absorb extension provides a command to use annotate information to amend modified chunks into the corresponding non-public changesets. :: [absorb] # only check 50 recent non-public changesets at most max-stack-size = 50 # whether to add noise to new commits to avoid obsolescence cycle add-noise = 1 # make `amend --correlated` a shortcut to the main command amend-flag = correlated [color] absorb.description = yellow absorb.node = blue bold absorb.path = bold i(tabsolute_importN(t_(tcmdutiltcommandstcontexttcrecordterrortlinelogtmdifftnodetobsoletetpatchtphasestpycompatt registrartrepairtscmutiltutil(t stringutilsships-with-hg-coretabsorbs add-noisetdefaults amend-flagsmax-stack-sizei2tyellowsabsorb.descriptions blue bolds absorb.nodetbolds absorb.pathtnulluicB@s)eZdZeZeZeZdZRS(sblank ui object doing nothingcC@s d}|S(Nc_@sdS(N((targstkwds((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pytnullfunc\s((tnameR((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyt __getitem__[s ( t__name__t __module__t__doc__tFalset debugflagtverbosetTruetquietR(((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRUs temptyfilecontextcB@s eZdZdZdZRS(s.minimal filecontext representing an empty filecC@sdS(Nt((tself((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pytdatabscC@stjS(N(R tnullid(R'((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyR es(RRRR(R (((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyR%`s cC@sMt}g}x7|D]/}||kr|j||j|qqW|S(s@list -> list. remove duplicated items without changing the order(tsettaddtappend(tlsttseentresulttx((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pytuniqhs    cC@s|}g}xn|jtjkr||r@t||kr@Pn|j}t|dkrbPn|j||d}qW|j|S(s)(ctx, int?) -> [ctx]. get a linear stack of non-public changesets. changesets are sorted in topo order, oldest first. return at most limit items, if limit is a positive number. merges are considered as non-draft as well. i.e. every commit returned has and only has 1 parent. ii(tphaseR tpublictlentparentsR,treverse(theadctxtlimittctxR/R5((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyt getdraftstackrs    c C@sF|dkrt}n||dkr2gifSg}i}|dj}xt|D]}||krw|}Pn||}|j|||krd}Pn|||<|j}|r[|d}||kr|j}Pqq[q[W|dk r,||kr|j||q,|jtn|jt||fS(sP([ctx], str, set) -> [fctx], {ctx: fctx} stack is a list of contexts, from old to new. usually they are what "getdraftstack" returns. follows renames, but not copies. seenfctxs is a set of filecontexts that will be considered "immutable". they are usually what this function returned in earlier calls, useful to avoid issues that a file was "moved" to multiple places and was then modified differently, like: "a" was copied to "b", "a" was also copied to "c" and then "a" was deleted, then both "b" and "c" were "moved" from "a" and we enforce only one of them to be able to affect "a"'s content. return an empty list and an empty dict, if the specified path does not exist in stack[-1] (the top of the stack). otherwise, return a list of de-duplicated filecontexts, and the map to convert ctx in the stack to fctx, for possible mutable fctxs. the first item of the list would be outside the stack and should be considered immutable. the remaining items are within the stack. for example, given the following changelog and corresponding filelog revisions: changelog: 3----4----5----6----7 filelog: x 0----1----1----2 (x: no such file yet) - if stack = [5, 6, 7], returns ([0, 1, 2], {5: 1, 6: 1, 7: 2}) - if stack = [3, 4, 5], returns ([e, 0, 1], {4: 0, 5: 1}), where "e" is a dummy empty filecontext. - if stack = [2], returns ([], {}) - if stack = [7], returns ([1, 2], {7: 2}) - if stack = [6, 7], returns ([1, 2], {6: 1, 7: 2}), although {6: 1} can be removed, since 1 is immutable. iiN( tNoneR*tp1treversedR,trenamedR%R6R1( tstacktpatht seenfctxstfctxstfctxmaptpctxR9tfctxR>((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyt getfilestacks:%                t overlaystorecB@s eZdZdZdZRS(ssread-only, hybrid store based on a dict and ctx. memworkingcopy: {path: content}, overrides file contents. cC@s||_||_dS(N(tbasectxtmemworkingcopy(R'RHRI((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyt__init__s cC@s||jkrdS|j|}||jkr?|j|}n |j}|j|jf}|j}|||o|dfS(s-comply with mercurial.patch.filestore.getfileiN(NNN(RHR;RIR(tislinktisexecR>(R'R@REtcontenttmodeR>((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pytgetfiles   (RRRRJRO(((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRGs c C@s|d kr-|jjj|j}n|d krH|j}n|j}|j}|j}t |j j |}t ||}t jd|jd|d|d|d|d|d|dd d | S( si({path: content}, ctx, (p1node, p2node)?, {}?) -> memctx memworkingcopy overrides file contents. trepoR5ttexttfilest filectxfntusertdatetbranchtextraN(R;RPt changelogR5R RWRUt descriptionRTR*RRtunionRGRtmemctx( RIR9R5RWRUtdescRTRRtstore((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pytoverlaycontexts !     tfilefixupstatecB@seZdZdddZddZdZdZdZe dZ dZ dZ d Z d Zed Zd Zd ZRS(s state needed to apply fixups to a single file internally, it keeps file contents of several revisions and a linelog. the linelog uses odd revision numbers for original contents (fctxs passed to __init__), and even revision numbers for fixups, like: linelog rev 1: self.fctxs[0] (from an immutable "public" changeset) linelog rev 2: fixups made to self.fctxs[0] linelog rev 3: self.fctxs[1] (a child of fctxs[0]) linelog rev 4: fixups made to self.fctxs[1] ... a typical use is like: 1. call diffwith, to calculate self.fixups 2. (optionally), present self.fixups to the user, or change it 3. call apply, to apply changes 4. read results from "finalcontents", or call getfinalcontent cC@s||_||_|pt|_|p-i|_g|D]}|j^q:|_tjt j |j|_ |j |_ |jjrnddg|_g|_g|_g|_t|_dS(s([fctx], ui or None) -> None fctxs should be linear, and sorted by topo order - oldest first. fctxs[0] will be considered as "immutable" and will not be changed. iN(RBR@RtuitoptsR(tcontentsR tmaplistRt splitnewlinest contentlinest _buildlinelogRR!t chunkstatst targetlinestfixupst finalcontentsR*t ctxaffected(R'RBR@R`Ratf((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRJs  "    c C@s2|jd}|jd}|j}tj|}||_|jj|jj|jj }|r|dd|dddf}|j |nx|j ||||D]{} |j | |} |j dct| 7<|j dcd7<|j| 7_|dk r|j|||| | qqWdS(scalculate fixups needed by examining the differences between self.fctxs[-1] and targetfctx, chunk by chunk. targetfctx is the target state we move towards. we may or may not be able to get there because not all modified chunks can be amended into a non-public fctx unambiguously. call this only once, before apply(). update self.fixups, self.chunkstats, and self.targetlines. iiiN(RbReR(RRdRhRtannotatetmaxrevtannotateresultR,t_alldiffchunkst_analysediffchunkRgtboolRiR;t _showchanges( R't targetfctxtfmtatalinestbtblinest annotatedt dummyendlinetchunkt newfixups((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pytdiffwith0s"       cC@sxt|jD]\}}}}}|j||!}|jjrt|ddd}|jjtdtj |j |j||t |fn|j j |||||qW|jjdtr|j|_n|j|_dS(sapply self.fixups. update self.linelog, self.finalcontents. call this only once, before getfinalcontent(), after diffwith(). iiis%s: chunk %d:%d -> %d lines t edit_linesN(R=RiRhR`R!tmaxtwriteRR tshortRBR4Rt replacelinesRatgetR t_checkoutlinelogwitheditsRjt_checkoutlinelog(R'trevta1ta2tb1tb2Rytidx((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pytapplySs%  cC@s|jj|}|j|S(s@(fctx) -> str. get modified file content for a given filecontext(RBtindexRj(R'RER((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pytgetfinalcontentgscC@s|\}}}}|||!}| ry|ry|td|dh}g|D]$} || ddkrL|| ^qL}nttd|D} g} t| dkr|j||dtr| d} | dkr| d} | j| ||||fqn||||ks(||krxtj||D]} || \} }| dkr;||krvd}}n|| |}|d}| d} | j| | | d||fq;q;Wn|j | S(sanalyse a different chunk and return new fixups found return [] if no lines from the chunk can be safely applied. the chunk (or lines) cannot be safely applied, if, for example: - the modified (deleted) lines belong to a public changeset (self.fctxs[0]) - the chunk is a pure insertion and the adjacent lines (at most 2 lines) belong to different non-public changesets, or do not belong to any non-public changesets. - the chunk is modifying lines from different changesets. in this case, if the number of lines deleted equals to the number of lines added, assume it's a simple 1:1 map (could be wrong). otherwise, give up. - the chunk is modifying lines from a single non-public changeset, but other revisions touch the area as well. i.e. the lines are not continuous as seen from the linelog. iics@s|]\}}|VqdS(N((t.0trtl((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pys s( RtlistR*R4t _iscontinuousR#R,R txranget_optimizefixups(R'R|RzRRRRtinvolvedtnearbylinenumstit involvedrevsR}Rtfixuprevtlinenumtnb1tnb2((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRqls0  1+   "      *cc@sPtj||d|d|}x+|D]#\}}|dkrCq%n|Vq%WdS(s5like mdiff.allblocks, but only care about differencestlines1tlines2t!N(Rt allblocks(RvRxRwRytblocksR|tbtype((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRps  c C@stj}dg}}xtjt|jD]}|j||j|}}|dd}|j||||}x?tt|D]+\} } } } |j || | | | qW||}}q2W|S(s~calculate the initial linelog based on self.content{,line}s. this is similar to running a partial "annotate". R&ii( RR RR4RbReRpR=RR( R'tllogRvRwRRxRytllrevtchunksRRRR((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRfs  %cC@syg}xltjt|jD]R}|dd}|jj|djt|j|jj }|j |qW|S(s1() -> [str]. check out file contents from linelogiiR&( R RR4RbRRmtjointmapt_getlineRoR,(R'RbRRRM((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRs!c C@s%|jj}td|jdj}gt|jD]'\}}t|ts<||f^q<}x{t|D]m\}\}}|tdd|dt||dt j |j |j j dddf7}qvW|td dt|7}t d }xT|D]L\}}|jj|dd x%|jjD]}||j|qLWqWxc|D][}|d d jg|D](\}} |||krdnd^q|j|f7}qrW|jj|d dd} | s tjtdng|jD] }d ^q} d} | t|d} xtj| D]}|jdrkqPn|| d| d !dkrtjtd|n|| d }xLt|| | d!D]3\}}|dkr| ||dc|7 [str]. prompt all lines for editsZHG: editing %s HG: "y" means the line to the right exists in the changeset to the top HG: isHG: %s/%s %s %s t|t-is isHG: %s cS@stS(N(R*(((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pytsis %s : %sR&tyt tactionRsempty editor textisHG:s : smalformed line: %s(Rt getalllinesRRBR@t enumeratet isinstanceR%R4R RRYtsplitt defaultdictRmRoR+RRR`teditRtAbortRRdt startswithRg(R'talllinest editortextRRlt visiblefctxstjtlinesetRt_ft editedtextRbt leftpadpostcolonpost linecontenttch((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRsP ! %  2$ # cC@s8|\}}|d@r)|j|d|S|j|SdS(s@((rev, linenum)) -> str. convert rev+line number to line contentiiN(ReRh(R'tlineinfoRR((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRs  cC@sq||krtS|j}|j|}|j|t|}|j||}t|||t|kS(s(a1, a2 : int) -> bool check if these lines are continuous. i.e. no other insertions or deletions (from other revisions) among these lines. closedinterval decides whether a2 should be included or not. i.e. is it [a1, a2), or [a1, a2] ? (R#Rt getoffsettintRR4(R'RRtclosedintervalRtoffset1toffset2tlinesinbetween((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRs  c @sgdddddggfd}xt|D]\}}|\}}}}} dd} dd} dd} || kr|| kr|| kr|jt|dd|r|dd<| dd [(rev, a1, a2, b1, b2)]. merge adjacent fixups to make them less fragmented. ic@s2dddkr.jtdndS(Nii(R,ttuple((t pcurrentchunkR/(s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyt pushchunksiiii(RRRR( R'RiRRR|RRRRRtlastrevtlasta2tlastb2((RR/s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRs $c @sd}|\}}} } dg||dg| | } } x|D]\} }}}}x9tj||D]%}t| ddd| || None stack: should be linear, and sorted by topo order - oldest first. all commits in stack are considered mutable. iN(RR`RaR?RPt unfilteredtpathsR;tstatusRCtfixupmapt replacemapt finalnodeR*Rk(R'R?R`Ra((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRJas       c C@s|jdj|||_g|_|jjd}|jj r_|r_|r_|j}n |jj}t}xgt|D]Y}|j j d|||}t |j||\} } t d|g| Drqn|j | dj kr | r qn|j| d| |j|siR`Rasshowing changes for R@s%s Rs absorb.pathRN(R?RRRaRtmodifiedRRR*tsortedR`tdebugRFtanyR(tupdateRCR_R;RtplainRR~RR,Rk( R't targetctxtmatchRuteditopttinterestingpathsRAR@RtRBtctx2fctxtfstate((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyR~vs8     # !    cC@sWxP|jjD]?\}}|jjrE|jjtd|n|jqWdS(s*apply fixups to individual filefixupstatessapplying fixups to %s N(Rt iteritemsR`R!RRR(R'R@tstate((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRs cC@std|jjDS(s>-> {path: chunkstats}. collect chunkstats from filefixupstatescs@s$|]\}}||jfVqdS(N(Rg(RR@R((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pys s(tdictRR(R'((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRgs cC@s|jj|jj|jjd]}|j|j||jdj|jkru|jn|j r|j nWdQX|j s|j nWdQXWdQX|j S(s6commit changes. update self.finalnode, self.replacemapRt.N( RPtwlocktlockt transactiont _commitstackt_movebookmarksR Rt_moveworkingdirectoryparentt _useobsoletet_obsoleteoldcommitst_stripoldcommitsR(R'ttr((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pytcommits     c@s|j}|j}|jrpx|jD]A\}}|dr(|jtd||d|dfq(q(WnQ|js|jfddD\}}|jtd||fndS(s+print things like '1 of 2 chunk(s) applied'is%s: %d of %d chunk(s) applied ic3@s+|]!tfdDVqdS(c3@s|]}|VqdS(N((Rts(R(s2/usr/lib64/python2.7/site-packages/hgext/absorb.pys sN(tsum(R(tstats(Rs2/usr/lib64/python2.7/site-packages/hgext/absorb.pys ss%d of %d chunk(s) applied N(ii(R`RgR"RRRR$tvalues(R'R`RgR@tstattappliedttotal((R s2/usr/lib64/python2.7/site-packages/hgext/absorb.pytprintchunkstatss    #  cC@shd}d}x@|jD]5}|j|}| rE| rE|}qnd}|j|||rd|j|j {path: str} fetch file contents from filefixupstates. return the working copy overrides - files different from ctx. (RRCR(RRR@(R'R9R/R@RRERMt newcontent((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRs     cC@s|j}g|jjD].\}}||jkr||j|f^q}g}x|D]\}}|r|j||f|jjr|jjtd|t j |fqqZ|j|df|jjrZ|jjtd|qZqZW|jj |||dS(Nsmoving bookmark %s to %s sdeleting bookmark %s ( RPt _bookmarksRRR,R`R"RRR RR;t applychanges(R'RRPRthsht needupdatetchanges((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRs (  !c@s|jsL|jjd|jj}|j|j}|j|_n|j|j}|jjd}|}tj drj j fd}|j _ nz9j 'j |j|j|jWdQXWd|XdS(Nsmax(::. - %ln)cS@sdS(Ni((((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyR"st_fsmonitorstatec@sj_dS(N(R t invalidate((tbaktdirstate(s2/usr/lib64/python2.7/site-packages/hgext/absorb.pytrestore&s(RRPtrevsRtkeystfirstR R#Rt safehasattrR R!t parentchangetrebuildtmanifestR(R'R%R9tnoopR$((R"R#s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRs      ,cC@s|s5|j}t|dkr(tS|d}nt|jjt|sZtSx||jD]n\}}||ks||krtS||}||}|j|jkrtS|j|krgtSqgWt S(s({path: content}, ctx, ctx) -> bool. test if a commit will be noop if it will become an empty commit (does not change anything, after the memworkingcopy overrides), return True. otherwise return False. ii( R5R4R R*RRtissubsetRtflagsR(R#(RIR9RDR5R@RMREtpfctx((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyR/s"  !  cC@s|o|tjf}|j}|jrR|jjddrR|j|d node. make a single commit the commit is a clone from ctx, with a (optionally) different p1, and different file contents replaced by memworkingcopy. Rs add-noiset absorb_sourceRWR s new-commitN(R s new-commit( R R)RWRR`t configboolRR^RPtconfigoverrideR2R (R'RIR9R<R5RWtmctx((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRIs cC@stj|jtjS(s () -> bool(R t isenabledRPtcreatemarkersopt(R'((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRYscC@skg|jjD]5\}}|j||r<|j|fp?df^q}|rgtj|j|ndS(N((RRRPR t createmarkers(R'tktvt relations((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyR^sHcC@s|jj}|jjd|||}|jjj}g|D]}||^q@}|r}tj|jj|j|ndS(Ns%ln - (::(heads(%ln::)-%ln))( RR&RPR%RXR RtstripR`(R'tnodelistR%ttonodeR((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRds N(RRRR;RJR~RtpropertyRgR RRRRRRRRRRt propertycacheRRR(((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRTs$ (    #      cC@st|tjtjfkr"dS|jj}|jt |j d}g|_ |_ t j }|j|tj|j}||j}g|dD] }|ddkr|d^q}||||ffS(sA(crecord.uihunk or patch.recordhunk) -> (path, (a1, a2, [bline]))iiRN(NN(ttypeRtuihunkR t recordhunkR;theadertfilenametfromlineR4tbeforetafterRtstringioRRRdtgetvaluetremoved(RR@Rtbuft patchlinesRRRy((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyt _parsechunkns   1c C@si}td}xBtt|D]1\}}| s%| rEq%n||j|q%Wx|jD]\}}||ksg| rqgn|jdttj||j }x$|D]\}} } | ||| +qWdj ||| memctx return a memctx with some [1] patches (chunks) applied to ctx. [1]: modifications are handled. renames, mode changes, etc. are ignored. cS@sgS(N((((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRsR6R&( RRRLR,RtsortR#RRdR(RR^( R9RRItpatchmapR@tinfotpatchestlinesRRRy((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pytoverlaydiffcontext~scC@s=|d krf|jdd}t|d|}|rft||krf|jtd|qfn|stjtdn|d kr|d }n|d krd!}n|d kri}nt|d|d|}t j |||}|j drft j ||d j|j|} t j| } tj|| d } t|d | }nd } |j d s|j d  r|jd|} n|j||| | d k r| j| jd dt|j| jddxt|D]} | |jkrqn| j| jd| | jdd| jdd| jdd| jjd }| jdd|ddqW| jn|j ds9|j d s|jdddrtjtdqn|j |j!r|j"q9|j#s9|jtdq9n|S("spick fixup chunks from targetctx, apply them to stack. if targetctx is None, the working copy context will be used. if stack is None, the current draft stack will be used. return fixupstate. Rsmax-stack-sizeRs7absorb: only the recent %d changesets will be analysed sno mutable changeset to changeR`Rat interactiveiit print_changest apply_changestcounts %d changesets affected RtsummaryR9t changesetR s%-7.7s Rs absorb.nodet descfirstlines%s sabsorb.descriptiontdry_runs"apply changes (yn)? $$ &Yes $$ &NoRisabsorb cancelled snothing applied N(($R;t configintR:R4twarnRRRRRRRR tdiffR t parsepatchRt recordfilterRRt formatterR~RRRkR(R=RRRYt splitlinestendt promptchoiceRR RR$(R`RPR?RtpatsRaR8RtmatcherR]t origchunksRRuR9RY((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyRsd       (         Rvs apply-changess0apply changes without prompting for confirmationtps print-changess;always print which changesets are modified by which changesRRSs9interactively select which chunks to apply (EXPERIMENTAL)tes edit-linessGedit what lines belong to which changesets before commit (EXPERIMENTAL)shg absorb [OPTION] [FILE]...t helpcategoryt helpbasiccO@sWtj|}t||d|d|}td|jjDdkrSdSdS(sincorporate corrections into the stack of draft changesets absorb analyzes each change in your working directory and attempts to amend the changed lines into the changesets in your stack that first introduced those lines. If absorb cannot find an unambiguous changeset to amend for a change, that change will be left in the working directory, untouched. They can be observed by :hg:`status` or :hg:`diff` afterwards. In other words, absorb does not write to the working directory. Changesets outside the revset `::. and not public() and not merge()` will not be changed. Changesets that become empty after applying the changes will be deleted. By default, absorb will show what it plans to do and prompt for confirmation. If you are confident that the changes will be absorbed to the correct place, run :hg:`absorb -a` to apply the changes immediately. Returns 0 on success, 1 if all chunks were ignored and nothing amended. RdRacs@s|]}|dVqdS(iN((RR ((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pys siiN(R t byteskwargsRR RgR (R`RPRdRaR((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pyt absorbcmds&%(5Rt __future__Rt collectionstmercurial.i18nRt mercurialRRRRRRRR R R R R RRRRtmercurial.utilsRt testedwithtcmdtabletcommandt configtablet configitemR#R;t colortableRtobjectRR%R1R:RFt filestoreRGR^R_RRLRRRt dryrunoptst templateoptstwalkoptstCATEGORY_COMMITTINGRl(((s2/usr/lib64/python2.7/site-packages/hgext/absorb.pytsJ j     QT  < l