From 06381a4fa491a5af9752620f297fe6e40fc79722 Mon Sep 17 00:00:00 2001 From: Meik Date: Wed, 18 Mar 2026 16:57:41 +0100 Subject: [PATCH] Fix relative path shortening loop --- LiamNtfs/C4IT_IAM_SET/Helper.cs | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/LiamNtfs/C4IT_IAM_SET/Helper.cs b/LiamNtfs/C4IT_IAM_SET/Helper.cs index dcbed72..fc35c6c 100644 --- a/LiamNtfs/C4IT_IAM_SET/Helper.cs +++ b/LiamNtfs/C4IT_IAM_SET/Helper.cs @@ -78,8 +78,9 @@ namespace C4IT_IAM_Engine { var effectiveSegments = (sanitizedSegments ?? Array.Empty()).Where(i => i != null).ToArray(); var effectiveFolderName = folderName ?? string.Empty; - var originalValue = MaterializeTemplateValue(templateValue, allowRelativePath, defaultRelativePath, effectiveSegments, effectiveFolderName, replacementTags); - var measuredValue = MaterializeTemplateValueForLength(templateValue, allowRelativePath, defaultRelativePath, effectiveSegments, effectiveFolderName, replacementTags); + var currentRelativePath = GetCurrentRelativePath(effectiveSegments, defaultRelativePath); + var originalValue = MaterializeTemplateValue(templateValue, allowRelativePath, currentRelativePath, effectiveSegments, effectiveFolderName, replacementTags); + var measuredValue = MaterializeTemplateValueForLength(templateValue, allowRelativePath, currentRelativePath, effectiveSegments, effectiveFolderName, replacementTags); var usesRelativePath = allowRelativePath && Regex.IsMatch(templateValue ?? string.Empty, @"{{\s*RELATIVEPATH", RegexOptions.IgnoreCase); var usesName = Regex.IsMatch(templateValue ?? string.Empty, @"{{\s*NAME\s*}}", RegexOptions.IgnoreCase); var strategy = string.Empty; @@ -105,11 +106,18 @@ namespace C4IT_IAM_Engine if (!changed) break; - originalValue = MaterializeTemplateValue(templateValue, allowRelativePath, defaultRelativePath, effectiveSegments, effectiveFolderName, replacementTags); - measuredValue = MaterializeTemplateValueForLength(templateValue, allowRelativePath, defaultRelativePath, effectiveSegments, effectiveFolderName, replacementTags); + currentRelativePath = GetCurrentRelativePath(effectiveSegments, defaultRelativePath); + originalValue = MaterializeTemplateValue(templateValue, allowRelativePath, currentRelativePath, effectiveSegments, effectiveFolderName, replacementTags); + measuredValue = MaterializeTemplateValueForLength(templateValue, allowRelativePath, currentRelativePath, effectiveSegments, effectiveFolderName, replacementTags); } - var initialValue = MaterializeTemplateValue(templateValue, allowRelativePath, defaultRelativePath, sanitizedSegments, folderName, replacementTags); + var initialValue = MaterializeTemplateValue( + templateValue, + allowRelativePath, + GetCurrentRelativePath(sanitizedSegments, defaultRelativePath), + sanitizedSegments, + folderName, + replacementTags); var result = new BoundedTemplateContext { SanitizedSegments = effectiveSegments, @@ -207,6 +215,14 @@ namespace C4IT_IAM_Engine return NormalizeLoopPlaceholderLength(templateValue).Length; } + private static string GetCurrentRelativePath(string[] sanitizedSegments, string fallbackRelativePath) + { + if (sanitizedSegments != null && sanitizedSegments.Length > 0) + return string.Join("_", sanitizedSegments); + + return fallbackRelativePath ?? string.Empty; + } + private static int GetLoopReservationLength(string templateValue) { if (string.IsNullOrWhiteSpace(templateValue))