summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorGravatar Anshul Gupta <ansg191@anshulg.com> 2025-04-11 12:54:54 -0700
committerGravatar Anshul Gupta <ansg191@anshulg.com> 2025-04-11 12:57:13 -0700
commitc43c233c9b14e65d461405857c6e6c758cd9fb23 (patch)
treea2dc536661010dae8ed1e3dfc2a899476b4a2779 /src/main.c
parent11f44a70736de47ec7eca82860ed6780d273749e (diff)
downloadgithub-mirror-c43c233c9b14e65d461405857c6e6c758cd9fb23.tar.gz
github-mirror-c43c233c9b14e65d461405857c6e6c758cd9fb23.tar.zst
github-mirror-c43c233c9b14e65d461405857c6e6c758cd9fb23.zip
Allow for multiple owners and tokens
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c52
1 files changed, 35 insertions, 17 deletions
diff --git a/src/main.c b/src/main.c
index db11d5a..64c369f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -63,21 +63,8 @@ static int load_config(int argc, char **argv, struct config **cfg_out)
return 1;
}
-int main(int argc, char **argv)
+static int mirror_owner(const char *git_base, const struct github_cfg *cfg)
{
- curl_global_init(CURL_GLOBAL_DEFAULT);
-
- struct config *cfg = NULL;
- const int ret = load_config(argc, argv, &cfg);
- if (ret != 0 || !cfg)
- return ret;
-
- if (precheck_self(cfg)) {
- fprintf(stderr, "Precheck failed\n");
- config_free(cfg);
- return 1;
- }
-
const struct github_ctx ctx = {
.endpoint = cfg->endpoint,
.token = cfg->token,
@@ -98,13 +85,14 @@ int main(int argc, char **argv)
do {
if (github_client_list_user_repos(client, cfg->owner,
end_cursor, &res))
- return 1;
+ return -1;
for (size_t i = 0; i < res.repos_len; i++) {
printf("Repo: %s\t%s\n", res.repos[i].name,
res.repos[i].url);
const struct repo_ctx repo = {
+ .git_base = git_base,
.cfg = cfg,
.name = res.repos[i].name,
.url = res.repos[i].url,
@@ -112,7 +100,7 @@ int main(int argc, char **argv)
};
if (git_mirror_repo(&repo) != 0) {
fprintf(stderr, "Failed to mirror repo\n");
- status = 1;
+ status = -1;
break;
}
}
@@ -124,8 +112,38 @@ int main(int argc, char **argv)
} while (res.has_next_page);
free(end_cursor);
- github_client_free(client);
free(login);
+ github_client_free(client);
+ return status;
+}
+
+int main(int argc, char **argv)
+{
+ curl_global_init(CURL_GLOBAL_DEFAULT);
+
+ struct config *cfg = NULL;
+ const int ret = load_config(argc, argv, &cfg);
+ if (ret != 0 || !cfg)
+ return ret;
+
+ if (precheck_self(cfg)) {
+ fprintf(stderr, "Precheck failed\n");
+ config_free(cfg);
+ return 1;
+ }
+
+ int status = 0;
+ struct github_cfg *owner = cfg->head;
+ while (owner) {
+ printf("Mirroring owner: %s\n", owner->owner);
+ if (mirror_owner(cfg->git_base, owner)) {
+ fprintf(stderr, "Failed to mirror owner: %s\n",
+ owner->owner);
+ status = 1;
+ }
+ owner = owner->next;
+ }
+
config_free(cfg);
curl_global_cleanup();
return status;