diff tests/test-audit-path.t @ 52060:8b7123c8947b

update: add a Rust fast-path when updating from null (and clean) This case is easy to detect and we have all we need to generate a valid working copy and dirstate entirely in Rust, which speeds things up considerably: On my machine updating a repo of ~300k files goes from 10.00s down to 4.2s, all while consuming 50% less system time, with all caches hot. Something to note is that further improvements will probably happen with the upcoming `InnerRevlog` series that does smarter mmap hanlding, especially for filelogs. Here are benchmark numbers on a machine with only 4 cores (and no SMT enabled) ``` ### data-env-vars.name = heptapod-public-2024-03-25-ds2-pnm # benchmark.name = hg.command.update # bin-env-vars.hg.py-re2-module = default # bin-env-vars.hg.changeset.node = <this change> # benchmark.variants.atomic-update = no # benchmark.variants.scenario = null-to-tip # benchmark.variants.worker = default default: 5.328762 ~~~~~ rust: 1.308654 (-75.44%, -4.02) ### data-env-vars.name = mercurial-devel-2024-03-22-ds2-pnm # benchmark.name = hg.command.update # bin-env-vars.hg.py-re2-module = default # bin-env-vars.hg.changeset.node = <this change> # benchmark.variants.atomic-update = no # benchmark.variants.scenario = null-to-tip # benchmark.variants.worker = default default: 1.693271 ~~~~~ rust: 1.151053 (-32.02%, -0.54) ### data-env-vars.name = mozilla-unified-2024-03-22-ds2-pnm # benchmark.name = hg.command.update # bin-env-vars.hg.py-re2-module = default # bin-env-vars.hg.changeset.node = <this change> # benchmark.variants.atomic-update = no # benchmark.variants.scenario = null-to-tip # benchmark.variants.worker = default default: 38.901613 ~~~~~ rust: 11.637880 (-70.08%, -27.26) ### data-env-vars.name = netbsd-xsrc-public-2024-09-19-ds2-pnm # benchmark.name = hg.command.update # bin-env-vars.hg.py-re2-module = default # bin-env-vars.hg.changeset.node = <this change> # benchmark.variants.atomic-update = no # benchmark.variants.scenario = null-to-tip # benchmark.variants.worker = default default: 4.793727 ~~~~~ rust: 1.505905 (-68.59%, -3.29) ```
author Raphaël Gomès <rgomes@octobus.net>
date Tue, 01 Oct 2024 13:49:11 +0200
parents 9b14a8cf4f78
children d12dc9139135
line wrap: on
line diff
--- a/tests/test-audit-path.t	Wed Oct 16 19:14:30 2024 +0200
+++ b/tests/test-audit-path.t	Tue Oct 01 13:49:11 2024 +0200
@@ -91,7 +91,8 @@
   $ hg manifest -r0
   .hg/test
   $ hg update -Cr0
-  abort: path contains illegal component: .hg/test
+  abort: path contains illegal component: .hg/test (no-rust !)
+  abort: path '.hg/test' is inside the '.hg' folder (rust !)
   [10]
 
 attack foo/.hg/test
@@ -107,6 +108,7 @@
   $ hg manifest -r2
   back
   back/test
+
 #if symlink
   $ hg update -Cr2
   abort: path 'back/test' traverses symbolic link 'back'
@@ -220,17 +222,30 @@
 'a' and 'a/b' are taken as good paths. still applyupdates() should fail.
 
   $ hg up -qC null
+#if rust
+  $ hg up 1
+  abort: path 'a/*' traverses symbolic link 'a'
+  [10]
+#endif
+
+#if no-rust
   $ hg up 1
   abort: path 'a/b' traverses symbolic link 'a'
   [255]
+#endif
   $ ls ../update-symlink-out
 
 try branch update replacing directory with symlink, and its content: the
 path 'a' is audited as a directory first, which should be audited again as
 a symlink.
 
+#if rust
+  $ rm -rf a
+#else
   $ rm -f a
+#endif
   $ hg up -qC 2
+
   $ hg up 1
   abort: path 'a/b' traverses symbolic link 'a'
   [255]