diff --git a/hgext/absorb.py b/hgext/absorb.py --- a/hgext/absorb.py +++ b/hgext/absorb.py @@ -299,7 +299,7 @@ class filefixupstate: 4. read results from "finalcontents", or call getfinalcontent """ - def __init__(self, fctxs, path, ui=None, opts=None): + def __init__(self, fctxs, path, ui=None, **opts): """([fctx], ui or None) -> None fctxs should be linear, and sorted by topo order - oldest first. @@ -308,7 +308,7 @@ class filefixupstate: self.fctxs = fctxs self.path = path self.ui = ui or nullui() - self.opts = opts or {} + self.opts = opts # following fields are built from fctxs. they exist for perf reason self.contents = [f.data() for f in fctxs] @@ -375,7 +375,7 @@ class filefixupstate: % (short(self.fctxs[idx].node()), a1, a2, len(blines)) ) self.linelog.replacelines(rev, a1, a2, b1, b2) - if self.opts.get(b'edit_lines', False): + if self.opts.get('edit_lines', False): self.finalcontents = self._checkoutlinelogwithedits() else: self.finalcontents = self._checkoutlinelog() @@ -668,7 +668,7 @@ class fixupstate: 4. call commit, to commit changes to hg database """ - def __init__(self, stack, ui=None, opts=None): + def __init__(self, stack, ui=None, **opts): """([ctx], ui or None) -> None stack: should be linear, and sorted by topo order - oldest first. @@ -676,7 +676,7 @@ class fixupstate: """ assert stack self.ui = ui or nullui() - self.opts = opts or {} + self.opts = opts self.stack = stack self.repo = stack[-1].repo().unfiltered() @@ -696,7 +696,7 @@ class fixupstate: self.paths = [] # but if --edit-lines is used, the user may want to edit files # even if they are not modified - editopt = self.opts.get(b'edit_lines') + editopt = self.opts.get('edit_lines') if not self.status.modified and editopt and match: interestingpaths = match.files() else: @@ -720,7 +720,7 @@ class fixupstate: continue seenfctxs.update(fctxs[1:]) self.fctxmap[path] = ctx2fctx - fstate = filefixupstate(fctxs, path, ui=self.ui, opts=self.opts) + fstate = filefixupstate(fctxs, path, ui=self.ui, **self.opts) if fm is not None: fm.startitem() fm.plain(b'showing changes for ') @@ -1009,7 +1009,7 @@ def overlaydiffcontext(ctx, chunks): return overlaycontext(memworkingcopy, ctx) -def absorb(ui, repo, stack=None, targetctx=None, pats=None, opts=None): +def absorb(ui, repo, stack=None, targetctx=None, pats=None, **opts): """pick fixup chunks from targetctx, apply them to stack. if targetctx is None, the working copy context will be used. @@ -1036,22 +1036,21 @@ def absorb(ui, repo, stack=None, targetc targetctx = repo[None] if pats is None: pats = () - if opts is None: - opts = {} - state = fixupstate(stack, ui=ui, opts=opts) - matcher = scmutil.match(targetctx, pats, opts) - if opts.get(b'interactive'): + + state = fixupstate(stack, ui=ui, **opts) + matcher = scmutil.match(targetctx, pats, pycompat.byteskwargs(opts)) + if opts.get('interactive'): diff = patch.diff(repo, stack[-1].node(), targetctx.node(), matcher) origchunks = patch.parsepatch(diff) chunks = cmdutil.recordfilter(ui, origchunks, matcher)[0] targetctx = overlaydiffcontext(stack[-1], chunks) - if opts.get(b'edit_lines'): + if opts.get('edit_lines'): # If we're going to open the editor, don't ask the user to confirm # first - opts[b'apply_changes'] = True + opts['apply_changes'] = True fm = None - if opts.get(b'print_changes') or not opts.get(b'apply_changes'): - fm = ui.formatter(b'absorb', opts) + if opts.get('print_changes') or not opts.get('apply_changes'): + fm = ui.formatter(b'absorb', pycompat.byteskwargs(opts)) state.diffwith(targetctx, matcher, fm) if fm is not None: fm.startitem() @@ -1074,9 +1073,9 @@ def absorb(ui, repo, stack=None, targetc label=b'absorb.description', ) fm.end() - if not opts.get(b'dry_run'): + if not opts.get('dry_run'): if ( - not opts.get(b'apply_changes') + not opts.get('apply_changes') and state.ctxaffected and ui.promptchoice( b"apply changes (y/N)? $$ &Yes $$ &No", default=1 @@ -1154,12 +1153,10 @@ def absorbcmd(ui, repo, *pats, **opts): Returns 0 on success, 1 if all chunks were ignored and nothing amended. """ - opts = pycompat.byteskwargs(opts) - with repo.wlock(), repo.lock(): - if not opts[b'dry_run']: + if not opts['dry_run']: cmdutil.checkunfinished(repo) - state = absorb(ui, repo, pats=pats, opts=opts) + state = absorb(ui, repo, pats=pats, **opts) if sum(s[0] for s in state.chunkstats.values()) == 0: return 1