Skip to content

Commit 0284ba6

Browse files
committed
Add repo support
1 parent 37dbbd2 commit 0284ba6

1 file changed

Lines changed: 35 additions & 25 deletions

File tree

src/infra/core/src/remote_repository_registry_impl.rs

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,22 @@ impl RemoteRepositoryRegistryImpl {
3636
std::fs::create_dir_all(&repos_dir)?;
3737
Ok(Self::new(repos_dir))
3838
}
39+
40+
pub fn get_repository_file_path(&self, repo_name: &RepoName) -> Option<PathBuf> {
41+
let file_path = self.repos_dir.join(repo_name);
42+
43+
if !file_path.exists() {
44+
let all_repositories_stream = self.get_all_repositories();
45+
for repository_name in all_repositories_stream {
46+
if &repository_name == repo_name {
47+
return Some(self.repos_dir.join(repository_name));
48+
}
49+
}
50+
return None;
51+
}
52+
53+
Some(file_path)
54+
}
3955
}
4056

4157
////////////////////////////////////////////////////////////////////////////////////////
@@ -54,25 +70,22 @@ impl RemoteRepositoryRegistry for RemoteRepositoryRegistryImpl {
5470
}
5571

5672
fn get_repository(&self, repo_name: &RepoName) -> Result<RepositoryAccessInfo, GetRepoError> {
57-
let file_path = self.repos_dir.join(repo_name);
58-
59-
if !file_path.exists() {
60-
return Err(RepositoryNotFoundError {
61-
repo_name: repo_name.clone(),
62-
}
63-
.into());
73+
if let Some(file_path) = self.get_repository_file_path(repo_name) {
74+
let file = std::fs::File::open(file_path).int_err()?;
75+
let manifest: Manifest<RepositoryAccessInfo> =
76+
serde_yaml::from_reader(&file).int_err()?;
77+
assert_eq!(manifest.kind, "Repository");
78+
return Ok(manifest.content);
6479
}
6580

66-
let file = std::fs::File::open(&file_path).int_err()?;
67-
let manifest: Manifest<RepositoryAccessInfo> = serde_yaml::from_reader(&file).int_err()?;
68-
assert_eq!(manifest.kind, "Repository");
69-
Ok(manifest.content)
81+
Err(RepositoryNotFoundError {
82+
repo_name: repo_name.clone(),
83+
}
84+
.into())
7085
}
7186

7287
fn add_repository(&self, repo_name: &RepoName, mut url: Url) -> Result<(), AddRepoError> {
73-
let file_path = self.repos_dir.join(repo_name);
74-
75-
if file_path.exists() {
88+
if self.get_repository_file_path(repo_name).is_some() {
7689
return Err(RepositoryAlreadyExistsError {
7790
repo_name: repo_name.clone(),
7891
}
@@ -90,23 +103,20 @@ impl RemoteRepositoryRegistry for RemoteRepositoryRegistryImpl {
90103
content: RepositoryAccessInfo { url },
91104
};
92105

93-
let file = std::fs::File::create(&file_path).int_err()?;
106+
let file = std::fs::File::create(self.repos_dir.join(repo_name)).int_err()?;
94107
serde_yaml::to_writer(file, &manifest).int_err()?;
95108
Ok(())
96109
}
97110

98111
fn delete_repository(&self, repo_name: &RepoName) -> Result<(), DeleteRepoError> {
99-
let file_path = self.repos_dir.join(repo_name);
100-
101-
if !file_path.exists() {
102-
return Err(RepositoryNotFoundError {
103-
repo_name: repo_name.clone(),
104-
}
105-
.into());
112+
if let Some(file_path) = self.get_repository_file_path(repo_name) {
113+
std::fs::remove_file(file_path).int_err()?;
114+
return Ok(());
106115
}
107-
108-
std::fs::remove_file(&file_path).int_err()?;
109-
Ok(())
116+
Err(RepositoryNotFoundError {
117+
repo_name: repo_name.clone(),
118+
}
119+
.into())
110120
}
111121
}
112122

0 commit comments

Comments
 (0)