diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -32,6 +32,7 @@ from . import ( logcmdutil, match as matchmod, merge as mergemod, + mergeutil, obsolete, patch, pathutil, @@ -2357,6 +2358,11 @@ def amend(ui, repo, old, extra, pats, op if subs: subrepoutil.writestate(repo, newsubstate) + # avoid cycle (TODO: should be removed in default branch) + from . import merge as mergemod + ms = mergemod.mergestate.read(repo) + mergeutil.checkunresolved(ms) + filestoamend = set(f for f in wctx.files() if matcher(f)) changes = (len(filestoamend) > 0) diff --git a/mercurial/hgweb/hgwebdir_mod.py b/mercurial/hgweb/hgwebdir_mod.py --- a/mercurial/hgweb/hgwebdir_mod.py +++ b/mercurial/hgweb/hgwebdir_mod.py @@ -8,6 +8,7 @@ from __future__ import absolute_import +import gc import os import time @@ -357,8 +358,18 @@ class hgwebdir(object): def run_wsgi(self, req, res): profile = self.ui.configbool('profiling', 'enabled') with profiling.profile(self.ui, enabled=profile): - for r in self._runwsgi(req, res): - yield r + try: + for r in self._runwsgi(req, res): + yield r + finally: + # There are known cycles in localrepository that prevent + # those objects (and tons of held references) from being + # collected through normal refcounting. We mitigate those + # leaks by performing an explicit GC on every request. + # TODO remove this once leaks are fixed. + # TODO only run this on requests that create localrepository + # instances instead of every request. + gc.collect() def _runwsgi(self, req, res): try: diff --git a/tests/test-commit-amend.t b/tests/test-commit-amend.t --- a/tests/test-commit-amend.t +++ b/tests/test-commit-amend.t @@ -415,6 +415,23 @@ Refuse to amend during a merge: [255] $ hg ci -m 'merge' +Refuse to amend if there is a merge conflict (issue5805): + + $ hg up -q foo + $ echo c > a + $ hg up default -t :fail + 0 files updated, 0 files merged, 0 files removed, 1 files unresolved + use 'hg resolve' to retry unresolved file merges + [1] + $ hg resolve -l + U a + + $ hg ci --amend + abort: unresolved merge conflicts (see 'hg help resolve') + [255] + + $ hg up -qC . + Follow copies/renames: $ hg mv b c