changeset_git/repository/
remote.rs1use crate::{Repository, Result};
2
3impl Repository {
4 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}