Add support for Rust

This commit is contained in:
Aoran Zeng
2023-09-05 14:17:31 +08:00
parent d08b8ca9be
commit b7bbba9f03
3 changed files with 36 additions and 35 deletions

View File

@@ -31,6 +31,8 @@ set <target> def(ault) # 换源,默认使用维护团队测速第一的源
set <target> <mirror> # 换源,指定使用某镜像站 set <target> <mirror> # 换源,指定使用某镜像站
``` ```
<br>
## 编程语言开发 ## 编程语言开发
```bash ```bash
@@ -38,19 +40,21 @@ chsrc set ruby 或 chsrc set gem
chsrc set python 或 chsrc set pip chsrc set python 或 chsrc set pip
chsrc set node 或 chsrc set npm 或 chsrc set nodejs chsrc set node 或 chsrc set npm 或 chsrc set nodejs
chsrc set perl 或 chsrc set cpan chsrc set perl 或 chsrc set cpan
chsrc set php 或 chsrc composer chsrc set php 或 chsrc set composer
chsrc set go chsrc set go
chsrc set rust 或 chsrc set cargo 或 chsrc set crate
chsrc set java 或 chsrc set maven 或 chsrc set mvn 或 chsrc gradle chsrc set java 或 chsrc set maven 或 chsrc set mvn 或 chsrc gradle
# 额外会为 bioconductor 换源 # 同时会为 bioconductor 换源
chsrc set r 或 chsrc set cran chsrc set r 或 chsrc set cran
chsrc set julia chsrc set julia
``` ```
TODO: TODO: 上述已全部完成,但
- [ ] `chsrc set rust``chsrc set cargo``chsrc crate`
1. 部分换源方案当前需要用户进行少量手动操作如 `java``rust`
2. 还未经多平台测试
## 操作系统 ## 操作系统

51
chsrc.c
View File

@@ -17,11 +17,11 @@
/** /**
* 检测二进制程序是否存在 * 检测二进制程序是否存在
* *
* @param[in] check_cmd 检测 `progname` 是否存在的一段命令,一般来说,填 `progname` 本身即可, * @param check_cmd 检测 `progname` 是否存在的一段命令,一般来说,填 `progname` 本身即可,
* 但是某些情况下,需要使用其他命令绕过一些特殊情况,比如 python 这个命令在Windows上 * 但是某些情况下,需要使用其他命令绕过一些特殊情况,比如 python 这个命令在Windows上
* 会自动打开 Microsoft Store需避免 * 会自动打开 Microsoft Store需避免
* *
* @param[in] progname 要检测的二进制程序名 * @param progname 要检测的二进制程序名
*/ */
bool bool
does_the_program_exist (char* check_cmd, char* progname) does_the_program_exist (char* check_cmd, char* progname)
@@ -30,11 +30,11 @@ does_the_program_exist (char* check_cmd, char* progname)
int ret = system(which); int ret = system(which);
char buf[32] = {0}; // char buf[32] = {0}; sprintf(buf, "错误码: %d", ret);
sprintf(buf, "错误码: %d", ret);
if (0!=ret) { if (0!=ret) {
xy_warn (xy_strjoin(4, "× 命令 ", progname, " 不存在,", buf)); // xy_warn (xy_strjoin(4, "× 命令 ", progname, " 不存在,", buf));
xy_warn (xy_strjoin(3, "× 命令 ", progname, " 不存在"));
return false; return false;
} else { } else {
xy_success (xy_strjoin(3, "√ 命令 ", progname, " 存在")); xy_success (xy_strjoin(3, "√ 命令 ", progname, " 存在"));
@@ -516,18 +516,21 @@ pl_go_setsrc (char* option)
/* TODO: 暂未实现 */
void void
pl_rust_getsrc (char* option) pl_rust_getsrc (char* option)
{ {
// char* cmd = "npm config get registry"; char* cmd = NULL;
// system(cmd); if(xy_on_windows) {
cmd = "type %USERPROFILE%\\.cargo";
} else {
cmd = "cat ~/.cargo";
}
chsrc_logcmd(cmd);
system(cmd);
} }
/** /**
* Rust 换源 * Rust 换源参考https://mirrors.tuna.tsinghua.edu.cn/help/crates.io-index/
*
* 参考https://help.mirrors.cernet.edu.cn/crates.io-index.git
*/ */
void void
pl_rust_setsrc (char* option) pl_rust_setsrc (char* option)
@@ -548,16 +551,10 @@ pl_rust_setsrc (char* option)
"replace-with = 'mirror'\n\n" "replace-with = 'mirror'\n\n"
"[source.mirror]\n" "[source.mirror]\n"
"registry = \"", source.url, "\""); "registry = \"sparse+", source.url, "\"");
xy_warn ("chsrc: 请您手动写入以下内容到 ~/.cargo 文件中");
char* cmd = NULL; puts(file);
if (xy_on_windows)
cmd = xy_strjoin(3, "echo ", file, ">> \%USERPROFILE%\\.cargo");
else
cmd = xy_strjoin(3, "echo ", file, ">> $HOME/.cargo");
system(cmd);
chsrc_say_thanks(&source); chsrc_say_thanks(&source);
} }
@@ -1027,13 +1024,13 @@ def_target_info(pl_nodejs);
def_target_info(pl_perl); def_target_info(pl_perl);
def_target_info(pl_php); def_target_info(pl_php);
def_target_info(pl_go); def_target_info(pl_go);
def_target_info(pl_rust);
def_target_info(pl_java); def_target_info(pl_java);
def_target_info(pl_r); def_target_info(pl_r);
def_target_info(pl_julia); def_target_info(pl_julia);
target_info target_info
pl_rust_target = {pl_rust_setsrc, NULL, pl_rust_sources, pl_rust_sources_n}, pl_dotnet_target = {pl_dotnet_setsrc, NULL, pl_dotnet_sources, pl_dotnet_sources_n};
pl_dotnet_target = {pl_dotnet_setsrc, NULL, pl_dotnet_sources, pl_dotnet_sources_n};
#define targetinfo(t) (const char const*)t #define targetinfo(t) (const char const*)t
@@ -1256,9 +1253,9 @@ iterate_targets_(const char const*** array, size_t size, const char* input, cons
/** /**
* 寻找target并根据`code`执行相应的操作 * 寻找target并根据`code`执行相应的操作
* *
* @param[in] input 用户输入的目标 * @param input 用户输入的目标
* @param[in] code 对target要执行的操作 * @param code 对target要执行的操作
* @param[in] option 额外的指示可为NULL * @param option 额外的指示可为NULL
* *
* @return 找到目标返回true未找到返回false * @return 找到目标返回true未找到返回false
*/ */

View File

@@ -228,17 +228,17 @@ pl_go_sources[] = {
/** /**
* 2023-08-30 更新 * 2023-09-05 更新
* *
* TODO: 1. 速度未经测试请Rust用户协助 * @note 缺少商业公司或开源社区软件源
* 2. 缺少商业公司或开源社区软件源 *
* @note 以下都支持稀疏索引,我们换源时都将默认添加 `sparse+`
*/ */
pl_rust_sources[] = { pl_rust_sources[] = {
{&Sjtug_Zhiyuan, "https://mirrors.sjtug.sjtu.edu.cn/crates.io-index/"}, {&Sjtug_Zhiyuan, "https://mirrors.sjtug.sjtu.edu.cn/crates.io-index/"},
{&Tuna, "https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/"}, {&Tuna, "https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/"},
{&Bfsu, "https://mirrors.bfsu.edu.cn/crates.io-index/"}, {&Bfsu, "https://mirrors.bfsu.edu.cn/crates.io-index/"},
{&Ustc, "https://mirrors.ustc.edu.cn/crates.io-index/"}, {&Ustc, "https://mirrors.ustc.edu.cn/crates.io-index/"},
{&Cqu, "https://mirrors.cqu.edu.cn/crates.io-index/"}
}, },