view tests/test-manifestv2.t @ 35023:3649c3f2cd90

revert: do not reverse hunks in interactive when REV is not parent (issue5096) And introduce a new "apply" operation verb for this case as suggested in issue5096. This replaces the no longer used "revert" operation. In interactive revert, when reverting to something else that the parent revision, display an "apply this change" message with a diff that is not reversed. The rationale is that `hg revert -i -r REV` will show hunks of the diff from the working directory to REV and prompt the user to select them for applying (to working directory). This contradicts dcc56e10c23b in which it was decided to have the "direction" of prompted hunks reversed. Later on [1], there was a broad consensus (but no decision) towards the "as to be applied direction". Now that --interactive is no longer experimental (5910db5d1913), it's time to switch and thus we drop no longer used "experimental.revertalternateinteractivemode" configuration option. [1]: https://www.mercurial-scm.org/pipermail/mercurial-devel/2016-November/090142.html .. feature:: When interactive revert is run against a revision other than the working directory parent, the diff shown is the diff to *apply* to the working directory, rather than the diff to *discard* from the working copy. This is in line with related user experiences with `git` and appears to be less confusing with `ui.interface=curses`.
author Denis Laxalde <denis.laxalde@logilab.fr>
date Fri, 03 Nov 2017 14:47:37 +0100
parents eb586ed5d8ce
children
line wrap: on
line source

Create repo with old manifest

  $ cat << EOF >> $HGRCPATH
  > [format]
  > usegeneraldelta=yes
  > EOF

  $ hg init existing
  $ cd existing
  $ echo footext > foo
  $ hg add foo
  $ hg commit -m initial

We're using v1, so no manifestv2 entry is in requires yet.

  $ grep manifestv2 .hg/requires
  [1]

Let's clone this with manifestv2 enabled to switch to the new format for
future commits.

  $ cd ..
  $ hg clone --pull existing new --config experimental.manifestv2=1
  requesting all changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files
  new changesets 0fc9a4fafa44
  updating to branch default
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ cd new

Check that entry was added to .hg/requires.

  $ grep manifestv2 .hg/requires
  manifestv2

Make a new commit.

  $ echo newfootext > foo
  $ hg commit -m new

Check that the manifest actually switched to v2.

  $ hg debugdata -m 0
  foo\x0021e958b1dca695a60ee2e9cf151753204ee0f9e9 (esc)

  $ hg debugdata -m 1
  \x00 (esc)
  \x00foo\x00 (esc)
  I\xab\x7f\xb8(\x83\xcas\x15\x9d\xc2\xd3\xd3:5\x08\xbad5_ (esc)

Check that manifestv2 is used if the requirement is present, even if it's
disabled in the config.

  $ echo newerfootext > foo
  $ hg --config experimental.manifestv2=False commit -m newer

  $ hg debugdata -m 2
  \x00 (esc)
  \x00foo\x00 (esc)
  \xa6\xb1\xfb\xef]\x91\xa1\x19`\xf3.#\x90S\xf8\x06 \xe2\x19\x00 (esc)

Check that we can still read v1 manifests.

  $ hg files -r 0
  foo

  $ cd ..

Check that entry is added to .hg/requires on repo creation

  $ hg --config experimental.manifestv2=True init repo
  $ cd repo
  $ grep manifestv2 .hg/requires
  manifestv2

Set up simple repo

  $ echo a > file1
  $ echo b > file2
  $ echo c > file3
  $ hg ci -Aqm 'initial'
  $ echo d > file2
  $ hg ci -m 'modify file2'

Check that 'hg verify', which uses manifest.readdelta(), works

  $ hg verify
  checking changesets
  checking manifests
  crosschecking files in changesets and manifests
  checking files
  3 files, 2 changesets, 4 total revisions

Check that manifest revlog is smaller than for v1

  $ hg debugindex -m
     rev    offset  length  delta linkrev nodeid       p1           p2
       0         0      81     -1       0 57361477c778 000000000000 000000000000
       1        81      33      0       1 aeaab5a2ef74 57361477c778 000000000000