Mercurial > hg
view tests/test-walkrepo.py @ 45545:e5e1285b6f6f
largefiles: prevent in-memory merge instead of switching to on-disk
I enabled in-memory merge by default while testing some changes. I
spent quite some time troubleshooting why largefiles was still
creating an on-disk mergestate. Then I found out that it ignores the
callers `wc` argument to `mergemod._update()` and always uses on-disk
merge. This patch changes that so we raise an error if largefiles is
used with in-memory merge. That way we'll notice if in-memory merge is
used with largefiles instead of silently replacing ignoring the
`overlayworkingctx` instance and updating the working copy instead.
I felt a little bad that this would break things more for users with
both largefiles and in-memory rebase enabled. So I also added a
higher-level override to make sure that largefiles disables in-memory
rebase. It turns out that that fixes `run-tests.py -k largefiles
--extra-config-opt rebase.experimental.inmemory=1`.
Differential Revision: https://phab.mercurial-scm.org/D9069
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Tue, 22 Sep 2020 23:18:37 -0700 |
parents | 2372284d9457 |
children | 6000f5b25c9b |
line wrap: on
line source
from __future__ import absolute_import, print_function import os from mercurial import ( hg, scmutil, ui as uimod, util, ) chdir = os.chdir mkdir = os.mkdir pjoin = os.path.join walkrepos = scmutil.walkrepos checklink = util.checklink u = uimod.ui.load() sym = checklink(b'.') hg.repository(u, b'top1', create=1) mkdir(b'subdir') chdir(b'subdir') hg.repository(u, b'sub1', create=1) mkdir(b'subsubdir') chdir(b'subsubdir') hg.repository(u, b'subsub1', create=1) chdir(os.path.pardir) if sym: os.symlink(os.path.pardir, b'circle') os.symlink(pjoin(b'subsubdir', b'subsub1'), b'subsub1') def runtest(): reposet = frozenset(walkrepos(b'.', followsym=True)) if sym and (len(reposet) != 3): print("reposet = %r" % (reposet,)) print( ( "Found %d repositories when I should have found 3" % (len(reposet),) ) ) if (not sym) and (len(reposet) != 2): print("reposet = %r" % (reposet,)) print( ( "Found %d repositories when I should have found 2" % (len(reposet),) ) ) sub1set = frozenset( (pjoin(b'.', b'sub1'), pjoin(b'.', b'circle', b'subdir', b'sub1')) ) if len(sub1set & reposet) != 1: print("sub1set = %r" % (sub1set,)) print("reposet = %r" % (reposet,)) print("sub1set and reposet should have exactly one path in common.") sub2set = frozenset( (pjoin(b'.', b'subsub1'), pjoin(b'.', b'subsubdir', b'subsub1')) ) if len(sub2set & reposet) != 1: print("sub2set = %r" % (sub2set,)) print("reposet = %r" % (reposet,)) print("sub2set and reposet should have exactly one path in common.") sub3 = pjoin(b'.', b'circle', b'top1') if sym and sub3 not in reposet: print("reposet = %r" % (reposet,)) print("Symbolic links are supported and %s is not in reposet" % (sub3,)) runtest() if sym: # Simulate not having symlinks. del os.path.samestat sym = False runtest()