view tests/test-rebuildstate.t @ 38757:d49e490a9e85 stable

merge: do the trivial resolution after updating sparse checkout In merge, we do trivial resolution for files which were deleted on one side and changed on other. When sparse extension in involved that file might not be present in wdir and trivial resolution can lead to file not found error. This patch make sure we updates the sparse checkout before doing the trivial resolution. This fixes the test failure demonstrated in previous patch. Differential Revision: https://phab.mercurial-scm.org/D3984
author Pulkit Goyal <pulkit@yandex-team.ru>
date Fri, 27 Jul 2018 14:56:10 +0300
parents 74c5ddd97008
children 7e99b02768ef
line wrap: on
line source


  $ cat > adddrop.py <<EOF
  > from mercurial import registrar
  > cmdtable = {}
  > command = registrar.command(cmdtable)
  > @command(b'debugadddrop',
  >   [(b'', b'drop', False, b'drop file from dirstate', b'FILE'),
  >    (b'', b'normal-lookup', False, b'add file to dirstate', b'FILE')],
  >     b'hg debugadddrop')
  > def debugadddrop(ui, repo, *pats, **opts):
  >   '''Add or drop unnamed arguments to or from the dirstate'''
  >   drop = opts.get('drop')
  >   nl = opts.get('normal_lookup')
  >   if nl and drop:
  >       raise error.Abort('drop and normal-lookup are mutually exclusive')
  >   wlock = repo.wlock()
  >   try:
  >     for file in pats:
  >       if opts.get('normal_lookup'):
  >         repo.dirstate.normallookup(file)
  >       else:
  >         repo.dirstate.drop(file)
  > 
  >     repo.dirstate.write(repo.currenttransaction())
  >   finally:
  >     wlock.release()
  > EOF

  $ echo "[extensions]" >> $HGRCPATH
  $ echo "debugadddrop=`pwd`/adddrop.py" >> $HGRCPATH

basic test for hg debugrebuildstate

  $ hg init repo
  $ cd repo

  $ touch foo bar
  $ hg ci -Am 'add foo bar'
  adding bar
  adding foo

  $ touch baz
  $ hg add baz
  $ hg rm bar

  $ hg debugrebuildstate

state dump after

  $ hg debugstate --nodates | sort
  n   0         -1 unset               bar
  n   0         -1 unset               foo

  $ hg debugadddrop --normal-lookup file1 file2
  $ hg debugadddrop --drop bar
  $ hg debugadddrop --drop
  $ hg debugstate --nodates
  n   0         -1 unset               file1
  n   0         -1 unset               file2
  n   0         -1 unset               foo
  $ hg debugrebuildstate

status

  $ hg st -A
  ! bar
  ? baz
  C foo

Test debugdirstate --minimal where a file is not in parent manifest
but in the dirstate
  $ touch foo bar qux
  $ hg add qux
  $ hg remove bar
  $ hg status -A
  A qux
  R bar
  ? baz
  C foo
  $ hg debugadddrop --normal-lookup baz
  $ hg debugdirstate --nodates
  r   0          0 * bar (glob)
  n   0         -1 * baz (glob)
  n 644          0 * foo (glob)
  a   0         -1 * qux (glob)
  $ hg debugrebuilddirstate --minimal
  $ hg debugdirstate --nodates
  r   0          0 * bar (glob)
  n 644          0 * foo (glob)
  a   0         -1 * qux (glob)
  $ hg status -A
  A qux
  R bar
  ? baz
  C foo

Test debugdirstate --minimal where file is in the parent manifest but not the
dirstate
  $ hg manifest
  bar
  foo
  $ hg status -A
  A qux
  R bar
  ? baz
  C foo
  $ hg debugdirstate --nodates
  r   0          0 * bar (glob)
  n 644          0 * foo (glob)
  a   0         -1 * qux (glob)
  $ hg debugadddrop --drop foo
  $ hg debugdirstate --nodates
  r   0          0 * bar (glob)
  a   0         -1 * qux (glob)
  $ hg debugrebuilddirstate --minimal
  $ hg debugdirstate --nodates
  r   0          0 * bar (glob)
  n   0         -1 * foo (glob)
  a   0         -1 * qux (glob)
  $ hg status -A
  A qux
  R bar
  ? baz
  C foo