hgext/rebase.py
changeset 38816 2b728789edfd
parent 38799 2002c193f2bc
child 39093 cc37009e95ca
equal deleted inserted replaced
38815:617ae7e33a65 38816:2b728789edfd
   175         e = opts.get('extrafn') # internal, used by e.g. hgsubversion
   175         e = opts.get('extrafn') # internal, used by e.g. hgsubversion
   176         self.extrafns = [_savegraft]
   176         self.extrafns = [_savegraft]
   177         if e:
   177         if e:
   178             self.extrafns = [e]
   178             self.extrafns = [e]
   179 
   179 
       
   180         self.backupf = ui.configbool('ui', 'history-editing-backup')
   180         self.keepf = opts.get('keep', False)
   181         self.keepf = opts.get('keep', False)
   181         self.keepbranchesf = opts.get('keepbranches', False)
   182         self.keepbranchesf = opts.get('keepbranches', False)
   182         self.obsoletenotrebased = {}
   183         self.obsoletenotrebased = {}
   183         self.obsoletewithoutsuccessorindestination = set()
   184         self.obsoletewithoutsuccessorindestination = set()
   184         self.inmemory = inmemory
   185         self.inmemory = inmemory
   341                 return 0
   342                 return 0
   342             else:
   343             else:
   343                 msg = _('cannot continue inconsistent rebase')
   344                 msg = _('cannot continue inconsistent rebase')
   344                 hint = _('use "hg rebase --abort" to clear broken state')
   345                 hint = _('use "hg rebase --abort" to clear broken state')
   345                 raise error.Abort(msg, hint=hint)
   346                 raise error.Abort(msg, hint=hint)
       
   347 
   346         if isabort:
   348         if isabort:
       
   349             backup = backup and self.backupf
   347             return abort(self.repo, self.originalwd, self.destmap, self.state,
   350             return abort(self.repo, self.originalwd, self.destmap, self.state,
   348                          activebookmark=self.activebookmark, backup=backup,
   351                          activebookmark=self.activebookmark, backup=backup,
   349                          suppwarns=suppwarns)
   352                          suppwarns=suppwarns)
   350 
   353 
   351     def _preparenewrebase(self, destmap):
   354     def _preparenewrebase(self, destmap):
   583             # commit is completely done. On InterventionRequired, we thus
   586             # commit is completely done. On InterventionRequired, we thus
   584             # won't store the status. Instead, we'll hit the "len(parents) == 2"
   587             # won't store the status. Instead, we'll hit the "len(parents) == 2"
   585             # case and realize that the commit was in progress.
   588             # case and realize that the commit was in progress.
   586             self.storestatus()
   589             self.storestatus()
   587 
   590 
   588     def _finishrebase(self, backup=True):
   591     def _finishrebase(self):
   589         """
       
   590         backup:   if False, no backup will be stored when stripping rebased
       
   591                   revisions
       
   592         """
       
   593         repo, ui, opts = self.repo, self.ui, self.opts
   592         repo, ui, opts = self.repo, self.ui, self.opts
   594         fm = ui.formatter('rebase', opts)
   593         fm = ui.formatter('rebase', opts)
   595         fm.startitem()
   594         fm.startitem()
   596         if self.collapsef:
   595         if self.collapsef:
   597             p1, p2, _base = defineparents(repo, min(self.state), self.destmap,
   596             p1, p2, _base = defineparents(repo, min(self.state), self.destmap,
   634 
   633 
   635         collapsedas = None
   634         collapsedas = None
   636         if self.collapsef and not self.keepf:
   635         if self.collapsef and not self.keepf:
   637             collapsedas = newnode
   636             collapsedas = newnode
   638         clearrebased(ui, repo, self.destmap, self.state, self.skipped,
   637         clearrebased(ui, repo, self.destmap, self.state, self.skipped,
   639                      collapsedas, self.keepf, fm=fm, backup=backup)
   638                      collapsedas, self.keepf, fm=fm, backup=self.backupf)
   640 
   639 
   641         clearstatus(repo)
   640         clearstatus(repo)
   642         clearcollapsemsg(repo)
   641         clearcollapsemsg(repo)
   643 
   642 
   644         ui.note(_("rebase completed\n"))
   643         ui.note(_("rebase completed\n"))
   831                 raise error.Abort(_('--auto-orphans is incompatible with %s') %
   830                 raise error.Abort(_('--auto-orphans is incompatible with %s') %
   832                                   ('--' + key))
   831                                   ('--' + key))
   833         userrevs = list(repo.revs(opts.get('auto_orphans')))
   832         userrevs = list(repo.revs(opts.get('auto_orphans')))
   834         opts['rev'] = [revsetlang.formatspec('%ld and orphan()', userrevs)]
   833         opts['rev'] = [revsetlang.formatspec('%ld and orphan()', userrevs)]
   835         opts['dest'] = '_destautoorphanrebase(SRC)'
   834         opts['dest'] = '_destautoorphanrebase(SRC)'
   836     backup = ui.configbool('ui', 'history-editing-backup')
       
   837     opts['backup'] = backup
       
   838 
   835 
   839     if dryrun:
   836     if dryrun:
   840         return _dryrunrebase(ui, repo, opts)
   837         return _dryrunrebase(ui, repo, opts)
   841     elif inmemory:
   838     elif inmemory:
   842         try:
   839         try:
   854         return _dorebase(ui, repo, opts)
   851         return _dorebase(ui, repo, opts)
   855 
   852 
   856 def _dryrunrebase(ui, repo, opts):
   853 def _dryrunrebase(ui, repo, opts):
   857     rbsrt = rebaseruntime(repo, ui, inmemory=True, opts=opts)
   854     rbsrt = rebaseruntime(repo, ui, inmemory=True, opts=opts)
   858     confirm = opts.get('confirm')
   855     confirm = opts.get('confirm')
   859     backup = opts.get('backup')
       
   860     if confirm:
   856     if confirm:
   861         ui.status(_('starting in-memory rebase\n'))
   857         ui.status(_('starting in-memory rebase\n'))
   862     else:
   858     else:
   863         ui.status(_('starting dry-run rebase; repository will not be '
   859         ui.status(_('starting dry-run rebase; repository will not be '
   864                     'changed\n'))
   860                     'changed\n'))
   876             if confirm:
   872             if confirm:
   877                 ui.status(_('rebase completed successfully\n'))
   873                 ui.status(_('rebase completed successfully\n'))
   878                 if not ui.promptchoice(_(b'apply changes (yn)?'
   874                 if not ui.promptchoice(_(b'apply changes (yn)?'
   879                                          b'$$ &Yes $$ &No')):
   875                                          b'$$ &Yes $$ &No')):
   880                     # finish unfinished rebase
   876                     # finish unfinished rebase
   881                     rbsrt._finishrebase(backup=backup)
   877                     rbsrt._finishrebase()
   882                 else:
   878                 else:
   883                     rbsrt._prepareabortorcontinue(isabort=True, backup=False,
   879                     rbsrt._prepareabortorcontinue(isabort=True, backup=False,
   884                                                   suppwarns=True)
   880                                                   suppwarns=True)
   885                 needsabort = False
   881                 needsabort = False
   886             else:
   882             else:
   907         # search default destination in this space
   903         # search default destination in this space
   908         # used in the 'hg pull --rebase' case, see issue 5214.
   904         # used in the 'hg pull --rebase' case, see issue 5214.
   909         destspace = opts.get('_destspace')
   905         destspace = opts.get('_destspace')
   910         contf = opts.get('continue')
   906         contf = opts.get('continue')
   911         abortf = opts.get('abort')
   907         abortf = opts.get('abort')
   912         backup = opts.get('backup')
       
   913         if opts.get('interactive'):
   908         if opts.get('interactive'):
   914             try:
   909             try:
   915                 if extensions.find('histedit'):
   910                 if extensions.find('histedit'):
   916                     enablehistedit = ''
   911                     enablehistedit = ''
   917             except KeyError:
   912             except KeyError:
   938                 ui.warn(_('tool option will be ignored\n'))
   933                 ui.warn(_('tool option will be ignored\n'))
   939             if contf:
   934             if contf:
   940                 ms = mergemod.mergestate.read(repo)
   935                 ms = mergemod.mergestate.read(repo)
   941                 mergeutil.checkunresolved(ms)
   936                 mergeutil.checkunresolved(ms)
   942 
   937 
   943             retcode = rbsrt._prepareabortorcontinue(abortf, backup=backup)
   938             retcode = rbsrt._prepareabortorcontinue(abortf)
   944             if retcode is not None:
   939             if retcode is not None:
   945                 return retcode
   940                 return retcode
   946         else:
   941         else:
   947             destmap = _definedestmap(ui, repo, inmemory, destf, srcf, basef,
   942             destmap = _definedestmap(ui, repo, inmemory, destf, srcf, basef,
   948                                      revf, destspace=destspace)
   943                                      revf, destspace=destspace)
   967             if singletr and not inmemory:
   962             if singletr and not inmemory:
   968                 dsguard = dirstateguard.dirstateguard(repo, 'rebase')
   963                 dsguard = dirstateguard.dirstateguard(repo, 'rebase')
   969             with util.acceptintervention(dsguard):
   964             with util.acceptintervention(dsguard):
   970                 rbsrt._performrebase(tr)
   965                 rbsrt._performrebase(tr)
   971                 if not leaveunfinished:
   966                 if not leaveunfinished:
   972                     rbsrt._finishrebase(backup=backup)
   967                     rbsrt._finishrebase()
   973 
   968 
   974 def _definedestmap(ui, repo, inmemory, destf=None, srcf=None, basef=None,
   969 def _definedestmap(ui, repo, inmemory, destf=None, srcf=None, basef=None,
   975                    revf=None, destspace=None):
   970                    revf=None, destspace=None):
   976     """use revisions argument to define destmap {srcrev: destrev}"""
   971     """use revisions argument to define destmap {srcrev: destrev}"""
   977     if revf is None:
   972     if revf is None: