Skip to content

Commit d370c17

Browse files
committed
Fix repositoryRoots getting out of sync
1 parent d6291e9 commit d370c17

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

src/org/opensolaris/opengrok/history/HistoryGuru.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -427,11 +427,7 @@ private Collection<RepositoryInfo> addRepositories(File[] files,
427427
}
428428

429429
repoList.add(new RepositoryInfo(repository));
430-
String repoDirectoryName = repository.getDirectoryName();
431-
File repoDirectoryFile = new File(repoDirectoryName);
432-
String repoDirParent = repoDirectoryFile.getParent();
433-
repositoryRoots.put(repoDirParent, "");
434-
repositories.put(repoDirectoryName, repository);
430+
putRepository(repository);
435431

436432
// @TODO: Search only for one type of repository - the one found here
437433
if (recursiveSearch && repository.supportsSubRepositories()) {
@@ -882,6 +878,11 @@ public void removeRepositories(Collection<String> repos) {
882878
for (String repo : repos) {
883879
repositories.remove(repo);
884880
}
881+
882+
// Re-map the repository roots.
883+
repositoryRoots.clear();
884+
List<Repository> ccopy = new ArrayList<>(repositories.values());
885+
ccopy.forEach((repo) -> { putRepository(repo); });
885886
}
886887

887888
/**set
@@ -923,6 +924,7 @@ public void invalidateRepositories(Collection<? extends RepositoryInfo> repos, L
923924
*/
924925
public void invalidateRepositories(Collection<? extends RepositoryInfo> repos) {
925926
if (repos == null || repos.isEmpty()) {
927+
repositoryRoots.clear();
926928
repositories.clear();
927929
return;
928930
}
@@ -985,11 +987,25 @@ public void run() {
985987
}
986988
executor.shutdown();
987989

990+
repositoryRoots.clear();
988991
repositories.clear();
989-
repositories.putAll(newrepos);
992+
newrepos.forEach((_key, repo) -> { putRepository(repo); });
990993

991994
if (verbose) {
992995
elapsed.report(LOGGER, "done invalidating repositories");
993996
}
994997
}
998+
999+
/**
1000+
* Adds the specified {@code repository} to this instance's repository map
1001+
* and repository-root map (if not already there).
1002+
* @param repository a defined instance
1003+
*/
1004+
private void putRepository(Repository repository) {
1005+
String repoDirectoryName = repository.getDirectoryName();
1006+
File repoDirectoryFile = new File(repoDirectoryName);
1007+
String repoDirParent = repoDirectoryFile.getParent();
1008+
repositoryRoots.put(repoDirParent, "");
1009+
repositories.put(repoDirectoryName, repository);
1010+
}
9951011
}

0 commit comments

Comments
 (0)