Repository navigation
feat(recipe): omarchy 支持官方中国镜像并保持当前通道 - #413
yayoinoyume wants to merge 2 commits into
Conversation
- 新增 OmarchyCN 源 (pkgs.omarchy.cn),与上游 pkgs.omarchy.org 并列 - 从 pacman.conf 的 [omarchy] 段反推 stable/rc/edge 通道,不再强制降级到 stable - 只重写 [omarchy] 段,中国镜像追加同通道上游兜底行并做写后校验 - 更新 note 与收尾提示,说明 Omarchy 4.5 的 region 机制
|
Hi @yayoinoyume ❤️ 感谢你的贡献!我们将在最少半小时,最多5天内阅读此 PR 并回复你 |
| chsrc_use_this_source (os_omarchy); | ||
|
|
||
| chsrc_backup (OS_Pacman_Omarchy_Conf); | ||
| if (xy_run_get_status ("grep -q '^\\[omarchy\\]' " OS_Pacman_Omarchy_Conf) != 0) |
There was a problem hiding this comment.
我个人仍然不是很建议在程序内大量调用grep,非常容易造成后面维护困难,尤其是各种正则、语法、转义,前面写的越简练(超长的“一句话”替换语句),后面的人维护起来越难
我会建议你参考 pl_rust_cargo_getsrc,但是考虑到此处grep确实比较简练易懂(但是命令行转义加c内部转义还是很恶心),此处我保留意见,仅作为建议。
| /* 幂等: 替换 [omarchy] 段的 Server 行为所选源;已是所选源则跳过 */ | ||
| char *exists_cmd = xy_strcat (3, "grep -qxF 'Server = ", source.url, "' " OS_Pacman_Omarchy_Conf); | ||
| if (xy_run_get_status (exists_cmd) == 0) | ||
| /* 从 [omarchy] 段反推当前通道,只看未注释的 Server 行,缺省为 stable */ |
There was a problem hiding this comment.
@ccmywish 你的意见?我认为本段代码写得没问题,质量挺好,但是对后来的维护者来说可读性和可维护性都有点太差了……
| /* 仅取 [omarchy] 段内容,供通道检测与写后校验复用 */ | ||
| #define OS_Omarchy_Section_Cmd \ | ||
| "awk '/^\\[omarchy\\]/{f=1;next} /^\\[/{f=0} f' " OS_Pacman_Omarchy_Conf | ||
|
|
||
| /* 仅重写 [omarchy] 段: 删除段内全部 Server 行后,再按 target / fallback 写入 */ | ||
| #define OS_Omarchy_Awk_Rewrite \ | ||
| "/^\\[omarchy\\]/{print; print \"Server = \" target; " \ | ||
| "if (fallback != \"\") print \"Server = \" fallback; insec=1; next} " \ | ||
| "/^\\[/{insec=0} " \ | ||
| "insec && /^[[:space:]]*Server[[:space:]]*=/{next} " \ | ||
| "{print}" | ||
|
|
There was a problem hiding this comment.
不要这么写,参考python的办法,用rawstr4c写,避免在c内写命令以避免转义符号与难以看懂的问题
https://github.com/RubyMetric/chsrc/blob/main/src/recipe/lang/Python/rawstr4c.md
|
实在不好意思,写的代码可读性和可维护性有点差了,今后我会在为chsrc做贡献时注意这一点。同时,也非常感谢你的细致review和宝贵建议。 我也去认真看了rawstr4c以及其它系统换源实现在类似问题上的做法,并且尝试做了一些修改:
新增
我当时想着在原有基础上进行改动,尽量不新增太多文件。但是它不太适合现在复杂的情况。修改之后 再次感谢你的细致review!!如果还有不足之处,我会继续学习改进的。 |
其实只是按照项目习惯做了粗略review,具体拍板还是ccmywish来,我只是先把一些明显与项目习惯不符的代码风格/实现指出来而已 |
关联
#387
#388
#411
#409
背景
受限于当时的条件, #388 合入时只有
.org/stable一个源,所以会造成:chsrc set omarchy无参不可用;sed只匹配.org,4.5 的 region prepend 留下的.cn行导致set/reset静默失效;chsrc set arch,但archdish 会删掉通道快照 mirrorlist。不过从 Omarchy 4.5 起上游提供官方中国镜像(阿里云 CDN),OPR 中国 host 与
.org同内容同签名。这个PR的主要内容
omarchycn源:https://pkgs.omarchy.cn,显示名「Omarchy 阿里云镜像源」,与 upstream 并列;chsrc set omarchy无参数终于可用。[omarchy]段未注释Server行反推 stable/rc/edge,不再把 edge 强制降成 stable。[omarchy]段:awk 删除段内所有Server行后重写;CN 追加同通道.org兜底;upstream 不追加;用户自定义 URL 原样且不追加;写后校验。.org。需要注意
chsrc set arch;中国区 Arch 镜像写/etc/omarchy/region为cn后运行omarchy-refresh-pacman,之后重跑chsrc set omarchy omarchycn。实现
{&UpstreamProvider, "https://pkgs.omarchy.org"}+{&OmarchyCN, "https://pkgs.omarchy.cn"};通道在_setsrc里拼。[omarchy]段^[[:space:]]*Server[[:space:]]*=的行;/edge/→ edge,/rc/→ rc,否则 stable。不读/etc/omarchy/region。[omarchy]段;CN =.cn/<ch>/$arch+.org/<ch>/$arch;upstream =.org/<ch>/$arch;user-defined 原样。.bak.*。[omarchy]段:报错退出。reset:同一_setsrc,落到 upstream 当前通道。last_updated:2026-11-04。测试
我在自己的机器上做了下面这些测试
环境:Omarchy 4.5.0rc3(x86_64,
[omarchy]=pkgs.omarchy.org/rc)。make/make test/perl test/cli.pl fastcheckchsrc ls omarchyset -dry omarchy omarchycn.cn/rc+.org/rc;无 stable 警告set -dry omarchy upstream.org/rc,无兜底reset -dry omarchy.org/rc[omarchy];[core]/[archlinuxcn]不变;重复执行 diff 为空set omarchy omarchycnpacman -Syy成功;pacman -Si omarchy= 4.5.0-1reset omarchypacman -Syy成功;/etc/pacman.confmd5 恢复043d6b15...;mirrorlist 无变化omarchy-refresh-pacman测试.cn/.org;假 update 收到-Syyuu --noconfirm --ignore ...;宿主未动各个命令的运行情况
omarchy菜品本身chsrc ls omarchy/list omarchy/etcupstream+omarchycn(Omarchy 阿里云镜像源)、Get/Reset/UserDefine、作用域和 notechsrc get omarchychsrc_view_file("/etc/pacman.conf")/etc/pacman.conf,不是只打印[omarchy]段chsrc measure omarchypkgs.omarchy.cn/stable/x86_64/omarchy.db(约 55KB)chsrc set omarchy/etc/pacman.conf→ 从[omarchy]未注释 Server 行判通道 → awk 重写段 → 校验 → 删omarchy.db→pacman -Syy.cn/<通道>+.org/<通道>两行chsrc set omarchy firstsources[1],在本菜品里就是omarchycn,后续同上set omarchy omarchycnchsrc set omarchy omarchycn.cn/<通道>/$arch+ 同通道.org兜底 → 校验 →pacman -Syy[omarchy]两行;pacman -Syy成功;pacman -Si omarchy正常chsrc set omarchy upstream.org/<通道>/$arch,不加兜底 → 校验 →pacman -Syy[omarchy]一行;不恢复.bak,只是写 upstreamchsrc set omarchy <URL>pacman -Syy[omarchy]一行用户 URL;URL 含单引号/反斜杠/换行/回车会拒绝(exit 4)chsrc reset omarchysources[0](upstream),后续同set[omarchy]只剩.org/<通道>;显示“已重置为上游默认源”;不恢复.bakchsrc set arch/etc/pacman.d/mirrorlist→ 删除全部Server =行 → 写入所选 Arch 镜像 +geo.mirror.pkgbuild.com→pacman -Syyuchsrc reset archgeo.mirror.pkgbuild.com→pacman -Syyuset arch造成的通道错位chsrc get arch/etc/pacman.d/mirrorlistchsrc measure archchsrc set archlinuxcn/etc/pacman.conf的[archlinuxcn]段 →pacman -Sy archlinuxcn-keyring-drychsrc set -dry omarchy ...;只打印命令,不备份、不写、不校验、不跑pacman;但仍要求 root。放末尾会报错-scope=system-scope=project/user-enls omarchy里 English 是 x)-no-color请在命令前使用 sudo 或切换为root用户Omarchy 目前仅支持 x86_64 架构[omarchy]段未在 /etc/pacman.conf 中找到 [omarchy] 段pacman.conf.bak.*恢复跟高兴能看到有越来越多的人使用Omarchy!这是一个很适合在Agent时代使用的系统,如果后续在国内有新的官方源出现,我也会来及时更新!
辛苦维护者帮忙审核此PR,如果有没做好的地方,我会认真修改!非常感谢!