mirrors: auto-generate default mirror.ini with sz+main mirrors when missing (v0.2.6)

这个提交包含在:
JGZYES
2026-09-01 20:46:10 +08:00
父节点 73c97e3801
当前提交 8c37b8a932
修改 3 个文件,包含 27 行新增0 行删除
+2
查看文件
@@ -29,6 +29,7 @@
#include "repo.h" #include "repo.h"
#include "install.h" #include "install.h"
#include "pdm.h" #include "pdm.h"
#include "mirrors.h"
typedef struct { typedef struct {
char *registry_url; /* package registry base URL */ char *registry_url; /* package registry base URL */
@@ -90,6 +91,7 @@ static const char *mirror_section_name(void) {
static void load_mirror(PmmConfig *cfg, MirrorSel *sel) { static void load_mirror(PmmConfig *cfg, MirrorSel *sel) {
char dir[1024]; char dir[1024];
pmm_config_dir(dir, sizeof(dir)); pmm_config_dir(dir, sizeof(dir));
pmm_ensure_default_mirror(dir);
memset(sel, 0, sizeof(*sel)); memset(sel, 0, sizeof(*sel));
char *path = pmm_find_config(dir, "mirror"); char *path = pmm_find_config(dir, "mirror");
if (!path) return; if (!path) return;
+23
查看文件
@@ -23,9 +23,32 @@ static int cmp_priority(const void *a, const void *b) {
return ma->priority - mb->priority; return ma->priority - mb->priority;
} }
/* Write a default mirror.ini (built-in sz + main mirror) when no mirror
* config exists, so a fresh install works out-of-the-box from both mirrors. */
void pmm_ensure_default_mirror(const char *dir) {
if (pmm_find_config(dir, "mirror")) return; /* user already has a config */
char path[1200];
snprintf(path, sizeof(path), "%s/mirror.ini", dir);
FILE *f = fopen(path, "w");
if (!f) return;
fputs("# PMM default mirror.ini (auto-generated)\n"
"# priority 越小越优先;default=true 为未显式指定时的默认镜像。\n"
"#\n"
"[sz]\n"
"registry = https://sz.pmm.parlz.com/mirror/packages\n"
"priority = 1\n"
"default = true\n"
"\n"
"[main]\n"
"registry = https://pmm.parlz.com/mirror/packages\n"
"priority = 20\n", f);
fclose(f);
}
MirrorList *mirrors_load(void) { MirrorList *mirrors_load(void) {
char dir[1024]; char dir[1024];
pmm_config_dir(dir, sizeof(dir)); pmm_config_dir(dir, sizeof(dir));
pmm_ensure_default_mirror(dir);
char *path = pmm_find_config(dir, "mirror"); char *path = pmm_find_config(dir, "mirror");
if (!path) return calloc(1, sizeof(MirrorList)); if (!path) return calloc(1, sizeof(MirrorList));
Ini *ini = ini_load(path); Ini *ini = ini_load(path);
+2
查看文件
@@ -18,6 +18,8 @@ typedef struct {
/* Load mirrors from ~/.pmm/mirror.ini / mirror.conf, sorted by priority. */ /* Load mirrors from ~/.pmm/mirror.ini / mirror.conf, sorted by priority. */
MirrorList *mirrors_load(void); MirrorList *mirrors_load(void);
void mirrors_free(MirrorList *list); void mirrors_free(MirrorList *list);
/* If no mirror config exists, write a default mirror.ini (sz + main). */
void pmm_ensure_default_mirror(const char *dir);
/* Mirror whose name matches the active selection in pmm config, or NULL. */ /* Mirror whose name matches the active selection in pmm config, or NULL. */
Mirror *mirrors_active(const MirrorList *list, const char *active_name); Mirror *mirrors_active(const MirrorList *list, const char *active_name);