mirror of
https://github.com/facebook/sapling.git
synced 2024-10-12 01:39:21 +03:00
9dc21f8d0b
Summary: D13853115 adds `edenscm/` to `sys.path` and code still uses `import mercurial`. That has nasty problems if both `import mercurial` and `import edenscm.mercurial` are used, because Python would think `mercurial.foo` and `edenscm.mercurial.foo` are different modules so code like `try: ... except mercurial.error.Foo: ...`, or `isinstance(x, mercurial.foo.Bar)` would fail to handle the `edenscm.mercurial` version. There are also some module-level states (ex. `extensions._extensions`) that would cause trouble if they have multiple versions in a single process. Change imports to use the `edenscm` so ideally the `mercurial` is no longer imported at all. Add checks in extensions.py to catch unexpected extensions importing modules from the old (wrong) locations when running tests. Reviewed By: phillco Differential Revision: D13868981 fbshipit-source-id: f4e2513766957fd81d85407994f7521a08e4de48
126 lines
2.9 KiB
Perl
126 lines
2.9 KiB
Perl
|
|
$ cat > adddrop.py <<EOF
|
|
> from edenscm.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.untrack(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
|
|
|