From 616b0caa4829d76ffe5198e29440771da287e314 Mon Sep 17 00:00:00 2001 From: Aoran Zeng Date: Sun, 10 Aug 2025 18:33:28 +0800 Subject: [PATCH] Update pl recipes using chef DSL --- src/framework/core.c | 26 ++++- src/recipe/lang/JavaScript/Bun.c | 59 +++++------ src/recipe/lang/JavaScript/JavaScript.c | 31 ------ src/recipe/lang/JavaScript/Yarn.c | 66 ++++++------- src/recipe/lang/JavaScript/common.h | 125 ++++++++++++------------ src/recipe/lang/JavaScript/npm.c | 69 ++++++------- src/recipe/lang/JavaScript/nvm.c | 73 +++++++------- src/recipe/lang/JavaScript/pnpm.c | 70 ++++++------- src/recipe/lang/Python/PDM.c | 71 ++++++-------- src/recipe/lang/Python/Poetry.c | 67 ++++++------- src/recipe/lang/Python/Python.c | 21 +--- src/recipe/lang/Python/Rye.c | 76 +++++++------- src/recipe/lang/Python/common.h | 105 ++++++++++---------- src/recipe/lang/Python/pip.c | 69 ++++++------- src/recipe/lang/Python/uv.c | 72 +++++++------- 15 files changed, 449 insertions(+), 551 deletions(-) diff --git a/src/framework/core.c b/src/framework/core.c index 9d52fb7..27e5752 100644 --- a/src/framework/core.c +++ b/src/framework/core.c @@ -1088,18 +1088,20 @@ chsrc_set_provider_speed_measure_accuracy (SourceProvider_t *provider, bool accu } + /** - * @brief 填充专用测速链接 + * @brief 提供一个函数,这个函数基于 "换源 URL" 和用户提供的数据来构造和填充精准测速链接 */ static void -chsrc_set_sources_speed_measure_url_with_postfix (Target_t *target, char *postfix) +chsrc_set_sources_speed_measure_url_with_func ( + Target_t *target, + SpeedUrlConstructor_t func, + char *user_data) { Source_t *sources = &target->sources; for (int i=0; iprovider->type; if (IS_DedicatedMirrorSite==type) @@ -1112,13 +1114,27 @@ chsrc_set_sources_speed_measure_url_with_postfix (Target_t *target, char *postfi { /* 为空时才修改 或者里面是脏数据 */ if (NULL==src->speed_measure_url || !chef_is_url (src->speed_measure_url)) - src->speed_measure_url = xy_2strjoin (src->url, postfix); + { + src->speed_measure_url = func (src->url, postfix); + } } } } +/** + * @brief 给 "换源 URL" 增加一个后缀来构造和填充专用测速链接 + */ +static void +chsrc_set_sources_speed_measure_url_with_postfix (Target_t *target, char *postfix) +{ + xy_2strjoin (src->url, postfix); + chsrc_set_sources_speed_measure_url_with_func (target, xy_2strjoin, postfix); +} + + + void chsrc_determine_chgtype (ChgType_t type) diff --git a/src/recipe/lang/JavaScript/Bun.c b/src/recipe/lang/JavaScript/Bun.c index 5360783..d7690ec 100644 --- a/src/recipe/lang/JavaScript/Bun.c +++ b/src/recipe/lang/JavaScript/Bun.c @@ -1,12 +1,37 @@ /** ------------------------------------------------------------ * SPDX-License-Identifier: GPL-3.0-or-later - * ------------------------------------------------------------- - * File Authors : Aoran Zeng - * Contributors : Lontten - * Created On : <2024-09-29> - * Last Modified : <2025-07-22> * ------------------------------------------------------------*/ +def_target(pl_js_bun); + +void +pl_js_bun_prelude (void) +{ + use_this(pl_js_bun); + + chef_set_created_on (this, "2024-09-29"); + chef_set_last_updated (this, "2025-07-22"); + chef_set_sources_last_updated (this, "2025-07-22"); + + chef_set_authors (this, 1, "Aoran Zeng", "ccmywish@qq.com"); + chef_set_chef (this, NULL, NULL); + chef_set_sous_chefs (this, 0); + chef_set_contributors (this, 1, + "Lontten", "lontten@163.com"); + + chef_allow_get(); + chef_allow_set(); + chef_allow_reset(); + + chef_allow_local_mode (this, FullyCan, "支持项目级配置", "Supports project-level configuration"); + chef_allow_english(this); + chef_allow_user_define(this); + + // 用的是 npm Registry 的源,所以使用 pl_js_group 的源 + this->sources = pl_js_group_target.sources; + this->sources_n = pl_js_group_target.sources_n; +} + /** * chsrc get bun */ @@ -58,27 +83,3 @@ pl_js_bun_resetsrc (char *option) { pl_js_bun_setsrc (option); } - - -/** - * chsrc ls bun - */ -Feature_t -pl_js_bun_feat (char *option) -{ - Feature_t f = {0}; - - f.can_get = true; - f.can_reset = true; - - f.cap_locally = FullyCan; - f.cap_locally_explain = NULL; - f.can_english = true; - f.can_user_define = true; - - f.note = NULL; - return f; -} - -// def_target_gsrf(pl_js_bun); -Target_t pl_js_bun_target = {def_target_inner_gsrf(pl_js_bun),def_target_sourcesn(pl_js_group)}; diff --git a/src/recipe/lang/JavaScript/JavaScript.c b/src/recipe/lang/JavaScript/JavaScript.c index 9670b45..9d3f747 100644 --- a/src/recipe/lang/JavaScript/JavaScript.c +++ b/src/recipe/lang/JavaScript/JavaScript.c @@ -26,9 +26,6 @@ pl_js_check_cmd (bool *npm_exist, bool *yarn_exist, bool *pnpm_exist) } -/** - * chsrc get nodejs - */ void pl_js_group_getsrc (char *option) { @@ -57,9 +54,6 @@ pl_js_group_getsrc (char *option) } -/** - * chsrc set nodejs - */ void pl_js_group_setsrc (char *option) { @@ -99,33 +93,8 @@ pl_js_group_setsrc (char *option) } -/** - * chsrc reset nodejs - */ void pl_js_group_resetsrc (char *option) { pl_js_group_setsrc (option); } - - -/** - * chsrc ls nodejs - */ -Feature_t -pl_js_group_feat (char *option) -{ - Feature_t f = {0}; - - f.can_get = true; - f.can_reset = true; - - f.cap_locally = FullyCan; - f.cap_locally_explain = "Support `npm` & `yarn v2` & `pnpm`. No support for `yarn v1`"; - f.can_english = true; - f.can_user_define = true; - - return f; -} - -def_target_gsrf (pl_js_group); diff --git a/src/recipe/lang/JavaScript/Yarn.c b/src/recipe/lang/JavaScript/Yarn.c index 6cdf906..8b05f41 100644 --- a/src/recipe/lang/JavaScript/Yarn.c +++ b/src/recipe/lang/JavaScript/Yarn.c @@ -1,13 +1,37 @@ /** ------------------------------------------------------------ * SPDX-License-Identifier: GPL-3.0-or-later - * ------------------------------------------------------------- - * File Authors : Aoran Zeng - * Contributors : Mr. Will - * Created On : <2023-09-09> - * Major Reviison : 3 - * Last Modified : <2025-07-11> * ------------------------------------------------------------*/ +def_target(pl_js_yarn); + +void +pl_js_yarn_prelude (void) +{ + use_this(pl_js_yarn); + + chef_set_created_on (this, "2023-09-09"); + chef_set_last_updated (this, "2025-07-11"); + chef_set_sources_last_updated (this, "2025-07-11"); + + chef_set_authors (this, 1, "Aoran Zeng", "ccmywish@qq.com"); + chef_set_chef (this, NULL, NULL); + chef_set_sous_chefs (this, 0); + chef_set_contributors (this, 1, + "Mr. Will", "mr.will.com@outlook.com"); + + chef_allow_get(); + chef_allow_set(); + chef_allow_reset(); + + chef_allow_local_mode (this, FullyCan, "支持项目级配置", "Supports project-level configuration"); + chef_allow_english(this); + chef_allow_user_define(this); + + // 使用 pl_js_group 的源 + this->sources = pl_js_group_target.sources; + this->sources_n = pl_js_group_target.sources_n; +} + static double pl_js_yarn_get_yarn_version () { @@ -17,9 +41,6 @@ pl_js_yarn_get_yarn_version () } -/** - * chsrc get yarn - */ void pl_js_yarn_getsrc (char *option) { @@ -78,35 +99,8 @@ pl_js_yarn_setsrc (char *option) } -/** - * chsrc reset yarn - */ void pl_js_yarn_resetsrc (char *option) { pl_js_yarn_setsrc (option); } - - -/** - * chsrc ls yarn - */ -Feature_t -pl_js_yarn_feat (char *option) -{ - Feature_t f = {0}; - - f.can_get = true; - f.can_reset = true; - - f.cap_locally = FullyCan; - f.cap_locally_explain = NULL; - f.can_english = true; - f.can_user_define = true; - - f.note = NULL; - return f; -} - -// def_target_gsrf(pl_js_yarn); -Target_t pl_js_yarn_target = {def_target_inner_gsrf(pl_js_yarn),def_target_sourcesn(pl_js_group)}; diff --git a/src/recipe/lang/JavaScript/common.h b/src/recipe/lang/JavaScript/common.h index dbfd401..e1d413e 100644 --- a/src/recipe/lang/JavaScript/common.h +++ b/src/recipe/lang/JavaScript/common.h @@ -1,86 +1,85 @@ /** ------------------------------------------------------------ * SPDX-License-Identifier: GPL-3.0-or-later - * ------------------------------------------------------------- - * File Authors : Aoran Zeng - * Contributors : Nul None - * | - * Created On : <2023-09-09> - * Major Revision : 1 - * Last Modified : <2025-07-11> * ------------------------------------------------------------*/ -#define PL_JS_Group_Speed_URL_Postfix "/@tensorflow/tfjs/-/tfjs-4.22.0.tgz" - -static SourceProvider_t pl_js_npm_upstream = -{ - def_upstream, "https://www.npmjs.com/", - {NotSkip, NA, NA, "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-4.22.0.tgz", ACCURATE} -}; - static MirrorSite_t NpmMirror = { IS_DedicatedMirrorSite, "npmmirror", "npmmirror", "npmmirror (阿里云赞助)", "https://npmmirror.com/", - // 注意,下面这个是跳转后的地址,不确定未来会不会改变 - {NotSkip, NA, NA, "https://cdn.npmmirror.com/packages/%40tensorflow/tfjs/4.22.0/tfjs-4.22.0.tgz", ACCURATE} // 29MB + {SKIP, NULL, NULL, NULL, ACCURATE} }; -/** - * @update 2025-07-11 - * @sync https://github.com/RubyMetric/chsrc/wiki/Node.js-MirrorSite - * @sync https://github.com/RubyMetric/chsrc/discussions/85 - * - * @note - * Sjtug, Tuna, Lzuoss, Jlu, Bfsu, 网易,搜狐 都没有 - */ -static Source_t pl_js_group_sources[] = +def_target(pl_js_group); + +void +pl_js_group_prelude (void) { - {&pl_js_npm_upstream, "https://registry.npmjs.org/", DelegateToUpstream}, /* @note 根据 pnpm 官网,有最后的斜线 */ - {&NpmMirror, "https://registry.npmmirror.com", DelegateToMirror}, + use_this(pl_js_group); - {&Huawei, "https://mirrors.huaweicloud.com/repository/npm/", - "https://mirrors.huaweicloud.com/repository/npm/" PL_JS_Group_Speed_URL_Postfix}, + chef_set_created_on (this, "2023-09-09"); + chef_set_last_updated (this, "2025-07-11"); + chef_set_sources_last_updated (this, "2025-07-11"); - {&Tencent, "https://mirrors.cloud.tencent.com/npm/", - "https://mirrors.cloud.tencent.com/npm/" PL_JS_Group_Speed_URL_Postfix}, -}; -def_sources_n(pl_js_group); + chef_set_authors (this, 1, "Aoran Zeng", "ccmywish@qq.com"); + chef_set_chef (this, NULL, NULL); + chef_set_sous_chefs (this, 0); + chef_set_contributors (this,0); + + chef_allow_get(); + chef_allow_set(); + chef_allow_reset(); + + chef_allow_local_mode (this, PartiallyCan, "部分包管理器支持项目级换源", "Some package managers support project-level source changing"); + chef_allow_english(this); + chef_allow_user_define(this); + + def_sources_begin() + {&upstream, "https://registry.npmjs.org/", FeedByPrelude}, /* @note 根据 pnpm 官网,有最后的斜线 */ + {&NpmMirror, "https://registry.npmmirror.com", FeedByPrelude}, + {&Huawei, "https://mirrors.huaweicloud.com/repository/npm/", FeedByPrelude}, + {&Tencent, "https://mirrors.cloud.tencent.com/npm/", FeedByPrelude} + def_sources_end() + + // 29MB 大小 + chsrc_set_sources_speed_measure_url_with_postfix (this, "/@tensorflow/tfjs/-/tfjs-4.22.0.tgz"); +} -#define PL_Nodejs_Binary_Speed_URL_Postfix "/v23.4.0/node-v23.4.0-linux-x64.tar.xz" -static SourceProvider_t pl_js_binary_release_upstream = +def_target(pl_js_binary_release); + +void +pl_js_binary_release_prelude (void) { - def_upstream, "https://nodejs.org/", - {NotSkip, NA, NA, "https://nodejs.org/dist/v23.4.0/node-v23.4.0.tar.gz", ACCURATE} // 100MB -}; + use_this(pl_js_binary_release); -/** - * @update 2025-07-11 - * @sync https://github.com/RubyMetric/chsrc/wiki/Node.js-BinaryRelease-MirrorSite - * @sync https://github.com/RubyMetric/chsrc/discussions/85 - * - */ -static Source_t pl_js_binary_release_sources[] = -{ - {&pl_js_binary_release_upstream, "https://nodejs.org/dist/", DelegateToUpstream}, + chef_set_created_on (this, "2023-09-09"); + chef_set_last_updated (this, "2025-07-11"); + chef_set_sources_last_updated (this, "2025-07-11"); - {&NpmMirror, "https://npmmirror.com/mirrors", - "https://registry.npmmirror.com/-/binary/node/v23.4.0/node-v23.4.0.tar.gz"}, + chef_set_authors (this, 1, "Aoran Zeng", "ccmywish@qq.com"); + chef_set_chef (this, NULL, NULL); + chef_set_sous_chefs (this, 0); + chef_set_contributors (this, 1, + "Nul None", "nul@none.org"); - {&Tuna, "https://mirrors.tuna.tsinghua.edu.cn/nodejs-release/", - "https://mirrors.tuna.tsinghua.edu.cn/nodejs-release/" PL_Nodejs_Binary_Speed_URL_Postfix}, + chef_allow_get(); + chef_allow_set(); + chef_allow_reset(); - {&Bfsu, "https://mirrors.bfsu.edu.cn/nodejs-release/", - "https://mirrors.bfsu.edu.cn/nodejs-release/" PL_Nodejs_Binary_Speed_URL_Postfix}, + chef_forbid_local_mode (this); + chef_allow_english(this); + chef_allow_user_define(this); - {&Ustc, "https://mirrors.ustc.edu.cn/node/", - "https://mirrors.ustc.edu.cn/node/" PL_Nodejs_Binary_Speed_URL_Postfix}, + def_sources_begin() + {&upstream, "https://nodejs.org/dist/", FeedByPrelude}, + {&NpmMirror, "https://npmmirror.com/mirrors", FeedByPrelude}, + {&Tuna, "https://mirrors.tuna.tsinghua.edu.cn/nodejs-release/",FeedByPrelude}, + {&Bfsu, "https://mirrors.bfsu.edu.cn/nodejs-release/",FeedByPrelude}, + {&Ustc, "https://mirrors.ustc.edu.cn/node/",FeedByPrelude}, + {&Huawei, "https://mirrors.huaweicloud.com/nodejs/",FeedByPrelude}, + {&Tencent, "https://mirrors.cloud.tencent.com/nodejs-release/", FeedByPrelude} + def_sources_end() - {&Huawei, "https://mirrors.huaweicloud.com/nodejs/", - "https://mirrors.huaweicloud.com/nodejs/" PL_Nodejs_Binary_Speed_URL_Postfix}, - - {&Tencent, "https://mirrors.cloud.tencent.com/nodejs-release/", - "https://mirrors.cloud.tencent.com/nodejs-release/" PL_Nodejs_Binary_Speed_URL_Postfix} -}; -def_sources_n(pl_js_binary_release); + chsrc_set_sources_speed_measure_url_with_postfix (this, "/v23.4.0/node-v23.4.0-linux-x64.tar.xz"); +} diff --git a/src/recipe/lang/JavaScript/npm.c b/src/recipe/lang/JavaScript/npm.c index 799ca45..e3e4420 100644 --- a/src/recipe/lang/JavaScript/npm.c +++ b/src/recipe/lang/JavaScript/npm.c @@ -1,16 +1,38 @@ /** ------------------------------------------------------------ * SPDX-License-Identifier: GPL-3.0-or-later - * ------------------------------------------------------------- - * File Authors : Aoran Zeng - * Contributors : Mr. Will - * Created On : <2023-08-30> - * Major Revision : 2 - * Last Modified : <2025-07-11> * ------------------------------------------------------------*/ -/** - * chsrc get npm - */ +def_target(pl_js_npm); + +void +pl_js_npm_prelude (void) +{ + use_this(pl_js_npm); + + chef_set_created_on (this, "2023-08-30"); + chef_set_last_updated (this, "2025-07-11"); + chef_set_sources_last_updated (this, "2025-07-11"); + + chef_set_authors (this, 1, "Aoran Zeng", "ccmywish@qq.com"); + chef_set_chef (this, NULL, NULL); + chef_set_sous_chefs (this, 0); + chef_set_contributors (this, 1, + "Mr. Will", "mr.will.com@outlook.com"); + + chef_allow_get(); + chef_allow_set(); + chef_allow_reset(); + + chef_allow_local_mode (this, FullyCan, "支持项目级配置", "Supports project-level configuration"); + chef_allow_english(this); + chef_allow_user_define(this); + + // 使用 pl_js_group 的源 + this->sources = pl_js_group_target.sources; + this->sources_n = pl_js_group_target.sources_n; +} + + void pl_js_npm_getsrc (char *option) { @@ -20,8 +42,6 @@ pl_js_npm_getsrc (char *option) /** * @consult https://npmmirror.com/ - * - * chsrc set npm */ void pl_js_npm_setsrc (char *option) @@ -47,35 +67,8 @@ pl_js_npm_setsrc (char *option) } -/** - * chsrc reset npm - */ void pl_js_npm_resetsrc (char *option) { pl_js_npm_setsrc (option); } - - -/** - * chsrc ls npm - */ -Feature_t -pl_js_npm_feat (char *option) -{ - Feature_t f = {0}; - - f.can_get = true; - f.can_reset = true; - - f.cap_locally = FullyCan; - f.cap_locally_explain = NULL; - f.can_english = true; - f.can_user_define = true; - - f.note = NULL; - return f; -} - -// def_target_gsrf(pl_js_npm); -Target_t pl_js_npm_target = {def_target_inner_gsrf(pl_js_npm),def_target_sourcesn(pl_js_group)}; diff --git a/src/recipe/lang/JavaScript/nvm.c b/src/recipe/lang/JavaScript/nvm.c index c23d823..1d2cb54 100644 --- a/src/recipe/lang/JavaScript/nvm.c +++ b/src/recipe/lang/JavaScript/nvm.c @@ -1,16 +1,40 @@ /** ------------------------------------------------------------ * SPDX-License-Identifier: GPL-3.0-or-later - * ------------------------------------------------------------- - * File Authors : Aoran Zeng - * Contributors : Nul None - * | - * Created On : <2024-09-23> - * Last Modified : <2025-06-19> * ------------------------------------------------------------*/ -/** - * chsrc get nvm - */ +def_target(pl_js_nvm); + +void +pl_js_nvm_prelude (void) +{ + use_this(pl_js_nvm); + + chef_set_created_on (this, "2024-09-23"); + chef_set_last_updated (this, "2025-06-19"); + chef_set_sources_last_updated (this, "2025-06-19"); + + chef_set_authors (this, 1, "Aoran Zeng", "ccmywish@qq.com"); + chef_set_chef (this, NULL, NULL); + chef_set_sous_chefs (this, 0); + chef_set_contributors (this, 1, + "Nul None", "nul@none.org"); + + chef_allow_get(); + chef_allow_set(); + chef_allow_reset(); + + chef_forbid_local_mode (this); + chef_allow_english(this); + chef_allow_user_define(this); + + chef_set_note ("nvm does not support Fish", "nvm 不支持 Fish shell"); + + // 使用 pl_js_binary_release 的源 + this->sources = pl_js_binary_release_target.sources; + this->sources_n = pl_js_binary_release_target.sources_n; +} + + void pl_js_nvm_getsrc (char *option) { @@ -23,9 +47,7 @@ pl_js_nvm_getsrc (char *option) * @consult https://mirrors.tuna.tsinghua.edu.cn/help/nodejs-release/ * @issue https://github.com/RubyMetric/chsrc/issues/81 * - * chsrc set nvm - * - * @note nvm does not support Fish + * @note nvm 不支持 Fish */ void pl_js_nvm_setsrc (char *option) @@ -47,9 +69,6 @@ pl_js_nvm_setsrc (char *option) } -/** - * chsrc reset nvm - */ void pl_js_nvm_resetsrc (char *option) { @@ -57,27 +76,3 @@ pl_js_nvm_resetsrc (char *option) chsrc_error ("暂不支持对 nvm 重置"); exit (Exit_Unsupported); } - - -/** - * chsrc ls nvm - */ -Feature_t -pl_js_nvm_feat (char *option) -{ - Feature_t f = {0}; - - f.can_get = true; - f.can_reset = false; - - f.cap_locally = CanNot; - f.cap_locally_explain = ""; - f.can_english = false; - f.can_user_define = true; - - f.note = NULL; - return f; -} - -// def_target_gsrf(pl_js_nvm); -Target_t pl_js_nvm_target = {def_target_inner_gsrf(pl_js_nvm),def_target_sourcesn(pl_js_binary_release)}; diff --git a/src/recipe/lang/JavaScript/pnpm.c b/src/recipe/lang/JavaScript/pnpm.c index 47d5263..c955111 100644 --- a/src/recipe/lang/JavaScript/pnpm.c +++ b/src/recipe/lang/JavaScript/pnpm.c @@ -1,16 +1,38 @@ /** ------------------------------------------------------------ * SPDX-License-Identifier: GPL-3.0-or-later - * ------------------------------------------------------------- - * File Authors : Aoran Zeng - * Contributors : Nul None - * Created On : <2024-04-18> - * Major Revision : 2 - * Last Modified : <2025-07-11> * ------------------------------------------------------------*/ -/** - * chsrc get pnpm - */ +def_target(pl_js_pnpm); + +void +pl_js_pnpm_prelude (void) +{ + use_this(pl_js_pnpm); + + chef_set_created_on (this, "2024-04-18"); + chef_set_last_updated (this, "2025-07-11"); + chef_set_sources_last_updated (this, "2025-07-11"); + + chef_set_authors (this, 1, "Aoran Zeng", "ccmywish@qq.com"); + chef_set_chef (this, NULL, NULL); + chef_set_sous_chefs (this, 0); + chef_set_contributors (this, 1, + "Nul None", "nul@none.org"); + + chef_allow_get(); + chef_allow_set(); + chef_allow_reset(); + + chef_allow_local_mode (this, FullyCan, "支持项目级配置", "Supports project-level configuration"); + chef_allow_english(this); + chef_allow_user_define(this); + + // 使用 pl_js_group 的源 + this->sources = pl_js_group_target.sources; + this->sources_n = pl_js_group_target.sources_n; +} + + void pl_js_pnpm_getsrc (char *option) { @@ -21,8 +43,6 @@ pl_js_pnpm_getsrc (char *option) /** * @consult https://pnpm.io/feature-comparison * @consult https://pnpm.io/cli/config - * - * chsrc set pnpm */ void pl_js_pnpm_setsrc (char *option) @@ -48,36 +68,8 @@ pl_js_pnpm_setsrc (char *option) } -/** - * chsrc reset pnpm - */ void pl_js_pnpm_resetsrc (char *option) { pl_js_pnpm_setsrc (option); } - - -/** - * chsrc ls pnpm - */ -Feature_t -pl_js_pnpm_feat (char *option) -{ - Feature_t f = {0}; - - f.can_get = true; - f.can_reset = true; - - f.cap_locally = FullyCan; - f.cap_locally_explain = NULL; - f.can_english = true; - f.can_user_define = true; - - f.note = NULL; - return f; -} - - -// def_target_gsrf(pl_js_pnpm); -Target_t pl_js_pnpm_target = {def_target_inner_gsrf(pl_js_pnpm),def_target_sourcesn(pl_js_group)}; diff --git a/src/recipe/lang/Python/PDM.c b/src/recipe/lang/Python/PDM.c index fdfeba9..6c3c619 100644 --- a/src/recipe/lang/Python/PDM.c +++ b/src/recipe/lang/Python/PDM.c @@ -1,15 +1,38 @@ /** ------------------------------------------------------------ * SPDX-License-Identifier: GPL-3.0-or-later - * ------------------------------------------------------------- - * File Authors : Aoran Zeng - * Contributors : Nul None - * Created On : <2024-06-05> - * Last Modified : <2025-07-11> * ------------------------------------------------------------*/ -/** - * chsrc get pdm - */ +def_target(pl_python_pdm); + +void +pl_python_pdm_prelude (void) +{ + use_this(pl_python_pdm); + + chef_set_created_on (this, "2024-06-05"); + chef_set_last_updated (this, "2025-07-11"); + chef_set_sources_last_updated (this, "2025-07-11"); + + chef_set_authors (this, 1, "Aoran Zeng", "ccmywish@qq.com"); + chef_set_chef (this, NULL, NULL); + chef_set_sous_chefs (this, 0); + chef_set_contributors (this, 1, + "Nul None", "nul@none.org"); + + chef_allow_get(); + chef_allow_set(); + chef_allow_reset(); + + chef_allow_local_mode (this, FullyCan, "支持项目级配置", "Supports project-level configuration"); + chef_allow_english(this); + chef_allow_user_define(this); + + // 使用 pl_python_group 的源 + this->sources = pl_python_group_target.sources; + this->sources_n = pl_python_group_target.sources_n; +} + + void pl_python_pdm_getsrc (char *option) { @@ -22,8 +45,6 @@ pl_python_pdm_getsrc (char *option) /** * @consult https://github.com/RubyMetric/chsrc/issues/19 - * - * chsrc set pdm */ void pl_python_pdm_setsrc (char *option) @@ -48,38 +69,8 @@ pl_python_pdm_setsrc (char *option) } } - -/** - * chsrc reset pdm - */ void pl_python_pdm_resetsrc (char *option) { pl_python_pdm_setsrc (option); } - - -/** - * chsrc ls pdm - */ -Feature_t -pl_python_pdm_feat (char *option) -{ - Feature_t f = {0}; - - f.can_get = true; - f.can_reset = true; - - // PDM 完全支持项目级换源 - f.cap_locally = FullyCan; - f.cap_locally_explain = NULL; - - f.can_english = true; - f.can_user_define = true; - - f.note = NULL; - return f; -} - -// def_target_gsrf(pl_python_pdm); -Target_t pl_python_pdm_target = {def_target_inner_gsrf(pl_python_pdm),def_target_sourcesn(pl_python_group)}; diff --git a/src/recipe/lang/Python/Poetry.c b/src/recipe/lang/Python/Poetry.c index ae6236d..e3159d4 100644 --- a/src/recipe/lang/Python/Poetry.c +++ b/src/recipe/lang/Python/Poetry.c @@ -1,17 +1,37 @@ /** ------------------------------------------------------------ * SPDX-License-Identifier: GPL-3.0-or-later - * ------------------------------------------------------------- - * File Authors : Aoran Zeng - * Contributors : Nil Null - * Created On : <2024-08-08> - * Last Modified : <2025-07-11> * ------------------------------------------------------------*/ -// @note Poetry 默认使用项目级换源 +def_target(pl_python_poetry); + +void +pl_python_poetry_prelude (void) +{ + use_this(pl_python_poetry); + + chef_set_created_on (this, "2024-08-08"); + chef_set_last_updated (this, "2025-07-11"); + chef_set_sources_last_updated (this, "2025-07-11"); + + chef_set_authors (this, 1, "Aoran Zeng", "ccmywish@qq.com"); + chef_set_chef (this, NULL, NULL); + chef_set_sous_chefs (this, 0); + chef_set_contributors (this, 1, + "Nil Null", "nil@null.org"); + + chef_allow_get(); + chef_allow_set(); + chef_allow_reset(); + + chef_allow_local_mode (this, FullyCan, "Poetry 默认使用项目级换源", "Poetry uses project-level source changing by default"); + chef_allow_english(this); + chef_allow_user_define(this); + + // 使用 pl_python_group 的源 + this->sources = pl_python_group_target.sources; + this->sources_n = pl_python_group_target.sources_n; +} -/** - * chsrc get poetry - */ void pl_python_poetry_getsrc (char *option) { @@ -21,8 +41,6 @@ pl_python_poetry_getsrc (char *option) /** * @consult https://python-poetry.org/docs/repositories/#project-configuration - * - * chsrc set poetry */ void pl_python_poetry_setsrc (char *option) @@ -47,35 +65,8 @@ pl_python_poetry_setsrc (char *option) } -/** - * chsrc reset poetry - */ void pl_python_poetry_resetsrc (char *option) { pl_python_poetry_setsrc (option); } - - -/** - * chsrc ls poetry - */ -Feature_t -pl_python_poetry_feat (char *option) -{ - Feature_t f = {0}; - - f.can_get = true; - f.can_reset = true; - - f.cap_locally = FullyCan; - f.cap_locally_explain = NULL; - f.can_english = false; - f.can_user_define = true; - - f.note = NULL; - return f; -} - -// def_target_gsrf(pl_python_poetry); -Target_t pl_python_poetry_target = {def_target_inner_gsrf(pl_python_poetry),def_target_sourcesn(pl_python_group)}; diff --git a/src/recipe/lang/Python/Python.c b/src/recipe/lang/Python/Python.c index 2507674..af8a759 100644 --- a/src/recipe/lang/Python/Python.c +++ b/src/recipe/lang/Python/Python.c @@ -6,7 +6,6 @@ * | * Created On : <2023-09-03> * Last Modified : <2025-07-14> - * * ------------------------------------------------------------*/ void @@ -85,27 +84,9 @@ pl_python_group_setsrc (char *option) chsrc_conclude (&source); } + void pl_python_group_resetsrc (char *option) { pl_python_group_setsrc (option); } - - -Feature_t -pl_python_group_feat (char *option) -{ - Feature_t f = {0}; - - f.can_get = true; - f.can_reset = true; - - f.cap_locally = PartiallyCan; - f.cap_locally_explain = "Support Poetry, PDM, uv. No support for pip"; - f.can_english = false; - f.can_user_define = true; - - return f; -} - -def_target_gsrf(pl_python_group); diff --git a/src/recipe/lang/Python/Rye.c b/src/recipe/lang/Python/Rye.c index 509c1bd..474e7d3 100644 --- a/src/recipe/lang/Python/Rye.c +++ b/src/recipe/lang/Python/Rye.c @@ -1,14 +1,40 @@ /** ------------------------------------------------------------ * SPDX-License-Identifier: GPL-3.0-or-later - * ------------------------------------------------------------- - * File Authors : Aoran Zeng - * Contributors : Nul None - * Created On : <2024-12-06> - * Last Modified : <2025-08-09> - * - * 由于Rye已经有后继uv了,所以我们不把该管理器纳入Python group中 * ------------------------------------------------------------*/ +def_target(pl_python_rye); + +void +pl_python_rye_prelude (void) +{ + use_this(pl_python_rye); + + chef_set_created_on (this, "2024-12-06"); + chef_set_last_updated (this, "2025-08-09"); + chef_set_sources_last_updated (this, "2025-08-09"); + + chef_set_authors (this, 1, "Aoran Zeng", "ccmywish@qq.com"); + chef_set_chef (this, NULL, NULL); + chef_set_sous_chefs (this, 0); + chef_set_contributors (this, 1, + "Nul None", "nul@none.org"); + + chef_allow_get(); + chef_allow_set(); + chef_allow_reset(); + + chef_allow_local_mode (this, FullyCan, "支持项目级配置", "Supports project-level configuration"); + chef_allow_english(this); + chef_allow_user_define(this); + + chef_set_note ("由于Rye已经有后继uv了,所以我们不把该管理器纳入Python group中", + "Since Rye has successor uv, we don't include this manager in Python group"); + + // 使用 pl_python_group 的源 + this->sources = pl_python_group_target.sources; + this->sources_n = pl_python_group_target.sources_n; +} + char * pl_python_find_rye_config () { @@ -18,9 +44,8 @@ pl_python_find_rye_config () return rye_config; } -/** - * chsrc get rye - */ + + void pl_python_rye_getsrc (char *option) { @@ -31,9 +56,6 @@ pl_python_rye_getsrc (char *option) /** * @consult https://github.com/RubyMetric/chsrc/issues/127 - * @consult recipe Java - * - * chsrc set rye */ void pl_python_rye_setsrc (char *option) @@ -55,36 +77,8 @@ pl_python_rye_setsrc (char *option) } -/** - * chsrc reset rye - */ void pl_python_rye_resetsrc (char *option) { pl_python_rye_setsrc (option); } - - -/** - * chsrc ls rye - */ -Feature_t -pl_python_rye_feat (char *option) -{ - Feature_t f = {0}; - - f.can_get = true; - f.can_reset = true; - - f.cap_locally = true; - f.cap_locally_explain = NULL; - - f.can_english = false; - f.can_user_define = true; - - f.note = NULL; - return f; -} - -// def_target_gsrf(pl_python_rye); -Target_t pl_python_rye_target = {def_target_inner_gsrf(pl_python_rye),def_target_sourcesn(pl_python_group)}; diff --git a/src/recipe/lang/Python/common.h b/src/recipe/lang/Python/common.h index 2889e10..9b6b784 100644 --- a/src/recipe/lang/Python/common.h +++ b/src/recipe/lang/Python/common.h @@ -1,80 +1,73 @@ /** ------------------------------------------------------------ * SPDX-License-Identifier: GPL-3.0-or-later - * ------------------------------------------------------------- - * File Authors : Aoran Zeng - * Contributors : yongxiang <1926885268@qq.com> - * | happy game - * | - * Created On : <2023-09-03> - * Major Revision : 1 - * Last Modified : <2025-07-14> * ------------------------------------------------------------*/ - #include "rawstr4c.h" +#include "rawstr4c.h" + +def_target(pl_python_group); /** - * 注意这个前缀是 host/pipi/web/pacakges.... + * @note 测速链接的这个前缀是 ${host}/pipi/web/pacakges/56/e4.... * 下面有几个镜像站微调了这个路径,我们只要确认能找到 packages 目录就好 */ -#define PL_Python_Group_Speed_URL_Postfix "/packages/56/e4/55aaac2b15af4dad079e5af329a79d961e5206589d0e02b1e8da221472ed/tensorflow-2.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" - -static SourceProvider_t pl_python_pypi_upstream = +static char * +pl_python_speed_url_constructor (char *url, char *user_data) { - def_upstream, "https://pypi.org/", - {NotSkip, NA, NA, "https://files.pythonhosted.org/packages/56/e4/55aaac2b15af4dad079e5af329a79d961e5206589d0e02b1e8da221472ed/tensorflow-2.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", ACCURATE} // 260MB -}; + char *str = xy_str_delete_suffix ("/simple"); + str = xy_2strjoin (str, "/packages/56/e4/55aaac2b15af4dad079e5af329a79d961e5206589d0e02b1e8da221472ed/tensorflow-2.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl"); + return str; +} -/** - * @update 2025-07-11 - * @note 不要添加Zju,浙大的PyPI服务在校外访问会自动转向Tuna - */ -static Source_t pl_python_group_sources[] = + +void +pl_python_group_prelude (void) { - {&pl_python_pypi_upstream, "https://pypi.org/simple", DelegateToUpstream}, + use_this(pl_python_group); - {&MirrorZ, "https://mirrors.cernet.edu.cn/pypi/web/simple", - "https://mirrors.cernet.edu.cn/pypi/web" PL_Python_Group_Speed_URL_Postfix}, + chef_set_created_on (this, "2023-09-03"); + chef_set_last_updated (this, "2025-07-14"); + chef_set_sources_last_updated (this, "2025-07-11"); - {&Bfsu, "https://mirrors.bfsu.edu.cn/pypi/web/simple", - "https://mirrors.bfsu.edu.cn/pypi/web" PL_Python_Group_Speed_URL_Postfix}, + chef_set_authors (this, 1, "Aoran Zeng", "ccmywish@qq.com"); + chef_set_chef (this, NULL, NULL); + chef_set_sous_chefs (this, 0); + chef_set_contributors (this, 2, + "yongxiang", "1926885268@qq.com", + "happy game", "happygame1024@gmail.com"); - {&Lzuoss, "https://mirror.lzu.edu.cn/pypi/web/simple", - "https://mirror.lzu.edu.cn/pypi/web" PL_Python_Group_Speed_URL_Postfix}, + chef_allow_get(); + chef_allow_set(); + chef_allow_reset(); - {&Jlu, "https://mirrors.jlu.edu.cn/pypi/web/simple", - "https://mirrors.jlu.edu.cn/pypi/web" PL_Python_Group_Speed_URL_Postfix}, + chef_allow_local_mode (this, PartiallyCan, "部分包管理器支持项目级换源", "Some package managers support project-level source changing"); + chef_allow_english(this); + chef_allow_user_define(this); - {&Sjtug_Zhiyuan, "https://mirror.sjtu.edu.cn/pypi/web/simple", - "https://mirror.sjtu.edu.cn/pypi/web" PL_Python_Group_Speed_URL_Postfix}, - {&Tuna, "https://pypi.tuna.tsinghua.edu.cn/simple", - "https://pypi.tuna.tsinghua.edu.cn" PL_Python_Group_Speed_URL_Postfix}, + def_sources_begin() + {&upstream, "https://pypi.org/simple", FeedByPrelude}, + {&MirrorZ, "https://mirrors.cernet.edu.cn/pypi/web/simple",FeedByPrelude}, + {&Bfsu, "https://mirrors.bfsu.edu.cn/pypi/web/simple", FeedByPrelude}, + /* 不要添加Zju,浙大的PyPI服务在校外访问会自动转向Tuna */ + {&Lzuoss, "https://mirror.lzu.edu.cn/pypi/web/simple",FeedByPrelude}, + {&Jlu, "https://mirrors.jlu.edu.cn/pypi/web/simple",FeedByPrelude}, + {&Sjtug_Zhiyuan, "https://mirror.sjtu.edu.cn/pypi/web/simple",FeedByPrelude, + {&Tuna, "https://pypi.tuna.tsinghua.edu.cn/simple", FeedByPrelude}, + {&Ali, "https://mirrors.aliyun.com/pypi/simple/", FeedByPrelude}, + {&Nju, "https://mirror.nju.edu.cn/pypi/web/simple",FeedByPrelude}, + {&Pku, "https://mirrors.pku.edu.cn/pypi/web/simple",FeedByPrelude}, + {&Tencent, "https://mirrors.cloud.tencent.com/pypi/simple",FeedByPrelude}, - {&Ali, "https://mirrors.aliyun.com/pypi/simple/", - "https://mirrors.aliyun.com/pypi" PL_Python_Group_Speed_URL_Postfix}, - - {&Nju, "https://mirror.nju.edu.cn/pypi/web/simple", - "https://mirror.nju.edu.cn/pypi/web" PL_Python_Group_Speed_URL_Postfix}, - - {&Pku, "https://mirrors.pku.edu.cn/pypi/web/simple", - "https://mirrors.pku.edu.cn/pypi/web" PL_Python_Group_Speed_URL_Postfix}, - - {&Tencent, "https://mirrors.cloud.tencent.com/pypi/simple", - "https://mirrors.cloud.tencent.com/pypi" PL_Python_Group_Speed_URL_Postfix}, - - // {&Tencent_Intra, "https://mirrors.cloud.tencentyun.com/pypi/simple", - // "https://mirrors.cloud.tencentyun.com/pypi" PL_Python_Group_Speed_URL_Postfix, - - {&Huawei, "https://mirrors.huaweicloud.com/repository/pypi/simple", - "https://mirrors.huaweicloud.com/repository/pypi" PL_Python_Group_Speed_URL_Postfix}, - - {&Hust, "https://mirrors.hust.edu.cn/pypi/web/simple", - "https://mirrors.hust.edu.cn/pypi/web" PL_Python_Group_Speed_URL_Postfix}, + // {&Tencent_Intra, "https://mirrors.cloud.tencentyun.com/pypi/simple",FeedByPrelude} + {&Huawei, "https://mirrors.huaweicloud.com/repository/pypi/simple",FeedByPrelude}, + {&Hust, "https://mirrors.hust.edu.cn/pypi/web/simple",FeedByPrelude} /* 不启用原因:24小时更新一次 */ // {&Netease, "https://mirrors.163.com/.help/pypi.html", NULL} -}; -def_sources_n(pl_python_group); + def_sources_end() + + chsrc_set_sources_speed_measure_url_with_func (this, pl_python_speed_url_constructor, NULL); +} void pl_python_check_unofficial_pkger (bool *poetry_exist, bool *pdm_exist, bool *uv_exist) diff --git a/src/recipe/lang/Python/pip.c b/src/recipe/lang/Python/pip.c index 7f482ee..e580672 100644 --- a/src/recipe/lang/Python/pip.c +++ b/src/recipe/lang/Python/pip.c @@ -1,15 +1,38 @@ /** ------------------------------------------------------------ * SPDX-License-Identifier: GPL-3.0-or-later - * ------------------------------------------------------------- - * File Authors : Aoran Zeng - * Contributors : Nul None - * Created On : <2023-09-03> - * Last Modified : <2025-07-11> * ------------------------------------------------------------*/ -/** - * chsrc get pip - */ +def_target(pl_python_pip); + +void +pl_python_pip_prelude (void) +{ + use_this(pl_python_pip); + + chef_set_created_on (this, "2023-09-03"); + chef_set_last_updated (this, "2025-07-11"); + chef_set_sources_last_updated (this, "2025-07-11"); + + chef_set_authors (this, 1, "Aoran Zeng", "ccmywish@qq.com"); + chef_set_chef (this, NULL, NULL); + chef_set_sous_chefs (this, 0); + chef_set_contributors (this, 1, + "Nul None", "nul@none.org"); + + chef_allow_get(); + chef_allow_set(); + chef_allow_reset(); + + chef_forbid_local_mode (this); + chef_allow_english(this); + chef_allow_user_define(this); + + // 使用 pl_python_group 的源 + this->sources = pl_python_group_target.sources; + this->sources_n = pl_python_group_target.sources_n; +} + + void pl_python_pip_getsrc (char *option) { @@ -23,8 +46,6 @@ pl_python_pip_getsrc (char *option) /** * @consult https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ - * - * chsrc set pip */ void pl_python_pip_setsrc (char *option) @@ -59,36 +80,8 @@ pl_python_pip_setsrc (char *option) } -/** - * chsrc reset pip - */ void pl_python_pip_resetsrc (char *option) { pl_python_pip_setsrc (option); } - - -/** - * chsrc ls pip - */ -Feature_t -pl_python_pip_feat (char *option) -{ - Feature_t f = {0}; - - f.can_get = true; - f.can_reset = true; - - // pip 不支持项目级换源 - f.cap_locally = CanNot; - f.cap_locally_explain = NULL; - f.can_english = true; - f.can_user_define = true; - - f.note = NULL; - return f; -} - -// def_target_gsrf(pl_python_pip); -Target_t pl_python_pip_target = {def_target_inner_gsrf(pl_python_pip),def_target_sourcesn(pl_python_group)}; diff --git a/src/recipe/lang/Python/uv.c b/src/recipe/lang/Python/uv.c index 4c0891b..8653d96 100644 --- a/src/recipe/lang/Python/uv.c +++ b/src/recipe/lang/Python/uv.c @@ -1,15 +1,41 @@ /** ------------------------------------------------------------ * SPDX-License-Identifier: GPL-3.0-or-later - * ------------------------------------------------------------- - * File Authors : happy game - * Contributors : ccy - * | Aoran Zeng - * | - * Created On : <2024-12-11> - * Major Revision : 1 - * Last Modified : <2025-08-09> * ------------------------------------------------------------*/ +def_target(pl_python_uv); + +void +pl_python_uv_prelude (void) +{ + use_this(pl_python_uv); + + chef_set_created_on (this, "2024-12-11"); + chef_set_last_updated (this, "2025-08-09"); + chef_set_sources_last_updated (this, "2025-08-09"); + + chef_set_authors (this, 1, "happy game", "happygame1024@gmail.com"); + chef_set_chef (this, NULL, NULL); + chef_set_sous_chefs (this, 0); + chef_set_contributors (this, 2, + "ccy", "icuichengyi@gmail.com", + "Aoran Zeng", "ccmywish@qq.com"); + + chef_allow_get(); + chef_allow_set(); + chef_allow_reset(); + + chef_allow_local_mode (this, FullyCan, "支持项目级配置", "Supports project-level configuration"); + chef_allow_english(this); + chef_allow_user_define(this); + + chef_set_note ("uv的配置优先级顺序: $workspaces/uv.toml > $workspaces/pyproject.toml > ~/.config/uv/uv.toml > /etc/uv/uv.toml", + "uv config priority order: $workspaces/uv.toml > $workspaces/pyproject.toml > ~/.config/uv/uv.toml > /etc/uv/uv.toml"); + + // 使用 pl_python_group 的源 + this->sources = pl_python_group_target.sources; + this->sources_n = pl_python_group_target.sources_n; +} + /** * chsrc get uv * @@ -84,8 +110,6 @@ pl_python_uv_getsrc (char *option) /** * @consult https://docs.astral.sh/uv/configuration/files/ * https://github.com/RubyMetric/chsrc/issues/139 - * - * chsrc set uv */ void pl_python_uv_setsrc (char *option) @@ -148,36 +172,8 @@ pl_python_uv_setsrc (char *option) } -/** - * chsrc reset uv - */ void pl_python_uv_resetsrc (char *option) { pl_python_uv_setsrc (option); } - - -/** - * chsrc ls uv - */ -Feature_t -pl_python_uv_feat (char *option) -{ - Feature_t f = {0}; - - f.can_get = true; - f.can_reset = true; - - f.cap_locally = true; - f.cap_locally_explain = NULL; - - f.can_english = false; - f.can_user_define = true; - - f.note = NULL; - return f; -} - -// def_target_gsrf(pl_python_uv); -Target_t pl_python_uv_target = {def_target_inner_gsrf(pl_python_uv),def_target_sourcesn(pl_python_group)};