view tests/test-rebuildstate.t @ 36738:613954a17a25

setdiscovery: back out changeset 5cfdf6137af8 (issue5809) As explained in the bug report, this commit caused a performance regression. The problem occurs when the local repo has very many heads. Before 5cfdf6137af8, we used to get the remote's list of heads and if these heads mostly overlapped with the local repo's heads, we would mark these common heads as common, which would greatly reduce the size of the set of undecided nodes. Note that a similar problem existed before 5cfdf6137af8: If the local repo had very many heads and the server just had a few (or many heads from a disjoint set), we would do the same kind of slow discovery as we would with 5cfdf6137af8 in the case where local and remote repos share a large set of common nodes. For now, we just back out 5cfdf6137af8. We should improve the discovery in the "local has many heads, remote has few heads" case, but let's do that after backing this out. Differential Revision: https://phab.mercurial-scm.org/D2643
author Martin von Zweigbergk <martinvonz@google.com>
date Sun, 04 Mar 2018 07:37:08 -0800
parents fce4ed2912bb
children 74c5ddd97008
line wrap: on
line source


  $ cat > adddrop.py <<EOF
  > from mercurial import registrar
  > cmdtable = {}
  > command = registrar.command(cmdtable)
  > @command(b'debugadddrop',
  >   [('', 'drop', False, 'drop file from dirstate', 'FILE'),
  >    ('', 'normal-lookup', False, 'add file to dirstate', 'FILE')],
  >     '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