Can install and compile SMEFT

This commit is contained in:
Timothy Baldridge 2022-05-28 22:19:25 -06:00
parent 550d744b07
commit c84057ec22
6 changed files with 74 additions and 7 deletions

View File

@ -7,6 +7,9 @@ using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using NLog.Extensions.Logging;
using NLog.Targets;
using Octokit;
using Wabbajack.CLI.TypeConverters;
using Wabbajack.CLI.Verbs;
@ -34,6 +37,7 @@ internal class Program
new TypeConverterAttribute(typeof(ModListCategoryConverter)));
var host = Host.CreateDefaultBuilder(Array.Empty<string>())
.ConfigureLogging(AddLogging)
.ConfigureServices((host, services) =>
{
services.AddSingleton(new JsonSerializerOptions());
@ -81,4 +85,32 @@ internal class Program
var service = host.Services.GetService<CommandLineBuilder>();
return await service!.Run(args);
}
private static void AddLogging(ILoggingBuilder loggingBuilder)
{
var config = new NLog.Config.LoggingConfiguration();
var fileTarget = new FileTarget("file")
{
FileName = "logs/wabbajack-cli.current.log",
ArchiveFileName = "logs/wabbajack-cli.{##}.log",
ArchiveOldFileOnStartup = true,
MaxArchiveFiles = 10,
Layout = "${processtime} [${level:uppercase=true}] (${logger}) ${message:withexception=true}",
Header = "############ Wabbajack log file - ${longdate} ############"
};
var consoleTarget = new ConsoleTarget("console")
{
Layout = "${processtime} [${level:uppercase=true}] ${message:withexception=true}",
};
config.AddRuleForAllLevels(fileTarget);
config.AddRuleForAllLevels(consoleTarget);
loggingBuilder.ClearProviders();
loggingBuilder.SetMinimumLevel(LogLevel.Trace);
loggingBuilder.AddNLog(config);
}
}

View File

@ -18,6 +18,8 @@
<PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.2-mauipre.1.22054.8" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="6.0.2-mauipre.1.22054.8" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.2-mauipre.1.22054.8" />
<PackageReference Include="NLog" Version="5.0.0" />
<PackageReference Include="NLog.Extensions.Logging" Version="5.0.0" />
<PackageReference Include="SixLabors.ImageSharp" Version="2.1.1" />
<PackageReference Include="System.CommandLine" Version="2.0.0-beta1.21561.1" />
</ItemGroup>

View File

@ -30,6 +30,20 @@ public static class AsyncParallelExtensions
foreach (var itm in tasks) yield return await itm;
}
// Like PMapAll but don't keep defaults
public static async IAsyncEnumerable<TOut> PKeepAll<TIn, TOut>(this IEnumerable<TIn> coll,
Func<TIn, Task<TOut>> mapFn)
where TOut : class
{
var tasks = coll.Select(mapFn).ToList();
foreach (var itm in tasks)
{
var val = await itm;
if (itm != default)
yield return await itm;
}
}
public static async IAsyncEnumerable<TOut> PMapAll<TIn, TJob, TOut>(this IEnumerable<TIn> coll,
IResource<TJob> limiter, Func<TIn, Task<TOut>> mapFn)
{
@ -41,6 +55,22 @@ public static class AsyncParallelExtensions
}
}
public static async IAsyncEnumerable<TOut> PKeepAll<TIn, TJob, TOut>(this IEnumerable<TIn> coll,
IResource<TJob> limiter, Func<TIn, Task<TOut>> mapFn)
where TOut : class
{
var tasks = coll.Select(mapFn).ToList();
foreach (var itm in tasks)
{
using var job = await limiter.Begin("", 0, CancellationToken.None);
var itmA = await itm;
if (itmA != default)
{
yield return await itm;
}
}
}
public static async Task<List<T>> ToList<T>(this IAsyncEnumerable<T> coll)
{
List<T> lst = new();

View File

@ -267,22 +267,22 @@ public abstract class ACompiler
protected async Task CleanInvalidArchivesAndFillState()
{
NextStep("Compiling", "Cleaning Invalid Archives");
var remove = await IndexedArchives.PMapAll(CompilerLimiter, async a =>
var remove = await IndexedArchives.PKeepAll(CompilerLimiter, async a =>
{
try
{
var resolved = await ResolveArchive(a);
if (resolved == null) return null;
if (resolved == null) return a;
a.State = resolved.State;
return a;
return default;
}
catch (Exception ex)
{
_logger.LogWarning(ex, "While resolving archive {Archive}", a.Name);
return null;
return a;
}
}).ToHashSet(f => f == null);
}).ToHashSet();
if (remove.Count == 0) return;

View File

@ -90,6 +90,8 @@ public class CompilerSettingsInferencer
{
cs.OtherProfiles = await otherProfilesFile.ReadAllLinesAsync().ToArray();
}
cs.OutputFile = cs.Source.Parent.Combine(cs.Profile).WithExtension(Ext.Wabbajack);
}
return cs;

View File

@ -45,16 +45,17 @@ public class OctoDiff
private class JobProgressReporter : IProgressReporter
{
private readonly IJob _job;
private readonly IJob? _job;
private readonly int _offset;
public JobProgressReporter(IJob job, int offset)
public JobProgressReporter(IJob? job, int offset)
{
_offset = offset;
_job = job;
}
public void ReportProgress(string operation, long currentPosition, long total)
{
if (_job == default) return;
var percent = Percent.FactoryPutInRange(currentPosition, total);
var toReport = (long) (percent.Value * 100) - (_job.Current - _offset);
_job.ReportNoWait((int) toReport);