Skip to content

Commit 29c953d

Browse files
committed
回退 src/Packer/ 到 main 分支版本
和 Packer.Core 无关的测试改动全部丢弃, 避免合并冲突和 PR 审查干扰。
1 parent 19a3901 commit 29c953d

10 files changed

Lines changed: 46 additions & 55 deletions

File tree

src/Packer/Extensions/ContentExtension.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ public static string LogToDebug(this string message)
107107
/// <returns></returns>
108108
public static string ComputeMD5(this Stream stream)
109109
{
110-
stream.Position = 0; // 确保文件流的位置被重置
110+
stream.Seek(0, SeekOrigin.Begin); // 确保文件流的位置被重置
111111
return Convert.ToHexString(MD5.Create().ComputeHash(stream));
112112
}
113113
}

src/Packer/Helpers/ConfigHelpers.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ public static class ConfigHelpers
2525
{
2626
var configFile = directory.GetFiles("local-config.json").FirstOrDefault();
2727

28-
if (configFile is null)
29-
return null;
28+
if (configFile is null) return null;
3029

3130
configFile.FullName.LogToDebug("读取文件:{0}");
32-
31+
32+
using var reader = configFile.OpenText();
3333
return JsonSerializer.Deserialize<FloatingConfig>(
34-
configFile.ReadAllText().LogToDebug(),
34+
reader.ReadToEnd().LogToDebug(),
3535
new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
3636
}
3737

@@ -48,11 +48,10 @@ public static async Task<Config> RetrieveConfig(string configTemplate, string ve
4848

4949
Log.Information("配置位置:{0}", configPath);
5050

51-
await using var content = File.OpenRead(configPath);
52-
53-
return (await JsonSerializer.DeserializeAsync<Config>(
51+
var content = await File.ReadAllBytesAsync(configPath);
52+
return JsonSerializer.Deserialize<Config>(
5453
content,
55-
new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }))!;
54+
new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase })!;
5655
}
5756

5857
/// <summary>
@@ -73,8 +72,9 @@ public static List<PackerPolicy> RetrievePolicy(DirectoryInfo directory)
7372

7473
file.FullName.LogToDebug("读取文件:{0}");
7574

75+
using var reader = file.OpenText();
7676
var result = JsonSerializer.Deserialize<List<PackerPolicy>>(
77-
file.ReadAllText().LogToDebug(),
77+
reader.ReadToEnd().LogToDebug(),
7878
new JsonSerializerOptions
7979
{
8080
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,

src/Packer/Models/Config.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,9 @@ public class FloatingConfig
121121
InclusionDomains = InclusionDomains.Concat(other.InclusionDomains).Distinct(),
122122
InclusionPaths = InclusionPaths.Concat(other.InclusionPaths).Distinct(),
123123
CharacterReplacement = CharacterReplacement.Concat(other.CharacterReplacement).DistinctBy(_ => _.Key)
124-
.ToDictionary(),
124+
.ToDictionary(_ => _.Key, _ => _.Value),
125125
DestinationReplacement = DestinationReplacement.Concat(other.DestinationReplacement).DistinctBy(_ => _.Key)
126-
.ToDictionary()
126+
.ToDictionary(_ => _.Key, _ => _.Value)
127127
};
128128

129129

src/Packer/Models/IResourceFileProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public IResourceFileProvider ReplaceContent(string searchPattern, string replace
4747
/// </summary>
4848
/// <param name="archive"></param>
4949
/// <exception cref="InvalidOperationException">资源包中已有同名文件</exception>
50-
public Task WriteToArchiveAsync(ZipArchive archive);
50+
public Task WriteToArchive(ZipArchive archive);
5151

5252
/// <summary>
5353
/// 目标在资源包中的相对位置,从根目录算起

src/Packer/Models/Providers/CompositionHelper.cs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using Packer.Extensions;
2-
using System.Collections.Generic;
1+
using System.Collections.Generic;
32
using System.IO;
43
using System.Linq;
54
using System.Text.Json;
@@ -17,9 +16,10 @@ public static partial class LangMappingHelper
1716
/// </summary>
1817
/// <param name="file">组合文件</param>
1918
public static LangMappingProvider CreateFromComposition(FileInfo file)
20-
{
19+
{
20+
using var reader = file.OpenText();
2121
var data = JsonSerializer.Deserialize<CompositionData>(
22-
file.ReadAllText(),
22+
reader.ReadToEnd(),
2323
new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
2424
return new LangMappingProvider(
2525
new LangDictionaryWrapper(CompositionHelper.CreateRawDictionary(data)),
@@ -34,9 +34,10 @@ public static partial class JsonMappingHelper
3434
/// </summary>
3535
/// <param name="file">组合文件</param>
3636
public static JsonMappingProvider CreateFromComposition(FileInfo file)
37-
{
37+
{
38+
using var reader = file.OpenText();
3839
var data = JsonSerializer.Deserialize<CompositionData>(
39-
file.ReadAllText(),
40+
reader.ReadToEnd(),
4041
new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
4142
return new JsonMappingProvider(
4243
JsonDictionaryWrapper.Create(CompositionHelper.CreateRawDictionary(data)),
@@ -66,7 +67,7 @@ internal static IEnumerable<KeyValuePair<IEnumerable<TOuter>, IEnumerable<TInner
6667
seed: new[] { KeyValuePair.Create(Enumerable.Empty<TOuter>(), Enumerable.Empty<TInner>()) }
6768
as IEnumerable<KeyValuePair<IEnumerable<TOuter>, IEnumerable<TInner>>>, // 这都需要手写...
6869
(accumulate, next) => from incomingPair in next
69-
from existingGroup in accumulate
70+
join existingGroup in accumulate on true equals true
7071
select KeyValuePair.Create(
7172
existingGroup.Key.Append(incomingPair.Key),
7273
existingGroup.Value.Append(incomingPair.Value)));

src/Packer/Models/Providers/McMetaProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public override IResourceFileProvider ReplaceContent(string searchPattern, strin
3737
public override IResourceFileProvider ReplaceDestination(string searchPattern, string replacement)
3838
=> this;
3939
/// <inheritdoc/>
40-
public override async Task WriteToArchiveAsync(ZipArchive archive)
40+
public override async Task WriteToArchive(ZipArchive archive)
4141
{
4242
var destination = Destination.NormalizePath();
4343
Log.Debug("[McMetaProvider]写入路径 {0}", destination);

src/Packer/Models/Providers/RawFile.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public IResourceFileProvider ReplaceDestination(string searchPattern, string rep
4444
RegexOptions.Singleline));
4545

4646
/// <inheritdoc/>
47-
public async Task WriteToArchiveAsync(ZipArchive archive)
47+
public async Task WriteToArchive(ZipArchive archive)
4848
{
4949
var destination = Destination.NormalizePath();
5050
Log.Debug("[RawFile]写入路径 {0}", destination);

src/Packer/Models/Providers/TermMappingProvider.cs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,14 @@ public ITermDictionary<JsonNode> ReplaceContent(string searchPattern, string rep
8484
var result = new Dictionary<string, JsonNode>();
8585
foreach (var (key, value) in this)
8686
{
87-
if (value.GetValueKind() == JsonValueKind.String)
87+
if (value is JsonValue jsonValue
88+
&& jsonValue.TryGetValue<string>(out var stringValue))
8889
{
89-
var replaced = Regex.Replace(value.GetValue<string>(),
90+
var replaced = Regex.Replace(stringValue,
9091
searchPattern,
9192
replacement,
9293
RegexOptions.Singleline);
93-
result.Add(key, JsonValue.Create(replaced)); // 我猜不会null罢
94+
result.Add(key, JsonValue.Create(replaced)!); // 我猜不会null罢
9495
continue;
9596
}
9697
result.Add(key, value);
@@ -100,8 +101,12 @@ public ITermDictionary<JsonNode> ReplaceContent(string searchPattern, string rep
100101

101102
public static ITermDictionary<JsonNode> Create(IDictionary<string, string> nominalMapping)
102103
{
103-
var transformed = nominalMapping
104-
.ToDictionary(p => p.Key, p => JsonValue.Create(p.Value) as JsonNode);
104+
var query = from pair in nominalMapping
105+
let key = pair.Key
106+
let value = pair.Value
107+
let node = JsonValue.Create(value)!
108+
select (key, node);
109+
var transformed = query.ToDictionary(_ => _.key, _ => _.node as JsonNode);
105110
return new JsonDictionaryWrapper(transformed);
106111
}
107112
}
@@ -140,8 +145,7 @@ public TermMappingProvider(ITermDictionary<TValue> map, string destination)
140145
/// <inheritdoc/>
141146
public IResourceFileProvider ApplyTo(IResourceFileProvider? baseProvider, ApplyOptions options)
142147
{
143-
if (baseProvider is null)
144-
return this;
148+
if (baseProvider is null) return this;
145149

146150
if (baseProvider is not TermMappingProvider<TValue> baseMapping)
147151
throw new ArgumentException($"Argument not an instance of {typeof(TermMappingProvider<TValue>)}.",
@@ -186,7 +190,7 @@ public IResourceFileProvider ReplaceDestination(string searchPattern, string rep
186190
RegexOptions.Singleline));
187191

188192
/// <inheritdoc/>
189-
public async Task WriteToArchiveAsync(ZipArchive archive)
193+
public async Task WriteToArchive(ZipArchive archive)
190194
{
191195
var destination = Destination.NormalizePath();
192196
Log.Debug("[TermMappingProvider`1]写入路径 {0}", destination);
@@ -283,8 +287,7 @@ internal static Dictionary<string, string> DeserializeFromLang(string content)
283287
var splitPosition = line.IndexOf('=');
284288

285289
// https://github.com/CFPAOrg/Minecraft-Mod-Language-Package/pull/3272/files#r1461545452
286-
if (splitPosition == -1)
287-
continue;
290+
if (splitPosition == -1) continue;
288291

289292
var key = line[..splitPosition];
290293
var value = splitPosition + 1 < line.Length

src/Packer/Models/Providers/TextFile.cs

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,6 @@ public static TextFile Create(FileInfo file, string destination)
3838
return new TextFile(content, destination);
3939
}
4040

41-
/// <summary>
42-
/// 从给定的<see cref="FileInfo"/>构造提供器
43-
/// </summary>
44-
/// <param name="path">读取源</param>
45-
/// <param name="destination">目标地址</param>
46-
public static TextFile Create(string path, string destination)
47-
{
48-
return new TextFile(File.ReadAllText(path), destination);
49-
}
50-
5141
/// <summary>
5242
/// 从给定的<see cref="FileInfo"/>模板和参数构造提供器
5343
/// </summary>
@@ -77,11 +67,9 @@ public TextFile(string content, string destination)
7767
/// <inheritdoc/>
7868
public virtual IResourceFileProvider ApplyTo(IResourceFileProvider? baseProvider, ApplyOptions options)
7969
{
80-
if (baseProvider is null)
81-
return this;
70+
if (baseProvider is null) return this;
8271

83-
if (!options.Append)
84-
return baseProvider;
72+
if (!options.Append) return baseProvider;
8573

8674
if (baseProvider is not TextFile baseTextFile)
8775
throw new ArgumentException($"Argument not an instance of {typeof(TextFile)}.",
@@ -106,7 +94,7 @@ public virtual IResourceFileProvider ReplaceDestination(string searchPattern, st
10694
replacement,
10795
RegexOptions.Singleline));
10896
/// <inheritdoc/>
109-
public virtual async Task WriteToArchiveAsync(ZipArchive archive)
97+
public virtual async Task WriteToArchive(ZipArchive archive)
11098
{
11199
var destination = Destination.NormalizePath();
112100
Log.Debug("[TextFile]写入路径 {0}", destination);

src/Packer/Program.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,17 @@ public static async Task Main(string version, bool increment = false)
3434
// ./projects/assets/<projectSlug>...
3535
from modDirectory in new DirectoryInfo("./projects/assets").EnumerateDirectories()
3636
let modIdentifier = modDirectory.Name
37-
where !targetModIdentifiers.Any() // 未提供列表,全部打包
37+
where targetModIdentifiers.Count() == 0 // 未提供列表,全部打包
3838
|| targetModIdentifiers.Contains(modIdentifier) // 有列表,仅打包列表中的项
39+
where !config.Base.ExclusionMods.Contains(modIdentifier) // 没有被明确排除
3940
// .../<version>
4041
let versionedDirectory = modDirectory.GetDirectories(config.Base.Version).FirstOrDefault(defaultValue: null)
4142
where versionedDirectory is not null
4243
// .../<namespace>-CFPA-<author>
4344
from namespaceDirectory in versionedDirectory.EnumerateDirectories()
4445
let namespaceName = namespaceDirectory.Name
4546
where !config.Base.ExclusionNamespaces.Contains(namespaceName) // 没有被明确排除
46-
&& namespaceName.ValidateNamespace() // 不是非法名称
47+
where namespaceName.ValidateNamespace() // 不是非法名称
4748
// .../*
4849
from provider in namespaceDirectory.EnumerateProviders(config)
4950
group provider by provider.Destination into destinationGroup
@@ -67,7 +68,7 @@ select config.Floating.DestinationReplacement // 全局路
6768

6869
IEnumerable<IResourceFileProvider> initialFiles = [
6970
new RawFile(new FileInfo("./projects/templates/pack.png"), "pack.png"),
70-
TextFile.Create("./projects/templates/LICENSE", "LICENSE"),
71+
TextFile.Create(new FileInfo("./projects/templates/LICENSE"), "LICENSE"),
7172
TextFile.CreateFromTemplate(new FileInfo(config.Base.ReadmeTemplate),
7273
"README.txt",
7374
config.Base.ReadmeParameters),
@@ -80,11 +81,9 @@ select config.Floating.DestinationReplacement // 全局路
8081
await using var stream = File.Create(packName);
8182

8283
using (var archive = new ZipArchive(stream, ZipArchiveMode.Update, leaveOpen: true))
83-
{
84-
foreach (var item in query.Concat(initialFiles))
85-
{
86-
await item.WriteToArchiveAsync(archive);
87-
}
84+
{
85+
await Task.WhenAll(from provider in query.Concat(initialFiles)
86+
select provider.WriteToArchive(archive));
8887
}
8988

9089
Log.Information("对版本 {0} 的打包结束。", version);

0 commit comments

Comments
 (0)