sapling/tests/test-fb-hgext-age.t
Mark Thomas 146a62e3ef age: add ancestorsaged revsetpredicate
Summary:
The expression `::revs & age("<x")` can be slow, as all ancestors must be
analyzed in case there are commits with ancestors that have later dates.  Most
of this time this is unnecessary, as commits are usually monotonic in their
dates.

The `ancestorsaged` revsetpredicate evaluates to all ancestors within an age
range, optimized as if commit dates are monotonic.

Reviewed By: ikostia

Differential Revision: D8489319

fbshipit-source-id: 9b9055019c2afa70497a9df02c6fe3504e2c381a
2018-06-22 07:40:08 -07:00

109 lines
3.4 KiB
Perl

$ cat << EOF >> $HGRCPATH
> [extensions]
> age=
> EOF
Setup repo
$ hg init repo
$ cd repo
$ now=`date +%s`
$ touch file1
$ hg add file1
$ for delta in 31536000 86401 86369 3800 420 5
> do
> commit_time=`expr $now - $delta`
> echo "$delta" > file1
> hg commit -d "$commit_time 0" -m "Changeset $delta seconds ago"
> done
Check age ranges
$ hg log -T '{rev} {desc}\n' -r 'age("<30")'
5 Changeset 5 seconds ago
$ hg log -T '{rev} {desc}\n' -r 'age("<7m30s")'
4 Changeset 420 seconds ago
5 Changeset 5 seconds ago
$ hg log -T '{rev} {desc}\n' -r 'age("<1h4m")'
3 Changeset 3800 seconds ago
4 Changeset 420 seconds ago
5 Changeset 5 seconds ago
$ hg log -T '{rev} {desc}\n' -r 'age("<1d")'
2 Changeset 86369 seconds ago
3 Changeset 3800 seconds ago
4 Changeset 420 seconds ago
5 Changeset 5 seconds ago
$ hg log -T '{rev} {desc}\n' -r 'age("<364d23h59m")'
1 Changeset 86401 seconds ago
2 Changeset 86369 seconds ago
3 Changeset 3800 seconds ago
4 Changeset 420 seconds ago
5 Changeset 5 seconds ago
$ hg log -T '{rev} {desc}\n' -r 'age(">1s")'
0 Changeset 31536000 seconds ago
1 Changeset 86401 seconds ago
2 Changeset 86369 seconds ago
3 Changeset 3800 seconds ago
4 Changeset 420 seconds ago
5 Changeset 5 seconds ago
$ hg log -T '{rev} {desc}\n' -r 'age(">1m")'
0 Changeset 31536000 seconds ago
1 Changeset 86401 seconds ago
2 Changeset 86369 seconds ago
3 Changeset 3800 seconds ago
4 Changeset 420 seconds ago
$ hg log -T '{rev} {desc}\n' -r 'age(">1h")'
0 Changeset 31536000 seconds ago
1 Changeset 86401 seconds ago
2 Changeset 86369 seconds ago
3 Changeset 3800 seconds ago
$ hg log -T '{rev} {desc}\n' -r 'age(">1d")'
0 Changeset 31536000 seconds ago
1 Changeset 86401 seconds ago
$ hg log -T '{rev} {desc}\n' -r 'age(">365d")'
0 Changeset 31536000 seconds ago
$ hg log -T '{rev} {desc}\n' -r 'age("<64m")'
3 Changeset 3800 seconds ago
4 Changeset 420 seconds ago
5 Changeset 5 seconds ago
$ hg log -T '{rev} {desc}\n' -r 'age("<60m500s")'
3 Changeset 3800 seconds ago
4 Changeset 420 seconds ago
5 Changeset 5 seconds ago
$ hg log -T '{rev} {desc}\n' -r 'age("<1h500s")'
3 Changeset 3800 seconds ago
4 Changeset 420 seconds ago
5 Changeset 5 seconds ago
$ hg log -T '{rev} {desc}\n' -r 'age("1h-20d")'
1 Changeset 86401 seconds ago
2 Changeset 86369 seconds ago
3 Changeset 3800 seconds ago
$ hg log -T '{rev} {desc}\n' -r 'age("invalid")'
hg: parse error: invalid age range
[255]
$ hg log -T '{rev} {desc}\n' -r 'age("1h")'
hg: parse error: invalid age range
[255]
$ hg log -T '{rev} {desc}\n' -r 'age("<3m2h")'
hg: parse error: invalid age in age range: 3m2h
[255]
$ hg log -T '{rev} {desc}\n' -r 'age(">3h2h")'
hg: parse error: invalid age in age range: 3h2h
[255]
$ hg log -T '{rev} {desc}\n' -r 'age("1h-5h-10d")'
hg: parse error: invalid age in age range: 5h-10d
[255]
$ hg log -T '{rev} {desc}\n' -r 'ancestorsaged(., "<1d")'
2 Changeset 86369 seconds ago
3 Changeset 3800 seconds ago
4 Changeset 420 seconds ago
5 Changeset 5 seconds ago
$ hg log -T '{rev} {desc}\n' -r 'ancestorsaged(.^, "<1d")'
2 Changeset 86369 seconds ago
3 Changeset 3800 seconds ago
4 Changeset 420 seconds ago
$ hg log -T '{rev} {desc}\n' -r 'ancestorsaged(., "1d-20d")'
1 Changeset 86401 seconds ago
$ hg log -T '{rev} {desc}\n' -r 'ancestorsaged(., ">1d")'
0 Changeset 31536000 seconds ago
1 Changeset 86401 seconds ago