git_api/
repo.rs

1pub use git2::{Error, Repository};
2
3/// 获取仓库的远程源
4pub fn repo_remotes(repo: &Repository) -> Result<Vec<(String, String)>, Error> {
5    let remotes = repo.remotes()?;
6    let result = remotes
7        .iter()
8        .map(|remote_name| {
9            let name = remote_name.unwrap_or_default().to_string();
10            let remote = repo.find_remote(&name).unwrap();
11            let url = remote.url().unwrap().into();
12            (name, url)
13        })
14        .collect();
15    Ok(result)
16}
17
18/// 获取仓库当前分支名
19pub fn repo_current_branch(repo: &Repository) -> Result<Option<String>, Error> {
20    let head = repo.head()?;
21    if head.is_branch() {
22        let name = head.name().map(|it| it.replacen("refs/heads/", "", 1));
23        Ok(name)
24    } else {
25        Ok(None)
26    }
27}