[Bug 5931] New: resumed graft may lose file removal

mercurial-bugs at mercurial-scm.org mercurial-bugs at mercurial-scm.org
Tue Jun 26 09:30:16 UTC 2018


https://bz.mercurial-scm.org/show_bug.cgi?id=5931

            Bug ID: 5931
           Summary: resumed graft may lose file removal
           Product: Mercurial
           Version: default branch
          Hardware: PC
                OS: Linux
            Status: UNCONFIRMED
          Severity: bug
          Priority: wish
         Component: Mercurial
          Assignee: bugzilla at mercurial-scm.org
          Reporter: yuya at tcha.org
                CC: mercurial-devel at mercurial-scm.org

File removal isn't recorded by "hg graft" + "hg resolve" +
"hg graft --continue" sequence, and dirstate gets wrong.

Original bug report:
https://bitbucket.org/tortoisehg/thg/issues/5124/

STR

  $ hg init a
  $ cd a
  $ touch file.txt
  $ hg add file.txt
  $ hg commit -m add
  $ hg rm file.txt
  $ hg commit -m remove
  $ hg update 0
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ echo edited > file.txt
  $ hg commit -m edit
  created new head

Uninterrupted graft works:

  $ echo d | hg --config ui.interactive=1 graft 1
  grafting 1:b906d4b3ba63 "remove"
  local [local] changed file.txt which other [graft] deleted
  use (c)hanged version, (d)elete, or leave (u)nresolved? d
  $ hg log -G -T '{rev} {file_dels}\n'
  @  3 file.txt
  |
  o  2
  |
  | o  1 file.txt
  |/
  o  0


Clean up the last grafted revision:

  $ hg --config extensions.strip= strip .
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  saved backup bundle to
$TESTTMP/a/.hg/strip-backup/11adda799c5d-a0425a0e-backup.hg

Try again with graft + resolve (NOT WORK):

  $ hg graft -t:fail 1
  grafting 1:b906d4b3ba63 "remove"
  abort: unresolved conflicts, can't continue
  (use 'hg resolve' and 'hg graft --continue')
  [255]
  $ echo d | hg --config ui.interactive=1 resolve -a
  local [local] changed file.txt which other [graft] deleted
  use (c)hanged version, (d)elete, or leave (u)nresolved? d
  (no more unresolved files)
  continue: hg graft --continue
  $ hg graft --continue
  grafting 1:b906d4b3ba63 "remove"
  note: graft of 1:b906d4b3ba63 created no changes to commit

The dirstate is clean:

  $ hg stat --all
  ? file.txt.orig
  $ hg debugdirstate

But actually, the file is missing:

  $ hg debugrebuilddirstate
  $ hg stat --all
  ! file.txt
  ? file.txt.orig

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the Mercurial-devel mailing list