diff --git a/.hgsigs b/.hgsigs --- a/.hgsigs +++ b/.hgsigs @@ -221,3 +221,4 @@ 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 diff --git a/.hgtags b/.hgtags --- a/.hgtags +++ b/.hgtags @@ -234,3 +234,4 @@ 6ee0244fc1cf889ae543d2ce0ec45201ae0be6e1 a44bb185f6bdbecc754996d8386722e2f0123b0a 6.0rc0 5d08b289e2e526259d7d5ea32b70fe76d5b327d7 6.0 799fdf4cca80cb9ae40537a90995e6bd163ebc0b 6.0.1 +75676122c2bf7594ac732b7388db4c74c648b365 6.0.2 diff --git a/hgext/uncommit.py b/hgext/uncommit.py --- a/hgext/uncommit.py +++ b/hgext/uncommit.py @@ -273,6 +273,8 @@ def unamend(ui, repo, **opts): curctx = repo[b'.'] rewriteutil.precheck(repo, [curctx.rev()], b'unamend') + if len(curctx.parents()) > 1: + raise error.InputError(_(b"cannot unamend merge changeset")) # identify the commit to which to unamend markers = list(predecessormarkers(curctx)) diff --git a/mercurial/branchmap.py b/mercurial/branchmap.py --- a/mercurial/branchmap.py +++ b/mercurial/branchmap.py @@ -149,6 +149,13 @@ class BranchMapCache(object): def clear(self): self._per_filter.clear() + def write_delayed(self, repo): + unfi = repo.unfiltered() + for filtername, cache in self._per_filter.items(): + if cache._delayed: + repo = unfi.filtered(filtername) + cache.write(repo) + def _unknownnode(node): """raises ValueError when branchcache found a node which does not exists""" @@ -199,6 +206,7 @@ class branchcache(object): has a given node or not. If it's not provided, we assume that every node we have exists in changelog""" self._repo = repo + self._delayed = False if tipnode is None: self.tipnode = repo.nullid else: @@ -403,6 +411,13 @@ class branchcache(object): ) def write(self, repo): + tr = repo.currenttransaction() + if not getattr(tr, 'finalized', True): + # Avoid premature writing. + # + # (The cache warming setup by localrepo will update the file later.) + self._delayed = True + return try: f = repo.cachevfs(self._filename(repo), b"w", atomictemp=True) cachekey = [hex(self.tipnode), b'%d' % self.tiprev] @@ -427,6 +442,7 @@ class branchcache(object): len(self._entries), nodecount, ) + self._delayed = False except (IOError, OSError, error.Abort) as inst: # Abort may be raised by read only opener, so log and continue repo.ui.debug( diff --git a/mercurial/configitems.py b/mercurial/configitems.py --- a/mercurial/configitems.py +++ b/mercurial/configitems.py @@ -1277,9 +1277,10 @@ coreconfigitem( # Enable this dirstate format *when creating a new repository*. # Which format to use for existing repos is controlled by .hg/requires b'format', - b'exp-rc-dirstate-v2', + b'use-dirstate-v2', default=False, experimental=True, + alias=[(b'format', b'exp-rc-dirstate-v2')], ) coreconfigitem( b'format', @@ -1851,7 +1852,7 @@ coreconfigitem( default=b'skip', experimental=True, ) -# experimental as long as format.exp-rc-dirstate-v2 is. +# experimental as long as format.use-dirstate-v2 is. coreconfigitem( b'storage', b'dirstate-v2.slow-path', diff --git a/mercurial/helptext/config.txt b/mercurial/helptext/config.txt --- a/mercurial/helptext/config.txt +++ b/mercurial/helptext/config.txt @@ -915,7 +915,7 @@ https://www.mercurial-scm.org/wiki/Missi Enabled by default. -``exp-rc-dirstate-v2`` +``use-dirstate-v2`` Enable or disable the experimental "dirstate-v2" feature. The dirstate functionality is shared by all commands interacting with the working copy. The new version is more robust, faster and stores more information. @@ -939,7 +939,7 @@ https://www.mercurial-scm.org/wiki/Missi $ hg debugupgraderepo \ --run \ - --config format.exp-rc-dirstate-v2=False \ + --config format.use-dirstate-v2=False \ --config storage.dirstate-v2.slow-path=allow For a more comprehensive guide, see :hg:`help internals.dirstate-v2`. diff --git a/mercurial/helptext/internals/dirstate-v2.txt b/mercurial/helptext/internals/dirstate-v2.txt --- a/mercurial/helptext/internals/dirstate-v2.txt +++ b/mercurial/helptext/internals/dirstate-v2.txt @@ -37,12 +37,12 @@ Enabling `dirstate-v2` for new local rep ------------------------------------------------ When creating a new local repository such as with `hg init` or `hg clone`, -the `exp-rc-dirstate-v2` boolean in the `format` configuration section +the `use-dirstate-v2` boolean in the `format` configuration section controls whether to use this file format. This is disabled by default as of this writing. To enable it for a single repository, run for example:: - $ hg init my-project --config format.exp-rc-dirstate-v2=1 + $ hg init my-project --config format.use-dirstate-v2=1 Checking the format of an existing local repository -------------------------------------------------- @@ -63,15 +63,15 @@ Upgrading or downgrading an existing loc The `debugupgrade` command does various upgrades or downgrades on a local repository based on the current Mercurial version and on configuration. -The same `format.exp-rc-dirstate-v2` configuration is used again. +The same `format.use-dirstate-v2` configuration is used again. Example to upgrade:: - $ hg debugupgrade --config format.exp-rc-dirstate-v2=1 + $ hg debugupgrade --config format.use-dirstate-v2=1 Example to downgrade to `dirstate-v1`:: - $ hg debugupgrade --config format.exp-rc-dirstate-v2=0 + $ hg debugupgrade --config format.use-dirstate-v2=0 Both of this commands do nothing but print a list of proposed changes, which may include changes unrelated to the dirstate. diff --git a/mercurial/helptext/rust.txt b/mercurial/helptext/rust.txt --- a/mercurial/helptext/rust.txt +++ b/mercurial/helptext/rust.txt @@ -15,10 +15,11 @@ Features ======== The following operations are sped up when using Rust: + - discovery of differences between repositories (pull/push) - nodemap (see :hg:`help config.format.use-persistent-nodemap`) - all commands using the dirstate (status, commit, diff, add, update, etc.) - - dirstate-v2 (see :hg:`help config.format.exp-rc-dirstate-v2`) + - dirstate-v2 (see :hg:`help config.format.use-dirstate-v2`) - iteration over ancestors in a graph More features are in the works, and improvements on the above listed are still diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -1190,7 +1190,7 @@ def resolverevlogstorevfsoptions(ui, req b"fast implementation." ) hint = _( - b"check `hg help config.format.exp-rc-dirstate-v2` " b"for details" + b"check `hg help config.format.use-dirstate-v2` " b"for details" ) if not dirstate.HAS_FAST_DIRSTATE_V2: if slow_path == b'warn': @@ -2824,6 +2824,8 @@ class localrepository(object): self.ui.debug(b'updating the branch cache\n') self.filtered(b'served').branchmap() self.filtered(b'served.hidden').branchmap() + # flush all possibly delayed write. + self._branchcaches.write_delayed(self) if repository.CACHE_CHANGELOG_CACHE in caches: self.changelog.update_caches(transaction=tr) @@ -3618,9 +3620,9 @@ def newreporequirements(ui, createopts): if ui.configbool(b'format', b'sparse-revlog'): requirements.add(requirementsmod.SPARSEREVLOG_REQUIREMENT) - # experimental config: format.exp-rc-dirstate-v2 + # experimental config: format.use-dirstate-v2 # Keep this logic in sync with `has_dirstate_v2()` in `tests/hghave.py` - if ui.configbool(b'format', b'exp-rc-dirstate-v2'): + if ui.configbool(b'format', b'use-dirstate-v2'): requirements.add(requirementsmod.DIRSTATE_V2_REQUIREMENT) # experimental config: format.exp-use-copies-side-data-changeset diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -1971,7 +1971,7 @@ class revlog(object): raise error.RevlogError( _(b"%s not found in the transaction") % self._indexfile ) - trindex = 0 + trindex = None tr.add(self._datafile, 0) existing_handles = False @@ -1994,10 +1994,17 @@ class revlog(object): with self._indexfp() as read_ifh: for r in self: new_dfh.write(self._getsegmentforrevs(r, r, df=read_ifh)[1]) - if troffset <= self.start(r) + r * self.index.entry_size: + if ( + trindex is None + and troffset + <= self.start(r) + r * self.index.entry_size + ): trindex = r new_dfh.flush() + if trindex is None: + trindex = 0 + with self.__index_new_fp() as fp: self._format_flags &= ~FLAG_INLINE_DATA self._inline = False diff --git a/mercurial/transaction.py b/mercurial/transaction.py --- a/mercurial/transaction.py +++ b/mercurial/transaction.py @@ -229,6 +229,10 @@ class transaction(util.transactional): if self._journal: self._abort() + @property + def finalized(self): + return self._finalizecallback is None + @active def startgroup(self): """delay registration of file entry diff --git a/relnotes/6.0 b/relnotes/6.0 --- a/relnotes/6.0 +++ b/relnotes/6.0 @@ -1,3 +1,25 @@ += Mercurial 6.0.2 = + + * Fix `hg incoming` and `hg outgoing` with remote subrepos on Windows + * Fix Rust build on MacOS + * Fix a (15 year old?) bug where some data loss could happen in a very tight race window (f38ae2d7390e + ccd9cb73125c) + * Remove support for running `hg unamend` on merge changesets at it was never actually implemented + * Fix stream-clone requirements filtering which caused some stream-clones to be unusable from an older version of Mercurial + * Rename dirstate-v2 configuration name from `exp-rc-dirstate-v2` to `use-dirstate-v2`. This was overlooked in `6.0`, the old name will be kept as an alias for compatibility. + * Fix a bug where the branchmap could point to uncommitted data + += Mercurial 6.0.1 = + + * Improve documentation around Rust (see hg help rust) and rust-related actions + * Improve upgrade/downgrade edge cases for dirstate-v2 + * Make the test suite nicer to big-endian platforms + * Make the test suite nicer to NetBSD + * Fix a performance regression on fsmonitor (issue6612) + * Add fixes for Python 3.10 + * Fix a deadlock when using sparse and share-safe together + += Mercurial 6.0 = + == New Features == * `debugrebuildfncache` now has an option to rebuild only the index files * a new `bookmarks.mode` path option have been introduced to control the diff --git a/tests/test-basic.t b/tests/test-basic.t --- a/tests/test-basic.t +++ b/tests/test-basic.t @@ -6,7 +6,7 @@ Create a repository: devel.all-warnings=true devel.default-date=0 0 extensions.fsmonitor= (fsmonitor !) - format.exp-rc-dirstate-v2=1 (dirstate-v2 !) + format.use-dirstate-v2=1 (dirstate-v2 !) largefiles.usercache=$TESTTMP/.cache/largefiles lfs.usercache=$TESTTMP/.cache/lfs ui.slash=True diff --git a/tests/test-branches.t b/tests/test-branches.t --- a/tests/test-branches.t +++ b/tests/test-branches.t @@ -1242,3 +1242,99 @@ Intermediary parents are on different br C 3:4a546028fa8f (inactive) B 1:0bc7d348d965 (inactive) $ cd .. + +Check that the cache are not written too early +---------------------------------------------- + + $ hg log -R branchmap-testing1 -G + o changeset: 3:71ca9a6d524e + |\ branch: A + | | tag: tip + | | parent: 2:a3b807b3ff0b + | | parent: 1:99ba08759bc7 + | | user: debugbuilddag + | | date: Thu Jan 01 00:00:03 1970 +0000 + | | summary: r3 + | | + | o changeset: 2:a3b807b3ff0b + | | branch: A + | | parent: 0:2ab8003a1750 + | | user: debugbuilddag + | | date: Thu Jan 01 00:00:02 1970 +0000 + | | summary: r2 + | | + o | changeset: 1:99ba08759bc7 + |/ branch: A + | tag: p1 + | user: debugbuilddag + | date: Thu Jan 01 00:00:01 1970 +0000 + | summary: r1 + | + o changeset: 0:2ab8003a1750 + branch: A + tag: base + user: debugbuilddag + date: Thu Jan 01 00:00:00 1970 +0000 + summary: r0 + + $ hg bundle -R branchmap-testing1 --base 1 bundle.hg --rev 'head()' + 2 changesets found + +Unbundling revision should warm the served cache + + $ hg clone branchmap-testing1 --rev 1 branchmap-update-01 + adding changesets + adding manifests + adding file changes + added 2 changesets with 0 changes to 0 files + new changesets 2ab8003a1750:99ba08759bc7 + updating to branch A + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ cat branchmap-update-01/.hg/cache/branch2-served + 99ba08759bc7f6fdbe5304e83d0387f35c082479 1 + 99ba08759bc7f6fdbe5304e83d0387f35c082479 o A + $ hg -R branchmap-update-01 unbundle bundle.hg + adding changesets + adding manifests + adding file changes + added 2 changesets with 0 changes to 0 files + new changesets a3b807b3ff0b:71ca9a6d524e (2 drafts) + (run 'hg update' to get a working copy) + $ cat branchmap-update-01/.hg/cache/branch2-served + 71ca9a6d524ed3c2a215119b2086ac3b8c4c8286 3 + 71ca9a6d524ed3c2a215119b2086ac3b8c4c8286 o A + +aborted Unbundle should not update the on disk cache + + $ cat >> simplehook.py << EOF + > import sys + > from mercurial import node + > from mercurial import branchmap + > def hook(ui, repo, *args, **kwargs): + > s = repo.filtered(b"served") + > s.branchmap() + > return 1 + > EOF + $ hg clone branchmap-testing1 --rev 1 branchmap-update-02 + adding changesets + adding manifests + adding file changes + added 2 changesets with 0 changes to 0 files + new changesets 2ab8003a1750:99ba08759bc7 + updating to branch A + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + + $ cat branchmap-update-02/.hg/cache/branch2-served + 99ba08759bc7f6fdbe5304e83d0387f35c082479 1 + 99ba08759bc7f6fdbe5304e83d0387f35c082479 o A + $ hg -R branchmap-update-02 unbundle bundle.hg --config "hooks.pretxnclose=python:$TESTTMP/simplehook.py:hook" + adding changesets + adding manifests + adding file changes + transaction abort! + rollback completed + abort: pretxnclose hook failed + [40] + $ cat branchmap-update-02/.hg/cache/branch2-served + 99ba08759bc7f6fdbe5304e83d0387f35c082479 1 + 99ba08759bc7f6fdbe5304e83d0387f35c082479 o A diff --git a/tests/test-commandserver.t b/tests/test-commandserver.t --- a/tests/test-commandserver.t +++ b/tests/test-commandserver.t @@ -218,7 +218,7 @@ check that local configs for the cached devel.all-warnings=true devel.default-date=0 0 extensions.fsmonitor= (fsmonitor !) - format.exp-rc-dirstate-v2=1 (dirstate-v2 !) + format.use-dirstate-v2=1 (dirstate-v2 !) largefiles.usercache=$TESTTMP/.cache/largefiles lfs.usercache=$TESTTMP/.cache/lfs ui.slash=True diff --git a/tests/test-dirstate-race.t b/tests/test-dirstate-race.t --- a/tests/test-dirstate-race.t +++ b/tests/test-dirstate-race.t @@ -3,7 +3,7 @@ #if dirstate-v2 $ cat >> $HGRCPATH << EOF > [format] - > exp-rc-dirstate-v2=1 + > use-dirstate-v2=1 > [storage] > dirstate-v2.slow-path=allow > EOF diff --git a/tests/test-dirstate-race2.t b/tests/test-dirstate-race2.t --- a/tests/test-dirstate-race2.t +++ b/tests/test-dirstate-race2.t @@ -3,7 +3,7 @@ #if dirstate-v2 $ cat >> $HGRCPATH << EOF > [format] - > exp-rc-dirstate-v2=1 + > use-dirstate-v2=1 > [storage] > dirstate-v2.slow-path=allow > EOF diff --git a/tests/test-dirstate.t b/tests/test-dirstate.t --- a/tests/test-dirstate.t +++ b/tests/test-dirstate.t @@ -3,7 +3,7 @@ #if dirstate-v2 $ cat >> $HGRCPATH << EOF > [format] - > exp-rc-dirstate-v2=1 + > use-dirstate-v2=1 > [storage] > dirstate-v2.slow-path=allow > EOF diff --git a/tests/test-help.t b/tests/test-help.t --- a/tests/test-help.t +++ b/tests/test-help.t @@ -1597,7 +1597,7 @@ Separate sections from subsections "usefncache" - "exp-rc-dirstate-v2" + "use-dirstate-v2" "use-persistent-nodemap" diff --git a/tests/test-hgignore.t b/tests/test-hgignore.t --- a/tests/test-hgignore.t +++ b/tests/test-hgignore.t @@ -3,7 +3,7 @@ #if dirstate-v2 $ cat >> $HGRCPATH << EOF > [format] - > exp-rc-dirstate-v2=1 + > use-dirstate-v2=1 > [storage] > dirstate-v2.slow-path=allow > EOF diff --git a/tests/test-permissions.t b/tests/test-permissions.t --- a/tests/test-permissions.t +++ b/tests/test-permissions.t @@ -5,7 +5,7 @@ #if dirstate-v2 $ cat >> $HGRCPATH << EOF > [format] - > exp-rc-dirstate-v2=1 + > use-dirstate-v2=1 > [storage] > dirstate-v2.slow-path=allow > EOF diff --git a/tests/test-persistent-nodemap.t b/tests/test-persistent-nodemap.t --- a/tests/test-persistent-nodemap.t +++ b/tests/test-persistent-nodemap.t @@ -800,7 +800,7 @@ downgrading requirements preserved: dotencode, fncache, generaldelta, revlogv1, share-safe, sparserevlog, store (no-zstd no-dirstate-v2 !) preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, revlogv1, share-safe, sparserevlog, store (zstd no-dirstate-v2 !) - preserved: dotencode, exp-rc-dirstate-v2, fncache, generaldelta, revlog-compression-zstd, revlogv1, share-safe, sparserevlog, store (zstd dirstate-v2 !) + preserved: dotencode, use-dirstate-v2, fncache, generaldelta, revlog-compression-zstd, revlogv1, share-safe, sparserevlog, store (zstd dirstate-v2 !) removed: persistent-nodemap processed revlogs: @@ -844,7 +844,7 @@ upgrading requirements preserved: dotencode, fncache, generaldelta, revlogv1, share-safe, sparserevlog, store (no-zstd no-dirstate-v2 !) preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, revlogv1, share-safe, sparserevlog, store (zstd no-dirstate-v2 !) - preserved: dotencode, exp-rc-dirstate-v2, fncache, generaldelta, revlog-compression-zstd, revlogv1, share-safe, sparserevlog, store (zstd dirstate-v2 !) + preserved: dotencode, use-dirstate-v2, fncache, generaldelta, revlog-compression-zstd, revlogv1, share-safe, sparserevlog, store (zstd dirstate-v2 !) added: persistent-nodemap processed revlogs: @@ -876,7 +876,7 @@ Running unrelated upgrade requirements preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, share-safe, sparserevlog, store (no-zstd no-dirstate-v2 !) preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlog-compression-zstd, revlogv1, share-safe, sparserevlog, store (zstd no-dirstate-v2 !) - preserved: dotencode, exp-rc-dirstate-v2, fncache, generaldelta, persistent-nodemap, revlog-compression-zstd, revlogv1, share-safe, sparserevlog, store (zstd dirstate-v2 !) + preserved: dotencode, use-dirstate-v2, fncache, generaldelta, persistent-nodemap, revlog-compression-zstd, revlogv1, share-safe, sparserevlog, store (zstd dirstate-v2 !) optimisations: re-delta-all diff --git a/tests/test-purge.t b/tests/test-purge.t --- a/tests/test-purge.t +++ b/tests/test-purge.t @@ -3,7 +3,7 @@ #if dirstate-v2 $ cat >> $HGRCPATH << EOF > [format] - > exp-rc-dirstate-v2=1 + > use-dirstate-v2=1 > [storage] > dirstate-v2.slow-path=allow > EOF diff --git a/tests/test-share-safe.t b/tests/test-share-safe.t --- a/tests/test-share-safe.t +++ b/tests/test-share-safe.t @@ -225,7 +225,7 @@ Disable zstd related tests because its n requirements preserved: dotencode, fncache, generaldelta, revlogv1, share-safe, sparserevlog, store (no-dirstate-v2 !) - preserved: dotencode, exp-rc-dirstate-v2, fncache, generaldelta, revlogv1, share-safe, sparserevlog, store (dirstate-v2 !) + preserved: dotencode, use-dirstate-v2, fncache, generaldelta, revlogv1, share-safe, sparserevlog, store (dirstate-v2 !) added: revlog-compression-zstd processed revlogs: @@ -253,8 +253,8 @@ Disable zstd related tests because its n requirements preserved: dotencode, fncache, generaldelta, revlogv1, share-safe, sparserevlog, store (no-zstd no-dirstate-v2 !) preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, revlogv1, share-safe, sparserevlog, store (zstd no-dirstate-v2 !) - preserved: dotencode, exp-rc-dirstate-v2, fncache, generaldelta, revlogv1, share-safe, sparserevlog, store (no-zstd dirstate-v2 !) - preserved: dotencode, exp-rc-dirstate-v2, fncache, generaldelta, revlog-compression-zstd, revlogv1, share-safe, sparserevlog, store (zstd dirstate-v2 !) + preserved: dotencode, use-dirstate-v2, fncache, generaldelta, revlogv1, share-safe, sparserevlog, store (no-zstd dirstate-v2 !) + preserved: dotencode, use-dirstate-v2, fncache, generaldelta, revlog-compression-zstd, revlogv1, share-safe, sparserevlog, store (zstd dirstate-v2 !) added: persistent-nodemap processed revlogs: @@ -360,7 +360,7 @@ Upgrade $ hg debugupgraderepo -q requirements preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-dirstate-v2 !) - preserved: dotencode, exp-rc-dirstate-v2, fncache, generaldelta, revlogv1, sparserevlog, store (dirstate-v2 !) + preserved: dotencode, use-dirstate-v2, fncache, generaldelta, revlogv1, sparserevlog, store (dirstate-v2 !) added: share-safe no revlogs to process @@ -370,7 +370,7 @@ Upgrade requirements preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-dirstate-v2 !) - preserved: dotencode, exp-rc-dirstate-v2, fncache, generaldelta, revlogv1, sparserevlog, store (dirstate-v2 !) + preserved: dotencode, use-dirstate-v2, fncache, generaldelta, revlogv1, sparserevlog, store (dirstate-v2 !) added: share-safe share-safe @@ -448,7 +448,7 @@ Test that downgrading works too $ hg debugupgraderepo -q requirements preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-dirstate-v2 !) - preserved: dotencode, exp-rc-dirstate-v2, fncache, generaldelta, revlogv1, sparserevlog, store (dirstate-v2 !) + preserved: dotencode, use-dirstate-v2, fncache, generaldelta, revlogv1, sparserevlog, store (dirstate-v2 !) removed: share-safe no revlogs to process @@ -458,7 +458,7 @@ Test that downgrading works too requirements preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-dirstate-v2 !) - preserved: dotencode, exp-rc-dirstate-v2, fncache, generaldelta, revlogv1, sparserevlog, store (dirstate-v2 !) + preserved: dotencode, use-dirstate-v2, fncache, generaldelta, revlogv1, sparserevlog, store (dirstate-v2 !) removed: share-safe no revlogs to process @@ -541,7 +541,7 @@ Testing automatic upgrade of shares when requirements preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-dirstate-v2 !) - preserved: dotencode, exp-rc-dirstate-v2, fncache, generaldelta, revlogv1, sparserevlog, store (dirstate-v2 !) + preserved: dotencode, use-dirstate-v2, fncache, generaldelta, revlogv1, sparserevlog, store (dirstate-v2 !) added: share-safe no revlogs to process diff --git a/tests/test-status.t b/tests/test-status.t --- a/tests/test-status.t +++ b/tests/test-status.t @@ -3,7 +3,7 @@ #if dirstate-v2 $ cat >> $HGRCPATH << EOF > [format] - > exp-rc-dirstate-v2=1 + > use-dirstate-v2=1 > [storage] > dirstate-v2.slow-path=allow > EOF diff --git a/tests/test-symlinks.t b/tests/test-symlinks.t --- a/tests/test-symlinks.t +++ b/tests/test-symlinks.t @@ -5,7 +5,7 @@ #if dirstate-v2 $ cat >> $HGRCPATH << EOF > [format] - > exp-rc-dirstate-v2=1 + > use-dirstate-v2=1 > [storage] > dirstate-v2.slow-path=allow > EOF diff --git a/tests/test-transaction-rollback-on-revlog-split.t b/tests/test-transaction-rollback-on-revlog-split.t --- a/tests/test-transaction-rollback-on-revlog-split.t +++ b/tests/test-transaction-rollback-on-revlog-split.t @@ -17,22 +17,28 @@ Helper extension to intercept renames. > extensions.wrapfunction(util.atomictempfile, 'close', close) > EOF -Test offset computation to correctly factor in the index entries themselve. +Test offset computation to correctly factor in the index entries themselves. Also test that the new data size has the correct size if the transaction is aborted after the index has been replaced. -Test repo has one small, one moderate and one big change. The clone has -the small and moderate change and will transition to non-inline storage when -adding the big change. +Test repo has commits a, b, c, D, where D is large (grows the revlog enough that it +transitions to non-inline storage). The clone initially has changes a, b +and will transition to non-inline storage when adding c, D. + +If the transaction adding c, D is rolled back, then we don't undo the revlog split, +but truncate the index and the data to remove both c and D. $ hg init troffset-computation --config format.revlog-compression=none $ cd troffset-computation $ printf '%20d' '1' > file - $ hg commit -Aqm_ + $ hg commit -Aqma $ printf '%1024d' '1' > file - $ hg commit -Aqm_ + $ hg commit -Aqmb + $ printf '%20d' '1' > file + $ hg commit -Aqmc $ dd if=/dev/zero of=file bs=1k count=128 > /dev/null 2>&1 - $ hg commit -Aqm_ + $ hg commit -AqmD + $ cd .. $ hg clone -r 1 troffset-computation troffset-computation-copy --config format.revlog-compression=none -q @@ -59,7 +65,7 @@ Reference size: $ cat .hg/store/journal | tr -s '\000' ' ' | grep data/file | tail -1 data/file.i 128 -The first file.i entry should match the size above. +The first file.i entry should match the "Reference size" above. The first file.d entry is the temporary record during the split, the second entry after the split happened. The sum of the second file.d and the second file.i entry should match the first file.i entry. @@ -76,11 +82,11 @@ and the second file.i entry should match .hg/store/data/file.d: size=1046 .hg/store/data/file.i: size=128 $ hg tip - changeset: 1:3ce491143aec + changeset: 1:cfa8d6e60429 tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 - summary: _ + summary: b $ hg verify -q warning: revlog 'data/file.d' not in fncache! @@ -126,11 +132,11 @@ where the data file is left as garbage. .hg/store/data/file.d: size=1046 .hg/store/data/file.i: size=1174 $ hg tip - changeset: 1:3ce491143aec + changeset: 1:cfa8d6e60429 tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 - summary: _ + summary: b $ hg verify -q $ cd .. @@ -158,11 +164,11 @@ Repeat the original test but let hg roll .hg/store/data/file.d: size=1046 .hg/store/data/file.i: size=128 $ hg tip - changeset: 1:3ce491143aec + changeset: 1:cfa8d6e60429 tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 - summary: _ + summary: b $ hg verify -q warning: revlog 'data/file.d' not in fncache! diff --git a/tests/test-unamend.t b/tests/test-unamend.t --- a/tests/test-unamend.t +++ b/tests/test-unamend.t @@ -421,3 +421,27 @@ Rename a->b, then amend b->c, and workin A d b R b + +Try to unamend a merge + + $ cd .. + $ hg init merge + $ cd merge + $ echo initial > initial + $ hg ci -Aqm initial + $ echo left > left + $ hg ci -Aqm left + $ hg co -q 0 + $ echo right > right + $ hg ci -Aqm right + $ hg merge -q 1 + $ hg ci -m merge + $ echo accidental > initial + $ hg st --rev 1 --rev . + A right + $ hg st --rev 2 --rev . + A left + $ hg amend + $ hg unamend + abort: cannot unamend merge changeset + [10] diff --git a/tests/test-upgrade-repo.t b/tests/test-upgrade-repo.t --- a/tests/test-upgrade-repo.t +++ b/tests/test-upgrade-repo.t @@ -1713,9 +1713,9 @@ Demonstrate that nothing to perform upgr Upgrade to dirstate-v2 - $ hg debugformat -v --config format.exp-rc-dirstate-v2=1 | grep dirstate-v2 + $ hg debugformat -v --config format.use-dirstate-v2=1 | grep dirstate-v2 dirstate-v2: no yes no - $ hg debugupgraderepo --config format.exp-rc-dirstate-v2=1 --run + $ hg debugupgraderepo --config format.use-dirstate-v2=1 --run upgrade will perform the following actions: requirements @@ -1769,14 +1769,14 @@ Downgrade from dirstate-v2 dirstate-v2: upgrade and downgrade from and empty repository: ------------------------------------------------------------- - $ hg init --config format.exp-rc-dirstate-v2=no dirstate-v2-empty + $ hg init --config format.use-dirstate-v2=no dirstate-v2-empty $ cd dirstate-v2-empty $ hg debugformat | grep dirstate-v2 dirstate-v2: no upgrade - $ hg debugupgraderepo --run --config format.exp-rc-dirstate-v2=yes + $ hg debugupgraderepo --run --config format.use-dirstate-v2=yes upgrade will perform the following actions: requirements @@ -1800,7 +1800,7 @@ upgrade downgrade - $ hg debugupgraderepo --run --config format.exp-rc-dirstate-v2=no + $ hg debugupgraderepo --run --config format.use-dirstate-v2=no upgrade will perform the following actions: requirements