Skip to content

Conversation

Mikachu2333
Copy link
Collaborator

@Mikachu2333 Mikachu2333 commented Sep 29, 2025

问题描述

  1. 修复 cargo 换源的一些问题 #288 有以下问题
    1. 对于 win 用户极不友好(刚需 sedgrep),且也没有原来的 doc 了
    2. 即使安装了 sedgrep 在win上也不能正确运行,正则似乎是写错了(不太确定),反正换源换成一坨乱码了
    3. 在 wsl 上似乎也有点小问题,我这里试了一下也没能正确换源
  2. re-fix rust 换源提示有误 #281

方案与实现

  1. 设置文件更改
    • + gitignore 更新(适配 fw.c 中修改的测试步骤)
  2. xy.h xy.h 增加str类的通用函数 #293
    • xy_str_find 用于查找str子串并返回 (bool, pos_begin, pos_end)
    • xy_str_take_until_newline 与上面的函数结合使用,用于获取从传入字符串的 [0] 开始直到下一个换行符的所有字符,主要在提取配置时使用
    • xy_file_to_str 用于读取文件并返回全部内容(以字符串形式返回),已处理所有换行符为 \n
  3. core.c core.c 修改函数实现 #294
    • chsrc_log_overwrite 对覆写特别设置
    • ± chsrc_log_backup
      1. 更正笔误
      2. 更换变量名避免歧义
      3. 返回时规范化路径(好像没啥用不过)
      4. 我认为这个函数需要改进,应该直接返回一个文件路径一个操作句柄,或者干脆直接返回路径,句柄自己搞去,没有路径只有句柄太难受了
      5. 更新docs
    • ± chsrc_prepend_to_file impl for win
  4. cargo.c
    • pl_note_get_src_default 把部分重复的通知逻辑抽出来了
    • pl_note_get_src_mirror
    • ± pl_rust_cargo_getsrc
      1. 去除所有需要 sed / grep 的代码
      2. 纯手工解析(感觉解析的代码 set 和 get 还能再抽象一个函数出来,但是懒得动了)
    • pl_write_rust_config 把重复的逻辑抽出来了
    • ± pl_rust_cargo_getsrc 用了很笨的办法,读取文件 -> 查找字段 -> 手动获取有效信息 -> 手动格式化,好消息是对所有系统都适用,因为mirror必须按官方规范来否则rust不识别,所以“获取有效信息”和“格式化”这两步也没啥额外问题,感觉现在错误处理有些太繁琐了,似乎可以精简
    • 格式化
  5. rustup.c 格式化
  6. rawstr4c.h 删除无用数据
  7. fw.c core.c 修改函数实现 #294
    • ± 调整了测试的顺序,优化逻辑
    • + 增加了相应的 tests
    • ± 根据上面修改的函数进行适配

其它

  1. 我认为有必要把各种函数整理一下了……用的时候经常找不着(
  2. 此外,根据 @ccmywish 此前的要求,此文件因为大幅修改(或者说回退)了你( @happy-game )的更改,因此您可能需要一起参与审阅
  3. 此pr以及关联pr增加了大量函数,但极少对现有函数进行修改,因此与其它代码的逻辑关联性低,主要修改的只有一个 chsrc_prepend_to_file (Impl for win) 并且暂未发现问题。
  4. 本地测试无误

@Mikachu2333 Mikachu2333 changed the title re-fix get rust re-fix rust Sep 29, 2025
@Mikachu2333 Mikachu2333 marked this pull request as ready for review September 29, 2025 15:07
@Mikachu2333 Mikachu2333 marked this pull request as draft September 29, 2025 15:45
@Mikachu2333 Mikachu2333 marked this pull request as ready for review September 29, 2025 17:21
@Mikachu2333

This comment was marked as outdated.

Copy link
Contributor

@ccmywish ccmywish left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

辛苦了👍👍👍

我建议拆分提交,尤其是一些通用功能的实现,应该单独提出来。

@ccmywish
Copy link
Contributor

ccmywish commented Oct 1, 2025

@Mikachu2333 @happy-game

完全靠字符串去分析 rust 的配置文件,我觉得是非常辛苦的,也很难维护。以后用 toml json yaml 配置的文件只会越来越多,每一个都要这么努力的解析吗,我对此表示悲观。

我们已经用C语言实现了很多其实和 chsrc 的用途本身无关的内容,比如C语言自身函数不方便的问题,和跨操作系统的处理等等。已经消耗了我们大量时间和精力。而这些是能够在其他语言中直接就找到对应功能的。

我想,C语言实现的 chsrc 无法做的更多了,它更多的是实现这种 “半自动换源”,或者像 pip npm 这样,软件本身能够换源,我们只是简单做一个中介就好了——把想要的源和 “调用软件本身的功能” 关联起来。

我认为,提示用户进行简单的手动操作,就是把 chsrc 当成一种文档,chsrc as a document,它和全自动换源仅有一步之遥,从用户的便利性来看,只用多走很小的一步,但是对于维护者的实现来看,就是难以逾越的鸿沟。我们直接点说,那就是投资回报比太小了,没有什么价值

如果非要坚持全自动换源,用其他语言重写可能是唯一的出路,如果是我,我可能会选择 Go 来重写,这是纯粹的从软件工程的角度来讨论的,从减少维护量来讨论的。然而我不喜欢 Go 语言,这让我对重写 chsrc 毫无兴趣,而且我们也说了,价值不大。如果有人愿意重写,我可以提供各种软性的帮助。

@Mikachu2333

This comment was marked as off-topic.

@Mikachu2333 Mikachu2333 requested a review from ccmywish October 1, 2025 06:20
@Mikachu2333

This comment was marked as off-topic.

@Mikachu2333

This comment was marked as outdated.

@ccmywish
Copy link
Contributor

ccmywish commented Oct 1, 2025

感觉无论用哪个语言写都是依赖地狱……毕竟需要同时解析 txt, ini, json, toml, yaml等等等等花样繁多的配置文件,总不能真全用正则吧,那又成正则地狱了……

不用正则啊,直接有现成的配置文件解析库,用起来应该很方便。但是C语言集成这些解析库,问题就太多了,那样也根本不能满足 chsrc 最想达到的目标——只要有 chsrc 源代码、编译器就能自行编译出来,这样就可以支持无限多平台,比如龙芯的机器。


拆分提交对我而言很痛苦

我知道,但是你可以 cherry-picksquash等等,这个很大程度取决于你对 Git 的使用熟练程度。


包装成一个函数调用来的方便(且美观),那么我就会把那个函数实现

是的,这是正常的路径,但是就是因为你要抽函数出来,比如 append,此时你就应该立刻另开一个本地分支来开发,然后直接PR过来。

不想接受巨大的 PR 有这些原因:

  1. review 的时候看的很累,因为是对着那个 review 的窗口看的,看起来比较吃力,尤其是内容一多,不知道某一处的代码是干嘛用的
  2. 你的 commit message 比较简短和零碎,在这个PR里能大概看出来这些 message 的意义,但是一旦合并,这些 commit 单从 message 上看就不知道是在干什么。
image

比如, trimformatget src 这些信息过于简单。而且像格式化这种步骤应当在开发过程中完成,而不是单独作为一个 commit .


  1. 有一个很根本的问题,那就是贡献度的问题,当我看到有很多零碎的 commit 的PR的时候,我想的是直接 squash,这样就能有一个简单的历史,但是如果你提交了 30 个 commit,我直接 squash 掉,你就相当于只提交了一次,我觉得这是不合理的,至少要从表面上一定程度能够直接体现你所付出的这么多努力。所以此时我也不能 squash.

@ccmywish
Copy link
Contributor

ccmywish commented Oct 1, 2025

ChatGPT 对于 30个commit的看法:

image

你看最后的说法,和我上一条评论的最后一个观点是一致的,如果你不想拆分提交,就应该提前自行整理你的 commit,然后 PR 过来

@Mikachu2333

This comment was marked as outdated.

原来使用了sed和grep导致在win上无法运行
现在直接手动解析str
@Mikachu2333

This comment was marked as outdated.

@Mikachu2333

This comment was marked as off-topic.

@happy-game
Copy link
Collaborator

我想,C语言实现的 chsrc 无法做的更多了,它更多的是实现这种 “半自动换源”,或者像 pip npm 这样,软件本身能够换源,我们只是简单做一个中介就好了——把想要的源和 “调用软件本身的功能” 关联起来。

我认为,提示用户进行简单的手动操作,就是把 chsrc 当成一种文档,chsrc as a document,它和全自动换源仅有一步之遥,从用户的便利性来看,只用多走很小的一步,但是对于维护者的实现来看,就是难以逾越的鸿沟。我们直接点说,那就是投资回报比太小了,没有什么价值

虽然我个人更倾向于安全的自动换源, 但从不同的配置文件格式来看确实很难实现,每次尝试使用正则处理 json, toml 等文件都十分头疼, 而且可读性极差, 让项目变得难以维护。从投入产出比来看这确实是最好的方案了。

@ccmywish
Copy link
Contributor

ccmywish commented Oct 3, 2025

可恶,怎么win和linux还不通用啊

现在的能跑通了吗?我没有环境验证。

@Mikachu2333

This comment was marked as outdated.

@Mikachu2333

This comment was marked as off-topic.

@Mikachu2333

This comment was marked as outdated.

@Mikachu2333 Mikachu2333 requested a review from ccmywish October 3, 2025 04:27
@Mikachu2333
Copy link
Collaborator Author

测试均已通过,我认为可以merge了

增加前缀避免命名冲突
Copy link
Contributor

@ccmywish ccmywish left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

另外再看一下 #294 的问题

@Mikachu2333
Copy link
Collaborator Author

本地测试 merge #298 #300 一切正常

Copy link
Contributor

@ccmywish ccmywish left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍👍👍 辛苦了 @Mikachu2333

@ccmywish ccmywish merged commit 54dbb0e into RubyMetric:dev Oct 6, 2025
@ccmywish ccmywish added this to the v0.2.3 milestone Oct 6, 2025
@ccmywish ccmywish added the pl_target pl target label Oct 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
pl_target pl target
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants