diff options
| author | Your Name <you@example.com> | 2026-05-26 20:38:49 +0530 |
|---|---|---|
| committer | Your Name <you@example.com> | 2026-05-26 20:38:49 +0530 |
| commit | 7b1b36b8c7e448d1d170c8c6e1f88bb766163fbb (patch) | |
| tree | 51fa521b7856423ce586077e5e3b045af3694220 /src/git_mirror.rs | |
| parent | e435f7d7b4ad4e4b1d3c21c35df5f41ffd642376 (diff) | |
Fix push_target remote reuse and non-fatal per-repo errors
- git_mirror: reuse existing push_target remote via remote_set_url
instead of failing on 'remote already exists' on subsequent cycles
- mirror_cycle: catch per-repo errors instead of propagating with ?
so one failed clone doesn't abort the remaining 87 repos
- Add PLAN.md with bug tracking checklist
Diffstat (limited to 'src/git_mirror.rs')
| -rw-r--r-- | src/git_mirror.rs | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/git_mirror.rs b/src/git_mirror.rs index 47c0442..6866de3 100644 --- a/src/git_mirror.rs +++ b/src/git_mirror.rs | |||
| @@ -134,7 +134,18 @@ impl GitMirror { | |||
| 134 | let repo = git2::Repository::open(repo_path) | 134 | let repo = git2::Repository::open(repo_path) |
| 135 | .with_context(|| format!("failed to open bare repo at {:?}", repo_path))?; | 135 | .with_context(|| format!("failed to open bare repo at {:?}", repo_path))?; |
| 136 | 136 | ||
| 137 | let mut remote = repo.remote("push_target", target_url)?; | 137 | let remote_name = "push_target"; |
| 138 | |||
| 139 | match repo.find_remote(remote_name) { | ||
| 140 | Ok(_) => { | ||
| 141 | repo.remote_set_url(remote_name, target_url)?; | ||
| 142 | } | ||
| 143 | Err(_) => { | ||
| 144 | repo.remote(remote_name, target_url)?; | ||
| 145 | } | ||
| 146 | } | ||
| 147 | |||
| 148 | let mut remote = repo.find_remote(remote_name)?; | ||
| 138 | 149 | ||
| 139 | let mut callbacks = RemoteCallbacks::new(); | 150 | let mut callbacks = RemoteCallbacks::new(); |
| 140 | callbacks.credentials(|_url, _username, _allowed| git2::Cred::default()); | 151 | callbacks.credentials(|_url, _username, _allowed| git2::Cred::default()); |