in src/managed/DiffGen/tools/DiffGenTool/Program.cs [23:156]
public static void Main(string[] args)
{
Console.WriteLine("Platform: {0}", RuntimeInformation.OSDescription);
Console.WriteLine("Running Directory: {0}", ProcessHelper.RunningDirectory);
if (args.Length < 4 || args.Length > 5)
{
Console.WriteLine("Usage: DiffGenTool <source archive> <target archive> <output path> <log folder> <working folder>");
Console.WriteLine("Usage: DiffGenTool <source archive> <target archive> <output path> <working folder>");
Environment.Exit(1);
}
string sourceFile = args[0];
string targetFile = args[1];
string outputFile = args[2];
string workingFolder;
string logFolder;
if (args.Length == 4)
{
workingFolder = args[3];
try
{
logFolder = MakeLogFolder(workingFolder);
}
catch (Exception e)
{
WriteErrorMessage(e.Message);
Environment.Exit(1);
return;
}
}
else
{
logFolder = args[3];
workingFolder = args[4];
}
CancellationTokenSource cancellationTokenSource = new();
DiffBuilder.Parameters parameters = new()
{
SourceFile = sourceFile,
TargetFile = targetFile,
OutputFile = outputFile,
LogFolder = logFolder,
WorkingFolder = workingFolder,
KeepWorkingFolder = true,
CancellationToken = cancellationTokenSource.Token,
};
DiffBuilder.ParametersStatus parametersStatus = parameters.Validate(out string[] issues);
if (parametersStatus != DiffBuilder.ParametersStatus.Ok)
{
Console.WriteLine($"Parameters failed. Status: {parametersStatus}");
Console.WriteLine("Issues:");
foreach(var issue in issues)
{
Console.WriteLine(issue);
}
Environment.Exit(1);
return;
}
bool caughtException = false;
try
{
Console.WriteLine("Starting main task.");
DiffBuilder.Execute(parameters);
Console.WriteLine("Finished main task.");
}
catch (AggregateException ae)
{
caughtException = true;
ae.Handle(e =>
{
if (e is TaskCanceledException)
{
Console.WriteLine("Diff generation has been canceled by the user.");
if (Directory.Exists(workingFolder))
{
Console.WriteLine("Working folder had already been created. Manual cleanup may be required.");
Console.WriteLine($"Working folder path: {workingFolder}");
}
return true;
}
else if (e is DiffBuilderException dbe)
{
WriteErrorMessage(dbe.Message);
return true;
}
else
{
return false;
}
});
}
catch (TaskCanceledException)
{
caughtException = true;
Console.WriteLine("Diff generation has been canceled by the user.");
if (Directory.Exists(workingFolder))
{
Console.WriteLine("Working folder had already been created. Manual cleanup may be required.");
Console.WriteLine($"Working folder path: {workingFolder}");
}
}
catch (DiffBuilderException e)
{
caughtException = true;
WriteErrorMessage(e.Message);
}
if (caughtException)
{
Environment.Exit(1);
}
Console.WriteLine("Exit Code: {0}", Environment.ExitCode);
if (Environment.ExitCode != 0)
{
Console.WriteLine("Overriding Exit Code to 0.");
}
Environment.Exit(0);
}