Try Catch on Serialize
Better Relation Data
This commit is contained in:
@ -7,6 +7,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
@ -71,7 +72,7 @@ public class ProcessData : IProcessData
|
||||
_ = Directory.CreateDirectory(destinationDirectory);
|
||||
ReadOnlyDictionary<int, Record> keyValuePairs = GetWorkItems(workItems, keepRelations);
|
||||
ReadOnlyCollection<string> bugUserStoryTaskWorkItemTypes = new(new string[] { "Bug", "User Story", "Task" });
|
||||
ReadOnlyDictionary<int, string> collection = MoveCurrentAndGetExpectedDirectories(taskWorkItemType, destinationDirectory, bugUserStoryTaskWorkItemTypes, keyValuePairs);
|
||||
ReadOnlyDictionary<int, string> collection = MoveCurrentAndGetExpectedDirectoriesAndFileCopy(taskWorkItemType, destinationDirectory, json, bugUserStoryTaskWorkItemTypes, keyValuePairs);
|
||||
WriteFiles(fileRead, fileInfoCollection, taskWorkItemType, destinationDirectory, keyValuePairs, collection);
|
||||
}
|
||||
|
||||
@ -85,12 +86,12 @@ public class ProcessData : IProcessData
|
||||
return results;
|
||||
}
|
||||
|
||||
private static ReadOnlyDictionary<int, string> MoveCurrentAndGetExpectedDirectories(string taskWorkItemType, string destinationDirectory, ReadOnlyCollection<string> bugUserStoryTaskWorkItemTypes, ReadOnlyDictionary<int, Record> keyValuePairs)
|
||||
private static ReadOnlyDictionary<int, string> MoveCurrentAndGetExpectedDirectoriesAndFileCopy(string taskWorkItemType, string destinationDirectory, string json, ReadOnlyCollection<string> bugUserStoryTaskWorkItemTypes, ReadOnlyDictionary<int, Record> keyValuePairs)
|
||||
{
|
||||
ReadOnlyDictionary<int, string> results;
|
||||
string? directory;
|
||||
ReadOnlyDictionary<int, string> collection = GetCurrentDirectories(destinationDirectory, bugUserStoryTaskWorkItemTypes);
|
||||
results = GetExpectedDirectories(taskWorkItemType, destinationDirectory, bugUserStoryTaskWorkItemTypes, keyValuePairs);
|
||||
results = GetExpectedDirectoriesAndFileCopy(taskWorkItemType, destinationDirectory, json, bugUserStoryTaskWorkItemTypes, keyValuePairs);
|
||||
foreach (KeyValuePair<int, string> keyValuePair in collection)
|
||||
{
|
||||
if (!results.TryGetValue(keyValuePair.Key, out directory))
|
||||
@ -109,12 +110,18 @@ public class ProcessData : IProcessData
|
||||
private static FileInfo GetFileInfoAndMaybeWriteFile(string directory, WorkItem workItem)
|
||||
{
|
||||
FileInfo result;
|
||||
string json;
|
||||
json = JsonSerializer.Serialize(workItem, WorkItemSourceGenerationContext.Default.WorkItem);
|
||||
string json = JsonSerializer.Serialize(workItem, WorkItemSourceGenerationContext.Default.WorkItem);
|
||||
string singletonDirectory = Path.Combine(directory, $"{workItem.Id}");
|
||||
if (!Directory.Exists(singletonDirectory))
|
||||
_ = Directory.CreateDirectory(singletonDirectory);
|
||||
result = new(Path.Combine(singletonDirectory, ".json"));
|
||||
if (Directory.Exists(singletonDirectory))
|
||||
{
|
||||
List<string> files = Directory.GetFiles(singletonDirectory, "*", SearchOption.AllDirectories).ToList();
|
||||
string checkFile = Path.Combine(singletonDirectory, ".json");
|
||||
if (files.Remove(checkFile))
|
||||
File.Delete(checkFile);
|
||||
if (files.Count == 0)
|
||||
Directory.Delete(singletonDirectory);
|
||||
}
|
||||
result = new(Path.Combine(directory, $"{workItem.Id}.json"));
|
||||
string old = result.Exists ? File.ReadAllText(result.FullName) : string.Empty;
|
||||
if (old != json)
|
||||
File.WriteAllText(result.FullName, json);
|
||||
@ -126,7 +133,6 @@ public class ProcessData : IProcessData
|
||||
string? directory;
|
||||
FileInfo fileInfo;
|
||||
WorkItem workItem;
|
||||
Record? parent;
|
||||
foreach (KeyValuePair<int, Record> keyValuePair in keyValuePairs)
|
||||
{
|
||||
workItem = keyValuePair.Value.WorkItem;
|
||||
@ -139,8 +145,6 @@ public class ProcessData : IProcessData
|
||||
fileInfo = GetFileInfoAndMaybeWriteFile(directory, workItem);
|
||||
if (!fileRead.IsEAFHosted)
|
||||
fileInfoCollection.Add(fileInfo);
|
||||
if (workItem.WorkItemType != taskWorkItemType && workItem.Parent is not null && keyValuePairs.TryGetValue(workItem.Parent.Value, out parent))
|
||||
_ = GetFileInfoAndMaybeWriteFile(Path.Combine(directory, ".parent"), parent.WorkItem);
|
||||
}
|
||||
}
|
||||
|
||||
@ -163,9 +167,9 @@ public class ProcessData : IProcessData
|
||||
try
|
||||
{
|
||||
childRecords = Record.GetKeyValuePairs(keyValuePairs, keyValuePair.Value, "Child", nests, keepRelations); // Forward
|
||||
// records = Record.GetKeyValuePairs(keyValuePairs, keyValuePair.Value, "Predecessor", nests, keepRelations); // Reverse
|
||||
relatedRecords = Record.GetKeyValuePairs(keyValuePairs, keyValuePair.Value, "Related", nests, keepRelations); // Related
|
||||
successorRecords = Record.GetKeyValuePairs(keyValuePairs, keyValuePair.Value, "Successor", nests, keepRelations); // Forward
|
||||
// predecessorRecords = Record.GetKeyValuePairs(keyValuePairs, keyValuePair.Value, "Predecessor", nests, keepRelations); // Reverse
|
||||
record = Record.Get(keyValuePair.Value, parentWorkItem, childRecords, relatedRecords, successorRecords, keepRelations);
|
||||
}
|
||||
catch (Exception)
|
||||
@ -205,14 +209,32 @@ public class ProcessData : IProcessData
|
||||
return new(results);
|
||||
}
|
||||
|
||||
private static ReadOnlyDictionary<int, string> GetExpectedDirectories(string taskWorkItemType, string destinationDirectory, ReadOnlyCollection<string> bugUserStoryTaskWorkItemTypes, ReadOnlyDictionary<int, Record> keyValuePairs)
|
||||
private static void FileCopy(string destinationDirectory, string json, List<string> distinct)
|
||||
{
|
||||
string old;
|
||||
string checkFile;
|
||||
foreach (string iterationPath in distinct)
|
||||
{
|
||||
checkFile = Path.Combine(destinationDirectory, iterationPath, "[].json");
|
||||
old = File.Exists(checkFile) ? File.ReadAllText(checkFile) : string.Empty;
|
||||
if (old != json)
|
||||
File.WriteAllText(checkFile, json);
|
||||
}
|
||||
}
|
||||
|
||||
private static ReadOnlyDictionary<int, string> GetExpectedDirectoriesAndFileCopy(string taskWorkItemType, string destinationDirectory, string json, ReadOnlyCollection<string> bugUserStoryTaskWorkItemTypes, ReadOnlyDictionary<int, Record> keyValuePairs)
|
||||
{
|
||||
Dictionary<int, string> results = new();
|
||||
string directory;
|
||||
WorkItem workItem;
|
||||
string iterationPath;
|
||||
List<string> distinct = new();
|
||||
foreach (KeyValuePair<int, Record> keyValuePair in keyValuePairs)
|
||||
{
|
||||
workItem = keyValuePair.Value.WorkItem;
|
||||
iterationPath = workItem.IterationPath.Replace(" ", "-");
|
||||
if (!distinct.Contains(iterationPath))
|
||||
distinct.Add(iterationPath);
|
||||
if (!bugUserStoryTaskWorkItemTypes.Contains(workItem.WorkItemType))
|
||||
continue;
|
||||
if (workItem.WorkItemType == taskWorkItemType && workItem.Parent is not null)
|
||||
@ -220,6 +242,8 @@ public class ProcessData : IProcessData
|
||||
directory = GetDirectory(destinationDirectory, workItem);
|
||||
results.Add(workItem.Id, directory);
|
||||
}
|
||||
if (distinct.Count > 0)
|
||||
FileCopy(destinationDirectory, json, distinct);
|
||||
return new(results);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user