diff --git a/.hgsigs b/.hgsigs --- a/.hgsigs +++ b/.hgsigs @@ -192,3 +192,4 @@ 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 diff --git a/.hgtags b/.hgtags --- a/.hgtags +++ b/.hgtags @@ -205,3 +205,4 @@ b4c82b70418022e67cc0e69b1aa3c3aa43aa1d29 84a0102c05c7852c8215ef6cf21d809927586b69 5.3rc0 e4344e463c0c888a2f437b78b5982ecdf3f6650a 5.3rc1 7f5410dfc8a64bb587d19637deb95d378fd1eb5c 5.3 +6d121acbb82e65fe4dd3c2318a1b61981b958492 5.3.1 diff --git a/hgext/histedit.py b/hgext/histedit.py --- a/hgext/histedit.py +++ b/hgext/histedit.py @@ -1645,7 +1645,7 @@ pgup/K: move patch up, pgdn/J: move patc pass -def _chistedit(ui, repo, *freeargs, **opts): +def _chistedit(ui, repo, freeargs, opts): """interactively edit changeset history via a curses interface Provides a ncurses interface to histedit. Press ? in chistedit mode @@ -1717,8 +1717,8 @@ def _chistedit(ui, repo, *freeargs, **op with repo.vfs(b'chistedit', b'w+') as fp: for r in rules: fp.write(r) - opts['commands'] = fp.name - return _texthistedit(ui, repo, *freeargs, **opts) + opts[b'commands'] = fp.name + return _texthistedit(ui, repo, freeargs, opts) except KeyboardInterrupt: pass return -1 @@ -1855,23 +1855,25 @@ def histedit(ui, repo, *freeargs, **opts for intentional "edit" command, but also for resolving unexpected conflicts). """ + opts = pycompat.byteskwargs(opts) + # kludge: _chistedit only works for starting an edit, not aborting # or continuing, so fall back to regular _texthistedit for those # operations. if ( ui.interface(b'histedit') == b'curses' - and _getgoal(pycompat.byteskwargs(opts)) == goalnew + and _getgoal(opts) == goalnew ): - return _chistedit(ui, repo, *freeargs, **opts) - return _texthistedit(ui, repo, *freeargs, **opts) - - -def _texthistedit(ui, repo, *freeargs, **opts): + return _chistedit(ui, repo, freeargs, opts) + return _texthistedit(ui, repo, freeargs, opts) + + +def _texthistedit(ui, repo, freeargs, opts): state = histeditstate(repo) with repo.wlock() as wlock, repo.lock() as lock: state.wlock = wlock state.lock = lock - _histedit(ui, repo, state, *freeargs, **opts) + _histedit(ui, repo, state, freeargs, opts) goalcontinue = b'continue' @@ -1952,8 +1954,7 @@ def _validateargs(ui, repo, state, freea ) -def _histedit(ui, repo, state, *freeargs, **opts): - opts = pycompat.byteskwargs(opts) +def _histedit(ui, repo, state, freeargs, opts): fm = ui.formatter(b'histedit', opts) fm.startitem() goal = _getgoal(opts) diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -961,7 +961,7 @@ def findcmd(cmd, table, strict=True): raise error.UnknownCommand(cmd, allcmds) -def changebranch(ui, repo, revs, label): +def changebranch(ui, repo, revs, label, opts): """ Change the branch name of given revs to label """ with repo.wlock(), repo.lock(), repo.transaction(b'branches'): @@ -979,7 +979,11 @@ def changebranch(ui, repo, revs, label): root = repo[roots.first()] rpb = {parent.branch() for parent in root.parents()} - if label not in rpb and label in repo.branchmap(): + if ( + not opts.get(b'force') + and label not in rpb + and label in repo.branchmap() + ): raise error.Abort(_(b"a branch of the same name already exists")) if repo.revs(b'obsolete() and %ld', revs): diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -1340,7 +1340,7 @@ def branch(ui, repo, label=None, **opts) scmutil.checknewlabel(repo, label, b'branch') if revs: - return cmdutil.changebranch(ui, repo, revs, label) + return cmdutil.changebranch(ui, repo, revs, label, opts) if not opts.get(b'force') and label in repo.branchmap(): if label not in [p.branch() for p in repo[None].parents()]: diff --git a/setup.py b/setup.py --- a/setup.py +++ b/setup.py @@ -665,7 +665,9 @@ class buildhgextindex(Command): # here no extension enabled, disabled() lists up everything code = ( 'import pprint; from mercurial import extensions; ' - 'pprint.pprint(extensions.disabled())' + 'ext = extensions.disabled();' + 'ext.pop("__index__", None);' + 'pprint.pprint(ext)' ) returncode, out, err = runcmd( [sys.executable, '-c', code], localhgenv() diff --git a/tests/test-amend.t b/tests/test-amend.t --- a/tests/test-amend.t +++ b/tests/test-amend.t @@ -487,7 +487,7 @@ Modifying a file while the editor is ope $ echo beta >> foo $ cat > $TESTTMP/touchy_editor.sh < sleep 1 - > echo delta >> $TESTTMP/modify-during-amend/foo + > echo delta >> "$TESTTMP/modify-during-amend/foo" > sleep 1 > echo hi > "\$1" > sleep 1 diff --git a/tests/test-branch-change.t b/tests/test-branch-change.t --- a/tests/test-branch-change.t +++ b/tests/test-branch-change.t @@ -355,6 +355,13 @@ Changing branch of a merge commit abort: a branch of the same name already exists [255] + $ hg branch -r . stable --force + changed branch on 1 changesets + $ hg branches + stable 34:d1c2addda4a2 + jkl 29:6bc1c6c2c9da (inactive) + ghi 28:2f1019bd29d2 (inactive) + Changing branch on public changeset $ hg phase -r . -p diff --git a/tests/test-remotefilelog-prefetch.t b/tests/test-remotefilelog-prefetch.t --- a/tests/test-remotefilelog-prefetch.t +++ b/tests/test-remotefilelog-prefetch.t @@ -233,9 +233,18 @@ z2: not copying - file is not managed abort: no files to copy [255] + $ find $CACHEDIR -type f | sort +.. The following output line about files fetches is globed because it is +.. flaky, the core the test is checked when checking the cache dir, so +.. hopefully this flakyness is not hiding any actual bug. $ hg revert -a -r 1 || true - 3 files fetched over 1 fetches - (3 misses, 0.00% hit ratio) over * (glob) + ? files fetched over 1 fetches - (? misses, 0.00% hit ratio) over * (glob) abort: z2@109c3a557a73: not found in manifest! (?) + $ find $CACHEDIR -type f | sort + $TESTTMP/hgcache/master/11/f6ad8ec52a2984abaafd7c3b516503785c2072/ef95c5376f34698742fe34f315fd82136f8f68c0 + $TESTTMP/hgcache/master/39/5df8f7c51f007019cb30201c49e884b46b92fa/69a1b67522704ec122181c0890bd16e9d3e7516a + $TESTTMP/hgcache/master/95/cb0bfd2977c761298d9624e4b4d4c72a39974a/076f5e2225b3ff0400b98c92aa6cdf403ee24cca + $TESTTMP/hgcache/repos # warning when we have excess remotefilelog fetching