view tests/test-diff-reverse.t @ 45375:8c466bcb0879

revert: remove dangerous `parents` argument from `cmdutil.revert()` As we found out the hard way (thanks to spectral@ for figuring it out!), `cmdutil.revert()`'s `parents` argument must be `repo.dirstate.parents()` or things may go wrong. We had an extension that passed in the target commit as the first parent. The `hg split` command from the evolve extension seems to have made the same mistake, but I haven't looked carefully. The problem is that `cmdutil._performrevert()` calls `dirstate.normal()` on reverted files if the commit to revert to equals the first parent. So if you pass in `ctx=foo` and `parents=(foo.node(), nullid)`, then `dirstate.normal()` will be called for the revert files, even though they might not be clean in the working copy. There doesn't seem to be any reason, other than a tiny performance benefit, to passing the `parents` around instead of looking them up again in `cmdutil._performrevert()`, so that's what this patch does. Differential Revision: https://phab.mercurial-scm.org/D8925
author Martin von Zweigbergk <martinvonz@google.com>
date Mon, 10 Aug 2020 21:46:47 -0700
parents c586cb50872b
children 55c6ebd11cb9
line wrap: on
line source

  $ hg init

  $ cat > a <<EOF
  > a
  > b
  > c
  > EOF
  $ hg ci -Am adda
  adding a

  $ cat > a <<EOF
  > d
  > e
  > f
  > EOF
  $ hg ci -m moda

  $ hg diff --reverse -r0 -r1
  diff -r 2855cdcfcbb7 -r 8e1805a3cf6e a
  --- a/a	Thu Jan 01 00:00:00 1970 +0000
  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
  @@ -1,3 +1,3 @@
  -d
  -e
  -f
  +a
  +b
  +c

  $ cat >> a <<EOF
  > g
  > h
  > EOF
  $ hg diff --reverse --nodates
  diff -r 2855cdcfcbb7 a
  --- a/a
  +++ b/a
  @@ -1,5 +1,3 @@
   d
   e
   f
  -g
  -h

should show removed file 'a' as being added
  $ hg revert a
  $ hg rm a
  $ hg diff --reverse --nodates a
  diff -r 2855cdcfcbb7 a
  --- /dev/null
  +++ b/a
  @@ -0,0 +1,3 @@
  +d
  +e
  +f

should show added file 'b' as being removed
  $ echo b >> b
  $ hg add b
  $ hg diff --reverse --nodates b
  diff -r 2855cdcfcbb7 b
  --- a/b
  +++ /dev/null
  @@ -1,1 +0,0 @@
  -b