tests/test-narrow-debugrebuilddirstate.t
author Kyle Lippincott <spectral@google.com>
Thu, 28 Jun 2018 18:07:22 -0700
changeset 38497 da2a7d8354b2
parent 36117 a2a6e724d61a
child 39876 01c0f01b562b
permissions -rw-r--r--
unlinkpath: make empty directory removal optional (issue5901) (issue5826) There are known cases where performing operations such as rebase from a directory that is newly created can fail or at least lead to being in a directory handle that no longer exists. This is even reproducible by just doing something as simple as: cd foo; hg rm * The behavior is different if you use `hg addremove`, the directory is not removed until we attempt to go back to the node after committing it: cd foo; rm *; hg addremove; hg ci -m'bye foo'; hg co .^; hg co tip Differential Revision: https://phab.mercurial-scm.org/D3859

  $ . "$TESTDIR/narrow-library.sh"
  $ hg init master
  $ cd master
  $ echo treemanifest >> .hg/requires
  $ echo 'contents of file' > file
  $ mkdir foo
  $ echo 'contents of foo/bar' > foo/bar
  $ hg ci -Am 'some change'
  adding file
  adding foo/bar

  $ cd ..
  $ hg clone --narrow ssh://user@dummy/master copy --include=foo
  requesting all changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files
  new changesets * (glob)
  updating to branch default
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ cd copy

  $ hg debugdirstate
  n *         20 unset               foo/bar (glob)
  $ mv .hg/dirstate .hg/old_dirstate
  $ dd bs=40 count=1 if=.hg/old_dirstate of=.hg/dirstate 2>/dev/null
  $ hg debugdirstate
  $ hg debugrebuilddirstate
  $ hg debugdirstate
  n *         * unset               foo/bar (glob)