view tests/test-rebuildstate.t @ 51557:cc44b3df9bb4

bundle: do no check the changegroup version if no changegroup is included We don't need to check the compatibility of something we will not use. In practice this was getting in the was of `streamv2` bundles on a narrow repository as the 'cg.version=02' value was rejected by this checks.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 02 Apr 2024 17:02:39 +0200
parents 7a8bfc05b691
children
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'):
  >         with repo.dirstate.changing_parents(repo):
  >             repo.dirstate.update_file(
  >                 file,
  >                 p1_tracked=True,
  >                 wc_tracked=True,
  >                 possibly_dirty=True,
  >             )
  >       else:
  >         repo.dirstate._map.reset_state(file)
  >         repo.dirstate._dirty = True
  > 
  >     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 --no-dates | 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 --no-dates
  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
  $ sleep 1 # remove potential ambiguity in mtime
  $ hg status -A
  A qux
  R bar
  ? baz
  C foo
  $ hg debugadddrop --normal-lookup baz
  $ hg debugdirstate --no-dates
  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 --no-dates
  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
  $ sleep 1 # remove potential ambiguity in mtime
  $ hg status -A
  A qux
  R bar
  ? baz
  C foo
  $ hg debugdirstate --no-dates
  r   0          0 * bar (glob)
  n 644          0 * foo (glob)
  a   0         -1 * qux (glob)
  $ hg debugadddrop --drop foo
  $ hg debugdirstate --no-dates
  r   0          0 * bar (glob)
  a   0         -1 * qux (glob)
  $ hg debugrebuilddirstate --minimal
  $ hg debugdirstate --no-dates
  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