]> source.dussan.org Git - jgit.git/commit
Remove repository from cache when it's closed 81/56281/3
authorHugo Arès <hugo.ares@ericsson.com>
Fri, 18 Sep 2015 18:05:23 +0000 (14:05 -0400)
committerMatthias Sohn <matthias.sohn@sap.com>
Thu, 7 Apr 2016 11:00:50 +0000 (13:00 +0200)
commit7d2b3b9e25a430241a2d277e0cb222ad40cd0c2c
tree15157f6150889fb24070b249f300dfa6086121d6
parent53ea86cd7be3859ff741ea2b9760396ffabf5fe0
Remove repository from cache when it's closed

RepositoryCache has 2 methods to remove a repository from the cache but
they are never called when a repository is closed. Users of the cache
were expected to call one of those 2 methods but how could they have
called them at proper time without having visibility of the repository
usage count.

Ideally, I would have reworked the RepositoryCache to wrap any
repository it opens in a class that would be responsible to unregister
them from the cache when it's really closed, i.e. when usage counter
reaches 0. The problem preventing the wrapping solution is the
RepositoryCache.register method that allows to register an already
opened repository in the cache. Such repositories cannot be wrapped
because callers are still holding a reference on the unwrapped
repository.

Document that RepositoryCache.close method is removing the repository
from the cache as well as closing it and rework
RepositoryCache.unregister method to only remove the repository from the
cache. Use the latter to unregister repository when Repository.doClose
is getting executed.

Change-Id: Ia364816e4da8d7b6cfa72f10758ca31aa8a1f9db
Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryCacheTest.java
org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java
org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryCache.java