@@ -132,38 +132,58 @@ private List<RepositoryInfo> getRepositoriesInDir(final File projDir) {
132
132
return new ArrayList <>(histGuru .addRepositories (new File []{projDir }, env .getIgnoredNames ()));
133
133
}
134
134
135
+ private Project disableProject (String projectName ) {
136
+ Project project = env .getProjects ().get (projectName );
137
+ if (project == null ) {
138
+ throw new IllegalStateException ("cannot get project \" " + projectName + "\" " );
139
+ }
140
+
141
+ // Remove the project from searches so no one can trip over incomplete index data.
142
+ project .setIndexed (false );
143
+
144
+ return project ;
145
+ }
146
+
135
147
@ DELETE
136
148
@ Path ("/{project}" )
137
149
public void deleteProject (@ PathParam ("project" ) final String projectName )
138
- throws IOException , HistoryException {
139
-
140
- Project proj = env .getProjects ().get (projectName );
141
- if (proj == null ) {
142
- throw new IllegalStateException ("cannot get project \" " + projectName + "\" " );
143
- }
150
+ throws HistoryException {
144
151
152
+ Project project = disableProject (projectName );
145
153
logger .log (Level .INFO , "deleting configuration for project {0}" , projectName );
146
154
155
+ // Delete index data associated with the project.
156
+ deleteProjectData (projectName );
157
+
147
158
// Remove the project from its groups.
148
- for (Group group : proj .getGroups ()) {
149
- group .getRepositories ().remove (proj );
150
- group .getProjects ().remove (proj );
159
+ for (Group group : project .getGroups ()) {
160
+ group .getRepositories ().remove (project );
161
+ group .getProjects ().remove (project );
151
162
}
152
163
153
164
// Now remove the repositories associated with this project.
154
- List <RepositoryInfo > repos = env .getProjectRepositoriesMap ().get (proj );
165
+ List <RepositoryInfo > repos = env .getProjectRepositoriesMap ().get (project );
155
166
if (repos != null ) {
156
167
env .getRepositories ().removeAll (repos );
157
168
}
158
- env .getProjectRepositoriesMap ().remove (proj );
169
+ env .getProjectRepositoriesMap ().remove (project );
159
170
160
- env .getProjects ().remove (projectName , proj );
171
+ env .getProjects ().remove (projectName , project );
161
172
162
173
// Prevent the project to be included in new searches.
163
174
env .refreshSearcherManagerMap ();
175
+ }
164
176
165
- // Lastly, remove data associated with the project.
177
+ @ DELETE
178
+ @ Path ("/{project}/data" )
179
+ public void deleteProjectData (@ PathParam ("project" ) String projectName ) throws HistoryException {
180
+
181
+ Project project = disableProject (projectName );
166
182
logger .log (Level .INFO , "deleting data for project {0}" , projectName );
183
+
184
+ List <RepositoryInfo > repos = env .getProjectRepositoriesMap ().get (project );
185
+
186
+ // Delete index and xrefs.
167
187
for (String dirName : new String []{IndexDatabase .INDEX_DIR , IndexDatabase .XREF_DIR }) {
168
188
java .nio .file .Path path = Paths .get (env .getDataRootPath (), dirName , projectName );
169
189
try {
@@ -172,6 +192,8 @@ public void deleteProject(@PathParam("project") final String projectName)
172
192
logger .log (Level .WARNING , "Could not delete {0}" , path .toString ());
173
193
}
174
194
}
195
+
196
+ // Delete history index.
175
197
HistoryGuru guru = HistoryGuru .getInstance ();
176
198
guru .removeCache (repos .stream ().
177
199
map (x -> {
@@ -187,8 +209,9 @@ public void deleteProject(@PathParam("project") final String projectName)
187
209
// {@code removeCache()} will return nothing.
188
210
return "" ;
189
211
}
190
- }).collect (Collectors .toSet ()));
212
+ }).filter ( x -> ! x . isEmpty ()). collect (Collectors .toSet ()));
191
213
214
+ // Delete suggester data.
192
215
suggester .delete (projectName );
193
216
}
194
217
0 commit comments