view tests/test-rebuildstate.t @ 44046:162b81e65e60

phabricator: convert phabhunk and phabchange keys to bytes when finalising I thought I had included this code already but I'd missed it out. One of the disadvantages of attrs is that all the keys are unicode strings on py3, but we need them to be byte strings. Differential Revision: https://phab.mercurial-scm.org/D7066
author Ian Moody <moz-ian@perix.co.uk>
date Sat, 12 Oct 2019 14:41:59 +0100
parents 7e99b02768ef
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'):
  >         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 --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
  $ 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
  $ 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