Refactor ProgMode

This commit is contained in:
Aoran Zeng 2025-07-11 10:43:16 +08:00
parent e953aceb54
commit 5f8da597ff
No known key found for this signature in database
GPG Key ID: 8F8BA8488E10ED98
2 changed files with 58 additions and 38 deletions

View File

@ -823,7 +823,7 @@ main (int argc, char const *argv[])
return Exit_Unknown; return Exit_Unknown;
} }
ProgMode_CMD_Reset = true; ProgMode.ResetMode = true;
target = argv[cli_arg_Target_pos]; target = argv[cli_arg_Target_pos];
matched = get_target (target, TargetOp_Reset_Source, NULL); matched = get_target (target, TargetOp_Reset_Source, NULL);
if (!matched) goto not_matched; if (!matched) goto not_matched;

View File

@ -50,37 +50,40 @@ TargetGroupMode =
.leader_selected_index = -1 .leader_selected_index = -1
}; };
bool bool chsrc_in_target_group_mode() {return TargetGroupMode.in;}
chsrc_in_target_group_mode () void chsrc_set_target_group_mode(){TargetGroupMode.in = true;}
struct
{ {
return TargetGroupMode.in; // 用户命令
bool MeasureMode;
bool ResetMode;
// 内部实现
bool TargetGroupMode;
// 用户命令选项
bool Ipv6Mode;
bool LocalMode;
bool EnglishMode;
bool DryRunMode;
bool NoColorMode;
} }
ProgMode =
void
chsrc_set_target_group_mode ()
{ {
TargetGroupMode.in = true; .MeasureMode = false,
} .ResetMode = false,
.TargetGroupMode = false,
.Ipv6Mode = false,
bool ProgMode_CMD_Measure = false; .LocalMode = false,
bool ProgMode_CMD_Reset = false; .EnglishMode = false,
.DryRunMode = false,
.NoColorMode = false
/* 此时 chsrc_run() 不再是recipe中指定要运行的一个外部命令而是作为一个功能实现的支撑 */
bool ProgMode_Run_as_a_Service = false;
enum ChgType_t
{
ChgType_Auto,
ChgType_Reset,
ChgType_SemiAuto,
ChgType_Manual,
ChgType_Untested
}; };
enum ChgType_t ProgMode_ChgType = ChgType_Auto;
bool chsrc_in_reset_mode(){return ProgMode.ResetMode;}
/* 命令行选项 */ /* 命令行选项 */
bool CliOpt_IPv6 = false; bool CliOpt_IPv6 = false;
@ -89,6 +92,7 @@ bool CliOpt_InEnglish = false;
bool CliOpt_DryRun = false; bool CliOpt_DryRun = false;
bool CliOpt_NoColor = false; bool CliOpt_NoColor = false;
/** /**
* -local ** * -local **
* *
@ -106,6 +110,29 @@ bool CliOpt_NoColor = false;
* 3. poetry * 3. poetry
*/ */
bool ProgMode_CMD_Measure = false;
/* 此时 chsrc_run() 不再是recipe中指定要运行的一个外部命令而是作为一个功能实现的支撑 */
bool ProgMode_Run_as_a_Service = false;
enum ChgType_t
{
ChgType_Auto,
ChgType_Reset,
ChgType_SemiAuto,
ChgType_Manual,
ChgType_Untested
};
enum ChgType_t ProgMode_ChgType = ChgType_Auto;
#define Exit_OK 0 #define Exit_OK 0
#define Exit_Fatal 1 #define Exit_Fatal 1
#define Exit_Unknown 2 #define Exit_Unknown 2
@ -407,7 +434,7 @@ query_provider_exist (Source_t *sources, size_t size, char *target, char *input)
} }
/* if (xy_streql ("reset", input)) 不再使用这种方式 */ /* if (xy_streql ("reset", input)) 不再使用这种方式 */
if (ProgMode_CMD_Reset) if (chsrc_in_reset_mode())
{ {
char *msg = CliOpt_InEnglish ? "Will reset to the upstream's default source" : "将重置为上游默认源"; char *msg = CliOpt_InEnglish ? "Will reset to the upstream's default source" : "将重置为上游默认源";
say (msg); say (msg);
@ -692,7 +719,7 @@ int
select_mirror_autoly (Source_t *sources, size_t size, const char *target_name) select_mirror_autoly (Source_t *sources, size_t size, const char *target_name)
{ {
/* reset 时选择默认源 */ /* reset 时选择默认源 */
if (ProgMode_CMD_Reset) if (chsrc_in_reset_mode())
return 0; return 0;
if (!CliOpt_DryRun) if (!CliOpt_DryRun)
@ -815,12 +842,6 @@ source_has_empty_url (Source_t *source)
return source->url == NULL; return source->url == NULL;
} }
bool
is_reset_mode ()
{
return ProgMode_CMD_Reset;
}
/** /**
* @brief @var:source * @brief @var:source
@ -910,7 +931,7 @@ confirm_source (Source_t *source)
void void
chsrc_determine_chgtype (enum ChgType_t type) chsrc_determine_chgtype (enum ChgType_t type)
{ {
ProgMode_ChgType = is_reset_mode() ? ChgType_Reset : type; ProgMode_ChgType = chsrc_in_reset_mode() ? ChgType_Reset : type;
} }
@ -941,7 +962,7 @@ chsrc_determine_chgtype (enum ChgType_t type)
/** /**
* @param source NULL * @param source NULL
* *
* @param [g]ProgMode_ChgType * @dependency @gvar:ProgMode_ChgType
*/ */
void void
chsrc_conclude (Source_t *source) chsrc_conclude (Source_t *source)
@ -949,8 +970,7 @@ chsrc_conclude (Source_t *source)
hr(); hr();
// fprintf (stderr, "chsrc: now change type: %d\n", ProgMode_ChgType); // fprintf (stderr, "chsrc: now change type: %d\n", ProgMode_ChgType);
if (chsrc_in_reset_mode())
if (ProgMode_CMD_Reset || ChgType_Reset == ProgMode_ChgType)
{ {
// source_is_upstream (source) // source_is_upstream (source)
char *msg = CliOpt_InEnglish ? "Has been reset to the upstream default source" : "已重置为上游默认源"; char *msg = CliOpt_InEnglish ? "Has been reset to the upstream default source" : "已重置为上游默认源";