@@ -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