mirror of
https://github.com/RubyMetric/chsrc
synced 2026-03-03 04:00:30 +08:00
引入 ImplementationDefinedScope
This commit is contained in:
@@ -317,31 +317,37 @@ cli_print_target_features (Target_t *target, const char *input_target_name)
|
|||||||
else if (i == 1)
|
else if (i == 1)
|
||||||
{
|
{
|
||||||
scope_name = CHINESE ? " 用户级换源" : " user scope";
|
scope_name = CHINESE ? " 用户级换源" : " user scope";
|
||||||
scope_msg = xy_strcat (3, scope_name, " | chsrc set -scope=user ", input_target_name);
|
scope_msg = xy_strcat (3, scope_name, " | chsrc set -scope=user ", input_target_name);
|
||||||
}
|
}
|
||||||
else if (i == 2)
|
else if (i == 2)
|
||||||
{
|
{
|
||||||
scope_name = CHINESE ? " 系统级换源" : " system scope";
|
scope_name = CHINESE ? " 系统级换源" : " system scope";
|
||||||
scope_msg = xy_strcat (3, scope_name, " | chsrc set -scope=system ", input_target_name);
|
scope_msg = xy_strcat (3, scope_name, " | chsrc set -scope=system ", input_target_name);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
xy_unreached();
|
xy_unreached();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *msg = NULL;
|
||||||
switch (cap)
|
switch (cap)
|
||||||
{
|
{
|
||||||
case ScopeCap_Unknown:
|
case ScopeCap_Unknown:
|
||||||
printf (" %s%s (%s)\n", bdred(NoMark), purple(scope_msg), "是否支持该作用域尚不了解,欢迎贡献");
|
msg = xy_strcat (6, " ", bdred(NoMark), scope_msg, " (", "是否支持该作用域尚不了解,欢迎贡献", ")");
|
||||||
|
puts (msg);
|
||||||
break;
|
break;
|
||||||
case ScopeCap_Unable:
|
case ScopeCap_Unable:
|
||||||
printf (" %s%s (%s)\n", bdred(NoMark), purple(scope_msg), "不支持");
|
msg = xy_strcat (6, " ", bdred(NoMark), scope_msg, " (", "不支持", ")");
|
||||||
|
puts (msg);
|
||||||
break;
|
break;
|
||||||
case ScopeCap_Able_But_Not_Implemented:
|
case ScopeCap_Able_But_Not_Implemented:
|
||||||
printf (" %s%s (%s)\n", bdyellow(HalfYesMark), purple(scope_msg), "支持但未实现");
|
msg = xy_strcat (6, " ", bdyellow(HalfYesMark), scope_msg, " (", "支持但未实现", ")");
|
||||||
|
puts (msg);
|
||||||
break;
|
break;
|
||||||
case ScopeCap_Able_And_Implemented:
|
case ScopeCap_Able_And_Implemented:
|
||||||
printf (" %s%s (%s)\n", bdgreen(YesMark), purple(scope_msg), "支持且已实现");
|
msg = xy_strcat (3, " ", bdgreen(YesMark),
|
||||||
|
purple (xy_strcat (4, scope_msg, " (", "支持且已实现", ")")));
|
||||||
|
puts (msg);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
xy_unreached();
|
xy_unreached();
|
||||||
@@ -360,11 +366,15 @@ cli_print_target_features (Target_t *target, const char *input_target_name)
|
|||||||
case SystemScope:
|
case SystemScope:
|
||||||
default_scope_name = CHINESE ? "系统级" : "System Scope";
|
default_scope_name = CHINESE ? "系统级" : "System Scope";
|
||||||
break;
|
break;
|
||||||
|
case ImplementationDefinedScope:
|
||||||
|
default_scope_name = CHINESE ? "由实现定义" : "Implementation Defined Scope";
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
xy_unreached();
|
xy_unreached();
|
||||||
}
|
}
|
||||||
print (bdblue (" = "));
|
char *msg = xy_strcat (3, bdblue (" = "),
|
||||||
printf ("默认作用域 | chsrc set -scope=default %s (= %s)\n", input_target_name, default_scope_name);
|
purple (xy_strcat (5, "默认作用域 | chsrc set -scope=default ", input_target_name, " (= ", default_scope_name ,")")));
|
||||||
|
puts (msg);
|
||||||
br();
|
br();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -823,7 +833,7 @@ main (int argc, char const *argv[])
|
|||||||
}
|
}
|
||||||
else if (xy_streql_ic (scope, "default"))
|
else if (xy_streql_ic (scope, "default"))
|
||||||
{
|
{
|
||||||
ProgMode.Scope = DefaultScope;
|
ProgMode.Scope = ImplementationDefinedScope;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -332,6 +332,15 @@ chef_set_default_scope (Target_t *target, Scope_t scope)
|
|||||||
cap = target->scope_caps[ScopeCap_Slot_User];
|
cap = target->scope_caps[ScopeCap_Slot_User];
|
||||||
else if (scope == SystemScope)
|
else if (scope == SystemScope)
|
||||||
cap = target->scope_caps[ScopeCap_Slot_System];
|
cap = target->scope_caps[ScopeCap_Slot_System];
|
||||||
|
else if (scope == ImplementationDefinedScope)
|
||||||
|
{
|
||||||
|
/* ImplementationDefinedScope 即由 chsrc 根据实际情况来决定,因此我们不对它检查 */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
chsrc_panic ("无效的 scope 参数");
|
||||||
|
}
|
||||||
|
|
||||||
/* 防止 chef 们写错 */
|
/* 防止 chef 们写错 */
|
||||||
if (cap != ScopeCap_Able_And_Implemented)
|
if (cap != ScopeCap_Able_And_Implemented)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
* | @Mikachu2333
|
* | @Mikachu2333
|
||||||
* |
|
* |
|
||||||
* Created On : <2023-08-29>
|
* Created On : <2023-08-29>
|
||||||
* Last Modified : <2026-02-22>
|
* Last Modified : <2026-02-24>
|
||||||
*
|
*
|
||||||
* chsrc framework
|
* chsrc framework
|
||||||
* ------------------------------------------------------------*/
|
* ------------------------------------------------------------*/
|
||||||
@@ -57,7 +57,7 @@ ProgMode =
|
|||||||
.ResetMode = false,
|
.ResetMode = false,
|
||||||
.TargetGroupMode = false,
|
.TargetGroupMode = false,
|
||||||
.Ipv6Mode = false,
|
.Ipv6Mode = false,
|
||||||
.Scope = DefaultScope,
|
.Scope = ImplementationDefinedScope,
|
||||||
.EnglishMode = false,
|
.EnglishMode = false,
|
||||||
.DryRunMode = false,
|
.DryRunMode = false,
|
||||||
.NoColorMode = false
|
.NoColorMode = false
|
||||||
@@ -70,7 +70,8 @@ bool chsrc_in_standalone_mode() {return !ProgMode.TargetGroupMode;}
|
|||||||
void chsrc_set_target_group_mode(){ProgMode.TargetGroupMode = true;}
|
void chsrc_set_target_group_mode(){ProgMode.TargetGroupMode = true;}
|
||||||
|
|
||||||
bool chsrc_in_reset_mode(){return ProgMode.ResetMode;}
|
bool chsrc_in_reset_mode(){return ProgMode.ResetMode;}
|
||||||
bool chsrc_in_default_scope_mode(){return ProgMode.Scope == DefaultScope;}
|
/* 默认换源作用域就是 ImplementationDefinedScope */
|
||||||
|
bool chsrc_in_default_scope_mode(){return ProgMode.Scope == ImplementationDefinedScope;}
|
||||||
bool chsrc_in_user_scope_mode(){return ProgMode.Scope == UserScope;}
|
bool chsrc_in_user_scope_mode(){return ProgMode.Scope == UserScope;}
|
||||||
bool chsrc_in_project_scope_mode(){return ProgMode.Scope == ProjectScope;}
|
bool chsrc_in_project_scope_mode(){return ProgMode.Scope == ProjectScope;}
|
||||||
bool chsrc_in_system_scope_mode(){return ProgMode.Scope == SystemScope;}
|
bool chsrc_in_system_scope_mode(){return ProgMode.Scope == SystemScope;}
|
||||||
|
|||||||
@@ -113,19 +113,23 @@ Source_t;
|
|||||||
* 但是后来,我们认为非 -local 时的行为(即默认时)比较模糊,所以我们现在清晰地把作用域指明出来,总共有3种类型的作用:
|
* 但是后来,我们认为非 -local 时的行为(即默认时)比较模糊,所以我们现在清晰地把作用域指明出来,总共有3种类型的作用:
|
||||||
* 分别是 ProjectScope、UserScope 和 SystemScope,分别对应项目级、用户级和系统级的换源配置
|
* 分别是 ProjectScope、UserScope 和 SystemScope,分别对应项目级、用户级和系统级的换源配置
|
||||||
*
|
*
|
||||||
* 还有一个叫 DefaultScope 的作用域,它不是一种新类型,而只表示默认作用域,即根据实际情况最佳的作用域。
|
* 还有一个叫 ImplementationDefinedScope 的作用域,它不是一种新类型,而是表示根据实际情况决定的作用域。
|
||||||
* chsrc 将根据该 target 的实际情况来选择最合适的作用域来进行换源配置。最好的情况下,DefaultScope 是三者之一,
|
* chsrc 将根据该 target 的实际情况来选择最合适的作用域来进行换源配置。最好的情况下,ImplementationDefinedScope 是三者之一,
|
||||||
* 这也是这里设计的初衷。然而现在有些 recipe 的换源行为,会在某种 Scope 不能够成功时退而求其次地使用另一个 Scope
|
* 这也是这里设计的初衷。然而现在有些 recipe 的换源行为,会在某种 Scope 不能够成功时退而求其次地使用另一个 Scope
|
||||||
* 来进行换源配置,这时 DefaultScope 就无法用一种作用域单独描述。
|
* 来进行换源配置,这时就只能用 ImplementationDefinedScope 来表示。
|
||||||
*/
|
*/
|
||||||
#define NumberOfScopeType 3
|
#define NumberOfScopeType 3
|
||||||
typedef enum Scope_t
|
typedef enum Scope_t
|
||||||
{
|
{
|
||||||
DefaultScope, /* 默认作用域,即根据实际情况最佳的作用域,它不是一种类型,只类似一个占位符 */
|
|
||||||
|
|
||||||
ProjectScope,
|
ProjectScope,
|
||||||
UserScope,
|
UserScope,
|
||||||
SystemScope,
|
SystemScope,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 这是 target 默认的作用域,一种特殊的作用域,即根据 target 的实际情况来决定的。
|
||||||
|
* 它不是一种真正的类型,因为最终换源后,用户看到的作用域依然是 ProjectScope、UserScope 或 SystemScope 中的一个
|
||||||
|
*/
|
||||||
|
ImplementationDefinedScope,
|
||||||
}
|
}
|
||||||
Scope_t;
|
Scope_t;
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ pl_java_prelude ()
|
|||||||
* TODO: 当前实现将首先尝试 SystemScope, 若失败则尝试 UserScope
|
* TODO: 当前实现将首先尝试 SystemScope, 若失败则尝试 UserScope
|
||||||
* 所以并不是真正意义上的某种 Scope,而是两者的叠加,后续考虑强制执行用户所选择的 Scope 以达到用户期待
|
* 所以并不是真正意义上的某种 Scope,而是两者的叠加,后续考虑强制执行用户所选择的 Scope 以达到用户期待
|
||||||
*/
|
*/
|
||||||
chef_set_default_scope (this, SystemScope);
|
chef_set_default_scope (this, ImplementationDefinedScope);
|
||||||
|
|
||||||
chef_deny_english(this);
|
chef_deny_english(this);
|
||||||
chef_allow_user_define(this);
|
chef_allow_user_define(this);
|
||||||
|
|||||||
Reference in New Issue
Block a user