hgext/rebase.py
changeset 38799 2002c193f2bc
parent 38681 8eeed92475d5
child 38816 2b728789edfd
equal deleted inserted replaced
38798:d58958676b3c 38799:2002c193f2bc
   583             # commit is completely done. On InterventionRequired, we thus
   583             # commit is completely done. On InterventionRequired, we thus
   584             # won't store the status. Instead, we'll hit the "len(parents) == 2"
   584             # won't store the status. Instead, we'll hit the "len(parents) == 2"
   585             # case and realize that the commit was in progress.
   585             # case and realize that the commit was in progress.
   586             self.storestatus()
   586             self.storestatus()
   587 
   587 
   588     def _finishrebase(self):
   588     def _finishrebase(self, backup=True):
       
   589         """
       
   590         backup:   if False, no backup will be stored when stripping rebased
       
   591                   revisions
       
   592         """
   589         repo, ui, opts = self.repo, self.ui, self.opts
   593         repo, ui, opts = self.repo, self.ui, self.opts
   590         fm = ui.formatter('rebase', opts)
   594         fm = ui.formatter('rebase', opts)
   591         fm.startitem()
   595         fm.startitem()
   592         if self.collapsef:
   596         if self.collapsef:
   593             p1, p2, _base = defineparents(repo, min(self.state), self.destmap,
   597             p1, p2, _base = defineparents(repo, min(self.state), self.destmap,
   630 
   634 
   631         collapsedas = None
   635         collapsedas = None
   632         if self.collapsef and not self.keepf:
   636         if self.collapsef and not self.keepf:
   633             collapsedas = newnode
   637             collapsedas = newnode
   634         clearrebased(ui, repo, self.destmap, self.state, self.skipped,
   638         clearrebased(ui, repo, self.destmap, self.state, self.skipped,
   635                      collapsedas, self.keepf, fm=fm)
   639                      collapsedas, self.keepf, fm=fm, backup=backup)
   636 
   640 
   637         clearstatus(repo)
   641         clearstatus(repo)
   638         clearcollapsemsg(repo)
   642         clearcollapsemsg(repo)
   639 
   643 
   640         ui.note(_("rebase completed\n"))
   644         ui.note(_("rebase completed\n"))
   827                 raise error.Abort(_('--auto-orphans is incompatible with %s') %
   831                 raise error.Abort(_('--auto-orphans is incompatible with %s') %
   828                                   ('--' + key))
   832                                   ('--' + key))
   829         userrevs = list(repo.revs(opts.get('auto_orphans')))
   833         userrevs = list(repo.revs(opts.get('auto_orphans')))
   830         opts['rev'] = [revsetlang.formatspec('%ld and orphan()', userrevs)]
   834         opts['rev'] = [revsetlang.formatspec('%ld and orphan()', userrevs)]
   831         opts['dest'] = '_destautoorphanrebase(SRC)'
   835         opts['dest'] = '_destautoorphanrebase(SRC)'
       
   836     backup = ui.configbool('ui', 'history-editing-backup')
       
   837     opts['backup'] = backup
   832 
   838 
   833     if dryrun:
   839     if dryrun:
   834         return _dryrunrebase(ui, repo, opts)
   840         return _dryrunrebase(ui, repo, opts)
   835     elif inmemory:
   841     elif inmemory:
   836         try:
   842         try:
   848         return _dorebase(ui, repo, opts)
   854         return _dorebase(ui, repo, opts)
   849 
   855 
   850 def _dryrunrebase(ui, repo, opts):
   856 def _dryrunrebase(ui, repo, opts):
   851     rbsrt = rebaseruntime(repo, ui, inmemory=True, opts=opts)
   857     rbsrt = rebaseruntime(repo, ui, inmemory=True, opts=opts)
   852     confirm = opts.get('confirm')
   858     confirm = opts.get('confirm')
       
   859     backup = opts.get('backup')
   853     if confirm:
   860     if confirm:
   854         ui.status(_('starting in-memory rebase\n'))
   861         ui.status(_('starting in-memory rebase\n'))
   855     else:
   862     else:
   856         ui.status(_('starting dry-run rebase; repository will not be '
   863         ui.status(_('starting dry-run rebase; repository will not be '
   857                     'changed\n'))
   864                     'changed\n'))
   869             if confirm:
   876             if confirm:
   870                 ui.status(_('rebase completed successfully\n'))
   877                 ui.status(_('rebase completed successfully\n'))
   871                 if not ui.promptchoice(_(b'apply changes (yn)?'
   878                 if not ui.promptchoice(_(b'apply changes (yn)?'
   872                                          b'$$ &Yes $$ &No')):
   879                                          b'$$ &Yes $$ &No')):
   873                     # finish unfinished rebase
   880                     # finish unfinished rebase
   874                     rbsrt._finishrebase()
   881                     rbsrt._finishrebase(backup=backup)
   875                 else:
   882                 else:
   876                     rbsrt._prepareabortorcontinue(isabort=True, backup=False,
   883                     rbsrt._prepareabortorcontinue(isabort=True, backup=False,
   877                                                   suppwarns=True)
   884                                                   suppwarns=True)
   878                 needsabort = False
   885                 needsabort = False
   879             else:
   886             else:
   900         # search default destination in this space
   907         # search default destination in this space
   901         # used in the 'hg pull --rebase' case, see issue 5214.
   908         # used in the 'hg pull --rebase' case, see issue 5214.
   902         destspace = opts.get('_destspace')
   909         destspace = opts.get('_destspace')
   903         contf = opts.get('continue')
   910         contf = opts.get('continue')
   904         abortf = opts.get('abort')
   911         abortf = opts.get('abort')
       
   912         backup = opts.get('backup')
   905         if opts.get('interactive'):
   913         if opts.get('interactive'):
   906             try:
   914             try:
   907                 if extensions.find('histedit'):
   915                 if extensions.find('histedit'):
   908                     enablehistedit = ''
   916                     enablehistedit = ''
   909             except KeyError:
   917             except KeyError:
   930                 ui.warn(_('tool option will be ignored\n'))
   938                 ui.warn(_('tool option will be ignored\n'))
   931             if contf:
   939             if contf:
   932                 ms = mergemod.mergestate.read(repo)
   940                 ms = mergemod.mergestate.read(repo)
   933                 mergeutil.checkunresolved(ms)
   941                 mergeutil.checkunresolved(ms)
   934 
   942 
   935             retcode = rbsrt._prepareabortorcontinue(abortf)
   943             retcode = rbsrt._prepareabortorcontinue(abortf, backup=backup)
   936             if retcode is not None:
   944             if retcode is not None:
   937                 return retcode
   945                 return retcode
   938         else:
   946         else:
   939             destmap = _definedestmap(ui, repo, inmemory, destf, srcf, basef,
   947             destmap = _definedestmap(ui, repo, inmemory, destf, srcf, basef,
   940                                      revf, destspace=destspace)
   948                                      revf, destspace=destspace)
   959             if singletr and not inmemory:
   967             if singletr and not inmemory:
   960                 dsguard = dirstateguard.dirstateguard(repo, 'rebase')
   968                 dsguard = dirstateguard.dirstateguard(repo, 'rebase')
   961             with util.acceptintervention(dsguard):
   969             with util.acceptintervention(dsguard):
   962                 rbsrt._performrebase(tr)
   970                 rbsrt._performrebase(tr)
   963                 if not leaveunfinished:
   971                 if not leaveunfinished:
   964                     rbsrt._finishrebase()
   972                     rbsrt._finishrebase(backup=backup)
   965 
   973 
   966 def _definedestmap(ui, repo, inmemory, destf=None, srcf=None, basef=None,
   974 def _definedestmap(ui, repo, inmemory, destf=None, srcf=None, basef=None,
   967                    revf=None, destspace=None):
   975                    revf=None, destspace=None):
   968     """use revisions argument to define destmap {srcrev: destrev}"""
   976     """use revisions argument to define destmap {srcrev: destrev}"""
   969     if revf is None:
   977     if revf is None:
  1726         if parents and all((state.get(p) == p for p in parents)):
  1734         if parents and all((state.get(p) == p for p in parents)):
  1727             state[rev] = rev
  1735             state[rev] = rev
  1728     return originalwd, destmap, state
  1736     return originalwd, destmap, state
  1729 
  1737 
  1730 def clearrebased(ui, repo, destmap, state, skipped, collapsedas=None,
  1738 def clearrebased(ui, repo, destmap, state, skipped, collapsedas=None,
  1731                  keepf=False, fm=None):
  1739                  keepf=False, fm=None, backup=True):
  1732     """dispose of rebased revision at the end of the rebase
  1740     """dispose of rebased revision at the end of the rebase
  1733 
  1741 
  1734     If `collapsedas` is not None, the rebase was a collapse whose result if the
  1742     If `collapsedas` is not None, the rebase was a collapse whose result if the
  1735     `collapsedas` node.
  1743     `collapsedas` node.
  1736 
  1744 
  1737     If `keepf` is not True, the rebase has --keep set and no nodes should be
  1745     If `keepf` is not True, the rebase has --keep set and no nodes should be
  1738     removed (but bookmarks still need to be moved).
  1746     removed (but bookmarks still need to be moved).
       
  1747 
       
  1748     If `backup` is False, no backup will be stored when stripping rebased
       
  1749     revisions.
  1739     """
  1750     """
  1740     tonode = repo.changelog.node
  1751     tonode = repo.changelog.node
  1741     replacements = {}
  1752     replacements = {}
  1742     moves = {}
  1753     moves = {}
  1743     for rev, newrev in sorted(state.items()):
  1754     for rev, newrev in sorted(state.items()):
  1749                 if rev in skipped:
  1760                 if rev in skipped:
  1750                     succs = ()
  1761                     succs = ()
  1751                 else:
  1762                 else:
  1752                     succs = (newnode,)
  1763                     succs = (newnode,)
  1753                 replacements[oldnode] = succs
  1764                 replacements[oldnode] = succs
  1754     scmutil.cleanupnodes(repo, replacements, 'rebase', moves)
  1765     scmutil.cleanupnodes(repo, replacements, 'rebase', moves, backup=backup)
  1755     if fm:
  1766     if fm:
  1756         hf = fm.hexfunc
  1767         hf = fm.hexfunc
  1757         fl = fm.formatlist
  1768         fl = fm.formatlist
  1758         fd = fm.formatdict
  1769         fd = fm.formatdict
  1759         nodechanges = fd({hf(oldn): fl([hf(n) for n in newn], name='node')
  1770         nodechanges = fd({hf(oldn): fl([hf(n) for n in newn], name='node')