Skip to main content

changeset_git/repository/
remote.rs

1use crate::{Repository, Result};
2
3impl Repository {
4    /// # Errors
5    ///
6    /// Returns an error if the remote lookup fails.
7    pub fn remote_url(&self) -> Result<Option<String>> {
8        let Ok(remote) = self.inner.find_remote("origin") else {
9            return Ok(None);
10        };
11
12        Ok(remote.url().map(String::from))
13    }
14}
15
16#[cfg(test)]
17mod tests {
18    use super::*;
19    use crate::repository::tests::setup_test_repo;
20
21    #[test]
22    fn remote_url_returns_none_when_no_remote() -> anyhow::Result<()> {
23        let (_dir, repo) = setup_test_repo()?;
24
25        let url = repo.remote_url()?;
26
27        assert!(url.is_none());
28
29        Ok(())
30    }
31
32    #[test]
33    fn remote_url_returns_url_when_present() -> anyhow::Result<()> {
34        let (dir, repo) = setup_test_repo()?;
35
36        repo.inner
37            .remote("origin", "https://github.com/owner/repo")?;
38
39        let repository = Repository::open(dir.path())?;
40        let url = repository.remote_url()?;
41
42        assert_eq!(url.as_deref(), Some("https://github.com/owner/repo"));
43
44        Ok(())
45    }
46}