Use common functions

This commit is contained in:
Aoran Zeng 2023-09-27 09:40:31 +08:00
parent d072f52c07
commit f5ab88aa8f
2 changed files with 55 additions and 252 deletions

289
chsrc.c
View File

@ -3,7 +3,7 @@
* License : GPLv3
* Authors : Aoran Zeng <ccmywish@qq.com>
* Created on : <2023-08-28>
* Last modified : <2023-09-26>
* Last modified : <2023-09-27>
*
* chsrc:
*
@ -12,7 +12,7 @@
* GPLv3 LICENSE.txt
* ------------------------------------------------------------*/
#define Chsrc_Version "v0.1.2-20230926"
#define Chsrc_Version "v0.1.2-20230927"
#include "chsrc.h"
@ -39,11 +39,7 @@ pl_ruby_setsrc (char* option)
return;
}
if (NULL!=option) {
index = lets_find_mirror(pl_ruby, option);
} else {
index = lets_test_speed(pl_ruby);
}
index = use_specific_mirror_or_auto_select (option, pl_ruby);
source_info source = pl_ruby_sources[index];
chsrc_say_selection (&source);
@ -130,11 +126,7 @@ pl_python_setsrc (char* option)
char* prog = NULL;
pl_python_check_cmd_ (&prog);
if (NULL!=option) {
index = lets_find_mirror (pl_python, option);
} else {
index = lets_test_speed (pl_python);
}
index = use_specific_mirror_or_auto_select (option, pl_python);
source_info source = pl_python_sources[index];
chsrc_say_selection(&source);
@ -191,11 +183,7 @@ pl_nodejs_setsrc (char* option)
int index = 0;
if (NULL!=option) {
index = lets_find_mirror (pl_nodejs, option);
} else {
index = lets_test_speed (pl_nodejs);
}
index = use_specific_mirror_or_auto_select (option, pl_nodejs);
source_info source = pl_nodejs_sources[index];
chsrc_say_selection (&source);
@ -245,13 +233,7 @@ pl_perl_getsrc (char* option)
void
pl_perl_setsrc (char* option)
{
int index = 0;
if (NULL!=option) {
index = lets_find_mirror (pl_perl, option);
} else {
index = lets_test_speed (pl_perl);
}
int index = use_specific_mirror_or_auto_select (option, pl_perl);
source_info source = pl_perl_sources[index];
chsrc_say_selection (&source);
@ -298,13 +280,7 @@ pl_php_setsrc (char* option)
{
pl_php_check_cmd_();
int index = 0;
if (NULL!=option) {
index = lets_find_mirror (pl_php, option);
} else {
index = lets_test_speed (pl_php);
}
int index = use_specific_mirror_or_auto_select (option, pl_php);
source_info source = pl_php_sources[index];
chsrc_say_selection (&source);
@ -344,13 +320,8 @@ void
pl_go_setsrc (char* option)
{
pl_go_check_cmd_();
int index = 0;
if (NULL!=option) {
index = lets_find_mirror (pl_go, option);
} else {
index = lets_test_speed (pl_go);
}
int index = use_specific_mirror_or_auto_select (option, pl_go);
source_info source = pl_go_sources[index];
chsrc_say_selection (&source);
@ -381,13 +352,7 @@ pl_rust_getsrc (char* option)
void
pl_rust_setsrc (char* option)
{
int index = 0;
if (NULL!=option) {
index = lets_find_mirror (pl_rust, option);
} else {
index = lets_test_speed (pl_rust);
}
int index = use_specific_mirror_or_auto_select (option, pl_rust);
source_info source = pl_rust_sources[index];
chsrc_say_selection(&source);
@ -482,13 +447,7 @@ pl_java_setsrc (char* option)
bool maven_exist, gradle_exist;
pl_java_check_cmd_ (&maven_exist, &gradle_exist);
int index = 0;
if (NULL!=option) {
index = lets_find_mirror (pl_java, option);
} else {
index = lets_test_speed (pl_java);
}
int index = use_specific_mirror_or_auto_select (option, pl_java);
source_info source = pl_java_sources[index];
chsrc_say_selection(&source);
@ -530,12 +489,7 @@ pl_java_setsrc (char* option)
void
pl_clojure_setsrc(char* option)
{
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(pl_clojure, option);
} else {
index = lets_test_speed(pl_clojure);
}
int index = use_specific_mirror_or_auto_select (option, pl_clojure);
source_info source = pl_clojure_sources[index];
chsrc_say_selection (&source);
@ -566,13 +520,7 @@ pl_dart_getsrc(char* option)
void
pl_dart_setsrc (char* option)
{
int index = 0;
if (NULL!=option) {
index = lets_find_mirror (pl_dart, option);
} else {
index = lets_test_speed (pl_dart);
}
int index = use_specific_mirror_or_auto_select (option, pl_dart);
source_info source = pl_dart_sources[index];
chsrc_say_selection(&source);
@ -619,12 +567,7 @@ pl_dart_setsrc (char* option)
void
pl_haskell_setsrc(char* option)
{
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(pl_haskell, option);
} else {
index = lets_test_speed(pl_haskell);
}
int index = use_specific_mirror_or_auto_select (option, pl_haskell);
source_info source = pl_haskell_sources[index];
chsrc_say_selection (&source);
@ -694,12 +637,7 @@ pl_ocaml_setsrc(char* option)
{
pl_ocaml_check_cmd_();
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(pl_ocaml, option);
} else {
index = lets_test_speed(pl_ocaml);
}
int index = use_specific_mirror_or_auto_select (option, pl_ocaml);
source_info source = pl_ocaml_sources[index];
chsrc_say_selection (&source);
@ -739,13 +677,7 @@ pl_r_getsrc (char* option)
void
pl_r_setsrc (char* option)
{
int index = 0;
if (NULL!=option) {
index = lets_find_mirror (pl_r, option);
} else {
index = lets_test_speed (pl_r);
}
int index = use_specific_mirror_or_auto_select (option, pl_r);
source_info source = pl_r_sources[index];
chsrc_say_selection(&source);
@ -798,13 +730,7 @@ pl_julia_getsrc (char* option)
void
pl_julia_setsrc (char* option)
{
int index = 0;
if (NULL!=option) {
index = lets_find_mirror (pl_julia, option);
} else {
index = lets_test_speed (pl_julia);
}
int index = use_specific_mirror_or_auto_select (option, pl_julia);
source_info source = pl_julia_sources[index];
chsrc_say_selection(&source);
@ -843,13 +769,7 @@ os_ubuntu_setsrc (char* option)
{
ensure_root();
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_ubuntu, option);
} else {
index = lets_test_speed(os_ubuntu);
}
int index = use_specific_mirror_or_auto_select (option, os_ubuntu);
source_info source = os_ubuntu_sources[index];
chsrc_say_selection(&source);
@ -887,13 +807,8 @@ void
os_debian_setsrc (char* option)
{
ensure_root();
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_debian, option);
} else {
index = lets_test_speed(os_debian);
}
int index = use_specific_mirror_or_auto_select (option, os_debian);
source_info source = os_debian_sources[index];
chsrc_say_selection(&source);
@ -927,13 +842,8 @@ void
os_deepin_setsrc (char* option)
{
ensure_root();
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_deepin, option);
} else {
index = lets_test_speed(os_deepin);
}
int index = use_specific_mirror_or_auto_select (option, os_deepin);
source_info source = os_deepin_sources[index];
chsrc_say_selection(&source);
@ -958,14 +868,8 @@ void
os_fedora_setsrc (char* option)
{
ensure_root();
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_fedora, option);
} else {
index = lets_test_speed(os_fedora);
}
int index = use_specific_mirror_or_auto_select (option, os_fedora);
source_info source = os_fedora_sources[index];
chsrc_say_selection(&source);
@ -1004,13 +908,8 @@ void
os_opensuse_setsrc (char* option)
{
ensure_root(); // HELP: 不知道是否需要确保root权限
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_opensuse, option);
} else {
index = lets_test_speed(os_opensuse);
}
int index = use_specific_mirror_or_auto_select (option, os_opensuse);
source_info source = os_opensuse_sources[index];
chsrc_say_selection(&source);
@ -1067,13 +966,8 @@ void
os_kali_setsrc(char* option)
{
ensure_root();
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_kali, option);
} else {
index = lets_test_speed(os_kali);
}
int index = use_specific_mirror_or_auto_select (option, os_kali);
source_info source = os_kali_sources[index];
chsrc_say_selection(&source);
@ -1097,13 +991,7 @@ os_kali_setsrc(char* option)
void
os_msys2_setsrc(char* option)
{
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_msys2, option);
} else {
index = lets_test_speed(os_msys2);
}
int index = use_specific_mirror_or_auto_select (option, os_msys2);
source_info source = os_msys2_sources[index];
chsrc_say_selection(&source);
@ -1134,13 +1022,8 @@ void
os_arch_setsrc(char* option)
{
ensure_root();
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_arch, option);
} else {
index = lets_test_speed(os_arch);
}
int index = use_specific_mirror_or_auto_select (option, os_arch);
source_info source = os_arch_sources[index];
chsrc_say_selection(&source);
@ -1188,13 +1071,8 @@ void
os_gentoo_setsrc(char* option)
{
ensure_root();
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_gentoo, option);
} else {
index = lets_test_speed(os_gentoo);
}
int index = use_specific_mirror_or_auto_select (option, os_gentoo);
source_info source = os_arch_sources[index];
chsrc_say_selection(&source);
@ -1222,13 +1100,7 @@ os_rocky_setsrc (char* option)
{
ensure_root();
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_rocky, option);
} else {
index = lets_test_speed(os_rocky);
}
int index = use_specific_mirror_or_auto_select (option, os_rocky);
source_info source = os_rocky_sources[index];
chsrc_say_selection(&source);
@ -1252,13 +1124,7 @@ os_alpine_setsrc (char* option)
{
// ensure_root(); // HELP: 不确定是否需要root
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_alpine, option);
} else {
index = lets_test_speed(os_alpine);
}
int index = use_specific_mirror_or_auto_select (option, os_alpine);
source_info source = os_alpine_sources[index];
chsrc_say_selection(&source);
@ -1291,13 +1157,7 @@ os_void_setsrc (char* option)
{
// ensure_root(); // HELP: 不确定是否需要root
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_void, option);
} else {
index = lets_test_speed(os_void);
}
int index = use_specific_mirror_or_auto_select (option, os_void);
source_info source = os_void_sources[index];
chsrc_say_selection(&source);
@ -1317,7 +1177,7 @@ os_void_setsrc (char* option)
"sed -i 's|https://alpha.de.repo.voidlinux.org|", source.url, "|g' /etc/xbps.d/*-repository-*.conf"
);
xy_warn("chsrc: 若报错可尝试使用以下命令");
chsrc_warn("若报错可尝试使用以下命令");
puts(cmd);
chsrc_say_thanks(&source);
}
@ -1346,13 +1206,8 @@ void
os_openeuler_setsrc (char* option)
{
ensure_root();
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_openeuler, option);
} else {
index = lets_test_speed(os_openeuler);
}
int index = use_specific_mirror_or_auto_select (option, os_openeuler);
source_info source = os_openeuler_sources[index];
chsrc_say_selection(&source);
@ -1374,13 +1229,8 @@ void
os_openkylin_setsrc (char* option)
{
ensure_root();
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_openkylin, option);
} else {
index = lets_test_speed(os_openkylin);
}
int index = use_specific_mirror_or_auto_select (option, os_openkylin);
source_info source = os_openkylin_sources[index];
chsrc_say_selection(&source);
@ -1408,13 +1258,8 @@ void
os_freebsd_setsrc (char* option)
{
ensure_root(); // HELP: 不知道是否需要确保root权限
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_freebsd, option);
} else {
index = lets_test_speed(os_freebsd);
}
int index = use_specific_mirror_or_auto_select (option, os_freebsd);
source_info source = os_freebsd_sources[index];
chsrc_say_selection(&source);
@ -1523,13 +1368,7 @@ os_netbsd_setsrc(char* option)
{
ensure_root(); // HELP: 不知道是否需要确保root权限
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_netbsd, option);
} else {
index = lets_test_speed(os_netbsd);
}
int index = use_specific_mirror_or_auto_select (option, os_netbsd);
source_info source = os_netbsd_sources[index];
chsrc_say_selection(&source);
@ -1562,13 +1401,8 @@ void
os_openbsd_setsrc(char* option)
{
ensure_root();
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(os_openbsd, option);
} else {
index = lets_test_speed(os_openbsd);
}
int index = use_specific_mirror_or_auto_select (option, os_openbsd);
source_info source = os_openbsd_sources[index];
chsrc_say_selection(&source);
@ -1619,15 +1453,10 @@ wr_tex_getsrc(char* option)
void
wr_tex_setsrc(char* option)
{
int index = 0;
bool tlmgr_exist, mpm_exist;
wr_tex_check_cmd_(&tlmgr_exist, &mpm_exist);
if (NULL!=option) {
index = lets_find_mirror(wr_tex, option);
} else {
index = lets_test_speed(wr_tex);
}
int index = use_specific_mirror_or_auto_select (option, wr_tex);
source_info source = wr_tex_sources[index];
chsrc_say_selection (&source);
@ -1654,17 +1483,12 @@ wr_tex_setsrc(char* option)
void
wr_emacs_setsrc(char* option)
{
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(wr_emacs, option);
} else {
index = lets_test_speed(wr_emacs);
}
int index = use_specific_mirror_or_auto_select (option, wr_emacs);
source_info source = wr_emacs_sources[index];
chsrc_say_selection (&source);
xy_warn("chsrc: 抱歉Emacs换源涉及Elisp您可手动查阅并换源:");
chsrc_warn("抱歉Emacs换源涉及Elisp您可手动查阅并换源:");
puts(source.url);
chsrc_say_thanks (&source);
@ -1692,12 +1516,7 @@ wr_brew_getsrc(char* option)
void
wr_brew_setsrc(char* option)
{
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(wr_brew, option);
} else {
index = lets_test_speed(wr_brew);
}
int index = use_specific_mirror_or_auto_select (option, wr_brew);
source_info source = wr_brew_sources[index];
chsrc_say_selection (&source);
@ -1724,17 +1543,11 @@ wr_brew_setsrc(char* option)
void
wr_guix_setsrc (char* option)
{
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(wr_guix, option);
} else {
index = lets_test_speed(wr_guix);
}
int index = use_specific_mirror_or_auto_select (option, wr_guix);
source_info source = wr_guix_sources[index];
chsrc_say_selection (&source);
char* file = xy_strjoin(3, "(list (channel\n"
" (inherit (car %default-channels))\n"
" (url \"", source.url, "\")))");
@ -1767,12 +1580,7 @@ wr_nix_setsrc (char* option)
{
wr_nix_check_cmd_();
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(wr_nix, option);
} else {
index = lets_test_speed(wr_nix);
}
int index = use_specific_mirror_or_auto_select (option, wr_nix);
source_info source = wr_nix_sources[index];
chsrc_say_selection (&source);
@ -1804,12 +1612,7 @@ wr_nix_setsrc (char* option)
void
wr_flathub_setsrc(char* option)
{
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(wr_flathub, option);
} else {
index = lets_test_speed(wr_flathub);
}
int index = use_specific_mirror_or_auto_select (option, wr_flathub);
source_info source = wr_flathub_sources[index];
chsrc_say_selection (&source);
@ -1832,17 +1635,11 @@ wr_flathub_setsrc(char* option)
void
wr_anaconda_setsrc(char* option)
{
int index = 0;
if (NULL!=option) {
index = lets_find_mirror(wr_anaconda, option);
} else {
index = lets_test_speed(wr_anaconda);
}
int index = use_specific_mirror_or_auto_select (option, wr_anaconda);
source_info source = wr_anaconda_sources[index];
chsrc_say_selection (&source);
char* main = xy_2strjoin(source.url, "pkgs/main");
char* r = xy_2strjoin(source.url, "pkgs/r");
char* msys2 = xy_2strjoin(source.url, "pkgs/msys2");
@ -2238,7 +2035,7 @@ get_target (const char* input, int code, char* option)
xy_error ("chsrc: 没有curl命令无法测速");
exit(1);
}
lets_test_speed_ (target->sources, target->sources_n, input-3);
auto_select_ (target->sources, target->sources_n, input-3);
return true;
}

18
chsrc.h
View File

@ -3,14 +3,13 @@
* License : GPLv3
* Authors : Aoran Zeng <ccmywish@qq.com>
* Created on : <2023-08-29>
* Last modified : <2023-09-26>
* Last modified : <2023-09-27>
*
* chsrc:
*
* chsrc.c
* ------------------------------------------------------------*/
#define XY_Run_Prefix "chsrc: 运行 "
#include "xy.h"
#include "sources.h"
@ -51,7 +50,7 @@ does_the_program_exist (char* check_cmd, char* progname)
* @param target
* @param input default def
*/
#define lets_find_mirror(s, input) does_the_input_mirror_exist(s##_sources, s##_sources_n, (char*)#s+3, input)
#define find_mirror(s, input) does_the_input_mirror_exist(s##_sources, s##_sources_n, (char*)#s+3, input)
int
does_the_input_mirror_exist (source_info* sources, size_t size, char* target, char* input)
{
@ -187,10 +186,12 @@ dblary_maxidx_(double* array, int size)
return maxidx;
}
#define lets_test_speed(s) lets_test_speed_(s##_sources, s##_sources_n, (char*)#s+3)
/**
*
*/
#define auto_select(s) auto_select_(s##_sources, s##_sources_n, (char*)#s+3)
int
lets_test_speed_ (source_info* sources, size_t size, const char* target)
auto_select_ (source_info* sources, size_t size, const char* target)
{
if (0==size) {
xy_error(xy_strjoin(3, "chsrc: 当前 ", target, " 无任何可用源,请联系维护者"));
@ -227,6 +228,11 @@ lets_test_speed_ (source_info* sources, size_t size, const char* target)
}
#define use_specific_mirror_or_auto_select(input, s) \
(NULL!=(input)) ? find_mirror(s, input) : auto_select(s)
/**
* _setsrc
*/