tests/test-addremove.t
author Gregory Szorc <gregory.szorc@gmail.com>
Thu, 06 Sep 2018 14:04:46 -0700
changeset 39568 842cd0bdda75
parent 39088 ad88726d6982
child 40367 824b687ff6af
permissions -rw-r--r--
util: teach lrucachedict to enforce a max total cost Now that lrucachedict entries can have a numeric cost associated with them and we can easily pop the oldest item in the cache, it now becomes relatively trivial to implement support for enforcing a high water mark on the total cost of items in the cache. This commit teaches lrucachedict instances to have a max cost associated with them. When items are inserted, we pop old items until enough "cost" frees up to make room for the new item. This feature is close to zero cost when not used (modulo the insertion regressed introduced by the previous commit): $ ./hg perflrucachedict --size 4 --gets 1000000 --sets 1000000 --mixed 1000000 ! gets ! wall 0.607444 comb 0.610000 user 0.610000 sys 0.000000 (best of 17) ! wall 0.601653 comb 0.600000 user 0.600000 sys 0.000000 (best of 17) ! inserts ! wall 0.678261 comb 0.680000 user 0.680000 sys 0.000000 (best of 14) ! wall 0.685042 comb 0.680000 user 0.680000 sys 0.000000 (best of 15) ! sets ! wall 0.808770 comb 0.800000 user 0.800000 sys 0.000000 (best of 13) ! wall 0.834241 comb 0.830000 user 0.830000 sys 0.000000 (best of 12) ! mixed ! wall 0.782441 comb 0.780000 user 0.780000 sys 0.000000 (best of 13) ! wall 0.803804 comb 0.800000 user 0.800000 sys 0.000000 (best of 13) $ hg perflrucachedict --size 1000 --gets 1000000 --sets 1000000 --mixed 1000000 ! init ! wall 0.006952 comb 0.010000 user 0.010000 sys 0.000000 (best of 418) ! gets ! wall 0.613350 comb 0.610000 user 0.610000 sys 0.000000 (best of 17) ! wall 0.617415 comb 0.620000 user 0.620000 sys 0.000000 (best of 17) ! inserts ! wall 0.701270 comb 0.700000 user 0.700000 sys 0.000000 (best of 15) ! wall 0.700516 comb 0.700000 user 0.700000 sys 0.000000 (best of 15) ! sets ! wall 0.825720 comb 0.830000 user 0.830000 sys 0.000000 (best of 13) ! wall 0.837946 comb 0.840000 user 0.830000 sys 0.010000 (best of 12) ! mixed ! wall 0.821644 comb 0.820000 user 0.820000 sys 0.000000 (best of 13) ! wall 0.850559 comb 0.850000 user 0.850000 sys 0.000000 (best of 12) I reckon the slight slowdown on insert is due to added if checks. For caches with total cost limiting enabled: $ hg perflrucachedict --size 4 --gets 1000000 --sets 1000000 --mixed 1000000 --costlimit 100 ! gets w/ cost limit ! wall 0.598737 comb 0.590000 user 0.590000 sys 0.000000 (best of 17) ! inserts w/ cost limit ! wall 1.694282 comb 1.700000 user 1.700000 sys 0.000000 (best of 6) ! mixed w/ cost limit ! wall 1.157655 comb 1.150000 user 1.150000 sys 0.000000 (best of 9) $ hg perflrucachedict --size 1000 --gets 1000000 --sets 1000000 --mixed 1000000 --costlimit 10000 ! gets w/ cost limit ! wall 0.598526 comb 0.600000 user 0.600000 sys 0.000000 (best of 17) ! inserts w/ cost limit ! wall 37.838315 comb 37.840000 user 37.840000 sys 0.000000 (best of 3) ! mixed w/ cost limit ! wall 18.060198 comb 18.060000 user 18.060000 sys 0.000000 (best of 3) $ hg perflrucachedict --size 1000 --gets 1000000 --sets 1000000 --mixed 1000000 --costlimit 10000 --mixedgetfreq 90 ! gets w/ cost limit ! wall 0.600024 comb 0.600000 user 0.600000 sys 0.000000 (best of 17) ! inserts w/ cost limit ! wall 37.154547 comb 37.120000 user 37.120000 sys 0.000000 (best of 3) ! mixed w/ cost limit ! wall 4.381602 comb 4.380000 user 4.370000 sys 0.010000 (best of 3) The functions we're benchmarking are slightly different, which could move numbers by a few milliseconds. But the slowdown on insert is too great to be explained by that. The slowness is due to insert heavy operations needing to call popoldest() repeatedly when the cache is at capacity. The next commit will address this. Differential Revision: https://phab.mercurial-scm.org/D4503
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11850
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
     1
  $ hg init rep
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
     2
  $ cd rep
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
     3
  $ mkdir dir
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
     4
  $ touch foo dir/bar
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
     5
  $ hg -v addremove
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
     6
  adding dir/bar
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
     7
  adding foo
12156
4c94b6d0fb1c tests: remove unneeded -d flags
Martin Geisler <mg@lazybytes.net>
parents: 11850
diff changeset
     8
  $ hg -v commit -m "add 1"
23749
a387b0390082 localrepo: show headline notes in commitctx before showing filenames
Mads Kiilerich <madski@unity3d.com>
parents: 23535
diff changeset
     9
  committing files:
11850
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    10
  dir/bar
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    11
  foo
23749
a387b0390082 localrepo: show headline notes in commitctx before showing filenames
Mads Kiilerich <madski@unity3d.com>
parents: 23535
diff changeset
    12
  committing manifest
a387b0390082 localrepo: show headline notes in commitctx before showing filenames
Mads Kiilerich <madski@unity3d.com>
parents: 23535
diff changeset
    13
  committing changelog
12156
4c94b6d0fb1c tests: remove unneeded -d flags
Martin Geisler <mg@lazybytes.net>
parents: 11850
diff changeset
    14
  committed changeset 0:6f7f953567a2
11850
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    15
  $ cd dir/
16874
8017ac7a0e8f test-addremove: remove bits about con.xml
Adrian Buehlmann <adrian@cadifra.com>
parents: 15444
diff changeset
    16
  $ touch ../foo_2 bar_2
11850
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    17
  $ hg -v addremove
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    18
  adding dir/bar_2
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    19
  adding foo_2
12156
4c94b6d0fb1c tests: remove unneeded -d flags
Martin Geisler <mg@lazybytes.net>
parents: 11850
diff changeset
    20
  $ hg -v commit -m "add 2"
23749
a387b0390082 localrepo: show headline notes in commitctx before showing filenames
Mads Kiilerich <madski@unity3d.com>
parents: 23535
diff changeset
    21
  committing files:
11850
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    22
  dir/bar_2
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    23
  foo_2
23749
a387b0390082 localrepo: show headline notes in commitctx before showing filenames
Mads Kiilerich <madski@unity3d.com>
parents: 23535
diff changeset
    24
  committing manifest
a387b0390082 localrepo: show headline notes in commitctx before showing filenames
Mads Kiilerich <madski@unity3d.com>
parents: 23535
diff changeset
    25
  committing changelog
16874
8017ac7a0e8f test-addremove: remove bits about con.xml
Adrian Buehlmann <adrian@cadifra.com>
parents: 15444
diff changeset
    26
  committed changeset 1:e65414bf35c5
23259
9f4778027bc2 addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 16912
diff changeset
    27
  $ cd ..
9f4778027bc2 addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 16912
diff changeset
    28
  $ hg forget foo
9f4778027bc2 addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 16912
diff changeset
    29
  $ hg -v addremove
9f4778027bc2 addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 16912
diff changeset
    30
  adding foo
23534
83bbedc16b3f addremove: warn when addremove fails to operate on a named path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23427
diff changeset
    31
  $ hg forget foo
33340
dd050fc04cc9 test-addremove: conditionalize output instead of tests
Matt Harbison <matt_harbison@yahoo.com>
parents: 24180
diff changeset
    32
24180
d8e0c591781c spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 23749
diff changeset
    33
  $ hg -v addremove nonexistent
35230
feecfefeba25 tests: add a substitution for ENOENT/ERROR_FILE_NOT_FOUND messages
Matt Harbison <matt_harbison@yahoo.com>
parents: 33340
diff changeset
    34
  nonexistent: $ENOENT$
23534
83bbedc16b3f addremove: warn when addremove fails to operate on a named path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23427
diff changeset
    35
  [1]
33340
dd050fc04cc9 test-addremove: conditionalize output instead of tests
Matt Harbison <matt_harbison@yahoo.com>
parents: 24180
diff changeset
    36
23259
9f4778027bc2 addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 16912
diff changeset
    37
  $ cd ..
2958
ff3ea21a981a addremove: add -s/--similarity option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1933
diff changeset
    38
23427
3778884197f0 addremove: print relative paths when called with -I/-X (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23259
diff changeset
    39
  $ hg init subdir
3778884197f0 addremove: print relative paths when called with -I/-X (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23259
diff changeset
    40
  $ cd subdir
3778884197f0 addremove: print relative paths when called with -I/-X (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23259
diff changeset
    41
  $ mkdir dir
3778884197f0 addremove: print relative paths when called with -I/-X (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23259
diff changeset
    42
  $ cd dir
3778884197f0 addremove: print relative paths when called with -I/-X (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23259
diff changeset
    43
  $ touch a.py
3778884197f0 addremove: print relative paths when called with -I/-X (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23259
diff changeset
    44
  $ hg addremove 'glob:*.py'
3778884197f0 addremove: print relative paths when called with -I/-X (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23259
diff changeset
    45
  adding a.py
3778884197f0 addremove: print relative paths when called with -I/-X (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23259
diff changeset
    46
  $ hg forget a.py
3778884197f0 addremove: print relative paths when called with -I/-X (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23259
diff changeset
    47
  $ hg addremove -I 'glob:*.py'
3778884197f0 addremove: print relative paths when called with -I/-X (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23259
diff changeset
    48
  adding a.py
3778884197f0 addremove: print relative paths when called with -I/-X (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23259
diff changeset
    49
  $ hg forget a.py
3778884197f0 addremove: print relative paths when called with -I/-X (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23259
diff changeset
    50
  $ hg addremove
3778884197f0 addremove: print relative paths when called with -I/-X (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23259
diff changeset
    51
  adding dir/a.py
3778884197f0 addremove: print relative paths when called with -I/-X (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23259
diff changeset
    52
  $ cd ..
3778884197f0 addremove: print relative paths when called with -I/-X (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 23259
diff changeset
    53
11850
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    54
  $ hg init sim
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    55
  $ cd sim
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    56
  $ echo a > a
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    57
  $ echo a >> a
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    58
  $ echo a >> a
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    59
  $ echo c > c
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    60
  $ hg commit -Ama
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    61
  adding a
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    62
  adding c
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    63
  $ mv a b
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    64
  $ rm c
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    65
  $ echo d > d
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    66
  $ hg addremove -n -s 50 # issue 1696
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    67
  removing a
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    68
  adding b
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    69
  removing c
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    70
  adding d
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    71
  recording removal of a as rename to b (100% similar)
39088
ad88726d6982 addremove: add labels for messages about added and removed files
Boris Feld <boris.feld@octobus.net>
parents: 35230
diff changeset
    72
  $ hg addremove -ns 50 --color debug
ad88726d6982 addremove: add labels for messages about added and removed files
Boris Feld <boris.feld@octobus.net>
parents: 35230
diff changeset
    73
  [addremove.removed ui.status|removing a]
ad88726d6982 addremove: add labels for messages about added and removed files
Boris Feld <boris.feld@octobus.net>
parents: 35230
diff changeset
    74
  [addremove.added ui.status|adding b]
ad88726d6982 addremove: add labels for messages about added and removed files
Boris Feld <boris.feld@octobus.net>
parents: 35230
diff changeset
    75
  [addremove.removed ui.status|removing c]
ad88726d6982 addremove: add labels for messages about added and removed files
Boris Feld <boris.feld@octobus.net>
parents: 35230
diff changeset
    76
  [addremove.added ui.status|adding d]
ad88726d6982 addremove: add labels for messages about added and removed files
Boris Feld <boris.feld@octobus.net>
parents: 35230
diff changeset
    77
  [ ui.status|recording removal of a as rename to b (100% similar)]
11850
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    78
  $ hg addremove -s 50
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    79
  removing a
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    80
  adding b
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    81
  removing c
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    82
  adding d
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    83
  recording removal of a as rename to b (100% similar)
54dbf16b401f tests: unify test-addremove
Martin Geisler <mg@lazybytes.net>
parents: 8990
diff changeset
    84
  $ hg commit -mb
23259
9f4778027bc2 addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 16912
diff changeset
    85
  $ cp b c
9f4778027bc2 addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 16912
diff changeset
    86
  $ hg forget b
9f4778027bc2 addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 16912
diff changeset
    87
  $ hg addremove -s 50
9f4778027bc2 addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 16912
diff changeset
    88
  adding b
9f4778027bc2 addremove: add back forgotten files (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents: 16912
diff changeset
    89
  adding c
23535
72c23fa4f52f commit: abort if --addremove is specified, but fails
Matt Harbison <matt_harbison@yahoo.com>
parents: 23534
diff changeset
    90
72c23fa4f52f commit: abort if --addremove is specified, but fails
Matt Harbison <matt_harbison@yahoo.com>
parents: 23534
diff changeset
    91
  $ rm c
33340
dd050fc04cc9 test-addremove: conditionalize output instead of tests
Matt Harbison <matt_harbison@yahoo.com>
parents: 24180
diff changeset
    92
24180
d8e0c591781c spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 23749
diff changeset
    93
  $ hg ci -A -m "c" nonexistent
35230
feecfefeba25 tests: add a substitution for ENOENT/ERROR_FILE_NOT_FOUND messages
Matt Harbison <matt_harbison@yahoo.com>
parents: 33340
diff changeset
    94
  nonexistent: $ENOENT$
23535
72c23fa4f52f commit: abort if --addremove is specified, but fails
Matt Harbison <matt_harbison@yahoo.com>
parents: 23534
diff changeset
    95
  abort: failed to mark all new/missing files as added/removed
72c23fa4f52f commit: abort if --addremove is specified, but fails
Matt Harbison <matt_harbison@yahoo.com>
parents: 23534
diff changeset
    96
  [255]
33340
dd050fc04cc9 test-addremove: conditionalize output instead of tests
Matt Harbison <matt_harbison@yahoo.com>
parents: 24180
diff changeset
    97
23535
72c23fa4f52f commit: abort if --addremove is specified, but fails
Matt Harbison <matt_harbison@yahoo.com>
parents: 23534
diff changeset
    98
  $ hg st
72c23fa4f52f commit: abort if --addremove is specified, but fails
Matt Harbison <matt_harbison@yahoo.com>
parents: 23534
diff changeset
    99
  ! c
16912
6ef3107c661e tests: cleanup of tests that got lost in their own nested directories
Mads Kiilerich <mads@kiilerich.com>
parents: 16874
diff changeset
   100
  $ cd ..