summaryrefslogtreecommitdiff
path: root/src/git.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/git.c')
-rw-r--r--src/git.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/git.c b/src/git.c
index 75f9888..4dc9c97 100644
--- a/src/git.c
+++ b/src/git.c
@@ -251,6 +251,62 @@ static int create_git_path(const struct repo_ctx *ctx)
}
/**
+ * Updates the mirror URL of the git repository at the specified path.
+ * @param path Full path to the git repository
+ * @param ctx Context containing the repository information
+ * @return 0 on success, -1 on error
+ */
+static int update_mirror_url(const char *path, const struct repo_ctx *ctx)
+{
+ // Prepare the URL
+ char *url = prepare_git_url(ctx->url, ctx->username, ctx->token);
+ if (!url) {
+ perror("prepare_git_url");
+ return -1;
+ }
+
+ const pid_t pid = fork();
+ if (pid < 0) {
+ perror("fork");
+ return -1;
+ }
+
+ if (pid == 0) {
+ // Child process
+ char *args[8];
+ int i = 0;
+ args[i++] = "git";
+ args[i++] = "--git-dir";
+ args[i++] = (char *) path;
+ args[i++] = "remote";
+ args[i++] = "set-url";
+ args[i++] = "origin";
+ args[i++] = url;
+ args[i] = NULL;
+
+ execvp("git", args);
+ perror("execvp");
+ _exit(127); // execvp only returns on error
+ }
+ free(url);
+
+ int status;
+ pid_t result;
+ while ((result = waitpid(pid, &status, 0)) == -1 && errno == EINTR) {
+ }
+ if (result == -1) {
+ perror("waitpid");
+ return -1;
+ }
+
+ if (WIFEXITED(status) && WEXITSTATUS(status) == 0)
+ return 0; // Success
+ fprintf(stderr, "Error: git remote set-url failed with status %d\n",
+ WEXITSTATUS(status));
+ return -1; // Error occurred
+}
+
+/**
* Updates the git repository at the specified path from the remote.
* @param path Full path to the git repository
* @param quiet Suppress output if non-zero
@@ -314,6 +370,11 @@ int git_mirror_repo(const struct repo_ctx *ctx, int quiet)
// Repo exists, so we can just update it
if (!quiet)
printf("Repo already exists, updating...\n");
+ if (update_mirror_url(path, ctx) == -1) {
+ perror("update_mirror_url");
+ ret = -1;
+ goto end;
+ }
if (update_mirror(path, quiet) == -1) {
perror("update_mirror");
ret = -1;
red/possibly-2732'>jarred/possibly-2732 Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
path: root/bench/scanner (unfollow)
AgeCommit message (Expand)AuthorFilesLines
2023-10-09fix(AbortSignal/fetch) fix AbortSignal.timeout, fetch lock behavior and fetch...Gravatar Ciro Spaciari 29-61/+303
2023-10-09Fix npm tag for canary bun-types, againGravatar Ashcon Partovi 2-56/+10
2023-10-09Add Fedora build instructions to development.md (#6359)Gravatar otterDeveloper 1-0/+10
2023-10-09added commands (#6314)Gravatar babar 1-1/+2
2023-10-09Update README.md (#6291)Gravatar TPLJ 1-1/+1
2023-10-09docs: fixing a couple typos (#6331)Gravatar Michael Di Prisco 2-2/+2
2023-10-09fix: support uint8 exit code range (#6303)Gravatar Liz 2-2/+11
2023-10-09Fix array variables preview in debugger (#6379)Gravatar 2hu 1-1/+4
2023-10-07feat(KeyObject) (#5940)Gravatar Ciro Spaciari 106-67/+9342
2023-10-07Exclude more filesGravatar Jarred Sumner 1-1/+1
2023-10-07Exclude more filesGravatar Jarred Sumner 1-1/+2
2023-10-07Update settings.jsonGravatar Jarred Sumner 1-1/+2
2023-10-07Update settings.jsonGravatar Jarred Sumner 1-2/+3
2023-10-06fix a couple install testsGravatar Dylan Conway 1-8/+8
2023-10-06formatGravatar Dylan Conway 1-1/+2
2023-10-06Fix memory leak in fetch() (#6350)Gravatar Jarred Sumner 1-2/+0
2023-10-06[types] allow onLoad plugin callbacks to return undefined (#6346)Gravatar Silver 1-1/+1
2023-10-06docs: `file.stream()` is not a promise (#6337)Gravatar Paul Nodet 1-1/+1