2015-01-22 02:40:24 +03:00
|
|
|
$ hg init
|
|
|
|
|
|
|
|
Set up history and working copy
|
|
|
|
|
|
|
|
$ python $TESTDIR/generate-working-copy-states.py state 2 1
|
|
|
|
$ hg addremove -q --similarity 0
|
|
|
|
$ hg commit -m first
|
|
|
|
|
|
|
|
$ python $TESTDIR/generate-working-copy-states.py state 2 2
|
|
|
|
$ hg addremove -q --similarity 0
|
|
|
|
$ hg commit -m second
|
|
|
|
|
|
|
|
$ python $TESTDIR/generate-working-copy-states.py state 2 wc
|
|
|
|
$ hg addremove -q --similarity 0
|
|
|
|
$ hg forget *_*_*-untracked
|
|
|
|
$ rm *_*_missing-*
|
|
|
|
|
|
|
|
Test status
|
|
|
|
|
|
|
|
$ hg st -A 'set:modified()'
|
|
|
|
M content1_content1_content3-tracked
|
|
|
|
M content1_content2_content1-tracked
|
|
|
|
M content1_content2_content3-tracked
|
|
|
|
M missing_content2_content3-tracked
|
|
|
|
|
|
|
|
$ hg st -A 'set:added()'
|
|
|
|
A content1_missing_content1-tracked
|
|
|
|
A content1_missing_content3-tracked
|
|
|
|
A missing_missing_content3-tracked
|
|
|
|
|
|
|
|
$ hg st -A 'set:removed()'
|
|
|
|
R content1_content1_content1-untracked
|
|
|
|
R content1_content1_content3-untracked
|
|
|
|
R content1_content1_missing-untracked
|
|
|
|
R content1_content2_content1-untracked
|
|
|
|
R content1_content2_content2-untracked
|
|
|
|
R content1_content2_content3-untracked
|
|
|
|
R content1_content2_missing-untracked
|
|
|
|
R missing_content2_content2-untracked
|
|
|
|
R missing_content2_content3-untracked
|
|
|
|
R missing_content2_missing-untracked
|
|
|
|
|
|
|
|
$ hg st -A 'set:deleted()'
|
|
|
|
! content1_content1_missing-tracked
|
|
|
|
! content1_content2_missing-tracked
|
|
|
|
! content1_missing_missing-tracked
|
|
|
|
! missing_content2_missing-tracked
|
|
|
|
! missing_missing_missing-tracked
|
|
|
|
|
2015-11-18 22:55:32 +03:00
|
|
|
$ hg st -A 'set:missing()'
|
|
|
|
! content1_content1_missing-tracked
|
|
|
|
! content1_content2_missing-tracked
|
|
|
|
! content1_missing_missing-tracked
|
|
|
|
! missing_content2_missing-tracked
|
|
|
|
! missing_missing_missing-tracked
|
|
|
|
|
2015-01-22 02:40:24 +03:00
|
|
|
$ hg st -A 'set:unknown()'
|
|
|
|
? content1_missing_content1-untracked
|
|
|
|
? content1_missing_content3-untracked
|
|
|
|
? missing_missing_content3-untracked
|
|
|
|
|
|
|
|
$ hg st -A 'set:clean()'
|
|
|
|
C content1_content1_content1-tracked
|
|
|
|
C content1_content2_content2-tracked
|
|
|
|
C missing_content2_content2-tracked
|
|
|
|
|
|
|
|
Test log
|
|
|
|
|
|
|
|
$ hg log -T '{rev}\n' --stat 'set:modified()'
|
|
|
|
1
|
|
|
|
content1_content2_content1-tracked | 2 +-
|
|
|
|
content1_content2_content3-tracked | 2 +-
|
|
|
|
missing_content2_content3-tracked | 1 +
|
|
|
|
3 files changed, 3 insertions(+), 2 deletions(-)
|
|
|
|
|
|
|
|
0
|
|
|
|
content1_content1_content3-tracked | 1 +
|
|
|
|
content1_content2_content1-tracked | 1 +
|
|
|
|
content1_content2_content3-tracked | 1 +
|
|
|
|
3 files changed, 3 insertions(+), 0 deletions(-)
|
|
|
|
|
2015-04-18 20:08:41 +03:00
|
|
|
Largefiles doesn't crash
|
|
|
|
$ hg log -T '{rev}\n' --stat 'set:modified()' --config extensions.largefiles=
|
|
|
|
1
|
|
|
|
content1_content2_content1-tracked | 2 +-
|
|
|
|
content1_content2_content3-tracked | 2 +-
|
|
|
|
missing_content2_content3-tracked | 1 +
|
|
|
|
3 files changed, 3 insertions(+), 2 deletions(-)
|
|
|
|
|
|
|
|
0
|
|
|
|
content1_content1_content3-tracked | 1 +
|
|
|
|
content1_content2_content1-tracked | 1 +
|
|
|
|
content1_content2_content3-tracked | 1 +
|
|
|
|
3 files changed, 3 insertions(+), 0 deletions(-)
|
|
|
|
|
2015-01-22 02:40:24 +03:00
|
|
|
$ hg log -T '{rev}\n' --stat 'set:added()'
|
|
|
|
1
|
|
|
|
content1_missing_content1-tracked | 1 -
|
|
|
|
content1_missing_content3-tracked | 1 -
|
|
|
|
2 files changed, 0 insertions(+), 2 deletions(-)
|
|
|
|
|
log: evaluate filesets on working copy, not its parent
When running "hg log 'set:added()'", we create two matchers: one used
for producing the revset and one used for finding files to match. In
185b6b930e8c (graphlog: evaluate FILE/-I/-X filesets on the working
dir, 2012-02-26), we started passing a revision argument along from
what's currently in cmdutil._makelogrevset() to
revset._matchfiles(). When the revision was an empty string, it
referred to the working copy. This was subtly done with "repo[rev or
None]". Then, in 5ff5c5c9e69f (revset: avoid recalculating filesets,
2014-10-22), that conversion from empty string to None was lost. Note
that repo[''] is equivalent to repo['.'], not repo[None].
The consequence of this, to the user, is that when running "hg log
'set:added()'", the file matcher matches files added in the working
copy, while the revset matcher matches revisions that touch files
added in the parent of the working copy. As a result, only revisions
that touch any files added in the parent of the working copy will be
considered, but they will only be included if they also touch files
added in the working copy.
Fix the bug by converting '' to None again, but make it a little more
explicit this time (plus, we now have tests for it).
2015-01-22 02:23:13 +03:00
|
|
|
0
|
|
|
|
content1_missing_content1-tracked | 1 +
|
|
|
|
content1_missing_content3-tracked | 1 +
|
|
|
|
2 files changed, 2 insertions(+), 0 deletions(-)
|
|
|
|
|
2015-01-22 02:40:24 +03:00
|
|
|
$ hg log -T '{rev}\n' --stat 'set:removed()'
|
|
|
|
1
|
|
|
|
content1_content2_content1-untracked | 2 +-
|
|
|
|
content1_content2_content2-untracked | 2 +-
|
|
|
|
content1_content2_content3-untracked | 2 +-
|
|
|
|
content1_content2_missing-untracked | 2 +-
|
|
|
|
missing_content2_content2-untracked | 1 +
|
|
|
|
missing_content2_content3-untracked | 1 +
|
|
|
|
missing_content2_missing-untracked | 1 +
|
|
|
|
7 files changed, 7 insertions(+), 4 deletions(-)
|
|
|
|
|
|
|
|
0
|
|
|
|
content1_content1_content1-untracked | 1 +
|
|
|
|
content1_content1_content3-untracked | 1 +
|
|
|
|
content1_content1_missing-untracked | 1 +
|
|
|
|
content1_content2_content1-untracked | 1 +
|
|
|
|
content1_content2_content2-untracked | 1 +
|
|
|
|
content1_content2_content3-untracked | 1 +
|
|
|
|
content1_content2_missing-untracked | 1 +
|
|
|
|
7 files changed, 7 insertions(+), 0 deletions(-)
|
log: evaluate filesets on working copy, not its parent
When running "hg log 'set:added()'", we create two matchers: one used
for producing the revset and one used for finding files to match. In
185b6b930e8c (graphlog: evaluate FILE/-I/-X filesets on the working
dir, 2012-02-26), we started passing a revision argument along from
what's currently in cmdutil._makelogrevset() to
revset._matchfiles(). When the revision was an empty string, it
referred to the working copy. This was subtly done with "repo[rev or
None]". Then, in 5ff5c5c9e69f (revset: avoid recalculating filesets,
2014-10-22), that conversion from empty string to None was lost. Note
that repo[''] is equivalent to repo['.'], not repo[None].
The consequence of this, to the user, is that when running "hg log
'set:added()'", the file matcher matches files added in the working
copy, while the revset matcher matches revisions that touch files
added in the parent of the working copy. As a result, only revisions
that touch any files added in the parent of the working copy will be
considered, but they will only be included if they also touch files
added in the working copy.
Fix the bug by converting '' to None again, but make it a little more
explicit this time (plus, we now have tests for it).
2015-01-22 02:23:13 +03:00
|
|
|
|
2015-01-22 02:40:24 +03:00
|
|
|
$ hg log -T '{rev}\n' --stat 'set:deleted()'
|
log: evaluate filesets on working copy, not its parent
When running "hg log 'set:added()'", we create two matchers: one used
for producing the revset and one used for finding files to match. In
185b6b930e8c (graphlog: evaluate FILE/-I/-X filesets on the working
dir, 2012-02-26), we started passing a revision argument along from
what's currently in cmdutil._makelogrevset() to
revset._matchfiles(). When the revision was an empty string, it
referred to the working copy. This was subtly done with "repo[rev or
None]". Then, in 5ff5c5c9e69f (revset: avoid recalculating filesets,
2014-10-22), that conversion from empty string to None was lost. Note
that repo[''] is equivalent to repo['.'], not repo[None].
The consequence of this, to the user, is that when running "hg log
'set:added()'", the file matcher matches files added in the working
copy, while the revset matcher matches revisions that touch files
added in the parent of the working copy. As a result, only revisions
that touch any files added in the parent of the working copy will be
considered, but they will only be included if they also touch files
added in the working copy.
Fix the bug by converting '' to None again, but make it a little more
explicit this time (plus, we now have tests for it).
2015-01-22 02:23:13 +03:00
|
|
|
1
|
|
|
|
content1_content2_missing-tracked | 2 +-
|
|
|
|
content1_missing_missing-tracked | 1 -
|
|
|
|
missing_content2_missing-tracked | 1 +
|
|
|
|
3 files changed, 2 insertions(+), 2 deletions(-)
|
|
|
|
|
|
|
|
0
|
|
|
|
content1_content1_missing-tracked | 1 +
|
|
|
|
content1_content2_missing-tracked | 1 +
|
|
|
|
content1_missing_missing-tracked | 1 +
|
|
|
|
3 files changed, 3 insertions(+), 0 deletions(-)
|
|
|
|
|
2015-01-22 02:40:24 +03:00
|
|
|
$ hg log -T '{rev}\n' --stat 'set:unknown()'
|
log: evaluate filesets on working copy, not its parent
When running "hg log 'set:added()'", we create two matchers: one used
for producing the revset and one used for finding files to match. In
185b6b930e8c (graphlog: evaluate FILE/-I/-X filesets on the working
dir, 2012-02-26), we started passing a revision argument along from
what's currently in cmdutil._makelogrevset() to
revset._matchfiles(). When the revision was an empty string, it
referred to the working copy. This was subtly done with "repo[rev or
None]". Then, in 5ff5c5c9e69f (revset: avoid recalculating filesets,
2014-10-22), that conversion from empty string to None was lost. Note
that repo[''] is equivalent to repo['.'], not repo[None].
The consequence of this, to the user, is that when running "hg log
'set:added()'", the file matcher matches files added in the working
copy, while the revset matcher matches revisions that touch files
added in the parent of the working copy. As a result, only revisions
that touch any files added in the parent of the working copy will be
considered, but they will only be included if they also touch files
added in the working copy.
Fix the bug by converting '' to None again, but make it a little more
explicit this time (plus, we now have tests for it).
2015-01-22 02:23:13 +03:00
|
|
|
1
|
|
|
|
content1_missing_content1-untracked | 1 -
|
|
|
|
content1_missing_content3-untracked | 1 -
|
|
|
|
2 files changed, 0 insertions(+), 2 deletions(-)
|
|
|
|
|
|
|
|
0
|
|
|
|
content1_missing_content1-untracked | 1 +
|
|
|
|
content1_missing_content3-untracked | 1 +
|
|
|
|
2 files changed, 2 insertions(+), 0 deletions(-)
|
|
|
|
|
2015-01-22 02:40:24 +03:00
|
|
|
$ hg log -T '{rev}\n' --stat 'set:clean()'
|
log: evaluate filesets on working copy, not its parent
When running "hg log 'set:added()'", we create two matchers: one used
for producing the revset and one used for finding files to match. In
185b6b930e8c (graphlog: evaluate FILE/-I/-X filesets on the working
dir, 2012-02-26), we started passing a revision argument along from
what's currently in cmdutil._makelogrevset() to
revset._matchfiles(). When the revision was an empty string, it
referred to the working copy. This was subtly done with "repo[rev or
None]". Then, in 5ff5c5c9e69f (revset: avoid recalculating filesets,
2014-10-22), that conversion from empty string to None was lost. Note
that repo[''] is equivalent to repo['.'], not repo[None].
The consequence of this, to the user, is that when running "hg log
'set:added()'", the file matcher matches files added in the working
copy, while the revset matcher matches revisions that touch files
added in the parent of the working copy. As a result, only revisions
that touch any files added in the parent of the working copy will be
considered, but they will only be included if they also touch files
added in the working copy.
Fix the bug by converting '' to None again, but make it a little more
explicit this time (plus, we now have tests for it).
2015-01-22 02:23:13 +03:00
|
|
|
1
|
|
|
|
content1_content2_content2-tracked | 2 +-
|
|
|
|
missing_content2_content2-tracked | 1 +
|
|
|
|
2 files changed, 2 insertions(+), 1 deletions(-)
|
|
|
|
|
2015-01-22 02:40:24 +03:00
|
|
|
0
|
|
|
|
content1_content1_content1-tracked | 1 +
|
|
|
|
content1_content2_content2-tracked | 1 +
|
|
|
|
2 files changed, 2 insertions(+), 0 deletions(-)
|
|
|
|
|
|
|
|
Test revert
|
|
|
|
|
|
|
|
$ hg revert 'set:modified()'
|
|
|
|
reverting content1_content1_content3-tracked
|
|
|
|
reverting content1_content2_content1-tracked
|
|
|
|
reverting content1_content2_content3-tracked
|
|
|
|
reverting missing_content2_content3-tracked
|
|
|
|
|
|
|
|
$ hg revert 'set:added()'
|
|
|
|
forgetting content1_missing_content1-tracked
|
|
|
|
forgetting content1_missing_content3-tracked
|
|
|
|
forgetting missing_missing_content3-tracked
|
|
|
|
|
|
|
|
$ hg revert 'set:removed()'
|
|
|
|
undeleting content1_content1_content1-untracked
|
|
|
|
undeleting content1_content1_content3-untracked
|
|
|
|
undeleting content1_content1_missing-untracked
|
2015-03-24 09:04:51 +03:00
|
|
|
undeleting content1_content2_content1-untracked
|
|
|
|
undeleting content1_content2_content2-untracked
|
|
|
|
undeleting content1_content2_content3-untracked
|
|
|
|
undeleting content1_content2_missing-untracked
|
|
|
|
undeleting missing_content2_content2-untracked
|
|
|
|
undeleting missing_content2_content3-untracked
|
|
|
|
undeleting missing_content2_missing-untracked
|
2015-01-22 02:40:24 +03:00
|
|
|
|
|
|
|
$ hg revert 'set:deleted()'
|
|
|
|
reverting content1_content1_missing-tracked
|
2015-03-24 09:04:51 +03:00
|
|
|
reverting content1_content2_missing-tracked
|
2015-01-22 02:40:24 +03:00
|
|
|
forgetting content1_missing_missing-tracked
|
2015-03-24 09:04:51 +03:00
|
|
|
reverting missing_content2_missing-tracked
|
2015-01-22 02:40:24 +03:00
|
|
|
forgetting missing_missing_missing-tracked
|
|
|
|
|
|
|
|
$ hg revert 'set:unknown()'
|
|
|
|
|
|
|
|
$ hg revert 'set:clean()'
|