Skip to content

Commit 37d00bc

Browse files
refactor: 让各个操作的格式化清单步骤使用 files/manifest 的 FormatManifest (#227)
1 parent 0c5368c commit 37d00bc

2 files changed

Lines changed: 67 additions & 64 deletions

File tree

src/function/files/manifest.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import os
22
import subprocess
3+
from colorama import Fore
34
from function.maintain.config import 读取配置
45
from catfood.exceptions.operation import TryOtherMethods
56

@@ -85,3 +86,67 @@ def 获取现有包版本(包标识符: str, winget_pkgs仓库: str | None = Non
8586
return 版本列表
8687
else:
8788
return None
89+
90+
def FormatManifest(Manifest: str, Comment: str = "# Created with Sundry-Locale") -> str:
91+
"""格式化清单内容"""
92+
93+
# 修改 ManifestVersion 和版本号
94+
for OldManifestVersion in 清单信息.旧版本列表:
95+
# 修改 ManifestVersion
96+
if f"ManifestVersion: {OldManifestVersion}" in Manifest:
97+
print(f"更新 ManifestVersion: {Fore.RED}{OldManifestVersion}{Fore.RESET} -> {Fore.GREEN}{清单信息.最新版本}{Fore.RESET}")
98+
Manifest = Manifest.replace(f"ManifestVersion: {OldManifestVersion}", f"ManifestVersion: {清单信息.最新版本}")
99+
100+
# 修改 schema 引用,只替换版本号部分
101+
if f"{OldManifestVersion}.schema.json" in Manifest:
102+
print(f"更新 schema 引用: {Fore.RED}{OldManifestVersion}{Fore.RESET}.schema.json -> {Fore.GREEN}{清单信息.最新版本}{Fore.RESET}.schema.json")
103+
Manifest = Manifest.replace(f"{OldManifestVersion}.schema.json", f"{清单信息.最新版本}.schema.json")
104+
105+
# 替换工具注释
106+
'''
107+
判断是否 `清单文件内容`为空 或 第一行以`#`开头
108+
如果是,在`清单文件内容`第一行前面追加三行工具注释与`# yaml-language-server: $schema=...`与一个空行。
109+
否则,`清单文件内容`有内容且第一行以`#`开头
110+
再判断`清单文件内容`第一行是否以`# yaml-language-server`开头
111+
如果是,在`清单文件内容`第一行前面追加一行工具注释
112+
如果不是,将`清单文件内容`第一行替换为工具注释
113+
'''
114+
115+
# 按行分割文件内容
116+
lines: list[str] = Manifest.splitlines()
117+
118+
if (not lines) or (not lines[0].startswith("#")): # https://github.com/DuckDuckStudio/Sundry/issues/28
119+
# 如果清单文件内容为空或第一行不是以#开头
120+
# 第一行前面追加三行
121+
lines.insert(0, "")
122+
if "\nManifestType: installer" in Manifest: # 安装程序清单
123+
lines.insert(0, f"# yaml-language-server: $schema=https://aka.ms/winget-manifest.installer.{清单信息.最新版本}.schema.json")
124+
elif "\nManifestType: defaultLocale" in Manifest: # 默认区域清单
125+
lines.insert(0, f"# yaml-language-server: $schema=https://aka.ms/winget-manifest.defaultLocale.{清单信息.最新版本}.schema.json")
126+
elif "\nManifestType: locale" in Manifest: # 一般区域清单
127+
lines.insert(0, f"# yaml-language-server: $schema=https://aka.ms/winget-manifest.locale.{清单信息.最新版本}.schema.json")
128+
else: # 版本清单
129+
lines.insert(0, f"# yaml-language-server: $schema=https://aka.ms/winget-manifest.version.{清单信息.最新版本}.schema.json")
130+
lines.insert(0, Comment)
131+
# 否则第一行是#开头
132+
else:
133+
# 判断第一行是否以# yaml-language-server开头
134+
if lines[0].startswith("# yaml-language-server"):
135+
# 如果是,追加一行
136+
lines.insert(0, Comment)
137+
else:
138+
# 否则,替换第一行
139+
lines[0] = Comment
140+
141+
# 将修改后的内容重新合并为一个字符串并赋值回清单文件内容
142+
Manifest = "\n".join(lines)
143+
144+
# 确保最后有且只有一行空行
145+
if not Manifest.endswith('\n'): # 如果最后没有换行符
146+
Manifest += '\n' # 添加一个换行符
147+
else: # 如果有了
148+
Manifest = Manifest.rstrip('\n') + '\n'
149+
# 管他几个先全移除 -> 添加一个换行符
150+
# .rstrip() 去除文本末尾的指定字符
151+
152+
return Manifest

src/tools/modify.py

Lines changed: 2 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
from datetime import datetime
1010
from catfood.functions.print import 消息头
1111
from function.git.format import branchName
12-
from function.files.manifest import 清单信息
1312
from function.maintain.config import 读取配置
1413
from catfood.functions.files import open_file
1514
from function.files.manifest import 获取清单目录
15+
from function.files.manifest import FormatManifest
1616
from function.github.token import read_token, 这是谁的Token
1717

1818
def main(args: list[str]):
@@ -257,69 +257,7 @@ def 修改版本(版本文件夹: str):
257257
with open(清单文件路径, "r", encoding="utf-8") as f:
258258
清单文件内容 = f.read()
259259

260-
# =========================== 必经修改 =========================
261-
# 修改 ManifestVersion 和版本号
262-
for 清单中的旧清单版本号 in 清单信息.旧版本列表:
263-
# 修改 ManifestVersion
264-
if f"ManifestVersion: {清单中的旧清单版本号}" in 清单文件内容:
265-
print(f" 替换 ManifestVersion: {清单中的旧清单版本号} -> {清单信息.最新版本}")
266-
写入日志(f" Replace ManifestVersion: {清单中的旧清单版本号} -> {清单信息.最新版本}")
267-
清单文件内容 = 清单文件内容.replace(f"ManifestVersion: {清单中的旧清单版本号}", f"ManifestVersion: {清单信息.最新版本}")
268-
269-
# 修改 schema 引用,只替换版本号部分
270-
schema_line = f"{清单中的旧清单版本号}.schema.json"
271-
if schema_line in 清单文件内容:
272-
print(f" 替换 schema 引用: {清单中的旧清单版本号}.schema.json -> {清单信息.最新版本}.schema.json")
273-
写入日志(f" Replace schema references: {清单中的旧清单版本号}.schema.json -> {清单信息.最新版本}.schema.json")
274-
清单文件内容 = 清单文件内容.replace(f"{清单中的旧清单版本号}.schema.json", f"{清单信息.最新版本}.schema.json")
275-
276-
# 替换工具注释
277-
'''
278-
判断是否 `清单文件内容`为空 或 第一行以`#`开头
279-
如果是,在`清单文件内容`第一行前面追加三行`# Modified with Sundry.`与`# yaml-language-server: $schema=...`与一个空行。
280-
否则,`清单文件内容`有内容且第一行以`#`开头
281-
再判断`清单文件内容`第一行是否以`# yaml-language-server`开头
282-
如果是,在`清单文件内容`第一行前面追加一行`# Modified with Sundry.`
283-
如果不是,将`清单文件内容`第一行替换为`# Modified with Sundry.`
284-
'''
285-
286-
# 按行分割文件内容
287-
lines = 清单文件内容.splitlines()
288-
289-
if (not lines) or (not lines[0].startswith("#")): # https://github.com/DuckDuckStudio/Sundry/issues/28
290-
# 如果清单文件内容为空或第一行不是以#开头
291-
# 第一行前面追加三行
292-
lines.insert(0, "")
293-
if 'installer' in file: # 安装程序清单
294-
lines.insert(0, f"# yaml-language-server: $schema=https://aka.ms/winget-manifest.installer.{清单信息.最新版本}.schema.json")
295-
elif 'locale' in file: # 区域清单
296-
if 'defaultLocale' in 清单文件内容: # 默认区域清单
297-
lines.insert(0, f"# yaml-language-server: $schema=https://aka.ms/winget-manifest.defaultLocale.{清单信息.最新版本}.schema.json")
298-
else: # 一般区域清单
299-
lines.insert(0, f"# yaml-language-server: $schema=https://aka.ms/winget-manifest.locale.{清单信息.最新版本}.schema.json")
300-
else: # 版本清单
301-
lines.insert(0, f"# yaml-language-server: $schema=https://aka.ms/winget-manifest.version.{清单信息.最新版本}.schema.json")
302-
lines.insert(0, "# Modified with Sundry.")
303-
# 否则第一行是#开头
304-
else:
305-
# 判断第一行是否以# yaml-language-server开头
306-
if lines[0].startswith("# yaml-language-server"):
307-
# 如果是,追加一行
308-
lines.insert(0, "# Modified with Sundry.")
309-
else:
310-
# 否则,替换第一行
311-
lines[0] = "# Modified with Sundry."
312-
313-
# 将修改后的内容重新合并为一个字符串并赋值回清单文件内容
314-
清单文件内容 = "\n".join(lines)
315-
316-
# 确保最后有且只有一行空行
317-
if not 清单文件内容.endswith('\n'): # 如果最后没有换行符
318-
清单文件内容 += '\n' # 添加一个换行符
319-
else: # 如果有了
320-
清单文件内容 = 清单文件内容.rstrip('\n') + '\n'
321-
# 管他几个先全移除 -> 添加一个换行符
322-
# .rstrip() 去除文本末尾的指定字符
260+
清单文件内容 = FormatManifest(清单文件内容, "# Modified with Sundry.")
323261

324262
# 写回修改后的文件内容
325263
with open(清单文件路径, "w", encoding="utf-8") as f:

0 commit comments

Comments
 (0)