RubyMetric / chsrc

chsrc 全平台通用换源工具. Change Source for every software on every platform from the command line.
https://gitee.com/RubyMetric/chsrc
GNU General Public License v3.0
1.32k stars 54 forks source link

功能需求: 从配置文件中读取源信息而不是写死到.h文件里 #33

Closed myuanz closed 4 weeks ago

myuanz commented 4 weeks ago

写在代码里的源要想更新只能从头更新二进制程序, 如果源已经更新而程序用了旧的, 可能会让用户非常困惑.

配置文件可以放到 github 或者 gitee 的 release 里, 没有什么代价. 也最好支持在命令行指定源配置文件, 这样有一些自定义源需求也可以不需要改代码来实现.

谢谢这个仓库

ccmywish commented 4 weeks ago

Hi @myuanz ,感谢你的反馈和建议。

指定源

  1. 现有的实现可以使用 chsrc set ubuntu <mirror code> 直接选择,因为备选方案还是很多的,一个源不行,还可以选另一个
  2. 我打算后面增加 chsrc set ubuntu https://xxxx 这种形式来支持用户自己指定镜像


源的更新

  1. 源出现暂停服务(最近的dockerhub)和迁移(比如 npmmirror),这些都是一两年才会碰到一次的事情,大多数时候,源都可以稳定工作

  2. 你可以看到,我在 .h 中放的源信息都是存在结构里。 如果把源信息都放一个.txt文件里,就涉及到我如何定义这个文件,以及我如何用C语言去解析。为了极度的跨平台,我已经把依赖降到了最低,因此不可能引入 json yaml 或者其他格式。

  3. 因为不可能一天到晚工作在这个仓库上。所以如果出现了源的更新,其实刚好有机会让我顺势去处理仓库中可能存在的其他问题。这样我就能发一个新的版本,批处理解决掉这些问题。

  4. 你可以看到,我们正在试图给多个包管理器打包,现在已经支持 homebrew,有了这些包管理器,我们的整体更新是十分容易的


配置文件

我感觉你说的配置文件其实有两个意思:

  1. 源信息放在上游仓库里,这是一个配置文件
  2. 用户可以自己定义一个配置文件,用来替代上游的这个

很抱歉我们暂时不会去实现此功能,因为这不符合 chsrc 的设计理念


chsrc 的设计理念

  1. No UFOJust One Single File

    一个简单直接的命令行工具,我不想让它有任何的配置文件,任何的额外下载信息,起着一个不知所以的.chsrc-sources.txt等名字,存放在用户的某个犄角旮旯目录里,让用户设置一个 CHSRC_CONFIG 环境变量,如此种种。

  2. Convention over Configuration

    这是 Ruby 社区和 Groovy 社区的传统,我是从 Ruby 社区成长的,我们不喜欢有任何多余的配置文件。而且从现实角度来说,绝大多数用户都不会自己再去寻找并不停维护镜像源——软件已经做了。

    如果你一定需要自定义,你完全可以利用上述提到的 指定源 中所属的两种方式,来实现自己的一个脚本,来决定对某个软件换特定某个源。


结论

所以抱歉我暂时不会考虑实现这两个功能(从上游某个文件下载源信息,和用户自定义配置),希望你能理解。

如果人们对这两项功能需求数量庞大,我将重新考虑。

ccmywish commented 3 weeks ago

Hi @myuanz

已经可以支持自定义源,如:chsrc set ruby https://gems.ruby-china.com/

但是有些换源的URL和换源方法有关联,不能确保所有源都成功。若测试有问题,可以重新开一个issue.

myuanz commented 3 weeks ago

谢谢