comparison hgext/rebase.py @ 47460:c9cedb546262

rebase: use str-keyed opts in remaining places Differential Revision: https://phab.mercurial-scm.org/D10892
author Martin von Zweigbergk <martinvonz@google.com>
date Mon, 21 Jun 2021 10:01:55 -0700
parents de54d11040e7
children 0044a7ad9f2f
comparison
equal deleted inserted replaced
47459:de54d11040e7 47460:c9cedb546262
188 self.state = {} 188 self.state = {}
189 self.activebookmark = None 189 self.activebookmark = None
190 self.destmap = {} 190 self.destmap = {}
191 self.skipped = set() 191 self.skipped = set()
192 192
193 self.collapsef = opts.get(b'collapse', False) 193 self.collapsef = opts.get('collapse', False)
194 self.collapsemsg = cmdutil.logmessage(ui, opts) 194 self.collapsemsg = cmdutil.logmessage(ui, pycompat.byteskwargs(opts))
195 self.date = opts.get(b'date', None) 195 self.date = opts.get('date', None)
196 196
197 e = opts.get(b'extrafn') # internal, used by e.g. hgsubversion 197 e = opts.get('extrafn') # internal, used by e.g. hgsubversion
198 self.extrafns = [_savegraft] 198 self.extrafns = [_savegraft]
199 if e: 199 if e:
200 self.extrafns = [e] 200 self.extrafns = [e]
201 201
202 self.backupf = ui.configbool(b'rewrite', b'backup-bundle') 202 self.backupf = ui.configbool(b'rewrite', b'backup-bundle')
203 self.keepf = opts.get(b'keep', False) 203 self.keepf = opts.get('keep', False)
204 self.keepbranchesf = opts.get(b'keepbranches', False) 204 self.keepbranchesf = opts.get('keepbranches', False)
205 self.skipemptysuccessorf = rewriteutil.skip_empty_successor( 205 self.skipemptysuccessorf = rewriteutil.skip_empty_successor(
206 repo.ui, b'rebase' 206 repo.ui, b'rebase'
207 ) 207 )
208 self.obsolete_with_successor_in_destination = {} 208 self.obsolete_with_successor_in_destination = {}
209 self.obsolete_with_successor_in_rebase_set = set() 209 self.obsolete_with_successor_in_rebase_set = set()
628 ) 628 )
629 if self.resume and self.wctx.p1().rev() == p1: 629 if self.resume and self.wctx.p1().rev() == p1:
630 repo.ui.debug(b'resuming interrupted rebase\n') 630 repo.ui.debug(b'resuming interrupted rebase\n')
631 self.resume = False 631 self.resume = False
632 else: 632 else:
633 overrides = {(b'ui', b'forcemerge'): opts.get(b'tool', b'')} 633 overrides = {(b'ui', b'forcemerge'): opts.get('tool', b'')}
634 with ui.configoverride(overrides, b'rebase'): 634 with ui.configoverride(overrides, b'rebase'):
635 try: 635 try:
636 rebasenode( 636 rebasenode(
637 repo, 637 repo,
638 rev, 638 rev,
675 wctx=self.wctx, 675 wctx=self.wctx,
676 ) 676 )
677 if not self.collapsef: 677 if not self.collapsef:
678 merging = p2 != nullrev 678 merging = p2 != nullrev
679 editform = cmdutil.mergeeditform(merging, b'rebase') 679 editform = cmdutil.mergeeditform(merging, b'rebase')
680 editor = cmdutil.getcommiteditor( 680 editor = cmdutil.getcommiteditor(editform=editform, **opts)
681 editform=editform, **pycompat.strkwargs(opts)
682 )
683 # We need to set parents again here just in case we're continuing 681 # We need to set parents again here just in case we're continuing
684 # a rebase started with an old hg version (before 9c9cfecd4600), 682 # a rebase started with an old hg version (before 9c9cfecd4600),
685 # because those old versions would have left us with two dirstate 683 # because those old versions would have left us with two dirstate
686 # parents, and we don't want to create a merge commit here (unless 684 # parents, and we don't want to create a merge commit here (unless
687 # we're rebasing a merge commit). 685 # we're rebasing a merge commit).
725 # case and realize that the commit was in progress. 723 # case and realize that the commit was in progress.
726 self.storestatus() 724 self.storestatus()
727 725
728 def _finishrebase(self): 726 def _finishrebase(self):
729 repo, ui, opts = self.repo, self.ui, self.opts 727 repo, ui, opts = self.repo, self.ui, self.opts
730 fm = ui.formatter(b'rebase', opts) 728 fm = ui.formatter(b'rebase', pycompat.byteskwargs(opts))
731 fm.startitem() 729 fm.startitem()
732 if self.collapsef: 730 if self.collapsef:
733 p1, p2, _base = defineparents( 731 p1, p2, _base = defineparents(
734 repo, 732 repo,
735 min(self.state), 733 min(self.state),
736 self.destmap, 734 self.destmap,
737 self.state, 735 self.state,
738 self.skipped, 736 self.skipped,
739 self.obsolete_with_successor_in_destination, 737 self.obsolete_with_successor_in_destination,
740 ) 738 )
741 editopt = opts.get(b'edit') 739 editopt = opts.get('edit')
742 editform = b'rebase.collapse' 740 editform = b'rebase.collapse'
743 if self.collapsemsg: 741 if self.collapsemsg:
744 commitmsg = self.collapsemsg 742 commitmsg = self.collapsemsg
745 else: 743 else:
746 commitmsg = b'Collapsed revision' 744 commitmsg = b'Collapsed revision'
760 newrev = repo[newnode].rev() 758 newrev = repo[newnode].rev()
761 for oldrev in self.state: 759 for oldrev in self.state:
762 self.state[oldrev] = newrev 760 self.state[oldrev] = newrev
763 761
764 if b'qtip' in repo.tags(): 762 if b'qtip' in repo.tags():
765 updatemq(repo, self.state, self.skipped, **pycompat.strkwargs(opts)) 763 updatemq(repo, self.state, self.skipped, **opts)
766 764
767 # restore original working directory 765 # restore original working directory
768 # (we do this before stripping) 766 # (we do this before stripping)
769 newwd = self.state.get(self.originalwd, self.originalwd) 767 newwd = self.state.get(self.originalwd, self.originalwd)
770 if newwd < 0: 768 if newwd < 0:
1089 1087
1090 userrevs = list(repo.revs(opts.get('auto_orphans'))) 1088 userrevs = list(repo.revs(opts.get('auto_orphans')))
1091 opts['rev'] = [revsetlang.formatspec(b'%ld and orphan()', userrevs)] 1089 opts['rev'] = [revsetlang.formatspec(b'%ld and orphan()', userrevs)]
1092 opts['dest'] = b'_destautoorphanrebase(SRC)' 1090 opts['dest'] = b'_destautoorphanrebase(SRC)'
1093 1091
1094 opts = pycompat.byteskwargs(opts) 1092 if opts.get('dry_run') or opts.get('confirm'):
1095 if opts.get(b'dry_run') or opts.get(b'confirm'):
1096 return _dryrunrebase(ui, repo, action, opts) 1093 return _dryrunrebase(ui, repo, action, opts)
1097 elif action == 'stop': 1094 elif action == 'stop':
1098 rbsrt = rebaseruntime(repo, ui) 1095 rbsrt = rebaseruntime(repo, ui)
1099 with repo.wlock(), repo.lock(): 1096 with repo.wlock(), repo.lock():
1100 rbsrt.restorestatus() 1097 rbsrt.restorestatus()
1141 return _dorebase(ui, repo, action, opts) 1138 return _dorebase(ui, repo, action, opts)
1142 1139
1143 1140
1144 def _dryrunrebase(ui, repo, action, opts): 1141 def _dryrunrebase(ui, repo, action, opts):
1145 rbsrt = rebaseruntime(repo, ui, inmemory=True, dryrun=True, opts=opts) 1142 rbsrt = rebaseruntime(repo, ui, inmemory=True, dryrun=True, opts=opts)
1146 confirm = opts.get(b'confirm') 1143 confirm = opts.get('confirm')
1147 if confirm: 1144 if confirm:
1148 ui.status(_(b'starting in-memory rebase\n')) 1145 ui.status(_(b'starting in-memory rebase\n'))
1149 else: 1146 else:
1150 ui.status( 1147 ui.status(
1151 _(b'starting dry-run rebase; repository will not be changed\n') 1148 _(b'starting dry-run rebase; repository will not be changed\n')
1198 # no need to store backup in case of dryrun 1195 # no need to store backup in case of dryrun
1199 rbsrt._prepareabortorcontinue( 1196 rbsrt._prepareabortorcontinue(
1200 isabort=True, 1197 isabort=True,
1201 backup=False, 1198 backup=False,
1202 suppwarns=True, 1199 suppwarns=True,
1203 dryrun=opts.get(b'dry_run'), 1200 dryrun=opts.get('dry_run'),
1204 ) 1201 )
1205 1202
1206 1203
1207 def _dorebase(ui, repo, action, opts, inmemory=False): 1204 def _dorebase(ui, repo, action, opts, inmemory=False):
1208 rbsrt = rebaseruntime(repo, ui, inmemory, opts=opts) 1205 rbsrt = rebaseruntime(repo, ui, inmemory, opts=opts)
1210 1207
1211 1208
1212 def _origrebase(ui, repo, action, opts, rbsrt): 1209 def _origrebase(ui, repo, action, opts, rbsrt):
1213 assert action != 'stop' 1210 assert action != 'stop'
1214 with repo.wlock(), repo.lock(): 1211 with repo.wlock(), repo.lock():
1215 if opts.get(b'interactive'): 1212 if opts.get('interactive'):
1216 try: 1213 try:
1217 if extensions.find(b'histedit'): 1214 if extensions.find(b'histedit'):
1218 enablehistedit = b'' 1215 enablehistedit = b''
1219 except KeyError: 1216 except KeyError:
1220 enablehistedit = b" --config extensions.histedit=" 1217 enablehistedit = b" --config extensions.histedit="
1236 if action: 1233 if action:
1237 if rbsrt.collapsef: 1234 if rbsrt.collapsef:
1238 raise error.InputError( 1235 raise error.InputError(
1239 _(b'cannot use collapse with continue or abort') 1236 _(b'cannot use collapse with continue or abort')
1240 ) 1237 )
1241 if action == 'abort' and opts.get(b'tool', False): 1238 if action == 'abort' and opts.get('tool', False):
1242 ui.warn(_(b'tool option will be ignored\n')) 1239 ui.warn(_(b'tool option will be ignored\n'))
1243 if action == 'continue': 1240 if action == 'continue':
1244 ms = mergestatemod.mergestate.read(repo) 1241 ms = mergestatemod.mergestate.read(repo)
1245 mergeutil.checkunresolved(ms) 1242 mergeutil.checkunresolved(ms)
1246 1243
1248 if retcode is not None: 1245 if retcode is not None:
1249 return retcode 1246 return retcode
1250 else: 1247 else:
1251 # search default destination in this space 1248 # search default destination in this space
1252 # used in the 'hg pull --rebase' case, see issue 5214. 1249 # used in the 'hg pull --rebase' case, see issue 5214.
1253 destspace = opts.get(b'_destspace') 1250 destspace = opts.get('_destspace')
1254 destmap = _definedestmap( 1251 destmap = _definedestmap(
1255 ui, 1252 ui,
1256 repo, 1253 repo,
1257 rbsrt.inmemory, 1254 rbsrt.inmemory,
1258 opts.get(b'dest', None), 1255 opts.get('dest', None),
1259 opts.get(b'source', []), 1256 opts.get('source', []),
1260 opts.get(b'base', []), 1257 opts.get('base', []),
1261 opts.get(b'rev', []), 1258 opts.get('rev', []),
1262 destspace=destspace, 1259 destspace=destspace,
1263 ) 1260 )
1264 retcode = rbsrt._preparenewrebase(destmap) 1261 retcode = rbsrt._preparenewrebase(destmap)
1265 if retcode is not None: 1262 if retcode is not None:
1266 return retcode 1263 return retcode