(project: &Project, path: &Path, ff_merge: bool)
| 67 | } |
| 68 | |
| 69 | pub fn update_project_remotes(project: &Project, path: &Path, ff_merge: bool) -> Result<(), AppError> { |
| 70 | let local: Repository = Repository::open(path).map_err(AppError::GitError)?; |
| 71 | for desired_remote in project.additional_remotes.clone().unwrap_or_default().into_iter().chain( |
| 72 | vec![crate::config::project::Remote { |
| 73 | name: "origin".to_string(), |
| 74 | git: project.git.to_owned(), |
| 75 | }] |
| 76 | .into_iter(), |
| 77 | ) { |
| 78 | let remote = local |
| 79 | .find_remote(&desired_remote.name) |
| 80 | .or_else(|_| local.remote(&desired_remote.name, &desired_remote.git))?; |
| 81 | |
| 82 | let mut remote = match remote.url() { |
| 83 | Some(url) if url == desired_remote.git => remote, |
| 84 | _ => { |
| 85 | local.remote_set_url(&desired_remote.name, &desired_remote.git)?; |
| 86 | local.find_remote(&desired_remote.name)? |
| 87 | } |
| 88 | }; |
| 89 | |
| 90 | update_remote(&mut remote)?; |
| 91 | } |
| 92 | |
| 93 | if ff_merge { |
| 94 | // error does not matter. fast forward not possible |
| 95 | let _ = fast_forward_merge(&local); |
| 96 | } |
| 97 | |
| 98 | Ok(()) |
| 99 | } |
| 100 | |
| 101 | fn fast_forward_merge(local: &Repository) -> Result<(), AppError> { |
| 102 | let head_ref = local.head()?; |
no test coverage detected