hgext/rebase.py
changeset 29479 5d16ebe7b14f
parent 29478 007da66960a8
child 29551 333dd3ab8fb2
equal deleted inserted replaced
29478:007da66960a8 29479:5d16ebe7b14f
   227         self.keepf = keep
   227         self.keepf = keep
   228         self.keepbranchesf = keepbranches
   228         self.keepbranchesf = keepbranches
   229         self.external = external
   229         self.external = external
   230         self.activebookmark = activebookmark
   230         self.activebookmark = activebookmark
   231 
   231 
       
   232     def _handleskippingobsolete(self, rebaserevs, obsoleterevs, target):
       
   233         """Compute structures necessary for skipping obsolete revisions
       
   234 
       
   235         rebaserevs:     iterable of all revisions that are to be rebased
       
   236         obsoleterevs:   iterable of all obsolete revisions in rebaseset
       
   237         target:         a destination revision for the rebase operation
       
   238         """
       
   239         self.obsoletenotrebased = {}
       
   240         if not self.ui.configbool('experimental', 'rebaseskipobsolete',
       
   241                                   default=True):
       
   242             return
       
   243         rebaseset = set(rebaserevs)
       
   244         obsoleteset = set(obsoleterevs)
       
   245         self.obsoletenotrebased = _computeobsoletenotrebased(self.repo,
       
   246                                     obsoleteset, target)
       
   247         skippedset = set(self.obsoletenotrebased)
       
   248         _checkobsrebase(self.repo, self.ui, obsoleteset, rebaseset, skippedset)
       
   249 
   232     def _prepareabortorcontinue(self, isabort):
   250     def _prepareabortorcontinue(self, isabort):
   233         try:
   251         try:
   234             self.restorestatus()
   252             self.restorestatus()
   235             self.collapsemsg = restorecollapsemsg(self.repo)
   253             self.collapsemsg = restorecollapsemsg(self.repo)
   236         except error.RepoLookupError:
   254         except error.RepoLookupError:
   246                 raise error.Abort(msg, hint=hint)
   264                 raise error.Abort(msg, hint=hint)
   247         if isabort:
   265         if isabort:
   248             return abort(self.repo, self.originalwd, self.target,
   266             return abort(self.repo, self.originalwd, self.target,
   249                          self.state, activebookmark=self.activebookmark)
   267                          self.state, activebookmark=self.activebookmark)
   250 
   268 
   251         self.obsoletenotrebased = {}
   269         obsrevs = (r for r, st in self.state.items() if st == revprecursor)
   252         if self.ui.configbool('experimental', 'rebaseskipobsolete',
   270         self._handleskippingobsolete(self.state.keys(), obsrevs, self.target)
   253                               default=True):
       
   254             rebaseobsrevs = set([r for r, st in self.state.items()
       
   255                                     if st == revprecursor])
       
   256             rebasesetrevs = set(self.state.keys())
       
   257             self.obsoletenotrebased = _computeobsoletenotrebased(self.repo,
       
   258                                             rebaseobsrevs, self.target)
       
   259             rebaseobsskipped = set(self.obsoletenotrebased)
       
   260             _checkobsrebase(self.repo, self.ui, rebaseobsrevs, rebasesetrevs,
       
   261                             rebaseobsskipped)
       
   262 
   271 
   263     def _preparenewrebase(self, dest, rebaseset):
   272     def _preparenewrebase(self, dest, rebaseset):
   264         if dest is None:
   273         if dest is None:
   265             return _nothingtorebase()
   274             return _nothingtorebase()
   266 
   275 
   271             raise error.Abort(
   280             raise error.Abort(
   272                 _("can't remove original changesets with"
   281                 _("can't remove original changesets with"
   273                   " unrebased descendants"),
   282                   " unrebased descendants"),
   274                 hint=_('use --keep to keep original changesets'))
   283                 hint=_('use --keep to keep original changesets'))
   275 
   284 
   276         self.obsoletenotrebased = {}
   285         obsrevs = _filterobsoleterevs(self.repo, rebaseset)
   277         if self.ui.configbool('experimental', 'rebaseskipobsolete',
   286         self._handleskippingobsolete(rebaseset, obsrevs, dest)
   278                               default=True):
       
   279             rebasesetrevs = set(rebaseset)
       
   280             rebaseobsrevs = _filterobsoleterevs(self.repo, rebasesetrevs)
       
   281             self.obsoletenotrebased = _computeobsoletenotrebased(self.repo,
       
   282                                                             rebaseobsrevs,
       
   283                                                             dest)
       
   284             rebaseobsskipped = set(self.obsoletenotrebased)
       
   285             _checkobsrebase(self.repo, self.ui, rebaseobsrevs,
       
   286                                           rebasesetrevs,
       
   287                                           rebaseobsskipped)
       
   288 
   287 
   289         result = buildstate(self.repo, dest, rebaseset, self.collapsef,
   288         result = buildstate(self.repo, dest, rebaseset, self.collapsef,
   290                             self.obsoletenotrebased)
   289                             self.obsoletenotrebased)
   291 
   290 
   292         if not result:
   291         if not result: