mirror of
https://github.com/RubyMetric/chsrc
synced 2026-02-26 09:01:15 +08:00
检查用户所要求的作用域是否能执行
This commit is contained in:
@@ -335,7 +335,7 @@ cli_print_target_features (Target_t *target, const char *input_target_name)
|
||||
printf (" %s%s (%s)\n", bdred(NoMark), purple(scope_msg), "是否支持该作用域尚不了解,欢迎贡献");
|
||||
break;
|
||||
case ScopeCap_Unable:
|
||||
printf (" %s%s (%s)\n", bdred(NoMark), purple(scope_msg), "不支持的作用域");
|
||||
printf (" %s%s (%s)\n", bdred(NoMark), purple(scope_msg), "不支持");
|
||||
break;
|
||||
case ScopeCap_Able_But_Not_Implemented:
|
||||
printf (" %s%s (%s)\n", bdyellow(HalfYesMark), purple(scope_msg), "支持但未实现");
|
||||
@@ -666,6 +666,8 @@ get_target (const char *input, TargetOp code, char *option)
|
||||
{
|
||||
if (target->setfn)
|
||||
{
|
||||
/* Hook时机: 开始运行前可以在这里进行一些拦截操作 */
|
||||
chsrc_check_scope_capability (target); /* 用户要求设置的作用域,真的能够执行吗? */
|
||||
target->setfn(option);
|
||||
}
|
||||
else chsrc_error (xy_strcat (3, "暂未对 ", input, " 实现 set 功能,邀您帮助: chsrc issue"));
|
||||
|
||||
@@ -1277,6 +1277,62 @@ chsrc_conclude (Source_t *source)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief 检测该 target 是否实现了用户所指定的 scope 能力
|
||||
*
|
||||
* @note 此函数目前只支持中文
|
||||
*/
|
||||
void
|
||||
chsrc_check_scope_capability (Target_t *target)
|
||||
{
|
||||
ScopeCapability_t cap = ScopeCap_Unknown;
|
||||
|
||||
char *msg1 = "不支持";
|
||||
char *msg2 = "换源,请使用 chsrc ls ";
|
||||
char *msg3 = " 查看支持的作用域以及默认作用域";
|
||||
|
||||
char *aliases = target->aliases;
|
||||
char *scope_name = NULL;
|
||||
|
||||
if (chsrc_in_project_scope_mode())
|
||||
{
|
||||
cap = target->scope_caps[ScopeCap_Slot_Project];
|
||||
|
||||
if (cap != ScopeCap_Able_And_Implemented)
|
||||
{
|
||||
scope_name = "项目级";
|
||||
char* msg = xy_strcat (5, msg1, scope_name, msg2, aliases, msg3);
|
||||
chsrc_error (msg);
|
||||
exit (Exit_UserCause);
|
||||
}
|
||||
}
|
||||
if (chsrc_in_user_scope_mode())
|
||||
{
|
||||
cap = target->scope_caps[ScopeCap_Slot_User];
|
||||
|
||||
if (cap != ScopeCap_Able_And_Implemented)
|
||||
{
|
||||
scope_name = "用户级";
|
||||
char* msg = xy_strcat (5, msg1, scope_name, msg2, aliases, msg3);
|
||||
chsrc_error (msg);
|
||||
exit (Exit_UserCause);
|
||||
}
|
||||
}
|
||||
if (chsrc_in_system_scope_mode())
|
||||
{
|
||||
cap = target->scope_caps[ScopeCap_Slot_System];
|
||||
|
||||
if (cap != ScopeCap_Able_And_Implemented)
|
||||
{
|
||||
scope_name = "系统级";
|
||||
char* msg = xy_strcat (5, msg1, scope_name, msg2, aliases, msg3);
|
||||
chsrc_error (msg);
|
||||
exit (Exit_UserCause);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
chsrc_ensure_root ()
|
||||
|
||||
@@ -108,6 +108,9 @@ typedef enum Scope_t
|
||||
Scope_t;
|
||||
|
||||
#define NumberOfScopeType 3
|
||||
#define ScopeCap_Slot_Project 0
|
||||
#define ScopeCap_Slot_User 1
|
||||
#define ScopeCap_Slot_System 2
|
||||
|
||||
typedef enum ScopeCapability_t
|
||||
{
|
||||
@@ -166,9 +169,7 @@ typedef struct Target_t
|
||||
|
||||
/**
|
||||
* 各作用域的支持情况
|
||||
* 0: project scope
|
||||
* 1: user scope
|
||||
* 2: system scope
|
||||
* 参考 ScopeCap_Slot_Xxx 的值
|
||||
*/
|
||||
ScopeCapability_t scope_caps[NumberOfScopeType];
|
||||
Scope_t default_scope; /* 默认作用域 */
|
||||
|
||||
Reference in New Issue
Block a user