Fix relative path shortening loop

This commit is contained in:
Meik
2026-03-18 16:57:41 +01:00
parent 6ce1e70426
commit 06381a4fa4

View File

@@ -78,8 +78,9 @@ namespace C4IT_IAM_Engine
{ {
var effectiveSegments = (sanitizedSegments ?? Array.Empty<string>()).Where(i => i != null).ToArray(); var effectiveSegments = (sanitizedSegments ?? Array.Empty<string>()).Where(i => i != null).ToArray();
var effectiveFolderName = folderName ?? string.Empty; var effectiveFolderName = folderName ?? string.Empty;
var originalValue = MaterializeTemplateValue(templateValue, allowRelativePath, defaultRelativePath, effectiveSegments, effectiveFolderName, replacementTags); var currentRelativePath = GetCurrentRelativePath(effectiveSegments, defaultRelativePath);
var measuredValue = MaterializeTemplateValueForLength(templateValue, allowRelativePath, defaultRelativePath, effectiveSegments, effectiveFolderName, replacementTags); 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 usesRelativePath = allowRelativePath && Regex.IsMatch(templateValue ?? string.Empty, @"{{\s*RELATIVEPATH", RegexOptions.IgnoreCase);
var usesName = Regex.IsMatch(templateValue ?? string.Empty, @"{{\s*NAME\s*}}", RegexOptions.IgnoreCase); var usesName = Regex.IsMatch(templateValue ?? string.Empty, @"{{\s*NAME\s*}}", RegexOptions.IgnoreCase);
var strategy = string.Empty; var strategy = string.Empty;
@@ -105,11 +106,18 @@ namespace C4IT_IAM_Engine
if (!changed) if (!changed)
break; break;
originalValue = MaterializeTemplateValue(templateValue, allowRelativePath, defaultRelativePath, effectiveSegments, effectiveFolderName, replacementTags); currentRelativePath = GetCurrentRelativePath(effectiveSegments, defaultRelativePath);
measuredValue = MaterializeTemplateValueForLength(templateValue, allowRelativePath, defaultRelativePath, effectiveSegments, effectiveFolderName, replacementTags); 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 var result = new BoundedTemplateContext
{ {
SanitizedSegments = effectiveSegments, SanitizedSegments = effectiveSegments,
@@ -207,6 +215,14 @@ namespace C4IT_IAM_Engine
return NormalizeLoopPlaceholderLength(templateValue).Length; 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) private static int GetLoopReservationLength(string templateValue)
{ {
if (string.IsNullOrWhiteSpace(templateValue)) if (string.IsNullOrWhiteSpace(templateValue))