Recursition problem
This commit is contained in:
parent
0505330ac5
commit
7e38c565f3
@ -214,15 +214,21 @@ public class ProcessData : IProcessData
|
|||||||
results.Add(string.Empty);
|
results.Add(string.Empty);
|
||||||
results.Add($"## {record.WorkItem.Title}");
|
results.Add($"## {record.WorkItem.Title}");
|
||||||
results.Add(string.Empty);
|
results.Add(string.Empty);
|
||||||
foreach (Record r in record.Children)
|
if (record.Children is not null)
|
||||||
results.Add($"- [{r.WorkItem.Id}]({url}{r.WorkItem.Id})");
|
{
|
||||||
|
foreach (Record r in record.Children)
|
||||||
|
results.Add($"- [{r.WorkItem.Id}]({url}{r.WorkItem.Id})");
|
||||||
|
}
|
||||||
results.Add(string.Empty);
|
results.Add(string.Empty);
|
||||||
results.Add("```bash");
|
results.Add("```bash");
|
||||||
foreach (Record r in record.Children)
|
if (record.Children is not null)
|
||||||
{
|
{
|
||||||
link = Path.Combine(jsonDirectory, $"{r.WorkItem.Id}-{r.WorkItem.WorkItemType}");
|
foreach (Record r in record.Children)
|
||||||
target = Path.Combine(iterationPathDirectory, r.WorkItem.WorkItemType, $"{r.WorkItem.Id}-{r.WorkItem.WorkItemType}", r.WorkItem.Id.ToString());
|
{
|
||||||
results.Add($"mklink /J \"{link}\" \"{target}\"");
|
link = Path.Combine(jsonDirectory, $"{r.WorkItem.Id}-{r.WorkItem.WorkItemType}");
|
||||||
|
target = Path.Combine(iterationPathDirectory, r.WorkItem.WorkItemType, $"{r.WorkItem.Id}-{r.WorkItem.WorkItemType}", r.WorkItem.Id.ToString());
|
||||||
|
results.Add($"mklink /J \"{link}\" \"{target}\"");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
results.Add("```");
|
results.Add("```");
|
||||||
results.Add(string.Empty);
|
results.Add(string.Empty);
|
||||||
@ -236,20 +242,23 @@ public class ProcessData : IProcessData
|
|||||||
string directory;
|
string directory;
|
||||||
Record? childRecord;
|
Record? childRecord;
|
||||||
ReadOnlyCollection<string> childrenDirectories;
|
ReadOnlyCollection<string> childrenDirectories;
|
||||||
foreach (Record r in record.Children)
|
if (record.Children is not null)
|
||||||
{
|
{
|
||||||
// if (record.WorkItem.Id == 110730)
|
foreach (Record r in record.Children)
|
||||||
// continue;
|
{
|
||||||
// if (record.WorkItem.Id == 110732)
|
// if (record.WorkItem.Id == 110730)
|
||||||
// continue;
|
// continue;
|
||||||
directory = Path.Combine(parentDirectory, $"{r.WorkItem.WorkItemType.Substring(0, 1)}-{r.WorkItem.Id}-{r.WorkItem.Title.Trim().Substring(0, 1)}");
|
// if (record.WorkItem.Id == 110732)
|
||||||
results.Add(directory);
|
// continue;
|
||||||
if (!keyValuePairs.TryGetValue(r.WorkItem.Id, out childRecord))
|
directory = Path.Combine(parentDirectory, $"{r.WorkItem.WorkItemType.Substring(0, 1)}-{r.WorkItem.Id}-{r.WorkItem.Title.Trim().Substring(0, 1)}");
|
||||||
continue;
|
results.Add(directory);
|
||||||
if (nests.Count > 99)
|
if (!keyValuePairs.TryGetValue(r.WorkItem.Id, out childRecord))
|
||||||
break;
|
continue;
|
||||||
childrenDirectories = GetChildrenDirectories(keyValuePairs, nests, directory, childRecord);
|
if (nests.Count > 99)
|
||||||
results.AddRange(childrenDirectories);
|
break;
|
||||||
|
childrenDirectories = GetChildrenDirectories(keyValuePairs, nests, directory, childRecord);
|
||||||
|
results.AddRange(childrenDirectories);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return new(results);
|
return new(results);
|
||||||
}
|
}
|
||||||
|
@ -261,7 +261,7 @@ public class ProcessData : IProcessData
|
|||||||
results.Add($"## {record.WorkItem.AssignedTo} - {record.WorkItem.Id} - {record.WorkItem.Title}");
|
results.Add($"## {record.WorkItem.AssignedTo} - {record.WorkItem.Id} - {record.WorkItem.Title}");
|
||||||
results.Add(string.Empty);
|
results.Add(string.Empty);
|
||||||
results.Add($"- [{record.WorkItem.Id}]({url}{record.WorkItem.Id})");
|
results.Add($"- [{record.WorkItem.Id}]({url}{record.WorkItem.Id})");
|
||||||
if (record.Children.Length == 0)
|
if (record.Children is null || record.Children.Length == 0)
|
||||||
results.Add(string.Empty);
|
results.Add(string.Empty);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -300,12 +300,15 @@ public class ProcessData : IProcessData
|
|||||||
string line;
|
string line;
|
||||||
spaces.Add('\t');
|
spaces.Add('\t');
|
||||||
WorkItem workItem;
|
WorkItem workItem;
|
||||||
foreach (Record child in record.Children)
|
if (record.Children is not null)
|
||||||
{
|
{
|
||||||
workItem = child.WorkItem;
|
foreach (Record child in record.Children)
|
||||||
line = GetLine(spaces, workItem, child, condensed, sprintOnly).TrimEnd();
|
{
|
||||||
lines.Add(line);
|
workItem = child.WorkItem;
|
||||||
AppendLines(spaces, lines, child, condensed, sprintOnly);
|
line = GetLine(spaces, workItem, child, condensed, sprintOnly).TrimEnd();
|
||||||
|
lines.Add(line);
|
||||||
|
AppendLines(spaces, lines, child, condensed, sprintOnly);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
spaces.RemoveAt(0);
|
spaces.RemoveAt(0);
|
||||||
}
|
}
|
||||||
@ -358,12 +361,15 @@ public class ProcessData : IProcessData
|
|||||||
|
|
||||||
private static void FilterChildren(ReadOnlyCollection<string> workItemTypes, Record record, List<Record> results)
|
private static void FilterChildren(ReadOnlyCollection<string> workItemTypes, Record record, List<Record> results)
|
||||||
{
|
{
|
||||||
foreach (Record r in record.Children)
|
if (record.Children is not null)
|
||||||
{
|
{
|
||||||
if (!workItemTypes.Contains(r.WorkItem.WorkItemType))
|
foreach (Record r in record.Children)
|
||||||
continue;
|
{
|
||||||
results.Add(r);
|
if (!workItemTypes.Contains(r.WorkItem.WorkItemType))
|
||||||
FilterChildren(workItemTypes, r, results);
|
continue;
|
||||||
|
results.Add(r);
|
||||||
|
FilterChildren(workItemTypes, r, results);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -414,7 +420,7 @@ public class ProcessData : IProcessData
|
|||||||
if (record.WorkItem.WorkItemType != workItemType)
|
if (record.WorkItem.WorkItemType != workItemType)
|
||||||
continue;
|
continue;
|
||||||
collection.Clear();
|
collection.Clear();
|
||||||
if (record.Children.Length == 0)
|
if (record.Children is null || record.Children.Length == 0)
|
||||||
continue;
|
continue;
|
||||||
records = FilterChildren(workItemTypes, record);
|
records = FilterChildren(workItemTypes, record);
|
||||||
maxIterationPath = GetMaxIterationPath122508(records);
|
maxIterationPath = GetMaxIterationPath122508(records);
|
||||||
@ -462,7 +468,7 @@ public class ProcessData : IProcessData
|
|||||||
continue;
|
continue;
|
||||||
collection.Clear();
|
collection.Clear();
|
||||||
violations.Clear();
|
violations.Clear();
|
||||||
if (record.Children.Length == 0)
|
if (record.Children is null || record.Children.Length == 0)
|
||||||
continue;
|
continue;
|
||||||
if (string.IsNullOrEmpty(record.WorkItem.Tags))
|
if (string.IsNullOrEmpty(record.WorkItem.Tags))
|
||||||
recordsNotMatching = new(new Record[] { record });
|
recordsNotMatching = new(new Record[] { record });
|
||||||
@ -521,7 +527,7 @@ public class ProcessData : IProcessData
|
|||||||
continue;
|
continue;
|
||||||
collection.Clear();
|
collection.Clear();
|
||||||
violations.Clear();
|
violations.Clear();
|
||||||
if (record.Children.Length == 0)
|
if (record.Children is null || record.Children.Length == 0)
|
||||||
continue;
|
continue;
|
||||||
records = FilterChildren(workItemTypes, record);
|
records = FilterChildren(workItemTypes, record);
|
||||||
recordsNotMatching = GetWorkItemsNotMatching126169(record, records);
|
recordsNotMatching = GetWorkItemsNotMatching126169(record, records);
|
||||||
@ -653,7 +659,7 @@ public class ProcessData : IProcessData
|
|||||||
continue;
|
continue;
|
||||||
collection.Clear();
|
collection.Clear();
|
||||||
violations.Clear();
|
violations.Clear();
|
||||||
if (record.Children.Length == 0)
|
if (record.Children is null || record.Children.Length == 0)
|
||||||
continue;
|
continue;
|
||||||
records = FilterChildren(workItemTypes, record);
|
records = FilterChildren(workItemTypes, record);
|
||||||
recordsNotMatching = GetWorkItemsNotMatching123066(record, records);
|
recordsNotMatching = GetWorkItemsNotMatching123066(record, records);
|
||||||
@ -691,7 +697,7 @@ public class ProcessData : IProcessData
|
|||||||
continue;
|
continue;
|
||||||
collection.Clear();
|
collection.Clear();
|
||||||
violations.Clear();
|
violations.Clear();
|
||||||
if (record.Children.Length == 0)
|
if (record.Children is null || record.Children.Length == 0)
|
||||||
continue;
|
continue;
|
||||||
records = FilterChildren(workItemTypes, record);
|
records = FilterChildren(workItemTypes, record);
|
||||||
recordsNotMatching = GetWorkItemsNotMatching123067(record, records);
|
recordsNotMatching = GetWorkItemsNotMatching123067(record, records);
|
||||||
@ -729,7 +735,7 @@ public class ProcessData : IProcessData
|
|||||||
continue;
|
continue;
|
||||||
collection.Clear();
|
collection.Clear();
|
||||||
violations.Clear();
|
violations.Clear();
|
||||||
if (record.Children.Length == 0)
|
if (record.Children is null || record.Children.Length == 0)
|
||||||
continue;
|
continue;
|
||||||
if (record.WorkItem.StartDate is null)
|
if (record.WorkItem.StartDate is null)
|
||||||
continue;
|
continue;
|
||||||
|
@ -12,7 +12,7 @@ internal class Record
|
|||||||
#nullable enable
|
#nullable enable
|
||||||
|
|
||||||
[JsonConstructor]
|
[JsonConstructor]
|
||||||
public Record(WorkItem workItem, WorkItem? parent, Record[] children, Record[] related, Record[] successors)
|
public Record(WorkItem workItem, WorkItem? parent, Record[]? children, Record[]? related, Record[]? successors)
|
||||||
{
|
{
|
||||||
WorkItem = workItem;
|
WorkItem = workItem;
|
||||||
Parent = parent;
|
Parent = parent;
|
||||||
@ -23,9 +23,9 @@ internal class Record
|
|||||||
|
|
||||||
[JsonPropertyName("WorkItem")] public WorkItem WorkItem { get; set; }
|
[JsonPropertyName("WorkItem")] public WorkItem WorkItem { get; set; }
|
||||||
[JsonPropertyName("Parent")] public WorkItem? Parent { get; set; }
|
[JsonPropertyName("Parent")] public WorkItem? Parent { get; set; }
|
||||||
[JsonPropertyName("Children")] public Record[] Children { get; set; }
|
[JsonPropertyName("Children")] public Record[]? Children { get; set; }
|
||||||
[JsonPropertyName("Related")] public Record[] Related { get; set; }
|
[JsonPropertyName("Related")] public Record[]? Related { get; set; }
|
||||||
[JsonPropertyName("Successors")] public Record[] Successors { get; set; }
|
[JsonPropertyName("Successors")] public Record[]? Successors { get; set; }
|
||||||
|
|
||||||
internal static Record GetWithoutNesting(Record record, string? violation)
|
internal static Record GetWithoutNesting(Record record, string? violation)
|
||||||
{
|
{
|
||||||
@ -65,25 +65,47 @@ internal class Record
|
|||||||
private static Record Get(Record record, bool keepRelations)
|
private static Record Get(Record record, bool keepRelations)
|
||||||
{
|
{
|
||||||
Record result;
|
Record result;
|
||||||
|
Record[]? childRecords;
|
||||||
|
Record[]? relatedRecords;
|
||||||
|
Record[]? successorRecords;
|
||||||
|
List<Record> relationRecords;
|
||||||
WorkItem? parentWorkItem = keepRelations ? record.Parent : WorkItem.GetWithOutRelations(record.Parent);
|
WorkItem? parentWorkItem = keepRelations ? record.Parent : WorkItem.GetWithOutRelations(record.Parent);
|
||||||
WorkItem? workItem = keepRelations ? record.WorkItem : WorkItem.GetWithOutRelations(record.WorkItem) ?? throw new Exception();
|
WorkItem? workItem = keepRelations ? record.WorkItem : WorkItem.GetWithOutRelations(record.WorkItem) ?? throw new Exception();
|
||||||
List<Record> childRecords = new();
|
if (record.Children is null)
|
||||||
List<Record> relatedRecords = new();
|
childRecords = null;
|
||||||
List<Record> successorRecords = new();
|
else
|
||||||
foreach (Record r in record.Children)
|
{
|
||||||
childRecords.Add(Get(r, keepRelations));
|
relationRecords = new();
|
||||||
foreach (Record r in record.Related)
|
foreach (Record r in record.Children)
|
||||||
relatedRecords.Add(Get(r, keepRelations));
|
relationRecords.Add(Get(r, keepRelations));
|
||||||
foreach (Record r in record.Successors)
|
childRecords = relationRecords.ToArray();
|
||||||
successorRecords.Add(Get(r, keepRelations));
|
}
|
||||||
result = new(workItem, parentWorkItem, childRecords.ToArray(), relatedRecords.ToArray(), successorRecords.ToArray());
|
if (record.Related is null)
|
||||||
|
relatedRecords = null;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
relationRecords = new();
|
||||||
|
foreach (Record r in record.Related)
|
||||||
|
relationRecords.Add(Get(r, keepRelations));
|
||||||
|
relatedRecords = relationRecords.ToArray();
|
||||||
|
}
|
||||||
|
if (record.Successors is null)
|
||||||
|
successorRecords = null;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
relationRecords = new();
|
||||||
|
foreach (Record r in record.Successors)
|
||||||
|
relationRecords.Add(Get(r, keepRelations));
|
||||||
|
successorRecords = relationRecords.ToArray();
|
||||||
|
}
|
||||||
|
result = new(workItem, parentWorkItem, childRecords, relatedRecords, successorRecords);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Record Get(WorkItem workItem, WorkItem? parent, ReadOnlyCollection<Record> children, ReadOnlyCollection<Record> related, ReadOnlyCollection<Record> successors, bool keepRelations)
|
internal static Record Get(WorkItem workItem, WorkItem? parent, ReadOnlyCollection<Record>? children, ReadOnlyCollection<Record>? related, ReadOnlyCollection<Record>? successors, bool keepRelations)
|
||||||
{
|
{
|
||||||
Record result;
|
Record result;
|
||||||
Record record = new(workItem, parent, children.ToArray(), related.ToArray(), successors.ToArray());
|
Record record = new(workItem, parent, children?.ToArray(), related?.ToArray(), successors?.ToArray());
|
||||||
result = Get(record, keepRelations);
|
result = Get(record, keepRelations);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -96,9 +118,9 @@ internal class Record
|
|||||||
WorkItem? parentWorkItem;
|
WorkItem? parentWorkItem;
|
||||||
WorkItem? relationWorkItem;
|
WorkItem? relationWorkItem;
|
||||||
List<WorkItem> collection = new();
|
List<WorkItem> collection = new();
|
||||||
ReadOnlyCollection<Record> childRecords;
|
ReadOnlyCollection<Record>? childRecords;
|
||||||
ReadOnlyCollection<Record> relatedRecords;
|
ReadOnlyCollection<Record>? relatedRecords;
|
||||||
ReadOnlyCollection<Record> successorRecords;
|
ReadOnlyCollection<Record>? successorRecords;
|
||||||
if (workItem.Relations is not null && workItem.Relations.Length > 0)
|
if (workItem.Relations is not null && workItem.Relations.Length > 0)
|
||||||
{
|
{
|
||||||
collection.Clear();
|
collection.Clear();
|
||||||
@ -115,17 +137,16 @@ internal class Record
|
|||||||
collection = (from l in collection orderby l.State != "Closed", l.Id select l).ToList();
|
collection = (from l in collection orderby l.State != "Closed", l.Id select l).ToList();
|
||||||
foreach (WorkItem w in collection)
|
foreach (WorkItem w in collection)
|
||||||
{
|
{
|
||||||
if (nests.Count > 99)
|
if (nests.Count > 500)
|
||||||
break;
|
break;
|
||||||
if (w.Parent is null)
|
if (w.Parent is null)
|
||||||
parentWorkItem = null;
|
parentWorkItem = null;
|
||||||
else
|
else
|
||||||
_ = keyValuePairs.TryGetValue(w.Parent.Value, out parentWorkItem);
|
_ = keyValuePairs.TryGetValue(w.Parent.Value, out parentWorkItem);
|
||||||
childRecords = GetKeyValuePairs(keyValuePairs, w, "Child", nests, keepRelations); // Forward
|
childRecords = GetKeyValuePairs(keyValuePairs, w, "Child", nests, keepRelations); // Forward
|
||||||
// successorRecords = GetKeyValuePairs(keyValuePairs, w, "Successor", nests); // Forward
|
relatedRecords = null; // GetKeyValuePairs(keyValuePairs, w, "Related", nests, keepRelations); // Related
|
||||||
successorRecords = new(Array.Empty<Record>());
|
successorRecords = null; // GetKeyValuePairs(keyValuePairs, w, "Successor", nests, keepRelations); // Forward
|
||||||
// predecessorRecords = GetKeyValuePairs(keyValuePairs, w, "Predecessor", nests); // Reverse
|
// predecessorRecords = GetKeyValuePairs(keyValuePairs, w, "Predecessor", nests, keepRelations); // Reverse
|
||||||
relatedRecords = GetKeyValuePairs(keyValuePairs, w, "Related", nests, keepRelations); // Related
|
|
||||||
record = Get(w, parentWorkItem, childRecords, relatedRecords, successorRecords, keepRelations);
|
record = Get(w, parentWorkItem, childRecords, relatedRecords, successorRecords, keepRelations);
|
||||||
results.Add(record);
|
results.Add(record);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user