hgext/absorb.py
changeset 49284 d44e3c45f0e4
parent 49072 3cd57e2be49b
child 49959 c166b212bdee
equal deleted inserted replaced
49283:44b26349127b 49284:d44e3c45f0e4
   422             if rev > 1:
   422             if rev > 1:
   423                 fixuprev = rev + 1
   423                 fixuprev = rev + 1
   424                 newfixups.append((fixuprev, a1, a2, b1, b2))
   424                 newfixups.append((fixuprev, a1, a2, b1, b2))
   425         elif a2 - a1 == b2 - b1 or b1 == b2:
   425         elif a2 - a1 == b2 - b1 or b1 == b2:
   426             # 1:1 line mapping, or chunk was deleted
   426             # 1:1 line mapping, or chunk was deleted
   427             for i in pycompat.xrange(a1, a2):
   427             for i in range(a1, a2):
   428                 rev, linenum = annotated[i]
   428                 rev, linenum = annotated[i]
   429                 if rev > 1:
   429                 if rev > 1:
   430                     if b1 == b2:  # deletion, simply remove that single line
   430                     if b1 == b2:  # deletion, simply remove that single line
   431                         nb1 = nb2 = 0
   431                         nb1 = nb2 = 0
   432                     else:  # 1:1 line mapping, change the corresponding rev
   432                     else:  # 1:1 line mapping, change the corresponding rev
   449         """calculate the initial linelog based on self.content{,line}s.
   449         """calculate the initial linelog based on self.content{,line}s.
   450         this is similar to running a partial "annotate".
   450         this is similar to running a partial "annotate".
   451         """
   451         """
   452         llog = linelog.linelog()
   452         llog = linelog.linelog()
   453         a, alines = b'', []
   453         a, alines = b'', []
   454         for i in pycompat.xrange(len(self.contents)):
   454         for i in range(len(self.contents)):
   455             b, blines = self.contents[i], self.contentlines[i]
   455             b, blines = self.contents[i], self.contentlines[i]
   456             llrev = i * 2 + 1
   456             llrev = i * 2 + 1
   457             chunks = self._alldiffchunks(a, b, alines, blines)
   457             chunks = self._alldiffchunks(a, b, alines, blines)
   458             for a1, a2, b1, b2 in reversed(list(chunks)):
   458             for a1, a2, b1, b2 in reversed(list(chunks)):
   459                 llog.replacelines(llrev, a1, a2, b1, b2)
   459                 llog.replacelines(llrev, a1, a2, b1, b2)
   461         return llog
   461         return llog
   462 
   462 
   463     def _checkoutlinelog(self):
   463     def _checkoutlinelog(self):
   464         """() -> [str]. check out file contents from linelog"""
   464         """() -> [str]. check out file contents from linelog"""
   465         contents = []
   465         contents = []
   466         for i in pycompat.xrange(len(self.contents)):
   466         for i in range(len(self.contents)):
   467             rev = (i + 1) * 2
   467             rev = (i + 1) * 2
   468             self.linelog.annotate(rev)
   468             self.linelog.annotate(rev)
   469             content = b''.join(map(self._getline, self.linelog.annotateresult))
   469             content = b''.join(map(self._getline, self.linelog.annotateresult))
   470             contents.append(content)
   470             contents.append(content)
   471         return contents
   471         return contents
   603         # this is not optimized for perf but _showchanges only gets executed
   603         # this is not optimized for perf but _showchanges only gets executed
   604         # with an extra command-line flag.
   604         # with an extra command-line flag.
   605         a1, a2, b1, b2 = chunk
   605         a1, a2, b1, b2 = chunk
   606         aidxs, bidxs = [0] * (a2 - a1), [0] * (b2 - b1)
   606         aidxs, bidxs = [0] * (a2 - a1), [0] * (b2 - b1)
   607         for idx, fa1, fa2, fb1, fb2 in fixups:
   607         for idx, fa1, fa2, fb1, fb2 in fixups:
   608             for i in pycompat.xrange(fa1, fa2):
   608             for i in range(fa1, fa2):
   609                 aidxs[i - a1] = (max(idx, 1) - 1) // 2
   609                 aidxs[i - a1] = (max(idx, 1) - 1) // 2
   610             for i in pycompat.xrange(fb1, fb2):
   610             for i in range(fb1, fb2):
   611                 bidxs[i - b1] = (max(idx, 1) - 1) // 2
   611                 bidxs[i - b1] = (max(idx, 1) - 1) // 2
   612 
   612 
   613         fm.startitem()
   613         fm.startitem()
   614         fm.write(
   614         fm.write(
   615             b'hunk',
   615             b'hunk',
   635                 line,
   635                 line,
   636                 label=linelabel,
   636                 label=linelabel,
   637             )
   637             )
   638             fm.data(path=self.path, linetype=linetype)
   638             fm.data(path=self.path, linetype=linetype)
   639 
   639 
   640         for i in pycompat.xrange(a1, a2):
   640         for i in range(a1, a2):
   641             writeline(
   641             writeline(
   642                 aidxs[i - a1],
   642                 aidxs[i - a1],
   643                 b'-',
   643                 b'-',
   644                 trim(alines[i]),
   644                 trim(alines[i]),
   645                 b'deleted',
   645                 b'deleted',
   646                 b'diff.deleted',
   646                 b'diff.deleted',
   647             )
   647             )
   648         for i in pycompat.xrange(b1, b2):
   648         for i in range(b1, b2):
   649             writeline(
   649             writeline(
   650                 bidxs[i - b1],
   650                 bidxs[i - b1],
   651                 b'+',
   651                 b'+',
   652                 trim(blines[i]),
   652                 trim(blines[i]),
   653                 b'inserted',
   653                 b'inserted',