mirror of
https://github.com/facebook/sapling.git
synced 2024-10-16 19:57:18 +03:00
a0fdd80720
Summary: dirstate.drop() is used in two different situations. 1. To make a tracked file become untracked, and 2. To remove a file from the dirstate entirely. In the treestate case, this difference matters, so let's split drop into two functions, one to mark something as untracked, and the other to remove it entirely. In this first patch we just rename drop to untrack. The next patch will introduce the new delete function. Reviewed By: ikostia Differential Revision: D10317738 fbshipit-source-id: 85950ab1b1a10cd481edcfbba6da445b3dbf6397
126 lines
2.9 KiB
Perl
126 lines
2.9 KiB
Perl
|
|
$ 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.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
|
|
|