Skip to content

Implement an IO function to mirror a directory using hardlinks#2276

Merged
jviotti merged 1 commit intomainfrom
hardlink-mirror
Feb 26, 2026
Merged

Implement an IO function to mirror a directory using hardlinks#2276
jviotti merged 1 commit intomainfrom
hardlink-mirror

Conversation

@jviotti
Copy link
Member

@jviotti jviotti commented Feb 26, 2026

Signed-off-by: Juan Cruz Viotti jv@jviotti.com

@augmentcode
Copy link

augmentcode bot commented Feb 26, 2026

🤖 Augment PR Summary

Summary: This PR introduces a new I/O utility to mirror an on-disk directory tree by creating directories and hard-linking regular files.

Changes:

  • Adds the exported API sourcemeta::core::hardlink_directory(source, destination) in src/lang/io/include/sourcemeta/core/io.h.
  • Implements the function in src/lang/io/io.cc using std::filesystem::recursive_directory_iterator, creating directories and hard-linking regular files.
  • Adds a new unit test file test/io/io_hardlink_directory_test.cc covering structure mirroring, link/inode sharing, unlink+rewrite independence, empty sources, and deep nesting.
  • Updates the IO test target to include the new test and define BUILD_DIRECTORY for filesystem-backed tests.
  • Adjusts TemporaryDirectory tests to use BUILD_DIRECTORY instead of the OS temp directory, improving hermeticity and avoiding environment-specific temp path issues.

Technical Notes: Hard links require source and destination to be on the same filesystem; the helper links only regular files and creates destination directories as needed.

🤖 Was this summary useful? React with 👍 or 👎

Copy link

@augmentcode augmentcode bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review completed. 3 suggestions posted.

Fix All in Augment

Comment augment review to trigger a new review at any time.

assert(std::filesystem::is_directory(source));
assert(!std::filesystem::exists(destination) ||
std::filesystem::is_directory(destination));
std::filesystem::create_directories(destination);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hardlink_directory creates destination before walking source; if destination is inside source (or equal to it), the recursive iterator can traverse the newly created tree and lead to unbounded recursion/work. Consider explicitly rejecting that case.

Severity: high

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

std::filesystem::recursive_directory_iterator{source}) {
const auto target{destination /
std::filesystem::relative(entry.path(), source)};
if (entry.is_directory()) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

directory_entry::is_directory() / is_regular_file() follow symlinks, so a symlink-to-dir/file could be treated as a real dir/file and end up mirrored incorrectly (e.g., creating a directory instead of preserving the symlink). If symlinks should be skipped/preserved, this likely needs an explicit is_symlink()/symlink_status() check.

Severity: medium

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

if (entry.is_directory()) {
std::filesystem::create_directories(target);
} else if (entry.is_regular_file()) {
std::filesystem::create_hard_link(entry.path(), target);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since destination is allowed to already exist, create_hard_link will throw if target already exists (non-empty destination or re-run). It might be worth documenting whether destination must be empty or handling collisions deterministically.

Severity: low

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

Copy link

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 5 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="src/lang/io/io.cc">

<violation number="1" location="src/lang/io/io.cc:55">
P1: Prevent mirroring into a destination that is inside (or the same as) the source; otherwise the recursive iterator will walk the newly created destination and repeatedly nest copies, leading to unbounded recursion/disk usage.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (linux/llvm)

Details
Benchmark suite Current: 5a57ad1 Previous: f4f655d Ratio
Regex_Lower_S_Or_Upper_S_Asterisk 3.111103930164889 ns/iter 3.1172141592099334 ns/iter 1.00
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 3.110523583742918 ns/iter 3.1100564672847493 ns/iter 1.00
Regex_Period_Asterisk 3.119309553697485 ns/iter 3.109813091865993 ns/iter 1.00
Regex_Group_Period_Asterisk_Group 3.1094791896912333 ns/iter 3.111108684831945 ns/iter 1.00
Regex_Period_Plus 2.810643887385082 ns/iter 3.1198149861860784 ns/iter 0.90
Regex_Period 2.8290720803560565 ns/iter 3.1112110769962245 ns/iter 0.91
Regex_Caret_Period_Plus_Dollar 2.8765003104991234 ns/iter 3.111223474058509 ns/iter 0.92
Regex_Caret_Group_Period_Plus_Group_Dollar 2.832203751099353 ns/iter 3.110424942990577 ns/iter 0.91
Regex_Caret_Period_Asterisk_Dollar 2.800182633495936 ns/iter 3.109763825711252 ns/iter 0.90
Regex_Caret_Group_Period_Asterisk_Group_Dollar 2.798495810818994 ns/iter 3.1130399493176237 ns/iter 0.90
Regex_Caret_X_Hyphen 10.64408589766149 ns/iter 13.070853800445347 ns/iter 0.81
Regex_Period_Md_Dollar 27.25252696641725 ns/iter 27.58323147265174 ns/iter 0.99
Regex_Caret_Slash_Period_Asterisk 6.547421135232105 ns/iter 6.221794406980572 ns/iter 1.05
Regex_Caret_Period_Range_Dollar 4.046199310191587 ns/iter 3.1107173280296254 ns/iter 1.30
Regex_Nested_Backtrack 49.821706637306654 ns/iter 67.30726220788394 ns/iter 0.74
JSON_Array_Of_Objects_Unique 430.91359387058986 ns/iter 448.84102971735854 ns/iter 0.96
JSON_Parse_1 6485.565984078924 ns/iter 6464.888617976841 ns/iter 1.00
JSON_Parse_Real 11726.920190800833 ns/iter 11319.311418516962 ns/iter 1.04
JSON_Parse_Decimal 12003.287226752178 ns/iter 13046.383373463112 ns/iter 0.92
JSON_Parse_Schema_ISO_Language 3619172.2135416884 ns/iter 3662649.743455285 ns/iter 0.99
JSON_Fast_Hash_Helm_Chart_Lock 61.625779049304356 ns/iter 61.2941383177788 ns/iter 1.01
JSON_Equality_Helm_Chart_Lock 172.26347882803108 ns/iter 182.1147147073309 ns/iter 0.95
JSON_Divisible_By_Decimal 618.268295415938 ns/iter 594.884317731431 ns/iter 1.04
JSON_String_Equal/10 6.551028916921601 ns/iter 7.162659975335772 ns/iter 0.91
JSON_String_Equal/100 7.169143044728795 ns/iter 7.791722962247808 ns/iter 0.92
JSON_String_Equal_Small_By_Perfect_Hash/10 0.9355273247066294 ns/iter 0.9389600744095493 ns/iter 1.00
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 10.269355712250693 ns/iter 14.616271196763 ns/iter 0.70
JSON_String_Fast_Hash/10 2.80047173471714 ns/iter 2.4890095785990947 ns/iter 1.13
JSON_String_Fast_Hash/100 2.801063085428809 ns/iter 2.489292034368238 ns/iter 1.13
JSON_String_Key_Hash/10 2.1814259401384843 ns/iter 2.747857289520358 ns/iter 0.79
JSON_String_Key_Hash/100 6.533747713225301 ns/iter 9.053698379112516 ns/iter 0.72
JSON_Object_Defines_Miss_Same_Length 3.738219884497462 ns/iter 3.7829984499915934 ns/iter 0.99
JSON_Object_Defines_Miss_Too_Small 3.7399083452822115 ns/iter 3.7382095420090815 ns/iter 1.00
JSON_Object_Defines_Miss_Too_Large 3.744293973407715 ns/iter 3.736837879352388 ns/iter 1.00
Pointer_Object_Traverse 44.26575756017891 ns/iter 45.04948347106831 ns/iter 0.98
Pointer_Object_Try_Traverse 53.46944129204382 ns/iter 56.3936321365806 ns/iter 0.95
Pointer_Push_Back_Pointer_To_Weak_Pointer 309.24052750229606 ns/iter 302.55917392668044 ns/iter 1.02
Pointer_Walker_Schema_ISO_Language 3237916.490909046 ns/iter 3110357.637168279 ns/iter 1.04
Schema_Frame_WoT_References 4857076.812499707 ns/iter 4829278.13793124 ns/iter 1.01
Schema_Frame_OMC_References 21260322.771429077 ns/iter 19985477.885714836 ns/iter 1.06
Schema_Frame_OMC_Locations 19530698.648647584 ns/iter 18332774.8684196 ns/iter 1.07
Schema_Frame_ISO_Language_Locations 103902104.00000417 ns/iter 102940938.33334728 ns/iter 1.01
Schema_Frame_KrakenD_References 42854211.82353008 ns/iter 38421191.05555892 ns/iter 1.12
Schema_Frame_KrakenD_Reachable 596533343.9999086 ns/iter 590997132.0000978 ns/iter 1.01
Schema_Iterator_ISO_Language 2428045.5993028525 ns/iter 2360705.7676765015 ns/iter 1.03
Schema_Frame_ISO_Language_Locations_To_JSON 132453738.75000155 ns/iter 134375696.00000644 ns/iter 0.99
Schema_Tracker_ISO_Language 29327900.333332952 ns/iter 27674098.833334897 ns/iter 1.06
Schema_Tracker_ISO_Language_To_JSON 25114431.481479526 ns/iter 25250267.296293583 ns/iter 0.99
Schema_Format_ISO_Language_To_JSON 108712372.49998938 ns/iter 109824641.8333512 ns/iter 0.99
Schema_Bundle_Meta_2020_12 1659509.6753561853 ns/iter 1652251.8042960751 ns/iter 1.00
Schema_Frame_Many_Resources_References 372034892.49998254 ns/iter 366802886.00001633 ns/iter 1.01
Alterschema_Check_Readibility_ISO_Language_Set_3 216863232.33332887 ns/iter 218202785.6666385 ns/iter 0.99
Alterschema_Check_Readibility_OMC 32354035.28571537 ns/iter 32177820.86363224 ns/iter 1.01
Alterschema_Apply_Readibility_KrakenD 587324747.9999008 ns/iter 603704688.9999828 ns/iter 0.97
EditorSchema_ForEditor_EmbeddedResources 13507492.980767649 ns/iter 13635575.058811793 ns/iter 0.99
URITemplateRouter_Create 17282.401044988826 ns/iter 16384.529010316826 ns/iter 1.05
URITemplateRouter_Match 183.01647172864435 ns/iter 190.0155686612536 ns/iter 0.96
URITemplateRouterView_Restore 6789.056927244955 ns/iter 6911.057347634993 ns/iter 0.98
URITemplateRouterView_Match 153.22395304231833 ns/iter 143.50491508535978 ns/iter 1.07

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (macos/llvm)

Details
Benchmark suite Current: 5a57ad1 Previous: f4f655d Ratio
Regex_Lower_S_Or_Upper_S_Asterisk 1.7205797512538308 ns/iter 1.844746472720158 ns/iter 0.93
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 1.6767802535756366 ns/iter 2.2476097639278505 ns/iter 0.75
Regex_Period_Asterisk 1.6992594159814651 ns/iter 1.864787113201521 ns/iter 0.91
Regex_Group_Period_Asterisk_Group 2.005591808363679 ns/iter 2.1498487204275825 ns/iter 0.93
Regex_Period_Plus 2.570804184858387 ns/iter 2.160578781058244 ns/iter 1.19
Regex_Period 2.4113244897203394 ns/iter 2.1097227303620443 ns/iter 1.14
Regex_Caret_Period_Plus_Dollar 2.5395059857698965 ns/iter 2.227344376776958 ns/iter 1.14
Regex_Caret_Group_Period_Plus_Group_Dollar 2.6443627581482514 ns/iter 2.224463803567951 ns/iter 1.19
Regex_Caret_Period_Asterisk_Dollar 2.0375222090258593 ns/iter 1.989441020016859 ns/iter 1.02
Regex_Caret_Group_Period_Asterisk_Group_Dollar 2.1889502204626785 ns/iter 2.143159077332581 ns/iter 1.02
Regex_Caret_X_Hyphen 7.647346777807044 ns/iter 7.848758304714395 ns/iter 0.97
Regex_Period_Md_Dollar 24.45787932554691 ns/iter 34.34207291159958 ns/iter 0.71
Regex_Caret_Slash_Period_Asterisk 5.886628022454927 ns/iter 9.717284647585037 ns/iter 0.61
Regex_Caret_Period_Range_Dollar 2.092814724818934 ns/iter 2.9511714233862274 ns/iter 0.71
Regex_Nested_Backtrack 28.872626899890644 ns/iter 50.95998884700925 ns/iter 0.57
JSON_Array_Of_Objects_Unique 367.9876860708655 ns/iter 572.6334708582962 ns/iter 0.64
JSON_Parse_1 4494.297924930186 ns/iter 8107.412520894573 ns/iter 0.55
JSON_Parse_Real 7125.2219701824415 ns/iter 11046.909360178486 ns/iter 0.64
JSON_Parse_Decimal 8800.54846306458 ns/iter 11983.07338376348 ns/iter 0.73
JSON_Parse_Schema_ISO_Language 4257331.340425557 ns/iter 6345856.696968481 ns/iter 0.67
JSON_Fast_Hash_Helm_Chart_Lock 64.2058183063613 ns/iter 82.18877405729341 ns/iter 0.78
JSON_Equality_Helm_Chart_Lock 142.1192442839929 ns/iter 161.90489217832416 ns/iter 0.88
JSON_Divisible_By_Decimal 450.1781830361545 ns/iter 506.9292275486708 ns/iter 0.89
JSON_String_Equal/10 6.757844496672762 ns/iter 6.347026067776119 ns/iter 1.06
JSON_String_Equal/100 7.029892047842039 ns/iter 5.890762119284736 ns/iter 1.19
JSON_String_Equal_Small_By_Perfect_Hash/10 0.9298901945047312 ns/iter 0.763064161996621 ns/iter 1.22
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 4.137390495539489 ns/iter 3.3882620731106172 ns/iter 1.22
JSON_String_Fast_Hash/10 2.9275862066300373 ns/iter 2.377703876374044 ns/iter 1.23
JSON_String_Fast_Hash/100 2.4567223820328747 ns/iter 2.0125323493567717 ns/iter 1.22
JSON_String_Key_Hash/10 1.976594288685461 ns/iter 1.315072246393345 ns/iter 1.50
JSON_String_Key_Hash/100 3.36863297669564 ns/iter 2.1640995470057494 ns/iter 1.56
JSON_Object_Defines_Miss_Same_Length 2.933606722596829 ns/iter 2.4652240523143067 ns/iter 1.19
JSON_Object_Defines_Miss_Too_Small 2.911243402114783 ns/iter 2.4866682591478515 ns/iter 1.17
JSON_Object_Defines_Miss_Too_Large 2.785235229300232 ns/iter 2.472302024046907 ns/iter 1.13
Pointer_Object_Traverse 19.113127399140787 ns/iter 18.895185719354714 ns/iter 1.01
Pointer_Object_Try_Traverse 26.60838937147772 ns/iter 28.178961549178318 ns/iter 0.94
Pointer_Push_Back_Pointer_To_Weak_Pointer 163.53474419024053 ns/iter 194.80482641741327 ns/iter 0.84
Pointer_Walker_Schema_ISO_Language 4912104.79104503 ns/iter 5966304.7450982835 ns/iter 0.82
Schema_Frame_WoT_References 4654454.006493756 ns/iter 6113225.543478383 ns/iter 0.76
Schema_Frame_OMC_References 24072790.206897195 ns/iter 29597737.874998603 ns/iter 0.81
Schema_Frame_OMC_Locations 22217853.448276807 ns/iter 26219540.076917488 ns/iter 0.85
Schema_Frame_ISO_Language_Locations 82379476.88889511 ns/iter 94280944.33330141 ns/iter 0.87
Schema_Frame_KrakenD_References 45326199.999999516 ns/iter 57328919.846161 ns/iter 0.79
Schema_Frame_KrakenD_Reachable 404496020.50006205 ns/iter 632233583.0000156 ns/iter 0.64
Schema_Iterator_ISO_Language 2215195.9050850533 ns/iter 3235104.343220536 ns/iter 0.68
Schema_Frame_ISO_Language_Locations_To_JSON 101616434.57143198 ns/iter 94011916.571422 ns/iter 1.08
Schema_Tracker_ISO_Language 43413340.705883995 ns/iter 31849534.090910807 ns/iter 1.36
Schema_Tracker_ISO_Language_To_JSON 22827391.222222105 ns/iter 14095422.340910153 ns/iter 1.62
Schema_Format_ISO_Language_To_JSON 127742423.500005 ns/iter 79117812.37504555 ns/iter 1.61
Schema_Bundle_Meta_2020_12 1597273.9107111492 ns/iter 1250164.6660941 ns/iter 1.28
Schema_Frame_Many_Resources_References 467979708.50002456 ns/iter 284482333.49990916 ns/iter 1.65
Alterschema_Check_Readibility_ISO_Language_Set_3 188114875.000025 ns/iter 144747258.40000245 ns/iter 1.30
Alterschema_Check_Readibility_OMC 42149886.55556024 ns/iter 31971657.608694486 ns/iter 1.32
Alterschema_Apply_Readibility_KrakenD 677654207.9999217 ns/iter 471833145.5001135 ns/iter 1.44
EditorSchema_ForEditor_EmbeddedResources 12783498.384609314 ns/iter 10040978.614275835 ns/iter 1.27
URITemplateRouter_Create 17298.725525081703 ns/iter 16168.440763404855 ns/iter 1.07
URITemplateRouter_Match 175.2402826439465 ns/iter 188.34631887579002 ns/iter 0.93
URITemplateRouterView_Restore 12889.235752144034 ns/iter 13825.171668475426 ns/iter 0.93
URITemplateRouterView_Match 127.27955405827998 ns/iter 140.28052140543454 ns/iter 0.91

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (windows/msvc)

Details
Benchmark suite Current: 5a57ad1 Previous: f4f655d Ratio
Regex_Lower_S_Or_Upper_S_Asterisk 4.126355543082546 ns/iter 4.132108324047456 ns/iter 1.00
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 4.1016429222762065 ns/iter 4.098135044642452 ns/iter 1.00
Regex_Period_Asterisk 4.731492867703999 ns/iter 4.761677678571021 ns/iter 0.99
Regex_Group_Period_Asterisk_Group 4.41539952040829 ns/iter 4.4291731250012845 ns/iter 1.00
Regex_Period_Plus 5.047631742197707 ns/iter 5.0495249999994485 ns/iter 1.00
Regex_Period 5.045608000000357 ns/iter 5.068198000001303 ns/iter 1.00
Regex_Caret_Period_Plus_Dollar 4.733765045698862 ns/iter 4.758532376692641 ns/iter 0.99
Regex_Caret_Group_Period_Plus_Group_Dollar 4.421788749999678 ns/iter 4.438898837304047 ns/iter 1.00
Regex_Caret_Period_Asterisk_Dollar 4.422986127532498 ns/iter 4.426588124999853 ns/iter 1.00
Regex_Caret_Group_Period_Asterisk_Group_Dollar 4.10017238656355 ns/iter 4.115813355564276 ns/iter 1.00
Regex_Caret_X_Hyphen 7.260406250001747 ns/iter 7.328664062501591 ns/iter 0.99
Regex_Period_Md_Dollar 35.62325712752302 ns/iter 36.00392252676101 ns/iter 0.99
Regex_Caret_Slash_Period_Asterisk 6.951165178571322 ns/iter 7.005639508929866 ns/iter 0.99
Regex_Caret_Period_Range_Dollar 4.110208846625397 ns/iter 4.143116850829377 ns/iter 0.99
Regex_Nested_Backtrack 102.72954687501112 ns/iter 99.7784218749942 ns/iter 1.03
JSON_Array_Of_Objects_Unique 491.68480000003 ns/iter 495.52220000009584 ns/iter 0.99
JSON_Parse_1 8877.00054910639 ns/iter 9069.266208632387 ns/iter 0.98
JSON_Parse_Real 16105.64285714235 ns/iter 15835.676339282907 ns/iter 1.02
JSON_Parse_Decimal 16741.343580422792 ns/iter 16549.35791980633 ns/iter 1.01
JSON_Parse_Schema_ISO_Language 6159328.571430122 ns/iter 6440273.214287068 ns/iter 0.96
JSON_Fast_Hash_Helm_Chart_Lock 71.69137500000033 ns/iter 69.92586607142113 ns/iter 1.03
JSON_Equality_Helm_Chart_Lock 263.92338008586034 ns/iter 261.06601388683737 ns/iter 1.01
JSON_Divisible_By_Decimal 1168.9135937498208 ns/iter 1179.3098437497208 ns/iter 0.99
JSON_String_Equal/10 12.27131785714164 ns/iter 12.368448214289174 ns/iter 0.99
JSON_String_Equal/100 12.971637499999492 ns/iter 13.284735714287471 ns/iter 0.98
JSON_String_Equal_Small_By_Perfect_Hash/10 1.8892775012652605 ns/iter 1.9032760731275487 ns/iter 0.99
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 12.576216071429208 ns/iter 13.331869642858658 ns/iter 0.94
JSON_String_Fast_Hash/10 3.790333386089603 ns/iter 3.88306981449492 ns/iter 0.98
JSON_String_Fast_Hash/100 3.861064174106587 ns/iter 4.064055944757999 ns/iter 0.95
JSON_String_Key_Hash/10 4.104166748401259 ns/iter 4.464919484612912 ns/iter 0.92
JSON_String_Key_Hash/100 16.597645089286214 ns/iter 14.436482078406222 ns/iter 1.15
JSON_Object_Defines_Miss_Same_Length 3.525131445384446 ns/iter 3.519448520500817 ns/iter 1.00
JSON_Object_Defines_Miss_Too_Small 5.029883000001973 ns/iter 5.1146517857136224 ns/iter 0.98
JSON_Object_Defines_Miss_Too_Large 4.0867136680114236 ns/iter 4.189221158844105 ns/iter 0.98
Pointer_Object_Traverse 52.96736000000237 ns/iter 53.405019999991055 ns/iter 0.99
Pointer_Object_Try_Traverse 72.72015625000095 ns/iter 74.61685267856463 ns/iter 0.97
Pointer_Push_Back_Pointer_To_Weak_Pointer 169.51126513492966 ns/iter 150.1090357142841 ns/iter 1.13
Pointer_Walker_Schema_ISO_Language 11500503.124999285 ns/iter 12837399.999999175 ns/iter 0.90
Schema_Frame_WoT_References 9826202.66666648 ns/iter 10369922.666668572 ns/iter 0.95
Schema_Frame_OMC_References 43043594.11765504 ns/iter 45746227.272729814 ns/iter 0.94
Schema_Frame_OMC_Locations 39477683.33332786 ns/iter 41361375.000008136 ns/iter 0.95
Schema_Frame_ISO_Language_Locations 197279900.00001228 ns/iter 212467299.99999538 ns/iter 0.93
Schema_Frame_KrakenD_References 89654628.57141964 ns/iter 94433971.42857586 ns/iter 0.95
Schema_Frame_KrakenD_Reachable 509395600.0000617 ns/iter 542267799.9999906 ns/iter 0.94
Schema_Iterator_ISO_Language 4203395.783132505 ns/iter 4542705.000000069 ns/iter 0.93
Schema_Frame_ISO_Language_Locations_To_JSON 253737000.00000098 ns/iter 264814166.66668642 ns/iter 0.96
Schema_Tracker_ISO_Language 45745790.90907801 ns/iter 49791460.00000583 ns/iter 0.92
Schema_Tracker_ISO_Language_To_JSON 52207439.999983765 ns/iter 56527970.00000192 ns/iter 0.92
Schema_Format_ISO_Language_To_JSON 187551050.00008142 ns/iter 206645666.6666454 ns/iter 0.91
Schema_Bundle_Meta_2020_12 2773116.6666576494 ns/iter 2841964.830510841 ns/iter 0.98
Schema_Frame_Many_Resources_References 1454600899.9998322 ns/iter 1536525199.9999146 ns/iter 0.95
Alterschema_Check_Readibility_ISO_Language_Set_3 314779499.999986 ns/iter 336517800.0000242 ns/iter 0.94
Alterschema_Check_Readibility_OMC 57984790.90909 ns/iter 62817936.36363049 ns/iter 0.92
Alterschema_Apply_Readibility_KrakenD 985114500.0000088 ns/iter 1085041700.000147 ns/iter 0.91
EditorSchema_ForEditor_EmbeddedResources 27375343.99998367 ns/iter 30114440.9091049 ns/iter 0.91
URITemplateRouter_Create 22435.915625003134 ns/iter 22435.892456558086 ns/iter 1.00
URITemplateRouter_Match 207.82362018645225 ns/iter 216.87399999997584 ns/iter 0.96
URITemplateRouterView_Restore 30619.129464294507 ns/iter 31583.281249995467 ns/iter 0.97
URITemplateRouterView_Match 153.44450892855426 ns/iter 157.21633928572084 ns/iter 0.98

This comment was automatically generated by workflow using github-action-benchmark.

@jviotti jviotti merged commit 084769e into main Feb 26, 2026
12 checks passed
@jviotti jviotti deleted the hardlink-mirror branch February 26, 2026 17:49
Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (linux/gcc)

Details
Benchmark suite Current: 5a57ad1 Previous: 932001d Ratio
URITemplateRouter_Create 14874.058669393056 ns/iter 14788.961016841573 ns/iter 1.01
URITemplateRouter_Match 153.36909782915538 ns/iter 152.9655834283247 ns/iter 1.00
URITemplateRouterView_Restore 7958.934883244426 ns/iter 8384.390101033496 ns/iter 0.95
URITemplateRouterView_Match 129.8021638225026 ns/iter 128.14765925448395 ns/iter 1.01
EditorSchema_ForEditor_EmbeddedResources 14331955.79594045 ns/iter 14818392.541675014 ns/iter 0.97
Alterschema_Check_Readibility_ISO_Language_Set_3 220155779.99998942 ns/iter 218410956.9999843 ns/iter 1.01
Alterschema_Check_Readibility_OMC 36288081.68420954 ns/iter 35583898.30000124 ns/iter 1.02
Alterschema_Apply_Readibility_KrakenD 666697526.0002346 ns/iter 635134483.9997637 ns/iter 1.05
Schema_Frame_WoT_References 5394275.5877855895 ns/iter 5458533.141732041 ns/iter 0.99
Schema_Frame_OMC_References 23007421.793103088 ns/iter 22727141.225804217 ns/iter 1.01
Schema_Frame_OMC_Locations 21530280.437502824 ns/iter 21290662.42424194 ns/iter 1.01
Schema_Frame_ISO_Language_Locations 108120714.16667853 ns/iter 108904241.33333455 ns/iter 0.99
Schema_Frame_KrakenD_References 43822130.06249458 ns/iter 44164804.31248715 ns/iter 0.99
Schema_Frame_KrakenD_Reachable 620081922.9998161 ns/iter 631160464.9997662 ns/iter 0.98
Schema_Iterator_ISO_Language 2757326.953488602 ns/iter 2764350.6653540377 ns/iter 1.00
Schema_Frame_ISO_Language_Locations_To_JSON 256120327.66662195 ns/iter 256593512.6666924 ns/iter 1.00
Schema_Tracker_ISO_Language 33674034.00000057 ns/iter 30701207.695647493 ns/iter 1.10
Schema_Tracker_ISO_Language_To_JSON 32585462.81817458 ns/iter 30719590.545448806 ns/iter 1.06
Schema_Format_ISO_Language_To_JSON 117858871.50002356 ns/iter 117612424.6666935 ns/iter 1.00
Schema_Bundle_Meta_2020_12 1891654.3062298382 ns/iter 1914095.7486304296 ns/iter 0.99
Schema_Frame_Many_Resources_References 395191036.0000284 ns/iter 394910807.4999685 ns/iter 1.00
Pointer_Object_Traverse 27.571344365505528 ns/iter 27.562737372986717 ns/iter 1.00
Pointer_Object_Try_Traverse 27.272505996987018 ns/iter 27.282953745389925 ns/iter 1.00
Pointer_Push_Back_Pointer_To_Weak_Pointer 157.3659990573837 ns/iter 162.9100280082002 ns/iter 0.97
Pointer_Walker_Schema_ISO_Language 3613849.5706800977 ns/iter 3712010.7424241244 ns/iter 0.97
JSON_Array_Of_Objects_Unique 423.3066090453622 ns/iter 410.84844709782794 ns/iter 1.03
JSON_Parse_1 8347.24444073693 ns/iter 8464.043888962962 ns/iter 0.99
JSON_Parse_Real 12699.595793124448 ns/iter 12634.15563039969 ns/iter 1.01
JSON_Parse_Decimal 18656.344974080745 ns/iter 18688.23326826741 ns/iter 1.00
JSON_Parse_Schema_ISO_Language 4706526.906040882 ns/iter 4726389.580000615 ns/iter 1.00
JSON_Fast_Hash_Helm_Chart_Lock 61.45584097458682 ns/iter 53.26228830958655 ns/iter 1.15
JSON_Equality_Helm_Chart_Lock 157.0414729323014 ns/iter 159.9301232420685 ns/iter 0.98
JSON_Divisible_By_Decimal 585.652654645258 ns/iter 579.8566887271725 ns/iter 1.01
JSON_String_Equal/10 6.312399612946072 ns/iter 6.320354984765237 ns/iter 1.00
JSON_String_Equal/100 6.932963447124537 ns/iter 6.9376031775535765 ns/iter 1.00
JSON_String_Equal_Small_By_Perfect_Hash/10 0.6392232900702519 ns/iter 0.6235508150177344 ns/iter 1.03
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 13.489533909201368 ns/iter 13.80740123581892 ns/iter 0.98
JSON_String_Fast_Hash/10 1.9078339559533422 ns/iter 1.9068406442373285 ns/iter 1.00
JSON_String_Fast_Hash/100 1.9052177696860182 ns/iter 1.9061313327511429 ns/iter 1.00
JSON_String_Key_Hash/10 1.255205350253443 ns/iter 1.2459344555484697 ns/iter 1.01
JSON_String_Key_Hash/100 12.438748234428543 ns/iter 12.441497003841265 ns/iter 1.00
JSON_Object_Defines_Miss_Same_Length 3.4357354407238283 ns/iter 3.4230194664371525 ns/iter 1.00
JSON_Object_Defines_Miss_Too_Small 3.423725871966768 ns/iter 3.4228693197547786 ns/iter 1.00
JSON_Object_Defines_Miss_Too_Large 3.4244468520853255 ns/iter 3.423555969599852 ns/iter 1.00
Regex_Lower_S_Or_Upper_S_Asterisk 3.1124014639987165 ns/iter 3.1137278326489506 ns/iter 1.00
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 3.1120652349251228 ns/iter 3.114822126140609 ns/iter 1.00
Regex_Period_Asterisk 3.113109912586799 ns/iter 3.1250796066100377 ns/iter 1.00
Regex_Group_Period_Asterisk_Group 3.1140062446078294 ns/iter 3.115238751037969 ns/iter 1.00
Regex_Period_Plus 2.8009849404362237 ns/iter 2.802532653067045 ns/iter 1.00
Regex_Period 2.801262557367535 ns/iter 2.802090209367281 ns/iter 1.00
Regex_Caret_Period_Plus_Dollar 2.801206551526696 ns/iter 2.8013955672339383 ns/iter 1.00
Regex_Caret_Group_Period_Plus_Group_Dollar 2.803330750712762 ns/iter 2.802981054367845 ns/iter 1.00
Regex_Caret_Period_Asterisk_Dollar 4.047241831078428 ns/iter 4.045450474383607 ns/iter 1.00
Regex_Caret_Group_Period_Asterisk_Group_Dollar 4.044494690105497 ns/iter 4.046279063012166 ns/iter 1.00
Regex_Caret_X_Hyphen 13.69480808037215 ns/iter 13.071841554818416 ns/iter 1.05
Regex_Period_Md_Dollar 35.929812300234936 ns/iter 39.00868797087494 ns/iter 0.92
Regex_Caret_Slash_Period_Asterisk 8.716127669865324 ns/iter 8.712587889821446 ns/iter 1.00
Regex_Caret_Period_Range_Dollar 4.0480778849609145 ns/iter 4.044261936815824 ns/iter 1.00
Regex_Nested_Backtrack 57.25707997055703 ns/iter 62.44417784371207 ns/iter 0.92

This comment was automatically generated by workflow using github-action-benchmark.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant