mirror of
https://gitee.com/RubyMetric/chsrc.git
synced 2025-12-29 22:42:45 +00:00
Merge pull request #328 from MingriLingran/main
在Windows上使用 `PowerShell` 替代 `sed` 和 `grep` 来处理 `uv` 配置文件
This commit is contained in:
commit
79b9f8dbfd
|
|
@ -75,6 +75,7 @@ chsrc_register_contributors ()
|
|||
// 该 ID 为 Gitee ID
|
||||
chef_register_contributor ("@hezonglun", "HeZongLun", "hezonglun123456@outlook.com", NULL);
|
||||
chef_register_contributor ("@Young-Lord", "LY", "ly-niko@qq.com", NULL);
|
||||
chef_register_contributor ("@MingriLingran", "MingriLingran", "i@linran.moe", NULL);
|
||||
|
||||
/**
|
||||
* AI贡献者:
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
/**
|
||||
|
|
@ -14,3 +15,8 @@ char RAWSTR_pl_python_test_uv_if_set_source[] = "\x67\x72\x65\x70\x20\x2d\x71\x2
|
|||
|
||||
char RAWSTR_pl_python_rye_config[] = "\x5b\x5b\x73\x6f\x75\x72\x63\x65\x73\x5d\x5d\x0a\x6e\x61\x6d\x65\x20\x3d\x20\x22\x40\x31\x40\x22\x0a\x75\x72\x6c\x20\x20\x3d\x20\x22\x40\x32\x40\x22";
|
||||
|
||||
char RAWSTR_pl_python_test_uv_if_set_source_on_windows[] = "\x70\x6f\x77\x65\x72\x73\x68\x65\x6c\x6c\x20\x2d\x43\x6f\x6d\x6d\x61\x6e\x64\x20\x22\x69\x66\x20\x28\x47\x65\x74\x2d\x43\x6f\x6e\x74\x65\x6e\x74\x20\x40\x66\x40\x20\x7c\x20\x53\x65\x6c\x65\x63\x74\x2d\x53\x74\x72\x69\x6e\x67\x20\x27\x5e\x5c\x5b\x5c\x5b\x69\x6e\x64\x65\x78\x5c\x5d\x5c\x5d\x24\x27\x29\x20\x7b\x20\x65\x78\x69\x74\x20\x30\x20\x7d\x20\x65\x6c\x73\x65\x20\x7b\x20\x65\x78\x69\x74\x20\x31\x20\x7d\x22";
|
||||
|
||||
char RAWSTR_pl_python_set_uv_config_on_windows[] = "\x70\x6f\x77\x65\x72\x73\x68\x65\x6c\x6c\x20\x2d\x43\x6f\x6d\x6d\x61\x6e\x64\x20\x22\x24\x63\x6f\x6e\x74\x65\x6e\x74\x20\x3d\x20\x47\x65\x74\x2d\x43\x6f\x6e\x74\x65\x6e\x74\x20\x27\x40\x66\x40\x27\x3b\x20\x24\x63\x6f\x6e\x74\x65\x6e\x74\x20\x3d\x20\x24\x63\x6f\x6e\x74\x65\x6e\x74\x20\x2d\x72\x65\x70\x6c\x61\x63\x65\x20\x27\x5e\x75\x72\x6c\x20\x3d\x20\x5c\x22\x2e\x2a\x5c\x22\x24\x27\x2c\x20\x27\x75\x72\x6c\x20\x3d\x20\x5c\x22\x40\x75\x72\x6c\x40\x5c\x22\x27\x3b\x20\x24\x63\x6f\x6e\x74\x65\x6e\x74\x20\x7c\x20\x53\x65\x74\x2d\x43\x6f\x6e\x74\x65\x6e\x74\x20\x27\x40\x66\x40\x27\x22";
|
||||
|
||||
char RAWSTR_pl_python_get_uv_config_on_windows[] = "\x70\x6f\x77\x65\x72\x73\x68\x65\x6c\x6c\x20\x2d\x43\x6f\x6d\x6d\x61\x6e\x64\x20\x22\x24\x6c\x69\x6e\x65\x73\x20\x3d\x20\x47\x65\x74\x2d\x43\x6f\x6e\x74\x65\x6e\x74\x20\x40\x66\x40\x3b\x20\x66\x6f\x72\x28\x24\x69\x6e\x64\x65\x78\x3d\x30\x3b\x20\x24\x69\x6e\x64\x65\x78\x20\x2d\x6c\x74\x20\x24\x6c\x69\x6e\x65\x73\x2e\x43\x6f\x75\x6e\x74\x3b\x20\x24\x69\x6e\x64\x65\x78\x2b\x2b\x29\x20\x7b\x20\x69\x66\x28\x24\x6c\x69\x6e\x65\x73\x5b\x24\x69\x6e\x64\x65\x78\x5d\x20\x2d\x6d\x61\x74\x63\x68\x20\x27\x5e\x5c\x5b\x5c\x5b\x69\x6e\x64\x65\x78\x5c\x5d\x5c\x5d\x24\x27\x29\x20\x7b\x20\x24\x6c\x69\x6e\x65\x73\x5b\x24\x69\x6e\x64\x65\x78\x2e\x2e\x28\x24\x69\x6e\x64\x65\x78\x2b\x33\x29\x5d\x20\x7d\x20\x7d\x22";
|
||||
|
|
@ -39,12 +39,25 @@ grep -A 2 'index' @f@ | sed -n 's/^url = "\(.*\)"/\1/p'
|
|||
```
|
||||
|
||||
|
||||
### Get uv config on Windows
|
||||
|
||||
```powershell
|
||||
powershell -Command "$lines = Get-Content @f@; for($index=0; $index -lt $lines.Count; $index++) { if($lines[$index] -match '^\[\[index\]\]$') { $lines[$index..($index+3)] } }"
|
||||
```
|
||||
|
||||
|
||||
### Set uv config
|
||||
|
||||
```sh
|
||||
@sed@ '/^\[\[index\]\]$/,/^default = true$/{s|^url = ".*"$|url = "@url@"|;}' @f@
|
||||
```
|
||||
|
||||
### Set uv config on Windows
|
||||
|
||||
```powershell
|
||||
powershell -Command "$content = Get-Content '@f@'; $content = $content -replace '^url = \".*\"$', 'url = \"@url@\"'; $content | Set-Content '@f@'"
|
||||
```
|
||||
|
||||
|
||||
### Test uv if set source
|
||||
|
||||
|
|
@ -52,6 +65,12 @@ grep -A 2 'index' @f@ | sed -n 's/^url = "\(.*\)"/\1/p'
|
|||
grep -q '^\[\[index]]$' @f@
|
||||
```
|
||||
|
||||
### Test uv if set source on Windows
|
||||
|
||||
```powershell
|
||||
powershell -Command "if (Get-Content @f@ | Select-String '^\[\[index\]\]$') { exit 0 } else { exit 1 }"
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
|
||||
|
|
@ -64,4 +83,4 @@ grep -q '^\[\[index]]$' @f@
|
|||
[[sources]]
|
||||
name = "@1@"
|
||||
url = "@2@"
|
||||
```
|
||||
```
|
||||
|
|
@ -10,12 +10,12 @@ pl_python_uv_prelude (void)
|
|||
chef_prep_this (pl_python_uv, gsr);
|
||||
|
||||
chef_set_created_on (this, "2024-12-11");
|
||||
chef_set_last_updated (this, "2025-12-17");
|
||||
chef_set_last_updated (this, "2025-12-28");
|
||||
chef_set_sources_last_updated (this, "2025-08-09");
|
||||
|
||||
chef_set_chef (this, NULL);
|
||||
chef_set_cooks (this, 1, "@happy-game");
|
||||
chef_set_sauciers (this, 2, "@Kattos", "@ccmywish");
|
||||
chef_set_sauciers (this, 3, "@MingriLingran", "@Kattos", "@ccmywish");
|
||||
|
||||
chef_allow_local_mode (this, FullyCan, NULL, NULL);
|
||||
chef_allow_english(this);
|
||||
|
|
@ -91,8 +91,18 @@ pl_python_uv_getsrc (char *option)
|
|||
}
|
||||
|
||||
/* 获取 [[index]] 配置项的 url */
|
||||
char *cmd = xy_str_gsub (RAWSTR_pl_python_get_uv_config, "@f@", uv_config);
|
||||
chsrc_run (cmd, RunOpt_Default);
|
||||
char *cmd = NULL;
|
||||
if (xy.on_windows)
|
||||
{
|
||||
/* 在 Windows 上使用 PowerShell 替代 grep */
|
||||
cmd = xy_str_gsub(RAWSTR_pl_python_get_uv_config_on_windows, "@f@", uv_config);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* 在 Linux 或 macOS 上使用 grep */
|
||||
cmd = xy_str_gsub(RAWSTR_pl_python_get_uv_config, "@f@", uv_config);
|
||||
}
|
||||
chsrc_run(cmd, RunOpt_Default);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -119,19 +129,6 @@ pl_python_uv_setsrc (char *option)
|
|||
|
||||
const char *source_content = xy_str_gsub (RAWSTR_pl_python_uv_config_source_content, "@url@", source.url);
|
||||
|
||||
#if defined(XY_Build_On_macOS) || defined(XY_Build_On_BSD)
|
||||
char *sed_cmd = "sed -i '' ";
|
||||
#else
|
||||
char *sed_cmd = "sed -i ";
|
||||
#endif
|
||||
|
||||
/**
|
||||
* 将 [[index]] 到 default = true 之间的 url = ".*" 替换为 url = "source.url"
|
||||
*/
|
||||
char *update_config_cmd = xy_str_gsub (RAWSTR_pl_python_set_uv_config, "@sed@", sed_cmd);
|
||||
update_config_cmd = xy_str_gsub (update_config_cmd, "@f@", uv_config);
|
||||
update_config_cmd = xy_str_gsub (update_config_cmd, "@url@", source.url);
|
||||
|
||||
if (!xy_file_exist (uv_config))
|
||||
{
|
||||
/* 当 uv_config 不存在,直接写入文件 */
|
||||
|
|
@ -140,12 +137,41 @@ pl_python_uv_setsrc (char *option)
|
|||
else
|
||||
{
|
||||
/* 当 uv_config 存在,如果存在 [[index]] 则更新,否则追加到文件末尾 */
|
||||
char *cmd = xy_str_gsub (RAWSTR_pl_python_test_uv_if_set_source, "@f@", uv_config);
|
||||
chsrc_ensure_program ("grep");
|
||||
char *cmd = NULL;
|
||||
if (xy.on_windows)
|
||||
{
|
||||
/* 在 Windows 上使用 PowerShell 替代 grep */
|
||||
cmd = xy_str_gsub (RAWSTR_pl_python_test_uv_if_set_source_on_windows, "@f@", uv_config);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmd = xy_str_gsub (RAWSTR_pl_python_test_uv_if_set_source, "@f@", uv_config);
|
||||
}
|
||||
|
||||
int status = xy_run_get_status (cmd);
|
||||
if (0==status)
|
||||
{
|
||||
chsrc_run (update_config_cmd, RunOpt_Default);
|
||||
if (xy.on_windows)
|
||||
{
|
||||
/* 在 Windows 上使用 PowerShell 替代 sed */
|
||||
char *powershell_cmd_with_file = xy_str_gsub(RAWSTR_pl_python_set_uv_config_on_windows, "@f@", uv_config);
|
||||
char *powershell_cmd = xy_str_gsub(powershell_cmd_with_file, "@url@", source.url);
|
||||
chsrc_run (powershell_cmd, RunOpt_Default);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* 非 Windows 系统使用 sed */
|
||||
char *sed_cmd = NULL;
|
||||
#if defined(XY_Build_On_macOS) || defined(XY_Build_On_BSD)
|
||||
sed_cmd = "sed -i '' ";
|
||||
#else
|
||||
sed_cmd = "sed -i ";
|
||||
#endif
|
||||
char *update_config_cmd = xy_str_gsub (RAWSTR_pl_python_set_uv_config, "@sed@", sed_cmd);
|
||||
update_config_cmd = xy_str_gsub (update_config_cmd, "@f@", uv_config);
|
||||
update_config_cmd = xy_str_gsub (update_config_cmd, "@url@", source.url);
|
||||
chsrc_run (update_config_cmd, RunOpt_Default);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue